cobjList.jsp 89 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637
  1. <%@ page language="java" pageEncoding="UTF-8" isELIgnored="false" %>
  2. <%@ taglib uri="/ssTag" prefix="ss" %>
  3. <%pageContext.setAttribute("wdpageinformation", "{'hastab':'0'}");%>
  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 = {};
  16. if (!wd.display) wd.display = {};
  17. wd.display.wdDialogId = "cobjList";
  18. if (!wd.app) wd.app = {};
  19. wd.app.name = 'pms';</script>
  20. <script type="text/javascript" src="/ss/js/masklayer.js"></script>
  21. <script type="text/javascript" src="/ss/js/wdDialogInit.js"></script>
  22. <script type="text/javascript" src="/ss/js/common.js"></script>
  23. <script type="text/javascript" src="/ss/js/display.js"></script>
  24. <script type="text/javascript" src="/ss/js/edit.js"></script>
  25. <script type="text/javascript" src="/ss/nicescroll/jquery.nicescroll.js"></script>
  26. <script type="text/javascript" src="/ss/nicescroll/jquery.nicescroll.iframehelper.min.js"></script>
  27. <link rel="stylesheet" type="text/css" href="/ss/window/theme/dhtmlxwindows.css">
  28. <link rel="stylesheet" type="text/css" href="/ss/window/theme/dhx_blue/dhtmlxwindows_dhx_blue.css">
  29. <script type="text/javascript" src="/ss/window/dhtmlxcommon.js"></script>
  30. <script type="text/javascript" src="/ss/window/dhtmlxwindows.js"></script>
  31. <script type="text/javascript" src="/ss/window/dhtmlxcontainer.js"></script>
  32. <script type="text/javascript" src="/ss/js/common.js"></script>
  33. <script type="text/javascript" src="/ss/js/display.js"></script>
  34. <script type="text/javascript" src="/ss/datePicker/WdatePicker.js"></script>
  35. <script type="text/javascript" src="/ss/js/edit.js"></script>
  36. <ssDlg setPval="true"/>
  37. <%-- setValue="true" close="true"。Lin --%>
  38. <script type="text/javascript" src="/ss/js/growHeight.js"></script>
  39. <script type="text/javascript" src="/ss/jquery/jquery.ellipsis.js"></script>
  40. <script type="text/javascript" src="/ss/datePicker/WdatePicker.js"></script>
  41. <script type="text/javascript" src="/ss/js/edit.js"></script>
  42. <script type="text/javascript" src="/ss/echarts/echarts.js"></script>
  43. <%-- 新UI引入的JS --%>
  44. <script src="/js/load.js"></script>
  45. <%-- ="/newUI/ss/js/base.js"。Lin(新UI) --%>
  46. <script src="/js/pageC.js"></script>
  47. <%-- 对象变动、修改、查看页,左则选项卡宽度 在里面定义 Ben(20251213) --%>
  48. <style>
  49. <%--巨大div--%>
  50. <%--报表样式--%>
  51. <%--内容--%>
  52. <%--调大小手柄--%>
  53. <%--设置报表--%>
  54. <%--page--%>
  55. .pagination {
  56. margin-right: 20px;
  57. }
  58. .icon-openFolder {
  59. line-height: 40px !important;
  60. }
  61. <%-- // 功能说明:二级列表搜索/翻页 loading 动效(参考 objList 样式并居中展示) by xu 20260115 --%>
  62. /* 功能说明:二级列表搜索/翻页 loading 动效(避免点“所有/搜索”无反馈) by xu 20260115 */
  63. .cobj-loading {
  64. width: 100%;
  65. min-height: 260px;
  66. flex: 1 0 100%;
  67. box-sizing: border-box;
  68. display: flex;
  69. align-items: center;
  70. justify-content: center;
  71. }
  72. /* 功能说明:二级列表接口返回 ssCode/ssMsg 时展示错误信息 by xu 20260206 */
  73. .cobj-error {
  74. width: 100%;
  75. min-height: 260px;
  76. flex: 1 0 100%;
  77. box-sizing: border-box;
  78. display: flex;
  79. align-items: center;
  80. justify-content: center;
  81. color: #d03050;
  82. font-size: 14px;
  83. text-align: center;
  84. padding: 0 16px;
  85. }
  86. .cobj-spinner {
  87. width: 18px;
  88. height: 18px;
  89. border-radius: 50%;
  90. border: 2px solid rgba(0, 0, 0, 0.2);
  91. border-top-color: rgba(0, 0, 0, 0.65);
  92. animation: cobjSpin 0.8s linear infinite;
  93. }
  94. @keyframes cobjSpin {
  95. from {
  96. transform: rotate(0deg);
  97. }
  98. to {
  99. transform: rotate(360deg);
  100. }
  101. }
  102. </style>
  103. <%-- 改为 <data@ss name="prt"/>。Lin
  104. <tab@ss name="print" enable="viewobject.funcMap.play.print"/> --%>
  105. <ss:data name='prt'/>
  106. <%--批量打印--%>
  107. <%-- 去掉,改为 <jsp@ss file="/ss/prtIcon.jsp"/>。Lin
  108. 不用 "wdBatchPrint",统一用 "wdPrint" -- 写在 prtIcon.jsp 里
  109. <equal@ss val="${empty prt}" val2="false">
  110. <script>
  111. $(function(){
  112. try{
  113. var wdDialogId=wd.display.getwdDialogId();
  114. var win=wd.topWindow.dhxWins.window(wdDialogId);
  115. win.button("wdBatchPrint").show();
  116. win.button("wdBatchPrint").onclick=function(){
  117. <varServ@ss dlg="true" name="${prt.servName}" dest="${prt.dest}" parm="${prt.parm}" title="${prt.title}" width="${prt.width}" height="${prt.height}" minHeight="${prt.minHeight}" maxHeight="${prt.maxHeight}"/>
  118. }
  119. }catch(e){
  120. console.log(e);
  121. }
  122. })
  123. </script>
  124. </equal@ss>
  125. --%>
  126. <%@include file="/ss/clip/prtIcon.jsp" %>
  127. <script>
  128. window.SS.dom.formElemConfig = window.SS.dom.formElemConfig || {};
  129. </script>
  130. </head>
  131. <body>
  132. <div id="app">
  133. <form class="page-container" id="myForm"
  134. action="<ss:serv name='${currentService.servName}' dest='${currentService.dest}' parm='${currentService.parm}'/>"
  135. method="post">
  136. <input type="hidden" name="isAnd" value='${isAnd}'/>
  137. <input name="management" type="hidden" value="${management}"/>
  138. <input name="isFulltext" type="hidden" value="${isFulltext}"/>
  139. <%-- // 功能说明:补齐分页隐藏字段,供前端翻页/序列化入参使用 by xu 20260115 --%>
  140. <input type="hidden" name="pageNo" v-model="ssPaging.pageNo"/>
  141. <input type="hidden" name="rowNumPer" v-model="ssPaging.rowNumPer"/>
  142. <input type="hidden" name="rowNum" v-model="ssPaging.rowNum"/>
  143. <%--搜索条件start--%>
  144. <div class="search-bar">
  145. <ss-breadcrumb></ss-breadcrumb>
  146. <div class="search-bar-contaienr">
  147. <%-- // 功能说明:优先用接口返回的 searchFieldList 渲染搜索条件(无右侧栏) by xu 20260115 --%>
  148. <template v-if="searchFieldList && searchFieldList.length">
  149. <template v-for="f in searchFieldList" :key="f.name">
  150. <template v-if="f && f.cbName">
  151. <%-- // 功能说明:下拉选项由前端拉取并绑定 opt,保证选择后能回显选中项 by xu 20260115 --%>
  152. <ss-objp
  153. v-model="searchForm[f.name]"
  154. :name="f.name"
  155. :opt="searchFieldOptMap[f.name] || []"
  156. :placeholder="f.desc || ''"
  157. width="120"
  158. inp="true"
  159. url="/service?ssServ=loadObjpOpt&objectpickerdropdown1=1"
  160. :cb="f.cbName"
  161. ></ss-objp>
  162. </template>
  163. <template v-else>
  164. <ss-search-input
  165. :name="f.name"
  166. :placeholder="f.desc || ''"
  167. v-model="searchForm[f.name]"
  168. width="100px"
  169. @search="doSearch"
  170. ></ss-search-input>
  171. </template>
  172. </template>
  173. <template v-if="hasKeyWord">
  174. <ss-search-input
  175. name="ssKeyword"
  176. placeholder="关键词"
  177. v-model="searchForm.ssKeyword"
  178. width="100px"
  179. @search="doSearch"
  180. ></ss-search-input>
  181. </template>
  182. </template>
  183. <template v-else>
  184. <%--关键词--%>
  185. <%-- 再去掉 -- 只支持一行。Lin
  186. <ss:rpt name='searchableFields' id='fieldsList'>
  187. --%>
  188. <ss:rpt name='fieldsList' id='searchItem'>
  189. <%
  190. ss.obj.ObjFieldB f = (ss.obj.ObjFieldB) pageContext.getAttribute("searchItem");
  191. pageContext.setAttribute("searchItemValue", request.getParameter(f.getName()));
  192. %>
  193. <%--codebook 使用select下拉--%>
  194. <ss:equal val='${empty searchItem.cbName}' val2='false'>
  195. <%--<input type="text" name="${searchItem.name}" value="${searchItemValue}"/>
  196. <input type="text" name="${searchItem.name}Name" placeholder="${searchItem.desc}" style="width:${searchItem.width};min-width: 108px;"/>
  197. <ss:equal val='${empty cadcadingInputs[searchItem.name]}' val2='true'>
  198. <ss:objp name='${searchItem.name}' cb='${searchItem.cbName}' inp='true'/>
  199. </ss:equal>--%>
  200. <ss-objp
  201. v-model="${searchItem.name}"
  202. name="${searchItem.name}"
  203. :opt="${searchItem.name}Option"
  204. placeholder="${searchItem.desc}"
  205. width="120"
  206. inp="true"
  207. url="/service?ssServ=loadObjpOpt&objectpickerdropdown1=1"
  208. cb="${searchItem.cbName}"
  209. ></ss-objp>
  210. <script>
  211. /**
  212. * objectPicker(如:性别码)
  213. * optUrl:加载下拉菜单option选项的url
  214. */
  215. window.SS.dom.formElemConfig.${searchItem.name} = {
  216. desc: '${searchItem.desc}',
  217. value: '${searchItemValue}',
  218. optUrl: '123456',
  219. type: 2
  220. };//放当前页面表单元素配置的变量
  221. </script>
  222. </ss:equal>
  223. <%--codebook 使用input输入框--%>
  224. <ss:equal val='${empty searchItem.cbName}' val2='true'>
  225. <%--日期--%>
  226. <ss:equal val='${searchItem.type}'
  227. valList='3,11'> <%-- 改 equal:val1="true" val2='${searchItem.type == "time"}'。Lin --%>
  228. <div class="input-inside">
  229. <%--年度--%>
  230. <%--
  231. <ss:equal val='${searchItem.enrolDate}' val2='true'>
  232. <input type='hidden' placeholder="${searchItem.desc}" name='${searchItem.name}'
  233. value='<ss:txt val='${searchItemValue}'/>'/>
  234. <div><input type="text" name="${searchItem.name}_year" autocomplete="off" />
  235. <input name="${searchItem.name}_month" type="button" value="春季" ssVal="3"/>
  236. <input name="${searchItem.name}_month" type="button" value="秋季" ssVal="9"/>
  237. </div><script>(function(){wd.edit.onoffInit('radio','${searchItem.name}_month','',false,null,null,null,'edit');})();</script>
  238. <script>(function(){
  239. wd.display.initEnrolDate('${searchItem.name}','edit');
  240. })()
  241. </script>
  242. </ss:equal>--%>
  243. <%--日期--%>
  244. <ss:equal val='${searchItem.type==11}' val2='true'>
  245. <%--<input type='text' autocomplete="off" placeholder="${searchItem.desc}" name='${searchItem.name}'
  246. value='<ss:txt val='${searchItemValue}'/>' format="${searchItem.fmt}"/>
  247. <input type="button" ssType="date" ssName="${searchItem.name}"/>--%>
  248. <ss-search-date-picker
  249. v-model="${searchItem.name}"
  250. name="${searchItem.name}"
  251. type="date"
  252. placeholder="${searchItem.desc}"
  253. width="100px"
  254. ></ss-search-date-picker>
  255. <script>
  256. //日期类型(如:出生日期)
  257. window.SS.dom.formElemConfig.${searchItem.name} = {
  258. desc: '${searchItem.desc}',
  259. value: '${searchItemValue}',
  260. type: 3,
  261. name: '${searchItem.name}'
  262. };//放当前页面表单元素配置的变量
  263. </script>
  264. </ss:equal>
  265. </div>
  266. </ss:equal>
  267. <%--文本--%>
  268. <ss:notEqual val='${searchItem.type}'
  269. valList='3,11'> <%-- 改 equal:val1="false" val2='${searchItem.type == "time"}'。Lin --%>
  270. <%--<input name='${searchItem.name}' placeholder="${searchItem.desc}" type='text'
  271. value='<ss:txt val='${searchItemValue}'/>'/>
  272. <input type="hidden" ssType="and" ssName="${searchItem.name}"/>--%>
  273. <%--<script>wd.edit.addClearTextButton("${searchItem.name}");</script>--%>
  274. <ss-search-input
  275. name="${searchItem.name}"
  276. placeholder="${searchItem.desc}"
  277. v-model="${searchItem.name}"
  278. width="100px"
  279. >
  280. </ss-search-input>
  281. <script>
  282. //日期类型(如:出生日期)
  283. window.SS.dom.formElemConfig.${searchItem.name} = {
  284. desc: '${searchItem.desc}',
  285. value: '${searchItemValue}',
  286. type: 31,
  287. name: '${searchItem.name}'
  288. };//放当前页面表单元素配置的变量
  289. </script>
  290. </ss:notEqual>
  291. </ss:equal>
  292. </ss:rpt>
  293. <%-- 再去掉 -- 只支持一行。Lin
  294. </ss:rpt>
  295. --%>
  296. <ss:rpt name='cadcadingName' id='item'><%-- 级联菜单,还不知道怎么出来的 --%>
  297. <ss:ccp name='${item}'/>
  298. </ss:rpt>
  299. <ss:equal val='${hasKeyWord}' val2='true'>
  300. <%--<input name="ssKeyword" value="${ssKeyword}" type="text" placeholder="关键词"/>
  301. <script>wd.edit.addClearTextButton("ssKeyword");</script>--%>
  302. <ss-search-input
  303. name="ssKeyword"
  304. placeholder="关键词"
  305. v-model="ssKeyword"
  306. width="100px"
  307. >
  308. </ss-search-input>
  309. <script>
  310. //关键词
  311. window.SS.dom.formElemConfig.ssKeyword = {
  312. value: '${ssKeyword}',
  313. name: "ssKeyword",
  314. desc: "关键词",
  315. type: 31
  316. };//放当前页面表单元素配置的变量
  317. </script>
  318. </ss:equal>
  319. </template>
  320. <ss-search-button
  321. text="所有"
  322. icon-class="nav-icon-search"
  323. :opt="searchButtonConfig"
  324. :check-id="searchButtonConfigCheckId"
  325. ></ss-search-button>
  326. <%-- // 功能说明:优先用接口返回的 rootFuncList 渲染根按钮 by xu 20260115 --%>
  327. <template v-if="rootFuncList && rootFuncList.length">
  328. <template v-for="func in rootFuncList" :key="func.id || func.servName">
  329. <ss-search-button
  330. :text="func.desc || func.title || ''"
  331. icon-class="nav-icon-add"
  332. :opt="[]"
  333. :check-id="0"
  334. @click="openServiceDialog(func)"
  335. ></ss-search-button>
  336. </template>
  337. </template>
  338. <%--<input type="submit" name="ssSearch" value="搜索" class="content-invertButton"/>--%>
  339. <%--跨对象搜索隐藏全文按钮--%>
  340. <ss:equal val='${isMultipleObject}' val2='false'>
  341. <%-- "全文" 按钮,"button" 改为 "hidden"。
  342. 原来的会加上 style="display: none;",不知在哪加的???Lin
  343. objList.ss.jsp 里,原来就有 type="hidden"
  344. --%>
  345. <input type="hidden" ssType="fts" ssName="fts"
  346. value="全文"/> <%-- wdType="isFulltext" wdName="isFulltext"。Lin --%>
  347. </ss:equal>
  348. <%-- // 功能说明:rootFuncList 由接口返回时,隐藏旧 JSP 注入的 buttonList(避免重复按钮) by xu 20260115 --%>
  349. <template v-if="!rootFuncList || !rootFuncList.length">
  350. <%--管理按钮start--%>
  351. <script>
  352. <%-- 根按钮(管理按钮) --%>
  353. window.SS.dom.btnElemConfig = window.SS.dom.btnElemConfig || {};
  354. </script>
  355. <ss:rpt name='buttonList' id='button'>
  356. <ss:equal val='${dataType}'
  357. valList='normal,update,change,bdplay'> <%-- 增加,查看时隐去管理按钮。原来会去掉管理按钮,不知在哪去掉的???Lin --%>
  358. <ss:auth serv='${button.servName}'>
  359. <ss:equal val='${empty button.pluginList}' val2='true'>
  360. <%--<input type="button" name="${button.name}" value="${button.buttonName}" class="content-button"
  361. onclick='wd.display.showComponent({show:["wdDialog"],url:"<ss:serv name='${button.servName}' dest='${button.dest}' parm='${button.parm}'/>",title:"${button.title}",width:"${button.width}",height:"${button.height}",minHeight:"${button.minHeight}",maxHeight:"${button.maxHeight}",showTitle:"${button.showTitle}"});'/>--%>
  362. <script>
  363. function ${button.id}handleClick() {
  364. wd.display.showComponent({
  365. show: ["wdDialog"],
  366. url: "<ss:serv name='${button.servName}' dest='${button.dest}' parm='${button.parm}'/>",
  367. title: "${button.title}",
  368. width: "${button.width}",
  369. height: "${button.height}",
  370. minHeight: "${button.minHeight}",
  371. maxHeight: "${button.maxHeight+100}",
  372. showTitle: "${button.showTitle}"
  373. });
  374. }
  375. window.SS.dom.btnElemConfig.${button.id} = {
  376. desc: "${button.buttonName}",
  377. id: "${button.id}",
  378. dropOptions: [],
  379. onclick: () => {
  380. wd.display.showComponent({
  381. show: ["wdDialog"],
  382. url: "<ss:serv name='${button.servName}' dest='${button.dest}' parm='${button.parm}'/>",
  383. title: "${button.title}",
  384. width: "${button.width}",
  385. height: "${button.height}",
  386. minHeight: "${button.minHeight}",
  387. maxHeight: "${button.maxHeight+100}",
  388. showTitle: "${button.showTitle}"
  389. });
  390. }
  391. };
  392. </script>
  393. <ss-search-button
  394. text="${button.buttonName}"
  395. icon-class="nav-icon-add"
  396. :opt="[]"
  397. :check-id="0"
  398. onclick="${button.id}handleClick()"
  399. ></ss-search-button>
  400. </ss:equal>
  401. <ss:equal val='${empty button.pluginList}' val2='false'>
  402. <ss:rpt name='${button.pluginList}' id='plugin'>
  403. <%--<span style="display:none;" class="${button.id}children" value="${plugin.plugin.desc}"
  404. onclick='wd.display.showComponent({show:["wdDialog"],url:"<ss:serv name='${plugin.servName}' dest='${plugin.dest}' parm='${plugin.parm}'/>",title:"${plugin.title}",width:"${plugin.width}",height:"${plugin.height}",minHeight:"${plugin.minHeight}",maxHeight:"${plugin.maxHeight}",showTitle:"${plugin.showTitle}"});'>
  405. </span>
  406. </ss:rpt>
  407. <input type="button" id="${button.id}" name="${button.name}" value="${button.buttonName}" class="content-button" onclick='void(0)'/>
  408. <script>wd.display.attachButton("${button.id}","${button.id}children",null,false,true)</script>
  409. --%>
  410. <%-- window.SS.dom.btnElemConfig.${button.id}.onclick --%>
  411. <%-- :opt改为取vue.data中的变量,而不取window.ss.dom.btnElemConfig(因为取不到),onclick改为:onclick xu(20251209) --%>
  412. <ss-search-button
  413. text="${button.buttonName}"
  414. icon-class="nav-icon-add"
  415. :opt="btnElemConfig.${button.id}.dropOptions"
  416. check-id="${management}"
  417. onclick="${button.id}handleClick()"
  418. ></ss-search-button>
  419. <script><%-- 新UI生成按钮下拉菜单 --%>
  420. function ${button.id}handleClick() {
  421. wd.display.showComponent({
  422. show: ["wdDialog"],
  423. url: "<ss:serv name='${plugin.servName}' dest='${plugin.dest}' parm='${plugin.parm}'/>",
  424. title: "${plugin.title}",
  425. width: "${plugin.width}",
  426. height: "${plugin.height}",
  427. minHeight: "${plugin.minHeight}",
  428. maxHeight: "${plugin.maxHeight}",
  429. showTitle: "${plugin.showTitle}"
  430. });
  431. }
  432. window.SS.dom.btnElemConfig.${button.id} = {
  433. id: "${button.id}", dropOptions: [],
  434. onclick: () => {
  435. wd.display.showComponent({
  436. show: ["wdDialog"],
  437. url: "<ss:serv name='${plugin.servName}' dest='${plugin.dest}' parm='${plugin.parm}'/>",
  438. title: "${plugin.title}",
  439. width: "${plugin.width}",
  440. height: "${plugin.height}",
  441. minHeight: "${plugin.统计minHeight}",
  442. maxHeight: "${plugin.maxHeight}",
  443. showTitle: "${plugin.showTitle}"
  444. });
  445. }
  446. };
  447. <%-- 循环生成按钮数组 --%>
  448. <ss:rpt name='${button.pluginList}' id='plugin'>
  449. window.SS.dom.btnElemConfig
  450. .${button.id}.
  451. dropOptions.push(
  452. {
  453. desc: '${plugin.plugin.desc}', <%-- 按钮名 --%>
  454. callback: function () {
  455. wd.display.showComponent({
  456. show: ["wdDialog"],
  457. url: "<ss:serv name='${plugin.servName}' dest='${plugin.dest}' parm='${plugin.parm}'/>",
  458. title: "${plugin.title}",
  459. width: "${plugin.width}",
  460. height: "${plugin.height}",
  461. minHeight: "${plugin.minHeight}",
  462. maxHeight: "${plugin.maxHeight}",
  463. showTitle: "${plugin.showTitle}"
  464. });
  465. }
  466. }
  467. );
  468. </ss:rpt>
  469. </script>
  470. <%-- 新UI end Ben --%>
  471. </ss:rpt>
  472. </ss:equal>
  473. </ss:auth>
  474. </ss:equal>
  475. </ss:rpt>
  476. <%--管理按钮end--%>
  477. </template>
  478. <%--</div>--%>
  479. <%--管理类别start--%>
  480. <%-- <ss:equal val='${dataType}' valList='normal,update,change,bdplay'>--%>
  481. <%-- <ss:equal val='${"1"==isReady && !isMultipleObject && isTopObject}' val2='true'>--%>
  482. <%-- <div class="hLine" style="height: 48px;margin: 0px 17px 0px 11px;padding-left: 14px;padding-top:11px;box-sizing: border-box;">--%>
  483. <%-- <ul style="list-style: none;display: inline-block;">--%>
  484. <%--&lt;%&ndash; 再改,management(String) 为 scopeType(int) -- 0 为未指定,99 为所有(原为 "0")。Lin--%>
  485. <%-- <li wdType="manage" wdVal="0">所有</li> &ndash;%&gt;--%>
  486. <%-- <li ssType="searchScope" ssVal=99>所有</li>--%>
  487. <%-- &lt;%&ndash; <li wdType="manage" wdVal="2">管理</li>&ndash;%&gt;--%>
  488. <%--&lt;%&ndash; 再改,management(String) 为 scopeType(int) -- 0 为未指定,99 为所有(原为 "0")。Lin--%>
  489. <%-- <li wdType="manage" wdVal="1">创建</li> &ndash;%&gt;--%>
  490. <%-- <li ssType="searchScope" ssVal=1>创建</li>--%>
  491. <%-- &lt;%&ndash;<li wdType="manage" wdVal="3">已办</li>&ndash;%&gt;--%>
  492. <%--&lt;%&ndash; 再改,management(String) 为 scopeType(int) -- 0 为未指定,99 为所有(原为 "0")。Lin--%>
  493. <%-- <li wdType="manage" wdVal="55">停用</li> &ndash;%&gt;--%>
  494. <%-- <li ssType="searchScope" ssVal=55>停用</li>--%>
  495. <%-- </ul>--%>
  496. <%-- </div>--%>
  497. <%-- </ss:equal>--%>
  498. <%-- </ss:equal>--%>
  499. <%--管理类别end--%>
  500. <%--翻页--%>
  501. <%-- <%@include file="/ss/clip/paging.jsp"%> --%>
  502. </div>
  503. </div>
  504. <%--搜索条件end--%>
  505. <%--个人统计表start${!isMultipleObject}--%>
  506. <ss:equal val='${"1"!=isReady && !isMultipleObject}' val2='true'>
  507. <%-- 再改为 WebC.REQ_objName,避免与数据表里的 对象名 字段重名。用到再确认。Lin
  508. 传到 objList.ss.jsp 的是 ${ssObjName},传给 addPstat 的是 dxm(统计指标.对象名、个人统计.对象名)
  509. <input name="addgrtjUrl" type="hidden" value="<serv@ss name='add_grtj' parm='{dxm:"${dxm}"}'/>"/> --%>
  510. <input name="addgrtjUrl" type="hidden"
  511. value="<ss:serv name='addPcht' parm='{"wdConfirmationCaptchaService":"0","dxm":"${ssObjName}"}'/>"/>
  512. <input name="grtjSizeUrl" type="hidden"
  513. value="<ss:serv name='savePstatSize' parm='{"wdConfirmationCaptchaService":"0","grtjSize":"ssVal{grtjSize}"}'/>"/> <%-- name='save_grtjSize'。Lin --%>
  514. <input name="getgrtjJsonUrl" type="hidden"
  515. value="<ss:serv name='getgrtjJson' parm='{"wdConfirmationCaptchaService":"0"}'/>"/>
  516. <div class="graph scrollbar" style="padding-right: 16px;">
  517. <ss:rpt name='${grtjList}' id='item'>
  518. <div class="graph-list" grtjid="${item.grtjid}" style="width:${item.kd};height:${item.gd};">
  519. <div class="graph-list-body" style="height: 100%;">${item.mc}</div>
  520. <span class="graph-list-mask"></span>
  521. <span class="graph-list-resize"></span>
  522. <span class="vLine"
  523. style="height: 40px;width: 1px;position: absolute;right: 70px;top: 0px"></span>
  524. <span class="hLine-highlight"
  525. style="width: 100%;height: 0px;position: absolute;top: 40px;left: 0px;"></span>
  526. <span class="icon-set" style="position: absolute;right: 0px;top: 0px;width: 70px;height: 40px;"
  527. <%-- 再改为 WebC.REQ_objName,避免与数据表里的 对象名 字段重名。用到再确认。Lin
  528. onclick='<serv@ss dlg="true" name="getZbInfo" dest="grtj_sz" parm="{grtjid:&quot;${item.grtjid}&quot;,dxm:&quot;${dxm}&quot;}"/>'> --%>
  529. onclick='wd.display.showComponent({show:["wdDialog"],url:"<ss:serv name='getZbInfo'
  530. parm='{"wdConfirmationCaptchaService":"0","grtjid":"${item.grtjid}","ssObjName":"${ssObjName}"}'
  531. dest='grtj_sz'/>",title:"挑选指标",width:1000,height:800});'>
  532. </span>
  533. </div>
  534. </ss:rpt>
  535. <div>
  536. <%--<div class="graphButton button icon-add" style="height: 60px;line-height: 82px;float: right;margin-right: 0px;margin-top: 0px;">增加</div>
  537. <input name="initTj" onclick='@service{name:"initTj",dest:"sys_info",show:"wdDialog"}@' value="初始化" type="button" />--%>
  538. </div>
  539. </div>
  540. </ss:equal>
  541. <%--个人统计表end--%>
  542. <div style="clear: both;"></div>
  543. <script type="text/javascript" src="/ss/env/env_search.js"></script>
  544. <%--搜索结果start--%>
  545. <%--<div class="longCardList-div" style="box-sizing: border-box;" ssFith="true">
  546. <table class="scrollbar" style="max-height: 100%;width: 100%;">
  547. <tbody style="width: 100%;padding: 0px 16px 0px 11px;box-sizing: border-box;" ssFith='{list:true,rowHeight:35}'>--%><%-- 去掉 id="wdTbody0",好像没用到。Lin --%>
  548. <%-- <ss:rpt name='bgmbList' id='item'>--%>
  549. <%-- <tr>--%>
  550. <%-- <td class="hLine"--%>
  551. <%-- onClick='wd.display.showComponent({show:["wdDialog"],url:"<ss:serv name='stat_tableDesign_bb' parm='{"wdConfirmationCaptchaService":"0","bgmbid":"${item.bgmbid}"}' dest='bgmb_xsmb'/>",title:"显示模板",width:1010,height:750});'>--%>
  552. <%-- <div class="longCardList-info bb" style="font-size: 0px;display: inline-block;float: left;">--%>
  553. <%-- <span class="longCardList-highlight" style="margin-bottom: 3px;">--%>
  554. <%-- <a>${item.mc}</a>--%>
  555. <%-- </span>--%>
  556. <%-- <div id="${item.bgmbid}" class="longCardList-dim growHeightDiv" width='750' height='45px'>--%>
  557. <%-- <ss:txt val='${item.ms}'/>--%>
  558. <%-- </div>--%>
  559. <%-- <script type="text/javascript" charset="utf-8" src="/ss/js/growHeight.js"></script>--%>
  560. <%--<script type="text/javascript" charset="utf-8" src="/ss/js/display.js"></script>--%>
  561. <%--<script type="text/javascript" charset="utf-8" >--%>
  562. <%--wd.display.initGrowHigh('${item.bgmbid}','80px',{},null,false);--%>
  563. <%--</script>--%>
  564. <%-- <div id="${item.bgmbid}${index}" class="longCardList" width='750' height='18px'>--%>
  565. <%-- <ss:txt val='${item.lmms}'/>--%>
  566. <%-- </div>--%>
  567. <%-- <script type="text/javascript" charset="utf-8" src="/ss/js/growHeight.js"></script>--%>
  568. <%--<script type="text/javascript" charset="utf-8" src="/ss/js/display.js"></script>--%>
  569. <%--<script type="text/javascript" charset="utf-8" >--%>
  570. <%--wd.display.initGrowHigh('${item.bgmbid}${index}','80px',{},null,false);--%>
  571. <%--</script>--%>
  572. <%-- </div>--%>
  573. <%-- <a class="button icon-change"--%>
  574. <%-- onClick='wd.display.showComponent({show:["wdDialog"],url:"<ss:serv name='stat_tableDesign_load' parm='{"wdConfirmationCaptchaService":"0","bgmbid":"${item.bgmbid}"}' dest='bgmb_sj'/>",title:"变动表格模板",width:1010,height:780});'>--%>
  575. <%-- 变动--%>
  576. <%-- </a>--%>
  577. <%-- </td>--%>
  578. <%-- </tr>--%>
  579. <%-- </ss:rpt>--%>
  580. <%-- 新UI初始化查询列表数据的JS --%>
  581. <script>
  582. <%-- 打印新UI相关json对象 --%>
  583. window.SS.dom.listConfig = window.SS.dom.listConfig || {};
  584. //二级对象 草稿箱
  585. window.SS.dom.listConfig.draftbox = [];
  586. <%-- 草稿箱start --%>
  587. <ss:rpt name='cgxList' id='item'>
  588. {
  589. let item = {};
  590. window.SS.dom.listConfig.draftbox.push(item);
  591. item.tags = [];
  592. <%-- item.tags如果值为空,则会vue组件初始化失败,把item.tags的初始化变为提到条件之外,变成一定会初始化 Ben --%>
  593. <%-- 查看事件 --%>
  594. <ss:equal val='${empty item.service.play}' val2='false'>
  595. item.onclick = function () {
  596. wd.display.showComponent({
  597. show: ["wdDialog"],
  598. url: "<ss:serv name='${item.service.play.servName}' dest='${item.service.play.dest}' parm='${item.service.play.parm}'/>",
  599. title: "${item.service.play.title}",
  600. width: "${item.service.play.width}",
  601. height: "${item.service.play.height}",
  602. minHeight: "${item.service.play.minHeight}",
  603. maxHeight: "${item.service.play.maxHeight}"
  604. });
  605. };
  606. </ss:equal>
  607. <ss:equal val='${item.service.lbm==1 && not empty item.service.update}' val2='true'>
  608. item.onclick = function () {
  609. wd.display.showComponent({
  610. show: ["wdDialog"],
  611. url: "<ss:serv name='${item.service.update.servName}' dest='${item.service.update.dest}' parm='${item.service.update.parm}'/>",
  612. title: "${item.service.update.title}",
  613. width: "${item.service.update.width}",
  614. height: "${item.service.update.height}",
  615. minHeight: "${item.service.update.minHeight}",
  616. maxHeight: "${item.service.update.maxHeight}"
  617. });
  618. };
  619. </ss:equal>
  620. <ss:equal val='${item.service.lbm==11 && not empty item.service.change}' val2='true'>
  621. item.onclick = function () {
  622. wd.display.showComponent({
  623. show: ["wdDialog"],
  624. url: "<ss:serv name='${item.service.change.servName}' dest='${item.service.change.dest}' parm='${item.service.change.parm}'/>",
  625. title: "${item.service.change.title}",
  626. width: "${item.service.change.width}",
  627. height: "${item.service.change.height}",
  628. minHeight: "${item.service.change.minHeight}",
  629. maxHeight: "${item.service.change.maxHeight}"
  630. });
  631. };
  632. </ss:equal>
  633. <ss:equal val='${dataType}' valList='normal,change'>
  634. <ss:equal val='${item.service.lbm}' valList='51,55'>
  635. item.onclick = function () {
  636. wd.display.showComponent({
  637. show: ["wdDialog"],
  638. url: "<ss:serv name='delChildChg' parm='{"wdConfirmationCaptchaService":"0","sqid":"${item.sqid}"}' dest='childChgDelSure'/>",
  639. title: "删除二级对象的变动",
  640. width: 901,
  641. height: 380,
  642. minHeight: 53,
  643. maxHeight: 432
  644. });
  645. };
  646. </ss:equal>
  647. </ss:equal>
  648. <%-- 增加,审核时查看 基本情况变动。Start。Lin --%>
  649. <ss:equal val='${dataType}' val2='bdplay'>
  650. <ss:equal val='${item.service.lbm}' val2='11'>
  651. item.onclick = function () {
  652. wd.display.showComponent({
  653. show: ["wdDialog"],
  654. url: "<ss:serv name='selChgInfo' parm='{"wdConfirmationCaptchaService":"0","sqid":"${item.sqid}"}' dest='childChgInfo'/>",
  655. title: "二级对象的变动信息",
  656. width: 1020,
  657. height: 215,
  658. minHeight: 200,
  659. maxHeight: 660
  660. });
  661. };
  662. </ss:equal>
  663. </ss:equal>
  664. <%-- 增加,审核时查看 基本情况变动。End。Lin --%>
  665. <%--图标--%>
  666. <ss:equal val='${item.service.lbm}' val2='1'>
  667. item.titlexxx = "增加";
  668. item.icon = "icon-add";
  669. </ss:equal>
  670. <ss:equal val='${item.service.lbm}' val2='11'>
  671. item.titlexxx = "变动";
  672. item.icon = "icon-change";
  673. </ss:equal>
  674. <ss:equal val='${item.service.lbm}' val2='51'>
  675. item.titlexxx = "停用";
  676. item.icon = "icon-disable";
  677. </ss:equal>
  678. <ss:equal val='${item.service.lbm}' val2='55'>
  679. item.titlexxx = "启用";
  680. item.icon = "icon-enable";
  681. </ss:equal>
  682. <%--缩略图--%>
  683. <ss:equal val='${empty item.thumbnail}' val2='false'>
  684. <ss:equal val='${item.service.state}' val2='0'>
  685. item.thumb = "${sessionScope['ssUser'].skinDir}image/object/default-${item.ssObjName}.png";
  686. </ss:equal>
  687. <ss:notEqual val='${item.service.state}' val2='0'>
  688. item.thumb = "<ss:serv name='dlByHttp' parm='{"wdConfirmationCaptchaService":"0","path":"${item.thumbnail.value}","type":"img"}'/>";
  689. </ss:notEqual>
  690. item.errorThumb = '${sessionScope['ssUser'].skinDir}image/object/default.png';
  691. </ss:equal>
  692. <%--标题--%>
  693. <ss:equal val='${empty item.first}' val2='false'> <%-- 改 equal:val1="true" val2="${not empty item.first}"。Lin --%>
  694. <%--不带codebook--%>
  695. <ss:equal val='${empty item.first.field.cbName}' val2='true'>
  696. item.title = '<ss:txt val='${item.first.value}' fmt='${item.first.field.fmt}'/>';
  697. </ss:equal>
  698. <%--带codebook--%>
  699. <ss:equal val='${empty item.first.field.cbName}' val2='false'>
  700. item.title = '<ss:cbTrans cb='${item.first.field.cbName}' val='${item.first.value}'/>';
  701. </ss:equal>
  702. </ss:equal>
  703. <%--缺标题显示属性start--%>
  704. <ss:equal val='${empty item.first && not empty item.third}' val2='true'>
  705. <ss:rpt name='${item.third}' id='itemList'>
  706. <ss:rpt name='${itemList}' id='item2'>
  707. item.title = '${item2.field.desc}:';
  708. <%--不带codebook--%>
  709. <ss:equal val='${empty item2.field.cbName}' val2='true'>
  710. item.title += '<ss:txt val='${item2.value}' fmt='${item2.field.fmt}' miniDate='false'/>&nbsp;';
  711. </ss:equal>
  712. <%--带codebook--%>
  713. <ss:equal val='${empty item2.field.cbName}' val2='false'>
  714. item.title += '<ss:cbTrans cb='${item2.field.cbName}' val='${item2.value}'/>&nbsp;';
  715. </ss:equal>
  716. </ss:rpt>
  717. </ss:rpt>
  718. </ss:equal>
  719. <%--正文或摘要--%>
  720. <ss:equal val='${empty item.second}' val2='false'>
  721. item.summary = '${item.second.value}';
  722. </ss:equal>
  723. <%-- 列表底部的对象属性(tags) --%>
  724. <ss:equal val='${empty item.first || empty item.third}' val2='false'>
  725. <%-- item.tags=[]; item.tags如果值为空,则会vue组件初始化失败,把item.tags的初始化变为提到条件之外,变成一定会初始化 Ben --%>
  726. <ss:rpt name='${item.third}' id='itemList'>
  727. <ss:rpt name='${itemList}' id='item2'>
  728. {
  729. let v;
  730. <%--不带codebook--%>
  731. <ss:equal val='${empty item2.field.cbName}' val2='true'>
  732. v = '<ss:txt val='${item2.value}' fmt='${item2.field.fmt}' miniDate='false'/>';
  733. </ss:equal>
  734. <%--带codebook--%>
  735. <ss:equal val='${empty item2.field.cbName}' val2='false'>
  736. v = '<ss:cbTrans cb='${item2.field.cbName}' val='${item2.value}'/>';
  737. </ss:equal>
  738. item.tags.push({'${item2.field.desc}': v});
  739. }
  740. </ss:rpt>
  741. </ss:rpt>
  742. </ss:equal>
  743. <%-- 对象变动前后属性列表 --%>
  744. item.changeItems = [];
  745. <ss:rpt name='${item.forth}' id='item3'>
  746. item.changeItems.push({
  747. name: '${item3.name}', oldValue: '${item3.oldValue}', newValue: '${item3.newValue}',
  748. onclick: function () {
  749. <ss:equal val='${item3.field["type"]}' val2='8'> <%-- ="html" --%>
  750. wd.display.showComponent({
  751. show: ["wdDialog"],
  752. url: "<ss:serv parm='{"wdConfirmationCaptchaService":"0","newValue":"${item3.newValue}","oldValue":"${item3.oldValue}","type":"html"}' dest='bd_zwdb'/>",
  753. title: "正文对比",
  754. width: 1010,
  755. height: 540
  756. });
  757. </ss:equal>
  758. <ss:equal val='${item3.field["type"]}' valList='5,6'> <%-- ="picture,photo" --%>
  759. wd.display.showComponent({
  760. show: ["wdDialog"],
  761. url: "<ss:serv parm='{"wdConfirmationCaptchaService":"0","newValue":"${item3.newValue}","oldValue":"${item3.oldValue}"}' dest='bd_tpdb'/>",
  762. title: "图片对比",
  763. width: 1010,
  764. height: 530
  765. });
  766. </ss:equal>
  767. <ss:equal val='${item3.field["type"]}' valList='2,3,1,9'> <%-- ="number,time,text,cms" --%>
  768. <%-- 原代码这里什么也没 --%>
  769. </ss:equal>
  770. }
  771. });
  772. </ss:rpt>
  773. <%-- 二级对象申请查看页面 --%>
  774. <ss:equal val='${dataType}' val2='bdplay'>
  775. item.buttons = [];
  776. item.buttons.push(
  777. {
  778. id: "${btn.btnID}",
  779. titlexxx: "申请查看",
  780. class: "cart-list-setting",
  781. title: "申请查看",
  782. onclick: () => {
  783. wd.display.showComponent({
  784. show: ["wdDialog"],
  785. url: "<ss:serv name='${btn.servName}' dest='${btn.dest}' parm='${btn.parm}'/>",
  786. title: "${btn.title}",
  787. width: "${btn.width}",
  788. height: "${btn.height}",
  789. minHeight: "${btn.minHeight}",
  790. maxHeight: "${btn.maxHeight}"
  791. });
  792. }
  793. }
  794. );
  795. </ss:equal>
  796. }
  797. </ss:rpt>
  798. <%-- 草稿箱end --%>
  799. //在用或停用的对象列表
  800. window.SS.dom.listConfig.list = [];
  801. <ss:rpt name='objectList' id='item'><%-- 循环一次生成一行列表 start --%>
  802. {
  803. let item = {};//列表的其中一行的属性
  804. window.SS.dom.listConfig.list.push(item);
  805. item.tags = [];
  806. <%-- item.tags如果值为空,则会vue组件初始化失败,把item.tags的初始化变为提到条件之外,变成一定会初始化 Ben --%>
  807. <ss:equal val='${item.service.state}' val2='0'><%-- 借阅 --%>
  808. item.onclick = function () {
  809. wd.display.showComponent({
  810. show: ["wdDialog"],
  811. url: "<ss:serv name='ydsq_tj' parm='{"wdConfirmationCaptchaService":"0","ssObjId":"${item.ssObjId}","ssObjName":"${item.ssObjName}"}' dest='ydsq_tj'/>",
  812. title: "借阅",
  813. width: 613,
  814. height: 387
  815. });
  816. }
  817. </ss:equal>
  818. <ss:equal val='${empty item.service.play}' val2='false'><%-- 查看播放 --%>
  819. item.titlexxx = '${item.service.play.title}';
  820. item.onclick = function () {
  821. wd.display.showComponent({
  822. show: ["wdDialog"],
  823. url: "<ss:serv name='${item.service.play.servName}' dest='${item.service.play.dest}' parm='${item.service.play.parm}'/>",
  824. title: "${item.service.play.title}",
  825. width: ((${item.service.play.width}+DOM_SIZE_objInfoTabWidth) + ""),
  826. height: "${item.service.play.height}",
  827. minHeight: "${item.service.play.minHeight}",
  828. maxHeight: "${item.service.play.maxHeight}"
  829. });
  830. }
  831. </ss:equal>
  832. <%-- 缩略图 --%>
  833. <ss:equal val='${empty item.thumbnail}' val2='false'>
  834. <ss:equal val='${item.service.state}' val2='0'> <%-- 改 equal:val1="${item.service.state==0}" val2="true"。Lin --%>
  835. item.thumb = "${sessionScope['ssUser'].skinDir}image/object/default-${item.ssObjName}.png";
  836. item.errorThumb = '${sessionScope['ssUser'].skinDir}image/object/default.png';
  837. </ss:equal>
  838. <ss:notEqual val='${item.service.state}' val2='0'>
  839. item.thumb = "<ss:serv name='dlByHttp' parm='{"wdConfirmationCaptchaService":"0","path":"${item.thumbnail.value}","type":"img"}'/>";
  840. </ss:notEqual>
  841. </ss:equal>
  842. <%-- 标题 --%>
  843. <ss:equal val='${empty item.first}' val2='false'>
  844. <%--不带codebook--%>
  845. <ss:equal val='${empty item.first.field.cbName}' val2='true'>
  846. item.title = "<ss:txt val='${item.first.value}' fmt='${item.first.field.fmt}' miniDate='false'/>";
  847. </ss:equal>
  848. <%--带codebook--%>
  849. <ss:equal val='${empty item.first.field.cbName}' val2='false'>
  850. item.title = "<ss:cbTrans cb='${item.first.field.cbName}' val='${item.first.value}'/>";
  851. </ss:equal>
  852. </ss:equal>
  853. <%--缺标题显示属性start--%>
  854. <ss:equal val='${empty item.first && not empty item.third}' val2='true'>
  855. item.title = '';
  856. <ss:rpt name='${item.third}' id='itemList'>
  857. <ss:rpt name='${itemList}' id='item2'>
  858. item.title += '${item2.field.desc}:';
  859. <%--属性名--%>
  860. <%--不带codebook--%>
  861. <ss:equal val='${empty item2.field.cbName}' val2='true'>
  862. item.title += "<ss:txt val='${item2.value}' fmt='${item2.field.fmt}' miniDate='false'/>&nbsp;";
  863. </ss:equal>
  864. <%--带codebook--%>
  865. <ss:equal val='${empty item2.field.cbName}' val2='false'>
  866. item.title += "<ss:cbTrans cb='${item2.field.cbName}' val='${item2.value}'/>&nbsp;";
  867. </ss:equal>
  868. </ss:rpt>
  869. </ss:rpt>
  870. </ss:equal>
  871. <%--缺标题显示属性end--%>
  872. <%-- 摘要 --%>
  873. <ss:equal val='${empty item.second}' val2='false'>
  874. item.summary = '${item.second.value}';
  875. </ss:equal>
  876. <%-- 列表底部的对象标签组 --%>
  877. <ss:equal val='${empty item.first || empty item.third}' val2='false'>
  878. <%--item.tags=[]; item.tags如果值为空,则会vue组件初始化失败,把item.tags的初始化变为提到条件之外,变成一定会初始化 Ben --%>
  879. <ss:rpt name='${item.third}' id='itemList'>
  880. <ss:rpt name='${itemList}' id='item2'>
  881. {
  882. let v;
  883. <%--不带codebook--%>
  884. <ss:equal val='${empty item2.field.cbName}' val2='true'>
  885. v = '<ss:txt val='${item2.value}' fmt='${item2.field.fmt}' miniDate='false'/>';
  886. </ss:equal>
  887. <%--带codebook--%>
  888. <ss:equal val='${empty item2.field.cbName}' val2='false'>
  889. v = '<ss:cbTrans cb='${item2.field.cbName}' val='${item2.value}'/>';
  890. </ss:equal>
  891. item.tags.push({
  892. ${item2.field.desc}:
  893. v
  894. })
  895. ;
  896. }
  897. </ss:rpt>
  898. </ss:rpt>
  899. </ss:equal>
  900. <%--按钮--%>
  901. item.buttons = [];
  902. <ss:equal val='${empty item.service.change}' val2='false'>
  903. item.buttons.push(
  904. {
  905. id: "${'chg'==item.service.change.function.name?'change':'enable'}",
  906. titlexxx: "${item.service.change.title}",
  907. class: "cart-list-setting",
  908. title: "${'submRes'==item.service.change.function.name?'启用':'变动'}",
  909. onclick: () => {
  910. <%-- 下面的宽度width,如果是变动,则加上选项卡宽度 Ben(20251214) --%>
  911. wd.display.showComponent({
  912. show: ["wdDialog"],
  913. url: "<ss:serv name='${item.service.change.servName}' dest='${item.service.change.dest}' parm='${item.service.change.parm}'/>",
  914. title: "${item.service.change.title}",
  915. width: ((${item.service.change.width}+${'chg'==item.service.change.function.name?'DOM_SIZE_objInfoTabWidth':'0'}) + ""),
  916. height: "${item.service.change.height}",
  917. minHeight: "${item.service.change.minHeight}",
  918. maxHeight: "${item.service.change.maxHeight}"
  919. });
  920. }
  921. }
  922. );
  923. </ss:equal>
  924. <ss:equal val='${empty item.service.update}' val2='false'>
  925. item.buttons.push(
  926. {
  927. id: "update",
  928. titlexxx: "${item.service.update.title}",
  929. class: "cart-list-setting",
  930. title: "修改",
  931. onclick: () => {
  932. wd.display.showComponent({
  933. show: ["wdDialog"],
  934. url: "<ss:serv name='${item.service.update.servName}' dest='${item.service.update.dest}' parm='${item.service.update.parm}'/>",
  935. title: "${item.service.update.title}",
  936. width: ((${item.service.update.width}+DOM_SIZE_objInfoTabWidth) + ""),
  937. height: "${item.service.update.height}",
  938. minHeight: "${item.service.update.minHeight}",
  939. maxHeight: "${item.service.update.maxHeight}"
  940. });
  941. }
  942. }
  943. );
  944. </ss:equal>
  945. }
  946. </ss:rpt><%-- 循环一次生成一行列表 end --%>
  947. </script>
  948. <%-- <div class="search-bar">--%>
  949. <%-- <ss-breadcrumb></ss-breadcrumb>--%>
  950. <%-- <div class="search-bar-contaienr">--%>
  951. <!-- <ss-objp
  952. v-model="csd"
  953. name="csd"
  954. :opt="[{ label: '广东', value: '1' },{ label: '广西', value: '2' }]"
  955. placeholder="省份"
  956. width="150"
  957. input="true"
  958. ></ss-objp> -->
  959. <!-- <ss-search-input
  960. name="keyword"
  961. placeholder="关键词"
  962. v-model="form.keyword"
  963. width="200px"
  964. >
  965. </ss-search-input> -->
  966. <%-- <template v-for="item in formElemConfig">
  967. <template v-if="item.type == systemType.SEARCHDATE">
  968. <ss-search-date-picker
  969. v-model="item.value"
  970. :name="item.name"
  971. type="date"
  972. :placeholder="item.desc"
  973. width="100px"
  974. ></ss-search-date-picker>
  975. </template>
  976. <template v-if="item.type == systemType.SEARCHTIME">
  977. <ss-search-date-picker
  978. v-model="item.value"
  979. :name="item.name"
  980. type="time"
  981. :placeholder="item.desc"
  982. width="100px"
  983. ></ss-search-date-picker>
  984. </template>
  985. <template v-if="item.type == systemType.SEARCHDATETIME">
  986. <ss-search-date-picker
  987. v-model="item.value"
  988. :name="item.name"
  989. type="datetime"
  990. :placeholder="item.desc"
  991. width="200px"
  992. ></ss-search-date-picker>
  993. </template>
  994. <template v-if="item.type == systemType.OBJPICKER">
  995. <ss-objp
  996. v-model="item.value"
  997. :name="item.name"
  998. :opt="item.options"
  999. :placeholder="item.desc"
  1000. width="150"
  1001. input="true"
  1002. ></ss-objp>
  1003. </template>
  1004. <template v-if="item.type == systemType.SEARCHINPUT">
  1005. <ss-search-input
  1006. :name="item.name"
  1007. :placeholder="item.desc"
  1008. v-model="item.value"
  1009. width="100px"
  1010. >
  1011. </ss-search-input>
  1012. </template>
  1013. </template>
  1014. <ss-search-button
  1015. text="所有"
  1016. icon-class="nav-icon-search"
  1017. :opt="searchButtonConfig"
  1018. :check-id="searchButtonConfigCheckId"
  1019. ></ss-search-button>
  1020. <template v-for="item in btnElemConfig">
  1021. <ss-search-button
  1022. :text="item.desc"
  1023. icon-class="nav-icon-add"
  1024. :opt="item.dropOptions"
  1025. :check-id="item.dropOptionsCheckId"
  1026. :onclick="item.onclick"
  1027. ></ss-search-button>
  1028. </template> --%>
  1029. <!-- <ss-search-button
  1030. text="新增(无下拉)"
  1031. icon-class="nav-icon-add"
  1032. onclick="console.log('点击了')"
  1033. ></ss-search-button> -->
  1034. <%-- </div>--%>
  1035. <%-- </div>--%>
  1036. <div class="content-area item-content-area" style="gap: 20px">
  1037. <%-- // 功能说明:二级列表加载中提示(搜索/翻页走接口刷新) by xu 20260115 --%>
  1038. <div v-if="loadingCobj" class="cobj-loading">
  1039. <div class="cobj-spinner"></div>
  1040. </div>
  1041. <!-- // 功能说明:二级列表接口返回 ssCode/ssMsg 时展示错误信息 by xu 20260206 -->
  1042. <div v-else-if="cobjInitError" class="cobj-error">{{ cobjInitError }}</div>
  1043. <template v-else>
  1044. <template v-for="(item, i) in listConfig.draftbox" :key="i">
  1045. <ss-folder-card v-if="item.children" :item="item"></ss-folder-card>
  1046. <ss-cobj-card-list v-else :item="item" :ss-obj-name="ssObjName"></ss-cobj-card-list>
  1047. <!-- // 功能说明:二级对象列表使用 ss-cobj-card-list(新卡片样式但仅查看) by xu 20260115 -->
  1048. </template>
  1049. <template v-for="(item, i) in listConfig.list" :key="i">
  1050. <ss-folder-card v-if="item.children" :item="item"></ss-folder-card>
  1051. <ss-cobj-card-list v-else :item="item" :ss-obj-name="ssObjName"></ss-cobj-card-list>
  1052. <!-- // 功能说明:二级对象列表使用 ss-cobj-card-list(新卡片样式但仅查看) by xu 20260115 -->
  1053. </template>
  1054. <%-- // 功能说明:二级对象翻页:改用前端 ssPaging(接口返回)驱动分页组件 by xu 20260115 --%>
  1055. <ss-page
  1056. v-show="Number(ssPaging && ssPaging.rowNum || 0) > 0"
  1057. :total="Number(ssPaging && ssPaging.rowNum || 0)"
  1058. :size="Number(ssPaging && ssPaging.rowNumPer || 12)" <%-- // 功能说明:分页默认每页12条 by xu 20260116 --%>
  1059. :page="Number(ssPaging && ssPaging.pageNo || 1)"
  1060. @change="handlePageChange">
  1061. </ss-page>
  1062. </template>
  1063. </div>
  1064. <input name='wdComponentID' type='hidden' value='cobjList'/>
  1065. </form>
  1066. </div>
  1067. <script>
  1068. var all = $("tr[searchid][searchpid='']");
  1069. for (var i = 0; i < all.length; i++) {
  1070. var searchid = $(all[i]).attr("searchid");
  1071. var child = $("tr[searchpid='" + searchid + "' ]").length;
  1072. console.log(child);
  1073. $("tr[searchid][searchpid='']").eq(i).find('.listnumber').html(child);
  1074. }
  1075. </script>
  1076. <script type="text/javascript">var wdRecordValue = '${wdRecordValue}';</script>
  1077. <script type="text/javascript" src="/ss/js/wdRecord.js"></script>
  1078. <script type="text/javascript">(function () {
  1079. wdRecord("cobjList");
  1080. })();</script>
  1081. <script type="text/javascript" src="/ss/js/wdFitHeight.js"></script>
  1082. <script type="text/javascript">initWdFitHeight(100)</script>
  1083. <script type="text/javascript">initWdFitHeightFunction = function () {
  1084. initWdFitHeight(100);
  1085. };</script>
  1086. <ss:equal val="${empty resizeComponent}" val2="false">
  1087. <script>{
  1088. var iframe = wd.display.getFrameOfWindow();
  1089. if (iframe && iframe.contentWindow == window)
  1090. wd.display.resizeComponent(${resizeComponent.width}, ${resizeComponent.height}, ${empty resizeComponent.minHeight?'null':resizeComponent.minHeight}, ${empty resizeComponent.maxHeight?'null':resizeComponent.maxHeight});
  1091. }</script>
  1092. </ss:equal>
  1093. <ss:help/>
  1094. </body>
  1095. <script type="text/javascript">
  1096. try {
  1097. wd.display.showMsgPopup('${msg}');
  1098. } catch (err) {
  1099. console.error(err);
  1100. }
  1101. </script>
  1102. <ss:equal val="${empty wdclosewindowparam}" val2="false">
  1103. <script type="text/javascript">
  1104. try {
  1105. wd.display.setCloseWindowParam('${wdclosewindowparam}');
  1106. } catch (err) {
  1107. console.error(err);
  1108. }
  1109. </script>
  1110. </ss:equal>
  1111. </html>
  1112. <script type="module">
  1113. <%-- 打印新UI相关json对象 --%>
  1114. console.log('搜索条件:' + JSON.stringify(window.SS.dom.formElemConfig));
  1115. console.log('按钮:' + JSON.stringify(window.SS.dom.btnElemConfig));
  1116. console.log('列表:' + JSON.stringify(window.SS.dom.listConfig));
  1117. function objectPickMockAjax(url) {
  1118. return new Promise((resolve) => {
  1119. setTimeout(() => {
  1120. resolve([
  1121. {label: '学校领导', value: '190'},
  1122. {label: '业务部', value: '101241'},
  1123. {label: '男', value: '1'},
  1124. {label: '女', value: '2'}
  1125. ]);
  1126. }, 1000);
  1127. });
  1128. }
  1129. // 定义 objPickerLoad 函数
  1130. async function objPickerLoad(url, optionsName) {
  1131. const result = await objectPickMockAjax(url);
  1132. return result;
  1133. }
  1134. console.log(window.SS.dom.formElemConfig);
  1135. const data = {
  1136. systemType: window.SS.dom.TYPE,
  1137. listConfig: window.SS.dom.listConfig,
  1138. formElemConfig: window.SS.dom.formElemConfig,
  1139. btnElemConfig: window.SS.dom.btnElemConfig,
  1140. // 功能说明:二级对象查询服务名(首次/后续统一一个),用于初始化时调接口打印返回 by xu 20260115
  1141. ssSearchCobjServName: "${ssSearchCobjServName}",
  1142. requestParentViewObject:"${requestParentViewObject}",
  1143. // 功能说明:从 JSP 注入当前对象信息,供二级对象初始化接口拼参使用(key=ssObjName+'id') by xu 20260115
  1144. ssObjName: "${ssObjName}",
  1145. ssObjId: "${ssObjId}",
  1146. ssPobjIdName: "${ssPobjIdName}",
  1147. // 功能说明:二级对象页面:接口返回的搜索/按钮/草稿/列表/翻页数据(无右侧栏) by xu 20260115
  1148. searchFieldList: [],
  1149. rootFuncList: [],
  1150. hasKeyWord: false,
  1151. searchForm: {},
  1152. // 功能说明:搜索条件下拉 option 映射(key=字段名,value=options数组),用于回显选中 by xu 20260115
  1153. searchFieldOptMap: {},
  1154. // 功能说明:缩略图类型(与 objList 一致:1=thumbnail,2=photo),用于卡片占位区域判断 by xu 20260115
  1155. thnType: 0,
  1156. ssPaging: {pageNo: 1, rowNumPer: 12, rowNum: 0}, // 功能说明:默认每页12条 by xu 20260116
  1157. // 功能说明:二级列表接口加载状态(搜索/翻页) by xu 20260115
  1158. loadingCobj: false,
  1159. // 功能说明:二级列表接口错误信息(返回 ssCode/ssMsg 时展示) by xu 20260206
  1160. cobjInitError: "",
  1161. // 功能说明:二级列表请求序号,避免并发返回覆盖(取最后一次) by xu 20260115
  1162. cobjReqId: 0,
  1163. searchButtonConfigCheckId: '${management}',
  1164. searchButtonConfig: [
  1165. {id: "99", desc: "所有"},
  1166. {id: "2", desc: "管理"},
  1167. {id: "1", desc: "创建"},
  1168. {id: "3", desc: "已办"},
  1169. {id: "55", desc: "停用"},
  1170. ],
  1171. }
  1172. if (window.SS.dom.formElemConfig) {
  1173. Object.entries(window.SS.dom.formElemConfig).forEach(([key, config]) => {
  1174. data[key] = config.value;
  1175. // 处理 objPicker
  1176. if (config.type === window.SS.dom.TYPE.OBJPICKER) {
  1177. data[key + "ObjPicker"] = true;
  1178. data[key + "Option"] = [];
  1179. data[key + "Url"] = config.optUrl;
  1180. }
  1181. })
  1182. }
  1183. console.log('data:' + JSON.stringify(data));
  1184. SS.ready(function () {
  1185. try {
  1186. window.ss.dom.initializeFormApp({
  1187. el: "#app",
  1188. data() {
  1189. return data;
  1190. },
  1191. methods: {
  1192. // 功能说明:从表单提取参数,供二级对象初始化接口调用 by xu 20260115
  1193. getSearchFormParams() {
  1194. var params = {};
  1195. // 功能说明:二级对象初始化接口仅传查询相关参数,过滤统计图等无关隐藏字段 by xu 20260115
  1196. // 功能说明:分页参数以 pageNo/rowNumPer/rowNum 为准,过滤旧分页/组件标识字段,避免入参混乱 by xu 20260115
  1197. // 功能说明:rowNum/pageCount/rowCountPerPage 这类为回显/统计字段,初始化查询不需要传给后端 by xu 20260115
  1198. var skip = {
  1199. addgrtjUrl: 1,
  1200. grtjSizeUrl: 1,
  1201. getgrtjJsonUrl: 1,
  1202. pageCount: 1,
  1203. rowCountPerPage: 1,
  1204. wdComponentID: 1,
  1205. rowNum: 1
  1206. };
  1207. try {
  1208. var arr = $("#myForm").serializeArray();
  1209. arr.forEach(function (it) {
  1210. if (!it || !it.name) return;
  1211. if (skip[it.name]) return;
  1212. params[it.name] = it.value;
  1213. });
  1214. } catch (e) {
  1215. console.log("getSearchFormParams failed", e);
  1216. }
  1217. // 功能说明:接口驱动搜索条件时,searchForm 可能不落到 DOM input,上行序列化取不到;这里补充合并 by xu 20260115
  1218. try {
  1219. var sf = this.searchForm || {};
  1220. Object.keys(sf).forEach(function (k) {
  1221. var v = sf[k];
  1222. if (v === undefined || v === null) return;
  1223. if (typeof v === "object") return;
  1224. params[k] = String(v);
  1225. });
  1226. } catch (e) {
  1227. }
  1228. // 功能说明:分页参数以页面 ssPaging 为准(仅传 pageNo/rowNumPer),避免把 rowNum(总数) 回传后端 by xu 20260115
  1229. try {
  1230. if (this.ssPaging) {
  1231. params.pageNo = Number(this.ssPaging.pageNo || 1);
  1232. params.rowNumPer = Number(this.ssPaging.rowNumPer || 12); // 功能说明:分页默认每页12条 by xu 20260116
  1233. }
  1234. } catch (e) {
  1235. }
  1236. return params;
  1237. },
  1238. // 功能说明:触发搜索(重置页码并重新调用接口) by xu 20260115
  1239. doSearch() {
  1240. try {
  1241. this.ssPaging.pageNo = 1;
  1242. } catch (e) {
  1243. }
  1244. this.loadCobjInit();
  1245. },
  1246. // 功能说明:切换范围(所有/管理/创建/已办/停用)不再提交表单,改为走接口刷新 by xu 20260115
  1247. switchScope(management) {
  1248. try {
  1249. document.getElementsByName("management")[0].value = String(management);
  1250. } catch (e) {
  1251. }
  1252. try {
  1253. this.searchButtonConfigCheckId = String(management);
  1254. } catch (e) {
  1255. }
  1256. this.doSearch();
  1257. },
  1258. // 功能说明:调用 /service?ssServ=... 并解析 JSON,供二级对象初始化调试使用 by xu 20260115
  1259. callSsService(ssServ, extraParams) {
  1260. if (!ssServ) return Promise.resolve(null);
  1261. var p = extraParams || {};
  1262. return new Promise(function (resolve) {
  1263. $.ajax({
  1264. type: "get",
  1265. url: "/service",
  1266. data: Object.assign({ssServ: ssServ}, p),
  1267. dataType: "text",
  1268. })
  1269. .done(function (text) {
  1270. if (typeof text !== "string") return resolve(text);
  1271. var t = String(text || "").trim();
  1272. if (!t) return resolve(null);
  1273. try {
  1274. return resolve(JSON.parse(t));
  1275. } catch (e) {
  1276. return resolve(text);
  1277. }
  1278. })
  1279. .fail(function (xhr, status, err) {
  1280. console.log("callSsService failed", ssServ, status, err);
  1281. resolve(null);
  1282. });
  1283. });
  1284. },
  1285. // 功能说明:二级对象页面初始化时调用 ssSearchCobjServName 并打印返回(仅联调用) by xu 20260115
  1286. loadCobjInit() {
  1287. var self = this;
  1288. var ssServ = this.ssSearchCobjServName;
  1289. if (!ssServ) return;
  1290. // 功能说明:进入 loading,并递增请求序号(只处理最后一次返回) by xu 20260115
  1291. var reqId = (this.cobjReqId = Number(this.cobjReqId || 0) + 1);
  1292. var startedAt = Date.now();
  1293. this.loadingCobj = true;
  1294. // 功能说明:发起新请求前清空上一次接口错误提示 by xu 20260206
  1295. this.cobjInitError = "";
  1296. var params = this.getSearchFormParams();
  1297. // 功能说明:二级对象查询额外携带“当前对象id”(key=ssObjName+'id',value=ssObjId),由 JSP 注入 by xu 20260115
  1298. try {
  1299. var objName = String(this.ssObjName || "").trim();
  1300. var objId = String(this.ssObjId || "").trim();
  1301. if (objName && objId) params[this.ssPobjIdName] = objId;
  1302. } catch (e) {
  1303. }
  1304. // 功能说明:二级对象查询额外携带 requestParentViewObject(由 JSP 注入),用于后端识别父视图对象请求场景 by xu 20260126
  1305. try {
  1306. var rpv = String(this.requestParentViewObject || "").trim();
  1307. if (rpv) params.requestParentViewObject = rpv;
  1308. } catch (e) {
  1309. }
  1310. // 功能说明:打印最终请求参数,避免不清楚拼接了什么 by xu 20260115
  1311. try {
  1312. console.log("[cobj] init params", params);
  1313. console.log("[cobj] init qs", $.param(Object.assign({ssServ: ssServ}, params)));
  1314. } catch (e) {
  1315. }
  1316. this.callSsService(ssServ, params)
  1317. .then(function (res) {
  1318. if (reqId !== self.cobjReqId) return;
  1319. console.log("[cobj] init", ssServ, res);
  1320. // 功能说明:接口返回同时包含 ssCode/ssMsg 时按错误态展示在页面 by xu 20260206
  1321. var isBizError = !!(res && typeof res === "object"
  1322. && Object.prototype.hasOwnProperty.call(res, "ssCode")
  1323. && Object.prototype.hasOwnProperty.call(res, "ssMsg"));
  1324. if (isBizError) {
  1325. self.cobjInitError = "错误(" + String(res.ssCode) + "):" + String(res.ssMsg == null ? "" : res.ssMsg);
  1326. return;
  1327. }
  1328. // 功能说明:将接口返回写回页面(搜索条件/根按钮/草稿箱/列表/翻页),用于二级对象新UI渲染 by xu 20260115
  1329. try {
  1330. var ssData = res && typeof res === "object" ? (res.ssData || res) : null;
  1331. if (ssData) self.applyCobjData(ssData);
  1332. } catch (e) {
  1333. }
  1334. })
  1335. .finally(function () {
  1336. if (reqId !== self.cobjReqId) return;
  1337. var delay = Math.max(0, 200 - (Date.now() - startedAt));
  1338. setTimeout(function () {
  1339. if (reqId !== self.cobjReqId) return;
  1340. self.loadingCobj = false;
  1341. }, delay);
  1342. });
  1343. },
  1344. // 功能说明:将 cobjList 接口返回映射到页面状态(无右侧栏) by xu 20260115
  1345. applyCobjData(ssData) {
  1346. if (!ssData || typeof ssData !== "object") return;
  1347. this.searchFieldList = Array.isArray(ssData.searchFieldList) ? ssData.searchFieldList : [];
  1348. this.rootFuncList = Array.isArray(ssData.rootFuncList) ? ssData.rootFuncList : [];
  1349. this.hasKeyWord = !!ssData.hasKeyWord;
  1350. // 功能说明:缩略图类型 thnType 由接口返回(若存在),用于统一控制卡片是否保留缩略图区域 by xu 20260115
  1351. try {
  1352. if (ssData.thnType != null) this.thnType = Number(ssData.thnType || 0);
  1353. } catch (e) {
  1354. }
  1355. // 功能说明:根据 searchFieldList 拉取下拉选项(cbName),用于回显选中项 by xu 20260115
  1356. this.loadSearchFieldOptions();
  1357. if (ssData.ssPaging && typeof ssData.ssPaging === "object") {
  1358. this.ssPaging = {
  1359. pageNo: Number(ssData.ssPaging.pageNo || 1),
  1360. rowNumPer: Number(ssData.ssPaging.rowNumPer || 12), // 功能说明:分页默认每页12条 by xu 20260116
  1361. rowNum: Number(ssData.ssPaging.rowNum || 0),
  1362. };
  1363. }
  1364. var self = this;
  1365. // 功能说明:二级对象卡片字段规范化(title/catList 支持 fmt 时间格式化),逻辑参考 objList by xu 20260115
  1366. function pad2(n) {
  1367. return String(n).padStart(2, "0");
  1368. }
  1369. function toDate(val) {
  1370. if (val == null) return null;
  1371. if (val instanceof Date) return isNaN(val.getTime()) ? null : val;
  1372. try {
  1373. var s = String(val);
  1374. s = s.replace(/\u00a0|\u202f/g, " ").replace(/ /g, " ").trim();
  1375. var d = new Date(s);
  1376. return isNaN(d.getTime()) ? null : d;
  1377. } catch (e) {
  1378. return null;
  1379. }
  1380. }
  1381. function normalizeVal(v) {
  1382. if (v === undefined || v === null) return "";
  1383. if (typeof v === "string" || typeof v === "number" || typeof v === "boolean") return String(v);
  1384. if (typeof v === "object") {
  1385. if (v.val != null) {
  1386. if (v.fmt) return window.ssTools.formatValByFmt(v.val, v.fmt);
  1387. return String(v.val);
  1388. }
  1389. }
  1390. return String(v);
  1391. }
  1392. function normalizeTitle(t) {
  1393. return normalizeVal(t);
  1394. }
  1395. function normalizeCard(raw) {
  1396. var card = raw && typeof raw === "object" ? Object.assign({}, raw) : {};
  1397. card.title = normalizeTitle(raw && raw.title);
  1398. // 功能说明:二级对象卡片缩略图规则参考 objList:用 thumbType 控制“是否保留缩略图区域”,thumb 有值才渲染图片(无图显示占位) by xu 20260115
  1399. try {
  1400. var thnType = Number(self.thnType || 0);
  1401. if (thnType === 1) card.thumbType = "thumbnail";
  1402. else if (thnType === 2) card.thumbType = "photo";
  1403. } catch (e) {
  1404. }
  1405. // 功能说明:thn 不为空 => 有图片(否则组件按 thumbType 显示占位 icon);URL 走 dlByHttp by xu 20260115
  1406. try {
  1407. var thn = raw && raw.thn;
  1408. if (thn) card.thumb = window.ssTools.buildThumbUrl(thn);
  1409. } catch (e) {
  1410. }
  1411. // 功能说明:二级对象卡片标签:由 catList(desc/val) 映射到组件 item.tags(key:desc, value:val) by xu 20260115
  1412. card.tags = [];
  1413. try {
  1414. var catList = raw && Array.isArray(raw.catList) ? raw.catList : [];
  1415. card.tags = catList.map(function (c) {
  1416. if (!c || typeof c !== "object") return null;
  1417. var k = c.desc != null ? String(c.desc) : "";
  1418. if (!k) return null;
  1419. var v = c.fmt ? window.ssTools.formatValByFmt(c.val, c.fmt) : normalizeVal(c.val);
  1420. var o = {};
  1421. o[k] = v;
  1422. return o;
  1423. }).filter(Boolean);
  1424. } catch (e) {
  1425. }
  1426. card.buttons = [];
  1427. if (raw && raw.chg) {
  1428. card.buttons.push({
  1429. id: "change",
  1430. class: "cart-list-setting",
  1431. title: "变动",
  1432. onclick: function () {
  1433. self.openServiceDialog(raw.chg);
  1434. },
  1435. });
  1436. }
  1437. card.onclick = function () {
  1438. if (raw && raw.play) return self.openServiceDialog(raw.play);
  1439. };
  1440. return card;
  1441. }
  1442. var draftList = Array.isArray(ssData.draftList) ? ssData.draftList : [];
  1443. var objList = Array.isArray(ssData.objList) ? ssData.objList : [];
  1444. this.listConfig = this.listConfig || {};
  1445. this.listConfig.draftbox = draftList.map(normalizeCard);
  1446. this.listConfig.list = objList.map(normalizeCard);
  1447. // 功能说明:强制触发一次 listConfig 更新,避免 Vue 不刷新 by xu 20260115
  1448. this.listConfig = Object.assign({}, this.listConfig);
  1449. },
  1450. // 功能说明:缩略图 URL 构建(参考 objList:dlByHttp 直出图片) by xu 20260115
  1451. // 功能说明:拉取 searchFieldList 中 cbName 下拉的 options,并写入 searchFieldOptMap by xu 20260115
  1452. loadSearchFieldOptions() {
  1453. var self = this;
  1454. var list = Array.isArray(this.searchFieldList) ? this.searchFieldList : [];
  1455. if (!list.length) return;
  1456. list.forEach(function (f) {
  1457. if (!f || !f.name || !f.cbName) return;
  1458. if (self.searchFieldOptMap && Array.isArray(self.searchFieldOptMap[f.name]) && self.searchFieldOptMap[f.name].length) return;
  1459. self.callSsService("loadObjpOpt", {
  1460. objectpickerdropdown1: 1,
  1461. cb: f.cbName
  1462. }).then(function (res) {
  1463. var raw = null;
  1464. if (Array.isArray(res)) raw = res;
  1465. else if (res && typeof res === "object") raw = res.ssData || res.data || res.dataArray || null;
  1466. if (!Array.isArray(raw)) raw = [];
  1467. var opts = raw.map(function (it) {
  1468. if (!it || typeof it !== "object") return null;
  1469. var label = it.label != null ? it.label : (it.mc != null ? it.mc : (it.desc != null ? it.desc : ""));
  1470. var value = it.value != null ? it.value : (it.val != null ? it.val : (it.id != null ? it.id : (it.bm != null ? it.bm : "")));
  1471. if (label == null || label === "") label = String(value || "");
  1472. return {label: String(label), value: String(value)};
  1473. }).filter(Boolean);
  1474. self.searchFieldOptMap = Object.assign({}, (self.searchFieldOptMap || {}), {[f.name]: opts});
  1475. });
  1476. });
  1477. },
  1478. // 功能说明:二级对象页面打开服务(兼容 ssToken 与 servName/dest/parm) by xu 20260115
  1479. openServiceDialog(srv) {
  1480. // 功能说明:使用 tools.js 统一封装的 openServiceDialog by xu 20260122
  1481. if (!srv) return;
  1482. window.ssTools.openServiceDialog(srv);
  1483. },
  1484. handlePageChange({pageNo, rowNumPer, rowNum}) {
  1485. // 功能说明:二级对象翻页:更新 ssPaging 后重新调用接口刷新列表 by xu 20260115
  1486. this.ssPaging.pageNo = pageNo;
  1487. this.ssPaging.rowNumPer = rowNumPer;
  1488. this.ssPaging.rowNum = rowNum;
  1489. this.loadCobjInit();
  1490. }
  1491. },
  1492. mounted() {
  1493. const self = this;
  1494. // 功能说明:修复“点击所有/管理后页面消失”:禁止 form submit,改为回调 switchScope 走接口刷新 by xu 20260115
  1495. try {
  1496. if (Array.isArray(this.searchButtonConfig)) {
  1497. this.searchButtonConfig = this.searchButtonConfig.map((opt) => Object.assign({}, opt, {callback: () => this.switchScope(opt.id)}));
  1498. }
  1499. } catch (e) {
  1500. }
  1501. // 功能说明:暴露 vm + 提供 wdRefresh,弹窗保存后只刷新二级对象列表数据(走 Ajax),避免 form.submit 导致白屏 by xu 20260202
  1502. try {
  1503. window.__cobjListVm = this;
  1504. } catch (e) {
  1505. }
  1506. try {
  1507. const vm = this;
  1508. window.wdRefresh = function () {
  1509. try {
  1510. vm.loadCobjInit();
  1511. } catch (e) {
  1512. console.error("[cobjList] wdRefresh failed", e);
  1513. }
  1514. };
  1515. } catch (e) {
  1516. }
  1517. // 功能说明:mounted 时先调二级对象接口打印返回,便于对齐字段 by xu 20260115
  1518. this.loadCobjInit();
  1519. // 在这里可以使用 Vue 实例
  1520. Object.entries(this.$data).forEach(([key, value]) => {
  1521. // 处理 objPicker
  1522. if (key.includes('ObjPicker')) {
  1523. const originalKey = key.replace('ObjPicker', '');
  1524. if (value) {
  1525. objPickerLoad(value, key).then(result => {
  1526. if (self.formElemConfig[originalKey]) {
  1527. self.formElemConfig[originalKey].name = originalKey;
  1528. self.formElemConfig[originalKey].options = result;
  1529. }
  1530. });
  1531. }
  1532. }
  1533. }
  1534. );
  1535. }
  1536. });
  1537. } catch (e) {
  1538. console.log("cobjList error:", e)
  1539. }
  1540. });
  1541. tokenCleanser("<ss:serv name='ss.clearPageToken'/>", {tokenList: "<%= pageContext.getAttribute(ss.page.PageC.PAGE_tokenList)%>"});
  1542. </script>