rpt_all_popup.ejs 75 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466
  1. <div class="modal fade" id="paper" data-backdrop="static">
  2. <div class="modal-dialog" role="document">
  3. <div class="modal-content">
  4. <div class="modal-header">
  5. <h5 class="modal-title">页边距(毫米)</h5>
  6. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  7. <span aria-hidden="true">&times;</span>
  8. </button>
  9. </div>
  10. <div class="modal-body">
  11. <div class="row mb-1 justify-content-center">
  12. <div class="col-3">
  13. <div class="input-group input-group-sm ">
  14. <div class="input-group-prepend">
  15. <span class="input-group-text">上</span>
  16. </div>
  17. <input type="number" class="form-control form-control-sm" id="elementMargin_Top" value="12" onchange="rptControlObj.changeMargin('Top', this)" onkeyup="rptControlObj.changeMargin('Top', this)">
  18. </div>
  19. </div>
  20. </div>
  21. <div class="row mb-1 align-items-center">
  22. <div class="col-3">
  23. <div class="input-group input-group-sm ">
  24. <div class="input-group-prepend">
  25. <span class="input-group-text">左</span>
  26. </div>
  27. <input type="number" class="form-control form-control-sm" id="elementMargin_Left" value="12" onchange="rptControlObj.changeMargin('Left', this)" onkeyup="rptControlObj.changeMargin('Left', this)">
  28. </div>
  29. </div>
  30. <div class="col-6">
  31. <h1 class="display-4 text-center"><i class="fa fa-file-o"></i></h1>
  32. </div>
  33. <div class="col-3">
  34. <div class="input-group input-group-sm ">
  35. <div class="input-group-prepend">
  36. <span class="input-group-text">右</span>
  37. </div>
  38. <input type="number" class="form-control form-control-sm" id="elementMargin_Right" value="12" onchange="rptControlObj.changeMargin('Right', this)" onkeyup="rptControlObj.changeMargin('Right', this)">
  39. </div>
  40. </div>
  41. </div>
  42. <div class="row mb-1 justify-content-center">
  43. <div class="col-3">
  44. <div class="input-group input-group-sm ">
  45. <div class="input-group-prepend">
  46. <span class="input-group-text">下</span>
  47. </div>
  48. <input type="number" class="form-control form-control-sm" id="elementMargin_Bottom"value="12" onchange="rptControlObj.changeMargin('Bottom', this)" onkeyup="rptControlObj.changeMargin('Bottom', this)">
  49. </div>
  50. </div>
  51. </div>
  52. </div>
  53. <div class="modal-footer">
  54. <button type="button" class="btn btn-link btn-sm float-left" data-dismiss="modal" onclick="zTreeOprObj.changeCfg(rptControlObj.restoreMargine);">恢复默认值</button>
  55. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" onclick="rptControlObj.cancelCfgChange()">取消</button>
  56. <a href="javascript:void(0)" class="btn btn-primary btn-sm" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</a>
  57. </div>
  58. </div>
  59. </div>
  60. </div>
  61. <div class="modal fade" id="format" data-backdrop="static">
  62. <div class="modal-dialog" role="document">
  63. <div class="modal-content">
  64. <div class="modal-header">
  65. <h5 class="modal-title">格式</h5>
  66. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  67. <span aria-hidden="true">&times;</span>
  68. </button>
  69. </div>
  70. <div class="modal-body">
  71. <div class="row mb-1" id="font_cfg_blank_flag"></div>
  72. <div class="row mb-1">
  73. <div class="col-3">边框线粗</div>
  74. <div class="col-4">
  75. <select class="form-control form-control-sm" id="cfg_border_thick" onchange="rptControlObj.changeBorderWeight(this)"><option>1</option><option>2</option></select>
  76. </div>
  77. </div>
  78. </div>
  79. <div class="modal-footer">
  80. <button type="button" class="btn btn-link btn-sm float-left" data-dismiss="modal" onclick="zTreeOprObj.changeCfg(rptControlObj.restoreFormat);">恢复默认值</button>
  81. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" onclick="rptControlObj.cancelCfgChange()">取消</button>
  82. <a href="javascript:void(0)" class="btn btn-primary btn-sm" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</a>
  83. </div>
  84. </div>
  85. </div>
  86. </div>
  87. <!--弹出设置-->
  88. <div class="modal fade" id="setting" data-backdrop="static">
  89. <div class="modal-dialog" role="document">
  90. <div class="modal-content">
  91. <div class="modal-header">
  92. <h5 class="modal-title">设置</h5>
  93. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  94. <span aria-hidden="true">&times;</span>
  95. </button>
  96. </div>
  97. <div class="modal-body">
  98. <div class="row mb-1">
  99. <div class="col-12 mb-1">
  100. <div class="form-check">
  101. <label class="form-check-label">
  102. <input type="checkbox" class="form-check-input" id="cfg_rpt_vertical_line" onchange="rptControlObj.changeCfgOption('showVerticalLine', this)">
  103. 报表边框竖线
  104. </label>
  105. </div>
  106. </div>
  107. <div class="col-12 mb-1">
  108. <div class="form-check">
  109. <label class="form-check-label">
  110. <input type="checkbox" class="form-check-input" id="cfg_rpt_narrow" onchange="rptControlObj.changeCfgOption('isNarrow', this)">
  111. 内容窄体输出
  112. </label>
  113. </div>
  114. </div>
  115. <div class="col-12 mb-1">
  116. <div class="form-check">
  117. <label class="form-check-label">
  118. <input type="checkbox" class="form-check-input" id="cfg_rpt_fill_zero" onchange="rptControlObj.changeCfgOption('fillZero', this)">
  119. 小数补0
  120. </label>
  121. </div>
  122. </div>
  123. <div class="col-12 mb-1" id="cfg_rpt_close_warter_mark_div" >
  124. <div class="form-check">
  125. <label class="form-check-label">
  126. <input type="checkbox" class="form-check-input" id="cfg_rpt_close_warter_mark" onchange="rptControlObj.changeCfgOption('closeWarterMark', this)">
  127. 导出Excel-不带水印
  128. </label>
  129. </div>
  130. </div>
  131. <div class="col-12 mb-1">
  132. <div class="form-check">
  133. <label class="form-check-label">
  134. <input type="checkbox" class="form-check-input" id="cfg_rpt_continuous" onchange="rptControlObj.changeCfgOption('continuousOutput', this)">
  135. 导出Excel-连续输出(仅流水内容报表有效)
  136. </label>
  137. </div>
  138. </div>
  139. </div>
  140. </div>
  141. <div class="modal-footer">
  142. <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal" onclick="rptControlObj.cancelCfgChange()">取消</button>
  143. <a href="javascript:void(0)" class="btn btn-primary btn-sm" data-dismiss="modal" onclick="rptControlObj.confirmCfgChange()">确定</a>
  144. </div>
  145. </div>
  146. </div>
  147. </div>
  148. <div class="modal fade" id="export_excel" data-backdrop="static">
  149. <div class="modal-dialog" role="document">
  150. <div class="modal-content">
  151. <div class="modal-header">
  152. <h5 class="modal-title">批量导出Excel</h5>
  153. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  154. <span aria-hidden="true">&times;</span>
  155. </button>
  156. </div>
  157. <div class="modal-body">
  158. <div class="row">
  159. <div class="col-6">
  160. <div class="card">
  161. <img class="card-img-top" src="/public/images/p2.png">
  162. <div class="card-body px-3">
  163. <div class="form-check">
  164. <input class="form-check-input" type="radio" name="excelExportTypeRadio" id="excelExportType_AllInOneBook" value="option1" checked>
  165. <label class="form-check-label" for="excelExportType_AllInOneBook">
  166. 多个表导出一个Excel文件
  167. </label>
  168. </div>
  169. </div>
  170. </div>
  171. </div>
  172. <div class="col-6">
  173. <div class="card">
  174. <img class="card-img-top" src="/public/images/p1.png">
  175. <div class="card-body px-3">
  176. <div class="form-check">
  177. <input class="form-check-input" type="radio" name="excelExportTypeRadio" id="excelExportType_IndividualBook" value="option2" checked>
  178. <label class="form-check-label" for="excelExportType_IndividualBook">
  179. 每个表导出一个Excel文件
  180. </label>
  181. </div>
  182. </div>
  183. </div>
  184. </div>
  185. </div>
  186. </div>
  187. <div class="modal-footer">
  188. <a onclick="rptControlObj.getExcel()" class="btn btn-primary btn-sm" data-dismiss="modal">确定导出</a>
  189. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">取消</button>
  190. </div>
  191. </div>
  192. </div>
  193. </div>
  194. <div class="modal fade" id="eSignature" data-backdrop="static">
  195. <div class="modal-dialog modal-lg" role="document">
  196. <div class="modal-content">
  197. <div class="modal-header">
  198. <h5 class="modal-title">设置签字(审核通过后才显示)</h5>
  199. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  200. <span aria-hidden="true">&times;</span>
  201. </button>
  202. </div>
  203. <div class="modal-body" id="eSignatureBodyDiv">
  204. </div>
  205. <div class="modal-footer">
  206. <% if ( stg_id > 0 && pageShow !== null && parseInt(pageShow.openSign) === 1) { %>
  207. <button type="button" id="btn_cross_tender" class="btn btn-sm btn-link float-left" data-dismiss="modal" data-toggle="modal" data-target="#batch-eSignature" id="batch-setupProjSignature" onclick="rptSignatureHelper.resetESignature(zTreeOprObj.currentRptPageRst, 'batch-eSignatureBodyDiv'); buildTendersTree_Ex();">批量设置其他标段</button>
  208. <% } %>
  209. <% if (stg_id === -300) { %>
  210. <button type="button" id="btn_cross_tender" class="btn btn-sm btn-link float-left" data-dismiss="modal" data-toggle="modal" data-target="#batch-eSignature" id="batch-setupChangeSignature" onclick="rptSignatureHelper.resetESignature(zTreeOprObj.currentRptPageRst, 'batch-eSignatureBodyDiv', true); buildChangeTree();">批量设置其他变更令</button>
  211. <% } %>
  212. <% if ([-301, -302, -303].indexOf(stg_id) >= 0) { %>
  213. <button type="button" id="btn_cross_tender" class="btn btn-sm btn-link float-left" data-dismiss="modal" data-toggle="modal" data-target="#batch-eSignature"
  214. onclick="rptSignatureHelper.resetESignature(zTreeOprObj.currentRptPageRst, 'batch-eSignatureBodyDiv', true); buildOtherTree(ALL_OTHER);">
  215. 批量设置其他<%- otherHintName %>
  216. </button>
  217. <% } %>
  218. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal" onclick="rptSignatureHelper.removeSelectSignature()">取消</button>
  219. <a href="javascript:void(0);" onclick="rptSignatureHelper.setupAfterSelectSignature('eSignatureBodyDiv')" class="btn btn-primary btn-sm" data-dismiss="modal">确定</a>
  220. </div>
  221. </div>
  222. </div>
  223. </div>
  224. <div class="modal fade" id="batch-eSignature" data-backdrop="static">
  225. <div class="modal-dialog modal-xl" role="document">
  226. <div class="modal-content">
  227. <div class="modal-header">
  228. <h5 class="modal-title">批量设置签字</h5>
  229. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  230. <span aria-hidden="true">&times;</span>
  231. </button>
  232. </div>
  233. <div class="modal-body">
  234. <div class="row">
  235. <div class="col-5">
  236. <div class="modal-height-500" style="overflow-y:auto;">
  237. <table class="table table-hover table-bordered" id="batch_tenders_individual">
  238. </table>
  239. </div>
  240. </div>
  241. <div class="col-7">
  242. <div class="modal-height-500 ml-2" id="batch-eSignatureBodyDiv" style="overflow-y:auto;"></div>
  243. </div>
  244. </div>
  245. <% if (stg_id === -300) { %>
  246. <div class="alert alert-warning">批量操作会覆盖已设置好的签字,请谨慎操作;<b>已选签名的审核时间只对当前变更令有效</b></div>
  247. <% } else if ([-301, -302, -303].indexOf(stg_id) >= 0) { %>
  248. <div class="alert alert-warning">批量操作会覆盖已设置好的签字,请谨慎操作;<b>已选签名的审核时间只对当前<%- otherHintName %>有效</b></div>
  249. <% } else { %>
  250. <div class="alert alert-warning">批量操作会覆盖已设置好的签字,请谨慎操作。</div>
  251. <% } %>
  252. </div>
  253. <div class="modal-footer">
  254. <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
  255. <% if (stg_id === -300) { %>
  256. <a href="javascript:void(0);" onclick="rptSignatureHelper.setupAfterSelectMultiChanges(SELECTED_CHANGES, 'batch-eSignatureBodyDiv')" class="btn btn-sm btn-primary" data-dismiss="modal">确定</a>
  257. <% } else if ([-301, -302, -303].indexOf(stg_id) >= 0) { %>
  258. <a href="javascript:void(0);" onclick="rptSignatureHelper.setupAfterSelectMultiOther(SELECTED_OTHER, 'batch-eSignatureBodyDiv')" class="btn btn-sm btn-primary" data-dismiss="modal">确定</a>
  259. <% } else { %>
  260. <a href="javascript:void(0);" onclick="rptSignatureHelper.setupAfterSelectMultiTenders(SELECTED_TENDERS, 'batch-eSignatureBodyDiv')" class="btn btn-sm btn-primary" data-dismiss="modal">确定</a>
  261. <% } %>
  262. </div>
  263. </div>
  264. </div>
  265. </div>
  266. <!--弹出添加签名人-->
  267. <div class="modal fade" id="add-sign" data-backdrop="static">
  268. <div class="modal-dialog modal-sm" role="document">
  269. <div class="modal-content">
  270. <div class="modal-header">
  271. <h5 class="modal-title">添加签字</h5>
  272. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  273. <span aria-hidden="true">&times;</span>
  274. </button>
  275. </div>
  276. <div class="modal-body">
  277. <ul class="nav nav-tabs justify-content-center mb-1" role="tablist">
  278. <li class="nav-item">
  279. <a class="nav-link active pl-3 p-1" data-toggle="tab" href="#adst-1" role="tab">项目</a>
  280. </li>
  281. <li class="nav-item">
  282. <a class="nav-link pl-3 p-1" data-toggle="tab" href="#adst-2" role="tab"><i class="fa fa-user"></i> 角色</a>
  283. </li>
  284. <li class="nav-item">
  285. <a class="nav-link pl-3 p-1" data-toggle="tab" href="#adst-4" role="tab"><i class="fa fa-user"></i> 流程</a>
  286. </li>
  287. <li class="nav-item">
  288. <a class="nav-link pl-3 p-1" data-toggle="tab" href="#adst-3" role="tab">最近使用</a>
  289. </li>
  290. </ul>
  291. <div class="tab-content">
  292. <div class="tab-pane fade show active" id="adst-1" role="tabpanel" aria-labelledby="home-tab">
  293. <div class="input-group input-group-sm mt-1 mb-2">
  294. <div class="input-group-prepend">
  295. <span class="input-group-text" id="inputGroup-sizing-sm"><i class="fa fa-search" onclick="rptSignatureHelper.buildSelectableAccount(this);"></i></span>
  296. </div>
  297. <input type="text" id="search_account" class="form-control form-control-sm" placeholder="搜索..." onkeypress="searchAccount()">
  298. </div>
  299. <div class="modal-height-300" id="project_account_select_div">
  300. </div>
  301. </div>
  302. <div class="tab-pane fade" id="adst-2" role="tabpanel" aria-labelledby="profile-tab">
  303. <a href="javascript:void(0)" onclick="rptSignatureHelper.switchAddRoleDiv(this)" class="btn btn-sm btn-link">添加角色</a>
  304. <div class="modal-height-300">
  305. <!--添加角色-->
  306. <div class="card" id="role_select_acc_div" style="display:none">
  307. <div class="p-2">
  308. <div class="input-group input-group-sm mb-1">
  309. <div class="input-group-prepend">
  310. <span class="input-group-text" id="inputGroup-sizing-sm">角色名称</span>
  311. </div>
  312. <input type="text" class="form-control form-control-sm" id="acc_role_name" placeholder="最多10个字符">
  313. </div>
  314. <div class="input-group input-group-sm mb-1">
  315. <div class="input-group-prepend">
  316. <span class="input-group-text" id="inputGroup-sizing-sm">绑定成员</span>
  317. </div>
  318. <select class="form-control form-control-sm" id="project_account_select_dom">
  319. </select>
  320. </div>
  321. <a href="javascript:void(0)" onclick="rptSignatureHelper.createNewRole(this)" class="btn btn-sm btn-primary">添加角色</a>
  322. </div>
  323. </div>
  324. <ul class="list-group p-2" id="existed_roles_ul">
  325. </ul>
  326. </div>
  327. </div>
  328. <div class="tab-pane fade" id="adst-3" role="tabpanel" aria-labelledby="contact-tab">
  329. <div class="modal-height-300">
  330. <ul class="list-group" id="account_used_select_div"></ul>
  331. </div>
  332. </div>
  333. <div class="tab-pane fade" id="adst-4" role="tabpanel" aria-labelledby="contact-tab">
  334. <div class="modal-height-300">
  335. <ul class="list-group" id="assistant_audit_account_div"></ul>
  336. </div>
  337. </div>
  338. </div>
  339. </div>
  340. </div>
  341. </div>
  342. </div>
  343. <!--弹出协同人设置签字签章-->
  344. <div class="modal fade" id="add-liucheng" data-backdrop="static">
  345. <div class="modal-dialog modal-lg" role="document">
  346. <div class="modal-content">
  347. <div class="modal-header">
  348. <h5 class="modal-title">设置签字签章</h5>
  349. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  350. <span aria-hidden="true">&times;</span>
  351. </button>
  352. </div>
  353. <div class="modal-body">
  354. <div class="modal-height-300">
  355. <table class="table table-bordered" id="assistant-flow-setting-table" >
  356. </table>
  357. </div>
  358. </div>
  359. <div class="modal-footer">
  360. <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal" onclick="rptSignatureHelper._cancelFlowSignDate(rptSignatureHelper.currentSelectedESignAccName)">关闭</button>
  361. <button type="button" class="btn btn-sm btn-primary" data-dismiss="modal" onclick="rptSignatureHelper._saveFlowSignDate(rptSignatureHelper.currentSelectedESignAccName)">确定</button>
  362. </div>
  363. </div>
  364. </div>
  365. </div>
  366. <!--选择个人章-->
  367. <div class="modal fade" id="chose-private-stamp-path" data-backdrop="static">
  368. <div class="modal-dialog modal-lg" role="document">
  369. <div class="modal-content">
  370. <div class="modal-header">
  371. <h5 class="modal-title" id="select-personal-signature-title">选择个人章</h5>
  372. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  373. <span aria-hidden="true">&times;</span>
  374. </button>
  375. </div>
  376. <div class="modal-body">
  377. </div>
  378. <div class="modal-footer">
  379. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
  380. <button id="audit-select-ok1" class="btn btn-primary btn-sm" onclick="rptSignatureHelper.setPrivateStamp(this)">确定</button>
  381. </div>
  382. </div>
  383. </div>
  384. </div>
  385. <!--选择单位章-->
  386. <div class="modal fade" id="chose-company-stamp-path" data-backdrop="static">
  387. <div class="modal-dialog modal-lg" role="document">
  388. <div class="modal-content">
  389. <div class="modal-header">
  390. <h5 class="modal-title" id="select-company-signature-title">选择单位章</h5>
  391. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  392. <span aria-hidden="true">&times;</span>
  393. </button>
  394. </div>
  395. <div class="modal-body">
  396. </div>
  397. <div class="modal-footer">
  398. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
  399. <button id="audit-select-ok2" class="btn btn-primary btn-sm" onclick="rptSignatureHelper.setCompanyStamp(this)">确定</button>
  400. </div>
  401. </div>
  402. </div>
  403. </div>
  404. <!--选择审批人-->
  405. <div class="modal fade" id="audit-select" data-backdrop="static">
  406. <div class="modal-dialog" role="document">
  407. <div class="modal-content">
  408. <div class="modal-header">
  409. <h5 class="modal-title" id="audit-select-title">重置</h5>
  410. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  411. <span aria-hidden="true">&times;</span>
  412. </button>
  413. </div>
  414. <div class="modal-body">
  415. <table class="table table-bordered">
  416. <tr><th style="width: 50%">报表数据</th><th>审批人</th></tr>
  417. <tbody id="audit-select-list">
  418. </tbody>
  419. </table>
  420. <div id="audit-select-hint" class="text-danger">
  421. </div>
  422. </div>
  423. <div class="modal-footer">
  424. <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
  425. <button id="audit-select-ok" class="btn btn-primary btn-sm" onclick="rptCustomObj.resetAuditSelect(this)">确定</button>
  426. </div>
  427. </div>
  428. </div>
  429. </div>
  430. <!--选择标段-->
  431. <div class="modal fade" id="gather-select" data-backdrop="static">
  432. <div class="modal-dialog modal-lgx" role="document">
  433. <div class="modal-content">
  434. <div class="modal-header">
  435. <h5 class="modal-title" id="gather-select-title">选择标段</h5>
  436. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  437. <span aria-hidden="true">&times;</span>
  438. </button>
  439. </div>
  440. <div class="modal-body">
  441. <div class="row">
  442. <div class="col-7">
  443. <h5>可选标段 </h5>
  444. <div class="modal-height-500" id="gather-source-spread">
  445. </div>
  446. </div>
  447. <div class="col-5">
  448. <h5>已选标段 </h5>
  449. <div class="modal-height-500" id="gather-result-spread">
  450. </div>
  451. <div class="mt-1" id="gather-by-month" style="width: 60%" name="gather-type">
  452. <div class="input-group input-group-sm">
  453. <div class="input-group-prepend">
  454. <span class="input-group-text">汇总年月</span>
  455. </div>
  456. <input id="gather-month" class="datepicker-here form-control form-control-sm" auto-close="true" autocomplete="off" placeholder="点击选择年月" data-view="months" data-min-view="months" data-date-format="yyyy-MM" data-language="zh" type="text" autocomplete="off">
  457. </div>
  458. </div>
  459. <div id="gather-by-zone" name="gather-type">
  460. <div class="input-group input-group-sm">
  461. <div class="input-group-prepend">
  462. <span class="input-group-text">汇总周期</span>
  463. </div>
  464. <input id="gather-zone" class="datepicker-here form-control mt-0" placeholder="点击选择周期" data-range="true" data-multiple-dates-separator=" - " data-min-view="months" data-view="months" data-date-format="yyyy-MM" data-language="zh" type="text" autocomplete="off">
  465. </div>
  466. </div>
  467. <div id="gather-by-custom-zone" name="gather-type">
  468. <div class="input-group input-group-sm">
  469. <div class="input-group-prepend">
  470. <span class="input-group-text">汇总周期</span>
  471. </div>
  472. <input id="gather-custom-zone" class="datepicker-here form-control mt-0" placeholder="点击选择周期" data-range="true" data-multiple-dates-separator=" - " data-min-view="days" data-view="days" data-date-format="yyyy-MM-dd" data-language="zh" type="text" autocomplete="off">
  473. </div>
  474. </div>
  475. <div id="gather-by-stage" name="gather-type">
  476. <div class="input-group input-group-sm">
  477. <div class="input-group-prepend">
  478. <span class="input-group-text">选择期</span>
  479. </div>
  480. <select class="form-control" id="gather-stage">
  481. <option>第1期</option>
  482. </select>
  483. </div>
  484. </div>
  485. <div id="gather-by-stage-zone" name="gather-type">
  486. <div class="input-group input-group-sm">
  487. <div class="input-group-prepend">
  488. <span class="input-group-text">汇总</span>
  489. </div>
  490. <select class="form-control" id="gather-stage-begin">
  491. <option>第1期</option>
  492. </select>
  493. <div class="input-group-prepend">
  494. <span class="input-group-text">至</span>
  495. </div>
  496. <select class="form-control" id="gather-stage-end">
  497. <option>第5期</option>
  498. </select>
  499. </div>
  500. </div>
  501. </div>
  502. <div class="text-danger text-center ml-3" id="gather-hint">我是提示呀</div>
  503. </div>
  504. </div>
  505. <div class="modal-footer">
  506. <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
  507. <button class="btn btn-sm btn-primary" id="gather-select-ok">确定</button>
  508. </div>
  509. </div>
  510. </div>
  511. </div>
  512. <div class="modal fade" id="stage-select" data-backdrop="static">
  513. <div class="modal-dialog" role="document">
  514. <div class="modal-content">
  515. <div class="modal-header">
  516. <h5 class="modal-title" id="stage-select-title">选择期</h5>
  517. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  518. <span aria-hidden="true">&times;</span>
  519. </button>
  520. </div>
  521. <div class="modal-body">
  522. <div class="row">
  523. <% for (const s of stages) { %>
  524. <div class="col-3">
  525. <div class="custom-control custom-checkbox custom-control-inline">
  526. <input type="checkbox" id="stage-select-<%- s.order %>" name="stage-select-check" stage-order="<%- s.order %>" class="custom-control-input">
  527. <label class="custom-control-label" for="stage-select-<%- s.order %>">第<%- s.order %>期</label>
  528. </div>
  529. </div>
  530. <% } %>
  531. </div>
  532. <div class="alert alert-danger my-2 p-2" id="stage-select-hint">我是提示呀</div>
  533. </div>
  534. <div class="modal-footer">
  535. <div class="form-check form-check-inline mr-auto">
  536. <input class="form-check-input" type="checkbox" id="stage-select-all">
  537. <label class="form-check-label" for="stage-select-all">全选</label>
  538. </div>
  539. <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
  540. <button class="btn btn-sm btn-primary" id="stage-select-ok">确定</button>
  541. </div>
  542. </div>
  543. </div>
  544. </div>
  545. <div class="modal fade" id="material-sum-select" data-backdrop="static">
  546. <div class="modal-dialog" role="document">
  547. <div class="modal-content">
  548. <div class="modal-header">
  549. <h5 class="modal-title" id="material-sum-select-title">选择期(材料调差)</h5>
  550. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  551. <span aria-hidden="true">&times;</span>
  552. </button>
  553. </div>
  554. <div class="modal-body">
  555. <div class="row">
  556. <% for (const m of materialList) { %>
  557. <div class="col-3">
  558. <div class="custom-control custom-checkbox custom-control-inline">
  559. <input type="checkbox" id="material-sum-select-<%- m.order %>" name="material-sum-select-check" material-order="<%- m.order %>" class="custom-control-input">
  560. <label class="custom-control-label" for="material-sum-select-<%- m.order %>">第<%- m.order %>期</label>
  561. </div>
  562. </div>
  563. <% } %>
  564. </div>
  565. <div class="alert alert-danger my-2 p-2" id="material-sum-select-hint">我是提示呀</div>
  566. </div>
  567. <div class="modal-footer">
  568. <div class="form-check form-check-inline mr-auto">
  569. <input class="form-check-input" type="checkbox" id="material-sum-select-all">
  570. <label class="form-check-label" for="material-sum-select-all">全选</label>
  571. </div>
  572. <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
  573. <button class="btn btn-sm btn-primary" id="material-sum-select-ok">确定</button>
  574. </div>
  575. </div>
  576. </div>
  577. </div>
  578. <div class="modal" id="change-select" data-backdrop="static">
  579. <div class="modal-dialog modal-lg" role="document">
  580. <div class="modal-content">
  581. <div class="modal-header">
  582. <h5 class="modal-title" id="change-select-title">请选择变更令</h5>
  583. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  584. <span aria-hidden="true">&times;</span>
  585. </button>
  586. </div>
  587. <div class="modal-body">
  588. <div class="row">
  589. <div class="col-6">
  590. <h5>可选变更令 </h5>
  591. <table class="table table-bordered">
  592. <tr class="text-center"><th>选择</th><th>变更令号</th><th>工程名称</th></tr>
  593. <tbody id="change-select-list">
  594. </tbody>
  595. </table>
  596. </div>
  597. <div class="col-6">
  598. <h5>已选变更令 </h5>
  599. <table class="table table-bordered">
  600. <tr class="text-center"><th>序号</th><th>变更令号</th><th>工程名称</th></tr>
  601. <tbody id="change-select-result">
  602. </tbody>
  603. </table>
  604. </div>
  605. </div>
  606. <div class="alert alert-danger my-2 p-2" id="change-select-hint" style="display: none">我是提示呀</div>
  607. </div>
  608. <div class="modal-footer">
  609. <div class="form-check form-check-inline mr-auto">
  610. <input class="form-check-input" type="checkbox" id="change-select-all">
  611. <label class="form-check-label" for="change-select-all">全选</label>
  612. </div>
  613. <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
  614. <button class="btn btn-sm btn-primary" id="change-select-ok">确定</button>
  615. </div>
  616. </div>
  617. </div>
  618. </div>
  619. <div class="modal" id="select-change-rela" data-backdrop="static">
  620. <div class="modal-dialog" role="document">
  621. <div class="modal-content">
  622. <div class="modal-header">
  623. <h5 class="modal-title" id="scr-title">请选择变更令</h5>
  624. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  625. <span aria-hidden="true">&times;</span>
  626. </button>
  627. </div>
  628. <div class="modal-body" style="overflow-y: auto; height: 480px">
  629. <table class="table table-bordered">
  630. <thead id="scr-header"><tr class="text-center"><th>选择</th><th>变更令号</th><th>工程名称</th></tr></thead>
  631. <tbody id="scr-list">
  632. </tbody>
  633. </table>
  634. </div>
  635. <div class="modal-footer">
  636. <div class="form-check form-check-inline mr-auto">
  637. <input class="form-check-input" type="checkbox" id="scr-all">
  638. <label class="form-check-label" for="scr-all">全选</label>
  639. </div>
  640. <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
  641. <button class="btn btn-sm btn-primary" id="scr-ok" onclick="rptChangeRela.updateChangeRela();">确定</button>
  642. </div>
  643. </div>
  644. </div>
  645. </div>
  646. <div class="modal" id="select-other-stage" data-backdrop="static">
  647. <div class="modal-dialog" role="document">
  648. <div class="modal-content">
  649. <div class="modal-header">
  650. <h5 class="modal-title" id="sos-title">请选择预付款</h5>
  651. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  652. <span aria-hidden="true">&times;</span>
  653. </button>
  654. </div>
  655. <div class="modal-body" style="overflow-y: auto; height: 480px">
  656. <table class="table table-bordered">
  657. <thead id="sos-header"><tr class="text-center"><th>选择</th><th>变更令号</th><th>工程名称</th></tr></thead>
  658. <tbody id="sos-list">
  659. </tbody>
  660. </table>
  661. </div>
  662. <div class="modal-footer">
  663. <div class="form-check form-check-inline mr-auto">
  664. <input class="form-check-input" type="checkbox" id="sos-all">
  665. <label class="form-check-label" for="sos-all">全选</label>
  666. </div>
  667. <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
  668. <button class="btn btn-sm btn-primary" id="sos-ok" onclick="rptOtherStage.updateOtherStage();">确定</button>
  669. </div>
  670. </div>
  671. </div>
  672. </div>
  673. <div class="modal" id="select-show-level" data-backdrop="static">
  674. <div class="modal-dialog" role="document">
  675. <div class="modal-content">
  676. <div class="modal-header">
  677. <h5 class="modal-title" id="ssl-title">请选择显示层级</h5>
  678. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  679. <span aria-hidden="true">&times;</span>
  680. </button>
  681. </div>
  682. <div class="modal-body">
  683. <div class="form-group" id="ssl-list">
  684. </div>
  685. </div>
  686. <div class="modal-footer">
  687. <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
  688. <button class="btn btn-sm btn-primary" id="sos-ok" onclick="rptShowLevel.update();">确定</button>
  689. </div>
  690. </div>
  691. </div>
  692. </div>
  693. <!--管理推荐报表-->
  694. <div class="modal fade" id="man-c" data-backdrop="static">
  695. <div class="modal-dialog" role="document">
  696. <div class="modal-content">
  697. <div class="modal-header">
  698. <h5 class="modal-title">管理推荐报表</h5>
  699. </div>
  700. <div class="modal-body">
  701. <div class="modal-height-500" style="overflow: auto;">
  702. <table class="table table-sm table-bordered" id="report_cust_group_common">
  703. </table>
  704. </div>
  705. </div>
  706. <div class="modal-footer">
  707. <button type="button" class="btn btn-secondary" data-dismiss="modal" onclick="revertCommonCustRptCfg();">关闭</button>
  708. <!--有结果出现添加-->
  709. <button type="button" class="btn btn-primary" data-dismiss="modal" onclick="updateCustRptCfg()">确认</button>
  710. </div>
  711. </div>
  712. </div>
  713. </div>
  714. <!--管理定制报表-->
  715. <div class="modal fade" id="man-i" data-backdrop="static">
  716. <div class="modal-dialog" role="document">
  717. <div class="modal-content">
  718. <div class="modal-header">
  719. <h5 class="modal-title">管理定制报表</h5>
  720. </div>
  721. <div class="modal-body">
  722. <div class="modal-height-500" style="overflow: auto;">
  723. <table class="table table-sm table-bordered" id="report_cust_group_individual">
  724. </table>
  725. </div>
  726. </div>
  727. <div class="modal-footer">
  728. <button type="button" class="btn btn-secondary" data-dismiss="modal" onclick="revertIndividualCustRptCfg();">关闭</button>
  729. <!--有结果出现添加-->
  730. <button type="button" class="btn btn-primary" data-dismiss="modal" onclick="updateCustRptCfg()">确认</button>
  731. </div>
  732. </div>
  733. </div>
  734. </div>
  735. <!--弹出归档-->
  736. <div class="modal fade" id="guidang" data-backdrop="static">
  737. <div class="modal-dialog" role="document">
  738. <div class="modal-content">
  739. <div class="modal-header">
  740. <h5 class="modal-title">归档本张报表</h5>
  741. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  742. <span aria-hidden="true">&times;</span>
  743. </button>
  744. </div>
  745. <div class="modal-body">
  746. <h6>归档后,本期报表将自动导出PDF格式,不再受新一期数据影响;</h6>
  747. <h6>请确认报表数据无误(正确添加签字、设置页面格式等),继续归档操作。</h6>
  748. <div class="card">
  749. <div class="card-body" id="cardArchiveInfo">
  750. </div>
  751. </div>
  752. </div>
  753. <div class="modal-footer">
  754. <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
  755. <a href="javascript: void(0);" class="btn btn-sm btn-primary" data-dismiss="modal" onclick="rptArchiveObj.archiveCurrentReport(zTreeOprObj.currentRptPageRst, zTreeOprObj.currentNode)">确定归档</a>
  756. </div>
  757. </div>
  758. </div>
  759. </div>
  760. <!--全屏显示报表-->
  761. <div class="modal fade" id="fullscreen" data-backdrop="static">
  762. <div class="modal-dialog modal-full" role="document">
  763. <div class="modal-content">
  764. <div class="modal-header d-flex justify-content-between">
  765. <h5 class="modal-title" id="fullScrTitle"></h5>
  766. <div class="print-toolsbar">
  767. <!--
  768. <div class="panel">
  769. <div class="panel-body">
  770. <div class="btn-group" role="group">
  771. <button type="button" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="缩小">-</button>
  772. <button class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="重置默认大小">1000%</button>
  773. <button type="button" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="放大">+</button>
  774. </div>
  775. </div>
  776. </div>
  777. -->
  778. <div class="panel">
  779. <div class="panel-body">
  780. <div class="input-group input-group-sm">
  781. <div class="btn-group" role="group">
  782. <button type="button" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="bottom" title="缩小" onclick="canvasOprObj.fullScreenChangeScale(-0.1, this)">-</button>
  783. <button id="fullScreenScaleBtn" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="bottom" title="重置默认大小" onclick="canvasOprObj.fullScreenChangeScale(0, this)">100%</button>
  784. <button type="button" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="bottom" title="放大" onclick="canvasOprObj.fullScreenChangeScale(0.1, this)">+</button>
  785. </div>
  786. <div class="input-group-prepend">
  787. <button type="button" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="首页" onclick="rptControlObj.firstPage(this)"><i class="fa fa-angle-double-left "></i></button>
  788. <button type="button" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="上一页" onclick="rptControlObj.prePage(this)"><i class="fa fa-angle-left "></i></button>
  789. </div>
  790. <input id="rpt_fullscreen_page_num" class="form-control" value="1/10" style="width:60px" onKeydown="rptControlObj.onKeydown(event, this)" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="输入页码按回车键,快速跳转">
  791. <div class="input-group-append">
  792. <button type="button" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="下一页" onclick="rptControlObj.nextPage(this)"><i class="fa fa-angle-right"></i></button>
  793. <button type="button" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="尾页" onclick="rptControlObj.lastPage(this)"><i class="fa fa-angle-double-right"></i></button>
  794. </div>
  795. </div>
  796. </div>
  797. </div>
  798. <div class="panel">
  799. <div class="panel-body">
  800. <button type="button" class="btn btn-outline-primary btn-sm" data-dismiss="modal" ><i class="fa fa-window-close-o"></i> 退出全屏</button>
  801. </div>
  802. </div>
  803. </div>
  804. </div>
  805. <div class="modal-body">
  806. <div class="modal-fullscreen pageContainer">
  807. <canvas id="fullScrCanvas" height="100%" width="100%"></canvas>
  808. </div>
  809. </div>
  810. </div>
  811. </div>
  812. </div>
  813. <% if (![-100, -200, -300, -301, -302, -303, -400, -401].includes(stg_id)) { %>
  814. <% include ../stage/audit_modal.ejs %>
  815. <% } %>
  816. <script>
  817. zTreeOprObj.getCustomerCfg();
  818. zTreeOprObj.iniFontCfgDom(CUST_CFG);
  819. <% if (![-100, -300, -301, -302, -303, -400, -401].includes(stg_id)) { %>
  820. buildCustRptCommon('report_cust_group_common', ORG_TOP_TREE_NODES[1], CUST_TREE_NODES.common, 'true');
  821. buildCustRptCommon('report_cust_group_individual', ORG_TOP_TREE_NODES[0], CUST_TREE_NODES.customize, 'false');
  822. <% } %>
  823. let SELECTED_TENDERS = [];
  824. function buildTendersTree_Ex() {
  825. // 这里直接从 TENDER_SOURCE_TREE 对象获取数据,无需绕大弯(从category那里重复整理)
  826. const treeCache = [];
  827. const tmpCacheArr = [];
  828. const _getTenderByTid = (tid) => {
  829. let rst = null;
  830. for (const tender of tenders) {
  831. if (tender.id === tid) {
  832. rst = tender;
  833. break;
  834. }
  835. }
  836. return rst;
  837. };
  838. const _createTenderItem = (tid) => {
  839. const tender = _getTenderByTid(tid);
  840. let rst = {
  841. name: tender.name,
  842. id : -1,
  843. cid : -1,
  844. tender_id: tender.id,
  845. last_stage: tender.lastStage?.order || -1,
  846. last_stage_id: tender.lastStage?.id || -1,
  847. report_id: zTreeOprObj.currentNode.refId,
  848. signature: '',
  849. items: [],
  850. isParent: false
  851. }
  852. return rst;
  853. };
  854. const _createItems = function (parentItems, parentNode, node) {
  855. if (node.cid) {
  856. // node是category目录
  857. let item = {
  858. name: node.name,
  859. id : node.tmt_id,
  860. cid : node.cid,
  861. items: [],
  862. isParent: true
  863. };
  864. parentItems.push(item);
  865. if (node.children && node.children.length > 0) {
  866. node.children.forEach(subNode => {
  867. _createItems(item.items, item, subNode);
  868. });
  869. }
  870. } else {
  871. // node是tender数据
  872. let tdItem = _createTenderItem(node.tid); //标段节点
  873. if (parentNode) {
  874. tmpCacheArr.push([parentNode, tdItem]);
  875. } else {
  876. parentItems.push(tdItem);
  877. }
  878. }
  879. };
  880. TENDER_SOURCE_TREE.children.forEach(tdNode => {
  881. _createItems(treeCache, null, tdNode); // 因TENDER_SOURCE_TREE是完整的,可以一次性处理所有相关数据
  882. });
  883. // 无需判断是否有用户已设置的分类
  884. for (const pairItem of tmpCacheArr) {
  885. pairItem[0].items.push(pairItem[1]);
  886. }
  887. //4. 剔除空items的项
  888. const _removeEmptyItems = function (parentItem) {
  889. let rst = false;
  890. if (parentItem.items.length === 0) {
  891. if (parentItem.isParent) {
  892. rst = true;
  893. }
  894. } else {
  895. for (let idx = parentItem.items.length - 1; idx >= 0; idx--) {
  896. if (_removeEmptyItems(parentItem.items[idx])) {
  897. parentItem.items.splice(idx, 1);
  898. }
  899. }
  900. rst = parentItem.items.length === 0;
  901. }
  902. return rst;
  903. }
  904. for (let idx = treeCache.length - 1; idx >= 0; idx--) {
  905. if (_removeEmptyItems(treeCache[idx])) {
  906. treeCache.splice(idx, 1);
  907. }
  908. }
  909. //还要请求各标段的原签名数据
  910. const params = {};
  911. params.selectedTenders = [];
  912. const _getTenderRelatedInfos = (parentItem, rstArr) => {
  913. if (parentItem.items.length === 0) {
  914. if (!parentItem.isParent) {
  915. rstArr.push([parentItem.tender_id, parentItem.last_stage_id, parentItem.report_id]);
  916. }
  917. } else {
  918. for (let idx = parentItem.items.length - 1; idx >= 0; idx--) {
  919. _getTenderRelatedInfos(parentItem.items[idx], rstArr);
  920. }
  921. }
  922. };
  923. const _addHint = (parentItem, relArr) => {
  924. if (parentItem.items.length === 0) {
  925. if (!parentItem.isParent) {
  926. for (const rel of relArr) {
  927. if (rel.tender_id === parentItem.tender_id && rel.sid === parentItem.last_stage_id && rel.rpt_id === parentItem.report_id) {
  928. let hintStr = '';
  929. if (rel.rel_content instanceof Array) {
  930. for (let idx = 0; idx < rel.rel_content.length; idx++) {
  931. const dtlRel = rel.rel_content[idx];
  932. if (idx > 0) {
  933. hintStr = hintStr + '、';
  934. }
  935. hintStr = hintStr + '(' + dtlRel.signature_name + ')' + dtlRel.user_name;
  936. }
  937. }
  938. parentItem.signature = hintStr;
  939. break;
  940. }
  941. }
  942. }
  943. } else {
  944. for (let idx = parentItem.items.length - 1; idx >= 0; idx--) {
  945. _addHint(parentItem.items[idx], relArr);
  946. }
  947. }
  948. };
  949. for (let idx = treeCache.length - 1; idx >= 0; idx--) {
  950. _getTenderRelatedInfos(treeCache[idx], params.selectedTenders);
  951. }
  952. $.bootstrapLoading.start();
  953. CommonAjax.postXsrfEx("/tender/report_api/getMultiRoleRelationships", params, 30000, true, getCookie('csrfToken_j'),
  954. function(result){
  955. $.bootstrapLoading.end();
  956. let relArr = result.data;
  957. for (const rel of relArr) {
  958. rel.rel_content = JSON.parse(rel.rel_content);
  959. }
  960. console.log(relArr);
  961. //5. 加hint
  962. for (let idx = treeCache.length - 1; idx >= 0; idx--) {
  963. _addHint(treeCache[idx], relArr);
  964. }
  965. //6. 建树
  966. _buildTenderTree('batch_tenders_individual', treeCache);
  967. }, function(err){
  968. $.bootstrapLoading.end();
  969. }, function(ex){
  970. $.bootstrapLoading.end();
  971. }
  972. );
  973. }
  974. function buildTendersTree() {
  975. // return false; // 暂时跳出
  976. let sortedCat = [];
  977. SELECTED_TENDERS = [];
  978. for (const cat of category) {
  979. if (cat.level > 0) { // 临时加true条件
  980. sortedCat.push(cat);
  981. }
  982. }
  983. for (const tender of tenders) {
  984. if (tender.lastStage !== undefined && tender.lastStage !== null && tender.category && tender.category.length === sortedCat.length) {
  985. // if (tender.lastStage !== undefined && tender.lastStage !== null && tender.category && tender.category.length > 0) {
  986. for (let cat of tender.category) {
  987. for (let cIdx = 0; cIdx < sortedCat.length; cIdx++) {
  988. if (cat.cid === sortedCat[cIdx].id) {
  989. cat.level = sortedCat[cIdx].level;
  990. break;
  991. }
  992. }
  993. }
  994. tender.category.sort(function(i1, i2){
  995. return i1.level - i2.level;
  996. });
  997. }
  998. }
  999. const treeCache = [];
  1000. //1. 选择用户已设置的分类
  1001. if (sortedCat.length > 0) {
  1002. sortedCat.sort(function(i1, i2){
  1003. return i1.level - i2.level;
  1004. });
  1005. const _createItems = function (parentItems, grpLv) {
  1006. if (grpLv < sortedCat.length) {
  1007. let cat = sortedCat[grpLv];
  1008. for (const nv of cat.value) {
  1009. let item = {
  1010. name: nv.value,
  1011. id : nv.id,
  1012. cid : nv.cid,
  1013. items: [],
  1014. isParent: true
  1015. };
  1016. parentItems.push(item);
  1017. _createItems(item.items, grpLv + 1);
  1018. }
  1019. }
  1020. }
  1021. _createItems(treeCache, 0);
  1022. }
  1023. //2. 建立treeNodes
  1024. let hasCat = false;
  1025. for (const tender of tenders) {
  1026. if (tender.category && tender.category.length > 0) {
  1027. hasCat = true;
  1028. break;
  1029. }
  1030. }
  1031. //3. 把标段挂上去
  1032. let tmpCacheArr = []; //这个临时用来储存相应标段节点挂接信息
  1033. let _createTenderItem = function (tender) {
  1034. let rst = {
  1035. name: tender.name,
  1036. id : -1,
  1037. cid : -1,
  1038. tender_id: tender.id,
  1039. last_stage: tender.lastStage.order,
  1040. last_stage_id: tender.lastStage.id,
  1041. report_id: zTreeOprObj.currentNode.refId,
  1042. signature: '',
  1043. items: [],
  1044. isParent: false
  1045. }
  1046. return rst;
  1047. }
  1048. let _putTender = function (catLv, tender, parentItems) {
  1049. if (tender.lastStage !== undefined && tender.lastStage !== null) {
  1050. if (hasCat) {
  1051. let isSorted = false;
  1052. for (let sCat of sortedCat) {
  1053. if (sCat.level <= tender.category.length && sCat.level > 0 && sCat.id === tender.category[catLv].cid) {
  1054. isSorted = true;
  1055. break;
  1056. }
  1057. }
  1058. if (isSorted) {
  1059. for (const item of parentItems) {
  1060. if (item.cid === tender.category[catLv].cid && item.id === tender.category[catLv].value) {
  1061. if (item.items.length > 0 && tender.category.length > (catLv + 1)) {
  1062. //递归循环
  1063. _putTender(catLv + 1, tender, item.items);
  1064. } else {
  1065. //就是这个了
  1066. let tdItem = _createTenderItem(tender); //标段节点
  1067. tmpCacheArr.push([item, tdItem]);
  1068. }
  1069. }
  1070. }
  1071. } else {
  1072. //超界了
  1073. //let tdItem = _createTenderItem(tender); //标段节点
  1074. //tmpCacheArr.push([item, tdItem]);
  1075. }
  1076. } else {
  1077. // 没有设置category
  1078. let tdItem = _createTenderItem(tender); //标段节点
  1079. tmpCacheArr.push([null, tdItem]);
  1080. }
  1081. }
  1082. }
  1083. for (const tender of tenders) {
  1084. //console.log('tender.name: ' + tender.name);
  1085. _putTender(0, tender, treeCache);
  1086. }
  1087. if (hasCat) {
  1088. for (const pairItem of tmpCacheArr) {
  1089. pairItem[0].items.push(pairItem[1]);
  1090. }
  1091. }
  1092. //4. 剔除空items的项
  1093. if (hasCat) {
  1094. let _removeEmptyItems = function (parentItem) {
  1095. let rst = false;
  1096. if (parentItem.items.length === 0) {
  1097. if (parentItem.isParent) {
  1098. rst = true;
  1099. }
  1100. } else {
  1101. for (let idx = parentItem.items.length - 1; idx >= 0; idx--) {
  1102. if (_removeEmptyItems(parentItem.items[idx])) {
  1103. parentItem.items.splice(idx, 1);
  1104. }
  1105. }
  1106. rst = parentItem.items.length === 0;
  1107. }
  1108. return rst;
  1109. }
  1110. for (let idx = treeCache.length - 1; idx >= 0; idx--) {
  1111. if (hasCat) {
  1112. if (_removeEmptyItems(treeCache[idx])) {
  1113. treeCache.splice(idx, 1);
  1114. }
  1115. }
  1116. }
  1117. }
  1118. //console.log(treeCache);
  1119. //还要请求各标段的原签名数据
  1120. let params = {};
  1121. params.selectedTenders = [];
  1122. let _getTenderRelatedInfos = function(parentItem, rstArr) {
  1123. if (parentItem.items.length === 0) {
  1124. if (!parentItem.isParent) {
  1125. rstArr.push([parentItem.tender_id, parentItem.last_stage_id, parentItem.report_id]);
  1126. }
  1127. } else {
  1128. for (let idx = parentItem.items.length - 1; idx >= 0; idx--) {
  1129. _getTenderRelatedInfos(parentItem.items[idx], rstArr);
  1130. }
  1131. }
  1132. };
  1133. let _addHint = function(parentItem, relArr) {
  1134. if (parentItem.items.length === 0) {
  1135. if (!parentItem.isParent) {
  1136. for (const rel of relArr) {
  1137. if (rel.tender_id === parentItem.tender_id && rel.sid === parentItem.last_stage_id && rel.rpt_id === parentItem.report_id) {
  1138. let hintStr = '';
  1139. if (rel.rel_content instanceof Array) {
  1140. for (let idx = 0; idx < rel.rel_content.length; idx++) {
  1141. const dtlRel = rel.rel_content[idx];
  1142. if (idx > 0) {
  1143. hintStr = hintStr + '、';
  1144. }
  1145. hintStr = hintStr + '(' + dtlRel.signature_name + ')' + dtlRel.user_name;
  1146. }
  1147. }
  1148. parentItem.signature = hintStr;
  1149. break;
  1150. }
  1151. }
  1152. }
  1153. } else {
  1154. for (let idx = parentItem.items.length - 1; idx >= 0; idx--) {
  1155. _addHint(parentItem.items[idx], relArr);
  1156. }
  1157. }
  1158. };
  1159. if (hasCat) {
  1160. for (let idx = treeCache.length - 1; idx >= 0; idx--) {
  1161. _getTenderRelatedInfos(treeCache[idx], params.selectedTenders);
  1162. }
  1163. } else {
  1164. for (let idx = tmpCacheArr.length - 1; idx >= 0; idx--) {
  1165. _getTenderRelatedInfos(tmpCacheArr[idx][1], params.selectedTenders);
  1166. treeCache.push(tmpCacheArr[idx][1]);
  1167. }
  1168. }
  1169. $.bootstrapLoading.start();
  1170. CommonAjax.postXsrfEx("/tender/report_api/getMultiRoleRelationships", params, 30000, true, getCookie('csrfToken_j'),
  1171. function(result){
  1172. $.bootstrapLoading.end();
  1173. let relArr = result.data;
  1174. for (const rel of relArr) {
  1175. rel.rel_content = JSON.parse(rel.rel_content);
  1176. }
  1177. console.log(relArr);
  1178. //5. 加hint
  1179. for (let idx = treeCache.length - 1; idx >= 0; idx--) {
  1180. _addHint(treeCache[idx], relArr);
  1181. }
  1182. //6. 建树
  1183. _buildTenderTree('batch_tenders_individual', treeCache);
  1184. }, function(err){
  1185. $.bootstrapLoading.end();
  1186. }, function(ex){
  1187. $.bootstrapLoading.end();
  1188. }
  1189. );
  1190. }
  1191. let SELECTED_CHANGES = [];
  1192. function buildChangeTree() {
  1193. let tbDom = $("#batch_tenders_individual");
  1194. tbDom.empty();
  1195. let domStrs = [];
  1196. SELECTED_CHANGES = [];
  1197. domStrs.push('<thead><tr><th width="30%">变更令编号</th><th>变更令名称</th><th width="10%">选择</th></tr></thead>');
  1198. domStrs.push('<tbody>');
  1199. const report_id = zTreeOprObj.currentNode.refId;
  1200. for (const dtlChange of ALL_CHANGES) {
  1201. if (dtlChange.cid !== BUSINESS_ID && dtlChange.status === 3) {
  1202. domStrs.push(`<tr><td>${dtlChange.code}</td><td>${dtlChange.name}</td><td><input type="checkbox" onclick="amendChange(this, SELECTED_CHANGES, TENDER_ID, '${dtlChange.cid}', ${report_id})"></td></tr>`);
  1203. }
  1204. }
  1205. domStrs.push('</tbody>');
  1206. tbDom.append(domStrs.join(''));
  1207. $('[data-toggle="tooltip"]').tooltip();
  1208. }
  1209. let SELECTED_OTHER = [];
  1210. function buildOtherTree(source, keyField = 'id') {
  1211. let tbDom = $("#batch_tenders_individual");
  1212. tbDom.empty();
  1213. let domStrs = [];
  1214. SELECTED_OTHER = [];
  1215. domStrs.push('<thead><tr class="text-center"><th width="30%"><%- otherHintName %>编号</th><th><%- otherHintName %>名称</th><th width="10%">选择</th></tr></thead>');
  1216. domStrs.push('<tbody>');
  1217. const report_id = zTreeOprObj.currentNode.refId;
  1218. for (const s of source) {
  1219. if (s[keyField] !== BUSINESS_ID && s.status === 3) {
  1220. domStrs.push(`<tr><td>${s.code}</td><td>${s.name}</td><td><input type="checkbox" onclick="amendOther(this, SELECTED_OTHER, TENDER_ID, '${s[keyField]}', ${report_id})"></td></tr>`);
  1221. }
  1222. }
  1223. domStrs.push('</tbody>');
  1224. tbDom.append(domStrs.join(''));
  1225. $('[data-toggle="tooltip"]').tooltip();
  1226. }
  1227. function searchAccount() {
  1228. if (event.keyCode == 13) {
  1229. rptSignatureHelper.buildSelectableAccount(this);
  1230. }
  1231. }
  1232. function _buildTenderTree(tbDomId, tendersArr) {
  1233. let tbDom = $("#" + tbDomId);
  1234. tbDom.empty();
  1235. let domStrs = [];
  1236. domStrs.push('<thead><tr><th>名称</th><th width="50">计量期</th><th width="40">签名</th><th width="40">选择</th></tr></thead>');
  1237. domStrs.push('<tbody>');
  1238. const _createRow = function (rowItem, lv) {
  1239. let tdClassStr = 'in-' + lv;
  1240. if (rowItem.isParent) {
  1241. //tbDom.append('<tr><td class="' + tdClassStr + '"><i class="fa fa-folder-o"></i>&nbsp;&nbsp;' + rowItem.name + '</td><td></td><td></td><td></td></tr>');
  1242. domStrs.push('<tr><td class="' + tdClassStr + '"><i class="fa fa-folder-o"></i>&nbsp;&nbsp;' + rowItem.name + '</td><td></td><td></td><td></td></tr>');
  1243. } else {
  1244. let hrefStr = '/tender/' + rowItem.tender_id;
  1245. //<a href="biaoduan-panel.html" target="_blank">WWUJ-1</a>
  1246. let lastStgStr = '';
  1247. if (rowItem.last_stage === -1) {
  1248. lastStgStr = '台账';
  1249. } else {
  1250. lastStgStr = '第' + rowItem.last_stage + '期';
  1251. }
  1252. if (rowItem.signature !== undefined && rowItem.signature !== null && rowItem.signature !== '') {
  1253. let hintStr = '<i class="fa fa-exclamation-circle text-primary" data-container="body" data-toggle="tooltip" data-placement="bottom" data-original-title="' + rowItem.signature + '"></i>';
  1254. domStrs.push('<tr><td class="' + tdClassStr + '"><a href="' + hrefStr + '" target="_blank">' + rowItem.name + '</a></td><td>' + lastStgStr + '</td><td>' + hintStr + '</td><td><input type="checkbox" onclick="changeCrossTender(this, SELECTED_TENDERS, ' + rowItem.tender_id + ', ' + rowItem.last_stage_id + ', ' + rowItem.report_id + ')' + '"></td></tr>');
  1255. } else {
  1256. domStrs.push('<tr><td class="' + tdClassStr + '"><a href="' + hrefStr + '" target="_blank">' + rowItem.name + '</a></td><td>' + lastStgStr + '</td><td></td><td><input type="checkbox" onclick="changeCrossTender(this, SELECTED_TENDERS, ' + rowItem.tender_id + ', ' + rowItem.last_stage_id + ', ' + rowItem.report_id + ')' + '"></td></tr>');
  1257. }
  1258. }
  1259. if (rowItem.items && rowItem.items.length > 0) {
  1260. for (const subItem of rowItem.items) {
  1261. _createRow(subItem, lv + 1);
  1262. }
  1263. }
  1264. }
  1265. let grpLv = 1;
  1266. for (const tItem of tendersArr) {
  1267. _createRow(tItem, grpLv);
  1268. }
  1269. domStrs.push('</tbody>');
  1270. tbDom.append(domStrs.join(''));
  1271. $('[data-toggle="tooltip"]').tooltip();
  1272. }
  1273. function buildCustRptCommon(tbDomId, topTreeNode, checkingArr, isCommonStr) {
  1274. const filterNames = ['01.支付审批报表'];
  1275. let tbDom = $("#" + tbDomId);
  1276. tbDom.empty();
  1277. tbDom.append('<tr><th>类别</th><th>包含报表</th><th>显示</th></tr>');
  1278. let _countAvailableTpls = function (tItem) {
  1279. let rst = 0;
  1280. if (tItem.nodeType === 1 && tItem.items && tItem.items.length > 0) {
  1281. for (const dItem of tItem.items) {
  1282. if (dItem.nodeType === 2) {
  1283. if (dItem.released) rst++;
  1284. } else {
  1285. rst += _countAvailableTpls(dItem);
  1286. }
  1287. }
  1288. }
  1289. return rst;
  1290. };
  1291. let _pushRptLine = function (parentItem, rptItem, level, needChk, parentNodeIdStr, thisItemSeq, pHiddenVal) {
  1292. if (rptItem.nodeType === 1) {
  1293. let amt = _countAvailableTpls(rptItem);
  1294. if (amt > 0) {
  1295. let padding_leftStr = '';
  1296. // classStr = '',
  1297. if (level > 0) {
  1298. // classStr = 'pl-' + (level + 3);
  1299. let rem = 1.5 * level;
  1300. padding_leftStr = 'padding-left: ' + rem + 'rem!important'; //不受层数限制
  1301. }
  1302. if (needChk) {
  1303. let chkName = pHiddenVal + parentItem.name + FOLDER_SEPERATER + rptItem.name;
  1304. let checkedStr = (checkingArr.indexOf(chkName) >= 0) ? ' checked' : '';
  1305. let sIdStr = parentNodeIdStr + '_sub_' + thisItemSeq;
  1306. // tbDom.append('<tr><td class="' + classStr + '">' + rptItem.name + '</td><td>' + amt + '</td><td><input id="' + sIdStr + '" onchange="changeFolder(this, ' + isCommonStr + ', \'' + parentNodeIdStr + '\' )" hiddenval="' + chkName + '" type="checkbox"' + checkedStr + '></td></tr>');
  1307. tbDom.append('<tr><td style="' + padding_leftStr + '">' + rptItem.name + '</td><td>' + amt + '</td><td><input id="' + sIdStr + '" onchange="changeFolder(this, ' + isCommonStr + ', \'' + parentNodeIdStr + '\' )" hiddenval="' + chkName + '" type="checkbox"' + checkedStr + '></td></tr>');
  1308. } else {
  1309. // tbDom.append('<tr><td class="' + classStr + '">' + rptItem.name + '</td><td>' + amt + '</td><td></td></tr>');
  1310. tbDom.append('<tr><td style="' + padding_leftStr + '">' + rptItem.name + '</td><td>' + amt + '</td><td></td></tr>');
  1311. }
  1312. if (rptItem.items && rptItem.items.length > 0) {
  1313. let subDtlSeq = 0;
  1314. for (const subItem of rptItem.items) {
  1315. _pushRptLine(rptItem, subItem, level + 1, true, '', subDtlSeq, parentItem.name + FOLDER_SEPERATER);
  1316. subDtlSeq++;
  1317. }
  1318. }
  1319. }
  1320. }
  1321. }
  1322. let TplAmts = [];
  1323. let parentIdx = 0;
  1324. let subCnt = topTreeNode.items.length;
  1325. for (const topItem of topTreeNode.items) {
  1326. if (!filterNames.includes(topItem.name)) {
  1327. const avRpts = _countAvailableTpls(topItem);
  1328. if (avRpts > 0) {
  1329. TplAmts.push(avRpts);
  1330. let checkedStr = (checkingArr.indexOf(topItem.name) >= 0) ? ' checked' : '';
  1331. let pIdStr = tbDomId + '_' + parentIdx + '_' + subCnt;
  1332. tbDom.append('<tr><td>' + topItem.name + '</td><td>' + TplAmts[TplAmts.length - 1] + '</td><td><input id="' + pIdStr + '" onchange="changeFolder(this, ' + isCommonStr + ', null)" hiddenval="' + topItem.name + '" type="checkbox"' + checkedStr + '></td></tr>');
  1333. if (topItem.items && topItem.items.length > 0) {
  1334. let subSeq = 0;
  1335. for (const subItem of topItem.items) {
  1336. _pushRptLine(topItem, subItem, 1, true, pIdStr, subSeq, '');
  1337. }
  1338. subSeq++;
  1339. }
  1340. parentIdx++;
  1341. }
  1342. }
  1343. }
  1344. }
  1345. function updateCustRptCfg(){
  1346. let params = { tender_id: TENDER_ID};
  1347. params.nodeItems = CUST_TREE_NODES;
  1348. params.custSelectKeys = CUST_SELECT_KEYS;
  1349. CommonAjax.postXsrfEx("/tender/report_api/updateCustNode", params, 60000, true, getCookie('csrfToken_j'),
  1350. function(result){
  1351. try {
  1352. // console.log(result);
  1353. ORG_CUST_TREE_NODES.common = JSON.parse(JSON.stringify(CUST_TREE_NODES.common));
  1354. ORG_CUST_TREE_NODES.customize = JSON.parse(JSON.stringify(CUST_TREE_NODES.customize));
  1355. //刷新报表模板树
  1356. TOP_TREE_NODES = JSON.parse(JSON.stringify(ORG_TOP_TREE_NODES));
  1357. // 移除未被选择的模板
  1358. filterUnchkTplTreeNode(TOP_TREE_NODES[0], CUST_TREE_NODES.customize);
  1359. filterUnchkTplTreeNode(TOP_TREE_NODES[1], CUST_TREE_NODES.common);
  1360. zTreeOprObj.getReportTemplateTree();
  1361. } catch(err) {
  1362. }
  1363. }, function(err){
  1364. // hintBox.unWaitBox();
  1365. }, function(ex){
  1366. // hintBox.unWaitBox();
  1367. }
  1368. );
  1369. }
  1370. function revertCommonCustRptCfg(){
  1371. CUST_TREE_NODES.common = JSON.parse(JSON.stringify(ORG_CUST_TREE_NODES.common));
  1372. buildCustRptCommon('report_cust_group_common', ORG_TOP_TREE_NODES[1], CUST_TREE_NODES.common, 'true');
  1373. }
  1374. function revertIndividualCustRptCfg(){
  1375. CUST_TREE_NODES.customize = JSON.parse(JSON.stringify(ORG_CUST_TREE_NODES.customize));
  1376. buildCustRptCommon('report_cust_group_individual', ORG_TOP_TREE_NODES[0], CUST_TREE_NODES.customize, 'false');
  1377. }
  1378. function amendChange(dom, rstArr, tenderId, changeCid, reportId) {
  1379. if (dom.checked) {
  1380. let item = [tenderId, '-300', changeCid, reportId];
  1381. rstArr.push(item);
  1382. } else {
  1383. for (let idx = rstArr.length - 1; idx >= 0; idx--) {
  1384. if (rstArr[idx][2] === changeCid) {
  1385. rstArr.splice(idx, 1); // 删除变更令选择(这里变更令cid一定是唯一的)
  1386. //这里不break,防止一些冗余数据
  1387. }
  1388. }
  1389. }
  1390. }
  1391. function amendOther(dom, rstArr, tenderId, changeCid, reportId) {
  1392. if (dom.checked) {
  1393. let item = [tenderId, STAGE_ID, changeCid, reportId];
  1394. rstArr.push(item);
  1395. } else {
  1396. for (let idx = rstArr.length - 1; idx >= 0; idx--) {
  1397. if (rstArr[idx][2] === changeCid) {
  1398. rstArr.splice(idx, 1); // 删除变更令选择(这里变更令cid一定是唯一的)
  1399. //这里不break,防止一些冗余数据
  1400. }
  1401. }
  1402. }
  1403. }
  1404. function changeCrossTender(dom, rstArr, tenderId, stageId, reportId) {
  1405. if (dom.checked) {
  1406. let item = [tenderId, stageId, reportId];
  1407. rstArr.push(item);
  1408. } else {
  1409. for (let idx = rstArr.length - 1; idx >= 0; idx--) {
  1410. if (rstArr[idx][0] === tenderId && rstArr[idx][1] === stageId && rstArr[idx][2] === reportId) {
  1411. rstArr.splice(idx, 1); //删除当前标段
  1412. //这里不break,防止一些冗余数据
  1413. }
  1414. }
  1415. }
  1416. }
  1417. function changeFolder(dom, isCommon, parentIdStr) {
  1418. let prop = null;
  1419. if (isCommon) {
  1420. prop = CUST_TREE_NODES.common;
  1421. } else {
  1422. prop = CUST_TREE_NODES.customize;
  1423. }
  1424. let idx = prop.indexOf(dom.attributes['hiddenval'].value);
  1425. if (dom.checked) {
  1426. if (idx < 0) {
  1427. prop.push(dom.attributes['hiddenval'].value);
  1428. if (parentIdStr === null) {
  1429. //这是父节点,需要把所有子节点都勾上
  1430. //后期补上
  1431. }
  1432. }
  1433. } else {
  1434. if (idx >= 0) {
  1435. prop.splice(idx, 1);
  1436. if (parentIdStr === null) {
  1437. //这是父节点,需要把所有子节点都uncheck
  1438. //后期补上
  1439. }
  1440. }
  1441. }
  1442. }
  1443. </script>