{"remainingRequest":"/data/jenkins/workspace/test-v5inweb-5.x-vue/node_modules/vue-loader/lib/index.js??vue-loader-options!/data/jenkins/workspace/test-v5inweb-5.x-vue/src/components/view_gantt.vue?vue&type=script&lang=js&","dependencies":[{"path":"/data/jenkins/workspace/test-v5inweb-5.x-vue/src/components/view_gantt.vue","mtime":1739760944325},{"path":"/data/jenkins/workspace/test-v5inweb-5.x-vue/node_modules/babel-loader/lib/index.js","mtime":315532800000},{"path":"/data/jenkins/workspace/test-v5inweb-5.x-vue/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/data/jenkins/workspace/test-v5inweb-5.x-vue/node_modules/vue-loader/lib/index.js","mtime":1655715099000}],"contextDependencies":[],"result":["\nimport activity from \"@/components/activity.vue\";\nexport default {\n name: \"view-gantt\",\n props: [\n \"view\",\n \"openParams\",\n \"showtype\",\n ],\n components: {\n activity,\n },\n watch: {\n \n },\n computed: {\n \n },\n created(){\n let columns = this.view.columns;\n for(let i=0; i {\n let docs = response.data.data;\n this.documents = response.data.data;\n this.row_count = response.data.row_count;\n let viewColumns = JSON.parse(JSON.stringify(this.view));\n for(let i=0; i {\n for (let key in doc.items) {\n viewColumns.columns.forEach(column => {\n if(column.mappingField === 'name' && key === column.id) {\n missionName = column.name;\n }else if(column.mappingField === 'start' && key === column.id) {\n if(doc.items[key].value){\n startTime.push(doc.items[key].value);\n }\n }else if(column.mappingField === 'end' && key === column.id) {\n if(doc.items[key].value){\n endTime.push(doc.items[key].value);\n }\n \n }\n })\n }\n });\n }\n let maxTime = endTime[0];\n for(let i=1; i startTime[i]){\n minTime = startTime[i];\n }\n }\n console.log(\"maxTime-->\",maxTime,minTime)\n let monthBetweenNum = this.getMonthBetween(minTime, maxTime);\n\n\t\t\t\tthis.monthBetweenHeadNum = JSON.parse(JSON.stringify(monthBetweenNum));\n\t\t\t\t// this.monthBetweenHeadNum.unshift(missionName);\n this.monthBetweenNum = monthBetweenNum;\n\t\t\t\tthis.$nextTick(() => {\n this.getCanvas();\n if(selectType) {\n this.loadDayCanvas = true;\n this.loadYearCanvas = true;\n this.onChange(selectType)\n }\n\t\t\t\t})\n });\n\t\t},\n \n //获取两个日期的相隔的月份\n getMonthBetween(start, end, isNum){ \n var result = [];\n var starts = start.split('-');\n var ends = end.split('-');\n var staYear = starts[0]*1;\n var staMon = starts[1]*1 < 10? starts[1]:starts[1];\n var endYear = ends[0]*1;\n var endMon = ends[1]*1 < 10? ends[1]:ends[1];;\n result.push(staYear+'-'+staMon);\n while (staYear <= endYear) {\n if (staYear === endYear) {\n while (staMon < endMon) {\n staMon++;\n if(staMon < 10){\n result.push(staYear+'-0'+staMon);\n }else{\n result.push(staYear+'-'+staMon);\n }\n }\n staYear++;\n } else {\n staMon++;\n if (staMon > 12) {\n staMon = 1;\n staYear++;\n }\n if(staMon < 10){\n result.push(staYear+'-0'+staMon);\n }else{\n result.push(staYear+'-'+staMon);\n }\n }\n }\n if(isNum) {\n return result.length - 1;\n }else {\n return result;\n }\n },\n \n //模拟数据请求\n getViewData(page, size, searchData) {\n let startDate = \"\";\n let endDate = \"\";\n let treeData = \"\";\n let treeName = \"\";\n return new Promise(resolve => {\n this.$api.getViewData(\n //普通视图接口\n this.openParams.appId,\n this.view.id,\n {\n parentId: this.parentId ? this.parentId : \"\",\n currpage: 1,\n lines: 1000,\n searchWord:'',\n },\n {},\n {\n onSucess: response => {\n let viewData = response.data;\n resolve(viewData);\n }\n }\n );\n });\n },\n\n onChange(ev) {\n //切换甘特日期时,将全选取消\n this.checked = false;\n const obj = document.getElementsByName(\"ganttSelected\")\n obj.forEach(item => {\n item.checked = false;\n })\n if(ev === 'year' && this.loadYearCanvas) {\n this.loadYearCanvas = false\n let docs = this.documents ;\n let viewColumns = this.view;\n let missionName = '';\n let startTime = [];\n let endTime = [];\n if (docs) {\n docs.forEach((doc, index) => {\n for (let key in doc.items) {\n viewColumns.columns.forEach(column => {\n if(column.mappingField === 'name' && key === column.id) {\n missionName = column.name;\n }else if(column.mappingField === 'start' && key === column.id) {\n if(doc.items[key].value) {\n startTime.push(doc.items[key].value);\n }\n }else if(column.mappingField === 'end' && key === column.id) {\n if(doc.items[key].value) {\n endTime.push(doc.items[key].value);\n }\n }\n })\n }\n });\n }\n let maxTime = endTime[0];\n for(let i=1; i startTime[i]){\n minTime = startTime[i];\n }\n }\n\n let differenceYear = parseInt(maxTime.split('-')[0]) - parseInt(minTime.split('-')[0]);\n let arr = [];\n let startYear = parseInt(minTime.split('-')[0]);\n let endYear = parseInt(maxTime.split('-')[0]);\n let num = 0;\n if(differenceYear > 1) {\n while(differenceYear > 1) {\n num = num + 1;\n let newY = startYear + num;\n arr.push(newY);\n differenceYear--;\n }\n arr.unshift(startYear);\n arr.push(endYear);\n this.yearBetweenNum = arr;\n let yearBetweenHeadNum = [];\n yearBetweenHeadNum = JSON.parse(JSON.stringify(arr));\n // yearBetweenHeadNum.unshift(missionName);\n this.yearBetweenHeadNum = yearBetweenHeadNum;\n this.$nextTick(() => {\n this.getYearCanvas();\n })\n \n }else if(differenceYear == 1) {\n arr.unshift(startYear);\n arr.push(endYear);\n this.yearBetweenNum = arr;\n let yearBetweenHeadNum = [];\n yearBetweenHeadNum = JSON.parse(JSON.stringify(arr));\n // yearBetweenHeadNum.unshift(missionName);\n this.yearBetweenHeadNum = yearBetweenHeadNum;\n this.$nextTick(() => {\n this.getYearCanvas();\n })\n }else if(differenceYear === 0) {\n arr.unshift(startYear);\n this.yearBetweenNum = arr;\n let yearBetweenHeadNum = [];\n yearBetweenHeadNum = JSON.parse(JSON.stringify(arr));\n // yearBetweenHeadNum.unshift(missionName);\n this.yearBetweenHeadNum = yearBetweenHeadNum;\n this.$nextTick(() => {\n this.getYearCanvas();\n })\n }\n }else if(ev === 'day' && this.loadDayCanvas) {\n this.loadDayCanvas = false\n let docs = this.documents ;\n let viewColumns = this.view;\n let missionName = '';\n let startTime = [];\n let endTime = [];\n if (docs) {\n docs.forEach((doc) => {\n for (let key in doc.items) {\n viewColumns.columns.forEach(column => {\n if(column.mappingField === 'name' && key === column.id) {\n missionName = column.name;\n }else if(column.mappingField === 'start' && key === column.id) {\n if(doc.items[key].value) {\n startTime.push(doc.items[key].value);\n }\n }else if(column.mappingField === 'end' && key === column.id) {\n if(doc.items[key].value) {\n endTime.push(doc.items[key].value);\n }\n }\n })\n }\n });\n }\n\n let maxTime = endTime[0];\n for(let i=1; i startTime[i]){\n minTime = startTime[i];\n }\n }\n let dayBetweenNum = this.getDateBetween(minTime, maxTime);\n\n this.dayBetweenNum = dayBetweenNum;\n let dayBetweenHeadNum = [];\n dayBetweenHeadNum = JSON.parse(JSON.stringify(dayBetweenNum));\n // dayBetweenHeadNum.unshift(missionName);\n this.dayBetweenHeadNum = dayBetweenHeadNum;\n this.$nextTick(() => {\n this.getdayCanvas()\n })\n }else {\n this.getData();\n }\n // this.loadYearCanvas = true\n // this.loadDayCanvas = true\n\n // 取消所有选中的checkbox\n let allCheckBox = document.getElementsByName('checkbox')\n for (var i = 0; i < allCheckBox.length; i++) {\n allCheckBox[i].checked = false;\n }\n },\n\n //全选\n changeAllChecked(val){\n let isChecked = this.checked;\n if(isChecked){\n this.checked = false;\n }else{\n this.checked = true;\n }\n },\n\n reloadListView(){\n let type = this.currentTimeType;\n let c = document.getElementsByTagName(\"canvas\");\n for(let i = 0; i {\n if(column.mappingField === 'name' && key === column.id) {\n missionName = doc.items[key].value;\n }else if(column.mappingField === 'start' && key === column.id) {\n yearBetween.unshift(doc.items[key].value);\n }else if(column.mappingField === 'end' && key === column.id) {\n yearBetween.push(doc.items[key].value);\n }else if(column.mappingField === \"color\" && key === column.id) {\n if(doc.items[key].value) {\n ganttColor = doc.items[key].value;\n }else {\n // ganttColor = '#C5E0B3';\n ganttColor = '#B4C6E7';\n }\n }\n })\n }\n \n if(!yearBetween[0] || !yearBetween[1]) {\n continue\n }\n\n let sY = parseInt(yearBetween[0].split(\"-\")[0]);\n let eY = parseInt(yearBetween[1].split(\"-\")[0]);\n\n let startYM = yearBetween[0].split('-');\n let sDay = new Date(startYM[0],startYM[1],0);\n let startDays = sDay.getDate(); //结束月的天数\n let sD = startDays - parseInt(yearBetween[0].split(\"-\")[2]);\n\n let endYM = yearBetween[1].split('-');\n let eDay = new Date(endYM[0],endYM[1],0);\n let endDays = eDay.getDate(); //结束月的天数\n let eD = endDays - parseInt(yearBetween[1].split(\"-\")[2]);\n  \n let sYDays = '', //开始年份总天数 \n eYDays = ''; //结束年份总天数\n if(sY % 100 != 0 && sY % 4 == 0 || sY % 400 == 0){ //判断开始年份是否是闰年\n sYDays = 366;\n }else{\n sYDays = 365;\n }\n if(eY % 100 != 0 && eY % 4 == 0 || eY % 400 == 0){ //判断结束年份是否是闰年\n eYDays = 366;\n }else{\n eYDays = 355;\n }\n\n let sYM = parseInt(yearBetween[0].split(\"-\")[1]), //开始年份年月月份 \n eYM = parseInt(yearBetween[1].split(\"-\")[1]); //结束年份年月月份\n let SDaysArrive = this.getDayNumByYearMonth(sY, sYM); //开始年份到达的年月日总数\n let EDaysArrive = this.getDayNumByYearMonth(eY, eYM); //结束年份到达的年月日总数\n\n let canvas = document.createElement('canvas');\n let context = canvas.getContext('2d');\n // 设置线条的颜色\n let YBetween = this.yearBetweenHeadNum.length;\n let yearBetweenHeadNum = YBetween; //>= 2 ? YBetween -1 : YBetween;\n canvas.width = yearBetweenHeadNum * 130;\n canvas.height = 25;\n context.strokeStyle = ganttColor;//'#C5E0B3';\n // 设置线条的宽度\n context.lineWidth = 5;\n\n // 绘制直线\n context.beginPath();\n // 起点\n let toLeft = (sY - startTime) * 130 + Math.round( 130 / sYDays * SDaysArrive) - Math.round( 130 / sYDays * sD);\n let toRight = (eY - startTime) * 130 + Math.round( 130 / eYDays * EDaysArrive) - Math.round( 130 / eYDays * eD);\n context.moveTo(toLeft, 20);// 起点\n context.lineTo(toRight, 20);// 终点\n context.closePath();\n context.stroke();\n context.font = '12px \"微软雅黑\"'; \n context.fillStyle = \"#5A6779\";\n context.fillText('',toLeft,12);\n \n // canvas.style.zIndex = 1;\n canvas.style.position = \"absolute\";\n canvas.style.bottom = \"15px\";\n // canvas.style.left = '40px';\n // canvas.style.marginTop = '8px';\n let val = document.getElementById('myYearCanvas' + i).children[2]\n val.appendChild(canvas);\n this.loadYearCanvas = true\n }\n },\n\n //月canvas\n\t\tgetCanvas(){\n let startTime = this.monthBetweenNum[0];\n for(let i=0; i {\n if(column.mappingField === 'name' && key === column.id) {\n missionName = doc.items[key].value;\n }else if(column.mappingField === 'start' && key === column.id) {\n monthBetween.unshift(doc.items[key].value);\n }else if(column.mappingField === 'end' && key === column.id) {\n monthBetween.push(doc.items[key].value);\n }else if(column.mappingField === \"color\" && key === column.id) {\n if(doc.items[key].value) {\n ganttColor = doc.items[key].value;\n }else {\n ganttColor = '#B4C6E7';\n }\n }\n })\n }\n if(!monthBetween[0] || !monthBetween[1]) {\n continue\n }\n let isNum = true;\n let leftNumber = this.getMonthBetween(startTime, monthBetween[0], isNum);\n let rightNumber = this.getMonthBetween(startTime, monthBetween[1], isNum);\n \n let startYM = monthBetween[0].split('-');\n let sDay = new Date(startYM[0],startYM[1],0);\n let startDays = sDay.getDate(); //开始月的天数\n\n let endYM = monthBetween[1].split('-');\n let eDay = new Date(endYM[0],endYM[1],0);\n let endDays = eDay.getDate(); //结束月的天数\n\n let sCurrentDays = monthBetween[0].split('-')[2]; //开始的月份日\n let eCurrentDays = monthBetween[1].split('-')[2]; //结束的月份日\n\n let startDaysOwned = startDays - parseInt(sCurrentDays); //开始月的完整天数 - 数据返回所在的开始天数\n\n let endtDaysOwned = endDays - parseInt(eCurrentDays); //结束的完整天数 - 数据返回所在的结束天数\n\n let tdLeftWidth = Number((130 - (130 / startDays) * startDaysOwned).toFixed(2)) + Number(130 * leftNumber);//;\n let tdRightWidth = 130 + Number(130 * rightNumber) - Number(((130 / endDays) * endtDaysOwned).toFixed(2));\n \n let canvas = document.createElement('canvas');\n let context = canvas.getContext('2d');\n // 设置线条的颜色\n // canvas.width = \"700\";\n canvas.width = this.monthBetweenHeadNum.length * 130 + 40;\n \n canvas.height = 25;\n context.strokeStyle = ganttColor; //'#B4C6E7';\n // 设置线条的宽度\n context.lineWidth = 5;\n\n // 绘制直线\n context.beginPath();\n // 起点\n\n let toLeft = parseInt(tdLeftWidth);\n let toRight = parseInt(tdRightWidth);//130 - parseInt(Math.abs(tdRightWidth));\n // console.log(\"tdLeftWidth----->\",tdLeftWidth);\n context.moveTo(toLeft, 20);// 起点\n context.lineTo(toRight, 20);// 终点\n context.closePath();\n context.stroke();\n context.font = '12px \"微软雅黑\"'; \n context.fillStyle = \"#5A6779\";\n context.fillText('',toLeft,12);\n // canvas.id = \"CursorLayer\";\n // canvas.style.zIndex = 1;\n canvas.style.position = \"absolute\";\n canvas.style.bottom = \"15px\";\n // canvas.style.left = '40px';\n // canvas.style.marginTop = '8px';\n if(document.getElementById('mycanvas' + i)) {\n let val = document.getElementById('mycanvas' + i).children[2];\n val.appendChild(canvas);\n }\n \n }\n },\n\n //日canvas\n getdayCanvas() {\n let startTime = this.dayBetweenNum[0];\n let startYear = startTime;\n for(let i=0; i {\n if(column.mappingField === 'name' && key === column.id) {\n missionName = doc.items[key].value;\n }else if(column.mappingField === 'start' && key === column.id) {\n dayBetween.unshift(doc.items[key].value);\n }else if(column.mappingField === 'end' && key === column.id) {\n dayBetween.push(doc.items[key].value);\n }else if(column.mappingField === \"color\" && key === column.id) {\n if(doc.items[key].value) {\n ganttColor = doc.items[key].value;\n }else {\n // ganttColor = '#FEE598';\n ganttColor = '#B4C6E7';\n }\n }\n })\n }\n // let sD = parseInt(dayBetween[0].split(\"-\")[2]); //每条数据的开始天数\n // let eD = parseInt(dayBetween[1].split(\"-\")[2]); //每条数据的结束天数\n if(!dayBetween[0] || !dayBetween[1]) {\n continue\n }\n let isNum = true;\n let SDaysArrive = this.getDateBetween(startTime, dayBetween[0], isNum); //开始年份到达的年月日总数\n let EDaysArrive = this.getDateBetween(startTime, dayBetween[1], isNum); //结束年份到达的年月日总数\n\n\n let canvas = document.createElement('canvas');\n let context = canvas.getContext('2d');\n // 设置线条的颜色\n // canvas.width = \"700\";\n canvas.width = this.dayBetweenHeadNum.length * 130 + 10;\n canvas.height = 25;\n context.strokeStyle = ganttColor; //'#FEE598';\n // 设置线条的宽度\n context.lineWidth = 5;\n\n // 绘制直线\n context.beginPath();\n // 起点\n let toLeft = ( SDaysArrive - 1 ) * 130;\n let toRight = EDaysArrive * 130;\n context.moveTo(toLeft, 20);// 起点\n context.lineTo(toRight, 20);// 终点\n context.closePath();\n context.stroke();\n context.font = '12px \"微软雅黑\"'; \n context.fillStyle = \"#5A6779\";\n context.fillText('',toLeft,12);\n \n // canvas.style.zIndex = 1;\n canvas.style.position = \"absolute\";\n canvas.style.bottom = \"15px\";\n // canvas.style.left = '40px';\n // canvas.style.marginTop = '8px';\n let val = document.getElementById('myDayCanvas' + i).children[2]\n val.appendChild(canvas);\n this.loadDayCanvas = true;\n }\n },\n\n //获取两个日期的相隔的天数\n getDateBetween(start,end, isNum){\n var result = [];\n //使用传入参数的时间\n var startTime = new Date(start);\n var endTime = new Date(end);\n while(endTime - startTime>=0 ) {\n let year = startTime.getFullYear();\n let month = startTime.getMonth().toString().length==1?\"0\"+(startTime.getMonth()+1).toString():startTime.getMonth()+1;\n let day = startTime.getDate().toString().length==1?\"0\"+startTime.getDate():startTime.getDate();\n //加入数组\n month = month == '010'?'10':month;\n result.push(year+\"-\"+month+\"-\"+day);\n //更新日期\n startTime.setDate(startTime.getDate()+1);\n }\n if(isNum) {\n return result.length;\n }else {\n return result;\n }\n \n },\n\n getDayNumByYearMonth(year,month){\n let totalDays = 0; \n for(let i=1; i<=month; i++) {\n if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12 ) {\n totalDays = totalDays + 31;\n }else if(i == 4 || i==6 || i==9 || i==11) {\n totalDays = totalDays + 30;\n }else if(i == 2) {\n if(this.isLeapYear(year)) {\n totalDays = totalDays + 29;\n }else {\n totalDays = totalDays + 28;\n }\n }\n }\n return totalDays;\n },\n\n isLeapYear(year) {\n if(year % 100 != 0 && year % 4 == 0 || year % 400 == 0){ //判断开始年份是否是闰年\n return 29;\n }else{\n return 28;\n }\n },\n\n getExcelParams() {\n if (this.searchExcelData) {\n return this.searchExcelData;\n } else {\n return \"\";\n }\n },\n\n onActionChild(act){\n switch (act.type) {\n case 1: //载入视图\n this.$parent.onAction(act);\n break;\n case 2: //创建\n this.$parent.onAction(act);\n break;\n case 3: //删除\n this.doRemove(act);\n break;\n case 16: //导出excel\n this.$parent.onAction(act);\n break;\n case 27: //导入excel\n this.$parent.onAction(act);\n break;\n default:\n break;\n }\n },\n\n\n doRemove(act) {\n const obj = document.getElementsByName(\"checkbox\")\n let check_val = []\n for (let k in obj) {\n if (obj[k].checked)\n check_val.push(obj[k].dataset.id);\n }\n let docIds = check_val;\n if(docIds && docIds.length > 0) {\n this.$confirm(this.$t('msg.del_select')+`${docIds.length}`+this.$t('msg.data'), this.$t('tip'), {\n confirmButtonText: this.$t('msg.confirm'),\n cancelButtonText: this.$t('btns.cancel'),\n type: 'warning'\n }).then(() => {\n this.$parent.runBeforeAction(act, docIds);\n }).catch(() => {\n \n });\n }else {\n this.$confirm(this.$t('placeholder.least_one_data'), this.$t('tip'), {\n confirmButtonText: this.$t('msg.confirm'),\n cancelButtonText: this.$t('btns.cancel'),\n type: 'warning'\n }).then(() => { \n \n }).catch(() => {\n \n });\n }\n },\n },\n\n filters: {\n formDate: function(value) {\n let val = value.split(\"-\");\n return val[2];\n },\n dataEscape: function(value) {\n let val = value.replace(\"%\", \"%\");\n return val;\n },\n \n }\n};\n",null]}