From 227320c29cb238a4dfafce4616db93902c006001 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=A3=95=E8=B4=A2?= Date: Wed, 9 Mar 2022 16:51:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/xm/core/xmTask/XmTaskMng.vue | 3 +- src/views/xm/core/xmTask/XmTaskMngBatch.vue | 668 ++------------------ 2 files changed, 62 insertions(+), 609 deletions(-) diff --git a/src/views/xm/core/xmTask/XmTaskMng.vue b/src/views/xm/core/xmTask/XmTaskMng.vue index d61797dd..f9adcd4b 100644 --- a/src/views/xm/core/xmTask/XmTaskMng.vue +++ b/src/views/xm/core/xmTask/XmTaskMng.vue @@ -366,8 +366,7 @@ @submit="afterEditSubmit" > - - + + + + + + @@ -314,10 +322,9 @@ import { } from "@/api/xm/core/xmTask"; import { mapGetters } from "vuex"; -import { sn } from "@/common/js/sequence"; - -import XmGantt from "../components/xm-gantt"; +import { sn } from "@/common/js/sequence"; import XmGroupSelect from "../xmGroup/XmGroupSelect.vue"; +import xmMenuSelect from '../xmMenu/XmMenuSelect'; export default { computed: { @@ -327,116 +334,24 @@ export default { }, currentProjectPhase() { return this.selProjectPhase; - }, - progress_disable() { - if ( - (this.isEmpty(this.editForm.preTaskid) || - this.editForm.prerate == "100") && - this.isEmpty(this.editForm.children) - ) { - return false; - } else { - return true; - } - }, + }, tasksTreeData() { let xmTasks = JSON.parse(JSON.stringify(this.xmTasks || [])); const tasksTreeData = treeTool.translateDataToTree( xmTasks, "parentTaskid", "id" - ); - //this.rowDrop(); + ); return tasksTreeData; }, - - taskBudgetData() { - var rows = this.xmTasks; - var surplusPhaseBudgetCostAt = - this.getFloatValue(this.projectPhase.phaseBudgetInnerUserAt) + - this.getFloatValue(this.projectPhase.phaseBudgetOutUserAt) + - this.getFloatValue(this.projectPhase.phaseBudgetNouserAt); - var surplusPhaseBudgetInnerUserAt = this.getFloatValue( - this.projectPhase.phaseBudgetInnerUserAt - ); - var surplusPhaseBudgetOutUserAt = this.getFloatValue( - this.projectPhase.phaseBudgetOutUserAt - ); - var surplusPhaseBudgetNouserAt = this.getFloatValue( - this.projectPhase.phaseBudgetNouserAt - ); - var surplusPhaseBudgetUserAt = - this.getFloatValue(this.projectPhase.phaseBudgetInnerUserAt) + - this.getFloatValue(this.projectPhase.phaseBudgetOutUserAt); - - var total = { - surplusPhaseBudgetCostAt: surplusPhaseBudgetCostAt, - surplusPhaseBudgetInnerUserAt: surplusPhaseBudgetInnerUserAt, - surplusPhaseBudgetOutUserAt: surplusPhaseBudgetOutUserAt, - surplusPhaseBudgetNouserAt: surplusPhaseBudgetNouserAt, - surplusPhaseBudgetUserAt: surplusPhaseBudgetUserAt, - - taskBudgetNouserAt: 0, - taskBudgetInnerUserAt: 0, - taskBudgetOutUserAt: 0, - taskBudgetUserAt: 0, - }; - //phaseBudgetHours:'',phaseBudgetStaffNu:'',ctime:'',phaseBudgetNouserAt:'',phaseBudgetInnerUserAt:'',phaseBudgetOutUserAt - rows.forEach((row2) => { - var row = row2; - if (this.valueChangeRows.length != 0) { - var changeRows = this.valueChangeRows.filter((i) => i.id == row2.id); - if (changeRows && changeRows.length > 0) { - row = changeRows[0]; - } - } - if(row.lvl<=1){ - var budgetCost = this.getFloatValue(row.budgetCost); - if (row.taskOut == "1") { - row.taskBudgetOutUserAt = budgetCost; - row.taskBudgetInnerUserAt = 0; - row.taskBudgetNouserAt = 0; - } else { - row.taskBudgetOutUserAt = 0; - row.taskBudgetInnerUserAt = budgetCost; - row.taskBudgetNouserAt = 0; - } - total.taskBudgetNouserAt = - total.taskBudgetNouserAt + row.taskBudgetNouserAt; - total.taskBudgetInnerUserAt = - total.taskBudgetInnerUserAt + row.taskBudgetInnerUserAt; - total.taskBudgetOutUserAt = - total.taskBudgetOutUserAt + row.taskBudgetOutUserAt; - } - - }); - total.taskBudgetUserAt = - total.taskBudgetInnerUserAt + total.taskBudgetOutUserAt; - total.surplusPhaseBudgetCostAt = - total.surplusPhaseBudgetCostAt - - total.taskBudgetNouserAt - - total.taskBudgetUserAt; - total.surplusPhaseBudgetInnerUserAt = - total.surplusPhaseBudgetInnerUserAt - total.taskBudgetInnerUserAt; - total.surplusPhaseBudgetOutUserAt = - total.surplusPhaseBudgetOutUserAt - total.taskBudgetOutUserAt; - total.surplusPhaseBudgetNouserAt = - total.surplusPhaseBudgetNouserAt - total.taskBudgetNouserAt; - total.surplusPhaseBudgetUserAt = - total.surplusPhaseBudgetUserAt - total.taskBudgetUserAt; - return total; - }, + }, - props: ["selProject", "selProjectPhase", "visible"], + props: ["selProject", "visible"], watch: { selProject: function (oval, val) { this.filters.selProject = this.selProject; //this.changeSelKey("all"); - }, - selProjectPhase: function (selProjectPhase) { - this.projectPhase = this.selProjectPhase; - //this.projectPhaseRowClick(selProjectPhase) - }, + }, visible: function (visible) { if (visible == true) { this.searchXmTasks(); @@ -558,8 +473,7 @@ export default { skillVisible: false, skillIds: [], - taskSkills: [], - projectPhase: null, + taskSkills: [], taskTemplateVisible: false, parentTask: null, projectInfoVisible: false, @@ -777,22 +691,7 @@ export default { isEmpty(str) { return str == null || "" == str; - }, - - onSelectedMenus(menus) { - if (menus == null || menus.length == 0) { - this.menuVisible = false; - return; - } - var menus2 = JSON.parse(JSON.stringify(menus)); - menus2.forEach((i) => { - i.id = i.menuId; - i.parentTaskid = i.pmenuId; - i.name = i.menuName; - }); - this.onTaskTemplatesSelected(menus2); - this.menuVisible = false; - }, + }, onTaskTemplatesSelected(taskTemplates) { /////////////////// if (taskTemplates == null || taskTemplates.length == 0) { @@ -854,19 +753,11 @@ export default { taskTemplates2.forEach((i) => { i.branchId = this.selProject.branchId; i.projectId = this.selProject.id; - i.projectName = this.selProject.name; - if (this.projectPhase == null) { - i.projectPhaseId = this.parentTask.projectPhaseId; - i.projectPhaseName = this.parentTask.projectPhaseName; + i.projectName = this.selProject.name; i.sortLevel = i.sortLevel ? i.sortLevel : this.parentTask.sortLevel; i.taskType = i.taskType ? i.taskType : this.parentTask.taskType; i.taskClass = i.taskClass ? i.taskClass : this.parentTask.taskClass; - } else { - i.projectPhaseId = this.projectPhase.id; - i.projectPhaseName = this.projectPhase.phaseName; - i.sortLevel = i.sortLevel ? i.sortLevel : this.projectPhase.seqNo; - i.taskType = i.taskType ? i.taskType : this.projectPhase.taskType; - } + i.budgetCost = 0; i.budgetWorkload = 80; i.level = i.level ? i.level : "3"; @@ -933,184 +824,7 @@ export default { }); }) .catch((err) => (this.load.add = false)); - }, - - handleSelect(key, keyPath) { - this.drawerkey = key; - }, - translateDataToTree(data2) { - var data = JSON.parse(JSON.stringify(data2)); - - let parents = data.filter((value) => { - value.startDate = value.startTime - ? value.startTime.substr(0, 10) - : null; - value.endDate = value.endTime ? value.endTime.substr(0, 10) : null; - value.realStartDate = value.actStartTime - ? value.actStartTime.substr(0, 10) - : null; - value.realEndDate = value.actEndTime - ? value.actEndTime.substr(0, 10) - : null; - value.taskBudgetCostAt = this.getRowSum(value); - //如果我的上级为空,则我是最上级 - if ( - value.parentTaskid == "undefined" || - value.parentTaskid == null || - value.parentTaskid == "" - ) { - return true; - - //如果我的上级不在列表中,我作为最上级 - } else if (data.some((i) => value.parentTaskid == i.id)) { - return false; - } else { - return true; - } - }); - let children = data.filter((value) => { - if (data.some((i) => value.parentTaskid == i.id)) { - return true; - } else { - return false; - } - }); - let translator = (parents, children) => { - parents.forEach((parent) => { - children.forEach((current, index) => { - if (current.parentTaskid === parent.id) { - let temp = JSON.parse(JSON.stringify(children)); - temp.splice(index, 1); - translator([current], temp); - typeof parent.children !== "undefined" - ? parent.children.push(current) - : (parent.children = [current]); - } - }); - }); - }; - - translator(parents, children); - - return parents; - }, - projectPhaseRowClick: function (projectPhase) { - this.projectPhase = projectPhase; - this.getXmTasks(); - }, - clearSelectPhase: function () { - this.projectPhase = null; - this.getXmTasks(); - }, - getDateString(dateStr) { - if (dateStr == null || dateStr == "" || dateStr == undefined) { - return ""; - } else { - return dateStr.substr(0, 10); - } - }, - formateOption: function (itemCode, value) { - if (this.options[itemCode]) { - var options = this.options[itemCode].filter( - (i) => i.optionValue == value - ); - if (options && options.length > 0) { - return options[0].optionName; - } else { - return value; - } - } else { - return value; - } - }, - - formatterOption: function (row, column, cellValue, index) { - var columnName = column.property; - var key = ""; - if (columnName == "settleSchemel") { - key = "xmTaskSettleSchemel"; - } else { - return cellValue; - } - if ( - this.options[key] == undefined || - this.options[key] == null || - this.options[key].length == 0 - ) { - return cellValue; - } - var list = this.options[key].filter((i) => i.optionValue == cellValue); - if (list.length > 0) { - return list[0].optionName; - } else { - return cellValue; - } - }, - toFixed(floatValue, xsd) { - if (floatValue == null || floatValue == "" || floatValue == undefined) { - return 0; - } else { - if (xsd) { - return parseFloat(floatValue).toFixed(xsd); - } else { - return parseFloat(floatValue).toFixed(0); - } - } - }, - decrease: function () { - if (parseFloat(this.editForm.rate) - 20 < 0) { - this.editForm.rate = 0; - } else { - this.editForm.rate = parseFloat(this.editForm.rate) - 20; - } - }, - increase: function () { - if (parseFloat(this.editForm.rate) + 20 > 100) { - this.editForm.rate = 100; - } else { - this.editForm.rate = parseFloat(this.editForm.rate) + 20; - } - }, - - focusOrUnfocus: function (row) { - if (this.selkey == "myFocus") { - delXmMyFocus({ - projectId: row.projectId, - focusType: "task", - taskId: row.id, - taskName: row.name, - userid: this.userInfo.userid, - username: this.userInfo.username, - }).then((res) => { - var tips = res.data.tips; - if (tips.isOk) { - this.getXmTasks(); - } - this.$notify({ - showClose: true, - message: tips.msg, - type: tips.isOk ? "success" : "error", - }); - }); - } else { - addXmMyFocus({ - projectId: row.projectId, - projectName: row.projectName, - focusType: "task", - taskId: row.id, - taskName: row.name, - userid: this.userInfo.userid, - username: this.userInfo.username, - }).then((res) => { - var tips = res.data.tips; - this.$notify({ - showClose: true, - message: tips.msg, - type: tips.isOk ? "success" : "error", - }); - }); - } - }, + }, saveBatchEdit: function () { if (this.valueChangeRows.length == 0) { this.$notify({ @@ -1165,34 +879,31 @@ export default { var end = new Date(row.endTime); var days = this.getDaysBetween(end, start); if ( - row.taskOut == "1" && - this.projectPhase.phaseBudgetOutUserPrice && + row.taskOut == "1" && row.uniOutPrice&& !row.budgetWorkload ) { row.budgetWorkload = parseFloat((days * 8).toFixed(2)); - row.budgetCost = - row.budgetWorkload * this.projectPhase.phaseBudgetOutUserPrice; + row.budgetCost = row.budgetWorkload * row.uniOutPrice; } else if ( row.taskOut != "1" && - this.projectPhase.phaseBudgetInnerUserPrice && + row.uniInnerPrice && !row.budgetWorkload ) { row.budgetWorkload = parseFloat((days * 8).toFixed(2)); row.budgetCost = - row.budgetWorkload * this.projectPhase.phaseBudgetInnerUserPrice; + row.budgetWorkload * row.uniInnerPrice; } } } if (fieldName == "budgetWorkload" || fieldName == "taskOut") { - if (row.taskOut == "1" && this.projectPhase.phaseBudgetOutUserPrice) { + if (row.taskOut == "1" && row.uniOutPrice) { row.budgetCost = - row.budgetWorkload * this.projectPhase.phaseBudgetOutUserPrice; + row.budgetWorkload * row.uniOutPrice; } else if ( - row.taskOut != "1" && - this.projectPhase.phaseBudgetInnerUserPrice + row.taskOut != "1" && row.uniInnerPrice ) { row.budgetCost = - row.budgetWorkload * this.projectPhase.phaseBudgetInnerUserPrice; + row.budgetWorkload * row.uniInnerPrice } } if (row.opType) { @@ -1218,68 +929,29 @@ export default { this.valueChangeRows.push(row); } } - }, - getRowSum(row) { - var budgetCost = this.getFloatValue(row.budgetCost); - if (row.taskOut == "1") { - row.taskBudgetOutUserAt = budgetCost; - row.taskBudgetInnerUserAt = 0; - row.taskBudgetNouserAt = 0; - } else { - row.taskBudgetOutUserAt = 0; - row.taskBudgetInnerUserAt = budgetCost; - row.taskBudgetNouserAt = 0; - } - return budgetCost; - }, - getFloatValue(value, digit) { - if (isNaN(value)) { - return 0; - } - if (value == null || value == "" || value == undefined) { - return 0; - } - return parseFloat(value); - }, - showProjectList: function () { - this.selectProjectVisible = true; - }, - onPorjectConfirm: function (project) { - this.filters.selProject = project; - this.selectProjectVisible = false; - this.getXmTasks(); - }, - handleCommand(command) { - if (command.type == "showSubAdd") { - this.showSubAdd(command.data); - } else if (command.type == "showTaskTemplate") { - this.parentTask = command.data; - this.showTaskTemplate(command.data); - } else if (command.type == "showMenu") { - this.parentTask = command.data; - this.showMenu(command.data); - } else if (command.type == "showDrawer") { - this.showDrawer(command.data); - } else if (command.type == "showEdit") { - this.showEdit(command.data); - } else if (command.type == "showExecusers") { - this.showExecusers(command.data); - } else if (command.type == "showSkill") { - this.showSkill(command.data); - } else if (command.type == "focusOrUnfocus") { - this.focusOrUnfocus(command.data); - } else if (command.type == "handleDel") { - this.handleDel(command.data); + }, + showMenu(){ + if(this.sels.length==0){ + this.$notify.error("请先选中一条或者多条记录") + return; + }else{ + this.menuVisible=true; } }, - toMenu(task) { - this.editForm = task; - if (task.menuId) { - this.menuDetailVisible = true; - } else { - this.showEdit(task); + onMenuSelected:function(menu){ + this.menuVisible=false; + if(!menu){ + return; + }else{ + this.sels.forEach(i=>{ + i.menuId=menu.menuId; + i.menuName=menu.menuName; + i.productId=menu.productId; + //i.productName=menu.productName; + }) } - }, + + }, handlePopover: function (row, opType) { if ("add" == opType) { var subRow = JSON.parse(JSON.stringify(this.addForm)); @@ -1290,10 +962,7 @@ export default { subRow.opType = opType; subRow.branchId = this.selProject.branchId; subRow.projectId = this.selProject.id; - subRow.projectName = this.selProject.name; - if (this.projectPhase == null) { - subRow.projectPhaseId = this.parentTask.projectPhaseId; - subRow.projectPhaseName = this.parentTask.projectPhaseName; + subRow.projectName = this.selProject.name; subRow.sortLevel = subRow.sortLevel ? subRow.sortLevel : this.parentTask.sortLevel; @@ -1302,17 +971,7 @@ export default { : this.parentTask.taskType; subRow.taskClass = subRow.taskClass ? subRow.taskClass - : this.parentTask.taskClass; - } else { - subRow.projectPhaseId = this.projectPhase.id; - subRow.projectPhaseName = this.projectPhase.phaseName; - subRow.sortLevel = subRow.sortLevel - ? subRow.sortLevel - : this.projectPhase.seqNo; - subRow.taskType = subRow.taskType - ? subRow.taskType - : this.projectPhase.taskType; - } + : this.parentTask.taskClass; subRow.budgetCost = 0; subRow.budgetWorkload = 80; subRow.level = subRow.level ? subRow.level : "3"; @@ -1394,213 +1053,8 @@ export default { }); } } - }, - afterExecuserSubmit() { - this.getXmTasks(); - }, - toJoin() { - if ( - this.editForm.exeUserids && - this.editForm.exeUserids.indexOf(this.userInfo.userid) >= 0 - ) { - this.$notify.success("你已经加入该任务了"); - return; - } - this.execUserVisible = true; - this.$nextTick(() => { - this.$refs.execuserMng.toJoin(); - }); - }, - clearProject() { - this.filters.selProject = null; - this.getXmTasks(); - }, - // 行拖拽 - rowDrop() { - console.log("rowDrop==="); - - const _this = this; - // 被拖动的元素的索引 - let dragged = null; - // 被拖动的元素的索引 - let draggedIndex = -1; - - // 目标元素 - let target = document.querySelector( - ".drag-table2 .el-table__body-wrapper .el-table__body tbody" - ); - console.log("rowDrop--target==", target); - if (target == null) { - return; - } - let rows = 0; //行数 - setTimeout(function () { - rows = target.childElementCount; - console.log("rowDrop--rows==", rows); - - for (let i = 0; i < target.childElementCount; i++) { - const child = target.children[i]; - child.draggable = true; - // child.style.cursor = 'copy' - child.ondragstart = function (e) { - console.log("开始--ondragstart--e==", e); - - dragged = e.path[0]; - draggedIndex = e.path[0].rowIndex; - console.log("child" + i + "开始拖拽" + draggedIndex); - _this.cellMouseIndex = -1; - dragged.style.cursor = "grabbing"; - }; - child.ondragend = function () { - console.log("child" + i + "拖拽结束"); - }; - } - }, 0); - - // 被拖动的元素正在那个容器里 - let dragIndex = -1; - - target.ondragenter = function (e) { - clearTimeout(loop); - - // 由于被拖动的元素 经过tbody中的每一元素都会触发该事件, 但是我们只需要它正在那一行上就行了 - if (e.path[0].nodeName === "TD") { - // throughRow 表示被拖动的元素正在哪一行上 - const throughRow = e.path.find((path) => { - if (path.className.split(" ").includes("el-table__row")) { - return path; - } - }); - if (dragIndex !== throughRow.rowIndex) { - if (dragIndex > -1) { - // 清除上次进入的容器的状态 - const last = target.children[dragIndex]; - clearClass(last); - } - // console.log('拖动进入目标元素'+selectRow.rowIndex); - // 不是自己或未文件夹时才改变状态 - if (draggedIndex !== throughRow.rowIndex) { - // 改变本次进入的容器的状态 - dragged.style.cursor = "copy"; - throughRow.style.height = 60 + "px"; - throughRow.style.backgroundColor = "#e9fdcf"; - } - dragIndex = throughRow.rowIndex; - } - } - leaveIndex = -1; - }; - target.ondragover = function (e) { - // console.log('目标元素中拖拽...'); - e.preventDefault(); - leaveIndex = -1; - }; - - let loop = null; - let leaveIndex = -1; // 是否拖出了整个table, -1表示还在table内 - - target.ondragleave = function (e) { - console.log("ondragleave--e==", e); - - clearTimeout(loop); - - if (e.path[0].nodeName) { - const throughRow = e.path.find((path) => { - if (path.className.split(" ").includes("el-table__row")) { - return path; - } - }); - if (throughRow && dragIndex !== throughRow.rowIndex) { - // console.log('拖动离开目标元素'+selectRow.rowIndex); - // selectRow.style.height = 'unset' - // selectRow.style.backgroundColor = '#fff' - // dragIndex = selectRow.rowIndex - } - if (throughRow.rowIndex === 0 || throughRow.rowIndex === rows - 1) { - // 离开第一行或最后一行 - leaveIndex = throughRow.rowIndex; - loop = setTimeout(function () { - if (leaveIndex > -1) { - console.log("离开了", leaveIndex); - const leave = target.children[leaveIndex]; - clearClass(leave); - dragIndex = -1; - } - }, 100); - } - ``; - } - }; - target.ondrop = function () { - console.log("ondrop--放下了" + draggedIndex); - // 清除上次进入的容器的状态 - const last = target.children[dragIndex]; - clearClass(last); - dragged.style.cursor = "default"; - - console.log("ondrop--draggedIndex==", draggedIndex); - console.log("ondrop--dragIndex==", dragIndex); - - const startId = _this.$refs["task_" + draggedIndex].dataset.taskId; - const endId = _this.$refs["task_" + dragIndex].dataset.taskId; - - if (startId !== endId) { - _this.changePmenuId(startId, endId); - } - }; - - let clearClass = function (node) { - if (node) { - node.style.height = "unset"; - node.style.backgroundColor = "#fff"; - } - dragged.style.cursor = "grabbing"; - }; - // if(last && form.menuId !== to.menuId && to.isFolder){ - // // 移动文件/文件夹 - // _this.copyOrMoveApi('move', form.menuId, to.menuId) - // } - }, - // 判断前后两个数据是否存在同一回路里面 - // dict 为字典;sId拖拽到menuId; ePmeuId 是放置位置的祖先 menuId; - judgePmenuId(dict, sId, ePmeuId) { - if (sId === ePmeuId) { - return true; - } else if (dict[ePmeuId]) { - return this.judgePmenuId(dict, sId, dict[ePmeuId]); - } else { - return false; - } - }, - changePmenuId(sId, eId) { - let dict = {}; - this.xmTasks.forEach((d) => { - dict[d.id] = d.parentTaskid || ""; - }); - if (!dict[eId]) { - this.xmTasks.find((d) => { - if (d.id === sId) { - d.parentTaskid = eId; - console.log("更新关系1"); - this.fieldChange(d, "pmenuId", true); - } - }); - } else { - const isSynezesis = this.judgePmenuId(dict, sId, dict[eId]); - if (!isSynezesis) { - this.xmTasks.find((d) => { - if (d.id === sId) { - d.parentTaskid = eId; - console.log("更新关系2"); - this.fieldChange(d, "pmenuId", true); - } - }); - } else { - console.log("形成闭合回路--拖拽不更新"); - } - } - }, - /**end 自定义函数请在上面加**/ + }, + getParams(params) { @@ -1711,10 +1165,11 @@ export default { this.fieldChange(i,"executorUsername") }) }, + }, //end methods components: { //在下面添加其它组件 - XmGroupSelect,XmGantt, + XmGroupSelect,xmMenuSelect, }, mounted() { if (this.selProject) { @@ -1742,8 +1197,7 @@ export default { document.body.ondrop = function (event) { event.preventDefault(); event.stopPropagation(); - }; - this.rowDrop(); + }; }, };