objInp.jsp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615
  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. </style>
  28. </head>
  29. <body class="env-input-body">
  30. <form method="post" id="app" class="form-container">
  31. <%-- 改为 <data@ss name="inp"/>。Lin
  32. <tab@ss name="include_input"/> --%>
  33. <ss:data name='inp'/>
  34. <div class="content-box fit-height-content">
  35. <jsp:include page="${include_input}" flush="true"/>
  36. <%-- <jsp:include page="/page/2ry_inp.jsp" flush="true"/>--%>
  37. </div>
  38. <div class='bottom-div'>
  39. <ss:equal val='${empty saveDest}' val2='false'>
  40. <%-- 保存按钮 --%>
  41. <ss-bottom-button
  42. text="${saveButtonValue}"
  43. <%-- type="submit"--%>
  44. onclick='ss.form.submit({url:"<ss:serv name='${save}' dest='${saveDest}' parm='${saveParam}'/>",width:${savewidth},height:${saveheight},minHeight:${saveminheight},maxHeight:${savemaxheight}});'
  45. <%-- onclick='wd.display.changeFormAction("<ss:serv name='${save}' dest='${saveDest}' parm='${saveParam}'/>",this,${savewidth},${saveheight},${saveminheight},${savemaxheight});'--%>
  46. icon-class="bottom-div-save"
  47. ></ss-bottom-button>
  48. </ss:equal>
  49. <%-- <div class="bottom-down-div border-top"> --%>
  50. <%-- <ss:equal val='${empty saveDest}' val2='false'>--%>
  51. <!-- 保存按钮 start -->
  52. <%-- <input v-show="false" type="submit" value="${saveButtonValue}" class="bottom-button"
  53. onclick='ss.display.changeFormAction("<ss:serv name='${save}' dest='${saveDest}' parm='${saveParam}'/>",this,${savewidth},${saveheight},${saveminheight},${savemaxheight});'
  54. > --%>
  55. <!-- 保存按钮 end -->
  56. <%-- </ss:equal>--%>
  57. <ss:equal val='${empty saveAndCommitDest}' val2='false'>
  58. <ss-bottom-button
  59. id="saveAndCommit"
  60. text="${saveAndCommitButtonValue}"
  61. 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) --%>
  62. <%-- onclick='ss.display.reset("dialog",this,"<ss:serv name='${saveAndCommit}' dest='${saveAndCommitDest}' parm='${saveAndCommitParam}'/>",${saveAndCommitwidth},${saveAndCommitheight},${saveAndCommitminheight},${saveAndCommitmaxheight});'--%>
  63. icon-class="bottom-div-save"
  64. ></ss-bottom-button>
  65. <!-- 保存并提交按钮 start -->
  66. <%-- <input type="button" value="${saveAndCommitButtonValue}" class="bottom-button"
  67. onclick='ss.display.reset("dialog",this,"<ss:serv name='${saveAndCommit}' dest='${saveAndCommitDest}' parm='${saveAndCommitParam}'/>",${saveAndCommitwidth},${saveAndCommitheight},${saveAndCommitminheight},${saveAndCommitmaxheight});'
  68. > --%>
  69. <!-- 保存并提交按钮 end -->
  70. </ss:equal>
  71. <ss:equal val='${empty changeNoFunctions}' val2='false'>
  72. <%--只有一个变动--%>
  73. <!-- 只有一个变动时的 停用按钮 start -->
  74. <ss:equal val='${changeNoSize}' val2='1'>
  75. <ss-bottom-button
  76. text="${changeNoFunctions[0].name}"
  77. 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});'
  78. icon-class="bottom-div-close"
  79. ></ss-bottom-button>
  80. <%-- <input type="button" value="${changeNoFunctions[0].name}" class="bottom-button"
  81. 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});'
  82. > --%>
  83. </ss:equal>
  84. <!-- 只有一个变动 end -->
  85. <%--有多个变动--%>
  86. <!--有多个变动 start -->
  87. <ss:notEqual val='${changeNoSize}' val2='1'>
  88. <%-- 更多变动按钮数据 Ben(20251211) --%>
  89. <script>
  90. window.ss.dom.btnElemConfig.moreChg={desc:"更多变动",dropOptions:[]};
  91. </script>
  92. <ss:rpt id='item' name='changeNoFunctions'>
  93. <script>
  94. window.ss.dom.btnElemConfig.moreChg.dropOptions.push(
  95. {
  96. desc:'${item.name}',<%-- 按钮名 --%>
  97. callback: function(){
  98. 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});
  99. }
  100. }
  101. );
  102. </script>
  103. <%-- 改成vue写法 Ben(20251211)
  104. <input style="display:none;" class="changebutton" index="${index}" type="button" value="${item.name}"
  105. 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});'
  106. >
  107. --%>
  108. </ss:rpt>
  109. <%-- 修改支持更多按钮 by xu 20251211 --%>
  110. <ss-bottom-button
  111. more="moreChg"
  112. ></ss-bottom-button>
  113. <%-- 改成vue写法 Ben(20251211)
  114. <input id="morebutton" type="button" value="更多变动" class="bottom-button"/>
  115. <script>ss.display.attachButton("morebutton","changebutton");</script>
  116. --%>
  117. </ss:notEqual>
  118. <!--有多个变动 end -->
  119. </ss:equal>
  120. <!-- 删除按钮 start -->
  121. <ss:equal val='${empty deleteDest}' val2='false'>
  122. <%--
  123. <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>
  124. --%>
  125. <ss-bottom-button
  126. text="${deleteButtonValue}"
  127. onclick='ss.form.confirm("删除","是否删除?",function (){ss.form.submit({url:"<ss:serv name='${delete}' dest='${deleteDest}' parm='${deleteParam}'/>",targetWin:parent});},null)'
  128. <%-- onclick='ss.display.confirm("删除","是否删除?",(function(button){return function(){var form=document.querySelector("form");button.form=form;form.setAttribute("vvv","2");--%>
  129. <%-- form.setAttribute("action",--%>
  130. <%-- "<ss:serv name='${delete}' dest='${deleteDest}' parm='${deleteParam}'/>");--%>
  131. <%-- ss.display.submitToTopTab(button);form.submit();}})(this))'--%>
  132. icon-class="bottom-div-close"
  133. ></ss-bottom-button>
  134. <%-- <input id="deleteButton" type="button" value="${deleteButtonValue}"
  135. onclick='wd.display.confirm("删除","是否删除?",(function(button){return function(){var form=document.querySelector("form");button.form=form;form.setAttribute("vvv","2");
  136. form.setAttribute("action",
  137. "<ss:serv name='${delete}' dest='${deleteDest}' parm='${deleteParam}'/>");
  138. wd.display.submitToTopTab(button);form.submit();}})(this))'
  139. class="bottom-button"
  140. > --%>
  141. </ss:equal>
  142. <!-- 删除按钮 end -->
  143. <%-- 再增加 删除二级对象的基本情况变动 功能 -- "删除变动" 按钮。Start。Lin --%>
  144. <!-- 删除二级对象的基本情况变动 功能 -- "删除变动" 按钮。Start -->
  145. <ss:equal val='${empty delChildChgDest}' val2='false'>
  146. <ss-bottom-button
  147. text="${delChildChgButtonValue}"
  148. onclick='ss.form.confirm("删除","是否删除?",function (){ss.form.submit({url:"<ss:serv name='${delChildChg}' dest='${delChildChgDest}' parm='${delChildChgParam}'/>",targetWin:parent});},null)'
  149. <%-- onclick='ss.display.confirm("删除变动","是否删除基本情况变动?",(function(button){return function(){var form=document.querySelector("form");button.form=form;form.setAttribute("vvv","2");--%>
  150. <%-- form.setAttribute("action",--%>
  151. <%-- "<ss:serv name='${delChildChg}' dest='${delChildChgDest}' parm='${delChildChgParam}'/>");--%>
  152. <%-- wd.display.submitToTopTab(button);form.submit();}})(this))'--%>
  153. icon-class="bottom-div-close"
  154. ></ss-bottom-button>
  155. <%-- <input id="delChildChgButton" type="button" value="${delChildChgButtonValue}"
  156. onclick='ss.display.confirm("删除变动","是否删除基本情况变动?",(function(button){return function(){var form=document.querySelector("form");button.form=form;form.setAttribute("vvv","2");
  157. form.setAttribute("action",
  158. "<ss:serv name='${delChildChg}' dest='${delChildChgDest}' parm='${delChildChgParam}'/>");
  159. wd.display.submitToTopTab(button);form.submit();}})(this))'
  160. class="bottom-button"
  161. > --%>
  162. </ss:equal>
  163. <!-- 删除二级对象的基本情况变动 功能 -- "删除变动" 按钮。end -->
  164. <%-- 再增加 删除二级对象的基本情况变动 功能 -- "删除变动" 按钮。End。Lin --%>
  165. <!-- 停用start -->
  166. <ss:equal val='${empty disableSubmitDest}' val2='false'>
  167. <ss-bottom-button
  168. text="${disableSubmitButtonValue}"
  169. onclick='ss.form.submit({url:"<ss:serv name='${disableSubmit}' dest='${disableSubmitDest}' parm='${disableSubmitParam}'/>",width:${disableSubmitwidth},height:${disableSubmitheight},minHeight:${disableSubmitminheight},maxHeight:${disableSubmitmaxheight},targetWin:parent});'
  170. <%-- onclick='ss.display.reset("dialog",this,"<ss:serv name='${disableSubmit}' dest='${disableSubmitDest}' parm='${disableSubmitParam}'/>",${disableSubmitwidth},${disableSubmitheight},${disableSubmitminheight},${disableSubmitmaxheight});'--%>
  171. icon-class="bottom-div-close"
  172. ></ss-bottom-button>
  173. <!-- <input type="submit" value="${disableSubmitButtonValue}" class="bottom-button"
  174. onclick='ss.display.reset("dialog",this,"<ss:serv name='${disableSubmit}' dest='${disableSubmitDest}' parm='${disableSubmitParam}'/>",${disableSubmitwidth},${disableSubmitheight},${disableSubmitminheight},${disableSubmitmaxheight});'
  175. > -->
  176. </ss:equal>
  177. <!-- 停用end -->
  178. <ss-bottom-button
  179. text="关闭"
  180. onclick='ss.display.closeDialog();'
  181. icon-class="bottom-div-close"
  182. ></ss-bottom-button>
  183. <%-- <input type="button" value="关闭" onclick="ss.display.closeDialog();" class="bottom-button"> --%>
  184. <%--
  185. ${param}
  186. --%>
  187. <%-- </div> --%>
  188. </div>
  189. </form>
  190. </body>
  191. </html>
  192. <script type="module">
  193. // function objectPickMockAjax(url) {
  194. // // return null;
  195. // return new Promise((resolve) => {
  196. // setTimeout(() => {
  197. // resolve([
  198. // // { label: '男', value: '1' },
  199. // // { label: '女', value: '2' }
  200. // ]);
  201. // }, 1);
  202. // });
  203. // }
  204. // // 模拟 Ajax 请求的工具函数
  205. // const mockAjax = {
  206. // // 缓存数据,避免重复请求
  207. // _cache: null,
  208. //
  209. // // 获取完整数据
  210. // async getData() {
  211. // if (this._cache) return this._cache;
  212. // const response = await fetch("/newUI/ss/js/level.json");
  213. // this._cache = await response.json();
  214. // return this._cache;
  215. // },
  216. //
  217. // // 获取所有省份
  218. // async getProvinces() {
  219. // const data = await this.getData();
  220. // return data.map((item) => ({
  221. // label: item.name,
  222. // value: item.code,
  223. // }));
  224. // },
  225. //
  226. // // 根据省份代码获取城市
  227. // async getCities(provinceCode) {
  228. // const data = await this.getData();
  229. // const province = data.find((p) => p.code === provinceCode);
  230. // if (!province || !province.children) return [];
  231. //
  232. // return province.children
  233. // .filter((item) => item.city) // 确保是市级数据
  234. // .map((item) => ({
  235. // label: item.name,
  236. // value: item.code,
  237. // }));
  238. // },
  239. //
  240. // // 根据城市代码获取区县
  241. // async getDistricts(cityCode) {
  242. // const data = await this.getData();
  243. // for (const province of data) {
  244. // if (!province.children) continue;
  245. // const city = province.children.find((c) => c.code === cityCode);
  246. // if (city && city.children) {
  247. // return city.children.map((item) => ({
  248. // label: item.name,
  249. // value: item.code,
  250. // }));
  251. // }
  252. // }
  253. // return [];
  254. // },
  255. // // 模拟专业数据
  256. // getMajors() {
  257. // return new Promise((resolve) => {
  258. // setTimeout(() => {
  259. // resolve([
  260. // { label: '计算机科学与技术', value: '08010000' }, // 补齐8位
  261. // { label: '软件工程', value: '08020000' },
  262. // { label: '网络工程', value: '08030000' }
  263. // ]);
  264. // }, 1000);
  265. // });
  266. // },
  267. // // 模拟班级数据
  268. // getClasses(majorCode) {
  269. // // majorCode 会是 '08010000' 这样的格式
  270. //
  271. // const classData = {
  272. // '08010000': [
  273. // { label: '计科1班', value: '08010001' },
  274. // { label: '计科2班', value: '08010002' }
  275. // ],
  276. // '08020000': [
  277. // { label: '软件1班', value: '08020001' },
  278. // { label: '软件2班', value: '08020002' }
  279. // ],
  280. // '08030000': [
  281. // { label: '网络1班', value: '08030001' },
  282. // { label: '网络2班', value: '08030002' }
  283. // ]
  284. // };
  285. //
  286. // return new Promise((resolve) => {
  287. // setTimeout(() => {
  288. // resolve(classData[majorCode] || []);
  289. // }, 1000);
  290. // });
  291. // }
  292. // };
  293. // const doCascade = async function({
  294. // children = [],
  295. // url,
  296. // vm,
  297. // prefix = 'Option',
  298. // loadData = () => {},
  299. // value, // 添加 value 参数用于测试阶段
  300. // mode = 1
  301. // }) {
  302. // try {
  303. // // 清空所有子级的值和选项
  304. // children.forEach(child => {
  305. // vm[child] = '';
  306. //
  307. // vm[child+'Option'] = [];
  308. // });
  309. //
  310. // // 测试阶段:使用 loadData 加载模拟数据
  311. // if (loadData && value) {
  312. // const data = await loadData(value);
  313. //
  314. // // mode=2 时,所有 children 都是同级的,都使用相同的数据
  315. // if (mode == '2') {
  316. //
  317. // children.forEach(child => {
  318. // vm[child+'Option'] = data;
  319. // });
  320. // } else {
  321. // // 原有的处理方式,只设置第一个子级的数据
  322. // if (children.length > 0) {
  323. // vm[children[0]+'Option'] = data;
  324. // }
  325. // }
  326. // return;
  327. // }
  328. //
  329. // // 正式环境:使用 url 加载数据(暂时不用)
  330. // if (url) {
  331. // const response = await fetch(url);
  332. // const data = await response.json();
  333. // if (children.length > 0) {
  334. // vm[children[0]+'Option'] = data;
  335. // }
  336. // }
  337. // } catch (error) {
  338. // console.log('级联数据加载失败:', error);
  339. // if (children.length > 0) {
  340. // vm[children[0]+'Option'] = [];
  341. // }
  342. // }
  343. // };
  344. // // 定义 objPickerLoad 函数
  345. // async function objPickerLoad(url, optName) {
  346. // const result = await objectPickMockAjax(url);
  347. // return result;
  348. // }
  349. //
  350. // // 省市区
  351. // async function ccpsingleFirstLoad(url) {
  352. // const provinces = await mockAjax.getProvinces();
  353. // return provinces;
  354. // }
  355. // async function getCcpsingleValue(children,value) {
  356. // if (children.length == 2) {
  357. // const result = await mockAjax.getCities(value);
  358. // return result;
  359. // }else if (children.length == 1) {
  360. // const result = await mockAjax.getDistricts(value);
  361. // return result;
  362. // }
  363. // }
  364. const data = {};
  365. if (window.SS.dom.formElemConfig) {
  366. Object.entries(window.SS.dom.formElemConfig).forEach(([key, config]) => {
  367. data[key] = config.val;
  368. // 处理 objPicker
  369. if (config.type === window.SS.dom.TYPE.OBJPICKER) {
  370. data[key + "ObjPicker"] = true;
  371. data[key + "Option"] = [];
  372. data[key + "Url"] = config.url;
  373. }
  374. // 处理级联选择器(hidden)
  375. // if (config.type === window.SS.dom.TYPE.CCPSINGLE) {
  376. // config.objP.forEach(function (item, index) {
  377. // data[item] = "";
  378. // data[item + "Option"] = [];
  379. // data[item + "CCPSINGLE"] = true;
  380. // data[item + "objP"] = config.objP;
  381. // // 第一个字段需要加载
  382. // if (index === 0) {
  383. // data[item + "InitLoad"] = true;
  384. // }
  385. // })
  386. // // 处理级联选择器的url
  387. // for(let key in config.param) {
  388. // if(config.param[key].url) {
  389. // data[key + "Url"] = config.param[key].url;
  390. // }
  391. // }
  392. // }
  393. // 处理级联,多个
  394. // if (config.type === window.SS.dom.TYPE.CCPMUTIPLE) {
  395. // config.objP.forEach(function (item, index) {
  396. // data[item] = "1";
  397. //
  398. // data[item + "Option"] = [];
  399. // data[item + "CCPMUTIPLE"] = true;
  400. // data[item + "objP"] = config.objP;
  401. // // 第一个字段需要加载
  402. // if (index === 0) {
  403. // data[item + "InitLoad"] = true;
  404. //
  405. // }
  406. // })
  407. // // 处理级联选择器的url
  408. // for(let key in config.param) {
  409. // if(config.param[key].url) {
  410. // data[key + "Url"] = config.param[key].url;
  411. // data[key] = config.param[key].value;
  412. // }
  413. // }
  414. // }
  415. // 处理datepicker
  416. if (config.type === window.SS.dom.TYPE.DATE) {
  417. data[key + "Mode"] = config.mode
  418. console.log(data[key + "Mode"]);
  419. }
  420. // 处理富文本编辑器
  421. if (config.type === window.SS.dom.TYPE.RICHTEXT) {
  422. data[key + "Url"] = config.val;
  423. data[key + "editor"] = config.val;
  424. }
  425. // 处理onoff
  426. if (config.type === window.SS.dom.TYPE.ONOFFBTN) {
  427. data[key] = config.val.split('|');
  428. }
  429. if (config.type === window.SS.dom.TYPE.IMG) {
  430. data[key + "showUrl"] = config.showUrl;
  431. data[key + "uploadUrl"] = config.uploadUrl;
  432. }
  433. });
  434. }
  435. // console.log("data",data);
  436. SS.ready(function () {
  437. if(ss.dom.formVmConfig)//加判断条件,页面有校验配置时,才运行下面的 Ben(20251206)
  438. for (let i = 0; i < ss.dom.formVmConfig.length; i++) {
  439. const item = ss.dom.formVmConfig[i];
  440. // 处理每个元素
  441. let rule = item.rule;
  442. let field = item.field;
  443. let param = item.param;
  444. window.ssVm.add(rule, field, param);
  445. }
  446. // //下面是写死的
  447. // ssVm.add("ss.commonValidator.notNull", ["xm"], {
  448. // msgPrfx: "姓名",
  449. // });
  450. // ssVm.add("ss.commonValidator.notNull", ["ywm"], {
  451. // msgPrfx: "英文名",
  452. // });
  453. // ssVm.add("ss.commonValidator.notNull", ["zh"], {
  454. // msgPrfx: "帐号",
  455. // });
  456. // ssVm.add("ss.commonValidator.notNull", ["ryh"], {
  457. // msgPrfx: "人员号",
  458. // });
  459. // ssVm.add("ss.commonValidator.notNull", ["xbm"], {
  460. // msgPrfx: "性别",
  461. // });
  462. // ssVm.add("ss.commonValidator.notNull", ["zzmmm"], {
  463. // msgPrfx: "政治面貌",
  464. // });
  465. // ssVm.add("ss.commonValidator.notNull", ["rylbm"], {
  466. // msgPrfx: "人员类别",
  467. // });
  468. // ssVm.add("ss.commonValidator.notNull", ["gwid"], {
  469. // msgPrfx: "岗位",
  470. // });
  471. // ssVm.add("ss.commonValidator.notNull", ["csrq"], {
  472. // msgPrfx: "出生日期",
  473. // });
  474. // ssVm.add("ss.commonValidator.notNull", ["csrq"], {
  475. // msgPrfx: "出生日期",
  476. // });
  477. //
  478. // ssVm.add("ss.commonValidator.notNull", ["mswj"], {
  479. // msgPrfx: "描述",
  480. // });
  481. // 在这里直接初始化,不需要等待 load 事件
  482. window.SS.dom.initializeFormApp({
  483. el: "#app",
  484. data(){
  485. return data;
  486. },
  487. methods: {
  488. onChange(value){
  489. // console.log(value)
  490. },
  491. myChange(value){
  492. // alert(value);
  493. // console('@@@myChange:'+value);
  494. },
  495. save(){
  496. $('form').attr('action','<ss:serv name='${save}' dest='${saveDest}' parm='${saveParam}'/>');//name:${save},dest='${saveDest}',parm='${saveParam}'
  497. $('form').submit();
  498. // wd.display.changeFormAction("<ss:serv name='${save}' dest='${saveDest}' parm='${saveParam}'/>",this,${savewidth},${saveheight},${saveminheight},${savemaxheight});
  499. }
  500. },
  501. mounted() {
  502. const self = this;
  503. // 在这里可以使用 Vue 实例
  504. Object.entries(this.$data).forEach(([key, value]) => {
  505. // 处理 objPicker
  506. if (key.includes('ObjPicker')) {
  507. // const originalKey = key.replace('ObjPicker', '');
  508. // if (value) {
  509. // objPickerLoad(value, key).then(result => {
  510. // this[originalKey+'Option'] = result;
  511. // });
  512. // }
  513. }
  514. // 处理 CCPSINGLE
  515. if (key.includes('CCPSINGLE')) {
  516. const originalKey = key.replace('CCPSINGLE', '');
  517. const self = this;
  518. // 只有第一个字段需要自动加载
  519. if (this[originalKey + "InitLoad"]) {
  520. ccpsingleFirstLoad(this[originalKey + "Url"], key).then(result =>{
  521. this[originalKey+'Option'] = result;
  522. })
  523. }
  524. // 绑定 change 事件
  525. this[originalKey + 'Change'] = async function(value) {
  526. const objP = self[originalKey + "objP"] || [];
  527. const currentIndex = objP.indexOf(originalKey);
  528. const children = currentIndex < 0 || currentIndex >= objP.length - 1 ? [] : objP.slice(currentIndex + 1);
  529. await doCascade({
  530. children,
  531. value,
  532. vm: self,
  533. loadData: (value) => getCcpsingleValue(children,value),
  534. });
  535. };
  536. }
  537. // 如果是 CCPSINGLE 类型
  538. if (key.includes('CCPMUTIPLE')) {
  539. const originalKey = key.replace('CCPMUTIPLE', '');
  540. const self = this;
  541. // 只有第一个字段需要自动加载
  542. if (this[originalKey + "InitLoad"]) {
  543. ccpsingleFirstLoad(this[originalKey + "Url"], key).then(result =>{
  544. this[originalKey+'Option'] = result;
  545. })
  546. }
  547. // 绑定 change 事件
  548. this[originalKey + 'Change'] = async function(value) {
  549. const objP = self[originalKey + "objP"] || [];
  550. const currentIndex = objP.indexOf(originalKey);
  551. const children = currentIndex < 0 || currentIndex >= objP.length - 1 ? [] : objP.slice(currentIndex + 1);
  552. await doCascade({
  553. children,
  554. value,
  555. vm: self,
  556. loadData: (value) => getCcpsingleValue(children,value),
  557. });
  558. };
  559. }
  560. // 加载editor
  561. // if (key.includes('editor')) {
  562. // const originalKey = key.replace('editor', '');
  563. // if (this[key]) {
  564. // fetch(this[key])
  565. // .then(res => res.text()) // 使用 text() 而不是 data
  566. // .then(html => {
  567. // this[originalKey] = html;
  568. // console.log(this[originalKey])
  569. // })
  570. // .catch(error => {
  571. // console.error("获取HTML文件失败:", error);
  572. // });
  573. // }
  574. // }
  575. });
  576. }
  577. })
  578. });
  579. </script>
  580. <%--<script type="text/javascript">--%>
  581. <%-- tokenCleanser("<ss:serv name='ss.clearPageToken'/>", {tokenList:"<%= pageContext.getAttribute(ss.page.PageC.PAGE_tokenList)%>"});--%>
  582. <%--</script>--%>