cobjList.jsp 90 KB

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