123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445 |
- const task_modal_template = `
- <div class="modal fade" id="modal" tabindex="-1" aria-hidden="true">
- <div class="modal-dialog modal-dialog-centered">
- <div class="modal-content rounded">
- <div class="modal-header">
- <h3 class="modal-title"><span class="prefix"></span>任务</h3>
- <div class="btn btn-sm btn-icon btn-active-color-primary" data-bs-dismiss="modal">
- <i class="ki-duotone ki-cross fs-1">
- <span class="path1"></span>
- <span class="path2"></span>
- </i>
- </div>
- </div>
- <div class="modal-body">
- <form>
- <div class="form-group">
- <!-- <input type="hidden" name="budget_id" value="">-->
- <input type="hidden" name="project_id" value="">
- <input type="hidden" name="item_id" value="">
- <input type="hidden" name="item_code" value="">
- <input type="hidden" name="task_id" value="">
- <div class="fv-row form-group mb-3">
- <label for="task_name" class="form-label required">任务名称</label>
- <input type="text" class="form-control" name="task_name" id="task_name" placeholder="请输入任务名称" required />
- </div>
- <div class="fv-row form-group mb-3">
- <label for="budget_id" class="form-label">概算单元</label>
- <select class="form-select" name="budget_id" id="budget_id"></select>
- </div>
- <div class="fv-row form-group mb-3">
- <label for="task_sort" class="form-label">任务排序</label>
- <input type="number" class="form-control" name="task_sort" id="task_sort" placeholder="请输入任务排序"/>
- </div>
- <div class="fv-row form-group mb-3">
- <label for="task_desc" class="form-label">任务描述</label>
- <textarea type="number" class="form-control" name="task_desc" id="task_desc" placeholder="请输入任务描述"></textarea>
- </div>
- <!-- <div class="form-check mb-3" id="delete_file_box">-->
- <!-- <input class="form-check-input" type="checkbox" value="" id="delete_file" name="delete_file"/>-->
- <!-- <label class="form-check-label ms-5 text-primary " for="delete_file">-->
- <!-- 删除原数据文件-->
- <!-- </label>-->
- <!-- </div>-->
- <div class="fv-row">
- <div id="file_upload_dropzone">
- <div class="dropzone">
- <div class="dz-message dropzone-select">
- <i class="ki-duotone ki-file-up fs-3x text-primary"><span class="path1"></span><span class="path2"></span></i>
- <div class="ms-4">
- <h3 class="fs-5 fw-bold text-gray-900 mb-1">将文件拖放到此处或单击上传。</h3>
- <span class="fs-7 fw-semibold text-gray-500">最多可上传 5 个文件,文件最大10M</span>
- </div>
- </div>
- </div>
- <div class="dropzone dropzone-queue">
- <div class="dropzone-items wm-200px">
- <div class="dropzone-item" style="display:none">
- <div class="dropzone-file">
- <div class="dropzone-filename" title="some_image_file_name.jpg">
- <span data-dz-name>some_image_file_name.jpg</span>
- <strong>(<span data-dz-size>340kb</span>)</strong>
- </div>
- <div class="dropzone-error" data-dz-errormessage></div>
- </div>
- <div class="dropzone-toolbar">
- <span class="dropzone-delete" data-dz-remove><i class="bi bi-x fs-1"></i></span>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </form>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-light" data-bs-dismiss="modal">取消</button>
- <button type="button" class="btn btn-light-success" onclick="SaveProject(true)">提交</button>
- <button type="button" class="btn btn-primary" onclick="SaveProject()">保存草稿</button>
- </div>
- </div>
- </div>
- </div>`
- $('.app-main .app-container').append(task_modal_template)
- const table_add_task_btn_template = `<button type="button" class="task_add_btn btn btn-primary btn-sm" onclick="Add('{0}')">添加任务</button>`
- const table = '#table',
- $modal = $('#modal')
- $modal.find('#budget_id').html($('#budget_id_options').html())
- $(function () {
- InitFileUpload()
- })
- let _fileUploadDropzone = null;
- function InitFileUpload() {
- const id = "#modal";
- const dropzone = document.querySelector(id);
- // set the preview element template
- const previewNode = dropzone.querySelector(".dropzone-item");
- previewNode.id = "";
- const previewTemplate = previewNode.parentNode.innerHTML;
- previewNode.parentNode.removeChild(previewNode);
- _fileUploadDropzone = new Dropzone(id, {
- url: "/",
- parallelUploads: 10,
- previewTemplate: previewTemplate,
- autoProcessQueue: false, //关闭自动上传功能
- maxFiles: 5,
- maxFilesize: 10, // MB
- previewsContainer: id + " .dropzone-items", //
- clickable: id + " .dropzone-select", //
- acceptedFiles: '.csv,.xls,.xlsx',
- accept: function (file, done) {
- console.log('DONE', file, done)
- if (file.type.includes('csv') || file.type.includes('.xls') || file.type.includes('sheet')) {
- done()
- } else {
- done('文件类型非法,只允许.csv,.xls,.xlsx文件')
- }
- },
- dictInvalidFileType: '文件类型非法,只允许.csv,.xls,.xlsx文件',
- // dictRemoveFileConfirmation: '确定移除文件吗?',
- dictFileTooBig: '文件[{{filesize}}M]过大,最大允许{{maxFilesize}}M。',
- dictMaxFilesExceeded: '最多只能上传5个,每个文件不超过10M',
- });
- _fileUploadDropzone.on("addedfile", function (file) {
- const dropzoneItems = dropzone.querySelectorAll('.dropzone-item');
- dropzoneItems.forEach(dropzoneItem => {
- dropzoneItem.style.display = '';
- });
- if (_fileUploadDropzone.getAcceptedFiles().findIndex(item => item.name === file.name) >= 0) {
- MsgWarning('文件已存在')
- _fileUploadDropzone.removeFile(file);
- }
- });
- // _fileUploadDropzone.on("removedfile", function (file) {
- // _files = _files.filter(item=>item.name!==file.name)
- // console.log('removedfile', file,_files)
- // })
- }
- function RenderRightBox_Custom(data) {
- $quotaBox.data("table-url", `/api/quota/list`)
- $('.table_radio_box .form-check').hide()
- $rightBoxHeader.find('[name="table_radio"]').prop("disabled", false).off('change.iwb')
- $rightBoxHeader.find('[name="table_radio"]').on('change.iwb', function () {
- const val = $(this).val()
- if (val === 'quota') {
- $taskBox.hide()
- QuotaNavTab(data)
- } else {
- _taskTable(data)
- }
- })
- if (data.children_count > 0 || data.chapter) {
- _renderTask(data)
- } else {
- $rightBoxHeader.find('.badge').text('定额输入明细').removeClass('badge-primary').addClass('badge-success')
- $rightBoxHeader.find('#task_radio').prop("disabled", true)
- $rightBoxHeader.find('#quota_radio').prop("checked", true)
- QuotaNavTab(data)
- }
- function _renderTask(data) {
- $rightBoxHeader.find('.badge').text('任务列表').removeClass('badge-success').addClass('badge-primary')
- $rightBoxHeader.find('#task_radio').prop("checked", true)
- const budget_id = 0
- $taskBox.html(table_template.format(budget_id, table_add_task_btn_template.format(budget_id), table_run_select_template))
- _taskTable(data)
- }
- function _taskTable(data) {
- $quotaBox.hide()
- const $table = $taskBox.find('.table')
- IwbTable($table, {
- url: `/api/task/list/${project_id}/${data.item_code}`,
- columns: [
- {
- title: '任务编号',
- data: 'id',
- width: '100px',
- },
- {
- title: '任务名称',
- data: 'task_name',
- width: '240px',
- },
- {
- title: '任务排序',
- data: 'task_sort',
- width: '100px',
- },
- {
- title: '概算单元',
- data: 'budget_id',
- width: '130px',
- render: (row) => {
- const budget_name = $modal.find(`[name="budget_id"] option[value='${row.budget_id}']`)
- return budget_name.length ? budget_name.text() : '-'
- }
- },
- {
- title: '文件数据',
- data: 'file_data',
- width: 'auto',
- render: (row) => {
- let str = ``
- const file_paths = row.file_path ? row.file_path.split(',') : []
- if (file_paths.length) {
- for (let i = 0; i < file_paths.length; i++) {
- const path = file_paths[i] || ""
- if (!path) continue
- const names = path.split('/')
- const file_name = names[names.length - 1]
- str += `<a href="#" onclick="DownloadFile('/api/task/download?filename=${encodeURIComponent(path)}','${file_name}')" class="link link-info px-2">${file_name}</a>`
- }
- } else {
- str = "-"
- }
- return str
- }
- },
- {
- title: '任务状态',
- data: 'task_status',
- width: '180px',
- render: (row) => {
- let str = ``
- if (row.process_status === 0) {
- str += `<span class="badge badge-secondary">草稿</span>`
- } else if (row.process_status === 1) {
- str += `<span class="badge badge-light-primary">等待运行</span>`
- } else if (row.process_status === 2) {
- str += `<span class="badge badge-light-info">运行中</span>`
- // if (row.send_status === 0) {
- // str += `<span class="badge badge-light-primary ms-3">未发送</span>`
- // } else if (row.send_status === 1){
- // str += `<span class="badge badge-light-warning ms-3">发送中</span>`
- // } else if (row.send_status === 2){
- // str += `<span class="badge badge-light-success ms-3">发送完成</span>`
- // } else if (row.send_status === 3){
- // str += `<span class="badge badge-light-danger ms-3">发送失败</span>`
- // }
- // if (row.process_status === 0) {
- // str += `<span class="badge badge-light-primary ms-3">未处理</span>`
- // } else if (row.process_status === 1){
- // str += `<span class="badge badge-light-warning ms-3">处理中</span>`
- // } else if (row.process_status === 2){
- // str += `<span class="badge badge-light-success ms-3">处理完成</span>`
- //
- // } else if (row.process_status === 3){
- // str += `<span class="badge badge-light-danger ms-3">处理失败</span>`
- // }
- } else if (row.process_status === 200) {
- str += `<span class="badge badge-light-success">运行成功</span>`
- } else if (row.process_status === 4) {
- str += `<span class="badge badge-light-danger" data-bs-toggle="tooltip" data-bs-placement="top" title="${row.process_error}">运行失败</span>`
- } else if (row.process_status === 5) {
- str += `<span class="badge badge-warning">取消运行</span>`
- }
- return str
- }
- },
- {
- title: '操作',
- data: 'id',
- width: '160px',
- render: (row) => {
- let str = ``
- if (row.process_status === 0) {
- str += `<button type="button" class="btn btn-icon btn-sm btn-light-primary" data-bs-toggle="tooltip" data-bs-placement="top" title="开始任务" onclick="StarTask(${row.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>`
- } else if (row.process_status === 1 || row.process_status === 2) {
- str += `<button type="button" class="btn btn-icon btn-sm btn-light-danger" data-bs-toggle="tooltip" data-bs-placement="top" title="取消任务" onclick="CancelTask(${row.id})"><i class="ki-duotone ki-cross-square fs-1"><span class="path1"></span><span class="path2"></span></i></button>`
- } else if (row.process_status === 200) {
- // str += `<button type="button" class="btn btn-icon btn-sm btn-light-warning" data-bs-toggle="tooltip" data-bs-placement="top" title="重新运行" onclick="ReStarTask(${row.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>`
- // if (row.process_status === 0) {
- // 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})"><i class="ki-duotone ki-book-square fs-1"><span class="path1"></span><span class="path2"></span><span class="path3"></span></i></button>`
- // } else if (row.process_status === 2) {
- // 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})"><i class="ki-duotone ki-book-square fs-1"><span class="path1"></span><span class="path2"></span><span class="path3"></span></i></button>`
- //
- // } else if (row.process_status === 3) {
- // 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})"><i class="ki-duotone ki-book-square fs-1"><span class="path1"></span><span class="path2"></span><span class="path3"></span></i></button>`
- // } else if (row.process_status === 4) {
- // 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})"><i class="ki-duotone ki-book-square fs-1"><span class="path1"></span><span class="path2"></span><span class="path3"></span></i></button>`
- // }
- // if (row.send_status === 0) {
- // 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})"><i class="ki-duotone ki-send fs-1"><span class="path1"></span><span class="path2"></span></i></button>`
- // } else if (row.send_status === 2) {
- // 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})"><i class="ki-duotone ki-send fs-1"><span class="path1"></span><span class="path2"></span></i></button>`
- // } else if (row.send_status === 3) {
- // 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})"><i class="ki-duotone ki-send fs-1"><span class="path1"></span><span class="path2"></span></i></button>`
- // } else if (row.send_status === 4) {
- // 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})"><i class="ki-duotone ki-send fs-1"><span class="path1"></span><span class="path2"></span></i></button>`
- // }
- } else if (row.process_status === 4) {
- str += `<button type="button" class="btn btn-icon btn-sm btn-light-danger" data-bs-toggle="tooltip" data-bs-placement="top" title="重新运行" onclick="ReStarTask(${row.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>`
- } else if (row.process_status === 5) {
- str += `<button type="button" class="btn btn-icon btn-sm btn-light-info" data-bs-toggle="tooltip" data-bs-placement="top" title="重新运行" onclick="ReStarTask(${row.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>`
- }
- if (row.process_status === 0) {
- 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>`
- }
- 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>-->`
- if (row.process_status === 2 || row.process_status === 200) {
- str += `<button type="button" class="btn btn-icon btn-sm btn-light-primary" data-bs-toggle="tooltip" data-bs-placement="top" title="定额输入列表" onclick="GoTo('/quota_info/${project_id}/${row.id}',0)"><i class="ki-duotone ki-eye fs-1"><span class="path1"></span><span class="path2"></span><span class="path3"></span><span class="path4"></span></i></button>`
- }
- if (row.process_status !== 2 && row.process_status !== 1) {
- 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>`
- }
- return str
- }
- },
- ]
- }, true)
- $taskBox.find('.table-box').hide()
- $taskBox.show()
- }
- }
- function SetBudgetData($el) {
- const $tableBox = $(`#body_box .right-box`)
- $el.find('[name="project_id"]').val($tableBox.find('input[name="project_id"]').val());
- $el.find('[name="item_id"]').val($tableBox.find('input[name="item_id"]').val());
- $el.find('[name="item_code"]').val($tableBox.find('input[name="item_code"]').val());
- }
- function Add() {
- _fileUploadDropzone.removeAllFiles()
- AddModal($modal, () => {
- $modal.find('[name="task_id"]').val('0');
- $modal.find('[name="budget_id"]').val(0);
- $modal.find('[name="task_sort"]').val(0);
- $modal.find('#delete_file_box').hide();
- // $modal.find('[name="delete_file"]').prop('checked',false)
- SetBudgetData($modal)
- })
- }
- function Edit(id) {
- _fileUploadDropzone.removeAllFiles()
- EditModal($modal, () => {
- IwbAjax_1({
- url: `/api/task/get/${id}`,
- success: res => {
- if (!res.success) {
- console.error(res.message)
- return
- }
- const data = res.data
- // $modal.find('#delete_file_box').show();
- // SetBudgetData(budget_id)
- $modal.find('[name="task_id"]').val(data.id);
- $modal.find('[name="budget_id"]').val(data.budget_id);
- $modal.find('[name="project_id"]').val(data.project_id);
- $modal.find('[name="item_id"]').val(data.item_id);
- $modal.find('[name="item_code"]').val(data.item_code);
- $modal.find('[name="task_name"]').val(data.task_name);
- $modal.find('[name="task_desc"]').val(data.task_desc);
- $modal.find('[name="task_sort"]').val(data.task_sort);
- // $modal.find('[name="delete_file"]').prop('checked',false)
- }
- })
- })
- }
- function SaveProject(is_submit) {
- const
- formData = new FormData(),
- budget_id = $modal.find('[name="budget_id"]').val(),
- item_id = $modal.find('[name="item_id"]').val(),
- item_code = $modal.find('[name="item_code"]').val(),
- project_id = $modal.find('[name="project_id"]').val(),
- task_id = $modal.find('[name="task_id"]').val(),
- task_name = $modal.find('[name="task_name"]').val(),
- task_sort = $modal.find('[name="task_sort"]').val(),
- task_desc = $modal.find('[name="task_desc"]').val(),
- // delete_file = $modal.find('[name="delete_file"]').prop('checked')? 'true':'false',
- files = _fileUploadDropzone.getAcceptedFiles();
- // console.log("FILES",files)
- if (files && files.length > 0) {
- files.forEach((file) => {
- formData.append('files', file)
- })
- } else {
- MsgWarning('文件不能为空,请选择文件')
- return
- }
- formData.append('budget_id', budget_id)
- formData.append('item_id', item_id)
- formData.append('item_code', item_code)
- formData.append('project_id', project_id)
- formData.append('task_id', task_id)
- formData.append('task_name', task_name)
- formData.append('task_sort', task_sort)
- formData.append('task_desc', task_desc)
- // formData.append('delete_old', delete_file)
- if (is_submit) {
- formData.append('run_now', 'true')
- }
- IwbAjax({
- url: `/api/task/save/${task_id}`,
- headers: {},
- body: formData,
- modal: "#modal",
- table: `#table_0`
- })
- }
- function Delete(id) {
- ConfirmUrl('确定删除吗?', `/api/task/delete/${id}`, `#table_0`)
- }
- function StarTask(id) {
- ConfirmUrl('确定开始运行任务吗?', `/api/task/start_task/${id}`, `#table_0`)
- }
- function ReStarTask(id) {
- ConfirmUrl('确定重新开始运行任务吗?', `/api/task/start_task/${id}`, `#table_0`)
- }
- function CancelTask(id) {
- ConfirmUrl('确定取消运行任务吗?', `/api/task/cancel_task/${id}`, `#table_0`)
- }
- // function StartProcessTask(id){
- // ConfirmUrl('确定开始处理吗?',`/api/task/start_process/${id}`,`#table_0`)
- // }
- //
- // function ReStartProcessTask(id){
- // ConfirmUrl('确定重新开始处理吗?',`/api/task/start_process/${id}`,`#table_0`)
- // }
- // function StartSendTask(id){
- // ConfirmUrl('确定开始发送吗?',`/api/task/start_send/${id}`,`#table_0`)
- // }
- // function ReStartSendTask(id){
- // ConfirmUrl('确定重新开始发送吗?',`/api/task/start_send/${id}`,`#table_0`)
- // }
|