budget_info.js 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642
  1. const table = '#table',
  2. $modal = $('#modal'),
  3. $modalQuota = $('#modal_quota')
  4. console.log(`加载项目:${project_id}`)
  5. const nav_tab_template = `
  6. <li class="nav-item" data-id="{0}">
  7. <button type="button" class="nav-link {2} btn-light-primary btn-active-color-primary" data-id="{0}" data-bs-toggle="tab" data-bs-target="#iwb_tab_{0}">{1}</button>
  8. </li>`,
  9. tab_content_template = `<div class="tab-pane h-100 fade" id="iwb_tab_{0}" role="tabpanel">{1}</div>`,
  10. table_template = `<div class="d-flex flex-row h-100 project-box">
  11. <div class="flex-row-auto h-100 left-box">
  12. <div class="tree-dom h-100 overflow-auto" id="js-tree_{0}"></div>
  13. </div>
  14. <div class="flex-row-fluid right-box">
  15. <div class="table-box table-responsive" id="table_box_{0}" style="display: none">
  16. <section class="d-none">
  17. <input type="hidden" name="budget_id" value="{0}">
  18. <input type="hidden" name="project_id" value="">
  19. <input type="hidden" name="item_id" value="">
  20. <input type="hidden" name="item_code" value="">
  21. </section>
  22. <div class="my-2 d-flex align-items-center table-title mt-5">
  23. <span class="fw-bolder me-5 title fs-2"></span>
  24. <span class="badge d-none badge-primary fs-5 me-5"></span>
  25. <div class="d-flex">
  26. <div class="form-check form-check-custom form-check-primary form-check-solid">
  27. <input class="form-check-input" name="table_radio" type="radio" value="task" id="task_radio"/>
  28. <label class="form-check-label fw-bolder text-primary" for="task_radio">
  29. 任务列表
  30. </label>
  31. </div>
  32. <div class="form-check form-check-custom form-check-success form-check-solid ms-5">
  33. <input class="form-check-input" name="table_radio" type="radio" value="quota" id="quota_radio"/>
  34. <label class="form-check-label fw-bolder text-success" for="quota_radio">
  35. 定额输入
  36. </label>
  37. </div>
  38. </div>
  39. </div>
  40. <div class="d-flex justify-content-between my-5">
  41. <div class="">
  42. <button type="button" id="task_add_btn" class="btn btn-primary btn-sm" onclick="Add('{0}')">添加任务</button>
  43. <button type="button" id="quota_add_btn" class="btn btn-primary btn-sm" onclick="Add_Quota('{0}')">添加定额</button>
  44. </div>
  45. <form class="search-box d-flex">
  46. <div class="d-flex">
  47. <select class="form-select form-select-sm me-5" name="collect_status">
  48. <option value="">全部采集状态</option>
  49. <option value="0">未采集</option>
  50. <option value="1">采集中</option>
  51. <option value="2">已采集</option>
  52. <option value="3">采集失败</option>
  53. </select>
  54. <select class="form-select form-select-sm me-5" name="process_status">
  55. <option value="">全部处理状态</option>
  56. <option value="0">未处理</option>
  57. <option value="1">处理中</option>
  58. <option value="2">已处理</option>
  59. <option value="3">处理失败</option>
  60. </select>
  61. <select class="form-select form-select-sm me-5" name="send_status">
  62. <option value="">全部发送状态</option>
  63. <option value="0">未发送</option>
  64. <option value="1">发送中</option>
  65. <option value="2">已发送</option>
  66. <option value="3">发送失败</option>
  67. </select>
  68. <input type="text" class="form-control form-control-sm w-200px" placeholder="请输入关键字" name="keyword" />
  69. </div>
  70. <div class="btn-group ms-5">
  71. <button type="button" class="btn btn-primary btn-sm" onclick="IwbTableSearch(this)">查询</button>
  72. <button type="button" class="btn btn-danger btn-sm" onclick="IwbTableResetSearch(this)">重置</button>
  73. </div>
  74. </form>
  75. </div>
  76. <table class="table table-striped table-bordered table-hover table-rounded" id="table_{0}">
  77. </table>
  78. <div class="pagination-row"></div>
  79. </div>
  80. </div>
  81. </div>`
  82. let _fileUploadDropzone = null
  83. $(function () {
  84. GetBudgetInfo()
  85. InitFileUpload()
  86. })
  87. function InitFileUpload(){
  88. const id = "#modal";
  89. const dropzone = document.querySelector(id);
  90. // set the preview element template
  91. const previewNode = dropzone.querySelector(".dropzone-item");
  92. previewNode.id = "";
  93. const previewTemplate = previewNode.parentNode.innerHTML;
  94. previewNode.parentNode.removeChild(previewNode);
  95. _fileUploadDropzone = new Dropzone(id, {
  96. url:"/",
  97. parallelUploads: 10,
  98. previewTemplate: previewTemplate,
  99. autoProcessQueue: false, //关闭自动上传功能
  100. maxFiles: 5,
  101. maxFilesize: 10, // MB
  102. previewsContainer: id + " .dropzone-items", //
  103. clickable: id + " .dropzone-select", //
  104. acceptedFiles: '.csv,.xls,.xlsx',
  105. accept: function(file, done) {
  106. console.log('DONE', file, done)
  107. if(file.type.includes('csv') || file.type.includes('.xls') || file.type.includes('sheet')){
  108. done()
  109. }else{
  110. done('文件类型非法,只允许.csv,.xls,.xlsx文件')
  111. }
  112. },
  113. dictInvalidFileType: '文件类型非法,只允许.csv,.xls,.xlsx文件',
  114. // dictRemoveFileConfirmation: '确定移除文件吗?',
  115. dictFileTooBig: '文件[{{filesize}}M]过大,最大允许{{maxFilesize}}M。',
  116. dictMaxFilesExceeded: '最多只能上传5个,每个文件不超过10M',
  117. });
  118. _fileUploadDropzone.on("addedfile", function (file) {
  119. const dropzoneItems = dropzone.querySelectorAll('.dropzone-item');
  120. dropzoneItems.forEach(dropzoneItem => {
  121. dropzoneItem.style.display = '';
  122. });
  123. if(_fileUploadDropzone.getAcceptedFiles().findIndex(item=>item.name===file.name)>=0){
  124. MsgWarning('文件已存在')
  125. _fileUploadDropzone.removeFile(file);
  126. }
  127. });
  128. // _fileUploadDropzone.on("removedfile", function (file) {
  129. // _files = _files.filter(item=>item.name!==file.name)
  130. // console.log('removedfile', file,_files)
  131. // })
  132. }
  133. function GetBudgetInfo() {
  134. IwbAjax_1({
  135. url: `/api/project/budget/${project_id}`,
  136. success: function (res) {
  137. if (res.success) {
  138. RenderTabs(res.data)
  139. }else{
  140. console.error(res.message)
  141. }
  142. },
  143. })
  144. }
  145. function RenderTabs(data){
  146. console.log('RenderTabs', data)
  147. let str1 = '',
  148. str2 = ''
  149. if(data && data.length){
  150. for (let i = 0; i < data.length; i++) {
  151. const item = data[i]
  152. str1 += nav_tab_template.format(item.budget_id, item.budget_code)
  153. const tableStr = table_template.format(item.budget_id)
  154. const tabContent = tab_content_template.format(item.budget_id, tableStr)
  155. // console.log('TAB_CONTENT', tabContent)
  156. str2 += tabContent
  157. }
  158. }
  159. $('#nav_tab').html(str1)
  160. const h= $('.app-main .app-container').height() - $('#nav_tab').height() - $('#breadcrumb_header').height()
  161. $('#tab_content').html(str2).height(h)
  162. const $tab = $('#nav_tab li button[data-bs-toggle="tab"]')
  163. $tab.on('shown.bs.tab',(e)=>{
  164. console.log('TAB', e)
  165. const tab_id = $(e.target).data('id')
  166. GetBudgetItems(tab_id)
  167. })
  168. const firstTab = new bootstrap.Tab($tab.eq(0))
  169. firstTab.show()
  170. }
  171. function GetBudgetItems(id) {
  172. const $tree = $(`#js-tree_${id}`)
  173. // console.log('GetBudgetItems', id,$tree)
  174. const opt = {
  175. core: {
  176. themes: {
  177. responsive: false,
  178. },
  179. check_callback: true,
  180. data: function (node, callback) {
  181. // console.log('TREE_NODE', node)
  182. IwbAjax_1({
  183. url: `/api/project/budget-item/${id}/${project_id}?c=${node?.data?.item_code || ''}`,
  184. success: res => {
  185. if (res.success) {
  186. console.log('TREE', res.data)
  187. callback(res.data)
  188. } else {
  189. console.error(res.message)
  190. }
  191. },
  192. })
  193. },
  194. },
  195. types: {
  196. default: {
  197. icon: 'ki-outline ki-folder text-primary',
  198. },
  199. file: {
  200. icon: 'ki-outline ki-file text-primary',
  201. },
  202. },
  203. plugins: ['dnd', 'types'],
  204. }
  205. // $tree.jstree('destroy')
  206. $tree.on('loaded.jstree', function(e, data){
  207. // console.log('TREE_LOADED', e, data)
  208. const inst = data.instance;
  209. const obj = inst.get_node(e.target.firstChild.firstChild.firstChild);
  210. inst.select_node(obj);
  211. })
  212. $tree.on('select_node.jstree', function (e, data) {
  213. console.log('TREE_SELECTED', e, data)
  214. RenderTabCondent(data.node?.data)
  215. })
  216. $tree.jstree(opt)
  217. }
  218. function RenderTabCondent(data) {
  219. // console.log('RenderTabCondent', data)
  220. const $tableBox = $(`#table_box_${data.budget_id}`),
  221. $table = $(`#table_${data.budget_id}`)
  222. const title = data.chapter ?`${data.chapter}、${data.project_name}`: data.section ?`${data.section}.${data.project_name}`: data.project_name
  223. $tableBox.find('input[name="budget_id"]').val(data.budget_id);
  224. $tableBox.find('input[name="project_id"]').val(project_id);
  225. $tableBox.find('input[name="item_id"]').val(data.item_id);
  226. $tableBox.find('input[name="item_code"]').val(data.item_code);
  227. $tableBox.find('[name="table_radio"]').prop("disabled",false).off('change.iwb')
  228. $tableBox.find('[name="table_radio"]').on('change.iwb',function(){
  229. const val = $(this).val()
  230. if (val === 'quota') {
  231. _quotaTable($table,data)
  232. } else {
  233. _taskTable($table,data)
  234. }
  235. })
  236. if(data.children_count>0||data.chapter){
  237. $tableBox.find('.table-title .title').text(title)
  238. $tableBox.find('.table-title .badge').text('任务列表').removeClass('badge-success').addClass('badge-primary')
  239. $tableBox.find('#task_radio').prop("checked",true)
  240. _taskTable($table,data)
  241. } else {
  242. $tableBox.find('.table-title .title').text(title)
  243. $tableBox.find('.table-title .badge').text('定额输入明细').removeClass('badge-primary').addClass('badge-success')
  244. $tableBox.find('#task_radio').prop("disabled",true)
  245. $tableBox.find('#quota_radio').prop("checked",true)
  246. _quotaTable($table,data)
  247. }
  248. $tableBox.show()
  249. function _taskTable($table,data){
  250. $tableBox.find('[name="collect_status"]').show()
  251. $tableBox.find('#quota_add_btn').hide()
  252. $tableBox.find('#task_add_btn').show()
  253. IwbTable($table, {
  254. url: `/api/task/list/${data.budget_id}/${project_id}/${data.item_code}`,
  255. columns: [
  256. {
  257. title: '任务编号',
  258. data: 'id',
  259. width: '100px',
  260. },
  261. {
  262. title: '任务名称',
  263. data: 'task_name',
  264. width: '240px',
  265. },
  266. {
  267. title: '文件数据',
  268. data: 'file_data',
  269. width: 'auto',
  270. render: (row) => {
  271. let str = ``
  272. const file_paths = row.file_path ? row.file_path.split(',') : []
  273. if(file_paths.length){
  274. for (let i = 0; i < file_paths.length; i++) {
  275. const path = file_paths[i]
  276. const names = path.split('/')
  277. const file_name = names[names.length - 1]
  278. str += `<a href="#" onclick="DownloadFile('/api/task/download?filename=${encodeURIComponent(path)}','${file_name}')" class="link link-info px-2">${file_name}</a>`
  279. }
  280. }else{
  281. str ="-"
  282. }
  283. return str
  284. }
  285. },
  286. {
  287. title: '任务状态',
  288. data: 'task_status',
  289. width: '220px',
  290. render: (row) => {
  291. let str = ``
  292. if (row.collect_status === 0) {
  293. str += `<span class="badge badge-light-primary">未采集</span>`
  294. } else if (row.collect_status === 1){
  295. str += `<span class="badge badge-light-warning">采集中</span>`
  296. } else if (row.collect_status === 2){
  297. str += `<span class="badge badge-light-success">采集完成</span>`
  298. if (row.process_status === 0) {
  299. str += `<span class="badge badge-light-primary ms-3">未处理</span>`
  300. } else if (row.process_status === 1){
  301. str += `<span class="badge badge-light-warning ms-3">处理中</span>`
  302. } else if (row.process_status === 2){
  303. str += `<span class="badge badge-light-success ms-3">处理完成</span>`
  304. if (row.send_status === 0) {
  305. str += `<span class="badge badge-light-primary ms-3">未发送</span>`
  306. } else if (row.send_status === 1){
  307. str += `<span class="badge badge-light-warning ms-3">发送中</span>`
  308. } else if (row.send_status === 2){
  309. str += `<span class="badge badge-light-success ms-3">发送完成</span>`
  310. } else if (row.send_status === 3){
  311. str += `<span class="badge badge-light-danger ms-3">发送失败</span>`
  312. }
  313. } else if (row.process_status === 3){
  314. str += `<span class="badge badge-light-danger ms-3">处理失败</span>`
  315. }
  316. } else if (row.collect_status === 3){
  317. str += `<span class="badge badge-light-danger">采集失败</span>`
  318. }
  319. return str
  320. }
  321. },
  322. {
  323. title: '操作',
  324. data: 'id',
  325. width: '200px',
  326. render: (row) => {
  327. let str = ``
  328. if (row.collect_status === 0) {
  329. str += `<button type="button" class="btn btn-icon btn-sm btn-light-primary" data-bs-toggle="tooltip" data-bs-placement="top" title="开始任务" onclick="StartCollectTask(${row.id}, ${data.budget_id})"><i class="ki-duotone ki-add-notepad fs-1"><span class="path1"></span><span class="path2"></span><span class="path3"></span><span class="path4"></span></i></button>`
  330. } else if (row.collect_status === 2) {
  331. str += `<button type="button" class="btn btn-icon btn-sm btn-light-warning" data-bs-toggle="tooltip" data-bs-placement="top" title="重新采集" onclick="ReStartCollectTask(${row.id}, ${data.budget_id})"><i class="ki-duotone ki-add-notepad fs-1"><span class="path1"></span><span class="path2"></span><span class="path3"></span><span class="path4"></span></i></button>`
  332. if (row.process_status === 0) {
  333. str += `<button type="button" class="btn btn-icon btn-sm btn-light-primary" data-bs-toggle="tooltip" data-bs-placement="top" title="开始处理" onclick="StartProcessTask(${row.id}, ${data.budget_id})"><i class="ki-duotone ki-book-square fs-1"><span class="path1"></span><span class="path2"></span><span class="path3"></span></i></button>`
  334. } else if (row.process_status === 2) {
  335. str += `<button type="button" class="btn btn-icon btn-sm btn-light-warning" data-bs-toggle="tooltip" data-bs-placement="top" title="重新处理" onclick="ReStartProcessTask(${row.id}, ${data.budget_id})"><i class="ki-duotone ki-book-square fs-1"><span class="path1"></span><span class="path2"></span><span class="path3"></span></i></button>`
  336. if (row.send_status === 0) {
  337. str += `<button type="button" class="btn btn-icon btn-sm btn-light-primary" data-bs-toggle="tooltip" data-bs-placement="top" title="开始发送" onclick="StartSendTask(${row.id}, ${data.budget_id})"><i class="ki-duotone ki-send fs-1"><span class="path1"></span><span class="path2"></span></i></button>`
  338. } else if (row.send_status === 2) {
  339. str += `<button type="button" class="btn btn-icon btn-sm btn-light-warning" data-bs-toggle="tooltip" data-bs-placement="top" title="重新发送" onclick="ReStartSendTask(${row.id}, ${data.budget_id})"><i class="ki-duotone ki-send fs-1"><span class="path1"></span><span class="path2"></span></i></button>`
  340. } else if (row.send_status === 3) {
  341. str += `<button type="button" class="btn btn-icon btn-sm btn-light-danger" data-bs-toggle="tooltip" data-bs-placement="top" title="重新发送" onclick="ReStartSendTask(${row.id}, ${data.budget_id})"><i class="ki-duotone ki-send fs-1"><span class="path1"></span><span class="path2"></span></i></button>`
  342. }
  343. } else if (row.process_status === 3) {
  344. str += `<button type="button" class="btn btn-icon btn-sm btn-light-danger" data-bs-toggle="tooltip" data-bs-placement="top" title="重新处理" onclick="ReStartProcessTask(${row.id}, ${data.budget_id})"><i class="ki-duotone ki-book-square fs-1"><span class="path1"></span><span class="path2"></span><span class="path3"></span></i></button>`
  345. }
  346. } else if (row.collect_status === 3) {
  347. str += `<button type="button" class="btn btn-icon btn-sm btn-light-danger" data-bs-toggle="tooltip" data-bs-placement="top" title="重新采集" onclick="ReStartCollectTask(${row.id}, ${data.budget_id})"><i class="ki-duotone ki-add-notepad fs-1"><span class="path1"></span><span class="path2"></span><span class="path3"></span><span class="path4"></span></i></button>`
  348. }
  349. str+=`<button type="button" class="btn btn-icon btn-sm btn-light-primary" data-bs-toggle="tooltip" data-bs-placement="top" title="编辑" onclick="Edit(${row.id})"><i class="ki-duotone ki-message-edit fs-1"><span class="path1"></span><span class="path2"></span></i></button>`
  350. str+=`<button type="button" class="btn btn-icon btn-sm btn-light-danger" data-bs-toggle="tooltip" data-bs-placement="top" title="删除" onclick="Delete(${row.id})"><i class="ki-duotone ki-trash-square fs-1"><span class="path1"></span><span class="path2"></span><span class="path3"></span><span class="path4"></span></i></button>`
  351. return str
  352. }
  353. },
  354. ]
  355. }, true)
  356. }
  357. function _quotaTable($table,data){
  358. $tableBox.find('[name="collect_status"]').val('').hide()
  359. $tableBox.find('#task_add_btn').hide()
  360. $tableBox.find('#quota_add_btn').show()
  361. IwbTable($table,{
  362. url:`/api/quota/list/${data.budget_id}/${project_id}/${data.item_code}`,
  363. columns: [
  364. {
  365. title: '序号',
  366. data: 'id',
  367. width: '100px',
  368. },
  369. {
  370. title: '工程或费用项目名称',
  371. data: 'project_name',
  372. width: 'auto',
  373. },
  374. {
  375. title: '工程数量',
  376. data: 'project_quantity',
  377. width: '100px',
  378. },
  379. {
  380. title: '单位',
  381. data: 'unit',
  382. width: '100px',
  383. },
  384. {
  385. title: '定额编号',
  386. data: 'quota_code',
  387. width: '100px',
  388. },
  389. {
  390. title: '状态',
  391. data: 'status',
  392. width: '150px',
  393. render: (row) => {
  394. let str=''
  395. if(row.process_status === 0){
  396. str+= `<span class="badge badge-primary">未处理</span>`
  397. }else if (row.process_status === 1){
  398. str+= `<span class="badge badge-warning">处理中</span>`
  399. }else if (row.process_status === 2){
  400. str+= `<span class="badge badge-success">已处理</span>`
  401. }else if (row.process_status === 3){
  402. str+= `<span class="badge badge-danger">处理失败</span>`
  403. }
  404. if(row.send_status === 0){
  405. str+= `<span class="badge badge-primary ms-3">未发送</span>`
  406. }else if (row.send_status === 1){
  407. str+= `<span class="badge badge-warning ms-3">发送中</span>`
  408. }else if (row.send_status === 2){
  409. str+= `<span class="badge badge-success ms-3">已发送</span>`
  410. }else if (row.send_status === 3){
  411. str+= `<span class="badge badge-danger ms-3">发送失败</span>`
  412. }
  413. return str
  414. }
  415. },
  416. {
  417. title: '操作',
  418. data: 'id',
  419. width: '160px',
  420. render: (row) => {
  421. let str=''
  422. if (row.process_status === 0) {
  423. str += `<button type="button" class="btn btn-icon btn-sm btn-light-primary" data-bs-toggle="tooltip" data-bs-placement="top" title="开始处理" onclick="StartProcessQuota(${row.id}, ${data.budget_id})"><i class="ki-duotone ki-book-square fs-1"><span class="path1"></span><span class="path2"></span><span class="path3"></span></i></button>`
  424. } else if (row.process_status === 2) {
  425. str += `<button type="button" class="btn btn-icon btn-sm btn-light-warning" data-bs-toggle="tooltip" data-bs-placement="top" title="重新处理" onclick="ReStartProcessQuota(${row.id}, ${data.budget_id})"><i class="ki-duotone ki-book-square fs-1"><span class="path1"></span><span class="path2"></span><span class="path3"></span></i></button>`
  426. if (row.send_status === 0) {
  427. str += `<button type="button" class="btn btn-icon btn-sm btn-light-primary" data-bs-toggle="tooltip" data-bs-placement="top" title="开始发送" onclick="StartSendQuota(${row.id}, ${data.budget_id})"><i class="ki-duotone ki-send fs-1"><span class="path1"></span><span class="path2"></span></i></button>`
  428. } else if (row.send_status === 2) {
  429. str += `<button type="button" class="btn btn-icon btn-sm btn-light-warning" data-bs-toggle="tooltip" data-bs-placement="top" title="重新发送" onclick="ReStartSendQuota(${row.id}, ${data.budget_id})"><i class="ki-duotone ki-send fs-1"><span class="path1"></span><span class="path2"></span></i></button>`
  430. } else if (row.send_status === 3) {
  431. str += `<button type="button" class="btn btn-icon btn-sm btn-light-danger" data-bs-toggle="tooltip" data-bs-placement="top" title="重新发送" onclick="ReStartSendQuota(${row.id}, ${data.budget_id})"><i class="ki-duotone ki-send fs-1"><span class="path1"></span><span class="path2"></span></i></button>`
  432. }
  433. } else if (row.process_status === 3) {
  434. str += `<button type="button" class="btn btn-icon btn-sm btn-light-danger" data-bs-toggle="tooltip" data-bs-placement="top" title="重新处理" onclick="ReStartProcessQuota(${row.id}, ${data.budget_id})"><i class="ki-duotone ki-book-square fs-1"><span class="path1"></span><span class="path2"></span><span class="path3"></span></i></button>`
  435. }
  436. str+=`<button type="button" class="btn btn-icon btn-sm btn-light-primary" data-bs-toggle="tooltip" data-bs-placement="top" title="编辑" onclick="Edit_Quota(${row.id})"><i class="ki-duotone ki-message-edit fs-1"><span class="path1"></span><span class="path2"></span></i></button>`
  437. str+=`<button type="button" class="btn btn-icon btn-sm btn-light-danger" data-bs-toggle="tooltip" data-bs-placement="top" title="删除" onclick="Delete_Quota(${row.id})"><i class="ki-duotone ki-trash-square fs-1"><span class="path1"></span><span class="path2"></span><span class="path3"></span><span class="path4"></span></i></button>`
  438. return str
  439. }
  440. },
  441. ]
  442. }, true)
  443. }
  444. }
  445. function Add(budget_id) {
  446. _fileUploadDropzone.removeAllFiles()
  447. AddModal($modal, () => {
  448. $modal.find('[name="task_id"]').val('0');
  449. $modal.find('#delete_file_box').hide();
  450. SetBudgetData($modal,budget_id)
  451. })
  452. }
  453. function Edit(id) {
  454. _fileUploadDropzone.removeAllFiles()
  455. EditModal($modal,()=>{
  456. IwbAjax_1({
  457. url:`/api/task/get/${id}`,
  458. success:res=>{
  459. if(!res.success){
  460. console.error(res.message)
  461. return
  462. }
  463. const data = res.data
  464. $modal.find('#delete_file_box').show();
  465. // SetBudgetData(budget_id)
  466. $modal.find('[name="task_id"]').val(data.id);
  467. $modal.find('[name="budget_id"]').val(data.budget_id);
  468. $modal.find('[name="project_id"]').val(data.project_id);
  469. $modal.find('[name="item_id"]').val(data.item_id);
  470. $modal.find('[name="item_code"]').val(data.item_code);
  471. $modal.find('[name="task_name"]').val(data.task_name);
  472. $modal.find('[name="task_desc"]').val(data.task_desc);
  473. }
  474. })
  475. })
  476. }
  477. function SetBudgetData($el,budget_id){
  478. const $tableBox = $(`#table_box_${budget_id}`)
  479. $el.find('[name="budget_id"').val(budget_id);
  480. $el.find('[name="project_id"]').val($tableBox.find('input[name="project_id"]').val());
  481. $el.find('[name="item_id"]').val($tableBox.find('input[name="item_id"]').val());
  482. $el.find('[name="item_code"]').val($tableBox.find('input[name="item_code"]').val());
  483. }
  484. function SaveProject() {
  485. const
  486. formData = new FormData(),
  487. budget_id = $modal.find('[name="budget_id"]').val(),
  488. item_id = $modal.find('[name="item_id"]').val(),
  489. item_code = $modal.find('[name="item_code"]').val(),
  490. project_id = $modal.find('[name="project_id"]').val(),
  491. task_id= $modal.find('[name="task_id"]').val(),
  492. task_name = $modal.find('[name="task_name"]').val(),
  493. task_desc = $modal.find('[name="task_desc"]').val(),
  494. delete_file = $modal.find('[name="delete_file"]').checked ? 'true':'false',
  495. files = _fileUploadDropzone.getAcceptedFiles();
  496. // console.log("FILES",files)
  497. if(files.length>0){
  498. files.forEach((file) => {
  499. formData.append('files', file)
  500. })
  501. }
  502. formData.append('budget_id', budget_id)
  503. formData.append('item_id', item_id)
  504. formData.append('item_code', item_code)
  505. formData.append('project_id', project_id)
  506. formData.append('task_id', task_id)
  507. formData.append('task_name', task_name)
  508. formData.append('task_desc', task_desc)
  509. formData.append('delete_old', delete_file)
  510. IwbAjax({
  511. url:`/api/task/save/${task_id}`,
  512. headers:{},
  513. body:formData,
  514. modal:"#modal",
  515. table:`#table_${budget_id}`
  516. })
  517. }
  518. function Delete(id,budget_id){
  519. ConfirmUrl('确定删除吗?',`/api/task/delete/${id}`,`#table_${budget_id}`)
  520. }
  521. function StartCollectTask(id,budget_id){
  522. ConfirmUrl('确定开始采集吗?',`/api/task/start_collect/${id}`,`#table_${budget_id}`)
  523. }
  524. function ReStartCollectTask(id,budget_id){
  525. ConfirmUrl('确定重新开始采集吗?',`/api/task/start_collect/${id}`,`#table_${budget_id}`)
  526. }
  527. function StartProcessTask(id,budget_id){
  528. ConfirmUrl('确定开始处理吗?',`/api/task/start_process/${id}`,`#table_${budget_id}`)
  529. }
  530. function ReStartProcessTask(id,budget_id){
  531. ConfirmUrl('确定重新开始处理吗?',`/api/task/start_process/${id}`,`#table_${budget_id}`)
  532. }
  533. function StartSendTask(id,budget_id){
  534. ConfirmUrl('确定开始发送吗?',`/api/task/start_send/${id}`,`#table_${budget_id}`)
  535. }
  536. function ReStartSendTask(id,budget_id){
  537. ConfirmUrl('确定重新开始发送吗?',`/api/task/start_send/${id}`,`#table_${budget_id}`)
  538. }
  539. function Add_Quota(budget_id,) {
  540. AddModal($modalQuota, () => {
  541. $modalQuota.find('[name="quota_id"]').val('0');
  542. $modalQuota.find('[name="task_id"]').val('0');
  543. SetBudgetData($modalQuota, budget_id)
  544. })
  545. }
  546. function Edit_Quota(id) {
  547. EditModal($modalQuota,()=>{
  548. IwbAjax_1({
  549. url:`/api/quota/get/${id}`,
  550. success:res=>{
  551. if(!res.success){
  552. console.error(res.message)
  553. return
  554. }
  555. const data = res.data
  556. // SetBudgetData(budget_id)
  557. $modalQuota.find('[name="quota_id"]').val(data.id);
  558. $modalQuota.find('[name="task_id"]').val(data.task_id);
  559. $modalQuota.find('[name="budget_id"]').val(data.budget_id);
  560. $modalQuota.find('[name="project_id"]').val(data.project_id);
  561. $modalQuota.find('[name="item_id"]').val(data.item_id);
  562. $modalQuota.find('[name="item_code"]').val(data.item_code);
  563. $modalQuota.find('[name="project_name"]').val(data.project_name);
  564. $modalQuota.find('[name="project_quantity"]').val(data.project_quantity);
  565. $modalQuota.find('[name="unit"]').val(data.unit);
  566. $modalQuota.find('[name="quota_code"]').val(data.quota_code);
  567. }
  568. })
  569. })
  570. }
  571. function SaveQuota(){
  572. const quota_id = $modalQuota.find('[name="quota_id"]').val(),
  573. task_id = $modalQuota.find('[name="task_id"]').val(),
  574. budget_id = $modalQuota.find('[name="budget_id"]').val(),
  575. project_id = $modalQuota.find('[name="project_id"]').val(),
  576. item_id = $modalQuota.find('[name="item_id"]').val(),
  577. item_code = $modalQuota.find('[name="item_code"]').val(),
  578. project_name = $modalQuota.find('[name="project_name"]').val(),
  579. project_quantity = $modalQuota.find('[name="project_quantity"]').val(),
  580. unit = $modalQuota.find('[name="unit"]').val(),
  581. quota_code = $modalQuota.find('[name="quota_code"]').val()
  582. IwbAjax({
  583. url:`/api/quota/save`,
  584. data:{
  585. id: quota_id,
  586. task_id,
  587. budget_id,
  588. project_id,
  589. item_id,
  590. item_code,
  591. project_name,
  592. project_quantity,
  593. unit,
  594. quota_code
  595. },
  596. modal:$modalQuota,
  597. table:`#table_${budget_id}`
  598. })
  599. }
  600. function Delete_Quota(id,budget_id){
  601. ConfirmUrl('确定删除吗?',`/api/quota/delete/${id}`,`#table_${budget_id}`)
  602. }
  603. function StartProcessQuota(id,budget_id){
  604. ConfirmUrl('确定开始处理吗?',`/api/quota/start_process/${id}`,`#table_${budget_id}`)
  605. }
  606. function ReStartProcessQuota(id,budget_id){
  607. ConfirmUrl('确定重新开始处理吗?',`/api/quota/start_process/${id}`,`#table_${budget_id}`)
  608. }
  609. function StartSendQuota(id,budget_id){
  610. ConfirmUrl('确定开始发送吗?',`/api/quota/start_send/${id}`,`#table_${budget_id}`)
  611. }
  612. function ReStartSendQuota(id,budget_id){
  613. ConfirmUrl('确定重新开始发送吗?',`/api/quota/start_send/${id}`,`#table_${budget_id}`)
  614. }