cobjList.jsp 90 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656
  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='{"dxm":"${ssObjName}"}'/>"/> <%-- {"wdConfirmationCaptchaService":"0",。Lin --%>
  512. <input name="grtjSizeUrl" type="hidden"
  513. value="<ss:serv name='savePstatSize' parm='{"grtjSize":"ssVal{grtjSize}"}'/>"/> <%-- name='save_grtjSize'。{"wdConfirmationCaptchaService":"0",。Lin --%>
  514. <input name="getgrtjJsonUrl" type="hidden"
  515. value="<ss:serv name='getgrtjJson'/>"/> <%-- parm='{"wdConfirmationCaptchaService":"0"}'。Lin --%>
  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='{"grtjid":"${item.grtjid}","ssObjName":"${ssObjName}"}'
  531. dest='grtj_sz'/>",title:"挑选指标",width:1000,height:800});'>
  532. <%-- {"wdConfirmationCaptchaService":"0",。Lin --%>
  533. </span>
  534. </div>
  535. </ss:rpt>
  536. <div>
  537. <%--<div class="graphButton button icon-add" style="height: 60px;line-height: 82px;float: right;margin-right: 0px;margin-top: 0px;">增加</div>
  538. <input name="initTj" onclick='@service{name:"initTj",dest:"sys_info",show:"wdDialog"}@' value="初始化" type="button" />--%>
  539. </div>
  540. </div>
  541. </ss:equal>
  542. <%--个人统计表end--%>
  543. <div style="clear: both;"></div>
  544. <script type="text/javascript" src="/ss/env/env_search.js"></script>
  545. <%--搜索结果start--%>
  546. <%--<div class="longCardList-div" style="box-sizing: border-box;" ssFith="true">
  547. <table class="scrollbar" style="max-height: 100%;width: 100%;">
  548. <tbody style="width: 100%;padding: 0px 16px 0px 11px;box-sizing: border-box;" ssFith='{list:true,rowHeight:35}'>--%><%-- 去掉 id="wdTbody0",好像没用到。Lin --%>
  549. <%-- <ss:rpt name='bgmbList' id='item'>--%>
  550. <%-- <tr>--%>
  551. <%-- <td class="hLine"--%>
  552. <%-- 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});'>--%>
  553. <%-- <div class="longCardList-info bb" style="font-size: 0px;display: inline-block;float: left;">--%>
  554. <%-- <span class="longCardList-highlight" style="margin-bottom: 3px;">--%>
  555. <%-- <a>${item.mc}</a>--%>
  556. <%-- </span>--%>
  557. <%-- <div id="${item.bgmbid}" class="longCardList-dim growHeightDiv" width='750' height='45px'>--%>
  558. <%-- <ss:txt val='${item.ms}'/>--%>
  559. <%-- </div>--%>
  560. <%-- <script type="text/javascript" charset="utf-8" src="/ss/js/growHeight.js"></script>--%>
  561. <%--<script type="text/javascript" charset="utf-8" src="/ss/js/display.js"></script>--%>
  562. <%--<script type="text/javascript" charset="utf-8" >--%>
  563. <%--wd.display.initGrowHigh('${item.bgmbid}','80px',{},null,false);--%>
  564. <%--</script>--%>
  565. <%-- <div id="${item.bgmbid}${index}" class="longCardList" width='750' height='18px'>--%>
  566. <%-- <ss:txt val='${item.lmms}'/>--%>
  567. <%-- </div>--%>
  568. <%-- <script type="text/javascript" charset="utf-8" src="/ss/js/growHeight.js"></script>--%>
  569. <%--<script type="text/javascript" charset="utf-8" src="/ss/js/display.js"></script>--%>
  570. <%--<script type="text/javascript" charset="utf-8" >--%>
  571. <%--wd.display.initGrowHigh('${item.bgmbid}${index}','80px',{},null,false);--%>
  572. <%--</script>--%>
  573. <%-- </div>--%>
  574. <%-- <a class="button icon-change"--%>
  575. <%-- 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});'>--%>
  576. <%-- 变动--%>
  577. <%-- </a>--%>
  578. <%-- </td>--%>
  579. <%-- </tr>--%>
  580. <%-- </ss:rpt>--%>
  581. <%-- 新UI初始化查询列表数据的JS --%>
  582. <script>
  583. <%-- 打印新UI相关json对象 --%>
  584. window.SS.dom.listConfig = window.SS.dom.listConfig || {};
  585. //二级对象 草稿箱
  586. window.SS.dom.listConfig.draftbox = [];
  587. <%-- 草稿箱start --%>
  588. <ss:rpt name='cgxList' id='item'>
  589. {
  590. let item = {};
  591. window.SS.dom.listConfig.draftbox.push(item);
  592. item.tags = [];
  593. <%-- item.tags如果值为空,则会vue组件初始化失败,把item.tags的初始化变为提到条件之外,变成一定会初始化 Ben --%>
  594. <%-- 查看事件 --%>
  595. <ss:equal val='${empty item.service.play}' val2='false'>
  596. item.onclick = function () {
  597. wd.display.showComponent({
  598. show: ["wdDialog"],
  599. url: "<ss:serv name='${item.service.play.servName}' dest='${item.service.play.dest}' parm='${item.service.play.parm}'/>",
  600. title: "${item.service.play.title}",
  601. width: "${item.service.play.width}",
  602. height: "${item.service.play.height}",
  603. minHeight: "${item.service.play.minHeight}",
  604. maxHeight: "${item.service.play.maxHeight}"
  605. });
  606. };
  607. </ss:equal>
  608. <ss:equal val='${item.service.lbm==1 && not empty item.service.update}' val2='true'>
  609. item.onclick = function () {
  610. wd.display.showComponent({
  611. show: ["wdDialog"],
  612. url: "<ss:serv name='${item.service.update.servName}' dest='${item.service.update.dest}' parm='${item.service.update.parm}'/>",
  613. title: "${item.service.update.title}",
  614. width: "${item.service.update.width}",
  615. height: "${item.service.update.height}",
  616. minHeight: "${item.service.update.minHeight}",
  617. maxHeight: "${item.service.update.maxHeight}"
  618. });
  619. };
  620. </ss:equal>
  621. <ss:equal val='${item.service.lbm==11 && not empty item.service.change}' val2='true'>
  622. item.onclick = function () {
  623. wd.display.showComponent({
  624. show: ["wdDialog"],
  625. url: "<ss:serv name='${item.service.change.servName}' dest='${item.service.change.dest}' parm='${item.service.change.parm}'/>",
  626. title: "${item.service.change.title}",
  627. width: "${item.service.change.width}",
  628. height: "${item.service.change.height}",
  629. minHeight: "${item.service.change.minHeight}",
  630. maxHeight: "${item.service.change.maxHeight}"
  631. });
  632. };
  633. </ss:equal>
  634. <ss:equal val='${dataType}' valList='normal,change'>
  635. <ss:equal val='${item.service.lbm}' valList='51,55'>
  636. item.onclick = function () {
  637. wd.display.showComponent({
  638. show: ["wdDialog"],
  639. url: "<ss:serv name='delChildChg' parm='{"sqid":"${item.sqid}"}' dest='childChgDelSure'/>", // {"wdConfirmationCaptchaService":"0",。Lin
  640. title: "删除二级对象的变动",
  641. width: 901,
  642. height: 380,
  643. minHeight: 53,
  644. maxHeight: 432
  645. });
  646. };
  647. </ss:equal>
  648. </ss:equal>
  649. <%-- 增加,审核时查看 基本情况变动。Start。Lin --%>
  650. <ss:equal val='${dataType}' val2='bdplay'>
  651. <ss:equal val='${item.service.lbm}' val2='11'>
  652. item.onclick = function () {
  653. wd.display.showComponent({
  654. show: ["wdDialog"],
  655. url: "<ss:serv name='selChgInfo' parm='{"sqid":"${item.sqid}"}' dest='childChgInfo'/>", // {"wdConfirmationCaptchaService":"0",。Lin
  656. title: "二级对象的变动信息",
  657. width: 1020,
  658. height: 215,
  659. minHeight: 200,
  660. maxHeight: 660
  661. });
  662. };
  663. </ss:equal>
  664. </ss:equal>
  665. <%-- 增加,审核时查看 基本情况变动。End。Lin --%>
  666. <%--图标--%>
  667. <ss:equal val='${item.service.lbm}' val2='1'>
  668. item.titlexxx = "增加";
  669. item.icon = "icon-add";
  670. </ss:equal>
  671. <ss:equal val='${item.service.lbm}' val2='11'>
  672. item.titlexxx = "变动";
  673. item.icon = "icon-change";
  674. </ss:equal>
  675. <ss:equal val='${item.service.lbm}' val2='51'>
  676. item.titlexxx = "停用";
  677. item.icon = "icon-disable";
  678. </ss:equal>
  679. <ss:equal val='${item.service.lbm}' val2='55'>
  680. item.titlexxx = "启用";
  681. item.icon = "icon-enable";
  682. </ss:equal>
  683. <%--缩略图--%>
  684. <ss:equal val='${empty item.thumbnail}' val2='false'>
  685. <ss:equal val='${item.service.state}' val2='0'>
  686. item.thumb = "${sessionScope['ssUser'].skinDir}image/object/default-${item.ssObjName}.png";
  687. </ss:equal>
  688. <ss:notEqual val='${item.service.state}' val2='0'>
  689. item.thumb = "<ss:serv name='dlByHttp' parm='{"path":"${item.thumbnail.value}","type":"img"}'/>"; // {"wdConfirmationCaptchaService":"0",。Lin
  690. </ss:notEqual>
  691. item.errorThumb = '${sessionScope['ssUser'].skinDir}image/object/default.png';
  692. </ss:equal>
  693. <%--标题--%>
  694. <ss:equal val='${empty item.first}' val2='false'> <%-- 改 equal:val1="true" val2="${not empty item.first}"。Lin --%>
  695. <%--不带codebook--%>
  696. <ss:equal val='${empty item.first.field.cbName}' val2='true'>
  697. item.title = '<ss:txt val='${item.first.value}' fmt='${item.first.field.fmt}'/>';
  698. </ss:equal>
  699. <%--带codebook--%>
  700. <ss:equal val='${empty item.first.field.cbName}' val2='false'>
  701. item.title = '<ss:cbTrans cb='${item.first.field.cbName}' val='${item.first.value}'/>';
  702. </ss:equal>
  703. </ss:equal>
  704. <%--缺标题显示属性start--%>
  705. <ss:equal val='${empty item.first && not empty item.third}' val2='true'>
  706. <ss:rpt name='${item.third}' id='itemList'>
  707. <ss:rpt name='${itemList}' id='item2'>
  708. item.title = '${item2.field.desc}:';
  709. <%--不带codebook--%>
  710. <ss:equal val='${empty item2.field.cbName}' val2='true'>
  711. item.title += '<ss:txt val='${item2.value}' fmt='${item2.field.fmt}' miniDate='false'/>&nbsp;';
  712. </ss:equal>
  713. <%--带codebook--%>
  714. <ss:equal val='${empty item2.field.cbName}' val2='false'>
  715. item.title += '<ss:cbTrans cb='${item2.field.cbName}' val='${item2.value}'/>&nbsp;';
  716. </ss:equal>
  717. </ss:rpt>
  718. </ss:rpt>
  719. </ss:equal>
  720. <%--正文或摘要--%>
  721. <ss:equal val='${empty item.second}' val2='false'>
  722. item.summary = '${item.second.value}';
  723. </ss:equal>
  724. <%-- 列表底部的对象属性(tags) --%>
  725. <ss:equal val='${empty item.first || empty item.third}' val2='false'>
  726. <%-- item.tags=[]; item.tags如果值为空,则会vue组件初始化失败,把item.tags的初始化变为提到条件之外,变成一定会初始化 Ben --%>
  727. <ss:rpt name='${item.third}' id='itemList'>
  728. <ss:rpt name='${itemList}' id='item2'>
  729. {
  730. let v;
  731. <%--不带codebook--%>
  732. <ss:equal val='${empty item2.field.cbName}' val2='true'>
  733. v = '<ss:txt val='${item2.value}' fmt='${item2.field.fmt}' miniDate='false'/>';
  734. </ss:equal>
  735. <%--带codebook--%>
  736. <ss:equal val='${empty item2.field.cbName}' val2='false'>
  737. v = '<ss:cbTrans cb='${item2.field.cbName}' val='${item2.value}'/>';
  738. </ss:equal>
  739. item.tags.push({'${item2.field.desc}': v});
  740. }
  741. </ss:rpt>
  742. </ss:rpt>
  743. </ss:equal>
  744. <%-- 对象变动前后属性列表 --%>
  745. item.changeItems = [];
  746. <ss:rpt name='${item.forth}' id='item3'>
  747. item.changeItems.push({
  748. name: '${item3.name}', oldValue: '${item3.oldValue}', newValue: '${item3.newValue}',
  749. onclick: function () {
  750. <ss:equal val='${item3.field["type"]}' val2='8'> <%-- ="html" --%>
  751. wd.display.showComponent({
  752. show: ["wdDialog"],
  753. url: "<ss:serv parm='{"newValue":"${item3.newValue}","oldValue":"${item3.oldValue}","type":"html"}' dest='bd_zwdb'/>", // {"wdConfirmationCaptchaService":"0",。Lin
  754. title: "正文对比",
  755. width: 1010,
  756. height: 540
  757. });
  758. </ss:equal>
  759. <ss:equal val='${item3.field["type"]}' valList='5,6'> <%-- ="picture,photo" --%>
  760. wd.display.showComponent({
  761. show: ["wdDialog"],
  762. url: "<ss:serv parm='{"newValue":"${item3.newValue}","oldValue":"${item3.oldValue}"}' dest='bd_tpdb'/>", // {"wdConfirmationCaptchaService":"0",。Lin
  763. title: "图片对比",
  764. width: 1010,
  765. height: 530
  766. });
  767. </ss:equal>
  768. <ss:equal val='${item3.field["type"]}' valList='2,3,1,9'> <%-- ="number,time,text,cms" --%>
  769. <%-- 原代码这里什么也没 --%>
  770. </ss:equal>
  771. }
  772. });
  773. </ss:rpt>
  774. <%-- 二级对象申请查看页面 --%>
  775. <ss:equal val='${dataType}' val2='bdplay'>
  776. item.buttons = [];
  777. item.buttons.push(
  778. {
  779. id: "${btn.btnID}",
  780. titlexxx: "申请查看",
  781. class: "cart-list-setting",
  782. title: "申请查看",
  783. onclick: () => {
  784. wd.display.showComponent({
  785. show: ["wdDialog"],
  786. url: "<ss:serv name='${btn.servName}' dest='${btn.dest}' parm='${btn.parm}'/>",
  787. title: "${btn.title}",
  788. width: "${btn.width}",
  789. height: "${btn.height}",
  790. minHeight: "${btn.minHeight}",
  791. maxHeight: "${btn.maxHeight}"
  792. });
  793. }
  794. }
  795. );
  796. </ss:equal>
  797. }
  798. </ss:rpt>
  799. <%-- 草稿箱end --%>
  800. //在用或停用的对象列表
  801. window.SS.dom.listConfig.list = [];
  802. <ss:rpt name='objectList' id='item'><%-- 循环一次生成一行列表 start --%>
  803. {
  804. let item = {};//列表的其中一行的属性
  805. window.SS.dom.listConfig.list.push(item);
  806. item.tags = [];
  807. <%-- item.tags如果值为空,则会vue组件初始化失败,把item.tags的初始化变为提到条件之外,变成一定会初始化 Ben --%>
  808. <ss:equal val='${item.service.state}' val2='0'><%-- 借阅 --%>
  809. item.onclick = function () {
  810. wd.display.showComponent({
  811. show: ["wdDialog"],
  812. url: "<ss:serv name='ydsq_tj' parm='{"ssObjId":"${item.ssObjId}","ssObjName":"${item.ssObjName}"}' dest='ydsq_tj'/>", // {"wdConfirmationCaptchaService":"0",。Lin
  813. title: "借阅",
  814. width: 613,
  815. height: 387
  816. });
  817. }
  818. </ss:equal>
  819. <ss:equal val='${empty item.service.play}' val2='false'><%-- 查看播放 --%>
  820. item.titlexxx = '${item.service.play.title}';
  821. item.onclick = function () {
  822. wd.display.showComponent({
  823. show: ["wdDialog"],
  824. url: "<ss:serv name='${item.service.play.servName}' dest='${item.service.play.dest}' parm='${item.service.play.parm}'/>",
  825. title: "${item.service.play.title}",
  826. width: ((${item.service.play.width}+DOM_SIZE_objInfoTabWidth) + ""),
  827. height: "${item.service.play.height}",
  828. minHeight: "${item.service.play.minHeight}",
  829. maxHeight: "${item.service.play.maxHeight}"
  830. });
  831. }
  832. </ss:equal>
  833. <%-- 缩略图 --%>
  834. <ss:equal val='${empty item.thumbnail}' val2='false'>
  835. <ss:equal val='${item.service.state}' val2='0'> <%-- 改 equal:val1="${item.service.state==0}" val2="true"。Lin --%>
  836. item.thumb = "${sessionScope['ssUser'].skinDir}image/object/default-${item.ssObjName}.png";
  837. item.errorThumb = '${sessionScope['ssUser'].skinDir}image/object/default.png';
  838. </ss:equal>
  839. <ss:notEqual val='${item.service.state}' val2='0'>
  840. item.thumb = "<ss:serv name='dlByHttp' parm='{"path":"${item.thumbnail.value}","type":"img"}'/>"; // {"wdConfirmationCaptchaService":"0",。Lin
  841. </ss:notEqual>
  842. </ss:equal>
  843. <%-- 标题 --%>
  844. <ss:equal val='${empty item.first}' val2='false'>
  845. <%--不带codebook--%>
  846. <ss:equal val='${empty item.first.field.cbName}' val2='true'>
  847. item.title = "<ss:txt val='${item.first.value}' fmt='${item.first.field.fmt}' miniDate='false'/>";
  848. </ss:equal>
  849. <%--带codebook--%>
  850. <ss:equal val='${empty item.first.field.cbName}' val2='false'>
  851. item.title = "<ss:cbTrans cb='${item.first.field.cbName}' val='${item.first.value}'/>";
  852. </ss:equal>
  853. </ss:equal>
  854. <%--缺标题显示属性start--%>
  855. <ss:equal val='${empty item.first && not empty item.third}' val2='true'>
  856. item.title = '';
  857. <ss:rpt name='${item.third}' id='itemList'>
  858. <ss:rpt name='${itemList}' id='item2'>
  859. item.title += '${item2.field.desc}:';
  860. <%--属性名--%>
  861. <%--不带codebook--%>
  862. <ss:equal val='${empty item2.field.cbName}' val2='true'>
  863. item.title += "<ss:txt val='${item2.value}' fmt='${item2.field.fmt}' miniDate='false'/>&nbsp;";
  864. </ss:equal>
  865. <%--带codebook--%>
  866. <ss:equal val='${empty item2.field.cbName}' val2='false'>
  867. item.title += "<ss:cbTrans cb='${item2.field.cbName}' val='${item2.value}'/>&nbsp;";
  868. </ss:equal>
  869. </ss:rpt>
  870. </ss:rpt>
  871. </ss:equal>
  872. <%--缺标题显示属性end--%>
  873. <%-- 摘要 --%>
  874. <ss:equal val='${empty item.second}' val2='false'>
  875. item.summary = '${item.second.value}';
  876. </ss:equal>
  877. <%-- 列表底部的对象标签组 --%>
  878. <ss:equal val='${empty item.first || empty item.third}' val2='false'>
  879. <%--item.tags=[]; item.tags如果值为空,则会vue组件初始化失败,把item.tags的初始化变为提到条件之外,变成一定会初始化 Ben --%>
  880. <ss:rpt name='${item.third}' id='itemList'>
  881. <ss:rpt name='${itemList}' id='item2'>
  882. {
  883. let v;
  884. <%--不带codebook--%>
  885. <ss:equal val='${empty item2.field.cbName}' val2='true'>
  886. v = '<ss:txt val='${item2.value}' fmt='${item2.field.fmt}' miniDate='false'/>';
  887. </ss:equal>
  888. <%--带codebook--%>
  889. <ss:equal val='${empty item2.field.cbName}' val2='false'>
  890. v = '<ss:cbTrans cb='${item2.field.cbName}' val='${item2.value}'/>';
  891. </ss:equal>
  892. item.tags.push({
  893. ${item2.field.desc}:
  894. v
  895. })
  896. ;
  897. }
  898. </ss:rpt>
  899. </ss:rpt>
  900. </ss:equal>
  901. <%--按钮--%>
  902. item.buttons = [];
  903. <ss:equal val='${empty item.service.change}' val2='false'>
  904. item.buttons.push(
  905. {
  906. id: "${'chg'==item.service.change.function.name?'change':'enable'}",
  907. titlexxx: "${item.service.change.title}",
  908. class: "cart-list-setting",
  909. title: "${'submRes'==item.service.change.function.name?'启用':'变动'}",
  910. onclick: () => {
  911. <%-- 下面的宽度width,如果是变动,则加上选项卡宽度 Ben(20251214) --%>
  912. wd.display.showComponent({
  913. show: ["wdDialog"],
  914. url: "<ss:serv name='${item.service.change.servName}' dest='${item.service.change.dest}' parm='${item.service.change.parm}'/>",
  915. title: "${item.service.change.title}",
  916. width: ((${item.service.change.width}+${'chg'==item.service.change.function.name?'DOM_SIZE_objInfoTabWidth':'0'}) + ""),
  917. height: "${item.service.change.height}",
  918. minHeight: "${item.service.change.minHeight}",
  919. maxHeight: "${item.service.change.maxHeight}"
  920. });
  921. }
  922. }
  923. );
  924. </ss:equal>
  925. <ss:equal val='${empty item.service.update}' val2='false'>
  926. item.buttons.push(
  927. {
  928. id: "update",
  929. titlexxx: "${item.service.update.title}",
  930. class: "cart-list-setting",
  931. title: "修改",
  932. onclick: () => {
  933. wd.display.showComponent({
  934. show: ["wdDialog"],
  935. url: "<ss:serv name='${item.service.update.servName}' dest='${item.service.update.dest}' parm='${item.service.update.parm}'/>",
  936. title: "${item.service.update.title}",
  937. width: ((${item.service.update.width}+DOM_SIZE_objInfoTabWidth) + ""),
  938. height: "${item.service.update.height}",
  939. minHeight: "${item.service.update.minHeight}",
  940. maxHeight: "${item.service.update.maxHeight}"
  941. });
  942. }
  943. }
  944. );
  945. </ss:equal>
  946. }
  947. </ss:rpt><%-- 循环一次生成一行列表 end --%>
  948. </script>
  949. <%-- <div class="search-bar">--%>
  950. <%-- <ss-breadcrumb></ss-breadcrumb>--%>
  951. <%-- <div class="search-bar-contaienr">--%>
  952. <!-- <ss-objp
  953. v-model="csd"
  954. name="csd"
  955. :opt="[{ label: '广东', value: '1' },{ label: '广西', value: '2' }]"
  956. placeholder="省份"
  957. width="150"
  958. input="true"
  959. ></ss-objp> -->
  960. <!-- <ss-search-input
  961. name="keyword"
  962. placeholder="关键词"
  963. v-model="form.keyword"
  964. width="200px"
  965. >
  966. </ss-search-input> -->
  967. <%-- <template v-for="item in formElemConfig">
  968. <template v-if="item.type == systemType.SEARCHDATE">
  969. <ss-search-date-picker
  970. v-model="item.value"
  971. :name="item.name"
  972. type="date"
  973. :placeholder="item.desc"
  974. width="100px"
  975. ></ss-search-date-picker>
  976. </template>
  977. <template v-if="item.type == systemType.SEARCHTIME">
  978. <ss-search-date-picker
  979. v-model="item.value"
  980. :name="item.name"
  981. type="time"
  982. :placeholder="item.desc"
  983. width="100px"
  984. ></ss-search-date-picker>
  985. </template>
  986. <template v-if="item.type == systemType.SEARCHDATETIME">
  987. <ss-search-date-picker
  988. v-model="item.value"
  989. :name="item.name"
  990. type="datetime"
  991. :placeholder="item.desc"
  992. width="200px"
  993. ></ss-search-date-picker>
  994. </template>
  995. <template v-if="item.type == systemType.OBJPICKER">
  996. <ss-objp
  997. v-model="item.value"
  998. :name="item.name"
  999. :opt="item.options"
  1000. :placeholder="item.desc"
  1001. width="150"
  1002. input="true"
  1003. ></ss-objp>
  1004. </template>
  1005. <template v-if="item.type == systemType.SEARCHINPUT">
  1006. <ss-search-input
  1007. :name="item.name"
  1008. :placeholder="item.desc"
  1009. v-model="item.value"
  1010. width="100px"
  1011. >
  1012. </ss-search-input>
  1013. </template>
  1014. </template>
  1015. <ss-search-button
  1016. text="所有"
  1017. icon-class="nav-icon-search"
  1018. :opt="searchButtonConfig"
  1019. :check-id="searchButtonConfigCheckId"
  1020. ></ss-search-button>
  1021. <template v-for="item in btnElemConfig">
  1022. <ss-search-button
  1023. :text="item.desc"
  1024. icon-class="nav-icon-add"
  1025. :opt="item.dropOptions"
  1026. :check-id="item.dropOptionsCheckId"
  1027. :onclick="item.onclick"
  1028. ></ss-search-button>
  1029. </template> --%>
  1030. <!-- <ss-search-button
  1031. text="新增(无下拉)"
  1032. icon-class="nav-icon-add"
  1033. onclick="console.log('点击了')"
  1034. ></ss-search-button> -->
  1035. <%-- </div>--%>
  1036. <%-- </div>--%>
  1037. <div class="content-area item-content-area" style="gap: 20px">
  1038. <%-- // 功能说明:二级列表加载中提示(搜索/翻页走接口刷新) by xu 20260115 --%>
  1039. <div v-if="loadingCobj" class="cobj-loading">
  1040. <div class="cobj-spinner"></div>
  1041. </div>
  1042. <!-- // 功能说明:二级列表接口返回 ssCode/ssMsg 时展示错误信息 by xu 20260206 -->
  1043. <div v-else-if="cobjInitError" class="cobj-error">{{ cobjInitError }}</div>
  1044. <template v-else>
  1045. <template v-for="(item, i) in listConfig.draftbox" :key="i">
  1046. <ss-folder-card v-if="item.children" :item="item"></ss-folder-card>
  1047. <ss-cobj-card-list v-else :item="item" :ss-obj-name="ssObjName"></ss-cobj-card-list>
  1048. <!-- // 功能说明:二级对象列表使用 ss-cobj-card-list(新卡片样式但仅查看) by xu 20260115 -->
  1049. </template>
  1050. <template v-for="(item, i) in listConfig.list" :key="i">
  1051. <ss-folder-card v-if="item.children" :item="item"></ss-folder-card>
  1052. <ss-cobj-card-list v-else :item="item" :ss-obj-name="ssObjName"></ss-cobj-card-list>
  1053. <!-- // 功能说明:二级对象列表使用 ss-cobj-card-list(新卡片样式但仅查看) by xu 20260115 -->
  1054. </template>
  1055. <%-- // 功能说明:二级对象翻页:改用前端 ssPaging(接口返回)驱动分页组件 by xu 20260115 --%>
  1056. <ss-page
  1057. v-show="Number(ssPaging && ssPaging.rowNum || 0) > 0"
  1058. :total="Number(ssPaging && ssPaging.rowNum || 0)"
  1059. :size="Number(ssPaging && ssPaging.rowNumPer || 12)" <%-- // 功能说明:分页默认每页12条 by xu 20260116 --%>
  1060. :page="Number(ssPaging && ssPaging.pageNo || 1)"
  1061. @change="handlePageChange">
  1062. </ss-page>
  1063. </template>
  1064. </div>
  1065. <input name='wdComponentID' type='hidden' value='cobjList'/>
  1066. </form>
  1067. </div>
  1068. <script>
  1069. var all = $("tr[searchid][searchpid='']");
  1070. for (var i = 0; i < all.length; i++) {
  1071. var searchid = $(all[i]).attr("searchid");
  1072. var child = $("tr[searchpid='" + searchid + "' ]").length;
  1073. console.log(child);
  1074. $("tr[searchid][searchpid='']").eq(i).find('.listnumber').html(child);
  1075. }
  1076. </script>
  1077. <script type="text/javascript">var wdRecordValue = '${wdRecordValue}';</script>
  1078. <script type="text/javascript" src="/ss/js/wdRecord.js"></script>
  1079. <script type="text/javascript">(function () {
  1080. wdRecord("cobjList");
  1081. })();</script>
  1082. <script type="text/javascript" src="/ss/js/wdFitHeight.js"></script>
  1083. <script type="text/javascript">initWdFitHeight(100)</script>
  1084. <script type="text/javascript">initWdFitHeightFunction = function () {
  1085. initWdFitHeight(100);
  1086. };</script>
  1087. <ss:equal val="${empty resizeComponent}" val2="false">
  1088. <script>{
  1089. var iframe = wd.display.getFrameOfWindow();
  1090. if (iframe && iframe.contentWindow == window)
  1091. wd.display.resizeComponent(${resizeComponent.width}, ${resizeComponent.height}, ${empty resizeComponent.minHeight?'null':resizeComponent.minHeight}, ${empty resizeComponent.maxHeight?'null':resizeComponent.maxHeight});
  1092. }</script>
  1093. </ss:equal>
  1094. <ss:help/>
  1095. </body>
  1096. <script type="text/javascript">
  1097. try {
  1098. wd.display.showMsgPopup('${msg}');
  1099. } catch (err) {
  1100. console.error(err);
  1101. }
  1102. </script>
  1103. <ss:equal val="${empty wdclosewindowparam}" val2="false">
  1104. <script type="text/javascript">
  1105. try {
  1106. wd.display.setCloseWindowParam('${wdclosewindowparam}');
  1107. } catch (err) {
  1108. console.error(err);
  1109. }
  1110. </script>
  1111. </ss:equal>
  1112. </html>
  1113. <script type="module">
  1114. <%-- 打印新UI相关json对象 --%>
  1115. console.log('搜索条件:' + JSON.stringify(window.SS.dom.formElemConfig));
  1116. console.log('按钮:' + JSON.stringify(window.SS.dom.btnElemConfig));
  1117. console.log('列表:' + JSON.stringify(window.SS.dom.listConfig));
  1118. function objectPickMockAjax(url) {
  1119. return new Promise((resolve) => {
  1120. setTimeout(() => {
  1121. resolve([
  1122. {label: '学校领导', value: '190'},
  1123. {label: '业务部', value: '101241'},
  1124. {label: '男', value: '1'},
  1125. {label: '女', value: '2'}
  1126. ]);
  1127. }, 1000);
  1128. });
  1129. }
  1130. // 定义 objPickerLoad 函数
  1131. async function objPickerLoad(url, optionsName) {
  1132. const result = await objectPickMockAjax(url);
  1133. return result;
  1134. }
  1135. console.log(window.SS.dom.formElemConfig);
  1136. const data = {
  1137. systemType: window.SS.dom.TYPE,
  1138. listConfig: window.SS.dom.listConfig,
  1139. formElemConfig: window.SS.dom.formElemConfig,
  1140. btnElemConfig: window.SS.dom.btnElemConfig,
  1141. // 功能说明:二级对象查询服务名(首次/后续统一一个),用于初始化时调接口打印返回 by xu 20260115
  1142. ssSearchCobjServName: "${ssSearchCobjServName}",
  1143. ssPobjName:"${ssPobjName}", // requestParentViewObject:"${requestParentViewObject}",。Lin
  1144. dataType:"${dataType}", // 增加,传递给 searchCobjByA()。Lin
  1145. // 功能说明:从 JSP 注入当前对象信息,供二级对象初始化接口拼参使用(key=ssObjName+'id') by xu 20260115
  1146. ssObjName: "${ssObjName}",
  1147. ssObjId: "${ssObjId}",
  1148. ssPobjIdName: "${ssPobjIdName}",
  1149. // 功能说明:二级对象页面:接口返回的搜索/按钮/草稿/列表/翻页数据(无右侧栏) by xu 20260115
  1150. searchFieldList: [],
  1151. rootFuncList: [],
  1152. hasKeyWord: false,
  1153. searchForm: {},
  1154. // 功能说明:搜索条件下拉 option 映射(key=字段名,value=options数组),用于回显选中 by xu 20260115
  1155. searchFieldOptMap: {},
  1156. // 功能说明:缩略图类型(与 objList 一致:1=thumbnail,2=photo),用于卡片占位区域判断 by xu 20260115
  1157. thnType: 0,
  1158. ssPaging: {pageNo: 1, rowNumPer: 12, rowNum: 0}, // 功能说明:默认每页12条 by xu 20260116
  1159. // 功能说明:二级列表接口加载状态(搜索/翻页) by xu 20260115
  1160. loadingCobj: false,
  1161. // 功能说明:二级列表接口错误信息(返回 ssCode/ssMsg 时展示) by xu 20260206
  1162. cobjInitError: "",
  1163. // 功能说明:二级列表请求序号,避免并发返回覆盖(取最后一次) by xu 20260115
  1164. cobjReqId: 0,
  1165. searchButtonConfigCheckId: '${management}',
  1166. searchButtonConfig: [
  1167. {id: "99", desc: "所有"},
  1168. {id: "2", desc: "管理"},
  1169. {id: "1", desc: "创建"},
  1170. {id: "3", desc: "已办"},
  1171. {id: "55", desc: "停用"},
  1172. ],
  1173. }
  1174. if (window.SS.dom.formElemConfig) {
  1175. Object.entries(window.SS.dom.formElemConfig).forEach(([key, config]) => {
  1176. data[key] = config.value;
  1177. // 处理 objPicker
  1178. if (config.type === window.SS.dom.TYPE.OBJPICKER) {
  1179. data[key + "ObjPicker"] = true;
  1180. data[key + "Option"] = [];
  1181. data[key + "Url"] = config.optUrl;
  1182. }
  1183. })
  1184. }
  1185. console.log('data:' + JSON.stringify(data));
  1186. SS.ready(function () {
  1187. try {
  1188. window.ss.dom.initializeFormApp({
  1189. el: "#app",
  1190. data() {
  1191. return data;
  1192. },
  1193. methods: {
  1194. // 功能说明:从表单提取参数,供二级对象初始化接口调用 by xu 20260115
  1195. getSearchFormParams() {
  1196. var params = {};
  1197. // 功能说明:二级对象初始化接口仅传查询相关参数,过滤统计图等无关隐藏字段 by xu 20260115
  1198. // 功能说明:分页参数以 pageNo/rowNumPer/rowNum 为准,过滤旧分页/组件标识字段,避免入参混乱 by xu 20260115
  1199. // 功能说明:rowNum/pageCount/rowCountPerPage 这类为回显/统计字段,初始化查询不需要传给后端 by xu 20260115
  1200. var skip = {
  1201. addgrtjUrl: 1,
  1202. grtjSizeUrl: 1,
  1203. getgrtjJsonUrl: 1,
  1204. pageCount: 1,
  1205. rowCountPerPage: 1,
  1206. wdComponentID: 1,
  1207. rowNum: 1
  1208. };
  1209. try {
  1210. var arr = $("#myForm").serializeArray();
  1211. arr.forEach(function (it) {
  1212. if (!it || !it.name) return;
  1213. if (skip[it.name]) return;
  1214. params[it.name] = it.value;
  1215. });
  1216. } catch (e) {
  1217. console.log("getSearchFormParams failed", e);
  1218. }
  1219. // 功能说明:接口驱动搜索条件时,searchForm 可能不落到 DOM input,上行序列化取不到;这里补充合并 by xu 20260115
  1220. try {
  1221. var sf = this.searchForm || {};
  1222. Object.keys(sf).forEach(function (k) {
  1223. var v = sf[k];
  1224. if (v === undefined || v === null) return;
  1225. if (typeof v === "object") return;
  1226. params[k] = String(v);
  1227. });
  1228. } catch (e) {
  1229. }
  1230. // 功能说明:分页参数以页面 ssPaging 为准(仅传 pageNo/rowNumPer),避免把 rowNum(总数) 回传后端 by xu 20260115
  1231. try {
  1232. if (this.ssPaging) {
  1233. params.pageNo = Number(this.ssPaging.pageNo || 1);
  1234. params.rowNumPer = Number(this.ssPaging.rowNumPer || 12); // 功能说明:分页默认每页12条 by xu 20260116
  1235. }
  1236. } catch (e) {
  1237. }
  1238. return params;
  1239. },
  1240. // 功能说明:触发搜索(重置页码并重新调用接口) by xu 20260115
  1241. doSearch() {
  1242. try {
  1243. this.ssPaging.pageNo = 1;
  1244. } catch (e) {
  1245. }
  1246. this.loadCobjInit();
  1247. },
  1248. // 功能说明:切换范围(所有/管理/创建/已办/停用)不再提交表单,改为走接口刷新 by xu 20260115
  1249. switchScope(management) {
  1250. try {
  1251. document.getElementsByName("management")[0].value = String(management);
  1252. } catch (e) {
  1253. }
  1254. try {
  1255. this.searchButtonConfigCheckId = String(management);
  1256. } catch (e) {
  1257. }
  1258. this.doSearch();
  1259. },
  1260. // 功能说明:调用 /service?ssServ=... 并解析 JSON,供二级对象初始化调试使用 by xu 20260115
  1261. callSsService(ssServ, extraParams) {
  1262. if (!ssServ) return Promise.resolve(null);
  1263. var p = extraParams || {};
  1264. return new Promise(function (resolve) {
  1265. $.ajax({
  1266. type: "get",
  1267. url: "/service",
  1268. data: Object.assign({ssServ: ssServ}, p),
  1269. dataType: "text",
  1270. })
  1271. .done(function (text) {
  1272. if (typeof text !== "string") return resolve(text);
  1273. var t = String(text || "").trim();
  1274. if (!t) return resolve(null);
  1275. try {
  1276. return resolve(JSON.parse(t));
  1277. } catch (e) {
  1278. return resolve(text);
  1279. }
  1280. })
  1281. .fail(function (xhr, status, err) {
  1282. console.log("callSsService failed", ssServ, status, err);
  1283. resolve(null);
  1284. });
  1285. });
  1286. },
  1287. // 功能说明:二级对象页面初始化时调用 ssSearchCobjServName 并打印返回(仅联调用) by xu 20260115
  1288. loadCobjInit() {
  1289. var self = this;
  1290. var ssServ = this.ssSearchCobjServName;
  1291. if (!ssServ) return;
  1292. // 功能说明:进入 loading,并递增请求序号(只处理最后一次返回) by xu 20260115
  1293. var reqId = (this.cobjReqId = Number(this.cobjReqId || 0) + 1);
  1294. var startedAt = Date.now();
  1295. this.loadingCobj = true;
  1296. // 功能说明:发起新请求前清空上一次接口错误提示 by xu 20260206
  1297. this.cobjInitError = "";
  1298. var params = this.getSearchFormParams();
  1299. // 功能说明:二级对象查询额外携带“当前对象id”(key=ssObjName+'id',value=ssObjId),由 JSP 注入 by xu 20260115
  1300. try {
  1301. var objName = String(this.ssObjName || "").trim();
  1302. var objId = String(this.ssObjId || "").trim();
  1303. if (objName && objId) params[this.ssPobjIdName] = objId;
  1304. } catch (e) {
  1305. }
  1306. // 功能说明:二级对象查询额外携带 requestParentViewObject(由 JSP 注入),用于后端识别父视图对象请求场景 by xu 20260126
  1307. try {
  1308. var rpv = String(this.ssPobjName || "").trim(); // (this.requestParentViewObject ||。Lin
  1309. if (rpv) params.ssPobjName = rpv; // .requestParentViewObject =。Lin
  1310. /// 增加,传递给 searchCobjByA()。Lin
  1311. var dtv = String(this.dataType || "").trim();
  1312. if (dtv) params.dataType = dtv;
  1313. ///
  1314. } catch (e) {
  1315. }
  1316. // 功能说明:打印最终请求参数,避免不清楚拼接了什么 by xu 20260115
  1317. try {
  1318. console.log("[cobj] init params", params);
  1319. console.log("[cobj] init qs", $.param(Object.assign({ssServ: ssServ}, params)));
  1320. } catch (e) {
  1321. }
  1322. this.callSsService(ssServ, params)
  1323. .then(function (res) {
  1324. if (reqId !== self.cobjReqId) return;
  1325. console.log("[cobj] init", ssServ, res);
  1326. // 功能说明:接口返回同时包含 ssCode/ssMsg 时按错误态展示在页面 by xu 20260206
  1327. var isBizError = !!(res && typeof res === "object"
  1328. && Object.prototype.hasOwnProperty.call(res, "ssCode")
  1329. && Object.prototype.hasOwnProperty.call(res, "ssMsg"));
  1330. if (isBizError) {
  1331. self.cobjInitError = "错误(" + String(res.ssCode) + "):" + String(res.ssMsg == null ? "" : res.ssMsg);
  1332. return;
  1333. }
  1334. // 功能说明:将接口返回写回页面(搜索条件/根按钮/草稿箱/列表/翻页),用于二级对象新UI渲染 by xu 20260115
  1335. try {
  1336. var ssData = res && typeof res === "object" ? (res.ssData || res) : null;
  1337. if (ssData) self.applyCobjData(ssData);
  1338. } catch (e) {
  1339. }
  1340. })
  1341. .finally(function () {
  1342. if (reqId !== self.cobjReqId) return;
  1343. var delay = Math.max(0, 200 - (Date.now() - startedAt));
  1344. setTimeout(function () {
  1345. if (reqId !== self.cobjReqId) return;
  1346. self.loadingCobj = false;
  1347. }, delay);
  1348. });
  1349. },
  1350. // 功能说明:将 cobjList 接口返回映射到页面状态(无右侧栏) by xu 20260115
  1351. applyCobjData(ssData) {
  1352. if (!ssData || typeof ssData !== "object") return;
  1353. this.searchFieldList = Array.isArray(ssData.searchFieldList) ? ssData.searchFieldList : [];
  1354. this.rootFuncList = Array.isArray(ssData.rootFuncList) ? ssData.rootFuncList : [];
  1355. this.hasKeyWord = !!ssData.hasKeyWord;
  1356. // 功能说明:缩略图类型 thnType 由接口返回(若存在),用于统一控制卡片是否保留缩略图区域 by xu 20260115
  1357. try {
  1358. if (ssData.thnType != null) this.thnType = Number(ssData.thnType || 0);
  1359. } catch (e) {
  1360. }
  1361. // 功能说明:根据 searchFieldList 拉取下拉选项(cbName),用于回显选中项 by xu 20260115
  1362. this.loadSearchFieldOptions();
  1363. if (ssData.ssPaging && typeof ssData.ssPaging === "object") {
  1364. this.ssPaging = {
  1365. pageNo: Number(ssData.ssPaging.pageNo || 1),
  1366. rowNumPer: Number(ssData.ssPaging.rowNumPer || 12), // 功能说明:分页默认每页12条 by xu 20260116
  1367. rowNum: Number(ssData.ssPaging.rowNum || 0),
  1368. };
  1369. }
  1370. var self = this;
  1371. // 功能说明:二级对象卡片字段规范化(title/catList 支持 fmt 时间格式化),逻辑参考 objList by xu 20260115
  1372. function pad2(n) {
  1373. return String(n).padStart(2, "0");
  1374. }
  1375. function toDate(val) {
  1376. if (val == null) return null;
  1377. if (val instanceof Date) return isNaN(val.getTime()) ? null : val;
  1378. try {
  1379. var s = String(val);
  1380. s = s.replace(/\u00a0|\u202f/g, " ").replace(/ /g, " ").trim();
  1381. var d = new Date(s);
  1382. return isNaN(d.getTime()) ? null : d;
  1383. } catch (e) {
  1384. return null;
  1385. }
  1386. }
  1387. function normalizeVal(v) {
  1388. if (v === undefined || v === null) return "";
  1389. if (typeof v === "string" || typeof v === "number" || typeof v === "boolean") return String(v);
  1390. if (typeof v === "object") {
  1391. if (v.val != null) {
  1392. if (v.fmt) return window.ssTools.formatValByFmt(v.val, v.fmt);
  1393. return String(v.val);
  1394. }
  1395. }
  1396. return String(v);
  1397. }
  1398. function normalizeTitle(t) {
  1399. return normalizeVal(t);
  1400. }
  1401. function normalizeCard(raw) {
  1402. var card = raw && typeof raw === "object" ? Object.assign({}, raw) : {};
  1403. card.title = normalizeTitle(raw && raw.title);
  1404. // 功能说明:二级对象卡片缩略图规则参考 objList:用 thumbType 控制“是否保留缩略图区域”,thumb 有值才渲染图片(无图显示占位) by xu 20260115
  1405. try {
  1406. var thnType = Number(self.thnType || 0);
  1407. if (thnType === 1) card.thumbType = "thumbnail";
  1408. else if (thnType === 2) card.thumbType = "photo";
  1409. } catch (e) {
  1410. }
  1411. // 功能说明:thn 不为空 => 有图片(否则组件按 thumbType 显示占位 icon);URL 走 dlByHttp by xu 20260115
  1412. try {
  1413. var thn = raw && raw.thn;
  1414. if (thn) card.thumb = window.ssTools.buildThumbUrl(thn);
  1415. } catch (e) {
  1416. }
  1417. // 功能说明:二级对象卡片标签:由 catList(desc/val) 映射到组件 item.tags(key:desc, value:val) by xu 20260115
  1418. card.tags = [];
  1419. try {
  1420. var catList = raw && Array.isArray(raw.catList) ? raw.catList : [];
  1421. card.tags = catList.map(function (c) {
  1422. if (!c || typeof c !== "object") return null;
  1423. var k = c.desc != null ? String(c.desc) : "";
  1424. if (!k) return null;
  1425. var v = c.fmt ? window.ssTools.formatValByFmt(c.val, c.fmt) : normalizeVal(c.val);
  1426. var o = {};
  1427. o[k] = v;
  1428. return o;
  1429. }).filter(Boolean);
  1430. } catch (e) {
  1431. }
  1432. // 功能说明:二级对象卡片按钮:优先使用 chgRootFuncList,否则回退到单个 chg by xu 20250403
  1433. card.buttons = [];
  1434. if (raw && Array.isArray(raw.chgRootFuncList) && raw.chgRootFuncList.length > 0) {
  1435. raw.chgRootFuncList.forEach(function (btn) {
  1436. card.buttons.push({
  1437. id: btn.id || "",
  1438. titlexxx: btn.title || "",
  1439. class: "cart-list-setting",
  1440. title: btn.desc || btn.title || "",
  1441. onclick: function () {
  1442. self.openServiceDialog(btn);
  1443. },
  1444. });
  1445. });
  1446. } else if (raw && raw.chg) {
  1447. card.buttons.push({
  1448. id: "change",
  1449. class: "cart-list-setting",
  1450. title: "变动",
  1451. onclick: function () {
  1452. self.openServiceDialog(raw.chg);
  1453. },
  1454. });
  1455. }
  1456. card.onclick = function () {
  1457. if (raw && raw.play) return self.openServiceDialog(raw.play);
  1458. };
  1459. return card;
  1460. }
  1461. var draftList = Array.isArray(ssData.draftList) ? ssData.draftList : [];
  1462. var objList = Array.isArray(ssData.objList) ? ssData.objList : [];
  1463. this.listConfig = this.listConfig || {};
  1464. this.listConfig.draftbox = draftList.map(normalizeCard);
  1465. this.listConfig.list = objList.map(normalizeCard);
  1466. // 功能说明:强制触发一次 listConfig 更新,避免 Vue 不刷新 by xu 20260115
  1467. this.listConfig = Object.assign({}, this.listConfig);
  1468. },
  1469. // 功能说明:缩略图 URL 构建(参考 objList:dlByHttp 直出图片) by xu 20260115
  1470. // 功能说明:拉取 searchFieldList 中 cbName 下拉的 options,并写入 searchFieldOptMap by xu 20260115
  1471. loadSearchFieldOptions() {
  1472. var self = this;
  1473. var list = Array.isArray(this.searchFieldList) ? this.searchFieldList : [];
  1474. if (!list.length) return;
  1475. list.forEach(function (f) {
  1476. if (!f || !f.name || !f.cbName) return;
  1477. if (self.searchFieldOptMap && Array.isArray(self.searchFieldOptMap[f.name]) && self.searchFieldOptMap[f.name].length) return;
  1478. self.callSsService("loadObjpOpt", {
  1479. objectpickerdropdown1: 1,
  1480. cb: f.cbName
  1481. }).then(function (res) {
  1482. var raw = null;
  1483. if (Array.isArray(res)) raw = res;
  1484. else if (res && typeof res === "object") raw = res.ssData || res.data || res.dataArray || null;
  1485. if (!Array.isArray(raw)) raw = [];
  1486. var opts = raw.map(function (it) {
  1487. if (!it || typeof it !== "object") return null;
  1488. var label = it.label != null ? it.label : (it.mc != null ? it.mc : (it.desc != null ? it.desc : ""));
  1489. var value = it.value != null ? it.value : (it.val != null ? it.val : (it.id != null ? it.id : (it.bm != null ? it.bm : "")));
  1490. if (label == null || label === "") label = String(value || "");
  1491. return {label: String(label), value: String(value)};
  1492. }).filter(Boolean);
  1493. self.searchFieldOptMap = Object.assign({}, (self.searchFieldOptMap || {}), {[f.name]: opts});
  1494. });
  1495. });
  1496. },
  1497. // 功能说明:二级对象页面打开服务(兼容 ssToken 与 servName/dest/parm) by xu 20260115
  1498. openServiceDialog(srv) {
  1499. // 功能说明:使用 tools.js 统一封装的 openServiceDialog by xu 20260122
  1500. if (!srv) return;
  1501. window.ssTools.openServiceDialog(srv);
  1502. },
  1503. handlePageChange({pageNo, rowNumPer, rowNum}) {
  1504. // 功能说明:二级对象翻页:更新 ssPaging 后重新调用接口刷新列表 by xu 20260115
  1505. this.ssPaging.pageNo = pageNo;
  1506. this.ssPaging.rowNumPer = rowNumPer;
  1507. this.ssPaging.rowNum = rowNum;
  1508. this.loadCobjInit();
  1509. }
  1510. },
  1511. mounted() {
  1512. const self = this;
  1513. // 功能说明:修复“点击所有/管理后页面消失”:禁止 form submit,改为回调 switchScope 走接口刷新 by xu 20260115
  1514. try {
  1515. if (Array.isArray(this.searchButtonConfig)) {
  1516. this.searchButtonConfig = this.searchButtonConfig.map((opt) => Object.assign({}, opt, {callback: () => this.switchScope(opt.id)}));
  1517. }
  1518. } catch (e) {
  1519. }
  1520. // 功能说明:暴露 vm + 提供 wdRefresh,弹窗保存后只刷新二级对象列表数据(走 Ajax),避免 form.submit 导致白屏 by xu 20260202
  1521. try {
  1522. window.__cobjListVm = this;
  1523. } catch (e) {
  1524. }
  1525. try {
  1526. const vm = this;
  1527. window.wdRefresh = function () {
  1528. try {
  1529. vm.loadCobjInit();
  1530. } catch (e) {
  1531. console.error("[cobjList] wdRefresh failed", e);
  1532. }
  1533. };
  1534. } catch (e) {
  1535. }
  1536. // 功能说明:mounted 时先调二级对象接口打印返回,便于对齐字段 by xu 20260115
  1537. this.loadCobjInit();
  1538. // 在这里可以使用 Vue 实例
  1539. Object.entries(this.$data).forEach(([key, value]) => {
  1540. // 处理 objPicker
  1541. if (key.includes('ObjPicker')) {
  1542. const originalKey = key.replace('ObjPicker', '');
  1543. if (value) {
  1544. objPickerLoad(value, key).then(result => {
  1545. if (self.formElemConfig[originalKey]) {
  1546. self.formElemConfig[originalKey].name = originalKey;
  1547. self.formElemConfig[originalKey].options = result;
  1548. }
  1549. });
  1550. }
  1551. }
  1552. }
  1553. );
  1554. }
  1555. });
  1556. } catch (e) {
  1557. console.log("cobjList error:", e)
  1558. }
  1559. });
  1560. tokenCleanser("<ss:serv name='clearPageToken'/>", {tokenList: "<%= pageContext.getAttribute(ss.page.PageC.PAGE_tokenList)%>"});
  1561. </script>