| | |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .right-1-item .mun{ |
| | |
| | | .right-2-body{ |
| | | width: 100%; |
| | | margin-top: 20px; |
| | | display: flex; |
| | | /* display: flex; |
| | | align-items: start; |
| | | justify-content: space-between; |
| | | justify-content: space-between; */ |
| | | } |
| | | >>>.el-calendar__header { |
| | | display: none; |
| | |
| | | border-radius: 16px; |
| | | overflow: hidden; |
| | | margin-bottom: 8px; |
| | | cursor: pointer; |
| | | } |
| | | .body-item.color0{ |
| | | background: #70A090; |
| | |
| | | text-align: left; |
| | | margin-bottom: 10px; |
| | | } |
| | | >>>.is-selected .el-calendar-day{ |
| | | background: #0166E2 !important; |
| | | color: #fff !important; |
| | | >>>.el-calendar-day span{ |
| | | display: inline-block; |
| | | width: 30px; |
| | | height: 30px; |
| | | line-height: 30px; |
| | | text-align: center; |
| | | border-radius: 4px; |
| | | } |
| | | >>>.el-calendar-day:hover{ |
| | | background: #0166E2 !important; |
| | | >>>.is-selected{ |
| | | background: transparent !important; |
| | | } |
| | | >>>.is-selected .el-calendar-day{ |
| | | background: transparent !important; |
| | | } |
| | | >>>.is-selected .el-calendar-day span{ |
| | | background: #3A7BFA !important; |
| | | color: #fff !important; |
| | | border-radius: 4px; |
| | | } |
| | | >>>.el-calendar-day:hover{ |
| | | background: transparent; |
| | | } |
| | | >>>.el-calendar-day span:hover{ |
| | | background: #3A7BFA !important; |
| | | color: #fff !important; |
| | | } |
| | | >>>.el-tag--dark{ |
| | | border: 0; |
| | | } |
| | | </style> |
| | | |
| | |
| | | <div class="left-item-title"> |
| | | <span style="font-size: 18px;">{{ item }}</span> |
| | | <span style="font-size: 14px;color: #999999;">{{ weekdays[index] }}</span> |
| | | <el-tag style="margin-top: 6px;" size="small">{{workList[index].length}} 条</el-tag> |
| | | </div> |
| | | <div class="left-item-body"> |
| | | <div class="body-item" v-for="(m,i) in workList[index]" :key="i" :class="{color0:m.type==0,color1:m.type==1,color2:m.type==2}"> |
| | | <div class="body-item" v-for="(m,i) in workList[index]" :key="i" :class="{color0:m.type==0,color1:m.type==1,color2:m.type==2}" @click="goAddList(m)"> |
| | | <div> |
| | | <span style="font-size: 12px;margin-bottom: 17px;">{{ m.text }}</span> |
| | | <span style="display: inline-block;height: 24px;width: 24px;border-radius: 50%;line-height: 24px;text-align: center;background: #C0C4CC;color: #fff;">{{ m.name.charAt(0) }}</span> |
| | | <span style="font-size: 12px;margin-bottom: 8px;">{{ m.text }}</span> |
| | | <div class="tags" style="display: flex;align-items: end;flex-wrap: wrap;margin-bottom: 8px;"> |
| | | <el-tooltip class="item" effect="dark" :content="item" placement="top" v-for="(item,index) in m.sample?m.sample.split(','):[]" |
| | | :key="index"> |
| | | <el-tag |
| | | :color="m.type==0?'#70A090':(m.type==1?'#EBD476':'#FF3838')" |
| | | effect="dark" size="mini" style="margin: 2px;" class="single-line-ellipsis"> |
| | | {{ item }} |
| | | </el-tag> |
| | | </el-tooltip> |
| | | </div> |
| | | <span style="display: inline-block;height: 22px;width: 70px;border-radius: 10px;line-height: 22px;text-align: center;background: #C0C4CC;color: #fff;font-size: 14px;">{{ m.name }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="10" :lg="10" :xl="10"> |
| | | <div class="right-1 card"> |
| | | <div class="right-1-item"> |
| | | <div class="right-1-item" @click="openNotice"> |
| | | <div class="img"> |
| | | <img src="../../../static/img/index-0.svg" alt=""> |
| | | </div> |
| | | <div class="mun"> |
| | | <p style="font-size: 20px;">0</p> |
| | | <p style="font-size: 20px;">{{getNumberFourTypes.totalNumberOfMessages}}</p> |
| | | <p style="font-size: 14px;margin-bottom: 10px;">我的待办</p> |
| | | </div> |
| | | </div> |
| | | <div class="right-1-item"> |
| | | <div class="right-1-item" @click="openNotice"> |
| | | <div class="img"> |
| | | <img src="../../../static/img/index-1.svg" alt=""> |
| | | </div> |
| | | <div class="mun"> |
| | | <p style="font-size: 20px;">0</p> |
| | | <p style="font-size: 20px;">{{ getNumberFourTypes.totalNumberOfReadMessages }}</p> |
| | | <p style="font-size: 14px;margin-bottom: 10px;">已办事宜</p> |
| | | </div> |
| | | </div> |
| | | <div class="right-1-item"> |
| | | <div class="right-1-item" @click="openNotice"> |
| | | <div class="img"> |
| | | <img src="../../../static/img/index-2.svg" alt=""> |
| | | </div> |
| | | <div class="mun"> |
| | | <p style="font-size: 20px;">0</p> |
| | | <p style="font-size: 20px;">{{ getNumberFourTypes.remainingToDo }}</p> |
| | | <p style="font-size: 14px;margin-bottom: 10px;">剩余待办</p> |
| | | </div> |
| | | </div> |
| | | <div class="right-1-item"> |
| | | <div class="right-1-item" @click="openNotice"> |
| | | <div class="img"> |
| | | <img src="../../../static/img/index-3.svg" alt=""> |
| | | </div> |
| | | <div class="mun"> |
| | | <p style="font-size: 20px;">0</p> |
| | | <p style="font-size: 20px;">{{ getNumberFourTypes.totalNumberOfMessagesInThePastSevenDays }}</p> |
| | | <p style="font-size: 14px;margin-bottom: 10px;">近期事宜</p> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="right-2 card"> |
| | | <div class="right-2-title"> |
| | | <span style="color: #333333;font-size: 16px;">我的日程</span> |
| | | <span style="cursor: pointer;font-size: 12px; |
| | | color: #3A7BFA;" @click="dialogVisible=true">添加我的日程</span> |
| | | <span style="color: #333333;font-size: 16px;">工时统计</span> |
| | | <div> |
| | | <el-select v-model="sonLaboratory" placeholder="站点" size="mini" style="width: 100px;" @change="initEchart"> |
| | | <el-option |
| | | v-for="item in sonLaboratoryList" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | <el-radio-group v-model="type" size="mini"> |
| | | <el-radio-button label="周" ></el-radio-button> |
| | | <el-radio-button label="月"></el-radio-button> |
| | | <el-radio-button label="年"></el-radio-button> |
| | | </el-radio-group> |
| | | <el-date-picker |
| | | v-model="time.week" |
| | | type="week" |
| | | format="yyyy 第 WW 周" |
| | | placeholder="选择周" size="mini" v-if="type=='周'" @change="m=>changeTime(type,m)" style="width: 130px;"> |
| | | </el-date-picker> |
| | | <el-date-picker |
| | | v-model="time.month" |
| | | type="month" |
| | | placeholder="选择月" size="mini" v-if="type=='月'" @change="m=>changeTime(type,m)" style="width: 130px;"> |
| | | </el-date-picker> |
| | | <el-date-picker |
| | | v-model="time.year" |
| | | type="year" |
| | | placeholder="选择年" size="mini" v-if="type=='年'" @change="m=>changeTime(type,m)" style="width: 130px;"> |
| | | </el-date-picker> |
| | | </div> |
| | | <!-- <span style="cursor: pointer;font-size: 12px; |
| | | color: #3A7BFA;" @click="dialogVisible=true">添加我的日程</span> --> |
| | | </div> |
| | | <div class="right-2-body"> |
| | | <div class="calendar" style="width: 49%;"> |
| | | <el-row :gutter="10" style="width: 100%;height: 80px;"> |
| | | <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12"> |
| | | <div style="height: 100%;background: url(../../../static/img/bg1.png) no-repeat;background-size: 100% 100%;padding: 12px 0;box-sizing: border-box;"> |
| | | <p style="text-align: center;font-size: 14px;color: #606266;line-height: 20px;margin-bottom: 4px;">总工时(小时)</p> |
| | | <p style="text-align: center;font-family: DIN Alternate, DIN Alternate;font-weight: 700;font-size: 30px;color: #3D3D3D;line-height: 35px;">{{chartData0.total}}</p> |
| | | </div> |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12"> |
| | | <div style="height: 100%;background: url(../../../static/img/bg2.png) no-repeat;background-size: 100% 100%;padding: 12px 0;box-sizing: border-box;"> |
| | | <p style="text-align: center;font-size: 14px;color: #606266;line-height: 20px;margin-bottom: 4px;">检验员(个)</p> |
| | | <p style="text-align: center;font-family: DIN Alternate, DIN Alternate;font-weight: 700;font-size: 30px;color: #3D3D3D;line-height: 35px;">{{chartData0.personNum}}</p> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <echart-module :id="'index-1'" :config="chartConfig0" :datas="chartData0" style="height: 250px;width: 100%;"></echart-module> |
| | | <!-- <div class="calendar" style="width: 49%;"> |
| | | <div class="control"> |
| | | <el-button class="prevm" @click="prevMonth(calendarValue)" icon="el-icon-arrow-left"></el-button> |
| | | <span>{{ calendarValue.getFullYear()+'年'+(calendarValue.getMonth() + 1)+'月' }}</span> |
| | |
| | | <span> |
| | | {{ data.day.split('-').slice(2)+'' }} |
| | | </span> |
| | | <!-- <el-badge v-if="data.isSelected" is-dot class="item"> |
| | | </el-badge> --> |
| | | </template> |
| | | </el-calendar> |
| | | </div> |
| | | <div class="right-2-list" style="width: 49%;height: 286px;" v-loading="scheduleLoading"> |
| | | </div> --> |
| | | <!-- <div class="right-2-list" style="width: 49%;height: 286px;" v-loading="scheduleLoading"> |
| | | <div class="list2-item" v-for="(m,i) in listScheduleByMe" :key="i"> |
| | | <span>{{ m.scheduleTimes }}</span> |
| | | <el-tooltip style="margin-left: 10px;" effect="dark" :content="m.text" placement="top"> |
| | | <p class="ellipsis-multiline" >{{ m.text }}</p> |
| | | </el-tooltip> |
| | | </div> |
| | | <span style="color:rgb(153, 153, 153);font-size: 12px;text-align: center;margin: 120px 0;display: inline-block;width: 100%;" v-if="listScheduleByMe.length==0">暂无</span> |
| | | </div> |
| | | <span style="color:rgb(144, 147, 153);font-size: 14px;text-align: center;margin: 120px 0;display: inline-block;width: 100%;" v-if="listScheduleByMe.length==0">暂无数据</span> |
| | | </div> --> |
| | | </div> |
| | | </div> |
| | | <div class="right-3 card" style="overflow: hidden;"> |
| | |
| | | <div class="tab-item" style="cursor: pointer;" :class="{active:currentIndex==5}" @click="currentIndex=5">通知通告</div> |
| | | </div> |
| | | <div class="right-3-list" v-loading="listLoading"> |
| | | <scroll-pagination @load="getList" :finishLoding="finishLoding"> |
| | | <scroll-pagination @load="getList" :finishLoding="finishLoding" :list="list" v-if="list.length>0||listLoading"> |
| | | <div class="list3-item" v-for="(m,i) in list" :key="i"> |
| | | <div class="list3-item-title"> |
| | | <img src="../../../static/img/index-tip.svg" alt=""> |
| | |
| | | <div class="body" style="max-height: 60vh;"> |
| | | <el-row> |
| | | <el-col class="search_thing" :span="22"> |
| | | <div class="search_label">时间:</div> |
| | | <div class="search_label"><span style="color: red;margin-right: 4px;">*</span>时间:</div> |
| | | <div class="search_input"> |
| | | <el-date-picker |
| | | v-model="query.time" |
| | |
| | | </div> |
| | | </el-col> |
| | | <el-col class="search_thing" :span="22"> |
| | | <div class="search_label">内容:</div> |
| | | <div class="search_label"><span style="color: red;margin-right: 4px;">*</span>内容:</div> |
| | | <div class="search_input"> |
| | | <el-input v-model="query.text" size="small" placeholder="请输入内容"></el-input> |
| | | <el-input v-model="query.text" type="textarea" |
| | | :rows="2" size="small" placeholder="请输入内容"></el-input> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | getYearAndMonthAndDays |
| | | } from '../../util/date' |
| | | import ScrollPagination from '../tool/scroll-paging.vue' |
| | | import EchartModule from '../tool/echart.vue' |
| | | import { name } from 'file-loader'; |
| | | export default { |
| | | components: { |
| | | ScrollPagination |
| | | ScrollPagination, |
| | | EchartModule |
| | | }, |
| | | data() { |
| | | return { |
| | |
| | | total: null, |
| | | listLoading: true, // 组件loading的展示,默认为true |
| | | finishLoding: false, // 加载完成,显示已经没有更多了 |
| | | timer:null |
| | | timer:null, |
| | | keyMap:{}, |
| | | getNumberFourTypes: {}, |
| | | type:'月', |
| | | time:{ |
| | | week:'', |
| | | month:'', |
| | | year:'', |
| | | }, |
| | | startTime:'', |
| | | endTime:'', |
| | | sonLaboratory:null, |
| | | sonLaboratoryList:[], |
| | | chartData0:{ |
| | | total:0, |
| | | personNum:0, |
| | | data:[] |
| | | }, |
| | | chartConfig0:{ |
| | | height: '', |
| | | isLoading:false, |
| | | type:'pie0' |
| | | } |
| | | } |
| | | }, |
| | | watch:{ |
| | |
| | | this.getScheduleByMe() |
| | | }, |
| | | currentIndex(){ |
| | | this.keyMap = {} |
| | | this.currentPage = 1; |
| | | this.list = []; |
| | | this.getList(); |
| | | }, |
| | | type(val){ |
| | | switch(val){ |
| | | case '周': |
| | | this.time.week = new Date() |
| | | this.changeTime(val,this.time.week) |
| | | break; |
| | | case '月': |
| | | this.time.month = new Date() |
| | | this.changeTime(val,this.time.month) |
| | | break; |
| | | case '年': |
| | | this.time.year = new Date() |
| | | this.changeTime(val,this.time.year) |
| | | break; |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | |
| | | this.weekdays = this.getWeekdaysForNextWeek() |
| | | this.init(); |
| | | this.currentPage = 1; |
| | | this.keyMap = {} |
| | | this.list = []; |
| | | this.getList(); |
| | | this.getScheduleByMe() |
| | | this.getLaboratoryDicts() |
| | | // this.getScheduleByMe() |
| | | this.timer&&clearInterval(this.timer) |
| | | this.timer = setInterval(() => { |
| | | this.init(); |
| | | this.currentPage = 1; |
| | | this.keyMap = {} |
| | | this.list = []; |
| | | this.getList(); |
| | | this.getScheduleByMe() |
| | | // this.getScheduleByMe() |
| | | },1000*60*10) |
| | | this.getNumberFourTypesFun() |
| | | }, |
| | | methods: { |
| | | getNumberFourTypesFun() { |
| | | this.$axios.get(this.$api.informationNotification.getNumberFourTypesMessagesHomePage).then(res => { |
| | | this.getNumberFourTypes = res.data |
| | | }) |
| | | }, |
| | | getList(){ |
| | | const key = `_${this.currentPage}` |
| | | const value = this.keyMap[key] |
| | | // 如果value存在,表示缓存有值,那么阻止请求 |
| | | if(value) { |
| | | return |
| | | } |
| | | // value不存在,表示第一次请求,设置占位 |
| | | this.keyMap[key] = 'temp' |
| | | if(this.currentPage==1){ |
| | | this.listLoading = true |
| | | } |
| | |
| | | }) |
| | | }) |
| | | }, |
| | | async initEchart(){ |
| | | this.chartConfig0.isLoading = false |
| | | let res0 = await this.$axios.post(this.$api.report.manHourByStation+'?startTime='+this.startTime+'&endTime='+this.endTime+'&sonLaboratory='+this.sonLaboratory) |
| | | if (res0.code == 201) return |
| | | this.chartData0.total = res0.message |
| | | let res1 = await this.$axios.post(this.$api.report.manHourByPerson+'?startTime='+this.startTime+'&endTime='+this.endTime+'&sonLaboratory='+this.sonLaboratory) |
| | | if (res1.code == 201) return |
| | | this.chartData0.personNum = 0 |
| | | this.chartData0.data = [] |
| | | if(res1.data){ |
| | | for(let m in res1.data){ |
| | | this.chartData0.personNum ++ |
| | | let obj = { |
| | | name:m, |
| | | value:res1.data[m], |
| | | penl:this.chartData0.total>0?((res1.data[m]/this.chartData0.total)*100).toFixed(2):0 |
| | | } |
| | | this.chartData0.data.push(obj) |
| | | } |
| | | } |
| | | this.chartConfig0.isLoading = true |
| | | }, |
| | | getWeekdaysForNextWeek() { |
| | | let weekdays = []; |
| | | for (let i = 0; i < 7; i++) { |
| | |
| | | }) |
| | | }, |
| | | goNoticeDetail(row){ |
| | | this.$axios.put(this.$api.informationNotification.triggerModificationStatusToRead+'/'+row.id).then(res => { |
| | | row.num = Math.random(100); |
| | | this.$axios.put(this.$api.informationNotification.triggerModificationStatusToRead+'/'+row.id).then(res => { |
| | | row.num = Math.random(100); |
| | | this.$bus.$emit("change", JSON.stringify(row)); |
| | | this.$parent.addTab({ |
| | | v: "消息详情", |
| | | i: "el-icon-s-tools", |
| | | u: "notice-detail", |
| | | k:35, |
| | | p: "abcd" |
| | | },29); |
| | | }) |
| | | }, |
| | | goAddList(row){ |
| | | this.$bus.$emit("change", JSON.stringify(row)); |
| | | this.$parent.addTab({ |
| | | v: "消息详情", |
| | | i: "el-icon-s-tools", |
| | | u: "notice-detail", |
| | | k:35, |
| | | p: "abcd" |
| | | },29); |
| | | }) |
| | | }, |
| | | this.$parent.addTab({ |
| | | v: "检验下单", |
| | | i: "font icon-erjidaohang", |
| | | u: "b1-inspection-order", |
| | | k:3, |
| | | p: "selectInsOrderParameter", |
| | | param:{ |
| | | text:row.text |
| | | } |
| | | },1); |
| | | }, |
| | | changeTime(type,m){ |
| | | if(m){ |
| | | switch(type){ |
| | | case '周': |
| | | this.startTime = getYearAndMonthAndDays(new Date(this.time.week.getTime() - 24 * 60 * 60 * 1000)) |
| | | this.endTime = getYearAndMonthAndDays(new Date(this.time.week.getTime() + 24 * 60 * 60 * 1000 * 5)) |
| | | break; |
| | | case '月': |
| | | const year = new Date(this.time.month).getFullYear(); |
| | | const month = new Date(this.time.month).getMonth(); |
| | | const day = new Date(year, month + 1, 0).getDate(); // |
| | | // 设置起始日期和结束日期 |
| | | this.startTime = `${year}-${month + 1}-01` |
| | | this.endTime = `${year}-${month + 1}-${day}` // 月末 |
| | | break; |
| | | case '年': |
| | | const year0 = new Date(this.time.year).getFullYear(); |
| | | this.startTime = `${year0}-01-01`; // 年初 |
| | | this.endTime = `${year0}-12-31`; // 年末 |
| | | break; |
| | | } |
| | | }else{ |
| | | const year = new Date().getFullYear(); |
| | | const month = new Date().getMonth(); |
| | | |
| | | // 设置起始日期和结束日期 |
| | | this.startTime = new Date(year, month, 1).toISOString().slice(0, 10); // 月初 |
| | | this.endTime = new Date(year, month + 1, 0).toISOString().slice(0, 10); // 月末 |
| | | this.time.month = new Date() |
| | | } |
| | | this.initEchart() |
| | | }, |
| | | getLaboratoryDicts() { |
| | | this.$axios.post(this.$api.enums.selectEnumByCategory, { |
| | | category: "子实验室" |
| | | }).then(res => { |
| | | this.sonLaboratoryList = res.data |
| | | this.sonLaboratory = '远场' |
| | | this.changeTime(this.type) |
| | | }) |
| | | }, |
| | | openNotice(){ |
| | | this.$parent.openNotice() |
| | | } |
| | | }, |
| | | deactivated(){ |
| | | this.timer&&clearInterval(this.timer) |