financial_transfer_tender.js 8.3 KB

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