financial_transfer.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. $(function () {
  2. autoFlashHeight();
  3. $('#add-transfer-btn').on('click', function () {
  4. if ($('#transfer-date').val() === '') {
  5. toastr.error('请选择日期');
  6. return false;
  7. }
  8. $('#add-transfer-form').submit();
  9. });
  10. $('body').on('click', '#transfer-list .del-transfer-btn', function () {
  11. const trid = $(this).data('id');
  12. deleteAfterHint(function () {
  13. postData(window.location.pathname + '/update', {postType: 'del-transfer', postData: { node: trid }}, function (result) {
  14. window.location.reload();
  15. })
  16. }, '确认删除该资金划拨并移除所有附件?');
  17. });
  18. $('body').on('click', '.open-transfer-files', function () {
  19. const trid = $(this).attr('data-trid');
  20. if (!trid) {
  21. toastr.error('获取资金划拨信息失败');
  22. return;
  23. }
  24. const trInfo = _.find(transferList, { id: parseInt(trid) });
  25. if (!trInfo) {
  26. toastr.error('获取资金划拨信息失败');
  27. return;
  28. }
  29. if (trInfo.uid === user_id || financialPermission.transfer_file) {
  30. $('#transfer-file .upload-permission').show();
  31. } else {
  32. $('#transfer-file .upload-permission').hide();
  33. }
  34. $('#transfer-file').modal('show');
  35. $('#transfer-file input[name="trid"]').val(trid);
  36. openFinancialTransferFiles(trInfo);
  37. });
  38. // 上传附件
  39. $('#transfer-file input[type="file"]').change(function () {
  40. const files = Array.from(this.files);
  41. const valiData = files.map(v => {
  42. const ext = v.name.substring(v.name.lastIndexOf('.') + 1)
  43. return {
  44. size: v.size,
  45. ext
  46. }
  47. });
  48. const trid = $('#transfer-file input[name="trid"]').val();
  49. const trInfo = _.find(transferList, { id: parseInt(trid) });
  50. if (!trInfo) {
  51. toastr.warning('不存在该资金划拨');
  52. $('#transfer-file input[type="file"]').val('');
  53. return;
  54. }
  55. if (validateFiles(valiData)) {
  56. if (files.length) {
  57. const formData = new FormData()
  58. files.forEach(file => {
  59. formData.append('name', file.name)
  60. formData.append('size', file.size)
  61. formData.append('file', file)
  62. })
  63. postDataWithFile('/financial/' + spid + '/transfer/' + trInfo.id + '/file/upload', formData, function (result) {
  64. trInfo.files = result;
  65. openFinancialTransferFiles(trInfo);
  66. $('#transfer-list tr[data-id="' + trInfo.id + '"] .file-num').text(trInfo.files.length ? trInfo.files.length : '');
  67. });
  68. }
  69. }
  70. $('#transfer-file input[type="file"]').val('');
  71. });
  72. $('body').on('click', '#transfer-file .file-del', function () {
  73. const trid = $('#transfer-file input[name="trid"]').val();
  74. const trInfo = _.find(transferList, { id: parseInt(trid) });
  75. if (!trInfo) {
  76. toastr.warning('不存在该资金划拨');
  77. return;
  78. }
  79. const fid = $(this).data('id');
  80. deleteAfterHint(function () {
  81. postData('/financial/' + spid + '/transfer/' + trInfo.id + '/file/delete', { id: fid }, function (result) {
  82. trInfo.files = result;
  83. openFinancialTransferFiles(trInfo);
  84. $('#transfer-list tr[data-id="' + trInfo.id + '"] .file-num').text(trInfo.files.length ? trInfo.files.length : '');
  85. });
  86. }, '确认删除该文件?');
  87. });
  88. function openFinancialTransferFiles(trInfo, _this = '#transfer-file table tbody') {
  89. const files = trInfo.files;
  90. let filesHtml = '';
  91. const newFiles = files.map(file => {
  92. let showDel = false;
  93. if (file.uid === user_id) {
  94. showDel = true
  95. }
  96. return {...file, showDel}
  97. })
  98. newFiles.forEach((file, idx) => {
  99. filesHtml += `<tr class="text-center">
  100. <td>${idx + 1}</td><td class="text-left"><a href="${file.filepath}" target="_blank">${file.filename}</a></td><td>${file.username}</td><td>${moment(file.upload_time).format('YYYY-MM-DD HH:mm:ss')}</td>
  101. <td>
  102. <div class="btn-group-table">
  103. ${file.viewpath ? `<a href="${file.viewpath}" target="_blank" class="mr-1"><i class="fa fa-eye fa-fw"></i></a>` : ''}
  104. <a href="/financial/${spid}/transfer/${trInfo.id}/file/${file.id}/download" class="mr-1"><i class="fa fa-download fa-fw"></i></a>
  105. ${file.showDel ? `<a href="javascript: void(0);" class="text-danger file-del mr-1" data-id="${file.id}"><i class="fa fa-trash-o fa-fw text-danger"></i></a>` : ''}
  106. </div>
  107. </td>
  108. </tr>`;
  109. });
  110. $(_this).html(filesHtml);
  111. }
  112. $('body').on('click', '#transfer-list .edit-remark', function () {
  113. const trid = $(this).data('id');
  114. const trInfo = _.find(transferList, { id: trid });
  115. if (!trInfo) {
  116. toastr.error('获取资金划拨信息失败');
  117. return;
  118. }
  119. $('#edit-remark-modal .transfer-time').text(trInfo.t_time);
  120. $('#edit-remark-modal').modal('show');
  121. $('#edit-remark-modal input[name="ftid"]').val(trid);
  122. $('#edit-remark-modal textarea[name="remark"]').val(trInfo.remark);
  123. });
  124. $('#save-remark-btn').click(function () {
  125. const data = {
  126. id: parseInt($('#edit-remark-modal input[name="ftid"]').val()),
  127. remark: $('#edit-remark-modal textarea[name="remark"]').val(),
  128. }
  129. const trInfo = _.find(transferList, { id: data.id });
  130. if (!trInfo) {
  131. toastr.error('获取资金划拨信息失败');
  132. return;
  133. }
  134. postData(window.location.pathname + '/update', {postType: 'save-transfer', postData: data}, function (result) {
  135. trInfo.remark = data.remark;
  136. $('#edit-remark-modal').modal('hide');
  137. $('#transfer-list tr[data-id="' + trInfo.id + '"] .show-remark').html(trInfo.remark);
  138. });
  139. });
  140. $.subMenu({
  141. menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
  142. toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',
  143. key: 'menu.1.0.0',
  144. miniHint: '#sub-mini-hint', hintKey: 'menu.hint.1.0.1',
  145. callback: function (info) {
  146. if (info.mini) {
  147. $('.panel-title').addClass('fluid');
  148. $('#sub-menu').removeClass('panel-sidebar');
  149. } else {
  150. $('.panel-title').removeClass('fluid');
  151. $('#sub-menu').addClass('panel-sidebar');
  152. }
  153. autoFlashHeight();
  154. }
  155. });
  156. })
  157. /**
  158. * 校验文件大小、格式
  159. * @param {Array} files 文件数组
  160. */
  161. function validateFiles(files) {
  162. if (files.length > 10) {
  163. toastr.error('至多同时上传10个文件');
  164. return false
  165. }
  166. return files.every(file => {
  167. if (file.size > 1024 * 1024 * 30) {
  168. toastr.error('文件大小限制为30MB');
  169. return false
  170. }
  171. if (whiteList.indexOf('.' + file.ext.toLowerCase()) === -1) {
  172. toastr.error('请上传正确的格式文件');
  173. return false
  174. }
  175. return true
  176. })
  177. }