var template = '' $.ajax('../html/dejdsqyysfjd.html',{ data: {}, dataType: 'html', cache: false, timeout: 60000, async: false, error: function(res) { }, success: function(res) { template = res } }) Vue.component('mzf-dejdsqyy-sfjd', { props: [], template: template, data: function() { return { mzfSfzmxData:[], testArr1: [], testArr2: [], testArr3: [], testArr4: [], testPosition1: 0, testPosition2: 0, testPosition3: 0, testPosition4: 0, list:[], startTime:new Date('2023','05','26'), endTime:new Date(), regionList:[], regionData:[ {label:'全市',id:'1',type:'1'} ], regionListList:[], tertiaryHospitalsData:[ {label:'全部',id:'1',type:'2'} ], communityHospitalsList:[], communityHospitalsData:[ {label:'全部',id:'1',type:'3'} ], groupingList:[], groupingData:[ {label:'全部',id:'1',type:'4'} ], administrationStatusList:[], administrationStatusData:[ {label:'全部',id:'1',type:'5'} ], show:false, showTwo:false, showThree:false, currentPage:1, currentSize:10, datatotal:0, //总数 loadingTwo:false, setDisabled:{ disabledDate:function(time) { return time.getTime() < new Date('2023','05','26') || time.getTime() > Date.now(); } }, s:'', e:'', mergeObj: {}, mergeArr: ['areaName', 'gradeHospitalName', 'hospitalName', 'groupName',], } }, created: function(){ this.s = this.startTime.format('yyyy-MM-dd') this.e = this.endTime.format('yyyy-MM-dd') this.list.unshift({type:'0',id:'time',label:this.s +"~"+ this.e}) this.getCopdFollowDetailData() }, watch:{ 'startTime':{ handler:function(o) { if(!o) { this.list.splice(0,1) } }, deep: true, immediate: true }, 'endTime':{ handler:function(o) { if(!o) { this.list.splice(0,1) } }, deep: true, immediate: true }, }, methods: { getCopdFollowDetailData:function() { var vm = this vm.loadingTwo = true var data = { startTime:this.startTime.format('yyyy-MM-dd'), endTime:this.endTime.format('yyyy-MM-dd') } statisticAPI.getCopdFollowDetailData({ jsonStr:JSON.stringify(data) }).then(function(res){ if(res.status == 200) { console.log(res,'sfmx'); vm.loadingTwo = false vm.mzfSfzmxData = res.data vm.getSpanArr(vm.mzfSfzmxData) } }).catch(function(err){ vm.loadingTwo = false }) }, startTimeChange:function(o) { if(!this.list[0] || this.list[0].type!=0) { this.list.unshift({type:'0',id:'time',label:o.format('yyyy-MM-dd') +"~"+ this.endTime.format('yyyy-MM-dd')}) }else{ this.list[0].label = o.format('yyyy-MM-dd') +"~"+ this.endTime.format('yyyy-MM-dd') } }, endTimeChange:function(o) { if(!this.list[0] || this.list[0].type!=0) { this.list.unshift({type:'0',id:'time',label:this.startTime.format('yyyy-MM-dd') +"~"+ o.format('yyyy-MM-dd')}) }else{ this.list[0].label = this.startTime.format('yyyy-MM-dd') +"~"+ o.format('yyyy-MM-dd') } }, deleteClick:function(item) { if(item.id == "time") { this.startTime = '' this.endTime = '' this.list.splice(0,1) } var index = this.list.findIndex(function(v){ return item.id == v.id }) this.list.splice(index,1) }, // 下一页 上一页 handleCurrentChange:function(val) { var vm = this vm.currentPage = val }, change:function(val) { this.list = this.list.concat(val) }, // 确定 confirm:function() { this.getCopdFollowDetailData() }, // 取消 cancel:function() { this.startTime = new Date('2023','05','26') this.endTime = new Date() if(!this.list[0] || this.list[0].type!=0) { this.list.unshift({type:'0',id:'time',label:this.startTime.format('yyyy-MM-dd') +"~"+ this.endTime.format('yyyy-MM-dd')}) }else{ this.list[0].label = this.startTime.format('yyyy-MM-dd') +"~"+ this.endTime.format('yyyy-MM-dd') } }, // 导出 exportHandle:function() { var vm = this vm.loadingTwo = true var data = { startTime:this.startTime.format('yyyy-MM-dd'), endTime:this.endTime.format('yyyy-MM-dd') } var jsonStr = JSON.stringify(data) statisticAPI.exportCopdFollowDetailData({ jsonStr: encodeURIComponent(jsonStr) },'慢阻肺随访总明细.xls').then(function(res){ vm.loadingTwo = false }) }, getSpanArr(data) { this.mergeArr.forEach((key, index1) => { var count = 0; // 用来记录需要合并行的起始位置 this.mergeObj[key] = []; // 记录每一列的合并信息 data.forEach((item, index) => { // index == 0表示数据为第一行,直接 push 一个 1 if(index === 0) { this.mergeObj[key].push(1); } else { // 判断当前行是否与上一行其值相等 如果相等 在 count 记录的位置其值 +1 表示当前行需要合并 并push 一个 0 作为占位 if(item[key] === data[index - 1][key]) { this.mergeObj[key][count] += 1; this.mergeObj[key].push(0); } else { // 如果当前行和上一行其值不相等 count = index; // 记录当前位置 this.mergeObj[key].push(1); // 重新push 一个 1 } } }) }) }, //得到行、列的合并值 objectSpanMethod: function({row, column, rowIndex, columnIndex}) { if(this.mergeArr.indexOf(column.property) !== -1) { // 判断其值是不是为0 if(this.mergeObj[column.property][rowIndex]) { return [this.mergeObj[column.property][rowIndex], 1] } else { // 如果为0则为需要合并的行 return [0, 0]; } } }, } })