fix:去除权限验证,大屏今日巡查联调,修改echart图滚动逻辑,联调工单导出
This commit is contained in:
		
							parent
							
								
									70eb9f8e5e
								
							
						
					
					
						commit
						269fc702fe
					
				| @ -2,7 +2,7 @@ | ||||
|  * @Author: SunTao 328867980@qq.com | ||||
|  * @Date: 2024-11-28 10:26:24 | ||||
|  * @LastEditors: SunTao 328867980@qq.com | ||||
|  * @LastEditTime: 2024-11-28 10:26:24 | ||||
|  * @LastEditTime: 2024-12-05 13:53:53 | ||||
|  * @FilePath: \znxjxt-ui\src\api\xj\inspection\center.js | ||||
|  * @Description: 巡检中心-预警中心接口 | ||||
|  */ | ||||
| @ -32,3 +32,20 @@ export function markNoticeRead(id) { | ||||
|     method: "post", | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| // 标记所有通知为已读
 | ||||
| export function noticeReadAll() { | ||||
|   return request({ | ||||
|     url: "/notice/readAll", | ||||
|     method: "post", | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| // 批量删除通知
 | ||||
| export function deleteNotice(ids) { | ||||
|   return request({ | ||||
|     url: "/notice/remove", | ||||
|     method: "post", | ||||
|     data: ids, | ||||
|   }); | ||||
| } | ||||
| @ -130,3 +130,12 @@ export function getDefectTypes() { | ||||
|     method: "get", | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| // 获取大屏通知列表
 | ||||
| export function getNoticeList(params) { | ||||
|   return request({ | ||||
|     url: "/notice/list", | ||||
|     method: "get", | ||||
|     params, | ||||
|   }); | ||||
| } | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
|  * @Author: SunTao 328867980@qq.com | ||||
|  * @Date: 2024-10-14 10:04:12 | ||||
|  * @LastEditors: SunTao 328867980@qq.com | ||||
|  * @LastEditTime: 2024-12-03 11:43:45 | ||||
|  * @LastEditTime: 2024-12-05 15:34:41 | ||||
|  * @FilePath: \znxjxt-ui\src\api\xj\task.js | ||||
|  * @Description: 巡检任务管理接口 | ||||
|  */ | ||||
| @ -70,6 +70,7 @@ export function exportDefectData(params) { | ||||
|   return request({ | ||||
|     url: "/xj/defect/exportNewDefectByTaskId", | ||||
|     method: "get", | ||||
|     responseType: "blob", | ||||
|     params, | ||||
|   }); | ||||
| } | ||||
|  | ||||
| @ -1,20 +1,20 @@ | ||||
| import tab from './tab' | ||||
| import auth from './auth' | ||||
| import cache from './cache' | ||||
| import modal from './modal' | ||||
| import download from './download' | ||||
| import tab from "./tab"; | ||||
| import auth from "./auth"; | ||||
| import cache from "./cache"; | ||||
| import modal from "./modal"; | ||||
| import download from "./download"; | ||||
| 
 | ||||
| export default { | ||||
|   install(Vue) { | ||||
|     // 页签操作
 | ||||
|     Vue.prototype.$tab = tab | ||||
|     Vue.prototype.$tab = tab; | ||||
|     // 认证对象
 | ||||
|     Vue.prototype.$auth = auth | ||||
|     Vue.prototype.$auth = auth; | ||||
|     // 缓存对象
 | ||||
|     Vue.prototype.$cache = cache | ||||
|     Vue.prototype.$cache = cache; | ||||
|     // 模态框对象
 | ||||
|     Vue.prototype.$modal = modal | ||||
|     Vue.prototype.$modal = modal; | ||||
|     // 下载文件
 | ||||
|     Vue.prototype.$download = download | ||||
|   } | ||||
| } | ||||
|     Vue.prototype.$download = download; | ||||
|   }, | ||||
| }; | ||||
|  | ||||
| @ -76,8 +76,7 @@ | ||||
|                 病害类型: | ||||
|                 {{ item.type || "暂无数据" }} | ||||
|                 <span v-if="bottomTipClick === '1'"> | ||||
|                   病害面积:{{ item.area }}平方米 病害长度{{ item.length }}米 | ||||
|                 </span> | ||||
|                   病害面积:{{ item.area }}平方米 病害长度:{{ item.length * 1 <= 0 ? "暂无数据" : `${item.length}米` }} </span> | ||||
|               </el-checkbox> | ||||
|             </el-checkbox-group> | ||||
|           </div> | ||||
| @ -853,7 +852,7 @@ export default { | ||||
| 
 | ||||
| // 图片信息 | ||||
| .rect-image { | ||||
|   width: 67%; | ||||
|   width: 70%; | ||||
|   position: absolute; | ||||
|   top: 0; | ||||
| } | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
|  * @Author: SunTao 328867980@qq.com | ||||
|  * @Date: 2024-10-21 09:59:32 | ||||
|  * @LastEditors: SunTao 328867980@qq.com | ||||
|  * @LastEditTime: 2024-12-03 14:52:09 | ||||
|  * @LastEditTime: 2024-12-05 17:13:51 | ||||
|  * @FilePath: \znxjxt-ui\src\views\big-screen\disease-components\traffic-safety.vue | ||||
|  * @Description: 病害巡检大屏-今日巡查 | ||||
| --> | ||||
| @ -14,60 +14,36 @@ | ||||
|     </div> | ||||
|     <div class="traffic-right"> | ||||
|       <div class="right-sum" @click="showDialog('')"> | ||||
|         <span>{{ all }}</span | ||||
|         >个 | ||||
|         <span>{{ all }}</span>个 | ||||
|       </div> | ||||
|       <!-- <div class="right-rate"> | ||||
|         <span> {{ scale }} </span>% | ||||
|       </div> --> | ||||
|       <div class="right-rate"> | ||||
|         较昨日<span class="up">增长</span> 50.26% | ||||
|         <i class="el-icon-top"></i> | ||||
|         较昨日<span v-if="state === '增加'" class="up">{{ state }}</span><span v-if="state === '减少'" class="bottom">{{ state | ||||
|           }}</span> {{ count }}个 | ||||
|         <i v-if="state === '增加'" class="el-icon-top"></i> | ||||
|         <i v-if="state === '减少'" class="el-icon-bottom"></i> | ||||
|       </div> | ||||
|     </div> | ||||
| 
 | ||||
|     <!-- 病害巡检弹窗 --> | ||||
|     <el-dialog | ||||
|       title="当前病害查看" | ||||
|       :visible.sync="showDialogVisible" | ||||
|       width="75rem" | ||||
|       append-to-body | ||||
|       :close-on-click-modal="false" | ||||
|       destroy-on-close | ||||
|       @close="screenCancel" | ||||
|     > | ||||
|     <el-dialog title="当前病害查看" :visible.sync="showDialogVisible" width="75rem" append-to-body | ||||
|       :close-on-click-modal="false" destroy-on-close @close="screenCancel"> | ||||
|       <div class="today-content"> | ||||
|         <div class="today-select"> | ||||
|           <div> | ||||
|             <el-select | ||||
|               :popper-append-to-body="false" | ||||
|               v-model="roadSelect" | ||||
|               @change="changeRoad" | ||||
|               clearable | ||||
|               placeholder="请选择路段" | ||||
|             > | ||||
|               <el-option | ||||
|                 v-for="item in roadList" | ||||
|                 :key="`${item.name}-${item.index}`" | ||||
|                 :label="item.name" | ||||
|                 :value="item.name" | ||||
|               /> | ||||
|             <el-select :popper-append-to-body="false" v-model="roadSelect" @change="changeRoad" clearable | ||||
|               placeholder="请选择路段"> | ||||
|               <el-option v-for="item in roadList" :key="`${item.name}-${item.index}`" :label="item.name" | ||||
|                 :value="item.name" /> | ||||
|             </el-select> | ||||
|           </div> | ||||
|           <div> | ||||
|             <el-select | ||||
|               :popper-append-to-body="false" | ||||
|               v-model="companySelect" | ||||
|               clearable | ||||
|               @change="changeCompany" | ||||
|               placeholder="请选择分公司" | ||||
|             > | ||||
|               <el-option | ||||
|                 v-for="item in companyList" | ||||
|                 :key="`${item.name}-${item.index}`" | ||||
|                 :label="item.name" | ||||
|                 :value="item.name" | ||||
|               /> | ||||
|             <el-select :popper-append-to-body="false" v-model="companySelect" clearable @change="changeCompany" | ||||
|               placeholder="请选择分公司"> | ||||
|               <el-option v-for="item in companyList" :key="`${item.name}-${item.index}`" :label="item.name" | ||||
|                 :value="item.name" /> | ||||
|             </el-select> | ||||
|           </div> | ||||
|         </div> | ||||
| @ -100,6 +76,10 @@ export default { | ||||
|       all: 0, | ||||
|       // 病害增长率 | ||||
|       scale: 0, | ||||
|       // 较昨日增长、减少 | ||||
|       state: "——", | ||||
|       // 增长、减少数量 | ||||
|       count: "——", | ||||
|       // 弹窗显隐控制 | ||||
|       showDialogVisible: false, | ||||
|       // 左侧路段选择绑定 | ||||
| @ -137,6 +117,8 @@ export default { | ||||
|         if (code === 200) { | ||||
|           this.today = data.today; | ||||
|           this.all = data.all; | ||||
|           this.state = data.state; | ||||
|           this.count = data.count; | ||||
|           this.scale = data.scale; | ||||
|         } | ||||
|       }); | ||||
| @ -645,13 +627,14 @@ export default { | ||||
|     span { | ||||
|       cursor: pointer; | ||||
|       font-family: "DouYu"; | ||||
|       background: linear-gradient( | ||||
|         to bottom, | ||||
|       background: linear-gradient(to bottom, | ||||
|           #ffffff, | ||||
|         #2773d0 | ||||
|       ); /*设置渐变的方向从左到右 颜色从ff0000到ffff00*/ | ||||
|       background-clip: text; /*将设置的背景颜色限制在文字中*/ | ||||
|       -webkit-text-fill-color: transparent; /*给文字设置成透明*/ | ||||
|           #2773d0); | ||||
|       /*设置渐变的方向从左到右 颜色从ff0000到ffff00*/ | ||||
|       background-clip: text; | ||||
|       /*将设置的背景颜色限制在文字中*/ | ||||
|       -webkit-text-fill-color: transparent; | ||||
|       /*给文字设置成透明*/ | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
| @ -685,13 +668,14 @@ export default { | ||||
| 
 | ||||
|         font-size: 1.2rem; | ||||
|         font-family: "DouYu"; | ||||
|         background: linear-gradient( | ||||
|           to bottom, | ||||
|         background: linear-gradient(to bottom, | ||||
|             #ffffff, | ||||
|           #21f1e1 | ||||
|         ); /*设置渐变的方向从左到右 颜色从ff0000到ffff00*/ | ||||
|         background-clip: text; /*将设置的背景颜色限制在文字中*/ | ||||
|         -webkit-text-fill-color: transparent; /*给文字设置成透明*/ | ||||
|             #21f1e1); | ||||
|         /*设置渐变的方向从左到右 颜色从ff0000到ffff00*/ | ||||
|         background-clip: text; | ||||
|         /*将设置的背景颜色限制在文字中*/ | ||||
|         -webkit-text-fill-color: transparent; | ||||
|         /*给文字设置成透明*/ | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
| @ -737,10 +721,21 @@ export default { | ||||
|         padding: 0 0.5rem; | ||||
|       } | ||||
| 
 | ||||
|       .bottom { | ||||
|         color: #19eb27; | ||||
|         padding: 0 0.5rem; | ||||
|       } | ||||
| 
 | ||||
| 
 | ||||
|       .el-icon-top { | ||||
|         font-size: 1.5rem; | ||||
|         color: red; | ||||
|       } | ||||
| 
 | ||||
|       .el-icon-bottom { | ||||
|         font-size: 1.5rem; | ||||
|         color: #19eb27; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -768,7 +763,7 @@ export default { | ||||
|     // height: 10%; | ||||
|     display: flex; | ||||
| 
 | ||||
|     > div { | ||||
|     >div { | ||||
|       width: 50%; | ||||
|       padding: 0 2rem; | ||||
| 
 | ||||
| @ -789,6 +784,7 @@ export default { | ||||
|         .el-select-dropdown { | ||||
|           background-color: #102649; | ||||
|           border-color: #08204f; | ||||
| 
 | ||||
|           .el-scrollbar { | ||||
|             .el-select-dropdown__wrap { | ||||
|               .el-scrollbar__view { | ||||
|  | ||||
| @ -10,17 +10,8 @@ | ||||
| <template> | ||||
|   <div class="content"> | ||||
|     <div class="traffic-select"> | ||||
|       <el-select | ||||
|         :popper-append-to-body="false" | ||||
|         v-model="itemSelect" | ||||
|         placeholder="请选择" | ||||
|       > | ||||
|         <el-option | ||||
|           v-for="item in trafficList" | ||||
|           :key="item.value" | ||||
|           :label="item.label" | ||||
|           :value="item.value" | ||||
|         /> | ||||
|       <el-select :popper-append-to-body="false" v-model="itemSelect" placeholder="请选择"> | ||||
|         <el-option v-for="item in trafficList" :key="item.value" :label="item.label" :value="item.value" /> | ||||
|       </el-select> | ||||
|     </div> | ||||
|     <div ref="trafficChart" class="traffic-echart"></div> | ||||
| @ -275,9 +266,9 @@ export default { | ||||
|             // 是否显示detail,即拖拽时候显示详细数值信息 | ||||
|             showDetail: false, | ||||
|             // 数据窗口范围的起始数值 | ||||
|             startValue: 0, | ||||
|             startValue: this.echartData.length > 6 ? this.echartData.length - 6 : 0, | ||||
|             // 数据窗口范围的结束数值(一页显示多少条数据) | ||||
|             endValue: 6, | ||||
|             endValue: this.echartData.length, | ||||
|             // empty:当前数据窗口外的数据,被设置为空。 | ||||
|             // 即不会影响其他轴的数据范围 | ||||
|             filterMode: "empty", | ||||
| @ -314,7 +305,7 @@ export default { | ||||
| }; | ||||
| </script> | ||||
| 
 | ||||
|   <style lang="scss" scoped> | ||||
| <style lang="scss" scoped> | ||||
| .content { | ||||
|   width: 100%; | ||||
|   height: 100%; | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
|  * @Author: SunTao 328867980@qq.com | ||||
|  * @Date: 2024-10-17 11:34:00 | ||||
|  * @LastEditors: SunTao 328867980@qq.com | ||||
|  * @LastEditTime: 2024-12-04 09:28:41 | ||||
|  * @LastEditTime: 2024-12-05 14:22:25 | ||||
|  * @FilePath: \znxjxt-ui\src\views\big-screen\index.vue | ||||
|  * @Description: 大屏首页 | ||||
| --> | ||||
| @ -22,51 +22,23 @@ | ||||
|       <div class="header-time"> | ||||
|         <!-- 消息中心 --> | ||||
|         <div class="header-news"> | ||||
|           <el-popover | ||||
|             placement="bottom-end" | ||||
|             width="400" | ||||
|             popper-class="screen-message-popover" | ||||
|             trigger="hover" | ||||
|           > | ||||
|           <el-popover placement="bottom-end" width="400" popper-class="screen-message-popover" trigger="hover"> | ||||
|             <div class="screen-message-content"> | ||||
|               <div class="message-content"> | ||||
|                 <fssm-scroll> | ||||
|                   <div | ||||
|                     class="message-item" | ||||
|                     v-for="(item, index) in messageList" | ||||
|                     :key="`message-item-${index}`" | ||||
|                   > | ||||
|                     <div | ||||
|                       class="item-top" | ||||
|                       @click="handleMessageItemClick(item.status)" | ||||
|                     > | ||||
|                 <fssm-scroll style="max-height: 12rem;"> | ||||
|                   <div class="message-item" v-for="(item, index) in messageList" :key="`message-item-${index}`"> | ||||
|                     <div class="item-top" @click="handleMessageItemClick(item.status)"> | ||||
|                       <div class="index"> | ||||
|                         <i | ||||
|                           v-if="item.title === '成功'" | ||||
|                           style="color: #67c23a" | ||||
|                           class="el-icon-success" | ||||
|                         ></i> | ||||
|                         <i | ||||
|                           v-if="item.title === '提醒'" | ||||
|                           style="color: #e6a23c" | ||||
|                           class="el-icon-info" | ||||
|                         ></i> | ||||
|                         <i | ||||
|                           v-if="item.title === '告警'" | ||||
|                           style="color: #909399" | ||||
|                           class="el-icon-warning" | ||||
|                         ></i> | ||||
|                         <i | ||||
|                           v-if="item.title === '错误'" | ||||
|                           style="color: #f56c6c" | ||||
|                           class="el-icon-error" | ||||
|                         ></i> | ||||
|                         <!-- <i v-if="item.title === '成功'" style="color: #67c23a" class="el-icon-success"></i> --> | ||||
|                         <i v-if="item.notificationType === 'WARNING'" style="color: #e6a23c" class="el-icon-info"></i> | ||||
|                         <i v-if="item.notificationType === 'REMIND'" style="color: #909399" class="el-icon-warning"></i> | ||||
|                         <!-- <i v-if="item.title === '错误'" style="color: #f56c6c" class="el-icon-error"></i> --> | ||||
|                       </div> | ||||
|                       <div class="time"> | ||||
|                         <span>{{ item.time }}</span> | ||||
|                         <span>{{ item.createdTime }}</span> | ||||
|                       </div> | ||||
|                       <div class="carNo"> | ||||
|                         <span>{{ item.car }}</span> | ||||
|                         <span>{{ item.title }}</span> | ||||
|                       </div> | ||||
|                     </div> | ||||
|                     <div class="item-content"> | ||||
| @ -76,16 +48,11 @@ | ||||
|                 </fssm-scroll> | ||||
|               </div> | ||||
|               <div class="message-footer"> | ||||
|                 <el-button | ||||
|                   @click="handleMessageClick" | ||||
|                   icon="el-icon-d-arrow-right" | ||||
|                   type="text" | ||||
|                   >查看更多</el-button | ||||
|                 > | ||||
|                 <el-button @click="handleMessageClick" icon="el-icon-d-arrow-right" type="text">查看更多</el-button> | ||||
|               </div> | ||||
|             </div> | ||||
|             <i slot="reference" class="el-icon-message-solid"> | ||||
|               <div class="num">48</div> | ||||
|               <div class="num">{{ noticeNum }}</div> | ||||
|             </i> | ||||
|           </el-popover> | ||||
|         </div> | ||||
| @ -101,58 +68,30 @@ | ||||
|     </div> | ||||
|     <div class="screen-middle"> | ||||
|       <div class="screen-left"> | ||||
|         <module-block | ||||
|           v-for="(item, index) in leftModuleList" | ||||
|           :key="`left-module-list-${index}`" | ||||
|           :width="item.width" | ||||
|           :height="item.height" | ||||
|           :title="item.title" | ||||
|           :class="item.class" | ||||
|         > | ||||
|           <template | ||||
|             ><component | ||||
|               :select="item.select" | ||||
|               :is="item.component" | ||||
|               :bottomTipClick="bottomTipClick" | ||||
|             ></component | ||||
|           ></template> | ||||
|         <module-block v-for="(item, index) in leftModuleList" :key="`left-module-list-${index}`" :width="item.width" | ||||
|           :height="item.height" :title="item.title" :class="item.class"> | ||||
|           <template> | ||||
|             <component :select="item.select" :is="item.component" :bottomTipClick="bottomTipClick"></component> | ||||
|           </template> | ||||
|           <template slot="operation" v-if="item.selectIsShow"> | ||||
|             <el-radio-group class="screen-checkBox" v-model="item.select"> | ||||
|               <el-radio-button | ||||
|                 v-for="(item, index) in selectTypeArr" | ||||
|                 :label="item.value" | ||||
|                 :key="`left-screen-${index}`" | ||||
|                 >{{ item.label }}</el-radio-button | ||||
|               > | ||||
|               <el-radio-button v-for="(item, index) in selectTypeArr" :label="item.value" | ||||
|                 :key="`left-screen-${index}`">{{ item.label }}</el-radio-button> | ||||
|             </el-radio-group> | ||||
|           </template> | ||||
|         </module-block> | ||||
|       </div> | ||||
|       <div class="screen-right"> | ||||
|         <module-block | ||||
|           v-for="(item, index) in rightModuleList" | ||||
|           :key="`right-module-list-${index}`" | ||||
|           :width="item.width" | ||||
|           :height="item.height" | ||||
|           :title="item.title" | ||||
|           :class="item.class" | ||||
|         > | ||||
|           <template | ||||
|             ><component | ||||
|               :select="item.select" | ||||
|               :is="item.component" | ||||
|               :bottomTipClick="bottomTipClick" | ||||
|               @imagePoint="getimagePoint" | ||||
|             ></component | ||||
|           ></template> | ||||
|         <module-block v-for="(item, index) in rightModuleList" :key="`right-module-list-${index}`" :width="item.width" | ||||
|           :height="item.height" :title="item.title" :class="item.class"> | ||||
|           <template> | ||||
|             <component :select="item.select" :is="item.component" :bottomTipClick="bottomTipClick" | ||||
|               @imagePoint="getimagePoint"></component> | ||||
|           </template> | ||||
|           <template slot="operation" v-if="item.selectIsShow"> | ||||
|             <el-radio-group class="screen-checkBox" v-model="item.select"> | ||||
|               <el-radio-button | ||||
|                 v-for="(item, index) in selectTypeArr" | ||||
|                 :label="item.value" | ||||
|                 :key="`right-screen-${index}`" | ||||
|                 >{{ item.label }}</el-radio-button | ||||
|               > | ||||
|               <el-radio-button v-for="(item, index) in selectTypeArr" :label="item.value" | ||||
|                 :key="`right-screen-${index}`">{{ item.label }}</el-radio-button> | ||||
|             </el-radio-group> | ||||
|           </template> | ||||
|         </module-block> | ||||
| @ -162,12 +101,9 @@ | ||||
|         <div class="road-checkBox" v-if="showIconList"> | ||||
|           <fssm-scroll class="road-scroll"> | ||||
|             <el-checkbox-group v-model="iconType" @change="handleChecked"> | ||||
|               <el-checkbox | ||||
|                 v-for="(item, index) in iconTypeList" | ||||
|                 :label="item.value" | ||||
|                 :key="`check-${index}`" | ||||
|                 >{{ item.label }}</el-checkbox | ||||
|               > | ||||
|               <el-checkbox v-for="(item, index) in iconTypeList" :label="item.value" :key="`check-${index}`">{{ | ||||
|                 item.label | ||||
|               }}</el-checkbox> | ||||
|             </el-checkbox-group> | ||||
|           </fssm-scroll> | ||||
|         </div> | ||||
| @ -179,40 +115,22 @@ | ||||
|           <!-- 图背景下选择框 --> | ||||
|           <div class="map-image-select"> | ||||
|             病害类型筛选: | ||||
|             <el-cascader | ||||
|               v-model="mapCareSelect" | ||||
|               popper-class="screen-index-cascader" | ||||
|               :options="dieaseOptions" | ||||
|               :props="{ | ||||
|             <el-cascader v-model="mapCareSelect" popper-class="screen-index-cascader" :options="dieaseOptions" :props="{ | ||||
|               checkStrictly: true, | ||||
|               emitPath: true, | ||||
|               children: 'subTypes', | ||||
|               }" | ||||
|               @change="getMapCare" | ||||
|               clearable | ||||
|             ></el-cascader> | ||||
|             }" @change="getMapCare" clearable></el-cascader> | ||||
|           </div> | ||||
|           <div class="map-care"> | ||||
|             <div | ||||
|               class="map-care-div" | ||||
|               :class="`map-care-div-${item.status}`" | ||||
|               v-for="(item, index) in mapCareList" | ||||
|               :key="`map-care-${index}`" | ||||
|               :style="{ left: item.left, top: item.top }" | ||||
|             > | ||||
|             <div class="map-care-div" :class="`map-care-div-${item.status}`" v-for="(item, index) in mapCareList" | ||||
|               :key="`map-care-${index}`" :style="{ left: item.left, top: item.top }"> | ||||
|               <span>{{ item.name }}</span> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
|         <!-- 地图 --> | ||||
|         <fssm-map | ||||
|           v-if="elementDiv !== 'OverviewScreen'" | ||||
|           ref="roadMap" | ||||
|           :showChange="true" | ||||
|           :controlStyle="{ top: '10%', left: '26%' }" | ||||
|           @feature-select="featureSelect" | ||||
|           @map-zoom="getZoom" | ||||
|         ></fssm-map> | ||||
|         <fssm-map v-if="elementDiv !== 'OverviewScreen'" ref="roadMap" :showChange="true" | ||||
|           :controlStyle="{ top: '10%', left: '26%' }" @feature-select="featureSelect" @map-zoom="getZoom"></fssm-map> | ||||
|         <!-- @map-moveend="mapMoveend" --> | ||||
|       </div> | ||||
|     </div> | ||||
| @ -220,72 +138,33 @@ | ||||
|       <!-- 病害巡检4种类型按钮 --> | ||||
|       <div class="footer-change-map"> | ||||
|         <template v-if="elementDiv === 'DiseaseScreen'"> | ||||
|           <div | ||||
|             class="change-map-div" | ||||
|             :class="bottomTipClick === item.click ? 'change-map-click' : ''" | ||||
|             v-for="(item, index) in changeMapBtn" | ||||
|             :key="`btn-${index}`" | ||||
|             @click="changeIconType(item.click)" | ||||
|           > | ||||
|           <div class="change-map-div" :class="bottomTipClick === item.click ? 'change-map-click' : ''" | ||||
|             v-for="(item, index) in changeMapBtn" :key="`btn-${index}`" @click="changeIconType(item.click)"> | ||||
|             {{ item.name }} | ||||
|           </div> | ||||
|         </template> | ||||
|       </div> | ||||
|       <!-- 切换3种导航栏按钮 --> | ||||
|       <div class="footer-change-vue"> | ||||
|         <div | ||||
|           :class=" | ||||
|             elementDiv === item.component | ||||
|         <div :class="elementDiv === item.component | ||||
|           ? `change-vue-click-${item.component}` | ||||
|           : `change-vue-${item.component}` | ||||
|           " | ||||
|           v-for="(item, index) in elementList" | ||||
|           :key="`footer-${index}`" | ||||
|           @click="changeElement(item)" | ||||
|         ></div> | ||||
|           " v-for="(item, index) in elementList" :key="`footer-${index}`" @click="changeElement(item)"></div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <!-- 详情图片弹窗 --> | ||||
|     <el-dialog | ||||
|       :title="imgTitle" | ||||
|       :visible.sync="imgVisible" | ||||
|       width="95rem" | ||||
|       append-to-body | ||||
|       fullscreen | ||||
|       :close-on-click-modal="false" | ||||
|       destroy-on-close | ||||
|       @close="imgCancel" | ||||
|     > | ||||
|       <img-dialog | ||||
|         v-if="imgTitle === '查看'" | ||||
|         :imageItem="imageItem" | ||||
|         :bottomTipClick="bottomTipClick" | ||||
|       ></img-dialog> | ||||
|     <el-dialog :title="imgTitle" :visible.sync="imgVisible" width="95rem" append-to-body fullscreen | ||||
|       :close-on-click-modal="false" destroy-on-close @close="imgCancel"> | ||||
|       <img-dialog v-if="imgTitle === '查看'" :imageItem="imageItem" :bottomTipClick="bottomTipClick"></img-dialog> | ||||
|     </el-dialog> | ||||
| 
 | ||||
|     <!-- 查看点位图片弹窗 --> | ||||
|     <el-dialog | ||||
|       title="查看点位" | ||||
|       :visible.sync="showImageDialog" | ||||
|       width="90rem" | ||||
|       append-to-body | ||||
|       :close-on-click-modal="false" | ||||
|       destroy-on-close | ||||
|       @close="screenImgCancel" | ||||
|     > | ||||
|     <el-dialog title="查看点位" :visible.sync="showImageDialog" width="90rem" append-to-body :close-on-click-modal="false" | ||||
|       destroy-on-close @close="screenImgCancel"> | ||||
|       <div class="view-image-container" ref="imageContainer"> | ||||
|         <img | ||||
|           :src="screenImage.imageUrl" | ||||
|           alt="Main Image" | ||||
|           ref="mainImage" | ||||
|           @load="updateScreenRects" | ||||
|         /> | ||||
|         <div | ||||
|           v-for="(rect, index) in screenRects" | ||||
|           :key="index" | ||||
|           class="rect-overlay" | ||||
|           :style="getScreenRectStyle(rect)" | ||||
|         ></div> | ||||
|         <img :src="screenImage.imageUrl" alt="Main Image" ref="mainImage" @load="updateScreenRects" /> | ||||
|         <div v-for="(rect, index) in screenRects" :key="index" class="rect-overlay" :style="getScreenRectStyle(rect)"> | ||||
|         </div> | ||||
|         <div class="rect-image"> | ||||
|           采集时间: | ||||
|           {{ screenImage.createTime }} 起始桩号: | ||||
| @ -295,9 +174,7 @@ | ||||
|           {{ screenImage.iconTypeName || "暂无数据" }} | ||||
|           <span v-if="this.elementDiv === 'DiseaseScreen'"> | ||||
|             病害面积:{{ screenImage.targetArea }}平方米 病害长度:{{ | ||||
|               screenImage.targetLen | ||||
|             }}米 | ||||
|           </span> | ||||
|               screenImage.targetLen * 1 <= 0 ? "暂无数据" : `${screenImage.targetLen}米` }} </span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </el-dialog> | ||||
| @ -341,6 +218,7 @@ import { | ||||
|   getItemTypes, | ||||
|   getRoadListTypes, | ||||
|   getDefectTypes, | ||||
|   getNoticeList, | ||||
| } from "@/api/xj/screen/index"; | ||||
| export default { | ||||
|   name: "BigScreen", | ||||
| @ -374,8 +252,12 @@ export default { | ||||
|       // 年 | ||||
|       yearTime: "", | ||||
| 
 | ||||
|       // 预警中心数据条数 | ||||
|       noticeNum: 0, | ||||
|       // 预警中心消息数据 | ||||
|       messageList: [], | ||||
|       // 预警中心定时器 | ||||
|       messageTimer: null, | ||||
| 
 | ||||
|       // 数据栏右上角选择框 | ||||
|       selectTypeArr: [], | ||||
| @ -510,7 +392,7 @@ export default { | ||||
|     this.getMessageList(); | ||||
|     this.handleMessage(); | ||||
|   }, | ||||
|   mounted() {}, | ||||
|   mounted() { }, | ||||
|   methods: { | ||||
|     /** | ||||
|      * @description: 获取当前时间 | ||||
| @ -553,34 +435,43 @@ export default { | ||||
|      * @return {void} | ||||
|      */ | ||||
|     getMessageList() { | ||||
|       // getMessageList().then(({ code, data }) => { | ||||
|       //   if (code === 200) { | ||||
|       //     this.messageList = data; | ||||
|       //   } | ||||
|       // }); | ||||
|       this.messageList = [ | ||||
|         { | ||||
|           title: "成功", | ||||
|           status: "SUCCESS", | ||||
|           time: "2024/45/62", | ||||
|           car: "辽jskdn", | ||||
|           content: "骄傲的是否哈德half绝对符合卡的法拉第", | ||||
|         }, | ||||
|         { | ||||
|           title: "告警", | ||||
|           status: "WARNING", | ||||
|           time: "2024/45/62", | ||||
|           car: "辽jskdn", | ||||
|           content: "骄傲的是否哈德half绝对符合卡的法拉第", | ||||
|         }, | ||||
|         { | ||||
|           title: "提醒", | ||||
|           status: "REMIND", | ||||
|           time: "2024/45/62", | ||||
|           car: "辽jskdn", | ||||
|           content: "骄傲的是否哈德half绝对符合卡的法拉第", | ||||
|         }, | ||||
|       ]; | ||||
|       this.messageTimer = setInterval(() => { | ||||
|         getNoticeList({ read: 1 }).then(({ code, rows, total }) => { | ||||
|           if (code === 200) { | ||||
|             this.messageList = rows; | ||||
|             this.noticeNum = total | ||||
|           } | ||||
|         }); | ||||
|       }, 5000); | ||||
|       getNoticeList({ read: 1 }).then(({ code, rows, total }) => { | ||||
|         if (code === 200) { | ||||
|           this.messageList = rows; | ||||
|           this.noticeNum = total | ||||
|         } | ||||
|       }); | ||||
|       // this.messageList = [ | ||||
|       //   { | ||||
|       //     title: "成功", | ||||
|       //     status: "SUCCESS", | ||||
|       //     time: "2024/45/62", | ||||
|       //     car: "辽jskdn", | ||||
|       //     content: "骄傲的是否哈德half绝对符合卡的法拉第", | ||||
|       //   }, | ||||
|       //   { | ||||
|       //     title: "告警", | ||||
|       //     status: "WARNING", | ||||
|       //     time: "2024/45/62", | ||||
|       //     car: "辽jskdn", | ||||
|       //     content: "骄傲的是否哈德half绝对符合卡的法拉第", | ||||
|       //   }, | ||||
|       //   { | ||||
|       //     title: "提醒", | ||||
|       //     status: "REMIND", | ||||
|       //     time: "2024/45/62", | ||||
|       //     car: "辽jskdn", | ||||
|       //     content: "骄傲的是否哈德half绝对符合卡的法拉第", | ||||
|       //   }, | ||||
|       // ]; | ||||
|     }, | ||||
| 
 | ||||
|     /** | ||||
| @ -813,8 +704,7 @@ export default { | ||||
|             return new Style({ | ||||
|               image: new Icon({ | ||||
|                 crossOrigin: "anonymous", | ||||
|                 src: require(`@/assets/screen/index/${ | ||||
|                   this.mapLogeList[ | ||||
|                 src: require(`@/assets/screen/index/${this.mapLogeList[ | ||||
|                   feature.getProperties().features[0].get("data").iconType | ||||
|                 ] | ||||
|                   }.png`), | ||||
| @ -1376,6 +1266,7 @@ export default { | ||||
|     }, | ||||
|   }, | ||||
|   beforeDestroy() { | ||||
|     clearInterval(this.messageTimer); | ||||
|     clearInterval(this.timeFlag); | ||||
|     // 发送停止接收小车位置 | ||||
|     const data = { type: "carLocation", status: false }; | ||||
| @ -1413,7 +1304,7 @@ export default { | ||||
|         border: none; | ||||
|       } | ||||
| 
 | ||||
|       .el-radio-button__orig-radio:checked + .el-radio-button__inner { | ||||
|       .el-radio-button__orig-radio:checked+.el-radio-button__inner { | ||||
|         color: #1cb6ff; | ||||
|       } | ||||
|     } | ||||
| @ -1438,7 +1329,7 @@ export default { | ||||
|         border: none; | ||||
|       } | ||||
| 
 | ||||
|       .el-radio-button__orig-radio:checked + .el-radio-button__inner { | ||||
|       .el-radio-button__orig-radio:checked+.el-radio-button__inner { | ||||
|         color: #1cb6ff; | ||||
|       } | ||||
|     } | ||||
| @ -1567,8 +1458,7 @@ export default { | ||||
|     } | ||||
| 
 | ||||
|     ::v-deep .baseLayerClass { | ||||
|       filter: grayscale(200%) invert(200%) sepia(50%) hue-rotate(175deg) | ||||
|         brightness(80%) saturate(550%); | ||||
|       filter: grayscale(200%) invert(200%) sepia(50%) hue-rotate(175deg) brightness(80%) saturate(550%); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -1599,7 +1489,7 @@ export default { | ||||
|     display: flex; | ||||
|     color: #89c5e8; | ||||
| 
 | ||||
|     > div { | ||||
|     >div { | ||||
|       margin: 0 0.5rem; | ||||
|       display: flex; | ||||
|       align-items: flex-end; | ||||
| @ -1688,12 +1578,12 @@ export default { | ||||
|     justify-content: center; | ||||
|     align-items: center; | ||||
| 
 | ||||
|     > div { | ||||
|     >div { | ||||
|       height: 100%; | ||||
|       width: 37.5%; | ||||
|     } | ||||
| 
 | ||||
|     > div:nth-child(2) { | ||||
|     >div:nth-child(2) { | ||||
|       height: 100%; | ||||
|       width: 25%; | ||||
|     } | ||||
| @ -1733,6 +1623,7 @@ export default { | ||||
|       background-size: 93% 60%; | ||||
|       background-position: 15% 15%; | ||||
|     } | ||||
| 
 | ||||
|     .change-vue-click-RoadScreen { | ||||
|       background-image: url("../../assets//screen/index/button-road-click.png"); | ||||
|       background-repeat: no-repeat; | ||||
| @ -1792,7 +1683,7 @@ export default { | ||||
| 
 | ||||
| // 图片信息 | ||||
| .rect-image { | ||||
|   width: 80%; | ||||
|   width: 90%; | ||||
|   position: absolute; | ||||
|   top: 0; | ||||
|   font-size: 1.2rem; | ||||
| @ -1818,6 +1709,7 @@ export default { | ||||
|   .el-select-dropdown { | ||||
|     background-color: #102649; | ||||
|     border-color: #08204f; | ||||
| 
 | ||||
|     .el-scrollbar { | ||||
|       .el-select-dropdown__wrap { | ||||
|         .el-scrollbar__view { | ||||
| @ -1891,7 +1783,7 @@ export default { | ||||
| 
 | ||||
|     .message-content { | ||||
|       width: 100%; | ||||
|       height: 12rem; | ||||
|       max-height: 12rem; | ||||
| 
 | ||||
|       .message-item { | ||||
|         padding: 0.5rem 0; | ||||
|  | ||||
| @ -10,7 +10,7 @@ | ||||
|   <div class="content" ref="trendsChart"></div> | ||||
| </template> | ||||
| 
 | ||||
|   <script> | ||||
| <script> | ||||
| import * as echarts from "echarts"; | ||||
| import { roadTrends } from "@/api/xj/screen/disease-screen"; | ||||
| export default { | ||||
| @ -235,9 +235,9 @@ export default { | ||||
|             // 是否显示detail,即拖拽时候显示详细数值信息 | ||||
|             showDetail: false, | ||||
|             // 数据窗口范围的起始数值 | ||||
|             startValue: 0, | ||||
|             startValue: this.echartList.length > 6 ? this.echartList.length - 6 : 0, | ||||
|             // 数据窗口范围的结束数值(一页显示多少条数据) | ||||
|             endValue: 6, | ||||
|             endValue: this.echartList.length, | ||||
|             // empty:当前数据窗口外的数据,被设置为空。 | ||||
|             // 即不会影响其他轴的数据范围 | ||||
|             filterMode: "empty", | ||||
| @ -274,11 +274,10 @@ export default { | ||||
| }; | ||||
| </script> | ||||
| 
 | ||||
|   <style lang="scss" scoped> | ||||
| <style lang="scss" scoped> | ||||
| .content { | ||||
|   width: 100%; | ||||
|   height: 100%; | ||||
|   overflow: hidden; | ||||
| } | ||||
| </style> | ||||
|    | ||||
| @ -2,7 +2,7 @@ | ||||
|  * @Author: SunTao 328867980@qq.com | ||||
|  * @Date: 2024-11-08 09:40:18 | ||||
|  * @LastEditors: SunTao 328867980@qq.com | ||||
|  * @LastEditTime: 2024-12-04 16:20:31 | ||||
|  * @LastEditTime: 2024-12-05 13:37:00 | ||||
|  * @FilePath: \znxjxt-ui\src\views\big-screen\overview-components\inspection-vehicles.vue | ||||
|  * @Description: 总览大屏-巡检车辆 | ||||
| --> | ||||
| @ -43,7 +43,7 @@ | ||||
|         height="85%" | ||||
|       > | ||||
|         <el-table-column prop="plateNo" label="车牌号码"> </el-table-column> | ||||
|         <el-table-column prop="aiotStatus" label="状态"> </el-table-column> | ||||
|         <el-table-column prop="status" label="状态"> </el-table-column> | ||||
|         <el-table-column prop="pci" label="操作"> | ||||
|           <template slot-scope="scope"> | ||||
|             <el-popover | ||||
| @ -63,7 +63,7 @@ | ||||
|                 </div> | ||||
|                 <div> | ||||
|                   <span class="name">车辆状态:</span> | ||||
|                   <span class="value">{{ scope.row.aiotStatus }}</span> | ||||
|                   <span class="value">{{ scope.row.status }}</span> | ||||
|                 </div> | ||||
|                 <div> | ||||
|                   <span class="name">网络状态:</span> | ||||
| @ -71,7 +71,7 @@ | ||||
|                 </div> | ||||
|                 <div> | ||||
|                   <span class="name">设备状态:</span> | ||||
|                   <span class="value">{{ scope.row.serverStatus }}</span> | ||||
|                   <span class="value">{{ scope.row.aiotStatus }}</span> | ||||
|                 </div> | ||||
|               </div> | ||||
|               <el-button | ||||
| @ -84,19 +84,17 @@ | ||||
|             </el-popover> | ||||
| 
 | ||||
|             <el-button | ||||
|               :disabled="scope.row.aiotStatus !== '在线'" | ||||
|               :disabled="scope.row.status !== '在线'" | ||||
|               size="mini" | ||||
|               type="text" | ||||
|               @click="followCar(scope.row)" | ||||
|               v-hasPermi="['system:defect:edit']" | ||||
|               >跟车 | ||||
|             </el-button> | ||||
|             <el-button | ||||
|               :disabled="scope.row.aiotStatus !== '在线'" | ||||
|               :disabled="scope.row.status !== '在线'" | ||||
|               size="mini" | ||||
|               type="text" | ||||
|               @click="videoDelete(scope.row)" | ||||
|               v-hasPermi="['system:defect:remove']" | ||||
|               >视频 | ||||
|             </el-button> | ||||
|           </template> | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
|  * @Author: SunTao 328867980@qq.com | ||||
|  * @Date: 2024-10-18 10:25:29 | ||||
|  * @LastEditors: SunTao 328867980@qq.com | ||||
|  * @LastEditTime: 2024-12-04 09:56:16 | ||||
|  * @LastEditTime: 2024-12-05 15:08:14 | ||||
|  * @FilePath: \znxjxt-ui\src\views\big-screen\overview-components\patrol-order.vue | ||||
|  * @Description: 总览大屏-巡查里程 | ||||
| --> | ||||
| @ -11,48 +11,25 @@ | ||||
|   <div class="content"> | ||||
|     <div class="patrol-div"> | ||||
|       <div class="value"> | ||||
|         <span @click="showDetail">{{ formatNumber(patrolObject.len) }}</span | ||||
|         >km | ||||
|         <span @click="showDetail">{{ formatNumber(patrolObject.len) }}</span>km | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="patrol-div"> | ||||
|       <div class="value"> | ||||
|         <span @click="showDetail">{{ formatTime(patrolObject.time) }}</span | ||||
|         >h | ||||
|         <span @click="showDetail">{{ formatTime(patrolObject.time) }}</span>h | ||||
|       </div> | ||||
|     </div> | ||||
|     <!-- 巡查里程弹窗 --> | ||||
|     <el-dialog | ||||
|       title="巡查里程总览" | ||||
|       :visible.sync="showDialogVisible" | ||||
|       width="50rem" | ||||
|       append-to-body | ||||
|       :close-on-click-modal="false" | ||||
|       destroy-on-close | ||||
|       @close="screenCancel" | ||||
|     > | ||||
|     <el-dialog title="巡查里程总览" :visible.sync="showDialogVisible" width="50rem" append-to-body | ||||
|       :close-on-click-modal="false" destroy-on-close @close="screenCancel"> | ||||
|       <div class="patrol-content"> | ||||
|         <div class="patrol-select"> | ||||
|           <el-select | ||||
|             :popper-append-to-body="false" | ||||
|             v-model="companySelect" | ||||
|             @change="changeSelect" | ||||
|             clearable | ||||
|             placeholder="请选择" | ||||
|           > | ||||
|             <el-option | ||||
|               v-for="item in companyList" | ||||
|               :key="`${item.name}-${item.index}`" | ||||
|               :label="item.name" | ||||
|               :value="item.name" | ||||
|             /> | ||||
|           <el-select :popper-append-to-body="false" v-model="companySelect" @change="changeSelect" clearable | ||||
|             placeholder="请选择"> | ||||
|             <el-option v-for="item in companyList" :key="`${item.name}-${item.index}`" :label="item.name" | ||||
|               :value="item.name" /> | ||||
|           </el-select> | ||||
|           <el-radio-group | ||||
|             v-model="checkCycle" | ||||
|             class="screen-checkBox" | ||||
|             size="mini" | ||||
|             @change="changCycle" | ||||
|           > | ||||
|           <el-radio-group v-model="checkCycle" class="screen-checkBox" size="mini" @change="changCycle"> | ||||
|             <el-radio-button label="day">今日</el-radio-button> | ||||
|             <el-radio-button label="month">本月</el-radio-button> | ||||
|             <el-radio-button label="year">本年</el-radio-button> | ||||
| @ -64,7 +41,7 @@ | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
|   <script> | ||||
| <script> | ||||
| import * as echarts from "echarts"; | ||||
| import { getMileage, getMileageDetail } from "@/api/xj/screen/disease-screen"; | ||||
| export default { | ||||
| @ -357,6 +334,51 @@ export default { | ||||
|               yAxisIndex: 1, | ||||
|             }, | ||||
|           ], | ||||
|           dataZoom: [ | ||||
|             { | ||||
|               // 设置滚动条的隐藏与显示 | ||||
|               show: false, | ||||
|               // 设置滚动条类型 | ||||
|               type: "slider", | ||||
|               // 设置背景颜色 | ||||
|               backgroundColor: "rgba(225,225,225,0.2)", | ||||
|               // 设置选中范围的填充颜色 | ||||
|               fillerColor: "#ccc", | ||||
|               // 设置边框颜色 | ||||
|               borderColor: "rgba(225,225,225,0.2)", | ||||
|               // 是否显示detail,即拖拽时候显示详细数值信息 | ||||
|               showDetail: false, | ||||
|               // 数据窗口范围的起始数值 | ||||
|               startValue: 0, | ||||
|               // 数据窗口范围的结束数值(一页显示多少条数据) | ||||
|               endValue: 6, | ||||
|               // empty:当前数据窗口外的数据,被设置为空。 | ||||
|               // 即不会影响其他轴的数据范围 | ||||
|               filterMode: "empty", | ||||
|               // 设置滚动条宽度,相对于盒子宽度 | ||||
|               width: "80%", | ||||
|               // 设置滚动条高度 | ||||
|               height: 5, | ||||
|               // 设置滚动条显示位置 | ||||
|               left: "center", | ||||
|               // 是否锁定选择区域(或叫做数据窗口)的大小 | ||||
|               zoomLoxk: true, | ||||
|               // 控制手柄的尺寸 | ||||
|               handleSize: 10, | ||||
|               // dataZoom-slider组件离容器下侧的距离 | ||||
|               bottom: 0, | ||||
|             }, | ||||
|             { | ||||
|               // 没有下面这块的话,只能拖动滚动条, | ||||
|               // 鼠标滚轮在区域内不能控制外部滚动条 | ||||
|               type: "inside", | ||||
|               // 滚轮是否触发缩放 | ||||
|               zoomOnMouseWheel: false, | ||||
|               // 鼠标滚轮触发滚动 | ||||
|               moveOnMouseMove: true, | ||||
|               moveOnMouseWheel: true, | ||||
|             }, | ||||
|           ], | ||||
|         }); | ||||
|         window.addEventListener("resize", () => { | ||||
|           chart.resize(); | ||||
| @ -376,7 +398,7 @@ export default { | ||||
| }; | ||||
| </script> | ||||
| 
 | ||||
|   <style lang="scss" scoped> | ||||
| <style lang="scss" scoped> | ||||
| .content { | ||||
|   width: 100%; | ||||
|   height: 100%; | ||||
| @ -435,6 +457,7 @@ export default { | ||||
|       .el-select-dropdown { | ||||
|         background-color: #102649; | ||||
|         border-color: #08204f; | ||||
| 
 | ||||
|         .el-scrollbar { | ||||
|           .el-select-dropdown__wrap { | ||||
|             .el-scrollbar__view { | ||||
| @ -470,7 +493,7 @@ export default { | ||||
|         border-color: #1cb6ff; | ||||
|       } | ||||
| 
 | ||||
|       .el-radio-button__orig-radio:checked + .el-radio-button__inner { | ||||
|       .el-radio-button__orig-radio:checked+.el-radio-button__inner { | ||||
|         color: #1cb6ff; | ||||
|       } | ||||
|     } | ||||
| @ -498,4 +521,3 @@ export default { | ||||
|   background-color: #113463; | ||||
| } | ||||
| </style> | ||||
|    | ||||
| @ -2,7 +2,7 @@ | ||||
|  * @Author: SunTao 328867980@qq.com | ||||
|  * @Date: 2024-10-18 09:42:49 | ||||
|  * @LastEditors: SunTao 328867980@qq.com | ||||
|  * @LastEditTime: 2024-12-03 14:51:42 | ||||
|  * @LastEditTime: 2024-12-05 17:13:16 | ||||
|  * @FilePath: \znxjxt-ui\src\views\big-screen\overview-components\today-inspection.vue | ||||
|  * @Description: 总览大屏-今日巡查 | ||||
| --> | ||||
| @ -14,60 +14,36 @@ | ||||
|     </div> | ||||
|     <div class="today-right"> | ||||
|       <div class="right-sum" @click="showDialog('')"> | ||||
|         <span>{{ all }}</span | ||||
|         >个 | ||||
|         <span>{{ all }}</span>个 | ||||
|       </div> | ||||
|       <!-- <div class="right-rate"> | ||||
|         <span> {{ scale }}</span | ||||
|         >% | ||||
|       </div> --> | ||||
|       <div class="right-rate"> | ||||
|         较昨日<span class="up">增长</span> 50.26% | ||||
|         <i class="el-icon-top"></i> | ||||
|         较昨日<span v-if="state === '增加'" class="up">{{ state }}</span><span v-if="state === '减少'" class="bottom">{{ state | ||||
|           }}</span> {{ count }}个 | ||||
|         <i v-if="state === '增加'" class="el-icon-top"></i> | ||||
|         <i v-if="state === '减少'" class="el-icon-bottom"></i> | ||||
|       </div> | ||||
|     </div> | ||||
|     <!-- 病害总览弹窗 --> | ||||
|     <el-dialog | ||||
|       title="当前病害总览" | ||||
|       :visible.sync="showDialogVisible" | ||||
|       width="75rem" | ||||
|       append-to-body | ||||
|       :close-on-click-modal="false" | ||||
|       destroy-on-close | ||||
|       @close="screenCancel" | ||||
|     > | ||||
|     <el-dialog title="当前病害总览" :visible.sync="showDialogVisible" width="75rem" append-to-body | ||||
|       :close-on-click-modal="false" destroy-on-close @close="screenCancel"> | ||||
|       <div class="today-content"> | ||||
|         <div class="today-select"> | ||||
|           <div> | ||||
|             <el-select | ||||
|               :popper-append-to-body="false" | ||||
|               v-model="roadSelect" | ||||
|               @change="changeRoad" | ||||
|               clearable | ||||
|               placeholder="请选择路段" | ||||
|             > | ||||
|               <el-option | ||||
|                 v-for="item in roadList" | ||||
|                 :key="`${item.name}-${item.index}`" | ||||
|                 :label="item.name" | ||||
|                 :value="item.name" | ||||
|               /> | ||||
|             <el-select :popper-append-to-body="false" v-model="roadSelect" @change="changeRoad" clearable | ||||
|               placeholder="请选择路段"> | ||||
|               <el-option v-for="item in roadList" :key="`${item.name}-${item.index}`" :label="item.name" | ||||
|                 :value="item.name" /> | ||||
|             </el-select> | ||||
|           </div> | ||||
|           <div> | ||||
|             <el-select | ||||
|               :popper-append-to-body="false" | ||||
|               v-model="companySelect" | ||||
|               clearable | ||||
|               @change="changeCompany" | ||||
|               placeholder="请选择分公司" | ||||
|             > | ||||
|               <el-option | ||||
|                 v-for="item in companyList" | ||||
|                 :key="`${item.name}-${item.index}`" | ||||
|                 :label="item.name" | ||||
|                 :value="item.name" | ||||
|               /> | ||||
|             <el-select :popper-append-to-body="false" v-model="companySelect" clearable @change="changeCompany" | ||||
|               placeholder="请选择分公司"> | ||||
|               <el-option v-for="item in companyList" :key="`${item.name}-${item.index}`" :label="item.name" | ||||
|                 :value="item.name" /> | ||||
|             </el-select> | ||||
|           </div> | ||||
|         </div> | ||||
| @ -93,6 +69,10 @@ export default { | ||||
|       all: "0", | ||||
|       // 增长率 | ||||
|       scale: "0", | ||||
|       // 较昨日增长、减少 | ||||
|       state: "——", | ||||
|       // 增长、减少数量 | ||||
|       count: "——", | ||||
|       // 弹窗显隐控制 | ||||
|       showDialogVisible: false, | ||||
|       // 左侧路段选择绑定 | ||||
| @ -123,6 +103,8 @@ export default { | ||||
|         if (code === 200) { | ||||
|           this.today = data.today; | ||||
|           this.all = data.all; | ||||
|           this.state = data.state; | ||||
|           this.count = data.count; | ||||
|           this.scale = (data.scale * 1).toFixed(2); | ||||
|         } | ||||
|       }); | ||||
| @ -625,13 +607,14 @@ export default { | ||||
|       font-size: 1.5rem; | ||||
|       font-weight: 800; | ||||
|       font-family: "DouYu"; | ||||
|       background: linear-gradient( | ||||
|         to bottom, | ||||
|       background: linear-gradient(to bottom, | ||||
|           #ffffff, | ||||
|         #2773d0 | ||||
|       ); /*设置渐变的方向从左到右 颜色从ff0000到ffff00*/ | ||||
|       background-clip: text; /*将设置的背景颜色限制在文字中*/ | ||||
|       -webkit-text-fill-color: transparent; /*给文字设置成透明*/ | ||||
|           #2773d0); | ||||
|       /*设置渐变的方向从左到右 颜色从ff0000到ffff00*/ | ||||
|       background-clip: text; | ||||
|       /*将设置的背景颜色限制在文字中*/ | ||||
|       -webkit-text-fill-color: transparent; | ||||
|       /*给文字设置成透明*/ | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
| @ -663,13 +646,14 @@ export default { | ||||
|         font-weight: 800; | ||||
|         font-family: "DouYu"; | ||||
|         margin-right: 0.5rem; | ||||
|         background: linear-gradient( | ||||
|           to bottom, | ||||
|         background: linear-gradient(to bottom, | ||||
|             #ffffff, | ||||
|           #2773d0 | ||||
|         ); /*设置渐变的方向从左到右 颜色从ff0000到ffff00*/ | ||||
|         background-clip: text; /*将设置的背景颜色限制在文字中*/ | ||||
|         -webkit-text-fill-color: transparent; /*给文字设置成透明*/ | ||||
|             #2773d0); | ||||
|         /*设置渐变的方向从左到右 颜色从ff0000到ffff00*/ | ||||
|         background-clip: text; | ||||
|         /*将设置的背景颜色限制在文字中*/ | ||||
|         -webkit-text-fill-color: transparent; | ||||
|         /*给文字设置成透明*/ | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
| @ -714,10 +698,20 @@ export default { | ||||
|         padding: 0 0.5rem; | ||||
|       } | ||||
| 
 | ||||
|       .bottom{ | ||||
|         color: #19eb27; | ||||
|         padding: 0 0.5rem; | ||||
|       } | ||||
| 
 | ||||
|       .el-icon-top { | ||||
|         font-size: 1.5rem; | ||||
|         color: red; | ||||
|       } | ||||
| 
 | ||||
|       .el-icon-bottom { | ||||
|         font-size: 1.5rem; | ||||
|         color: #19eb27; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -733,7 +727,7 @@ export default { | ||||
|     // height: 10%; | ||||
|     display: flex; | ||||
| 
 | ||||
|     > div { | ||||
|     >div { | ||||
|       width: 50%; | ||||
|       padding: 0 2rem; | ||||
| 
 | ||||
| @ -754,6 +748,7 @@ export default { | ||||
|         .el-select-dropdown { | ||||
|           background-color: #102649; | ||||
|           border-color: #08204f; | ||||
| 
 | ||||
|           .el-scrollbar { | ||||
|             .el-select-dropdown__wrap { | ||||
|               .el-scrollbar__view { | ||||
|  | ||||
| @ -10,24 +10,15 @@ | ||||
| <template> | ||||
|   <div class="content"> | ||||
|     <div class="anomaly-select"> | ||||
|       <el-select | ||||
|         :popper-append-to-body="false" | ||||
|         v-model="itemSelect" | ||||
|         placeholder="请选择" | ||||
|       > | ||||
|         <el-option | ||||
|           v-for="item in currentList" | ||||
|           :key="item.value" | ||||
|           :label="item.label" | ||||
|           :value="item.value" | ||||
|         /> | ||||
|       <el-select :popper-append-to-body="false" v-model="itemSelect" placeholder="请选择"> | ||||
|         <el-option v-for="item in currentList" :key="item.value" :label="item.label" :value="item.value" /> | ||||
|       </el-select> | ||||
|     </div> | ||||
|     <div ref="anomalyChart" class="anomaly-echart"></div> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
|   <script> | ||||
| <script> | ||||
| import * as echarts from "echarts"; | ||||
| import { getDropList } from "@/api/xj/screen/disease-screen"; | ||||
| import { anomalyList } from "@/api/xj/screen/road-screen"; | ||||
| @ -264,9 +255,9 @@ export default { | ||||
|             // 是否显示detail,即拖拽时候显示详细数值信息 | ||||
|             showDetail: false, | ||||
|             // 数据窗口范围的起始数值 | ||||
|             startValue: 0, | ||||
|             startValue: this.anomalyData.length > 10 ? this.anomalyData.length - 10 : 0, | ||||
|             // 数据窗口范围的结束数值(一页显示多少条数据) | ||||
|             endValue: 10, | ||||
|             endValue: this.anomalyData.length, | ||||
|             // empty:当前数据窗口外的数据,被设置为空。 | ||||
|             // 即不会影响其他轴的数据范围 | ||||
|             filterMode: "empty", | ||||
| @ -303,7 +294,7 @@ export default { | ||||
| }; | ||||
| </script> | ||||
| 
 | ||||
|   <style lang="scss" scoped> | ||||
| <style lang="scss" scoped> | ||||
| .content { | ||||
|   width: 100%; | ||||
|   height: 100%; | ||||
| @ -323,4 +314,3 @@ export default { | ||||
|   } | ||||
| } | ||||
| </style> | ||||
|    | ||||
| @ -2,7 +2,7 @@ | ||||
|  * @Author: SunTao 328867980@qq.com | ||||
|  * @Date: 2024-10-29 15:12:20 | ||||
|  * @LastEditors: SunTao 328867980@qq.com | ||||
|  * @LastEditTime: 2024-11-18 16:53:33 | ||||
|  * @LastEditTime: 2024-12-05 16:36:31 | ||||
|  * @FilePath: \znxjxt-ui\src\views\index-components\daily-index.vue | ||||
|  * @Description: 首页-日常巡查 | ||||
| --> | ||||
| @ -22,15 +22,13 @@ | ||||
|         <div class="left-div"> | ||||
|           <div class="name">巡查里程</div> | ||||
|           <div class="value"> | ||||
|             <span>{{ formatNumber(mileage) }}</span | ||||
|             >km | ||||
|             <span>{{ formatNumber(mileage) }}</span>km | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="left-div"> | ||||
|           <div class="name">覆盖道路数</div> | ||||
|           <div class="value"> | ||||
|             <span>{{ roadNum }}</span | ||||
|             >条 | ||||
|             <span>{{ roadNum }}</span>条 | ||||
|           </div> | ||||
|         </div> | ||||
|         <!-- <div class="left-chart" ref="rateChart"></div> --> | ||||
| @ -231,9 +229,9 @@ export default { | ||||
|               // 是否显示detail,即拖拽时候显示详细数值信息 | ||||
|               showDetail: false, | ||||
|               // 数据窗口范围的起始数值 | ||||
|               startValue: 0, | ||||
|               startValue: this.diseaseChart.length - 6, | ||||
|               // 数据窗口范围的结束数值(一页显示多少条数据) | ||||
|               endValue: 6, | ||||
|               endValue: this.diseaseChart.length, | ||||
|               // empty:当前数据窗口外的数据,被设置为空。 | ||||
|               // 即不会影响其他轴的数据范围 | ||||
|               filterMode: "empty", | ||||
| @ -507,7 +505,7 @@ export default { | ||||
|       width: 78%; | ||||
|       height: 100%; | ||||
| 
 | ||||
|       > div { | ||||
|       >div { | ||||
|         height: 50%; | ||||
|         width: 100%; | ||||
|         background-color: #ffffff; | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
|  * @Author: SunTao 328867980@qq.com | ||||
|  * @Date: 2024-10-29 15:17:58 | ||||
|  * @LastEditors: SunTao 328867980@qq.com | ||||
|  * @LastEditTime: 2024-11-18 17:04:51 | ||||
|  * @LastEditTime: 2024-12-05 16:35:11 | ||||
|  * @FilePath: \znxjxt-ui\src\views\index-components\disease-index.vue | ||||
|  * @Description: 首页-病害识别 | ||||
| --> | ||||
| @ -22,15 +22,13 @@ | ||||
|         <div> | ||||
|           <div class="name">病害识别总数</div> | ||||
|           <div class="value"> | ||||
|             <span>{{ total }}</span | ||||
|             >个 | ||||
|             <span>{{ total }}</span>个 | ||||
|           </div> | ||||
|         </div> | ||||
|         <div> | ||||
|           <div class="name">新增病害数</div> | ||||
|           <div class="value"> | ||||
|             <span>{{ newTotal }}</span | ||||
|             >个 | ||||
|             <span>{{ newTotal }}</span>个 | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @ -40,16 +38,9 @@ | ||||
|           <div class="distribution-div" ref="distributionChart"></div> | ||||
|           <div class="distribution-legnd"> | ||||
|             <fssm-scroll> | ||||
|               <div | ||||
|                 class="legnd-div" | ||||
|                 v-for="(item, index) in distributionList" | ||||
|                 :key="`distribution-${index}`" | ||||
|               > | ||||
|               <div class="legnd-div" v-for="(item, index) in distributionList" :key="`distribution-${index}`"> | ||||
|                 <div class="name"> | ||||
|                   <span | ||||
|                     class="index" | ||||
|                     :style="{ backgroundColor: distributionColor[index] }" | ||||
|                   ></span> | ||||
|                   <span class="index" :style="{ backgroundColor: distributionColor[index] }"></span> | ||||
|                   <span>{{ item.name }}</span> | ||||
|                 </div> | ||||
|                 <div class="rate">{{ item.rate }}</div> | ||||
| @ -62,7 +53,7 @@ | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
|   <script> | ||||
| <script> | ||||
| import FssmScroll from "@/components/scroll/fssm-scroll.vue"; | ||||
| import * as echarts from "echarts"; | ||||
| // 接口 | ||||
| @ -270,16 +261,16 @@ export default { | ||||
|               // 是否显示detail,即拖拽时候显示详细数值信息 | ||||
|               showDetail: false, | ||||
|               // 数据窗口范围的起始数值 | ||||
|               startValue: 0, | ||||
|               startValue: this.statisticsData.length > 6 ? this.statisticsData.length - 6 : 0, | ||||
|               // 数据窗口范围的结束数值(一页显示多少条数据) | ||||
|               endValue: 6, | ||||
|               endValue: this.statisticsData.length, | ||||
|               // empty:当前数据窗口外的数据,被设置为空。 | ||||
|               // 即不会影响其他轴的数据范围 | ||||
|               filterMode: "empty", | ||||
|               // 设置滚动条宽度,相对于盒子宽度 | ||||
|               width: "80%", | ||||
|               // 设置滚动条高度 | ||||
|               height: 5, | ||||
|               height: 7, | ||||
|               // 设置滚动条显示位置 | ||||
|               left: "center", | ||||
|               // 是否锁定选择区域(或叫做数据窗口)的大小 | ||||
| @ -404,7 +395,7 @@ export default { | ||||
| }; | ||||
| </script> | ||||
| 
 | ||||
|   <style lang="scss" scoped> | ||||
| <style lang="scss" scoped> | ||||
| .content { | ||||
|   width: 100%; | ||||
|   height: 100%; | ||||
| @ -438,7 +429,7 @@ export default { | ||||
|       background: url("../../assets/index/left-bkg.png") no-repeat; | ||||
|       background-size: 100%; | ||||
| 
 | ||||
|       > div { | ||||
|       >div { | ||||
|         height: 50%; | ||||
|         width: calc(100% - 2rem); | ||||
|         margin: 0 1rem; | ||||
| @ -480,7 +471,7 @@ export default { | ||||
|         z-index: 1; | ||||
|       } | ||||
| 
 | ||||
|       > div { | ||||
|       >div { | ||||
|         height: 50%; | ||||
|         width: 100%; | ||||
|         display: flex; | ||||
|  | ||||
| @ -226,9 +226,9 @@ export default { | ||||
|               // 是否显示detail,即拖拽时候显示详细数值信息 | ||||
|               showDetail: false, | ||||
|               // 数据窗口范围的起始数值 | ||||
|               startValue: 0, | ||||
|               startValue: this.roadChartData.length > 6 ? this.roadChartData.length - 6 : 0, | ||||
|               // 数据窗口范围的结束数值(一页显示多少条数据) | ||||
|               endValue: 6, | ||||
|               endValue: this.roadChartData.length, | ||||
|               // empty:当前数据窗口外的数据,被设置为空。 | ||||
|               // 即不会影响其他轴的数据范围 | ||||
|               filterMode: "empty", | ||||
|  | ||||
| @ -13,12 +13,8 @@ | ||||
|       <span>路况评定</span> | ||||
|       <div class="title-select"> | ||||
|         <el-radio-group v-model="itemSelect" size="mini" @change="changeRadio"> | ||||
|           <el-radio-button | ||||
|             v-for="(item, index) in selectTypeArr" | ||||
|             :label="item.value" | ||||
|             :key="`left-screen-${index}`" | ||||
|             >{{ item.label }}</el-radio-button | ||||
|           > | ||||
|           <el-radio-button v-for="(item, index) in selectTypeArr" :label="item.value" :key="`left-screen-${index}`">{{ | ||||
|             item.label }}</el-radio-button> | ||||
|         </el-radio-group> | ||||
|       </div> | ||||
|     </div> | ||||
| @ -303,9 +299,9 @@ export default { | ||||
|               // 是否显示detail,即拖拽时候显示详细数值信息 | ||||
|               showDetail: false, | ||||
|               // 数据窗口范围的起始数值 | ||||
|               startValue: 0, | ||||
|               startValue: this.trafficEchartData.length > 6 ? this.trafficEchartData.length - 6 : 0, | ||||
|               // 数据窗口范围的结束数值(一页显示多少条数据) | ||||
|               endValue: 6, | ||||
|               endValue: this.trafficEchartData.length, | ||||
|               // empty:当前数据窗口外的数据,被设置为空。 | ||||
|               // 即不会影响其他轴的数据范围 | ||||
|               filterMode: "empty", | ||||
| @ -360,7 +356,7 @@ export default { | ||||
|     background-size: 5%; | ||||
|     background-position: 0 30%; | ||||
| 
 | ||||
|     > span { | ||||
|     >span { | ||||
|       font-family: "DouYu"; | ||||
|     } | ||||
|   } | ||||
| @ -372,6 +368,7 @@ export default { | ||||
|     ::v-deep .el-table tr { | ||||
|       background-color: #f6f7fa; | ||||
|     } | ||||
| 
 | ||||
|     ::v-deep .el-table .el-table__header-wrapper th, | ||||
|     .el-table .el-table__fixed-header-wrapper th { | ||||
|       background-color: #f6f7fa; | ||||
|  | ||||
| @ -127,7 +127,6 @@ | ||||
|           icon="el-icon-plus" | ||||
|           size="mini" | ||||
|           @click="handleAdd" | ||||
|           v-hasPermi="['system:defect:add']" | ||||
|         >新增</el-button> | ||||
|       </el-col> | ||||
|       <el-col :span="2"> | ||||
| @ -138,7 +137,6 @@ | ||||
|           size="mini" | ||||
|           :disabled="single" | ||||
|           @click="handleUpdate" | ||||
|           v-hasPermi="['system:defect:edit']" | ||||
|         >修改</el-button> | ||||
|       </el-col> | ||||
|       <el-col :span="2"> | ||||
| @ -149,7 +147,6 @@ | ||||
|           size="mini" | ||||
|           :disabled="multiple" | ||||
|           @click="handleDelete" | ||||
|           v-hasPermi="['system:defect:remove']" | ||||
|         >删除</el-button> | ||||
|       </el-col> | ||||
|       <el-col :span="2"> | ||||
| @ -159,7 +156,6 @@ | ||||
|           icon="el-icon-download" | ||||
|           size="mini" | ||||
|           @click="handleExport" | ||||
|           v-hasPermi="['system:defect:export']" | ||||
|         >导出</el-button> | ||||
|       </el-col> | ||||
|       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> | ||||
| @ -190,7 +186,6 @@ | ||||
|             type="text" | ||||
|             icon="el-icon-edit" | ||||
|             @click="handleUpdate(scope.row)" | ||||
|             v-hasPermi="['system:defect:edit']" | ||||
|           >修改</el-button> | ||||
|           <el-button | ||||
|             size="mini" | ||||
|  | ||||
| @ -127,7 +127,6 @@ | ||||
|           icon="el-icon-plus" | ||||
|           size="mini" | ||||
|           @click="handleAdd" | ||||
|           v-hasPermi="['system:defect:add']" | ||||
|         >新增 | ||||
|         </el-button> | ||||
|       </el-col> | ||||
| @ -139,7 +138,6 @@ | ||||
|           size="mini" | ||||
|           :disabled="single" | ||||
|           @click="handleUpdate" | ||||
|           v-hasPermi="['system:defect:edit']" | ||||
|         >修改 | ||||
|         </el-button> | ||||
|       </el-col> | ||||
| @ -151,7 +149,6 @@ | ||||
|           size="mini" | ||||
|           :disabled="multiple" | ||||
|           @click="handleDelete" | ||||
|           v-hasPermi="['system:defect:remove']" | ||||
|         >删除 | ||||
|         </el-button> | ||||
|       </el-col> | ||||
| @ -162,7 +159,6 @@ | ||||
|           icon="el-icon-download" | ||||
|           size="mini" | ||||
|           @click="handleExport" | ||||
|           v-hasPermi="['system:defect:export']" | ||||
|         >导出 | ||||
|         </el-button> | ||||
|       </el-col> | ||||
| @ -201,7 +197,6 @@ | ||||
|             type="text" | ||||
|             icon="el-icon-edit" | ||||
|             @click="handleUpdate(scope.row)" | ||||
|             v-hasPermi="['system:defect:edit']" | ||||
|           >修改 | ||||
|           </el-button> | ||||
|           <el-button | ||||
| @ -209,7 +204,6 @@ | ||||
|             type="text" | ||||
|             icon="el-icon-delete" | ||||
|             @click="handleDelete(scope.row)" | ||||
|             v-hasPermi="['system:defect:remove']" | ||||
|           >删除 | ||||
|           </el-button> | ||||
|         </template> | ||||
|  | ||||
| @ -213,7 +213,6 @@ | ||||
|                 type="text" | ||||
|                 icon="el-icon-view" | ||||
|                 @click="handleView(scope.row)" | ||||
|                 v-hasPermi="['system:defect:edit']" | ||||
|                 >查看 | ||||
|               </el-button> | ||||
|               <el-button | ||||
| @ -222,7 +221,6 @@ | ||||
|                 type="text" | ||||
|                 icon="el-icon-edit" | ||||
|                 @click="handleUpdate(scope.row)" | ||||
|                 v-hasPermi="['system:defect:edit']" | ||||
|                 >生成工单 | ||||
|               </el-button> | ||||
|               <el-button | ||||
| @ -231,7 +229,6 @@ | ||||
|                 type="text" | ||||
|                 icon="el-icon-delete" | ||||
|                 @click="handleDelete(scope.row)" | ||||
|                 v-hasPermi="['system:defect:remove']" | ||||
|                 >删除 | ||||
|               </el-button> | ||||
|             </template> | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
|  * @Author: SunTao 328867980@qq.com | ||||
|  * @Date: 2024-11-20 11:58:33 | ||||
|  * @LastEditors: SunTao 328867980@qq.com | ||||
|  * @LastEditTime: 2024-11-20 15:49:28 | ||||
|  * @LastEditTime: 2024-12-05 15:03:52 | ||||
|  * @FilePath: \znxjxt-ui\src\views\xj\inspection-warn\warning-center\index.vue | ||||
|  * @Description: 预警中心-信息中心 | ||||
| --> | ||||
| @ -10,175 +10,77 @@ | ||||
| <template> | ||||
|   <div class="content"> | ||||
|     <!-- 搜索表单 --> | ||||
|     <el-form | ||||
|       :model="warnForm" | ||||
|       ref="queryForm" | ||||
|       size="small" | ||||
|       :inline="true" | ||||
|       label-width="5rem" | ||||
|     > | ||||
|       <el-form-item label="消息类型" prop="type"> | ||||
|         <el-select | ||||
|           v-model="warnForm.type" | ||||
|           placeholder="请选择消息类型" | ||||
|           filterable | ||||
|           clearable | ||||
|         > | ||||
|           <el-option | ||||
|             v-for="item in deviceList" | ||||
|             :key="item.value" | ||||
|             :label="item.label" | ||||
|             :value="item.value" | ||||
|           /> | ||||
|     <el-form :model="warnForm" ref="queryForm" size="small" :inline="true" label-width="5rem"> | ||||
|       <!-- <el-form-item label="消息类型" prop="type"> | ||||
|         <el-select v-model="warnForm.type" placeholder="请选择消息类型" filterable clearable> | ||||
|           <el-option v-for="item in deviceList" :key="item.value" :label="item.label" :value="item.value" /> | ||||
|         </el-select> | ||||
|       </el-form-item> | ||||
|       </el-form-item> --> | ||||
|       <el-form-item label="时间" prop="dateTime"> | ||||
|         <el-date-picker | ||||
|           v-model="dateTime" | ||||
|           type="datetimerange" | ||||
|           start-placeholder="开始日期" | ||||
|           end-placeholder="结束日期" | ||||
|           format="yyyy-MM-dd HH:mm:ss" | ||||
|           value-format="yyyy-MM-dd HH:mm:ss" | ||||
|           clearable | ||||
|         /> | ||||
|         <el-date-picker v-model="dateTime" type="datetimerange" start-placeholder="开始日期" end-placeholder="结束日期" | ||||
|           format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" clearable /> | ||||
|       </el-form-item> | ||||
|       <el-form-item label="阅读状态" prop="read"> | ||||
|         <el-select | ||||
|           v-model="warnForm.read" | ||||
|           placeholder="请选择阅读状态" | ||||
|           clearable | ||||
|         > | ||||
|           <el-option | ||||
|             v-for="item in readStatusList" | ||||
|             :key="item.value" | ||||
|             :label="item.label" | ||||
|             :value="item.value" | ||||
|           /> | ||||
|         <el-select v-model="warnForm.read" placeholder="请选择阅读状态" clearable> | ||||
|           <el-option v-for="item in readStatusList" :key="item.value" :label="item.label" :value="item.value" /> | ||||
|         </el-select> | ||||
|       </el-form-item> | ||||
|       <el-form-item> | ||||
|         <el-button | ||||
|           type="primary" | ||||
|           icon="el-icon-search" | ||||
|           size="mini" | ||||
|           @click="handleQuery" | ||||
|           >搜索</el-button | ||||
|         > | ||||
|         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery" | ||||
|           >重置</el-button | ||||
|         > | ||||
|         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> | ||||
|         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> | ||||
|       </el-form-item> | ||||
|     </el-form> | ||||
|     <el-row :gutter="10" class="mb8"> | ||||
|       <el-col :span="1.5"> | ||||
|         <el-button | ||||
|           type="primary" | ||||
|           plain | ||||
|           icon="el-icon-check" | ||||
|           size="mini" | ||||
|           @click="handleRead" | ||||
|           v-hasPermi="['system:defect:add']" | ||||
|           >全部已读 | ||||
|         <el-button type="primary" plain icon="el-icon-check" size="mini" @click="handleRead" | ||||
|           v-hasPermi="['system:defect:add']">全部已读 | ||||
|         </el-button> | ||||
|       </el-col> | ||||
|       <el-col :span="1.5"> | ||||
|         <el-button | ||||
|           type="danger" | ||||
|           plain | ||||
|           icon="el-icon-delete" | ||||
|           size="mini" | ||||
|           :disabled="multiple" | ||||
|           @click="handleDelete(null)" | ||||
|           v-hasPermi="['system:defect:remove']" | ||||
|           >批量删除 | ||||
|         <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" | ||||
|           @click="handleDelete(null)" v-hasPermi="['system:defect:remove']">批量删除 | ||||
|         </el-button> | ||||
|       </el-col> | ||||
|     </el-row> | ||||
|     <!-- 导航栏 --> | ||||
|     <el-tabs v-model="activeName" @tab-click="handleClick"> | ||||
|       <el-tab-pane | ||||
|         v-for="(item, index) in editableTabs" | ||||
|         :key="`tabs-${index}`" | ||||
|         :label="item.title" | ||||
|         :name="item.code" | ||||
|       > | ||||
|       <el-tab-pane v-for="(item, index) in editableTabs" :key="`tabs-${index}`" :label="item.title" :name="item.code"> | ||||
|         <!-- 标签页头 --> | ||||
|         <span slot="label" | ||||
|           ><i | ||||
|             v-if="item.title === '成功'" | ||||
|         <span slot="label"> | ||||
|           <!-- <i | ||||
|             v-if="item.code === 'SUCCESS'" | ||||
|             style="color: #67c23a" | ||||
|             class="el-icon-success" | ||||
|           ></i> | ||||
|           <i | ||||
|             v-if="item.title === '提醒'" | ||||
|             style="color: #e6a23c" | ||||
|             class="el-icon-info" | ||||
|           ></i> | ||||
|           <i | ||||
|             v-if="item.title === '告警'" | ||||
|             style="color: #909399" | ||||
|             class="el-icon-warning" | ||||
|           ></i> | ||||
|           <i | ||||
|           ></i> --> | ||||
|           <i v-if="item.code === 'REMIND'" style="color: #e6a23c" class="el-icon-info"></i> | ||||
|           <i v-if="item.code === 'WARNING'" style="color: #909399" class="el-icon-warning"></i> | ||||
|           <!-- <i | ||||
|             v-if="item.title === '错误'" | ||||
|             style="color: #f56c6c" | ||||
|             class="el-icon-error" | ||||
|           ></i | ||||
|           >{{ item.title }}({{ item.count }})</span | ||||
|         > | ||||
|           > --> | ||||
|           {{ item.title }}({{ item.count }})</span> | ||||
|         <!-- 表格 --> | ||||
|         <el-table | ||||
|           ref="warningTable" | ||||
|           :data="warningList" | ||||
|           v-loading="loading" | ||||
|           style="width: 100%" | ||||
|           @current-change="handleTableChange" | ||||
|           @selection-change="handleSelectionChange" | ||||
|         > | ||||
|         <el-table ref="warningTable" :data="warningList" v-loading="loading" style="width: 100%" | ||||
|           @current-change="handleTableChange" @selection-change="handleSelectionChange"> | ||||
|           <el-table-column type="selection" width="55" align="center" /> | ||||
| 
 | ||||
|           <el-table-column | ||||
|             width="180" | ||||
|             label="时间" | ||||
|             align="center" | ||||
|             prop="createdTime" | ||||
|           > | ||||
|           <el-table-column width="180" label="时间" align="center" prop="createdTime"> | ||||
|             <template slot-scope="scope"> | ||||
|               <span | ||||
|                 :class="`${scope.row.readStatus === 1 ? 'table-index' : ''}`" | ||||
|                 >{{ scope.row.createdTime }}</span | ||||
|               > | ||||
|               <span :class="`${scope.row.readStatus === 1 ? 'table-index' : ''}`">{{ scope.row.createdTime }}</span> | ||||
|             </template> | ||||
|           </el-table-column> | ||||
|           <el-table-column | ||||
|             show-overflow-tooltip | ||||
|             label="消息标题" | ||||
|             width="150" | ||||
|             align="center" | ||||
|             prop="title" | ||||
|           > | ||||
|           <el-table-column show-overflow-tooltip label="消息标题" width="150" align="center" prop="title"> | ||||
|           </el-table-column> | ||||
|           <el-table-column | ||||
|             show-overflow-tooltip | ||||
|             label="消息内容" | ||||
|             align="left" | ||||
|             prop="content" | ||||
|           > | ||||
|           <el-table-column show-overflow-tooltip label="消息内容" align="left" prop="content"> | ||||
|           </el-table-column> | ||||
|         </el-table> | ||||
|         <!-- 分页组件 --> | ||||
|         <div class="pagination-part"> | ||||
|           <el-pagination | ||||
|             background | ||||
|             :current-page.sync="pagination.page" | ||||
|             @current-change="handleCurrentChange" | ||||
|             :page-sizes="[10, 20, 30, 40]" | ||||
|             :page-size.sync="pagination.size" | ||||
|             @size-change="handleSizeChange" | ||||
|             layout="total, sizes, prev, pager, next, jumper" | ||||
|             :total="tableTotal" | ||||
|           > | ||||
|           <el-pagination background :current-page.sync="pagination.page" @current-change="handleCurrentChange" | ||||
|             :page-sizes="[10, 20, 30, 40]" :page-size.sync="pagination.size" @size-change="handleSizeChange" | ||||
|             layout="total, sizes, prev, pager, next, jumper" :total="tableTotal"> | ||||
|           </el-pagination> | ||||
|         </div> | ||||
|       </el-tab-pane> | ||||
| @ -191,6 +93,8 @@ import { | ||||
|   getWarningList, | ||||
|   getWarningNav, | ||||
|   markNoticeRead, | ||||
|   noticeReadAll, | ||||
|   deleteNotice | ||||
| } from "@/api/xj/inspection/center"; | ||||
| export default { | ||||
|   name: "WarningCenter", | ||||
| @ -209,8 +113,8 @@ export default { | ||||
|       dateTime: [], | ||||
|       // 阅读状态列表 | ||||
|       readStatusList: [ | ||||
|         { label: "已读", value: 2 }, | ||||
|         { label: "未读", value: 1 }, | ||||
|         { label: "已读", value: 2 }, | ||||
|       ], | ||||
|       // 导航栏选择绑定 | ||||
|       activeName: "WARNING", | ||||
| @ -358,14 +262,14 @@ export default { | ||||
|       this.$modal | ||||
|         .confirm(`是否确认删除选中的${checkIds.length}条记录?`) | ||||
|         .then(() => { | ||||
|           // return deleteRoad(checkIds); | ||||
|           return deleteNotice(checkIds); | ||||
|         }) | ||||
|         .then(() => { | ||||
|           this.$modal.msgSuccess("删除成功"); | ||||
|           this.getList(); | ||||
|           this.$refs.warningTable.clearSelection(); | ||||
|           this.$modal.msgSuccess("删除成功"); | ||||
|         }) | ||||
|         .catch(() => {}); | ||||
|         .catch(() => { }); | ||||
|     }, | ||||
| 
 | ||||
|     /** | ||||
| @ -373,7 +277,12 @@ export default { | ||||
|      * @return {*} | ||||
|      */ | ||||
|     handleRead() { | ||||
|       noticeReadAll().then(({ code }) => { | ||||
|         if (code === 200) { | ||||
|           this.getList(); | ||||
|           this.getNav(); | ||||
|         } | ||||
|       }); | ||||
|     }, | ||||
| 
 | ||||
|     /** | ||||
|  | ||||
| @ -1,5 +1,3 @@ | ||||
| 
 | ||||
| 
 | ||||
| <!-- | ||||
|  * @Author: SunTao 328867980@qq.com | ||||
|  * @Date: 2024-01-08 11:56:02 | ||||
| @ -10,29 +8,13 @@ | ||||
| --> | ||||
| <template> | ||||
|   <div class="add-setup"> | ||||
|     <el-form | ||||
|       class="addForm" | ||||
|       ref="warningSetupForm" | ||||
|       :model="warningSetupForm" | ||||
|       :rules="rules" | ||||
|       label-width="7rem" | ||||
|     > | ||||
|     <el-form class="addForm" ref="warningSetupForm" :model="warningSetupForm" :rules="rules" label-width="7rem"> | ||||
|       <el-row :gutter="24"> | ||||
|         <el-col :span="24"> | ||||
|           <el-form-item label="预警类型" prop="meteringType"> | ||||
|             <el-select | ||||
|               v-model="warningSetupForm.meteringType" | ||||
|               placeholder="请选择预警类型" | ||||
|               style="width: 100%" | ||||
|               clearable | ||||
|               @change="changeMeteringType" | ||||
|             > | ||||
|               <el-option | ||||
|                 v-for="item in meteringList" | ||||
|                 :key="item.value" | ||||
|                 :label="item.label" | ||||
|                 :value="item.value" | ||||
|               /> | ||||
|             <el-select v-model="warningSetupForm.meteringType" placeholder="请选择预警类型" style="width: 100%" clearable | ||||
|               @change="changeMeteringType"> | ||||
|               <el-option v-for="item in meteringList" :key="item.value" :label="item.label" :value="item.value" /> | ||||
|             </el-select> | ||||
|           </el-form-item> | ||||
|         </el-col> | ||||
| @ -40,24 +22,14 @@ | ||||
|       <el-row :gutter="24" v-if="warningSetupForm.meteringType !== '面积'"> | ||||
|         <el-col :span="24"> | ||||
|           <el-form-item label="预警病害长度" prop="length"> | ||||
|             <el-input-number | ||||
|               v-model="warningSetupForm.length" | ||||
|               :min="0" | ||||
|               placeholder="请输入预警病害长度" | ||||
|               style="width: 100%" | ||||
|             /> | ||||
|             <el-input-number v-model="warningSetupForm.length" :min="0" placeholder="请输入预警病害长度" style="width: 100%" /> | ||||
|           </el-form-item> | ||||
|         </el-col> | ||||
|       </el-row> | ||||
|       <el-row :gutter="24" v-if="warningSetupForm.meteringType !== '长度'"> | ||||
|         <el-col :span="24"> | ||||
|           <el-form-item label="预警病害面积" prop="area"> | ||||
|             <el-input-number | ||||
|               v-model="warningSetupForm.area" | ||||
|               :min="0" | ||||
|               placeholder="请输入预警病害面积" | ||||
|               style="width: 100%" | ||||
|             /> | ||||
|             <el-input-number v-model="warningSetupForm.area" :min="0" placeholder="请输入预警病害面积" style="width: 100%" /> | ||||
|           </el-form-item> | ||||
|         </el-col> | ||||
|       </el-row> | ||||
| @ -82,7 +54,7 @@ export default { | ||||
|     // 接收父组件传过来的数据 | ||||
|     dialogItem: { | ||||
|       type: Object, | ||||
|       default: () => {}, | ||||
|       default: () => { }, | ||||
|     }, | ||||
|   }, | ||||
|   components: {}, | ||||
| @ -130,7 +102,7 @@ export default { | ||||
|     dialogItem: { | ||||
|       handler(newVal) { | ||||
|         if (Object.keys(newVal).length > 0) { | ||||
|           this.warningSetupForm = newVal; | ||||
|           this.warningSetupForm = JSON.parse(JSON.stringify(newVal)); | ||||
|           this.changeMeteringType(newVal.meteringType); | ||||
|         } | ||||
|       }, | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
|  * @Author: SunTao 328867980@qq.com | ||||
|  * @Date: 2024-01-08 11:56:02 | ||||
|  * @LastEditors: SunTao 328867980@qq.com | ||||
|  * @LastEditTime: 2024-12-02 15:45:48 | ||||
|  * @LastEditTime: 2024-12-05 13:51:04 | ||||
|  * @FilePath: \znxjxt-ui\src\views\xj\inspection-warn\warning-setup\index.vue | ||||
|  * @Description: 预警中心-预警设置 | ||||
| --> | ||||
| @ -138,7 +138,6 @@ | ||||
|             type="text" | ||||
|             icon="el-icon-edit" | ||||
|             @click="handleUpdate(scope.row)" | ||||
|             v-hasPermi="['system:defect:edit']" | ||||
|             >编辑 | ||||
|           </el-button> | ||||
|         </template> | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
|  * @Author: SunTao 328867980@qq.com | ||||
|  * @Date: 2024-11-01 17:25:06 | ||||
|  * @LastEditors: SunTao 328867980@qq.com | ||||
|  * @LastEditTime: 2024-12-03 15:14:12 | ||||
|  * @LastEditTime: 2024-12-05 17:04:07 | ||||
|  * @FilePath: \znxjxt-ui\src\views\xj\inspection\confirmation-management\components\image-dialog.vue | ||||
|  * @Description: 病害确认-影像模式弹窗 | ||||
| --> | ||||
| @ -12,77 +12,32 @@ | ||||
|     <div class="image-content"> | ||||
|       <!-- 图片展示 --> | ||||
|       <div class="sidebar" ref="sidebar" @scroll="handleScroll"> | ||||
|         <img | ||||
|           v-for="(item, index) in defectData" | ||||
|           :key="item.id" | ||||
|           :src="item.media[0].img" | ||||
|           :alt="'Image ' + (index + 1)" | ||||
|           @click="showImage(index)" | ||||
|           :class="{ selected: currentIndex === index }" | ||||
|         /> | ||||
|         <img v-for="(item, index) in defectData" :key="item.id" :src="item.media[0].img" :alt="'Image ' + (index + 1)" | ||||
|           @click="showImage(index)" :class="{ selected: currentIndex === index }" /> | ||||
|       </div> | ||||
|       <!-- 右侧区域 --> | ||||
|       <div class="main-content"> | ||||
|         <div class="image-form"> | ||||
|           <el-form | ||||
|             :model="imgForm" | ||||
|             ref="imgForm" | ||||
|             size="small" | ||||
|             :inline="true" | ||||
|             label-width="5rem" | ||||
|           > | ||||
|           <el-form :model="imgForm" ref="imgForm" size="small" :inline="true" label-width="5rem"> | ||||
|             <el-form-item label="路段名称"> | ||||
|               <el-select | ||||
|                 v-model="imgForm.segmentId" | ||||
|                 placeholder="请选择路段名称" | ||||
|                 :style="{ width: '8rem' }" | ||||
|                 clearable | ||||
|               > | ||||
|                 <el-option | ||||
|                   v-for="item in roadTypeList" | ||||
|                   :key="item.value" | ||||
|                   :label="item.label" | ||||
|                   :value="item.value" | ||||
|                 /> | ||||
|               <el-select v-model="imgForm.segmentId" placeholder="请选择路段名称" :style="{ width: '8rem' }" clearable> | ||||
|                 <el-option v-for="item in roadTypeList" :key="item.value" :label="item.label" :value="item.value" /> | ||||
|               </el-select> | ||||
|             </el-form-item> | ||||
|             <el-form-item label-width="3rem" label="类型"> | ||||
|               <el-cascader | ||||
|                 v-model="imgForm.defectType" | ||||
|                 :options="tableDefect" | ||||
|                 :props="{ | ||||
|               <el-cascader v-model="imgForm.defectType" :options="tableDefect" :props="{ | ||||
|                 checkStrictly: false, | ||||
|                 emitPath: false, | ||||
|                 children: 'subTypes', | ||||
|                 }" | ||||
|                 clearable | ||||
|               ></el-cascader> | ||||
|               }" clearable></el-cascader> | ||||
|             </el-form-item> | ||||
|             <el-form-item label="公里桩"> | ||||
|               <el-input | ||||
|                 v-model="imgForm.stakeStart" | ||||
|                 placeholder="起始公里桩" | ||||
|                 style="width: 7rem" | ||||
|                 clearable | ||||
|               /> | ||||
|               <el-input v-model="imgForm.stakeStart" placeholder="起始公里桩" style="width: 7rem" clearable /> | ||||
|               <span style="margin: 0 5px">-</span> | ||||
|               <el-input | ||||
|                 v-model="imgForm.stakeEnd" | ||||
|                 placeholder="终止公里桩" | ||||
|                 style="width: 7rem" | ||||
|                 clearable | ||||
|               /> | ||||
|               <el-input v-model="imgForm.stakeEnd" placeholder="终止公里桩" style="width: 7rem" clearable /> | ||||
|             </el-form-item> | ||||
|             <el-button | ||||
|               type="primary" | ||||
|               icon="el-icon-search" | ||||
|               size="mini" | ||||
|               @click="handleQuery" | ||||
|               >搜索</el-button | ||||
|             > | ||||
|             <el-button icon="el-icon-refresh" size="mini" @click="resetQuery" | ||||
|               >重置</el-button | ||||
|             > | ||||
|             <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> | ||||
|             <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> | ||||
|             <!-- <el-row :gutter="24"> | ||||
|               <el-col :span="6"> | ||||
|                 <el-button | ||||
| @ -105,18 +60,8 @@ | ||||
|         <!-- 图片展示 --> | ||||
|         <div class="image-view"> | ||||
|           <div class="view-content" ref="imageContainer"> | ||||
|             <img | ||||
|               :src="currentImage" | ||||
|               alt="Main Image" | ||||
|               ref="mainImage" | ||||
|               @load="updateRects" | ||||
|             /> | ||||
|             <div | ||||
|               class="rect-overlay" | ||||
|               v-for="(rect, index) in rects" | ||||
|               :key="index" | ||||
|               :style="getRectStyle(rect)" | ||||
|             ></div> | ||||
|             <img :src="currentImage" alt="Main Image" ref="mainImage" @load="updateRects" /> | ||||
|             <div class="rect-overlay" v-for="(rect, index) in rects" :key="index" :style="getRectStyle(rect)"></div> | ||||
|             <div class="view-info"> | ||||
|               采集时间: | ||||
|               {{ new Date(rectsItem.createdTime).toLocaleString() }} 起始桩号: | ||||
| @ -127,24 +72,15 @@ | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="image-bottom"> | ||||
|           <img | ||||
|             v-for="(mediaItem, index) in currentThumbnails" | ||||
|             :key="'thumb-' + index" | ||||
|             :src="mediaItem.img" | ||||
|             :alt="'Thumb ' + (index + 1)" | ||||
|             @click="showThumbnailImage(index)" | ||||
|             :class="{ selected: selectedThumbnail === index }" | ||||
|           /> | ||||
|           <img v-for="(mediaItem, index) in currentThumbnails" :key="'thumb-' + index" :src="mediaItem.img" | ||||
|             :alt="'Thumb ' + (index + 1)" @click="showThumbnailImage(index)" | ||||
|             :class="{ selected: selectedThumbnail === index }" /> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="footer"> | ||||
|       <el-button type="success" size="mini" @click="changeDefect(2)" | ||||
|         >是病害(Y)</el-button | ||||
|       > | ||||
|       <el-button type="warning" size="mini" @click="changeDefect(3)" | ||||
|         >不是病害(N)</el-button | ||||
|       > | ||||
|       <el-button type="success" size="mini" @click="changeDefect(2)">是病害(Y)</el-button> | ||||
|       <el-button type="warning" size="mini" @click="changeDefect(3)">不是病害(N)</el-button> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
| @ -341,7 +277,7 @@ export default { | ||||
|       if (currentImageElement) { | ||||
|         currentImageElement.scrollIntoView({ | ||||
|           behavior: "smooth", | ||||
|           block: "nearest", | ||||
|           block: "center", | ||||
|         }); | ||||
|       } | ||||
|     }, | ||||
| @ -401,7 +337,7 @@ export default { | ||||
|       // 滚动高度+容器高度  滚动区域高度 | ||||
|       const sidebar = this.$refs.sidebar; | ||||
|       if ( | ||||
|         sidebar.scrollTop + sidebar.clientHeight >= sidebar.scrollHeight - 15 && | ||||
|         sidebar.scrollTop + sidebar.clientHeight >= sidebar.scrollHeight - 1 && | ||||
|         !this.loading | ||||
|       ) { | ||||
|         this.loadMoreImages(); | ||||
| @ -487,6 +423,7 @@ export default { | ||||
| 
 | ||||
|   .sidebar { | ||||
|     width: 20rem; | ||||
|     height: calc(100% - 2.5rem); | ||||
|     padding: 10px; | ||||
|     overflow-y: auto; | ||||
|   } | ||||
|  | ||||
| @ -194,7 +194,6 @@ | ||||
|           icon="el-icon-plus" | ||||
|           size="mini" | ||||
|           @click="handleAdd" | ||||
|           v-hasPermi="['system:defect:add']" | ||||
|           >新增 | ||||
|         </el-button> | ||||
|       </el-col> | ||||
| @ -206,7 +205,6 @@ | ||||
|           size="mini" | ||||
|           :disabled="multiple" | ||||
|           @click="handleDelete('')" | ||||
|           v-hasPermi="['system:defect:remove']" | ||||
|           >删除 | ||||
|         </el-button> | ||||
|       </el-col> | ||||
| @ -218,7 +216,6 @@ | ||||
|           size="mini" | ||||
|           :disabled="multiple" | ||||
|           @click="handleUpdateBatch" | ||||
|           v-hasPermi="['system:defect:edit']" | ||||
|           >批量确认 | ||||
|         </el-button> | ||||
|       </el-col> --> | ||||
| @ -300,7 +297,6 @@ | ||||
|             type="text" | ||||
|             icon="el-icon-edit" | ||||
|             @click="handleUpdate(scope.row)" | ||||
|             v-hasPermi="['system:defect:edit']" | ||||
|             >修改 | ||||
|           </el-button> | ||||
|           <el-button | ||||
| @ -308,7 +304,6 @@ | ||||
|             type="text" | ||||
|             icon="el-icon-delete" | ||||
|             @click="handleDelete(scope.row)" | ||||
|             v-hasPermi="['system:defect:remove']" | ||||
|             >删除 | ||||
|           </el-button> | ||||
|           <el-button | ||||
|  | ||||
| @ -161,7 +161,6 @@ | ||||
|           icon="el-icon-plus" | ||||
|           size="mini" | ||||
|           @click="handleAdd" | ||||
|           v-hasPermi="['system:defect:add']" | ||||
|           >新增 | ||||
|         </el-button> | ||||
|       </el-col> | ||||
| @ -173,7 +172,6 @@ | ||||
|           size="mini" | ||||
|           :disabled="multiple" | ||||
|           @click="handleDelete(null)" | ||||
|           v-hasPermi="['system:defect:remove']" | ||||
|           >删除 | ||||
|         </el-button> | ||||
|       </el-col> | ||||
| @ -184,7 +182,6 @@ | ||||
|           icon="el-icon-download" | ||||
|           size="mini" | ||||
|           @click="handleExport" | ||||
|           v-hasPermi="['system:defect:export']" | ||||
|           >导出 | ||||
|         </el-button> | ||||
|       </el-col> --> | ||||
| @ -196,7 +193,6 @@ | ||||
|           size="mini" | ||||
|           :disabled="multiple" | ||||
|           @click="handleUpdateBatch" | ||||
|           v-hasPermi="['system:defect:edit']" | ||||
|           >批量确认 | ||||
|         </el-button> | ||||
|       </el-col> --> | ||||
| @ -281,7 +277,6 @@ | ||||
|             type="text" | ||||
|             icon="el-icon-edit" | ||||
|             @click="handleUpdate(scope.row)" | ||||
|             v-hasPermi="['system:defect:edit']" | ||||
|             >修改 | ||||
|           </el-button> | ||||
|           <el-button | ||||
| @ -289,7 +284,6 @@ | ||||
|             type="text" | ||||
|             icon="el-icon-delete" | ||||
|             @click="handleDelete(scope.row)" | ||||
|             v-hasPermi="['system:defect:remove']" | ||||
|             >删除 | ||||
|           </el-button> | ||||
|         </template> | ||||
|  | ||||
| @ -2,7 +2,7 @@ | ||||
|  * @Author: SunTao 328867980@qq.com | ||||
|  * @Date: 2024-10-14 09:48:43 | ||||
|  * @LastEditors: SunTao 328867980@qq.com | ||||
|  * @LastEditTime: 2024-12-03 11:44:24 | ||||
|  * @LastEditTime: 2024-12-05 16:27:28 | ||||
|  * @FilePath: \znxjxt-ui\src\views\xj\inspection\task-management\index.vue | ||||
|  * @Description: 巡检管理-巡检任务 | ||||
| --> | ||||
| @ -10,74 +10,31 @@ | ||||
| <template> | ||||
|   <div class="app-container"> | ||||
|     <!-- 搜索表单 --> | ||||
|     <el-form | ||||
|       :model="queryParams" | ||||
|       ref="queryForm" | ||||
|       size="small" | ||||
|       :inline="true" | ||||
|       label-width="100px" | ||||
|     > | ||||
|     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="100px"> | ||||
|       <el-form-item label="任务id" prop="taskId"> | ||||
|         <el-autocomplete | ||||
|           v-model="queryParams.taskId" | ||||
|           :fetch-suggestions="querySearchAsync" | ||||
|           placeholder="请输入任务id" | ||||
|           @select="handleSelect" | ||||
|         ></el-autocomplete> | ||||
|         <el-autocomplete v-model="queryParams.taskId" :fetch-suggestions="querySearchAsync" placeholder="请输入任务id" | ||||
|           @select="handleSelect"></el-autocomplete> | ||||
|       </el-form-item> | ||||
|       <el-form-item label="车牌号码" prop="plateNo"> | ||||
|         <el-input | ||||
|           v-model="queryParams.plateNo" | ||||
|           placeholder="请输入车牌号码" | ||||
|           clearable="" | ||||
|         ></el-input> | ||||
|         <el-input v-model="queryParams.plateNo" placeholder="请输入车牌号码" clearable=""></el-input> | ||||
|       </el-form-item> | ||||
|       <el-form-item label="巡检路段" prop="segmentId"> | ||||
|         <el-select | ||||
|           v-model="queryParams.segmentId" | ||||
|           placeholder="请选择巡检路段" | ||||
|           clearable | ||||
|         > | ||||
|           <el-option | ||||
|             v-for="item in segmentList" | ||||
|             :key="item.value" | ||||
|             :label="item.label" | ||||
|             :value="item.value" | ||||
|           /> | ||||
|         <el-select v-model="queryParams.segmentId" placeholder="请选择巡检路段" clearable> | ||||
|           <el-option v-for="item in segmentList" :key="item.value" :label="item.label" :value="item.value" /> | ||||
|         </el-select> | ||||
|       </el-form-item> | ||||
|       <el-form-item label="巡检时间" prop="dateTime"> | ||||
|         <el-date-picker | ||||
|           v-model="dateTime" | ||||
|           type="daterange" | ||||
|           start-placeholder="开始日期" | ||||
|           end-placeholder="结束日期" | ||||
|           format="yyyy-MM-dd" | ||||
|           value-format="yyyy-MM-dd" | ||||
|           clearable | ||||
|         /> | ||||
|         <el-date-picker v-model="dateTime" type="daterange" start-placeholder="开始日期" end-placeholder="结束日期" | ||||
|           format="yyyy-MM-dd" value-format="yyyy-MM-dd" clearable /> | ||||
|       </el-form-item> | ||||
|       <el-form-item> | ||||
|         <el-button | ||||
|           type="primary" | ||||
|           icon="el-icon-search" | ||||
|           size="mini" | ||||
|           @click="handleQuery" | ||||
|           >搜索</el-button | ||||
|         > | ||||
|         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery" | ||||
|           >重置</el-button | ||||
|         > | ||||
|         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> | ||||
|         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> | ||||
|       </el-form-item> | ||||
|     </el-form> | ||||
|     <!-- 列表 --> | ||||
|     <el-table | ||||
|       ref="roadTable" | ||||
|       v-loading="loading" | ||||
|       :data="roadList" | ||||
|       @selection-change="handleSelectionChange" | ||||
|       style="width: 100%" | ||||
|     > | ||||
|     <el-table ref="roadTable" :data="roadList" @selection-change="handleSelectionChange" | ||||
|       style="width: 100%"> | ||||
|       <el-table-column type="selection" width="55" align="center" /> | ||||
|       <el-table-column label="巡检路段" align="center" prop="segmentName" /> | ||||
|       <el-table-column label="巡检路段编码" align="center" prop="segmentCode"> | ||||
| @ -96,68 +53,29 @@ | ||||
|       <el-table-column label="车牌号码" align="center" prop="plateNo"> | ||||
|       </el-table-column> | ||||
|       <el-table-column label="任务id" align="center" prop="extId" /> | ||||
|       <el-table-column | ||||
|         label="操作" | ||||
|         align="center" | ||||
|         class-name="small-padding fixed-width" | ||||
|       > | ||||
|       <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | ||||
|         <template slot-scope="scope"> | ||||
|           <el-button | ||||
|             size="mini" | ||||
|             type="text" | ||||
|             icon="el-icon-view" | ||||
|             @click="viewDefect(scope.row)" | ||||
|             >查看 | ||||
|           <el-button size="mini" type="text" icon="el-icon-view" @click="viewDefect(scope.row)">查看 | ||||
|           </el-button> | ||||
|           <el-button | ||||
|             size="mini" | ||||
|             type="text" | ||||
|             icon="el-icon-refresh-right" | ||||
|             @click="handleRetrace(scope.row)" | ||||
|             v-hasPermi="['system:defect:edit']" | ||||
|             >回顾 | ||||
|           </el-button> | ||||
|           <el-button | ||||
|             size="mini" | ||||
|             type="text" | ||||
|             icon="el-icon-download" | ||||
|             @click="handleExport(scope.row)" | ||||
|             v-hasPermi="['system:defect:remove']" | ||||
|             >导出 | ||||
|           <el-button size="mini" type="text" icon="el-icon-refresh-right" @click="handleRetrace(scope.row)">回顾 | ||||
|           </el-button> | ||||
|           <el-button style="margin-left: 0.5rem;" size="mini" type="text" icon="el-icon-download" | ||||
|             @click="handelExpport(scope.row)">导出</el-button> | ||||
|         </template> | ||||
|       </el-table-column> | ||||
|     </el-table> | ||||
|     <!-- 分页组件 --> | ||||
|     <div class="pagination-part"> | ||||
|       <el-pagination | ||||
|         background | ||||
|         :current-page.sync="pagination.page" | ||||
|         @current-change="handleCurrentChange" | ||||
|         :page-sizes="[10, 20, 30, 40]" | ||||
|         :page-size.sync="pagination.size" | ||||
|         @size-change="handleSizeChange" | ||||
|         layout="total, sizes, prev, pager, next, jumper" | ||||
|         :total="tableTotal" | ||||
|       > | ||||
|       <el-pagination background :current-page.sync="pagination.page" @current-change="handleCurrentChange" | ||||
|         :page-sizes="[10, 20, 30, 40]" :page-size.sync="pagination.size" @size-change="handleSizeChange" | ||||
|         layout="total, sizes, prev, pager, next, jumper" :total="tableTotal"> | ||||
|       </el-pagination> | ||||
|     </div> | ||||
|     <!-- 查看新增病害弹窗 --> | ||||
|     <el-dialog | ||||
|       title="查看新增病害" | ||||
|       :visible.sync="viewVisible" | ||||
|       width="80rem" | ||||
|       append-to-body | ||||
|       :close-on-click-modal="false" | ||||
|       destroy-on-close | ||||
|       @close="viewCancel" | ||||
|     > | ||||
|       <task-view | ||||
|         v-if="viewVisible" | ||||
|         @cancel="viewCancel" | ||||
|         :dialogItem="dialogItem" | ||||
|         :defectCascaderList="defectCascaderList" | ||||
|       ></task-view> | ||||
|     <el-dialog title="查看新增病害" :visible.sync="viewVisible" width="80rem" append-to-body :close-on-click-modal="false" | ||||
|       destroy-on-close @close="viewCancel"> | ||||
|       <task-view v-if="viewVisible" @cancel="viewCancel" :dialogItem="dialogItem" | ||||
|         :defectCascaderList="defectCascaderList"></task-view> | ||||
|       <!-- <task-retrace | ||||
|         v-if="viewVisible" | ||||
|         @cancel="viewCancel" | ||||
| @ -166,27 +84,29 @@ | ||||
|     </el-dialog> | ||||
| 
 | ||||
|     <!-- 回顾巡检任务弹窗 --> | ||||
|     <el-dialog | ||||
|       title="回顾任务" | ||||
|       fullscreen | ||||
|       :visible.sync="retraceVisible" | ||||
|       width="80rem" | ||||
|       append-to-body | ||||
|       :close-on-click-modal="false" | ||||
|       destroy-on-close | ||||
|       @close="retraceCancel" | ||||
|       class="retrace-dialog" | ||||
|     > | ||||
|       <task-retrace | ||||
|         v-if="retraceVisible" | ||||
|         @cancel="retraceCancel" | ||||
|         :dialogItem="dialogItem" | ||||
|       ></task-retrace> | ||||
|     <el-dialog title="回顾任务" fullscreen :visible.sync="retraceVisible" width="80rem" append-to-body | ||||
|       :close-on-click-modal="false" destroy-on-close @close="retraceCancel" class="retrace-dialog"> | ||||
|       <task-retrace v-if="retraceVisible" @cancel="retraceCancel" :dialogItem="dialogItem"></task-retrace> | ||||
|     </el-dialog> | ||||
| 
 | ||||
|     <!-- 导出数据弹窗 --> | ||||
|     <el-dialog title="导出" :visible.sync="exportVisible" width="30rem" append-to-body :close-on-click-modal="false" | ||||
|       destroy-on-close @close="exportCancel"> | ||||
|       <template> | ||||
|         <div style="font-size: 1.5rem;"> | ||||
|           导出是否附带图片 | ||||
|         </div> | ||||
|         <div class="dialog-footer"> | ||||
|           <el-button type="primary" @click="submitForm(true)">确 定</el-button> | ||||
|           <el-button @click="submitForm(false)">取 消</el-button> | ||||
|         </div> | ||||
|       </template> | ||||
|     </el-dialog> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| import { Loading } from "element-ui"; | ||||
| import TaskRetrace from "./components/task-retrace.vue"; | ||||
| import TaskView from "./components/task-view.vue"; | ||||
| import { | ||||
| @ -221,8 +141,6 @@ export default { | ||||
|       roadType: [], | ||||
|       // 列表数据绑定 | ||||
|       roadList: [], | ||||
|       // 列表加载状态 | ||||
|       loading: false, | ||||
|       // 列表已选数组 | ||||
|       checkIds: [], | ||||
|       // 非单个禁用 | ||||
| @ -244,6 +162,10 @@ export default { | ||||
|       retraceVisible: false, | ||||
|       // 病害类型下拉 | ||||
|       defectCascaderList: [], | ||||
| 
 | ||||
|       // 导出弹窗显隐控制 | ||||
|       exportVisible: false, | ||||
| 
 | ||||
|     }; | ||||
|   }, | ||||
|   created() { | ||||
| @ -291,7 +213,7 @@ export default { | ||||
|      * @param {*} | ||||
|      * @return {*} | ||||
|      */ | ||||
|     handleSelect() {}, | ||||
|     handleSelect() { }, | ||||
| 
 | ||||
|     /** | ||||
|      * @description: 获取巡检路段下拉数据 | ||||
| @ -394,16 +316,45 @@ export default { | ||||
| 
 | ||||
|     /** | ||||
|      * @description: 点击导出事件 | ||||
|      * @return {*} | ||||
|      */ | ||||
|     handelExpport(item) { | ||||
|       this.exportVisible = true; | ||||
|       this.dialogItem = item; | ||||
|     }, | ||||
| 
 | ||||
|     /** | ||||
|      * @description: 导出文件 | ||||
|      * @return {*} | ||||
|      */ | ||||
|     submitForm(type) { | ||||
|       this.wordExport(this.dialogItem, type) | ||||
|     }, | ||||
| 
 | ||||
|     /** | ||||
|      * @description: 导出文件的方法 | ||||
|      * @param {*} item | ||||
|      * @return {*} | ||||
|      */ | ||||
|     handleExport(item) { | ||||
|       exportDefectData({ taskId: item.extId }).then(({ code, data }) => { | ||||
|           if(code===200){ | ||||
|             console.log(data,'ddd'); | ||||
|              | ||||
|           } | ||||
|     wordExport(item, type) { | ||||
|       Loading.service({ fullscreen: true }); | ||||
|       let loadingInstance = Loading.service({ fullscreen: true }); | ||||
|       exportDefectData({ taskId: item.extId, media: type }).then((res) => { | ||||
|         const link = document.createElement("a"); | ||||
|         const blob = new Blob([res], { | ||||
|           type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document", | ||||
|         }); | ||||
|         link.style.display = "none"; | ||||
|         link.href = URL.createObjectURL(blob); | ||||
|         // TODO 源文件名问题 | ||||
|         link.download = item.extId; | ||||
|         document.body.appendChild(link); | ||||
|         link.click(); | ||||
|         document.body.removeChild(link); | ||||
|       }).finally(() => { | ||||
|         this.exportCancel() | ||||
|         loadingInstance.close(); | ||||
|       }) | ||||
|     }, | ||||
| 
 | ||||
|     /** | ||||
| @ -443,6 +394,15 @@ export default { | ||||
|       this.retraceVisible = false; | ||||
|       this.dialogItem = {}; | ||||
|     }, | ||||
| 
 | ||||
|     /** | ||||
|  * @description: 关闭导出弹窗 | ||||
|  * @return {*} | ||||
|  */ | ||||
|     exportCancel() { | ||||
|       this.exportVisible = false; | ||||
|       this.dialogItem = {}; | ||||
|     } | ||||
|   }, | ||||
| }; | ||||
| </script> | ||||
| @ -474,11 +434,13 @@ export default { | ||||
| 
 | ||||
| /* 新增弹窗/编辑弹窗 */ | ||||
| .addForm { | ||||
| 
 | ||||
|   .el-select, | ||||
|   .el-cascader { | ||||
|     width: 100%; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| /* 新增地图框样式 */ | ||||
| .no-hand-cursor { | ||||
|   cursor: default !important; | ||||
| @ -521,5 +483,10 @@ export default { | ||||
|     background-color: #2e3a46; | ||||
|   } | ||||
| } | ||||
| </style> | ||||
| 
 | ||||
| /* 页脚 */ | ||||
| .dialog-footer { | ||||
|   display: flex; | ||||
|   justify-content: flex-end; | ||||
| } | ||||
| </style> | ||||
| @ -160,7 +160,6 @@ | ||||
|           icon="el-icon-plus" | ||||
|           size="mini" | ||||
|           @click="handleAdd" | ||||
|           v-hasPermi="['system:defect:add']" | ||||
|           >新增 | ||||
|         </el-button> | ||||
|       </el-col> | ||||
| @ -172,7 +171,6 @@ | ||||
|           size="mini" | ||||
|           :disabled="multiple" | ||||
|           @click="handleDelete" | ||||
|           v-hasPermi="['system:defect:remove']" | ||||
|           >删除 | ||||
|         </el-button> | ||||
|       </el-col> | ||||
| @ -183,7 +181,6 @@ | ||||
|             icon="el-icon-download" | ||||
|             size="mini" | ||||
|             @click="handleExport" | ||||
|             v-hasPermi="['system:defect:export']" | ||||
|             >导出 | ||||
|           </el-button> | ||||
|         </el-col> --> | ||||
| @ -195,7 +192,6 @@ | ||||
|           size="mini" | ||||
|           :disabled="single" | ||||
|           @click="handleUpdateBatch" | ||||
|           v-hasPermi="['system:defect:edit']" | ||||
|           >批量确认 | ||||
|         </el-button> | ||||
|       </el-col> --> | ||||
| @ -264,7 +260,6 @@ | ||||
|             type="text" | ||||
|             icon="el-icon-edit" | ||||
|             @click="handleUpdate(scope.row)" | ||||
|             v-hasPermi="['system:defect:edit']" | ||||
|             >修改 | ||||
|           </el-button> | ||||
|           <el-button | ||||
| @ -272,7 +267,6 @@ | ||||
|             type="text" | ||||
|             icon="el-icon-delete" | ||||
|             @click="handleDelete(scope.row)" | ||||
|             v-hasPermi="['system:defect:remove']" | ||||
|             >删除 | ||||
|           </el-button> | ||||
|         </template> | ||||
|  | ||||
| @ -60,8 +60,8 @@ | ||||
|       style="width: 100%" | ||||
|     > | ||||
|       <el-table-column type="selection" width="55" align="center" /> | ||||
|       <el-table-column label="设备编号" align="center" prop="segmentCode" /> | ||||
|       <el-table-column label="所属车辆" align="center" prop="segmentCode" /> | ||||
|       <el-table-column label="设备编号" align="center" prop="clientId" /> | ||||
|       <el-table-column label="所属车辆" align="center" prop="plateNo" /> | ||||
|       <el-table-column label="作业范围" align="center" prop="segmentCode" /> | ||||
|       <el-table-column label="设备状态" align="center" prop="name" /> | ||||
|       <el-table-column label="网络连接" align="center" prop="name" /> | ||||
| @ -206,9 +206,9 @@ export default { | ||||
|         ...this.searchForm, | ||||
|         ...this.pagination, | ||||
|       }; | ||||
|       getTerminalList(params).then(({ code, data }) => { | ||||
|       getTerminalList(params).then(({ code, rows }) => { | ||||
|         if (code === 200) { | ||||
|           this.sectionList = data.rows; | ||||
|           this.sectionList = rows; | ||||
|         } | ||||
|       }); | ||||
|     }, | ||||
|  | ||||
| @ -29,7 +29,6 @@ | ||||
|             type="text" | ||||
|             icon="el-icon-circle-check" | ||||
|             @click="handleConfirm(scope.row)" | ||||
|             v-hasPermi="['system:defect:edit']" | ||||
|             >订阅 | ||||
|           </el-button> | ||||
|           <el-button | ||||
| @ -38,7 +37,6 @@ | ||||
|             type="text" | ||||
|             icon="el-icon-circle-close" | ||||
|             @click="handleCancel(scope.row)" | ||||
|             v-hasPermi="['system:defect:edit']" | ||||
|             >取消订阅 | ||||
|           </el-button> | ||||
|         </template> | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user