优化控制台消息推送

This commit is contained in:
龙运模 2024-10-21 18:39:43 +08:00
parent 481dd4af44
commit c174f3df6a
9 changed files with 219 additions and 35 deletions

View File

@ -2,6 +2,13 @@ export default {
state: {
main_order_count:[],
repair_count:[],
home_msg:{
briefing:[],
workOrder:[],
spareParts:[],
reachStandard:[]
}
},
mutations: {
set_list_count_info(state, list){
@ -10,6 +17,21 @@ export default {
set_repair_count(state, list){
state.repair_count = list;
},
set_home_msg(state,key){
if(key.data && (key.data.type==21 || key.data.type==24 || key.data.type == 25 || key.data.type == 26))
if(key.data.type == 21){
state.home_msg.briefing = key;
}else if(key.data.type == 24){
state.home_msg.workOrder = key;
}else if(key.data.type == 25){
state.home_msg.spareParts = key;
}else if(key.data.type == 26){
state.home_msg.reachStandard = key;
}
}
},
actions: {

View File

@ -87,6 +87,10 @@
text-align: left;
color: #333;
font-weight: initial;
.text{
width: 100%;
display: inline-block;
}
}
.seq{flex-basis: 50px;overflow: hidden;}
}
@ -108,12 +112,25 @@
font-size: 12px;
.el-row{
margin-bottom: 6px;
.el-col{
display: flex;
}
.name{
width: 65px;
flex-basis: 65px;
display: inline-block;
text-align: right;
margin-right: 12px;
}
.text{
flex: 1;
}
}
}
.orderInfoRepair{
.el-row{
.name{
flex-basis: 90px;
}
}
}
.componentBox{

View File

@ -5,8 +5,8 @@ import systemConfig from '@/config';
import router from "@/router";
import {ElNotification} from 'element-plus';
import {eventBus} from "./eventBus"
import store from "../store";
// import api from '../api';
// import store from "../store";
let websocket = null;
let global_callback = function () {};
@ -132,6 +132,7 @@ function webSocketOnMessage(msg) {
} else {
if(msg.type === "") return
result = JSON.parse(msg.data);
store.commit('set_home_msg', result);
// if(result.type == 13){
// store.commit("SET_WS_Msg_NUM", result.data.todo_msg_count);
// }

View File

@ -124,7 +124,7 @@ import barBox from "./components/bar";
import ringBox from "./components/ring";
import pointBox from "./components/point";
import shortcuts from "./components/shortcuts";
import {eventBus} from "@/utils/eventBus"
import {eventBus} from "@/utils/eventBus";
export default {
name: "index",
components:{
@ -170,11 +170,30 @@ export default {
{date_type:'month',label:'按月'},
{date_type:'year',label:'按年'},
],
dataType:"month"
dataType:"month",
home_msg:this.$store.state.msg.home_msg
}
},
computed:{
},
watch:{
home_msg:{
handler(obj){
for(let i in obj){
if(obj[i] && obj[i].data){
this.getWsResult(obj[i])
}
}
},
deep:true,
immediate:true
}
},
mounted() {
this.$emit('on-mounted');
//
eventBus.$on('sockBack', this.getWsResult);
},

View File

@ -4,9 +4,9 @@
<div class="searchHeaderBack">
<el-input class="searchInput" v-focus type="text" size="large" v-model="keyword">
<template #prepend>
<el-dropdown class="searchDrop" trigger="click">
<el-dropdown class="searchDrop" trigger="click" @command="dropdownChange">
<span class="dropTitle el-dropdown-link">
维保工单 <el-icon class="el-icon--right"><el-icon-arrow-down /></el-icon>
{{dropdownName}} <el-icon class="el-icon--right"><el-icon-arrow-down /></el-icon>
</span>
<template #dropdown>
<el-dropdown-menu>
@ -30,7 +30,12 @@
<div class="collapseHeaderBack">
<div class="collapseHeaderNav">
<div class="item seq">序号</div>
<div class="item" :style="{'width':item.width+'px'}" v-for="(item,index) in orderColumn" :key="index">{{item.label}}</div>
<template v-if="dropdownType=='a'">
<div class="item" :style="{'width':item.width+'px'}" v-for="(item,index) in orderColumn" :key="index">{{item.label}}</div>
</template>
<template v-if="dropdownType=='b'">
<div class="item" :style="{'width':item.width+'px'}" v-for="(item,index) in planColumn" :key="index">{{item.label}}</div>
</template>
</div>
</div>
<el-collapse class="collapseMain" @change="collapseChange" :accordion="true">
@ -39,19 +44,33 @@
<template #title>
<div class="collapseHeader">
<div class="item seq">{{index+1}}</div>
<div class="item" :style="{'width':em.width+'px'}" v-for="(em,index) in orderColumn" :key="index">
<!-- <el-tooltip effect="dark" :content="item[em.prop]"></el-tooltip>-->
<span v-if="em.prop == 'business_status'">
<span v-for="(li,ind) in statusList" :key="ind">
<span :style="{color:li.value==1?`var(--el-order-color-1)`:li.value==2?`var(--el-order-color-2)`:li.value==3?`var(--el-order-color-3)`:li.value==4?`var(--el-order-color-4)`:`var(--el-order-color-5)`}"
v-if="li.value == item[em.prop]">{{li.label}}</span>
<template v-if="dropdownType=='a'">
<div class="item" :style="{'width':em.width+'px'}" v-for="(em,index) in orderColumn" :key="index">
<span v-if="em.prop == 'business_status'">
<span v-for="(li,ind) in statusList" :key="ind">
<span :style="{color:li.value==1?`var(--el-order-color-1)`:li.value==2?`var(--el-order-color-2)`:li.value==3?`var(--el-order-color-3)`:li.value==4?`var(--el-order-color-4)`:`var(--el-order-color-5)`}"
v-if="li.value == item[em.prop]">{{li.label}}</span>
</span>
</span>
</span>
<span v-else>{{item[em.prop]}}</span>
</div>
<!-- <el-tooltip effect="dark" :content="item[em.prop]"><span class="text">{{item[em.prop]}}</span></el-tooltip> -->
<span v-else>{{item[em.prop]}}</span>
</div>
</template>
<template v-if="dropdownType=='b'">
<div class="item" :style="{'width':em.width+'px'}" v-for="(em,index) in planColumn" :key="index">
<span v-if="em.prop == 'repair_status'">
<span v-for="(li,ind) in statusList" :key="ind">
<span :style="{color:li.value==1?`var(--el-order-color-1)`:li.value==2?`var(--el-order-color-2)`:li.value==3?`var(--el-order-color-3)`:li.value==4?`var(--el-order-color-4)`:`var(--el-order-color-5)`}"
v-if="li.value == item[em.prop]">{{li.label}}</span>
</span>
</span>
<span v-else>{{item[em.prop]}}</span>
</div>
</template>
</div>
</template>
<div class="collapseBody">
<!-- 维保工单 -->
<div class="collapseBody" v-if="dropdownType=='a'">
<div class="title">工单详情</div>
<div class="stepView">
<el-steps class="orderSteps" :active="item.process_num" align-center>
@ -109,6 +128,58 @@
</el-table>
</div>
</div>
<!-- 维修工单 -->
<div class="collapseBody" v-if="dropdownType=='b'">
<div class="title">工单详情</div>
<div class="orderInfo orderInfoRepair">
<el-row>
<el-col :span="8" :lg="6">
<span class="name">维修单号:</span><span class="text">{{item.repair_order_no}}</span>
</el-col>
<el-col :span="8" :lg="6">
<span class="name">PE确认时间:</span><span class="text">{{item.maintenance_order.pe_confirmation_time}}</span>
</el-col>
</el-row>
<el-row>
<el-col :span="8" :lg="6">
<span class="name">故障描述:</span><span class="text">{{item.maintenance_order.fault_description}}</span>
</el-col>
<el-col :span="8" :lg="6">
<span class="name">保修期结束:</span><span class="text">{{item.maintenance_order.warranty_end_date}}</span>
</el-col>
</el-row>
<el-row>
<el-col :span="8" :lg="6">
<span class="name">维修动作:</span><span class="text"></span>
</el-col>
</el-row>
<el-row>
<el-col :span="8" :lg="6">
<span class="name">不良原因:</span><span class="text"></span>
</el-col>
<el-col :span="8" :lg="6">
<span class="name">不良现象:</span><span class="text"></span>
</el-col>
<el-col :span="8" :lg="6">
<span class="name">现场步骤分析:</span><span class="text"></span>
</el-col>
<el-col :span="8" :lg="6">
<span class="name">SLA不达标原因:</span><span class="text"></span>
</el-col>
</el-row>
</div>
<div class="componentBox">
<el-table :data="item.maintenance_order.component_info" :size="size" stripe :header-cell-style="{'background': '#1367C1','color':'#fff'}">
<el-table-column type="index" label="序号" align="center"></el-table-column>
<el-table-column prop="component_serial_no" show-overflow-tooltip label="部件SN/Sp" width="160"></el-table-column>
<el-table-column prop="component_manufacturer" show-overflow-tooltip label="部件厂商" width="130"></el-table-column>
<el-table-column prop="component_model" show-overflow-tooltip label="部件型号" width="160"></el-table-column>
<el-table-column prop="component_pn" show-overflow-tooltip label="部件PN/Sp" width="150"></el-table-column>
<el-table-column prop="bd_backup_count" show-overflow-tooltip label="剩余BD数" width="120"></el-table-column>
</el-table>
</div>
</div>
</el-collapse-item>
</template>
</el-collapse>
@ -124,15 +195,17 @@ export default {
return{
size:'small',
loading:false,
keyword:"Z240919004",
keyword:"",
dropdownName:"维保工单",
dropdownType:'a',
params:{
repair_order_no:{
operator:"like",
value:"%Z240919004%"
value:""
},
component_serial_no:{
operator:"like",
value:"%Z240919004%"
value:""
},
},
activeNames:[],
@ -151,12 +224,12 @@ export default {
],
planColumn:[
{label:"工单号",prop:"repair_order_no",width:160},
{label:"外发日期",prop:"repair_order_no",width:160},
{label:"外发日期",prop:"created_at",width:160},
{label:"维保商场",prop:"repair_order_no",width:160},
{label:"计划时间",prop:"repair_order_no",width:160},
{label:"完成时间",prop:"repair_order_no",width:160},
{label:"故障类型",prop:"repair_order_no",width:160},
{label:"状态",prop:"repair_order_no",width:160},
{label:"计划时间",prop:"created_at",width:160},
{label:"完成时间",prop:"updated_at",width:160},
{label:"故障类型",prop:"fault_type",width:160},
{label:"状态",prop:"repair_status",width:160},
],
rows:[],
statusList:[],
@ -170,7 +243,12 @@ export default {
async searchClick() {
let params = this.setObj();
this.loading = true;
const res = await this.$API.orders.order.maintenance.search.post(params);
let res;
if(this.dropdownType === 'a'){
res = await this.$API.orders.order.maintenance.search.post(params);
}else if(this.dropdownType === 'b'){
res = await this.$API.orders.order.repair.search.post(params);
}
this.loading = false;
if(res.code == 200){
res.data.forEach(item=>{
@ -179,6 +257,17 @@ export default {
item.process_engine = obj.processedList;
item.process_num = obj.num;
}
if(item.maintenance_order && item.maintenance_order.component_info && item.maintenance_order.component_info==0){
item.maintenance_order.component_info = [
{
component_serial_no:item.maintenance_order.component_serial_no,
component_manufacturer:item.maintenance_order.component_manufacturer,
component_model:item.maintenance_order.component_model,
component_pn:item.maintenance_order.component_pn,
bd_backup_count:item.maintenance_order.bd_backup_count
}
]
}
if(item.component_info && item.component_info.length===0){
item.component_info = [
{
@ -191,7 +280,6 @@ export default {
]
}
})
console.log(res.data,788)
this.rows = res.data;
}
},
@ -227,6 +315,15 @@ export default {
if (foundNodeTrue && obj.processedList[i].node !== true) break;
}
return obj;
},
dropdownChange(e){
this.dropdownType = e;
this.rows = [];
if(e === "a"){
this.dropdownName = '维保工单';
}else if(e === 'b'){
this.dropdownName = '维修工单'
}
}
}
}

View File

@ -32,6 +32,7 @@
mode: "add",
titleMap: {
add: '新增部件信息',
edit: '编辑部件信息',
},
visible: false,
isSave: false,
@ -79,7 +80,7 @@
this.form.num = data.num;
}
this.form.component_serial_no = data.component_serial_no;
this.form.component_manufacturer = data.component_serial_no;
this.form.component_manufacturer = data.component_manufacturer;
this.form.component_model = data.component_model;
this.form.component_pn = data.component_pn;
}

View File

@ -286,8 +286,11 @@ export default {
if(this.info.component_info.length>0){
this.info.component_info.forEach((item,index)=>{
if(index == data.num || (data.id && item.id == data.id)){
item = data;
item.num = index;
item.component_manufacturer = data.component_manufacturer;
item.component_model = data.component_model;
item.component_pn = data.component_pn;
item.component_serial_no = data.component_serial_no;
}
})
}else{

View File

@ -5,7 +5,7 @@
<div class="status">
<span class="name">当前状态</span>
<span class="text">
<span v-for="(item,ind) in statusList" :key="ind">
<span v-for="(item,ind) in setMap.statusList" :key="ind">
<span :style="{color:item.value==1?`var(--el-order-color-1)`:item.value==2?`var(--el-order-color-2)`:item.value==3?`var(--el-order-color-3)`:item.value==4?`var(--el-order-color-4)`:`var(--el-order-color-5)`}"
v-if="item.value == info.business_status">{{item.label}}</span>
</span>
@ -16,7 +16,11 @@
<el-row>
<el-col :span="8" :lg="6">
<span class="label">报修客户</span>
<span class="text">{{info.customer_name}}</span>
<span class="text">
<span v-for="(item,index) in setMap.customerList" :key="index">
<span v-if="item.id == info.customer_id">{{item.customer_name}}</span>
</span>
</span>
</el-col>
<el-col :span="8" :lg="6">
<span class="label">标准机型</span>
@ -155,17 +159,34 @@ export default {
info:{
component_info:[]
},
statusList:[]
setMap:{
statusList:[],
customerList:[]
}
}
},
mounted() {
this.getStatusList();
this.getCustomerSelect();
},
methods:{
async getStatusList() {
const res = await this.$API.orders.order.maintenance.status.post();
if (res.code == 200) {
this.statusList = res.data;
this.setMap['statusList'] = res.data;
}
},
async getCustomerSelect(){
let params = {
field:"customer_name",
id:{
operator:"in",
value:""
}
}
const res = await this.$API.setup.customer.select.post(params);
if(res.code == 200){
this.setMap['customerList'] = res.data;
}
},
}

View File

@ -128,7 +128,7 @@ export default {
const params = {
order_ids: [this.params.order_id],
is_verify_erp_inventory:this.info.is_verify_erp_inventory,
component_info:this.info.component_info
component_info:this.info.component_info.filter(em=>!em.id)
};
this.saveLoading = true;
const res = await this.$API.orders.order.maintenance.submit.post(params);
@ -157,8 +157,11 @@ export default {
if(this.info.component_info.length>0){
this.info.component_info.forEach((item,index)=>{
if(index == data.num || (data.id && item.id == data.id)){
item = data;
item.num = index;
item.component_manufacturer = data.component_manufacturer;
item.component_model = data.component_model;
item.component_pn = data.component_pn;
item.component_serial_no = data.component_serial_no;
}
})
}else{