audit_issue.html 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  1. <style>
  2. body.is-dialog .audit-issue-wrap {
  3. padding: 12px 14px 0;
  4. max-width: 100%;
  5. box-sizing: border-box;
  6. }
  7. .audit-issue-wrap .audit-block-title {
  8. margin: 0 0 6px;
  9. font-weight: 600;
  10. font-size: 13px;
  11. color: #333;
  12. }
  13. .audit-issue-wrap .audit-notify-tip {
  14. margin: 0 0 10px;
  15. padding: 8px 12px;
  16. font-size: 12px;
  17. line-height: 1.65;
  18. color: #8a6d3b;
  19. background: #fcf8e3;
  20. border: 1px solid #faebcc;
  21. border-radius: 3px;
  22. }
  23. .audit-issue-wrap .audit-score-rule-tip {
  24. margin: 0 0 8px;
  25. padding: 6px 10px;
  26. font-size: 12px;
  27. line-height: 1.5;
  28. color: #31708f;
  29. background: #f0f7fb;
  30. border: 1px solid #d9edf7;
  31. border-radius: 3px;
  32. }
  33. .audit-issue-wrap .audit-score-rule-tip strong {
  34. color: #245269;
  35. }
  36. .audit-issue-wrap .audit-table-wrap {
  37. /* 不在表格区域内部滚动,由弹窗页面整体滚动 */
  38. max-height: none;
  39. overflow-x: auto;
  40. overflow-y: visible;
  41. margin-bottom: 12px;
  42. border: 1px solid #e5e5e5;
  43. }
  44. .audit-issue-wrap .audit-process-table {
  45. margin: 0;
  46. font-size: 12px;
  47. table-layout: fixed;
  48. width: 100%;
  49. min-width: 980px;
  50. }
  51. .audit-issue-wrap .audit-process-table col:nth-child(3) {
  52. width: 130px;
  53. }
  54. .audit-issue-wrap .audit-process-table col:nth-child(4) {
  55. width: 80px;
  56. }
  57. .audit-issue-wrap .audit-process-table td.audit-process-name {
  58. white-space: nowrap;
  59. }
  60. .audit-issue-wrap .audit-process-table th {
  61. background: #f5f5f5;
  62. white-space: nowrap;
  63. font-weight: 600;
  64. padding: 6px 8px;
  65. vertical-align: middle;
  66. border: 1px solid #ddd !important;
  67. }
  68. .audit-issue-wrap .audit-process-table th.text-center,
  69. .audit-issue-wrap .audit-process-table td.text-center {
  70. text-align: center;
  71. }
  72. .audit-issue-wrap .audit-process-table td {
  73. padding: 6px 8px;
  74. vertical-align: middle;
  75. word-wrap: break-word;
  76. border: 1px solid #ddd !important;
  77. }
  78. .audit-issue-wrap .audit-table {
  79. margin: 0;
  80. font-size: 12px;
  81. border-collapse: collapse;
  82. }
  83. .audit-issue-wrap .audit-table th {
  84. background: #f5f5f5;
  85. white-space: nowrap;
  86. font-weight: 600;
  87. padding: 6px 8px;
  88. vertical-align: middle;
  89. border: 1px solid #ddd !important;
  90. }
  91. .audit-issue-wrap .audit-table td {
  92. padding: 6px 8px;
  93. vertical-align: middle;
  94. word-wrap: break-word;
  95. line-height: 1.45;
  96. border: 1px solid #ddd !important;
  97. }
  98. .audit-issue-wrap .audit-quote-pick-table tbody tr {
  99. cursor: pointer;
  100. }
  101. .audit-issue-wrap .audit-quote-pick-table td label {
  102. margin: 0;
  103. font-weight: normal;
  104. cursor: pointer;
  105. }
  106. .audit-issue-wrap .audit-quote-item {
  107. margin-bottom: 6px;
  108. font-size: 12px;
  109. line-height: 1.5;
  110. }
  111. .audit-issue-wrap .audit-quote-item:last-child {
  112. margin-bottom: 0;
  113. }
  114. .audit-issue-wrap .audit-deadline-row {
  115. display: flex;
  116. align-items: flex-start;
  117. flex-wrap: wrap;
  118. gap: 10px 20px;
  119. margin: 0 0 12px;
  120. font-size: 13px;
  121. position: relative;
  122. z-index: 61;
  123. overflow: visible;
  124. }
  125. .audit-issue-wrap .audit-deadline-item {
  126. display: flex;
  127. flex-wrap: wrap;
  128. align-items: flex-start;
  129. gap: 8px 10px;
  130. }
  131. .audit-issue-wrap .audit-deadline-row .audit-field-label {
  132. font-weight: 600;
  133. color: #333;
  134. white-space: nowrap;
  135. flex-shrink: 0;
  136. margin: 7px 0 0;
  137. }
  138. .audit-issue-wrap .audit-deadline-input-wrap {
  139. position: relative;
  140. flex: 0 1 auto;
  141. min-width: 0;
  142. z-index: 62;
  143. }
  144. .audit-issue-wrap .audit-delivery-deadline-input {
  145. width: 148px;
  146. min-width: 132px;
  147. height: 32px;
  148. padding: 4px 8px;
  149. margin-top: 0;
  150. }
  151. .audit-issue-wrap .procuremen-sys-rq-split .procuremen-sys-rq-fields {
  152. display: flex;
  153. flex-wrap: wrap;
  154. align-items: center;
  155. gap: 8px;
  156. }
  157. .audit-issue-wrap .procuremen-sys-rq-split .procuremen-sys-rq-date {
  158. width: 148px;
  159. min-width: 132px;
  160. height: 32px;
  161. padding: 4px 8px;
  162. }
  163. .audit-issue-wrap .procuremen-sys-rq-split .procuremen-sys-rq-time-group {
  164. display: inline-flex;
  165. align-items: center;
  166. gap: 4px;
  167. }
  168. .audit-issue-wrap .procuremen-sys-rq-split .procuremen-sys-rq-hour,
  169. .audit-issue-wrap .procuremen-sys-rq-split .procuremen-sys-rq-minute {
  170. width: 62px;
  171. height: 32px;
  172. padding: 4px 6px;
  173. }
  174. .audit-issue-wrap .procuremen-sys-rq-split .procuremen-sys-rq-colon {
  175. color: #666;
  176. font-weight: 600;
  177. line-height: 32px;
  178. }
  179. .audit-issue-wrap .procuremen-sys-rq-split.is-readonly .procuremen-sys-rq-date,
  180. .audit-issue-wrap .procuremen-sys-rq-split.is-readonly .procuremen-sys-rq-hour,
  181. .audit-issue-wrap .procuremen-sys-rq-split.is-readonly .procuremen-sys-rq-minute {
  182. background-color: #f5f5f5;
  183. color: #333;
  184. cursor: default;
  185. pointer-events: none;
  186. }
  187. .audit-issue-wrap .audit-op-cell {
  188. white-space: nowrap;
  189. }
  190. .audit-issue-wrap .audit-op-cell .btn {
  191. padding: 2px 7px;
  192. font-size: 12px;
  193. margin: 0 2px 2px 0;
  194. }
  195. .audit-issue-wrap .audit-table-wrap.audit-quote-table-wrap {
  196. max-height: none;
  197. overflow-x: auto;
  198. overflow-y: visible;
  199. }
  200. .audit-issue-wrap .audit-quote-detail-table {
  201. min-width: 1580px;
  202. }
  203. .audit-issue-wrap .audit-quote-detail-table td.audit-quote-empty {
  204. color: #e67e22;
  205. }
  206. .audit-issue-wrap .audit-deadline-item.audit-bid-open-item {
  207. align-items: center;
  208. margin-top: 0;
  209. }
  210. .audit-issue-wrap .audit-deadline-row .audit-append-supplier-btn {
  211. flex-shrink: 0;
  212. height: 32px;
  213. line-height: 20px;
  214. margin-right: 8px;
  215. }
  216. .audit-issue-wrap .audit-deadline-row .audit-bid-open-btn {
  217. flex-shrink: 0;
  218. height: 32px;
  219. line-height: 20px;
  220. margin-left: 0;
  221. }
  222. .audit-issue-wrap .audit-deadline-row .audit-bid-open-verified-tag {
  223. flex-shrink: 0;
  224. height: 32px;
  225. line-height: 32px;
  226. font-size: 15px;
  227. font-weight: 600;
  228. color: #3c763d;
  229. white-space: nowrap;
  230. margin-left: 0;
  231. }
  232. .audit-issue-wrap .audit-deadline-row .audit-bid-open-verified-tag .fa {
  233. font-size: 16px;
  234. margin-right: 4px;
  235. vertical-align: -1px;
  236. }
  237. .audit-bid-open-modal {
  238. padding: 16px 18px 8px;
  239. font-size: 13px;
  240. }
  241. .audit-bid-open-modal .bid-open-tip {
  242. margin: 0 0 12px;
  243. padding: 8px 10px;
  244. color: #8a6d3b;
  245. background: #fcf8e3;
  246. border: 1px solid #faebcc;
  247. border-radius: 3px;
  248. line-height: 1.6;
  249. }
  250. .audit-bid-open-modal .bid-open-row {
  251. display: flex;
  252. align-items: center;
  253. flex-wrap: wrap;
  254. gap: 8px;
  255. margin-bottom: 10px;
  256. }
  257. .audit-bid-open-modal .bid-open-row label {
  258. width: 72px;
  259. margin: 0;
  260. font-weight: 600;
  261. color: #333;
  262. }
  263. .audit-bid-open-modal .bid-open-row select {
  264. width: 260px;
  265. height: 32px;
  266. }
  267. .audit-bid-open-modal .bid-open-row .bid-open-code {
  268. width: 110px;
  269. height: 32px;
  270. }
  271. .audit-bid-open-modal .bid-open-row .btn-send-code {
  272. min-width: 88px;
  273. }
  274. .audit-issue-wrap .audit-quote-detail-table td.audit-quote-pending {
  275. color: #e67e22;
  276. white-space: nowrap;
  277. min-width: 130px;
  278. }
  279. </style>
  280. <div class="audit-issue-wrap">
  281. <div class="audit-table-wrap">
  282. <table class="table table-bordered table-condensed audit-process-table">
  283. <colgroup>
  284. <col style="width:100px"/>
  285. <col style="width:26%"/>
  286. <col style="width:130px"/>
  287. <col style="width:80px"/>
  288. <col style="width:72px"/>
  289. <col style="width:72px"/>
  290. <col style="width:72px"/>
  291. <col style="width:80px"/>
  292. <col/>
  293. </colgroup>
  294. <thead>
  295. <tr>
  296. <th class="text-center">订单号</th>
  297. <th>印件名称</th>
  298. <th>工序名称</th>
  299. <th class="text-center">单位</th>
  300. <th class="text-center">工作量</th>
  301. <th class="text-center">本次数量</th>
  302. <th class="text-center">最高限价</th>
  303. <th class="text-center">订法</th>
  304. <th>备注</th>
  305. </tr>
  306. </thead>
  307. <tbody>
  308. {volist name="processDisplayRows" id="pr"}
  309. <tr>
  310. {if $pr.show_order_cells}
  311. <td class="text-center"{if condition="$pr.order_rowspan gt 1"} rowspan="{$pr.order_rowspan}"{/if}>{$pr.CCYDH|default=''}</td>
  312. <td{if condition="$pr.order_rowspan gt 1"} rowspan="{$pr.order_rowspan}"{/if}>{$pr.CYJMC|default=''}</td>
  313. {/if}
  314. <td class="audit-process-name">{$pr.CGYMC|default=''}</td>
  315. <td class="text-center">{$pr.CDW|default=''}</td>
  316. <td class="text-center">{$pr.NGZL|default=''}</td>
  317. <td class="text-center">{$pr.This_quantity|default=''}</td>
  318. <td class="text-center">{$pr.ceilingPrice|default=''}</td>
  319. <td class="text-center">{$pr.CDF|default=''}</td>
  320. <td>{$pr.MBZ|default=''}</td>
  321. </tr>
  322. {/volist}
  323. </tbody>
  324. </table>
  325. </div>
  326. <form id="audit-issue-form" class="form-horizontal" role="form" style="margin-bottom:0;">
  327. {:token()}
  328. <input type="hidden" name="scydgy_id" value="{$scydgyId|htmlentities}"/>
  329. <input type="hidden" id="audit-quote-groups-json" value="{$quoteGroupsJson|htmlentities}"/>
  330. <input type="hidden" id="audit-bid-open-verified" value="{$bidOpenVerified|default=0}"/>
  331. <input type="hidden" id="audit-append-deadline-passed" value="{$appendSupplierDeadlinePassed|default=0}"/>
  332. <input type="hidden" id="audit-order-ccydh" value="{$orderCcydh|default=''|htmlentities}"/>
  333. <div class="audit-deadline-row">
  334. <div class="audit-deadline-item">
  335. <span class="audit-field-label">招标截止日期:</span>
  336. <div class="audit-deadline-input-wrap procuremen-sys-rq-split is-readonly" id="audit-sys-rq-wrap" title="仅查看,不可修改">
  337. <input type="hidden" id="audit-sys-rq" name="sys_rq" value="{$sysRq|default=''|htmlentities}"/>
  338. <div class="procuremen-sys-rq-fields">
  339. <input type="date" class="form-control procuremen-sys-rq-date" title="招标截止日期" readonly="readonly" disabled="disabled" tabindex="-1"/>
  340. <div class="procuremen-sys-rq-time-group">
  341. <select class="form-control procuremen-sys-rq-hour" title="时" disabled="disabled" tabindex="-1"></select>
  342. <span class="procuremen-sys-rq-colon">:</span>
  343. <select class="form-control procuremen-sys-rq-minute" title="分" disabled="disabled" tabindex="-1"></select>
  344. </div>
  345. </div>
  346. </div>
  347. </div>
  348. <div class="audit-deadline-item">
  349. <span class="audit-field-label">交货截止日期:</span>
  350. <input type="text" class="form-control audit-delivery-deadline-input" value="{$deliveryDeadline|default=''|htmlentities}" title="交货截止日期" readonly="readonly" disabled="disabled" tabindex="-1" placeholder=""/>
  351. </div>
  352. <div class="audit-deadline-item audit-bid-open-item">
  353. {if $canAppendSupplier}
  354. {if $auth->check('procuremen/auditappend')}
  355. <button type="button" class="btn btn-primary btn-sm audit-append-supplier-btn" id="btn-audit-append-supplier" title="补加供应商">
  356. <i class="fa fa-plus"></i> 补加供应商
  357. </button>
  358. {/if}
  359. {/if}
  360. {if $bidOpenVerified}
  361. <span class="audit-bid-open-verified-tag"><i class="fa fa-check-circle"></i> 已开标验证</span>
  362. {else /}
  363. {if $auth->check('procuremen/bidopenverify') || $auth->check('procuremen/bidopen') || $auth->check('procuremen/auditissue')}
  364. <button type="button" class="btn btn-warning btn-sm audit-bid-open-btn" id="btn-audit-bid-open">
  365. <i class="fa fa-unlock-alt"></i> 开标
  366. </button>
  367. {/if}
  368. {/if}
  369. </div>
  370. </div>
  371. </form>
  372. <!-- <p class="audit-notify-tip" style="margin-top:-2px;">-->
  373. <!-- <i class="fa fa-shield"></i>-->
  374. <!-- 未开标验证前,供应商单价与交货日期显示「未开标验证」;请点击「开标」完成双重验证后方可查看报价与交期并确认供应商(验证一次后本单可持续操作)。-->
  375. <!-- </p>-->
  376. <p class="audit-notify-tip">
  377. <i class="fa fa-exclamation-triangle"></i>
  378. <strong>重要提示:</strong>可先预选供应商,但点击「确认」前须完成开标验证。确认后将进入采购终审(本步<strong>不发送短信通知</strong>)。
  379. 需再次提醒报价时,请在右侧<strong>操作</strong>列点击「发邮件」或「发短信」。
  380. </p>
  381. {if !empty($bidOpenVerified)}
  382. <p class="audit-score-rule-tip">
  383. <i class="fa fa-info-circle"></i>
  384. <strong>评分规则:</strong>{$supplierScoreRuleText|default='(总分)=(质量分×50%)+(价格分×50%)'|htmlentities}
  385. </p>
  386. {/if}
  387. <div class="audit-table-wrap audit-quote-table-wrap">
  388. <table class="table table-bordered table-condensed audit-table audit-quote-pick-table audit-quote-detail-table">
  389. <thead>
  390. <tr>
  391. <th class="text-center" style="width:42px;">选定</th>
  392. <th style="min-width:140px;">供应商名称</th>
  393. <th style="width:88px;">姓名</th>
  394. <th style="width:100px;">邮箱</th>
  395. <th style="width:120px;">手机号</th>
  396. <th class="text-center" style="width:56px;">排名</th>
  397. <th class="text-center" style="width:72px;" title="{$supplierScoreRuleText|default=''|htmlentities}">评分</th>
  398. <th style="width:130px;">工序名称</th>
  399. <th class="text-center" style="width:130px;">单价</th>
  400. <th class="text-center" style="width:130px;">预估工期</th>
  401. <th class="text-center" style="width:130px;">交货日期</th>
  402. <th class="text-center" style="width:130px;">小计</th>
  403. <th class="text-center" style="width:160px;">操作时间</th>
  404. <th class="text-center" style="width:120px;">操作</th>
  405. </tr>
  406. </thead>
  407. <tbody id="audit-quote-tbody">
  408. {volist name="quoteGroups" id="co" key="k"}
  409. {volist name="co.lines" id="ln" key="lk"}
  410. <tr>
  411. {if $lk == 1}
  412. <td class="text-center"{if condition="$co.display_rowspan gt 1"} rowspan="{$co.display_rowspan}"{/if} style="vertical-align:middle;">
  413. <label>
  414. <input type="radio" class="audit-quote-pick" name="audit_quote_pick" value="{$co.name|default=''|htmlentities}"
  415. {if condition="$pickedCompanyName neq '' && $pickedCompanyName eq $co.name"} checked="checked"{/if}/>
  416. </label>
  417. </td>
  418. <td{if condition="$co.display_rowspan gt 1"} rowspan="{$co.display_rowspan}"{/if} style="vertical-align:middle;">{$co.name|default=''|htmlentities}</td>
  419. <td{if condition="$co.display_rowspan gt 1"} rowspan="{$co.display_rowspan}"{/if} style="vertical-align:middle;">{$co.username|default=''|htmlentities}</td>
  420. <td{if condition="$co.display_rowspan gt 1"} rowspan="{$co.display_rowspan}"{/if} style="vertical-align:middle;">{:htmlentities(mask_email(isset($co['email']) ? $co['email'] : ''))}</td>
  421. <td{if condition="$co.display_rowspan gt 1"} rowspan="{$co.display_rowspan}"{/if} style="vertical-align:middle;">{:htmlentities(mask_phone(isset($co['phone']) ? $co['phone'] : ''))}</td>
  422. <td class="text-center"{if condition="$co.display_rowspan gt 1"} rowspan="{$co.display_rowspan}"{/if} style="vertical-align:middle;">{if condition="!empty($bidOpenVerified)"}{$co.service_rank_text|default=''|htmlentities}{/if}</td>
  423. <td class="text-center"{if condition="$co.display_rowspan gt 1"} rowspan="{$co.display_rowspan}"{/if} style="vertical-align:middle;">{if condition="!empty($bidOpenVerified)"}{$co.service_score_text|default=''|htmlentities}{/if}</td>
  424. {/if}
  425. <td>{$ln.cgymc|default=''|htmlentities}</td>
  426. <td class="text-center{if condition="!empty($ln.amount_quote_pending)"} audit-quote-pending{elseif condition="$ln.amount_filled neq 1"} audit-quote-empty{/if}">{$ln.unit_price_text|default='未填写'|htmlentities}</td>
  427. <td class="text-center{if condition="!empty($ln.lead_days_quote_pending)"} audit-quote-pending{elseif condition="$ln.lead_days_filled neq 1"} audit-quote-empty{/if}">{$ln.lead_days_show|default='未填写'|htmlentities}</td>
  428. <td class="text-center{if condition="!empty($ln.delivery_quote_pending)"} audit-quote-pending{elseif condition="$ln.delivery_filled neq 1"} audit-quote-empty{/if}">{$ln.delivery_show|default='未填写'|htmlentities}</td>
  429. <td class="text-center{if condition="!empty($ln.amount_quote_pending)"} audit-quote-pending{/if}">{$ln.subtotal_text|default=''|htmlentities}</td>
  430. <td class="text-center{if condition="!empty($ln.oper_time_quote_pending)"} audit-quote-pending{/if}">{$ln.oper_time_text|default=''|htmlentities}</td>
  431. {if $lk == 1}
  432. <td class="text-center audit-op-cell"{if condition="$co.display_rowspan gt 1"} rowspan="{$co.display_rowspan}"{/if} style="vertical-align:middle;">
  433. {if $auth->check('procuremen/auditresendemail')}
  434. <button type="button" class="btn btn-default btn-xs audit-row-send-email" data-company="{$co.name|default=''|htmlentities}">发邮件</button>
  435. {/if}
  436. {if $auth->check('procuremen/auditresendsms')}
  437. <button type="button" class="btn btn-default btn-xs audit-row-send-sms" data-company="{$co.name|default=''|htmlentities}">发短信</button>
  438. {/if}
  439. </td>
  440. {/if}
  441. </tr>
  442. {/volist}
  443. {if !empty($co.has_remark)}
  444. <tr{if !empty($co.is_void)} class="text-muted"{/if}>
  445. <td><strong>备注</strong></td>
  446. <td colspan="5" class="{if !empty($co.remark_quote_pending)}audit-quote-pending{/if}" style="text-align:left;vertical-align:middle;">{$co.remark|default=''|htmlentities}</td>
  447. </tr>
  448. {/if}
  449. {if !empty($co.has_total)}
  450. <tr class="active">
  451. <td><strong>总计</strong></td>
  452. <td></td>
  453. <td></td>
  454. <td></td>
  455. <td class="text-center"><strong>{$co.total_text|default=''|htmlentities}</strong></td>
  456. <td></td>
  457. </tr>
  458. {/if}
  459. {/volist}
  460. </tbody>
  461. </table>
  462. </div>
  463. <div class="form-group layer-footer">
  464. <div class="row procuremen-audit-issue-footer-row">
  465. <div class="col-xs-12 procuremen-audit-issue-footer-btns">
  466. {if $auth->check('procuremen/auditsubmit')}
  467. <button type="button" style="margin-right: 12px" class="btn btn-primary btn-embossed" id="btn-audit-issue-submit">
  468. <i class="fa fa-check"></i> 确认
  469. </button>
  470. {/if}
  471. <button type="button" class="btn btn-default btn-embossed" id="btn-audit-issue-close">
  472. <i class="fa fa-times"></i> 关闭
  473. </button>
  474. </div>
  475. </div>
  476. </div>
  477. </div>