list.html 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819
  1. <!DOCTYPE html>
  2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  6. <title>年度预算</title>
  7. <link rel="stylesheet" th:href="@{/lib/layui/css/layui.css}" media="all">
  8. <link rel="stylesheet" th:href="@{/css/public.css}" media="all">
  9. <link rel="stylesheet" th:href="@{/lib/font-awesome-4.7.0/css/font-awesome.min.css}" media="all">
  10. </head>
  11. <body>
  12. <div class="layuimini-container">
  13. <div class="layuimini-main">
  14. <fieldset class="table-search-fieldset">
  15. <legend>搜索信息(<b>收起-展开</b>)</legend>
  16. <div id="search-div" style="margin: 5px 10px -10px 0px">
  17. <form class="layui-form" action="" lay-filter="search-form">
  18. <div class="layui-form-item">
  19. <div class="layui-inline">
  20. <label class="layui-form-label" style="width: 70px">项目名称</label>
  21. <div class="layui-input-inline" style="width: 140px">
  22. <input type="text" id="xmmc" name="xmmc" autocomplete="off" class="layui-input">
  23. </div>
  24. </div>
  25. <div class="layui-inline">
  26. <label class="layui-form-label" style="width: 70px">ERP编号</label>
  27. <div class="layui-input-inline" style="width: 140px">
  28. <input type="text" id="erpbh" name="erpbh" autocomplete="off" class="layui-input">
  29. </div>
  30. </div>
  31. <div class="layui-inline">
  32. <label class="layui-form-label" style="width: 70px">年份</label>
  33. <div class="layui-input-inline" style="width: 140px">
  34. <select name="nf" id="nf" lay-filter="status">
  35. <option value="0">全部</option>
  36. <option th:each="item:${yearList}" th:text="${item.nf}" th:value="${item.nf}"></option>
  37. </select>
  38. </div>
  39. </div>
  40. <div class="layui-inline">
  41. <label class="layui-form-label" style="width: 70px">审批状态</label>
  42. <div class="layui-input-inline" style="width: 140px">
  43. <select name="spzt" id="spzt" lay-filter="status">
  44. <option value="">全部</option>
  45. <!--<option th:each="item:${approveList}" th:text="${item.name}" th:value="${item.name}"></option>-->
  46. <option value="未提交">未提交</option>
  47. <option value="未提交(返回)">未提交(返回)</option>
  48. <option value="科技项目管理专责审批">科技项目管理专责审批</option>
  49. <option value="审批结束">审批结束</option>
  50. </select>
  51. </div>
  52. </div>
  53. <div class="layui-inline">
  54. <label class="layui-form-label" style="width: 70px">项目类型</label>
  55. <div class="layui-input-inline" style="width: 140px">
  56. <select name="xmlx" id="xmlx" lay-filter="status">
  57. <option value="">全部</option>
  58. <option th:each="item:${xmlxList}" th:text="${item.name}" th:value="${item.code}"></option>
  59. </select>
  60. </div>
  61. </div>
  62. <div class="layui-inline">
  63. <label class="layui-form-label required" style="width: 70px">所属部门</label>
  64. <div class="layui-input-inline" style="width: 140px">
  65. <input type="text" id="ssbmmc" name="ssbmmc" autocomplete="off" class="layui-input">
  66. </div>
  67. </div>
  68. <div class="layui-inline">
  69. <label class="layui-form-label" style="width: 70px">任务书名称</label>
  70. <div class="layui-input-inline" style="width: 140px">
  71. <input type="text" id="rwsmc" name="rwsmc" autocomplete="off" class="layui-input">
  72. </div>
  73. </div>
  74. <div class="layui-inline">
  75. <label class="layui-form-label" style="width: 70px">是否修改</label>
  76. <div class="layui-input-inline" style="width: 140px">
  77. <select name="sfxg" id="sfxg" lay-filter="status">
  78. <option value="">全部</option>
  79. <option value='0'>未修改</option>
  80. <option value='1'>已修改</option>
  81. </select>
  82. </div>
  83. </div>
  84. <div class="layui-inline" style="margin-left: 0px">
  85. <button type="submit" class="layui-btn" lay-submit lay-filter="data-search-btn"><i class="layui-icon"></i> 搜 索</button>
  86. <button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="data-reset-btn"><i class="layui-icon layui-icon-refresh"></i> 重 置 </button>
  87. </div>
  88. </div>
  89. </form>
  90. </div>
  91. </fieldset>
  92. <script type="text/html" id="toolbarDemo">
  93. <div class="layui-btn-container">
  94. <button class="layui-btn layui-btn-sm layui-btn-normal" lay-event="edit">
  95. <i class="layui-icon layui-icon-edit" style="font-size: 10px;"></i>编辑
  96. </button>
  97. <button class="layui-btn layui-btn-sm layui-btn-normal" lay-event="view">
  98. <i class="layui-icon layui-icon-file" style="font-size: 10px;"></i>查看
  99. </button>
  100. <button class="layui-btn layui-btn-sm layui-btn-danger" lay-event="delete">
  101. <i class="layui-icon layui-icon-delete" style="font-size: 10px;"></i>删除
  102. </button>
  103. <!-- <button class="layui-btn layui-btn-sm data-add-btn" lay-event="tjApprove">-->
  104. <!-- <i class="layui-icon layui-icon-ok" style="font-size: 10px;"></i>提交审批-->
  105. <!-- </button>-->
  106. <button class="layui-btn layui-btn-sm data-add-btn" lay-event="tjrevokeApprove" id="idd">
  107. <i class="layui-icon layui-icon-edit" style="font-size: 10px;"></i>撤销审批
  108. </button>
  109. <button class="layui-btn layui-btn-sm layui-btn-normal" lay-event="spOption">
  110. <i class="layui-icon layui-icon-edit" style="font-size: 10px;"></i>审核
  111. </button>
  112. <button class="layui-btn layui-btn-sm layui-btn-normal" lay-event="spList">
  113. <i class="layui-icon layui-icon-list" style="font-size: 10px;"></i>审批列表
  114. </button>
  115. <button class="layui-btn layui-btn-sm layui-btn-normal" lay-event="xgjl">
  116. <i class="layui-icon layui-icon-list" style="font-size: 10px;"></i>修改记录
  117. </button>
  118. <!-- <button class="layui-btn layui-btn-sm data-add-btn" lay-event="fyApply">-->
  119. <!-- <i class="layui-icon layui-icon-list" style="font-size: 10px;"></i>费用申请-->
  120. <!-- </button>-->
  121. <button class="layui-btn layui-btn-sm" lay-event="exportExcel" style="background-color: black">
  122. <i class="layui-icon layui-icon-export" style="font-size: 10px;"></i>导出列表
  123. </button>
  124. <button class="layui-btn layui-btn-sm" lay-event="tongBu" style="background: #FF8040"
  125. id="tbYzx">
  126. 同步已执行
  127. </button>
  128. <button class="layui-btn layui-btn-sm" lay-event="viewXgsq"
  129. id="viewXgsq">
  130. 查看修改申请
  131. </button>
  132. </div>
  133. </script>
  134. <script>
  135. // 当文档加载完成后执行以下操作
  136. document.addEventListener('DOMContentLoaded', function() {
  137. // 获取下拉框元素
  138. var selectElement = document.getElementById('nf');
  139. // 获取当前年份并转换为字符串
  140. var currentYear = new Date().getFullYear().toString();
  141. // 遍历下拉框选项
  142. for (var i = 0; i < selectElement.options.length; i++) {
  143. // 如果选项的值与当前年份相匹配,则将该选项设为被选中状态并结束循环
  144. if (selectElement.options[i].value === currentYear) {
  145. selectElement.options[i].selected = true;
  146. break;
  147. }
  148. }
  149. });
  150. </script>
  151. <input type="hidden" id="userId" name="userId" class="layui-input" th:value="${userId}">
  152. <table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
  153. </div>
  154. </div>
  155. <script>
  156. // 获取所有需要去除空格的输入框
  157. const inputs = [
  158. document.getElementById('xmmc'),
  159. document.getElementById('erpbh'),
  160. document.getElementById('rwsmc')
  161. ];
  162. // 为每个输入框添加事件监听
  163. inputs.forEach(input => {
  164. input.addEventListener('input', function() {
  165. this.value = this.value.replace(/\s+/g, ''); // 去除空格
  166. });
  167. });
  168. </script>
  169. <script th:src="@{/lib/jquery-3.4.1/jquery-3.4.1.min.js}" charset="utf-8"></script>
  170. <script th:src="@{/lib/layui/layui.js}" charset="utf-8"></script>
  171. <script th:src="@{/lib/coco-message/coco-message.js}" charset="utf-8"></script>
  172. <script th:src="@{/js/lay-config.js}" charset="utf-8"></script>
  173. <script th:src="@{/lib/xm-select-v1.2.2/xm-select.js}" charset="utf-8"></script>
  174. <script th:inline="javascript" type="text/javascript">
  175. AjaxUtil.ctx = /*[[@{/}]]*/'';
  176. var updateflag = 0;
  177. var xmApproval = {};
  178. layui.use(['form', 'table', 'tableSelect', 'laydate','layCascader'], function () {
  179. var form = layui.form
  180. table = layui.table;
  181. var userId = $("#userId").val();
  182. var selectedYear = $('#nf').val();
  183. layCascader = layui.layCascader;
  184. var index2 = layer.load(0, {shade: 0.1});
  185. AjaxUtil.get({
  186. url: AjaxUtil.ctx + 'userinfo/listDeptForSelect',
  187. success: function (res) {
  188. layer.close(index2);
  189. var datalist = [];
  190. for (let item of res.data) {
  191. item.value = item.deptName;
  192. item.label = item.deptName;
  193. datalist.push(item);
  194. }
  195. console.log(datalist)
  196. // 扁平数据转树
  197. var options = arrayToTree(datalist, "50");
  198. // 初始化cascader实例
  199. var cascader = layCascader({
  200. elem: '#ssbmmc',
  201. clearable: true,
  202. showAllLevels: false, // 配置仅显示最后一级
  203. props: {
  204. checkStrictly: true, // 配置选择任意一级选项
  205. },
  206. options: options
  207. });
  208. // 监听cascader变化
  209. cascader.changeEvent(function (value, node) {
  210. // 主动关闭面板
  211. cascader.close();
  212. $("#deptId").val(value);
  213. console.log(node);
  214. });
  215. },
  216. error: function (error) {
  217. layer.close(index2);
  218. Message.error('获取部门信息失败!', 1000);
  219. }
  220. });
  221. setTimeout(function() {
  222. // 在这里可以进行您的加载操作
  223. layer.msg('加载完成!', { icon: 1 });
  224. if (userId == 42){
  225. document.getElementById('idd').style.display = 'none';
  226. return false;
  227. }
  228. return false;
  229. // 隐藏加载信息
  230. }, 100); // 2000
  231. var currTable = table.render({
  232. elem: '#currentTableId',
  233. url: AjaxUtil.ctx + 'prjAnnualbudget/list/?nf='+selectedYear,
  234. method: 'post',
  235. toolbar: '#toolbarDemo',
  236. // defaultToolbar: ['filter', 'print'],
  237. cols: [
  238. [
  239. {type: "radio", fixed: 'left',title: '😊'},
  240. {type: 'numbers', align: 'center',title: '序号'},
  241. {field: 'spzt', width: '7%', title: '审批状态'},
  242. {field: 'xmmc', width: '20%', title: '项目名称'},
  243. // {field: 'rwsmc', width: '20%', title: '任务书名称'},
  244. // {field: 'mc', width: '20%', title: '年度预算名称'},
  245. {field: 'erpbh', width: '8%', title: 'ERP编号'},
  246. {field: 'xmlxmc', width: '12%', title: '项目类型'},
  247. {field: 'xmfzrxm', width: '7%', title: '项目负责人'},
  248. {field: 'ssbmmc', width: '10%', title: '所属部门'},
  249. {field: 'nf', width: '5%', title: '年份'},
  250. {field: 'sqrxm', width: '6%', title: '申请人'},
  251. {field: 'sqsj', width: '8%', title: '申请时间', align: 'center'},
  252. {field: 'sm', width: '10%', title: '说明'}
  253. ]
  254. ],
  255. autoSort: false,
  256. limits: [10, 15, 20, 25, 50, 100],
  257. limit: 10,
  258. page: true,
  259. skin: 'grid',
  260. parseData: function (res) { //res 即为原始返回的数据
  261. return {
  262. "code": res.code, //解析接口状态
  263. "msg": res.message, //解析提示文本
  264. "count": res.data.total, //解析数据长度
  265. "data": res.data.rows //解析数据列表
  266. };
  267. },
  268. done: function (res, curr, count) { // done为数据渲染完的回调
  269. // 测试打印出后端返回的权限列表
  270. // let permissionSet = [[${permissionSet}]];
  271. // console.log(JSON.stringify(permissionSet));
  272. if (userId != 40 && userId != 42 && userId != 1) {
  273. document.getElementById("tbYzx").style.display = 'none';
  274. }
  275. }
  276. });
  277. // 监听搜索操作
  278. form.on('submit(data-search-btn)', function (data) {
  279. // 执行搜索重载
  280. currTable.reload({
  281. page: {
  282. curr: 1 // 页码从1开始
  283. },
  284. where: form.val("search-form")
  285. });
  286. return false;
  287. });
  288. // 监听重置操作
  289. form.on('submit(data-reset-btn)', function (data) {
  290. form.val("search-form", {
  291. "bh": '',
  292. "erpbh": '',
  293. "xmlx": '',
  294. "sfbyj": '',
  295. "xmmc": '',
  296. "ssbmmc": '',
  297. "nf": '0',
  298. "spzt": '',
  299. "sfbz": '',
  300. "dkyfzr": '',
  301. "rwsmc":''
  302. });
  303. // 执行搜索重载
  304. currTable.reload({
  305. page: {
  306. curr: 1
  307. },
  308. where: form.val("search-form")
  309. });
  310. return false;
  311. });
  312. // 监听排序事件
  313. table.on('sort(currentTableFilter)', function (obj) { //注:sort 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
  314. // console.log(obj.field); //当前排序的字段名
  315. // console.log(obj.type); //当前排序类型:desc(降序)、asc(升序)、null(空对象,默认排序)
  316. // console.log(this); //当前排序的 th 对象
  317. //尽管我们的 table 自带排序功能,但并没有请求服务端。
  318. //有些时候,你可能需要根据当前排序的字段,重新向服务端发送请求,从而实现服务端排序,如:
  319. currTable.reload({
  320. initSort: obj, //记录初始排序,如果不设的话,将无法标记表头的排序状态。
  321. where: { //请求参数(注意:这里面的参数可任意定义,并非下面固定的格式)
  322. sortName: toLine(obj.field), //排序字段
  323. sortOrder: toLine(obj.type) //排序方式
  324. }
  325. });
  326. });
  327. // 监听工具栏事件
  328. table.on('toolbar(currentTableFilter)', function (obj) {
  329. if (obj.event === 'add') { // 监听添加操作
  330. layer.open({
  331. title: '新建年度预算',
  332. type: 2,
  333. shade: 0.3,
  334. maxmin: true,
  335. area: ['1010px', layerheight + 'px'],
  336. content: AjaxUtil.ctx + 'prjAnnualbudget/forAdd',
  337. end: function () {
  338. // 重载表格
  339. if (updateflag == 1)
  340. currTable.reload();
  341. updateflag = 0;
  342. }
  343. });
  344. } else if (obj.event == 'edit') {
  345. var dataBudget = table.cache["currentTableId"];
  346. if (dataBudget.length == 0)
  347. return;
  348. var checkStatus = table.checkStatus('currentTableId')
  349. , data = checkStatus.data;
  350. if (data == null || data.length === 0) {
  351. Message.warning("请选择要编辑的年度预算!", 1500);
  352. } else if (data.length > 1) {
  353. Message.warning("请选择一条记录进行编辑!", 1500);
  354. } else if (data[0].spzt == "作废") {
  355. Message.warning("该年度预算已作废!", 1500);
  356. }
  357. // else if (data[0].sqr != userId) {
  358. // Message.error("您不是该年度预算的申请人!", 1500);}
  359. else {
  360. layer.open({
  361. title: '编辑年度预算',
  362. type: 2,
  363. shade: 0.3,
  364. maxmin: true,
  365. shadeClose: true,
  366. area: ['1010px', layerheight + 'px'],
  367. content: AjaxUtil.ctx + 'prjAnnualbudget/forUpdate/' + data[0].id,
  368. end: function () {
  369. if (updateflag == 1)
  370. currTable.reload();
  371. updateflag = 0;
  372. }
  373. });
  374. }
  375. } else if (obj.event == 'view') {
  376. var dataBudget = table.cache["currentTableId"];
  377. if (dataBudget.length == 0)
  378. return;
  379. var checkStatus = table.checkStatus('currentTableId')
  380. , data = checkStatus.data;
  381. if (data == null || data.length === 0) {
  382. Message.warning("请选择要查看的年度预算!", 1500);
  383. } else if (data.length > 1) {
  384. Message.warning("请选择一条记录进行查看!", 1500);
  385. } else {
  386. layer.open({
  387. title: '查看年度预算',
  388. type: 2,
  389. shade: 0.3,
  390. maxmin: true,
  391. shadeClose: true,
  392. area: ['1010px', layerheight + 'px'],
  393. content: AjaxUtil.ctx + 'prjAnnualbudget/forView/' + data[0].id,
  394. end: function () {
  395. }
  396. });
  397. }
  398. } else if (obj.event === 'delete') { // 监听删除操作
  399. var dataBudget = table.cache["currentTableId"];
  400. if (dataBudget.length == 0)
  401. return;
  402. var checkStatus = table.checkStatus('currentTableId')
  403. , data = checkStatus.data;
  404. if (data == null || data.length === 0) {
  405. Message.warning("请选择要删除的年度预算!", 1000);
  406. return;
  407. } else {
  408. for (let item of data) {
  409. if (item.sqr != userId) {
  410. Message.error("存在您不是申请人的年度预算,不能直接删除!", 2000);
  411. return;
  412. }
  413. if (item.spzt != "未提交") {
  414. if (item.spzt == "审批结束")
  415. Message.warning("存在已审批结束的年度预算,不能直接删除!", 2000);
  416. else if (data[0].spzt != null && data[0].spzt != '作废')
  417. Message.warning("存在审批中的年度预算,不能直接删除!", 2000);
  418. return;
  419. }
  420. }
  421. }
  422. layer.confirm('确定批量删除年度预算吗?', function (index) {
  423. layer.close(index);
  424. AjaxUtil.post({
  425. url: AjaxUtil.ctx + "prjAnnualbudget/batchDelete",
  426. contentType: "application/json",
  427. data: JSON.stringify(data),
  428. success: function (res) {
  429. if (res.code === 0) {
  430. Message.success(1500, res.message, function () {
  431. // 重载表格
  432. currTable.reload();
  433. });
  434. } else {
  435. Message.error(res.message, 1000);
  436. }
  437. },
  438. error: function (error) {
  439. }
  440. });
  441. });
  442. } else if (obj.event === 'tjApprove') {
  443. var dataBudget = table.cache["currentTableId"];
  444. if (dataBudget.length == 0)
  445. return;
  446. var checkStatus = table.checkStatus('currentTableId')
  447. , data = checkStatus.data;
  448. if (data == null || data.length === 0) {
  449. Message.warning("请选择要提交审批的年度预算!", 1500);
  450. } else if (data.length > 1) {
  451. Message.warning("请选择一条记录进行提交!", 1500);
  452. } else if (data[0].spzt == "审批结束") {
  453. Message.warning("该年度预算已审批结束!", 1500);
  454. } else if (data[0].spzt == "作废") {
  455. Message.warning("该年度预算已作废!", 1500);
  456. } else if (data[0].spzt != null && data[0].spzt.indexOf("未提交") < 0) {
  457. Message.warning("该年度预算正在审批中……", 1500);
  458. }
  459. else if (data[0].sqr != userId) {
  460. Message.error("您不是该年度预算的申请人!", 1500);}
  461. else {
  462. if (isNaN(data[0].ysje) || isNaN(data[0].ysje))
  463. Message.error("该完善年度预算明细后提交!", 1500);
  464. else {
  465. xmApproval = {
  466. "xmid": data[0].id,
  467. "xm": data[0].mc,
  468. "zt": data[0].spzt,
  469. "ysje": data[0].ysje
  470. };
  471. if (data[0].spzt == null) {
  472. xmApproval.zt = "未提交";
  473. data[0].spzt = "未提交";
  474. }
  475. var content = AjaxUtil.ctx + 'prjAnnualbudget/forApproveAdd';
  476. if (data[0].spzt != "未提交")
  477. content = AjaxUtil.ctx + 'prjAnnualbudget/forApproveUpdate/' + data[0].id + '?spzt=' + data[0].spzt;
  478. console.log(content);
  479. var index = layer.open({
  480. title: '提交审批',
  481. type: 2,
  482. shade: 0.3,
  483. maxmin: true,
  484. shadeClose: true,
  485. area: ['1015px', layerheight + 'px'],
  486. content: content,
  487. end: function () {
  488. if (updateflag == 1)
  489. currTable.reload();
  490. updateflag = 0;
  491. layer.close(index);
  492. }
  493. });
  494. }
  495. }
  496. } else if (obj.event === 'spOption') {
  497. var dataBudget = table.cache["currentTableId"];
  498. if (dataBudget.length == 0)
  499. return;
  500. var checkStatus = table.checkStatus('currentTableId')
  501. , data = checkStatus.data;
  502. if (data == null || data.length === 0) {
  503. Message.warning("请选择要审批的年度预算!", 1500);
  504. } else if (data.length > 1) {
  505. Message.warning("请选择一条记录进行审批!", 1500);
  506. } else if (data[0].spzt == null || data[0].spzt.indexOf("未提交") >= 0) {
  507. Message.warning("该年度预算尚未提交审批!", 1500);
  508. } else if (data[0].spzt == "审批结束") {
  509. Message.warning("该年度预算已审批结束!", 1500);
  510. } else if (data[0].spzt == "作废") {
  511. Message.warning("该年度预算已作废!", 1500);
  512. } else {
  513. xmApproval = {
  514. "xmid": data[0].id,
  515. "xm": data[0].mc,
  516. "ysje": data[0].ysje
  517. };
  518. var index = layer.open({
  519. title: '审批意见',
  520. type: 2,
  521. shade: 0.3,
  522. maxmin: true,
  523. shadeClose: true,
  524. area: ['1020px', layerheight + 'px'],
  525. content: AjaxUtil.ctx + 'prjAnnualbudget/forApproveUpdate/' + data[0].id + '?spzt=' + data[0].spzt,
  526. end: function () {
  527. if (updateflag == 1)
  528. currTable.reload();
  529. updateflag = 0;
  530. layer.close(index);
  531. }
  532. });
  533. }
  534. } else if (obj.event === 'spList') {
  535. var dataBudget = table.cache["currentTableId"];
  536. if (dataBudget.length == 0)
  537. return;
  538. var checkStatus = table.checkStatus('currentTableId')
  539. , data = checkStatus.data;
  540. if (data == null || data.length === 0) {
  541. Message.warning("请选择要查看审批列表的年度预算!", 1500);
  542. } else if (data.length > 1) {
  543. Message.warning("请选择一条记录进行查看!", 1500);
  544. } else if (data[0].spzt == null || data[0].spzt == "未提交") {
  545. Message.warning("该年度预算尚未提交审批!", 1500);
  546. } else {
  547. xmApproval = {
  548. "xmid": data[0].id,
  549. "xm": data[0].mc
  550. };
  551. var index = layer.open({
  552. title: '审批列表',
  553. type: 2,
  554. shade: 0.3,
  555. maxmin: true,
  556. shadeClose: true,
  557. area: ['1300px', layerheight + 'px'],
  558. content: AjaxUtil.ctx + 'prjAnnualbudget/forApproveList',
  559. end: function () {
  560. layer.close(index);
  561. }
  562. });
  563. }
  564. } else if (obj.event === 'xgjl') {
  565. var dataBudget = table.cache["currentTableId"];
  566. if (dataBudget.length == 0)
  567. return;
  568. var checkStatus = table.checkStatus('currentTableId')
  569. , data = checkStatus.data;
  570. if (data == null || data.length === 0) {
  571. Message.warning("请选择要查看审批列表的年度预算!", 1500);
  572. } else if (data.length > 1) {
  573. Message.warning("请选择一条记录进行查看!", 1500);
  574. } else if (data[0].spzt == null || data[0].spzt == "未提交") {
  575. Message.warning("该年度预算尚未提交审批!", 1500);
  576. } else {
  577. xmApproval = {
  578. "xmid": data[0].id,
  579. "xm": data[0].mc
  580. };
  581. var index = layer.open({
  582. title: '修改记录',
  583. type: 2,
  584. shade: 0.3,
  585. maxmin: true,
  586. shadeClose: true,
  587. area: ['1300px', layerheight + 'px'],
  588. content: AjaxUtil.ctx + 'PrjAnnualBudgetRecord/viewRecord',
  589. end: function () {
  590. layer.close(index);
  591. }
  592. });
  593. }
  594. } else if (obj.event === 'fyApply') {
  595. var dataBudget = table.cache["currentTableId"];
  596. if (dataBudget.length == 0)
  597. return;
  598. var checkStatus = table.checkStatus('currentTableId')
  599. , data = checkStatus.data;
  600. if (data == null || data.length === 0) {
  601. Message.warning("请选择要申请费用的年度预算!", 1500);
  602. } else if (data.length > 1) {
  603. Message.warning("请选择一条记录进行申请费用!", 1500);
  604. } else if (data[0].spzt == null || data[0].spzt.indexOf("未提交") >= 0) {
  605. Message.warning("该年度预算尚未提交审批!", 1500);
  606. } else if (data[0].spzt == "作废") {
  607. Message.warning("该年度预算已作废!", 1500);
  608. } else if (data[0].spzt != null && data[0].spzt != "审批结束" && data[0].spzt.indexOf("未提交") < 0) {
  609. Message.warning("该年度预算正在审批中……", 1500);
  610. } else {
  611. xmApproval = {
  612. "xmid": data[0].rws,
  613. "xmmc": data[0].rwsmc
  614. };
  615. layer.open({
  616. title: '新建费用申请',
  617. type: 2,
  618. shade: 0.3,
  619. maxmin: true,
  620. area: ['1020px', layerheight + 'px'],
  621. content: AjaxUtil.ctx + 'prjAnnualbudget/forApplyAdd/' + data[0].id,
  622. end: function () {
  623. // 重载表格
  624. if (updateflag == 1)
  625. currTable.reload();
  626. updateflag = 0;
  627. }
  628. });
  629. }
  630. } else if (obj.event === 'exportExcel') {
  631. var dataBudget = table.cache["currentTableId"];
  632. if (dataBudget.length == 0)
  633. return;
  634. var formData = form.val('search-form');
  635. // 获取form 表单代码
  636. console.log(formData);
  637. var formDataString = JSON.stringify(formData);
  638. let a = document.createElement('a');
  639. a.href = AjaxUtil.ctx + 'prjAnnualbudget/exportExcel/'+formDataString;
  640. a.click();
  641. a.parentNode.removeChild(a);
  642. }
  643. else if(obj.event==='tjrevokeApprove'){
  644. var projects = table.cache["currentTableId"];
  645. if (projects.length == 0)
  646. return;
  647. var checkStatus = table.checkStatus('currentTableId')
  648. , data = checkStatus.data;
  649. if (data == null || data.length === 0) {
  650. Message.warning("请选择要撤销的年度预算!", 1500);
  651. } else if (data.length > 1) {
  652. Message.warning("请选择一条记录进行撤销!", 1500);
  653. } else if (data[0].spzt == "审批结束") {
  654. Message.warning("该年度预算已审批结束!", 1500);
  655. }
  656. // else if (data[0].cjr != userId) {
  657. // Message.error("您不是该年度预算的创建人!", 1500);}
  658. else {
  659. xmApproval = {
  660. "xmid": data[0].id,
  661. "xm": data[0].zwmc,
  662. "zt": "未提交"
  663. };
  664. if(data[0].spzt == null) {
  665. xmApproval.zt = "未提交";
  666. data[0].spzt = "未提交";
  667. }
  668. var project = {
  669. "id": xmApproval.xmid,
  670. "spzt": '未提交'
  671. }
  672. layer.confirm('确定撤销年度预算吗?', function (index) {
  673. layer.close(index);
  674. AjaxUtil.post({
  675. url: AjaxUtil.ctx + "prjAnnualbudget/TJrevokeApprove",
  676. contentType: "application/json",
  677. data: JSON.stringify(project),
  678. success: function (res) {
  679. if (res.code === 0) {
  680. Message.success(1500, res.message, function () {
  681. // 重载表格
  682. currTable.reload();
  683. });
  684. } else {
  685. Message.error(res.message, 1000);
  686. }
  687. },
  688. error: function (error) {
  689. }
  690. });
  691. });
  692. }
  693. }else if (obj.event==='tongBu'){
  694. var project = table.cache["currentTableId"];
  695. if (project.length == 0) {
  696. return;
  697. }
  698. var checkStatus = table.checkStatus('currentTableId')
  699. , data = checkStatus.data;
  700. if (data == null || data.length === 0) {
  701. Message.warning("请选择要同步数据的年度预算!", 1500);
  702. } else if (data.length > 1) {
  703. Message.warning("请选择一条记录进行同步!", 1500);
  704. } else {
  705. layer.confirm('确定要将该年度预算进行数据同步吗?', function (index) {
  706. layer.close(index);
  707. AjaxUtil.get({
  708. url: AjaxUtil.ctx + "updateSJYZXAndXTJSYZX/"+data[0].rws+"/"+data[0].id,
  709. contentType: "application/json",
  710. success: function (res) {
  711. if (res.code === 0) {
  712. Message.success(1500, res.message, function () {
  713. // 重载表格
  714. currTable.reload();
  715. });
  716. } else {
  717. Message.error(res.message, 1000);
  718. }
  719. },
  720. error: function () {
  721. }
  722. });
  723. });
  724. }
  725. }else if (obj.event ="viewXgsq"){
  726. var index = layer.open({
  727. title: '修改申请',
  728. type: 2,
  729. shade: 0.3,
  730. maxmin: true,
  731. shadeClose: true,
  732. area: ['1300px', layerheight + 'px'],
  733. content: AjaxUtil.ctx+ "prjAnnualbudget/ViewXGSQ",
  734. end: function () {
  735. layer.close(index);
  736. }
  737. });
  738. }
  739. });
  740. //双击
  741. table.on('rowDouble(currentTableFilter)', function (obj) {
  742. layer.open({
  743. title: '查看年度预算',
  744. type: 2,
  745. shade: 0.3,
  746. maxmin: true,
  747. shadeClose: true,
  748. area: ['1010px', layerheight + 'px'],
  749. content: AjaxUtil.ctx + 'prjAnnualbudget/forView/' + obj.data.id,
  750. end: function (index) {
  751. layer.close(index);
  752. }
  753. });
  754. });
  755. });
  756. function getXmApproval() {
  757. return xmApproval;
  758. }
  759. function setUpdateFlag() {
  760. updateflag = 1;
  761. }
  762. function arrayToTree(data, firstPid) {
  763. const result = [];
  764. getChildren(data, result, firstPid)
  765. return result;
  766. }
  767. function getChildren(data, result, parentId) {
  768. for (const item of data) {
  769. if (item.parentId === parentId) {
  770. const newItem = {...item, children: []};
  771. result.push(newItem);
  772. getChildren(data, newItem.children, item.deptId);
  773. }
  774. }
  775. }
  776. </script>
  777. </body>
  778. </html>