objInp.jsp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619
  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. <%-- onclick='ss.display.reset("dialog",this,"<ss:serv name='${saveAndCommit}' dest='${saveAndCommitDest}' parm='${saveAndCommitParam}'/>",${saveAndCommitwidth},${saveAndCommitheight},${saveAndCommitminheight},${saveAndCommitmaxheight});'--%>
  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].name}"
  81. onclick='ss.form.submit({url:"<ss:serv name='${changeNoFunctions[0].service}' 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].service}' 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.name}',<%-- 按钮名 --%>
  101. callback: function(){
  102. ss.form.submit({url:"<ss:serv name='${item.service}' 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.name}"
  109. onclick='ss.form.submit({url:"<ss:serv name='${item.service}' 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. // function objectPickMockAjax(url) {
  198. // // return null;
  199. // return new Promise((resolve) => {
  200. // setTimeout(() => {
  201. // resolve([
  202. // // { label: '男', value: '1' },
  203. // // { label: '女', value: '2' }
  204. // ]);
  205. // }, 1);
  206. // });
  207. // }
  208. // // 模拟 Ajax 请求的工具函数
  209. // const mockAjax = {
  210. // // 缓存数据,避免重复请求
  211. // _cache: null,
  212. //
  213. // // 获取完整数据
  214. // async getData() {
  215. // if (this._cache) return this._cache;
  216. // const response = await fetch("/newUI/ss/js/level.json");
  217. // this._cache = await response.json();
  218. // return this._cache;
  219. // },
  220. //
  221. // // 获取所有省份
  222. // async getProvinces() {
  223. // const data = await this.getData();
  224. // return data.map((item) => ({
  225. // label: item.name,
  226. // value: item.code,
  227. // }));
  228. // },
  229. //
  230. // // 根据省份代码获取城市
  231. // async getCities(provinceCode) {
  232. // const data = await this.getData();
  233. // const province = data.find((p) => p.code === provinceCode);
  234. // if (!province || !province.children) return [];
  235. //
  236. // return province.children
  237. // .filter((item) => item.city) // 确保是市级数据
  238. // .map((item) => ({
  239. // label: item.name,
  240. // value: item.code,
  241. // }));
  242. // },
  243. //
  244. // // 根据城市代码获取区县
  245. // async getDistricts(cityCode) {
  246. // const data = await this.getData();
  247. // for (const province of data) {
  248. // if (!province.children) continue;
  249. // const city = province.children.find((c) => c.code === cityCode);
  250. // if (city && city.children) {
  251. // return city.children.map((item) => ({
  252. // label: item.name,
  253. // value: item.code,
  254. // }));
  255. // }
  256. // }
  257. // return [];
  258. // },
  259. // // 模拟专业数据
  260. // getMajors() {
  261. // return new Promise((resolve) => {
  262. // setTimeout(() => {
  263. // resolve([
  264. // { label: '计算机科学与技术', value: '08010000' }, // 补齐8位
  265. // { label: '软件工程', value: '08020000' },
  266. // { label: '网络工程', value: '08030000' }
  267. // ]);
  268. // }, 1000);
  269. // });
  270. // },
  271. // // 模拟班级数据
  272. // getClasses(majorCode) {
  273. // // majorCode 会是 '08010000' 这样的格式
  274. //
  275. // const classData = {
  276. // '08010000': [
  277. // { label: '计科1班', value: '08010001' },
  278. // { label: '计科2班', value: '08010002' }
  279. // ],
  280. // '08020000': [
  281. // { label: '软件1班', value: '08020001' },
  282. // { label: '软件2班', value: '08020002' }
  283. // ],
  284. // '08030000': [
  285. // { label: '网络1班', value: '08030001' },
  286. // { label: '网络2班', value: '08030002' }
  287. // ]
  288. // };
  289. //
  290. // return new Promise((resolve) => {
  291. // setTimeout(() => {
  292. // resolve(classData[majorCode] || []);
  293. // }, 1000);
  294. // });
  295. // }
  296. // };
  297. // const doCascade = async function({
  298. // children = [],
  299. // url,
  300. // vm,
  301. // prefix = 'Option',
  302. // loadData = () => {},
  303. // value, // 添加 value 参数用于测试阶段
  304. // mode = 1
  305. // }) {
  306. // try {
  307. // // 清空所有子级的值和选项
  308. // children.forEach(child => {
  309. // vm[child] = '';
  310. //
  311. // vm[child+'Option'] = [];
  312. // });
  313. //
  314. // // 测试阶段:使用 loadData 加载模拟数据
  315. // if (loadData && value) {
  316. // const data = await loadData(value);
  317. //
  318. // // mode=2 时,所有 children 都是同级的,都使用相同的数据
  319. // if (mode == '2') {
  320. //
  321. // children.forEach(child => {
  322. // vm[child+'Option'] = data;
  323. // });
  324. // } else {
  325. // // 原有的处理方式,只设置第一个子级的数据
  326. // if (children.length > 0) {
  327. // vm[children[0]+'Option'] = data;
  328. // }
  329. // }
  330. // return;
  331. // }
  332. //
  333. // // 正式环境:使用 url 加载数据(暂时不用)
  334. // if (url) {
  335. // const response = await fetch(url);
  336. // const data = await response.json();
  337. // if (children.length > 0) {
  338. // vm[children[0]+'Option'] = data;
  339. // }
  340. // }
  341. // } catch (error) {
  342. // console.log('级联数据加载失败:', error);
  343. // if (children.length > 0) {
  344. // vm[children[0]+'Option'] = [];
  345. // }
  346. // }
  347. // };
  348. // // 定义 objPickerLoad 函数
  349. // async function objPickerLoad(url, optName) {
  350. // const result = await objectPickMockAjax(url);
  351. // return result;
  352. // }
  353. //
  354. // // 省市区
  355. // async function ccpsingleFirstLoad(url) {
  356. // const provinces = await mockAjax.getProvinces();
  357. // return provinces;
  358. // }
  359. // async function getCcpsingleValue(children,value) {
  360. // if (children.length == 2) {
  361. // const result = await mockAjax.getCities(value);
  362. // return result;
  363. // }else if (children.length == 1) {
  364. // const result = await mockAjax.getDistricts(value);
  365. // return result;
  366. // }
  367. // }
  368. const data = {};
  369. if (window.SS.dom.formElemConfig) {
  370. Object.entries(window.SS.dom.formElemConfig).forEach(([key, config]) => {
  371. data[key] = config.val;
  372. // 处理 objPicker
  373. if (config.type === window.SS.dom.TYPE.OBJPICKER) {
  374. data[key + "ObjPicker"] = true;
  375. data[key + "Option"] = [];
  376. data[key + "Url"] = config.url;
  377. }
  378. // 处理级联选择器(hidden)
  379. // if (config.type === window.SS.dom.TYPE.CCPSINGLE) {
  380. // config.objP.forEach(function (item, index) {
  381. // data[item] = "";
  382. // data[item + "Option"] = [];
  383. // data[item + "CCPSINGLE"] = true;
  384. // data[item + "objP"] = config.objP;
  385. // // 第一个字段需要加载
  386. // if (index === 0) {
  387. // data[item + "InitLoad"] = true;
  388. // }
  389. // })
  390. // // 处理级联选择器的url
  391. // for(let key in config.param) {
  392. // if(config.param[key].url) {
  393. // data[key + "Url"] = config.param[key].url;
  394. // }
  395. // }
  396. // }
  397. // 处理级联,多个
  398. // if (config.type === window.SS.dom.TYPE.CCPMUTIPLE) {
  399. // config.objP.forEach(function (item, index) {
  400. // data[item] = "1";
  401. //
  402. // data[item + "Option"] = [];
  403. // data[item + "CCPMUTIPLE"] = true;
  404. // data[item + "objP"] = config.objP;
  405. // // 第一个字段需要加载
  406. // if (index === 0) {
  407. // data[item + "InitLoad"] = true;
  408. //
  409. // }
  410. // })
  411. // // 处理级联选择器的url
  412. // for(let key in config.param) {
  413. // if(config.param[key].url) {
  414. // data[key + "Url"] = config.param[key].url;
  415. // data[key] = config.param[key].value;
  416. // }
  417. // }
  418. // }
  419. // 处理datepicker
  420. if (config.type === window.SS.dom.TYPE.DATE) {
  421. data[key + "Mode"] = config.mode
  422. console.log(data[key + "Mode"]);
  423. }
  424. // 处理富文本编辑器
  425. if (config.type === window.SS.dom.TYPE.RICHTEXT) {
  426. data[key + "Url"] = config.val;
  427. data[key + "editor"] = config.val;
  428. }
  429. // 处理onoff
  430. if (config.type === window.SS.dom.TYPE.ONOFFBTN) {
  431. data[key] = config.val.split('|');
  432. }
  433. if (config.type === window.SS.dom.TYPE.IMG) {
  434. data[key + "showUrl"] = config.showUrl;
  435. data[key + "uploadUrl"] = config.uploadUrl;
  436. }
  437. });
  438. }
  439. // console.log("data",data);
  440. SS.ready(function () {
  441. if(ss.dom.formVmConfig)//加判断条件,页面有校验配置时,才运行下面的 Ben(20251206)
  442. for (let i = 0; i < ss.dom.formVmConfig.length; i++) {
  443. const item = ss.dom.formVmConfig[i];
  444. // 处理每个元素
  445. let rule = item.rule;
  446. let field = item.field;
  447. let param = item.param;
  448. window.ssVm.add(rule, field, param);
  449. }
  450. // //下面是写死的
  451. // ssVm.add("ss.commonValidator.notNull", ["xm"], {
  452. // msgPrfx: "姓名",
  453. // });
  454. // ssVm.add("ss.commonValidator.notNull", ["ywm"], {
  455. // msgPrfx: "英文名",
  456. // });
  457. // ssVm.add("ss.commonValidator.notNull", ["zh"], {
  458. // msgPrfx: "帐号",
  459. // });
  460. // ssVm.add("ss.commonValidator.notNull", ["ryh"], {
  461. // msgPrfx: "人员号",
  462. // });
  463. // ssVm.add("ss.commonValidator.notNull", ["xbm"], {
  464. // msgPrfx: "性别",
  465. // });
  466. // ssVm.add("ss.commonValidator.notNull", ["zzmmm"], {
  467. // msgPrfx: "政治面貌",
  468. // });
  469. // ssVm.add("ss.commonValidator.notNull", ["rylbm"], {
  470. // msgPrfx: "人员类别",
  471. // });
  472. // ssVm.add("ss.commonValidator.notNull", ["gwid"], {
  473. // msgPrfx: "岗位",
  474. // });
  475. // ssVm.add("ss.commonValidator.notNull", ["csrq"], {
  476. // msgPrfx: "出生日期",
  477. // });
  478. // ssVm.add("ss.commonValidator.notNull", ["csrq"], {
  479. // msgPrfx: "出生日期",
  480. // });
  481. //
  482. // ssVm.add("ss.commonValidator.notNull", ["mswj"], {
  483. // msgPrfx: "描述",
  484. // });
  485. // 在这里直接初始化,不需要等待 load 事件
  486. window.SS.dom.initializeFormApp({
  487. el: "#app",
  488. data(){
  489. return data;
  490. },
  491. methods: {
  492. onChange(value){
  493. // console.log(value)
  494. },
  495. myChange(value){
  496. // alert(value);
  497. // console('@@@myChange:'+value);
  498. },
  499. save(){
  500. $('form').attr('action','<ss:serv name='${save}' dest='${saveDest}' parm='${saveParam}'/>');//name:${save},dest='${saveDest}',parm='${saveParam}'
  501. $('form').submit();
  502. // wd.display.changeFormAction("<ss:serv name='${save}' dest='${saveDest}' parm='${saveParam}'/>",this,${savewidth},${saveheight},${saveminheight},${savemaxheight});
  503. }
  504. },
  505. mounted() {
  506. const self = this;
  507. // 在这里可以使用 Vue 实例
  508. Object.entries(this.$data).forEach(([key, value]) => {
  509. // 处理 objPicker
  510. if (key.includes('ObjPicker')) {
  511. // const originalKey = key.replace('ObjPicker', '');
  512. // if (value) {
  513. // objPickerLoad(value, key).then(result => {
  514. // this[originalKey+'Option'] = result;
  515. // });
  516. // }
  517. }
  518. // 处理 CCPSINGLE
  519. if (key.includes('CCPSINGLE')) {
  520. const originalKey = key.replace('CCPSINGLE', '');
  521. const self = this;
  522. // 只有第一个字段需要自动加载
  523. if (this[originalKey + "InitLoad"]) {
  524. ccpsingleFirstLoad(this[originalKey + "Url"], key).then(result =>{
  525. this[originalKey+'Option'] = result;
  526. })
  527. }
  528. // 绑定 change 事件
  529. this[originalKey + 'Change'] = async function(value) {
  530. const objP = self[originalKey + "objP"] || [];
  531. const currentIndex = objP.indexOf(originalKey);
  532. const children = currentIndex < 0 || currentIndex >= objP.length - 1 ? [] : objP.slice(currentIndex + 1);
  533. await doCascade({
  534. children,
  535. value,
  536. vm: self,
  537. loadData: (value) => getCcpsingleValue(children,value),
  538. });
  539. };
  540. }
  541. // 如果是 CCPSINGLE 类型
  542. if (key.includes('CCPMUTIPLE')) {
  543. const originalKey = key.replace('CCPMUTIPLE', '');
  544. const self = this;
  545. // 只有第一个字段需要自动加载
  546. if (this[originalKey + "InitLoad"]) {
  547. ccpsingleFirstLoad(this[originalKey + "Url"], key).then(result =>{
  548. this[originalKey+'Option'] = result;
  549. })
  550. }
  551. // 绑定 change 事件
  552. this[originalKey + 'Change'] = async function(value) {
  553. const objP = self[originalKey + "objP"] || [];
  554. const currentIndex = objP.indexOf(originalKey);
  555. const children = currentIndex < 0 || currentIndex >= objP.length - 1 ? [] : objP.slice(currentIndex + 1);
  556. await doCascade({
  557. children,
  558. value,
  559. vm: self,
  560. loadData: (value) => getCcpsingleValue(children,value),
  561. });
  562. };
  563. }
  564. // 加载editor
  565. // if (key.includes('editor')) {
  566. // const originalKey = key.replace('editor', '');
  567. // if (this[key]) {
  568. // fetch(this[key])
  569. // .then(res => res.text()) // 使用 text() 而不是 data
  570. // .then(html => {
  571. // this[originalKey] = html;
  572. // console.log(this[originalKey])
  573. // })
  574. // .catch(error => {
  575. // console.error("获取HTML文件失败:", error);
  576. // });
  577. // }
  578. // }
  579. });
  580. }
  581. })
  582. });
  583. </script>
  584. <%--<script type="text/javascript">--%>
  585. <%-- tokenCleanser("<ss:serv name='ss.clearPageToken'/>", {tokenList:"<%= pageContext.getAttribute(ss.page.PageC.PAGE_tokenList)%>"});--%>
  586. <%--</script>--%>