budget_info.js 30 KB

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