view.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  1. {extend name="../../base/view/common/base" /}
  2. {block name="style"}
  3. <style>
  4. html{background-color:#fff;}
  5. .log-timeline{ position: relative; min-height:600px; padding-left: 48px; background-color:#fff;}
  6. .log-timeline:after {content: ""; position: absolute; top: 0; left: 24px; width: 1px; height: 100%; background: #e3e9ed;}
  7. .log-timeline dl{padding-bottom: 8px; position: relative;}
  8. .log-timeline dt{font-size: 16px; line-height: 2.4; color: #323232; font-weight:600}
  9. .log-timeline dd{font-size: 14px; line-height: 1.6; padding:5px 0}
  10. .log-timeline .date-second-point{width: 10px; height: 10px; display: block; border-radius: 50%; border: 3px solid #FBBC05; background: #fff; position: absolute; z-index: 99; left:-32px; top:9px}
  11. .log-timeline .log-thumb{width: 24px; height: 24px; border-radius: 50%; margin-right:4px;}
  12. .log-timeline .open-a{margin:0 4px;}
  13. .log-item i{font-weight:800; color:#323232}
  14. .log-content strong{margin:0 4px; color:#323232}
  15. </style>
  16. {/block}
  17. <!-- 主体 -->
  18. {block name="body"}
  19. <form class="layui-form px-4 pt-2" lay-filter="contract">
  20. <div class="layui-tab" style="margin:0;" lay-filter="contract" id="contractTab">
  21. <ul class="layui-tab-title">
  22. <li class="layui-this" data-load="true">合同详情</li>
  23. <li>操作记录</li>
  24. </ul>
  25. <div class="layui-tab-content">
  26. <div class="layui-tab-item layui-show">
  27. <table class="layui-table layui-table-form" style="margin:0">
  28. {gt name="$detail.pid" value="0"}
  29. <tr>
  30. <td class="layui-td-gray">母合同名称</td>
  31. <td colspan="7">{$detail.pname}</td>
  32. </tr>
  33. {/gt}
  34. <tr>
  35. <td class="layui-td-gray">合同名称</td>
  36. <td colspan="5">{$detail.name}</td>
  37. <td class="layui-td-gray">合同编号</td>
  38. <td>{$detail.code}</td>
  39. </tr>
  40. <tr>
  41. <td class="layui-td-gray">签约主体(乙方)</td>
  42. <td colspan="3">
  43. {volist name=":contract_subject()" id="v"}
  44. {eq name="$v.id" value="$detail.subject_id" }{$v.title}{/eq}
  45. {/volist}
  46. </td>
  47. <td class="layui-td-gray">合同性质</td>
  48. <td>
  49. {eq name="$detail.type" value="1" }普通合同{/eq}
  50. {eq name="$detail.type" value="2" }框架合同{/eq}
  51. {eq name="$detail.type" value="3" }补充协议{/eq}
  52. {eq name="$detail.type" value="4" }其他合同{/eq}
  53. </td>
  54. <td class="layui-td-gray">合同类别</td>
  55. <td>
  56. {volist name=":contract_cate()" id="v"}
  57. {eq name="$v.id" value="$detail.cate_id" }{$v.title}{/eq}
  58. {/volist}
  59. </td>
  60. </tr>
  61. <tr>
  62. <td class="layui-td-gray">客户名称(甲方)</td>
  63. <td colspan="3">{$detail.customer}</td>
  64. <td class="layui-td-gray">签约客户代表</td>
  65. <td>{$detail.customer_name}</td>
  66. <td class="layui-td-gray">客户联系电话</td>
  67. <td>{$detail.customer_mobile}</td>
  68. </tr>
  69. <tr>
  70. <td class="layui-td-gray-2">客户联系地址</td>
  71. <td colspan="3">{$detail.customer_address}</td>
  72. <td class="layui-td-gray-2">合同开始日期</td>
  73. <td>{$detail.start_time}</td>
  74. <td class="layui-td-gray-2">合同结束日期</td>
  75. <td>{$detail.end_time}</td>
  76. </tr>
  77. {neq name="$detail.type" value="2"}
  78. <tr>
  79. <td class="layui-td-gray">合同金额</td>
  80. <td>{$detail.cost}</td>
  81. {eq name="$detail.is_tax" value="1" }
  82. <td class="layui-td-gray">是否含税</td>
  83. <td>是</td>
  84. <td class="layui-td-gray">税点(百分比)</td>
  85. <td colspan="3">{$detail.tax}%</td>
  86. {/eq}
  87. {eq name="$detail.is_tax" value="0" }
  88. <td class="layui-td-gray">是否含税</td>
  89. <td colspan="5">否</td>
  90. {/eq}
  91. </tr>
  92. {/neq}
  93. {notempty name="$detail.remark"}
  94. <tr>
  95. <td class="layui-td-gray">备注信息</td>
  96. <td colspan="7">{$detail.remark}</td>
  97. </tr>
  98. {/notempty}
  99. {notempty name="$detail.file_ids"}
  100. <tr>
  101. <td class="layui-td-gray">相关附件</td>
  102. <td colspan="7" style="line-height:inherit">
  103. <div class="layui-row">
  104. {volist name="$detail.fileArray" id="vo"}
  105. <div class="layui-col-md4" id="uploadImg{$vo.id}">{:file_card($vo,'view')}</div>
  106. {/volist}
  107. </div>
  108. </td>
  109. </tr>
  110. {/notempty}
  111. <tr>
  112. <td colspan="8"><strong>补充附件</strong></td>
  113. </tr>
  114. <tr>
  115. <td class="layui-td-gray">
  116. <button type="button" class="layui-btn layui-btn-sm" id="uploadBtn"><i class="layui-icon"></i>附件上传</button>
  117. </td>
  118. <td colspan="7" style="line-height:inherit">
  119. <div id="fileBox">
  120. {volist name="$detail.file_array_other" id="vo"}
  121. <div class="layui-col-md4" id="fileItem{$vo.id}">{:file_card($vo)}</div>
  122. {/volist}
  123. </div>
  124. </td>
  125. </tr>
  126. <tr>
  127. <td colspan="8"><strong>签订信息</strong></td>
  128. </tr>
  129. <tr>
  130. <td class="layui-td-gray-2">合同制定人</td>
  131. <td>{$detail.prepared_name} </td>
  132. <td class="layui-td-gray-2">合同签订人</td>
  133. <td>{$detail.sign_name}</td>
  134. <td class="layui-td-gray-2">合同签订时间</td>
  135. <td>{$detail.sign_time}</td>
  136. <td class="layui-td-gray-2">合同签订部门</td>
  137. <td>{$detail.sign_department}</td>
  138. </tr>
  139. <tr>
  140. <td class="layui-td-gray-2">合同保管人</td>
  141. <td>{$detail.keeper_name}{gt name="$auth" value="0"}<span id="keeper" data-ids="{$detail.keeper_uid}" data-names="{$detail.keeper_name}" class="layui-btn layui-btn-xs layui-btn-normal ml-1">更改</span>{/gt}</td>
  142. <td class="layui-td-gray">合同共享人员</td>
  143. <td colspan="5">{$detail.share_names}{gt name="$auth" value="0"}<span id="shares" data-ids="{$detail.share_ids}" data-names="{$detail.share_names}" class="layui-btn layui-btn-xs layui-btn-normal ml-1">更改</span>{/gt}</td>
  144. </tr>
  145. <tr>
  146. <td colspan="8"><strong>审核信息</strong></td>
  147. </tr>
  148. <tr>
  149. <td class="layui-td-gray-2">合同状态</td>
  150. <td><span class="layui-color-{$detail.check_status}">{$detail.status_name}</span></td>
  151. <td class="layui-td-gray-2">录入人</td>
  152. <td>{$detail.admin_name} </td>
  153. <td class="layui-td-gray-2">录入时间</td>
  154. <td colspan="3">{$detail.create_time}</td>
  155. </tr>
  156. {notempty name="$check_record"}
  157. <tr>
  158. <td class="layui-td-gray">历史审批记录</td>
  159. <td colspan="7">
  160. <ul class="layui-timeline flow-record pt-2">
  161. {volist name="$check_record" id="vo"}
  162. <li class="layui-timeline-item delete-{$vo.delete_time}">
  163. <i class="layui-icon layui-timeline-axis">&#xe63f;</i>
  164. <p style="padding-left:24px">{$vo.check_time_str}<span class="black ml-2">{$vo.name}</span><span class="mx-2 layui-color-{$vo.status}">{$vo.status_str}</span>了此申请。操作意见:<span class="green">{$vo.content}</span></p>
  165. </li>
  166. {/volist}
  167. </ul>
  168. </td>
  169. </tr>
  170. {/notempty}
  171. </table>
  172. {if ($detail.check_status == 1)}
  173. {include file="/index/view_step" /}
  174. {elseif ($detail.check_status == 0) OR ($detail.check_status == 4)}
  175. {include file="/index/view_set" /}
  176. {else /}
  177. <table class="layui-table layui-table-form">
  178. {eq name="$detail.check_status" value="2" }
  179. <tr>
  180. <td class="layui-td-gray-2">归档状态</td>
  181. {eq name="$detail.archive_status" value="0" }
  182. <td colspan="7"><span class="layui-color-{$detail.archive_status}">{$detail.archive_status_name}</span></td>
  183. {else/}
  184. <td><span class="layui-color-{$detail.archive_status}">{$detail.archive_status_name}</span></td>
  185. <td class="layui-td-gray-2">归档人</td>
  186. <td>{$detail.archive_name} </td>
  187. <td class="layui-td-gray-2">归档时间</td>
  188. <td colspan="3">{$detail.archive_time}</td>
  189. {/eq}
  190. </tr>
  191. {/eq}
  192. {eq name="$detail.check_status" value="5" }
  193. <tr>
  194. <td class="layui-td-gray-2">中止人</td>
  195. <td>{$detail.stop_name} </td>
  196. <td class="layui-td-gray-2">中止时间</td>
  197. <td colspan="5">{$detail.stop_time}</td>
  198. </tr>
  199. <tr>
  200. <td class="layui-td-gray-2">中止备注</td>
  201. <td colspan="7">{$detail.stop_remark}</td>
  202. </tr>
  203. {/eq}
  204. {eq name="$detail.check_status" value="6" }
  205. <tr>
  206. <td class="layui-td-gray-2">作废人</td>
  207. <td>{$detail.void_name} </td>
  208. <td class="layui-td-gray-2">作废时间</td>
  209. <td colspan="5">{$detail.void_time}</td>
  210. </tr>
  211. <tr>
  212. <td class="layui-td-gray-2">作废备注</td>
  213. <td colspan="7">{$detail.void_remark}</td>
  214. </tr>
  215. {/eq}
  216. </table>
  217. <div class="pt-2">
  218. {gt name="$auth" value="0"}
  219. {eq name="$detail.check_status" value="2" }
  220. {eq name="$detail.archive_status" value="1" }
  221. <span class="layui-btn layui-btn-danger" data-event="archive" data-status="0">反确认归档</span>
  222. {else/}
  223. <span class="layui-btn layui-btn-normal" data-event="archive" data-status="1">合同归档</span>
  224. <span class="layui-btn layui-btn-danger" data-event="check" data-status="0">反确认审核</span>
  225. {/eq}
  226. {/eq}
  227. {eq name="$detail.check_status" value="5" }
  228. <div class="py-2">
  229. <span class="layui-btn layui-btn-danger" data-event="check" data-status="0">反中止合同</span>
  230. </div>
  231. {/eq}
  232. {eq name="$detail.check_status" value="6" }
  233. <div class="py-2">
  234. <span class="layui-btn layui-btn-danger" data-event="check" data-status="0">反作废合同</span>
  235. </div>
  236. {/eq}
  237. {/gt}
  238. {if ( $detail.check_status eq 3) AND ( $is_create_admin eq 1) }
  239. <span class="layui-btn layui-btn-primary check_back"><i class="layui-icon layui-icon-reduce-circle"></i> 撤回</span>
  240. {/if}
  241. </div>
  242. {/if}
  243. </div>
  244. <div class="layui-tab-item">
  245. {include file="/index/view_log" /}
  246. </div>
  247. </div>
  248. </div>
  249. </form>
  250. {/block}
  251. <!-- /主体 -->
  252. <!-- 脚本 -->
  253. {block name="script"}
  254. <script>
  255. const contract_id = '{$detail.id}';
  256. const contract_status = '{$detail.check_status}';
  257. const moduleInit = ['tool','employeepicker','oaTool'];
  258. function gouguInit() {
  259. var form = layui.form,tool=layui.tool, element = layui.element,employeepicker = layui.employeepicker,oaTool = layui.oaTool;
  260. element.on('tab(contract)', function(data){
  261. let index = data.index;
  262. if(index == 1){
  263. log(layui);
  264. }
  265. });
  266. if(typeof init==='function'){
  267. init(form,tool);
  268. }
  269. if (typeof (flowStep) == "function") {
  270. flowStep();
  271. }
  272. //选择合同保管人弹窗
  273. $('body').on('click','#keeper',function () {
  274. var ids=$(this).data('ids')+'',names = $(this).data('names')+'';
  275. employeepicker.init({
  276. ids:ids,
  277. names:names,
  278. type:0,
  279. department_url: "/api/index/get_department_tree",
  280. employee_url: "/api/index/get_employee",
  281. callback:function(ids,names,dids,departments){
  282. let callback = function (e) {
  283. layer.msg(e.msg);
  284. if (e.code == 0) {
  285. location.reload();
  286. }
  287. }
  288. tool.post("/contract/index/add", {'id':contract_id,'keeper_uid':ids,'scene':'change'}, callback);
  289. }
  290. });
  291. });
  292. //选择共享成员弹窗
  293. $('body').on('click','#shares',function () {
  294. var ids=$(this).data('ids')+'',names = $(this).data('names')+'',share_ids_array=[],share_names_array=[];
  295. if(ids.length>0){
  296. share_ids_array=ids.split(',');
  297. share_names_array=names.split(',');
  298. }
  299. employeepicker.init({
  300. ids:share_ids_array,
  301. names:share_names_array,
  302. type:1,
  303. department_url: "/api/index/get_department_tree",
  304. employee_url: "/api/index/get_employee",
  305. callback:function(ids,names,dids,departments){
  306. let callback = function (e) {
  307. layer.msg(e.msg);
  308. if (e.code == 0) {
  309. location.reload();
  310. }
  311. }
  312. tool.post("/contract/index/add", {'id':contract_id,'share_ids':ids.join(','),'scene':'change'}, callback);
  313. }
  314. });
  315. });
  316. $('body').on('click','[data-event="check"]',function(){
  317. let status = $(this).data('status');
  318. let action = '';
  319. let title = ''
  320. if(contract_status == 2 && status == 0){
  321. title = '确定要反确认该合同的审核?';
  322. action = 'check_refue';
  323. }
  324. if(contract_status == 5 && status == 0){
  325. title = '确定要反中止该合同?';
  326. action = 'stop_no';
  327. }
  328. if(contract_status == 6 && status == 0){
  329. title = '确定要反作废该合同?';
  330. action = 'void_no';
  331. }
  332. layer.confirm(title, {
  333. icon: 3,
  334. title: '提示'
  335. }, function(index) {
  336. let callback = function (e) {
  337. layer.msg(e.msg);
  338. parent.layui.pageTable.reload();
  339. setTimeout(function(){
  340. location.reload();
  341. },2000)
  342. }
  343. tool.post("/contract/api/check", {id: contract_id,check_status:status,mark:''}, callback);
  344. layer.close(index);
  345. });
  346. });
  347. $('body').on('click','[data-event="archive"]',function(){
  348. let status = $(this).data('status');
  349. layer.confirm('合同归档后将不能进行任何数据操作,确定要提交归档?', {
  350. icon: 3,
  351. title: '提示'
  352. }, function(index) {
  353. let callback = function (e) {
  354. layer.msg(e.msg);
  355. parent.layui.pageTable.reload();
  356. setTimeout(function(){
  357. location.reload();
  358. },2000)
  359. }
  360. tool.post("/contract/api/archive", {id: contract_id,archive_status:status}, callback);
  361. layer.close(index);
  362. });
  363. })
  364. $('body').on('click','.check_back',function(){
  365. layer.prompt({
  366. formType: 2,
  367. title: '请输入撤回理由',
  368. area: ['500px', '120px'] //自定义文本域宽高
  369. }, function(value, index, elem){
  370. $.ajax({
  371. url: "/api/index/flow_check",
  372. type:'post',
  373. data:{
  374. id:contract_id,
  375. type:4,
  376. check:3,
  377. content:value
  378. },
  379. success: function (e) {
  380. layer.msg(e.msg);
  381. if (e.code == 0) {
  382. parent.layui.pageTable.reload();
  383. location.reload();
  384. }
  385. }
  386. })
  387. layer.close(index);
  388. });
  389. })
  390. oaTool.addFile({
  391. type:1,
  392. isSave:true,
  393. ajaxDelete:function(file_id){
  394. let callback = function (e) {
  395. layer.msg(e.msg);
  396. if (e.code == 0) {
  397. $('#fileItem' + file_id).remove();
  398. }
  399. }
  400. tool.delete("/contract/api/delete_file", {id: file_id}, callback);
  401. },
  402. ajaxSave:function(res){
  403. let callback = function (e) {
  404. location.reload();
  405. }
  406. tool.post("/contract/api/add_file", {'contract_id':contract_id,'file_id':res.data.id,'file_name':res.data.name}, callback);
  407. }
  408. });
  409. }
  410. </script>
  411. {/block}
  412. <!-- /脚本 -->