From 943f66294cae53cb1617b237ec992691e01f516b Mon Sep 17 00:00:00 2001 From: licp <lichunping@guanfang.com.cn> Date: 星期四, 26 十二月 2024 16:06:47 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master --- src/components/view/index-index.vue | 1415 ++++++++++++++++++++++++++++++++++------------------------ 1 files changed, 824 insertions(+), 591 deletions(-) diff --git a/src/components/view/index-index.vue b/src/components/view/index-index.vue index d3b7b7c..cc46e86 100644 --- a/src/components/view/index-index.vue +++ b/src/components/view/index-index.vue @@ -3,36 +3,15 @@ width: 100%; height: calc(100% - 50px); overflow-y: auto; - padding: 25px 0; - } - - .no { - width: 100%; - display: flex; - margin-bottom: 10px; - } - - .card { - border-radius: 6px; - background-color: #fff; - padding: 10px 20px; - } - - .no1 { - display: flex; - } - - .no1 .left { - width: 65%; - margin-right: 10px; + padding: 25px 0 10px; } .left-1 { background-image: url("../../../static/img/棣栭〉鍥剧墖1.png"); background-size: 100% 100%; - width: calc(100% - 40px); - height: 7.2vw; - margin-bottom: 10px; + height: 118px; + margin-bottom: 16px; + border-radius: 16px; } .left-1 .say { @@ -56,91 +35,6 @@ font-size: 17px; } - .left-2 { - width: 100%; - display: flex; - } - - .card-1 { - width: calc(25% - 40px); - height: 100px; - display: flex; - align-items: center; - margin-right: 10px; - } - - .card-1 .label .p1 { - color: #333; - font-size: 0.85vw; - font-style: normal; - font-weight: 400; - margin-bottom: 10px; - } - - .card-1 .label .p2 { - color: #3A7BFA; - font-size: 1.4vw; - font-style: normal; - font-weight: 400; - } - - .card-1 .label { - width: calc(100% - 4vw); - } - - .card-1 .icon { - background-color: #F3F6FA; - border-radius: 50%; - width: 4vw; - height: 4vw; - display: flex; - align-items: center; - justify-content: center; - } - - .card-1 .icon i { - font-size: 1.6vw; - color: #3A7BFA; - } - - .right { - width: 35%; - height: calc(7.2vw + 10px + 120px); - display: flex; - flex-wrap: wrap; - } - - .card-2 { - width: 33.3%; - height: calc(50% - 20px); - display: flex; - justify-content: center; - align-items: center; - flex-wrap: wrap; - cursor: pointer; - margin-bottom: 10px; - } - - .card-2 .icon { - width: 3.5vw; - height: 3.5vw; - background-color: #F3F6FA; - border-radius: 24px; - } - - .card-2 .icon i { - font-size: 1.7vw; - display: flex; - align-items: center; - justify-content: center; - height: 100%; - } - - .card-2 .text { - width: 100%; - text-align: center; - } - ::-webkit-scrollbar { width: 0px; } @@ -150,39 +44,240 @@ border-radius: 3px; } - .cart-3, - .cart-4, - .cart-5, - .cart-6 { - width: calc(50%); - height: 300px; - background-color: #fff; + .card{ + background: #FFFFFF; + border-radius: 16px; + width: 100%; + box-sizing: border-box; + } + + .right-1{ + padding: 10px 10px 4px; + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 16px; + } + + .right-1-item{ + width: 25%; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + } + + .right-1-item .mun{ + margin-left: 6px; + color: #0166E2; + } + + .right-2{ + padding: 13px 14px 8px; + margin-bottom: 16px; + } + + .right-2-title{ + display: flex; + align-items: center; + justify-content: space-between; + } + + .right-2-body{ + width: 100%; + margin-top: 20px; + /* display: flex; + align-items: start; + justify-content: space-between; */ + } + >>>.el-calendar__header { + display: none; + } + >>>.el-calendar__body{ + padding: 0; + } + >>>.el-calendar-table:not(.is-range) td.next { + /*闅愯棌涓嬩釜鏈堢殑鏃ユ湡*/ + display: none; + } + >>>.el-calendar-day{ + height: 40px; + } + >>>.el-calendar-table td{ + border: 0; + font-size: 14px; + } + >>>.el-calendar-table tr td:first-child{ + border-left: 0; + } + .control{ + display: flex; + align-items: center; + justify-content: space-between; + box-sizing: border-box; + padding: 0px 0 10px; + } + .control .el-button{ + width: 32px; + height: 32px; + border-radius: 8px; + border: 1px solid #E8E8E8; + background: #fff; + padding: 0; + color: #0166E2; + font-size: 20px; + } + .list2-item{ + line-height: 22px; + display: flex; + margin-bottom: 12px; + font-size: 14px; + } + .right-3-tab{ + display: flex; + align-items: center; + margin-bottom: 12px; + } + .tab-item{ + width: 50%; + box-sizing: border-box; + text-align: center; + padding: 14px 0; + font-size: 20px; + background: #F5F7FB; + color: #333333; + } + .tab-item.active{ + background: #fff; + color: #FF3838; + } + .right-3-list{ + padding: 0 12px 8px; + box-sizing: border-box; + height: 390px; + overflow-y: auto; + } + .list3-item{ + padding: 6px 4px; + margin: 8px 0; + } + .list3-item:hover{ + background: rgba(58, 123, 250,0.05); + } + .list3-item-title{ + display: flex; + align-items: start; + margin-bottom: 10px; + } + .list3-item-info{ + display: flex; + align-items: center; + justify-content: space-between; + color: #666666; + font-size: 14px; + } + .left-2{ + display: grid; + grid-template-columns: repeat(7, 1fr); + height: 777px; + } + .left-2-item{ + border-right: 1px solid #F1F1F1; + overflow: hidden !important; + } + .left-2-item:nth-last-child(1){ + border-right: 0; + } + .left-2-item:hover{ + background: rgba(58,123,250,0.05); + } + .left-2-item:hover .left-item-title span{ + color: #3A7BFA !important; + } + .left-item-title{ + border-bottom: 1px solid #F1F1F1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 20px 0; + } + .left-item-body{ + box-sizing: border-box; + padding: 5px; + height: 693px; + overflow-y: auto; + } + .body-item{ + background: #70A090; + border-radius: 16px; + overflow: hidden; + margin-bottom: 8px; + cursor: pointer; + } + .body-item.color0{ + background: #70A090; + } + .body-item.color1{ + background: #EBD476; + } + .body-item.color2{ + background: #FF3838; + } + .body-item>div{ + height: calc(100% - 16px); + margin-top: 16px; + background: rgba(255, 255, 255,0.9); + padding: 8px 8px 16px; + display: flex; + flex-direction: column; + } + .search_thing { + height: 50px; + margin-bottom: 26px; } - .cart-3 div, - .cart-4 div, - .cart-5 div, - .cart-6 div { - width: 100%; - height: calc(100% - 30px); + .search_label { + width: 120px; + font-size: 14px; + text-align: left; + margin-bottom: 10px; } - - .card p { - width: 100%; - line-height: 30px; - } - - .cart-3, - .cart-5 { - margin-right: 10px; - } + >>>.el-calendar-day span{ + display: inline-block; + width: 30px; + height: 30px; + line-height: 30px; + text-align: center; + border-radius: 4px; + } + >>>.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; + } + >>>.el-calendar-day:hover{ + background: transparent; + } + >>>.el-calendar-day span:hover{ + background: #3A7BFA !important; + color: #fff !important; + } + >>>.el-tag--dark{ + border: 0; + } </style> <template> <div class="index"> - <div class="no no1"> - <div class="left"> - <div class="left-1 card"> + <el-row :gutter="25"> + <el-col :xs="24" :sm="24" :md="14" :lg="14" :xl="14"> + <div class="left-1"> <div class="say"> <div style="display: flex;align-items: center;flex-wrap: wrap;"> <div class="say-1">{{user.name}} 鎮ㄥソ锛佺鎮ㄥ紑蹇冩瘡涓�澶�</div> @@ -190,144 +285,368 @@ </div> </div> </div> - <div class="left-2"> - <div class="card card-1"> - <div class="label"> - <p class="p1">浠婃棩瀹㈡埛娑堣垂</p> - <p class="p2">{{data.data1.data1}}</p> + <div class="left-2 card" v-loading="workLoading" style="overflow: hidden;"> + <div class="left-2-item" v-for="(item,index) in workDay" :key="index"> + <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}" @click="goAddList(m)"> + <div> + <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> + </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" @click="openNotice"> + <div class="img"> + <img src="../../../static/img/index-0.svg" alt=""> + </div> + <div class="mun"> + <p style="font-size: 20px;">{{getNumberFourTypes.totalNumberOfMessages}}</p> + <p style="font-size: 14px;margin-bottom: 10px;">鎴戠殑寰呭姙</p> + </div> + </div> + <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;">{{ getNumberFourTypes.totalNumberOfReadMessages }}</p> + <p style="font-size: 14px;margin-bottom: 10px;">宸插姙浜嬪疁</p> + </div> + </div> + <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;">{{ getNumberFourTypes.remainingToDo }}</p> + <p style="font-size: 14px;margin-bottom: 10px;">鍓╀綑寰呭姙</p> + </div> + </div> + <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;">{{ 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> + <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"> + <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> + <el-button class="nextm" @click="nextMonth(calendarValue)" icon="el-icon-arrow-right"></el-button> + </div> + <el-calendar v-model="calendarValue"> + <template + slot="dateCell" + slot-scope="{date, data}"> + <span> + {{ data.day.split('-').slice(2)+'' }} + </span> + </template> + </el-calendar> + </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(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="right-3-tab"> + <div class="tab-item" style="cursor: pointer;" :class="{active:currentIndex==4}" @click="currentIndex=4">棰勮鎻愰啋</div> + <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" :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=""> + <p>{{ m.theme }}</p> + </div> + <div class="list3-item-info"> + <p style="width: 73%;-webkit-line-clamp: 1;cursor: pointer;" class="ellipsis-multiline" @click="goNoticeDetail(m)"> + <!-- 缂栧彿<span style="color:#3A7BFA;"> SB20240101-001 </span>鐨勮澶囧皢浜�2023-09-09 11:11:11杩囨湡 --> + {{ m.content }} + </p> + <p>{{ m.createTime }}</p> + </div> + </div> + </scroll-pagination> + <div v-if="list.length<1&&!listLoading" style="color:#909399;font-size:14px;text-align: center;margin-top:80px" >鏆傛棤鏁版嵁</div> + </div> + </div> + </el-col> + </el-row> + <el-dialog title="鏃ョ▼娣诲姞" :visible.sync="dialogVisible" width="400px"> + <div class="body" style="max-height: 60vh;"> + <el-row> + <el-col class="search_thing" :span="22"> + <div class="search_label"><span style="color: red;margin-right: 4px;">*</span>鏃堕棿锛�</div> + <div class="search_input"> + <el-date-picker + v-model="query.time" + type="datetime" + placeholder="閫夋嫨鏃ユ湡鏃堕棿" + size="small" + value-format="yyyy-MM-dd HH:mm:ss" style="width: 100%;" format="yyyy-MM-dd HH:mm:ss"> + </el-date-picker> </div> - <div class="icon"> - <i class="font icon-a-Group1139"></i> + </el-col> + <el-col class="search_thing" :span="22"> + <div class="search_label"><span style="color: red;margin-right: 4px;">*</span>鍐呭锛�</div> + <div class="search_input"> + <el-input v-model="query.text" type="textarea" + :rows="2" size="small" placeholder="璇疯緭鍏ュ唴瀹�"></el-input> </div> - </div> - <div class="card card-1"> - <div class="label"> - <p class="p1">浠婃棩瀹為檯娑堣垂</p> - <p class="p2">{{data.data1.data2}}</p> - </div> - <div class="icon"> - <i class="font icon-a-Group1139"></i> - </div> - </div> - <div class="card card-1"> - <div class="label"> - <p class="p1">浠婃棩鎴愭湰</p> - <p class="p2">{{data.data1.data3}}</p> - </div> - <div class="icon"> - <i class="font icon-qiandai" style="color: #FF9900;font-size: 2.4vw;"></i> - </div> - </div> - <div class="card card-1" style="margin-right: 0;"> - <div class="label"> - <p class="p1">浠婃棩瀹為檯鎴愭湰</p> - <p class="p2">{{data.data1.data4}}</p> - </div> - <div class="icon"> - <i class="font icon-qiandai" style="color: #FF9900;font-size: 2.4vw;"></i> - </div> - </div> - </div> + </el-col> + </el-row> </div> - <div class="right card"> - <p>甯哥敤鍔熻兘</p> - <div class="card-2" @click="openComponent('璐㈠姟涓婃姤')"> - <div class="icon"> - <i class="font icon-a-Group1236" style="color: #3A7BFA;"></i> - </div> - <div class="text">璐㈠姟涓婃姤</div> - </div> - <div class="card-2" @click="openComponent('杩涚矇涓婃姤')"> - <div class="icon"> - <i class="font icon-a-Group1122" style="color: #34BD66;"></i> - </div> - <div class="text">杩涚矇涓婃姤</div> - </div> - <div class="card-2" @click="openComponent('浜哄憳绠$悊')"> - <div class="icon"> - <i class="font icon-a-Group1124" style="color: #FF9900;"></i> - </div> - <div class="text">浜哄憳绠$悊</div> - </div> - <div class="card-2" @click="openComponent('瑙掕壊绠$悊')"> - <div class="icon"> - <i class="font icon-a-Group1126" style="color: #3A7BFA;"></i> - </div> - <div class="text">瑙掕壊绠$悊</div> - </div> - <div class="card-2" @click="openComponent('瀹㈡埛绠$悊')"> - <div class="icon"> - <i class="font icon-a-Group1124" style="color: #34BD66;"></i> - </div> - <div class="text">瀹㈡埛绠$悊</div> - </div> - <div class="card-2" @click="openComponent('椤圭洰绠$悊')"> - <div class="icon"> - <i class="font icon-a-Group1232" style="color: #FF9900;"></i> - </div> - <div class="text">椤圭洰绠$悊</div> - </div> - </div> - </div> - <div class="no no-2"> - <div class="card cart-3"> - <p>涓�鍛ㄥ鎴锋秷璐�</p> - <div id="card-1"></div> - </div> - <div class="card cart-4"> - <p>涓�鍛ㄥ鎴峰疄闄呮秷璐�</p> - <div id="card-2"></div> - </div> - </div> - <div class="no no-2"> - <div class="card cart-5"> - <p>椤圭洰瀹㈡埛鎴愭湰</p> - <div id="card-3"></div> - </div> - <div class="card cart-6"> - <p>椤圭洰瀹為檯鎴愭湰</p> - <div id="card-4"></div> - </div> - </div> + <span slot="footer" class="dialog-footer"> + <el-row> + <el-button @click="handleCancel">鍙� 娑�</el-button> + <el-button type="primary" @click="submit" :loading="loading">纭� 瀹�</el-button> + </el-row> + </span> + </el-dialog> </div> </template> <script> - import * as echarts from 'echarts'; + import { + 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, + EchartModule + }, data() { return { user: {}, now: null, - data: { - data1: {}, - data2: [], - data3: [], - data4: [], - data5: [] - }, - myChart1: null, - myChart2: null, - myChart3: null, - myChart4: null + calendarValue: new Date(), + currentIndex:4, + dialogVisible:false, + query:{ + time:'', + text:'' + }, + loading:false, + workLoading:false, + workList:[], + workDay:[], + weekdays:[], + listScheduleByMe:[], + scheduleLoading:false, + list:[], + currentPage:1, + pageSize: 8, // 涓�椤�7鏉� + total: null, + listLoading: true, // 缁勪欢loading鐨勫睍绀�,榛樿涓簍rue + finishLoding: false, // 鍔犺浇瀹屾垚锛屾樉绀哄凡缁忔病鏈夋洿澶氫簡 + 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:{ + calendarValue(val){ + 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.user = JSON.parse(localStorage.getItem('user')) this.nowTime() - this.myChart1 = echarts.init($('#card-1')[0]); - this.myChart2 = echarts.init($('#card-2')[0]); - this.myChart3 = echarts.init($('#card-3')[0]); - this.myChart4 = echarts.init($('#card-4')[0]); - this.getDataList() setInterval(() => { this.nowTime() }, 1000) - setInterval(() => { - this.getDataList() - }, 30000) + this.weekdays = this.getWeekdaysForNextWeek() + this.init(); + this.currentPage = 1; + this.keyMap = {} + this.list = []; + this.getList(); + 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() + },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瀛樺湪锛岃〃绀虹紦瀛樻湁鍊硷紝閭d箞闃绘璇锋眰 + if(value) { + return + } + // value涓嶅瓨鍦紝琛ㄧず绗竴娆¤姹�,璁剧疆鍗犱綅 + this.keyMap[key] = 'temp' + if(this.currentPage==1){ + this.listLoading = true + } + if(this.list.length==0){ + this.finishLoding = false; + } + this.$axios.get(this.$api.informationNotification.page+'?size='+this.pageSize+'¤t='+this.currentPage+'&messageType='+this.currentIndex).then(res => { + if(res.code === 201){ + return + } + let list = res.data.records; + this.total = res.data.total; + if(list.length==0){ + this.finishLoding = true; + }else{ + if(list.length<this.pageSize){ + this.finishLoding = true; + } + this.list = this.list.concat(list) + if(this.total==this.list.length){ + this.finishLoding = true; + } + this.currentPage++; + } + this.listLoading = false + }) + }, nowTime() { var date = new Date(); var y = date.getFullYear(); @@ -354,345 +673,259 @@ } this.now = y + "-" + m + "-" + d + " " + h + ":" + min + ":" + s; }, - openComponent(str) { - var str1 = {} - var str2 = -1 - switch (str) { - case '璐㈠姟涓婃姤': - str1 = { - k: 6, - v: "璐㈠姟涓婃姤", - i: "font icon-a-Group1236", - u: "finance-submit" - } - break - case '杩涚矇涓婃姤': - str1 = { - k: 5, - v: "杩涚矇涓婃姤", - i: "font icon-a-Group1122", - u: "fans-submit" - } - break - case '浜哄憳绠$悊': - str1 = { - k: 8, - v: "浜哄憳绠$悊", - i: "font icon-a-Group1124", - u: "person-manage" - } - break - case '瑙掕壊绠$悊': - str1 = { - k: 7, - v: "瑙掕壊绠$悊", - i: "font icon-a-Group1126", - u: "role-manage" - } - break - case '瀹㈡埛绠$悊': - str1 = { - k: 4, - v: "瀹㈡埛绠$悊", - i: "font icon-24gl-clipboardList", - u: "custom-enum" - } - str2 = 4 - break - case '椤圭洰绠$悊': - str1 = { - k: 11, - v: "椤圭洰绠$悊", - i: "font icon-24gl-clipboardList", - u: "product-enum" - } - str2 = 4 - break - } - this.$parent.addTab(str1, str2) - }, - initEcharts1() { - var myChart = this.myChart1 - var option; - let dataX = [] - let data = []; - this.data.data2.forEach(a => { - dataX.push(a.date) - data.push(a.account_consumptions) + nextMonth(value) { + let year = this.calendarValue.getFullYear();// 褰撳墠骞翠唤 + let month = this.calendarValue.getMonth() + 1;// 褰撳墠鏈堜唤 + let day = this.calendarValue.getDate();// 褰撳墠澶╂暟 + let nextyear = year; + let nextmonth = parseInt(month) + 1; + // 鍒ゆ柇涓嬩竴鏈堟槸鍚︿細杩涘叆涓嬩竴骞� + if (nextmonth === 13) { + nextyear = parseInt(year) + 1; + nextmonth = 1; + } + // 璁$畻涓嬩竴骞翠笅涓�涓湀鏈夊灏戝ぉ + let nextday = new Date(nextyear, nextmonth, 0); + let nextdays = nextday.getDate(); + if (day > nextdays) { + day = nextdays; + if (day < 10) { + day = '0' + day; + } + } + if (nextmonth < 10) { + nextmonth = '0' + nextmonth; + } + let nexttime = nextyear + '-' + nextmonth + '-' + day; + + // 灏嗗緱鍒扮殑骞存湀鏃ユ牸寮忚浆鎹负鏍囧噯鏃堕棿锛屼笌楗夸簡涔堟椂闂存牸寮忕浉鍚屾墠鑳借仈鍔� + this.calendarValue = new Date(nexttime); + }, + prevMonth(time) { + let year = this.calendarValue.getFullYear();// 褰撳墠骞翠唤 + let month = this.calendarValue.getMonth() + 1;// 褰撳墠鏈堜唤 + let day = this.calendarValue.getDate();// 褰撳墠澶╂暟 + let prevyear = year; + let prevmonth = parseInt(month) - 1; + // 鍒ゆ柇涓婁竴鏈堟槸鍚︿細杩涘叆涓婁竴骞� + if (prevmonth === 0) { + prevyear = parseInt(year) - 1; + prevmonth = 12; + } + // 璁$畻涓婁竴骞翠笂涓�涓湀鏈夊灏戝ぉ + let prevday = new Date(prevyear, prevmonth, 0); + let prevdays = prevday.getDate(); + if (day > prevdays) { + day = prevdays; + if (day < 10) { + day = '0' + day; + } + } + if (prevmonth < 10) { + prevmonth = '0' + prevmonth; + } + let prevtime = prevyear + '-' + prevmonth + '-' + day; + + // 灏嗗緱鍒扮殑骞存湀鏃ユ牸寮忚浆鎹负鏍囧噯鏃堕棿锛屼笌楗夸簡涔堟椂闂存牸寮忕浉鍚屾墠鑳借仈鍔� + this.calendarValue = new Date(prevtime); + }, + handleCancel(){ + this.dialogVisible = false; + this.query = { + time:'', + text:'' + } + }, + submit(){ + if(!this.query.time){ + this.$message.error('鏃堕棿鏈~鍐�') + return + } + if(!this.query.text){ + this.$message.error('鍐呭鏈~鍐�') + return + } + this.loading = true; + this.$axios.post(this.$api.report.addSchedule, this.query).then(res => { + this.loading = false; + if (res.code == 201) { + this.$message.error('鎿嶄綔澶辫触') + return + } + this.$message.success('淇濆瓨鎴愬姛') + this.handleCancel() + this.getScheduleByMe() + }) + }, + init(){ + this.workLoading = true; + this.$axios.get(this.$api.report.calendarWorkByWeek).then(res => { + if (res.code == 201) return + this.workLoading = false; + this.workList = []; + for(let i=0;i<7;i++){ + this.workList.push(res.data[`work${i}`]) + } + this.workDay = res.data.weekDays.map(m=>{ + let arr = m.split('-') + return arr[2] + }) + }) + }, + 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++) { + let date = new Date(); + date.setDate(date.getDate() - i); // 浠婂ぉ涔嬪悗鐨勬棩瀛� + let day = date.getDay(); // 0-6 浠h〃鏄熸湡鏃ュ埌鏄熸湡鍏� + weekdays.push(day); + } + weekdays.reverse() + weekdays = weekdays.map(m=>{ + let day ='' + switch (m) { + case 0: + day = '鏄熸湡澶�' + break; + case 1: + day = '鏄熸湡涓�' + break; + case 2: + day = '鏄熸湡浜�' + break; + case 3: + day = '鏄熸湡涓�' + break; + case 4: + day = '鏄熸湡鍥�' + break; + case 5: + day = '鏄熸湡浜�' + break; + case 6: + day = '鏄熸湡鍏�' + break; + } + return day + }) + return weekdays; + }, + getScheduleByMe(){ + this.scheduleLoading = true; + this.$axios.post(this.$api.report.ScheduleByMe, { + date:getYearAndMonthAndDays(this.calendarValue) + }).then(res => { + this.loading = false; + this.scheduleLoading = false; + if (res.code == 201) { + return + } + this.listScheduleByMe = res.data.map(m=>{ + if(m.scheduleTime){ + let time = m.scheduleTime.split(' ')[1].split(':') + m.scheduleTimes = time[0] + ':' + time[1] + }else{ + m.scheduleTimes = '' + } + return m + }) + }) + }, + goNoticeDetail(row){ + 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: "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) }) - let yMax = 1000; - let dataShadow = []; - for (let i = 0; i < data.length; i++) { - dataShadow.push(yMax); - } - option = { - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'shadow' - } - }, - grid: { - top: "20px", - left: "50px", - bottom: "30px", - right: "20px" - }, - title: {}, - xAxis: { - type: 'category', - data: dataX, - axisLabel: { - color: '#333' - }, - }, - yAxis: { - axisLine: { - show: false - }, - axisTick: { - show: false - }, - axisLabel: { - color: '#333' - }, - splitLine: { - lineStyle: { - type: [10, 10], - dashOffset: 20 - }, - show: true - } - }, - series: [{ - type: 'bar', - barWidth: '20%', - roam: false, - itemStyle: { - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ - offset: 0, - color: '#ffd062' - }, - { - offset: 0.5, - color: '#ffa844' - }, - { - offset: 1, - color: '#f59433' - } - ]), - barBorderRadius: [8, 8, 0, 0] - }, - data: data - }] - }; - option && myChart.setOption(option); }, - initEcharts2() { - var myChart = this.myChart2 - var option; - let dataX = [] - let data = []; - this.data.data3.forEach(a => { - dataX.push(a.date) - data.push(a.consumption) - }) - let yMax = 1000; - let dataShadow = []; - for (let i = 0; i < data.length; i++) { - dataShadow.push(yMax); - } - option = { - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'shadow' - } - }, - grid: { - top: "20px", - left: "50px", - bottom: "30px", - right: "20px" - }, - title: {}, - xAxis: { - type: 'category', - data: dataX, - axisLabel: { - color: '#333' - }, - }, - yAxis: { - axisLine: { - show: false - }, - axisTick: { - show: false - }, - axisLabel: { - color: '#333' - }, - splitLine: { - lineStyle: { - type: [10, 10], - dashOffset: 20 - }, - show: true - } - }, - series: [{ - type: 'bar', - barWidth: '20%', - itemStyle: { - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ - offset: 0, - color: '#74b3fe' - }, - { - offset: 0.5, - color: '#4982f3' - }, - { - offset: 1, - color: '#1c56df' - } - ]), - barBorderRadius: [8, 8, 0, 0] - }, - data: data - }] - }; - option && myChart.setOption(option); - }, - initEcharts3() { - var myChart = this.myChart3 - var dataX = [] - var dataY = [] - this.data.data4.forEach(a => { - dataX.push(a.product) - dataY.push(a.customerCosts) - }) - var option; - option = { - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'shadow' - } - }, - grid: { - top: "20px", - left: "50px", - bottom: "30px", - right: "20px" - }, - xAxis: { - type: 'category', - boundaryGap: false, - data: dataX, - axisLabel: { - interval: 0, - } - }, - yAxis: { - type: 'value', - splitLine: { - lineStyle: { - type: [10, 10], - dashOffset: 20 - }, - show: true - } - }, - series: [{ - data: dataY, - type: 'line', - areaStyle: {}, - smooth: true, - symbolSize: 7, - lineStyle: { - color: '#3c7aff' - }, - itemStyle: { - color: '#3c7aff' - }, - areaStyle: { - color: '#E5EEFF' - } - }] - }; - option && myChart.setOption(option); - }, - initEcharts4() { - var myChart = this.myChart4 - var dataX = [] - var dataY = [] - this.data.data5.forEach(a => { - dataX.push(a.product) - dataY.push(a.actualCost) - }) - var option; - option = { - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'shadow' - } - }, - grid: { - top: "20px", - left: "50px", - bottom: "30px", - right: "20px" - }, - xAxis: { - type: 'category', - boundaryGap: false, - data: dataX, - axisLabel: { - interval: 0 - } - }, - yAxis: { - type: 'value', - splitLine: { - lineStyle: { - type: [10, 10], - dashOffset: 20 - }, - show: true - } - }, - series: [{ - data: dataY, - type: 'line', - areaStyle: {}, - smooth: true, - symbolSize: 7, - lineStyle: { - color: '#f59433' - }, - itemStyle: { - color: '#f59433' - }, - areaStyle: { - color: '#FFF6DE' - } - }] - }; - option && myChart.setOption(option); - }, - getDataList() { - this.$axios.get(this.$api.dataReporting.getDataList).then(res => { - this.data = res.data - this.initEcharts1() - this.initEcharts2() - this.initEcharts3() - this.initEcharts4() - }) - } - } + openNotice(){ + this.$parent.openNotice() + } + }, + deactivated(){ + this.timer&&clearInterval(this.timer) + } } -</script> \ No newline at end of file +</script> -- Gitblit v1.9.3