<style lang="less"> #kanban{ background:#DCE9FE; display: flex; flex-direction: column; height: 100%; >.tap{ flex-shrink: 0; background:#E6EFFE; display:flex; >span{ width:calc(100%/5); text-align: center; position:relative; height: 35px; line-height: 35px; &:after{ content:" "; left:50%; position:absolute; bottom:0; width:0; border-top:3px solid #5E9AFE; border-radius: 20px; transition: all 0.3s; } &.active{ font-size:15px; &:after{ width:100%; left:0; } } } } >.date{ flex-shrink: 0; display: flex; height: 30px; >div{ flex-grow:1; display:flex; justify-content: center; align-items: center; font-size: 14px; >.line{ width: 15px; background: #815EFF; height: 3px; border-radius: 50px; margin: 0 5px; } } >button{ flex-shrink: 0; padding: 0 10px; position:relative; overflow:hidden; color:#815EFF; &:after{ content:" "; width:0; height:0; left:50%; top:50%; position:absolute; background:rgba(50, 125, 255, 0.4); border-radius: 50%; transform:translate(-50%,-50%); } &:active:after{ transition: all 0.4s; width:100px; height:100px; } } } >.list{ flex-shrink: 0; display:flex; background: #f2f2f2; color:#679FFE; >span{ width: calc(100%/5); text-align: center; padding: 10px; box-sizing: border-box; transition: all 0.3s; &.active{ background: rgb(93, 148, 245); color: #fff; box-shadow: 2px 2px 3px rgba(94,154,254,0.4); } } } >.content{ flex-grow:1; overflow:auto; height:1px; -webkit-overflow-scrolling: touch; } } </style> <template> <div id="kanban"> <div class="tap"> <span :class="{active:dateMode==1}" @click="dateSelect(1)">日</span> <span :class="{active:dateMode==2}" @click="dateSelect(2)">周</span> <span :class="{active:dateMode==3}" @click="dateSelect(3)">月</span> <span :class="{active:dateMode==4}" @click="dateSelect(4)">年</span> <span :class="{active:dateMode==5}" @click="dateSelect(5)">自定义</span> </div> <div class="date"> <button v-if="dateMode<5" @click="preDate">上一{{dateMode==1&&'天'||dateMode==2&&'周'||dateMode==3&&'月'||dateMode==4&&'年'}}</button> <div> <span>{{startDate}}</span> <span v-show="dateMode>1" class="line" /> <span v-show="dateMode>1">{{endDate}}</span> </div> <button v-if="dateMode<5" @click="nextDate">下一{{dateMode==1&&'天'||dateMode==2&&'周'||dateMode==3&&'月'||dateMode==4&&'年'}}</button> </div> <div class="list"> <span :class="{active:situation=='operate'}" @click="situation='operate'">运营概况</span> <span :class="{active:situation=='capital'}" @click="situation='capital'">资金概况</span> <span :class="{active:situation=='Finance'}" @click="situation='Finance'">财务概况</span> <span :class="{active:situation=='abnormal'}" @click="situation='abnormal'">异常预警</span> <span :class="{active:situation=='tiipChartInventory'}" @click="situation='tiipChartInventory'">库存资金</span> </div> <div class="content"> <component :is="situation" :dateMode="dateMode" :start="DateValue[0]" :end="DateValue[1]"/> </div> <calendar :show.sync="calendarShow" mode="during" :defaultDate="calendarValue" @change="Change"/> </div> </template> <script> import util from "@/libs/util.js" import operate from "./operate" import capital from "./capital" import Finance from "./Finance" import abnormal from "./abnormal" import tiipChartInventory from "@/view/tiip/chart/inventory" export default { name:"kanban", components:{operate,capital,Finance,abnormal,tiipChartInventory}, data(){ return{ calendarShow:false, DateValue:[new Date], calendarValue:[], dateMode:1, situation:"operate", } }, mounted(){ window.kanban=this this.$store.dispatch('saveUserId',this.$route.params.userId); this.dateMode=3 }, methods:{ preDate(){ switch(this.dateMode){ case 1:this.DateValue=[new Date(this.DateValue[0].setDate(this.DateValue[0].getDate()-1))]; break; case 2:this.DateValue=[this.setWeek(this.DateValue[0],-1,"start"), this.setWeek(this.DateValue[1],-1,'end')];break; case 3:this.DateValue=[this.setMonth(this.DateValue[0],-1,"start"), this.setMonth(this.DateValue[1],-1,'end')];break; case 4:this.DateValue=[this.setYear(this.DateValue[0],-1,"start"), this.setYear(this.DateValue[1],-1,'end')];break; } }, nextDate(){ switch(this.dateMode){ case 1:this.DateValue=[new Date(this.DateValue[0].setDate(this.DateValue[0].getDate()+1))]; break; case 2:this.DateValue=[this.setWeek(this.DateValue[0],+1,"start"), this.setWeek(this.DateValue[1],+1,'end')];break; case 3:this.DateValue=[this.setMonth(this.DateValue[0],+1,"start"), this.setMonth(this.DateValue[1],+1,'end')];break; case 4:this.DateValue=[this.setYear(this.DateValue[0],+1,"start"), this.setYear(this.DateValue[1],+1,'end')];break; } }, dateSelect(index){//选择日期方式 if(index==5){ this.calendarShow=true }else{ this.calendarValue=[] this.dateMode=index } }, Change(e){ console.log(e) if(e.length==2){ this.DateValue=this.calendarValue=[e[0].$d,e[1].$d] this.dateMode=5 this.calendarShow=false } }, setWeek(date,val,mode){ if(mode=="start"){ date.setDate(date.getDate()+1-(date.getDay()||7)+val*7) }else{ date.setDate(date.getDate()+7-(date.getDay()||7)+val*7) } return new Date(date.getTime()); }, setMonth(date,val,mode){ date.setDate(1) date.setMonth(date.getMonth()+val) if(mode=='end'){ date.setMonth(date.getMonth()+1) date.setDate(0) } return new Date(date.getTime()); }, setYear(date,val,mode){ date.setFullYear(date.getFullYear()+val) date.setMonth(0) if(mode=="start"){ date.setDate(1) }else{ date.setFullYear(date.getFullYear()+1) date.setDate(0); } return new Date(date.getTime()); }, }, computed:{ startDate(val){ return util.dateFormat(this.DateValue[0],"yyyy年MM月dd日") }, endDate(val){ return util.dateFormat(this.DateValue[1],"yyyy年MM月dd日"); } }, watch:{ dateMode(n){ var date=new Date switch(n){ case 1:this.DateValue=[date];break; case 2:this.DateValue=[ this.setWeek(new Date(),0,'start'), this.setWeek(new Date(),0,'end') ];break; case 3:this.DateValue=[ this.setMonth(new Date(),0,"start"), this.setMonth(new Date(),0,"end"), ];break; case 4:this.DateValue=[ this.setYear(new Date(),0,"start"), this.setYear(new Date(),0,"end") ];break; } } }, } </script>