From e8e7f2c01f78994b2a8717224537babbdd40b040 Mon Sep 17 00:00:00 2001
From: songshankun <songshankun@foxmail.com>
Date: 星期二, 14 十一月 2023 17:57:29 +0800
Subject: [PATCH] feat: 更改缺少工艺参数允许生产的情况下显示提示的逻辑
---
src/views/visualization.vue | 1248 ++++++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 939 insertions(+), 309 deletions(-)
diff --git a/src/views/visualization.vue b/src/views/visualization.vue
index 12c4058..65eda1a 100644
--- a/src/views/visualization.vue
+++ b/src/views/visualization.vue
@@ -1,56 +1,76 @@
<template>
- <div class="home">
- <!-- v-if="Object.keys(taskData).length > 0 && taskData.Procedure.ID" -->
- <template>
+ <div class="home" ref="homeRef">
+ <!-- v-if="Tasks&&Tasks.length>0" -->
+ <template >
<div class="left">
<p class="title">
- <span
- class="font set-title"
- style="float: left; margin-right: 15px;"
- @click="cutClick(1)"
- >
- <img style="width:32px;" v-if="activeName == 1" src="../../public/one-blue.png" />
- <img style="width:32px;" v-else src="../../public/one.png" />
- </span>
- <span class="font set-title" style="float: left" @click="cutClick(2)">
- <img style="width:32px;" v-if="activeName == 2" src="../../public/two-blue.png" />
- <img style="width:32px;" v-else src="../../public/two.png" />
- </span>
- 鐢熶骇绠$悊鐪嬫澘
+ <template v-if="Number(ChannelAmount)>1">
+ <span
+ class="font set-title"
+ style="float: left; margin-right: 15px;"
+ @click="cutClick(1)"
+ >
+ <img style="width:32px;" v-if="activeName == 1" src="../../public/one-blue.png" />
+ <span v-else>
+ <img style="width:32px;" src="../../public/one.png" />
+ </span>
+ </span>
+ <span class="font set-title" style="float: left;margin-right: 15px;" @click="cutClick(2)">
+ <img style="width:32px;" v-if="activeName == 2" src="../../public/two-blue.png" />
+ <img style="width:32px;" v-else src="../../public/two.png" />
+ </span>
+ <span
+ class="font set-title"
+ style="float: left;"
+ @click="cutClick(3)"
+ >
+ <img style="width:32px;" v-if="activeName == 3" src="../../public/right-blue.png" />
+ <span v-else>
+ <img style="width:32px;" src="../../public/right.png" />
+ </span>
+ </span>
+ </template>
+ 鏅鸿兘宸ヤ綔鍙�
<span
class="font el-icon-setting set-title"
style="float: right"
@click="setUrl"
></span>
<span
+ class="font el-icon-s-tools set-title"
+ style="float: right;margin-right: 6px"
+ @click="openParamsConfigModal"
+ ></span>
+ <span
style="float: right;margin-right:20px;font-size:28px;line-height:25px;"
@click="taskClick"
>
- <el-badge :value="TaskCount" :class="TaskCount==0?'item color_666':'item color_fff'">
+ <el-badge :value="TaskCount" :class="(TaskCount==0||isTipShow)?'item color_666':'item color_fff'">
<i class="el-icon-chat-dot-round" />
</el-badge>
</span>
</p>
<div
- :class="activeName == 1 ? 'active-one' : 'active-two'"
+ :class="(activeName == 1||activeName == 3) ? 'active-one' : 'active-two'"
v-for="(taskData, index) in Tasks"
:key="index"
>
+ <template v-if="taskData">
<div class="gong-date">
- 宸ュ簭杩愯鏃堕棿锛歿{ getFormatTime(taskData.Procedure.startTime) }}
+ 宸ュ簭杩愯鏃堕棿锛歿{ getTaskRunningTime(taskData.Procedure.realStartTime,taskData.Procedure.realEndTime) }}
</div>
<div class="statelist">
<span class="title-item"
>宸ュ崟缂栧彿:
<span class="color_4efefa">{{
- taskData.Order.workOrderId || ""
+ taskData.Order.workOrderId || "--"
}}</span>
</span>
<span class="title-item"
>褰撳墠宸ュ簭:
<span class="color_4efefa">{{
- taskData.Procedure.procedure.procedureName || ""
+ taskData.Procedure.procedure.procedureName || "--"
}}</span>
</span>
<span class="title-item"
@@ -74,8 +94,8 @@
</span>
</span> -->
</div>
- <div class="gongx" v-if="taskData.AllProcedures">
- <el-steps :active="taskData.CurrentProcedureIndex?taskData.CurrentProcedureIndex:0" finish-status="success" class="steps">
+ <div class="gongx">
+ <el-steps v-if="taskData.AllProcedures" :active="taskData.CurrentProcedureIndex ?? 0" finish-status="success" class="steps">
<el-step icon="" :title="item" v-for="(item,index) in taskData.AllProcedures" :key="index"></el-step>
</el-steps>
</div>
@@ -89,7 +109,8 @@
style="font-size: 35px; font-weight: 600"
class="color_green"
>
- {{ taskData.finishNumber }}{{ taskData.Order.unit }}
+ {{ processingStatistics(taskData).finishNumber }}
+<!-- {{ taskData.Order.unit }}-->
</dd>
</dl>
</div>
@@ -102,59 +123,57 @@
style="font-size: 35px; font-weight: 600"
class="color_green"
>
- {{ taskData.Order.amount || 0 }}{{ taskData.Order.unit }}
+ {{ processingStatistics(taskData).totalNumber }}
+<!-- {{ taskData.Order.unit }}-->
</dd>
</dl>
</div>
</div>
</div>
<div class="content_right">
- <el-descriptions :column="activeName == 1 ? 2 : 1" :colon="true">
+ <div class="gif" v-if="taskData.Procedure.ID" @click="processModelClick(taskData,index)">
+ <img class="blink" v-if="taskData.isUpdateIcon" src="../../public/shan.gif" />
+ <span v-else class="tip"></span>
+ </div>
+ <el-descriptions :column="(activeName == 1||activeName == 3) ? 2 : 1" :colon="true">
<el-descriptions-item label="浜у搧鍚嶇О">{{
- taskData.Order.productName || ""
+ taskData.Order.productName || "--"
}}</el-descriptions-item>
<el-descriptions-item label="鏁伴噺"
>{{ taskData.Order.amount || 0
}}{{ taskData.Order.unit }}</el-descriptions-item
>
<el-descriptions-item label="浜よ揣鏃ユ湡">{{
- taskData.Order.deliverDate || ""
+ taskData.Order.deliverDate || "--"
}}</el-descriptions-item>
<el-descriptions-item label="宸ユ椂">
- {{ taskData.Procedure.procedure.workHours || "" }}
+ {{ taskData.Procedure.procedure.workHours || "--" }}
</el-descriptions-item>
<el-descriptions-item label="璁″垝鏃堕棿"
- >{{ formatDate(taskData.Order.startTime) || "" }}
+ >{{ formatDate(taskData.Procedure.startTime) || "--" }}
-
- {{ formatDate(taskData.Order.endTime) }}</el-descriptions-item
+ {{ formatDate(taskData.Procedure.endTime) }}</el-descriptions-item
>
- <el-descriptions-item label="璐х墿鎻忚堪">{{
- taskData.Order.orderAttr || ""
- }}</el-descriptions-item>
- <el-descriptions-item label="瀹㈡埛鍚嶇О">{{
- taskData.Order.customer || ""
+ <el-descriptions-item label="閫氶亾">
+ {{ channelNameConfig[taskData.Channel] || "--" }}
+ </el-descriptions-item>
+ <el-descriptions-item label="瀹㈡埛缂栫爜">{{
+ taskData.Order.customer || "--"
}}</el-descriptions-item>
<el-descriptions-item label="鍙傛暟瑕佹眰">{{
- taskData.Order.parameter || ""
+ taskData.Order.parameter || "--"
}}</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="1" :colon="true">
<el-descriptions-item label="瀹屾垚搴�" style="width: 100%">
<!--:text-format="format" -->
<el-progress
- define-back-color="#133EAF"
- color="#09E5ED"
+ define-back-color="#132f6e"
+ color="#00cc66"
text-color="#fff"
:text-inside="true"
:stroke-width="30"
- :percentage="
- (taskData.Order && taskData.finishNumber != 0)
- ? parseInt(
- (taskData.finishNumber / taskData.Order.amount) *
- 100
- )
- : 0
- "
+ :percentage="calculateProgress(processingStatistics(taskData))"
></el-progress>
</el-descriptions-item>
<!-- <el-descriptions-item label="鍚堟牸鐜�" style="width: 100%">
@@ -194,19 +213,35 @@
v-for="(list, index2) in item"
>
<div class="card_content">
- <div class="card_contentLeft">{{ list.materialId }}</div>
+ <div class="card_contentLeft font_dian">
+ <el-popover
+ width="200"
+ :content="list.materialId"
+ placement="top-start"
+ trigger="click"
+ >
+ <span slot="reference">{{ list.materialId }}</span>
+ </el-popover>
+ </div>
</div>
- <div class="card_top">
- <div>
+ <div class="card-top-input-out-l">
+ <div class="font_dian">
<!-- 璁惧12<i
style="font-size: 14px"
class="el-icon-right font-arrow-20"
></i>
璁惧13 -->
- {{ list.materialName }}
+ <el-popover
+ width="200"
+ :content="list.materialName"
+ placement="top-start"
+ trigger="click"
+ >
+ <span slot="reference">{{ list.materialName }}</span>
+ </el-popover>
</div>
</div>
- <div class="card_top2">
+ <div class="card-top-input-out-r">
<div style="line-height: 45px; text-align: center">
{{ list.amount }} {{ list.unit }}
</div>
@@ -216,11 +251,11 @@
</div>
</el-carousel-item>
</el-carousel>
- <el-button type="primary" class="color_f70f83">
+ <el-button type="primary" class="color_f70f83 bottom-box-btn">
<i class="el-icon-phone-outline" />鐗╂枡鍛煎彨</el-button
>
</div>
- <i class="el-icon-arrow-right font-arrow-20 color_4efefa"></i>
+ <i class="el-icon-arrow-right font-arrow-20 color_318583"></i>
<div class="bottom_list">
<div class="bottom-title">
褰撳墠宸ュ簭:{{ taskData.Procedure.procedure.procedureName || "" }}
@@ -238,74 +273,77 @@
v-for="(item, index) in taskData.procedureList"
>
<div
- class="card"
:key="index2"
v-for="(list, index2) in item"
>
- <template v-if="list.name == '宸ュ簭'">
+ <div
+ class="card"
+ v-if="list.name == '宸ュ簭'">
<div class="card_content">
- <div class="card_contentLeft color_blue">
- {{ list.deviceName }}
+ <div class="card_contentLeft color_blue font_dian">
+ <!-- {{ list.deviceName }} -->
+ <el-popover
+ width="200"
+ :content="list.deviceName"
+ placement="top-start"
+ trigger="click"
+ >
+ <span slot="reference">{{ list.deviceName }}</span>
+ </el-popover>
<!-- <span style="float: right">6m/s</span> -->
</div>
</div>
<div class="card_top-3">
<span class="card-top-r-t"
- >瀹屾垚杩涘害锛歿{
- taskData.Order && taskData.finishNumber != 0
- ? parseInt(
- (taskData.finishNumber /
- taskData.Order.amount) *
- 100
- )
- : 0
- }}</span
+ >瀹屾垚杩涘害锛歿{calculateProgress(processingStatistics(taskData))}}</span
>
<span class="card-top-r-b">
<el-progress
- define-back-color="#133EAF"
- color="#09E5ED"
+ define-back-color="#132f6e"
+ color="#00cc66"
text-color="#fff"
:text-inside="true"
:stroke-width="10"
- :percentage="
- (taskData.Order && taskData.finishNumber != 0)
- ? parseInt(
- (taskData.finishNumber /
- taskData.Order.amount) *
- 100
- )
- : 0
- "
+ :percentage="calculateProgress(processingStatistics(taskData))"
:show-text="false"
></el-progress>
</span>
</div>
<div class="card_top-2">
<div style="line-height: 45px; text-align: center">
- 鐢熶骇涓�
+ {{ displayProcedureStatus(taskData) }}
</div>
<!-- <span class="card-top-r-t">瀹屾垚杩涘害锛�50%</span>
<span class="card-top-r-b">12鏈�28鏃� 08:24</span> -->
</div>
- </template>
- <template v-else>
- <!-- <div class="card_content">
-
- </div> -->
- <div class="card_top-4">
- <div>宸ヨ壓缂栧彿锛歿{ list.number }}</div>
- <!-- <div
- style="
- font-size: 14px;
- color: #cfcfcf;
- line-height: 20px;
- "
+ </div>
+ <div v-else class="process-params">
+ <div class="process-params-title">
+ <el-popover
+ width="200"
+ :content="list.number"
+ placement="top-start"
+ trigger="click"
>
- 宸ヨ壓鐨勫叿浣撲俊鎭鐐瑰嚮鎺у埗鏌ョ湅锛�
- </div> -->
+ <span slot="reference">宸ヨ壓缂栧彿锛歿{ list.number }}</span>
+ </el-popover>
+
</div>
- </template>
+ <div class="process-params-value">
+ <!-- 宸ヨ壓鍙傛暟-->
+ {{mergeProcessParams(taskData.Arr)}}
+ </div>
+
+ <!-- <div
+ style="
+ font-size: 14px;
+ color: #cfcfcf;
+ line-height: 20px;
+ "
+ >
+ 宸ヨ壓鐨勫叿浣撲俊鎭鐐瑰嚮鎺у埗鏌ョ湅锛�
+ </div> -->
+ </div>
</div>
</el-carousel-item>
</el-carousel>
@@ -313,23 +351,27 @@
<p
style="font-size: 22px; margin-left: 12px; margin-top: 50px"
></p>
- <div class="right-small-btn">
+ <div class="right-small-btn bottom-box-btn">
<el-button type="primary"> 鎵撳嵃</el-button>
+
<el-popover
+ v-if="taskData.Procedure.Status && taskData.Procedure.Status!==3"
placement="top-end"
width="160"
class="button-finish"
v-model="finishShow['finishShow&'+index]"
trigger="click"
+ :ref="'popoverRef_' + index"
>
- <p>璇风‘璁ゆ槸鍚﹀凡瀹屾垚璇ョ敓浜т换鍔�?</p>
+ <p><i class="el-icon-error" style="color:red;margin-right:5px;"/>璇风‘璁ゆ槸鍚﹀凡瀹屾垚璇ョ敓浜т换鍔�?</p>
<div style="text-align: right; margin: 0">
- <el-button size="mini" @click="finishShow['finishShow&'+index] = false">
+ <el-button size="mini" @click="closePopover(index)">
鍙栨秷</el-button
>
<el-button
type="primary"
size="mini"
+ class="color_f70f83"
@click="finishClick(index, taskData)"
>
纭畾</el-button
@@ -337,9 +379,10 @@
</div>
<el-button type="primary" slot="reference"> 瀹屾垚</el-button>
</el-popover>
+ <el-button v-else type="primary" class="huise"> 瀹屾垚</el-button>
</div>
</div>
- <i class="el-icon-arrow-right font-arrow-20 color_4efefa"></i>
+ <i class="el-icon-arrow-right font-arrow-20 color_318583"></i>
<div class="bottom_list">
<div class="bottom-title">
<span>杈撳嚭璧勬簮</span>
@@ -366,57 +409,51 @@
>
<div class="card">
<div class="card_content">
- <div class="card_contentLeft">
- {{ list.materialId }}
+ <div class="card_contentLeft font_dian">
+ <el-popover
+ width="200"
+ :content="list.materialId"
+ placement="top-start"
+ trigger="click"
+ >
+ <span slot="reference">{{ list.materialId }}</span>
+ </el-popover>
</div>
</div>
- <div class="card_top">
- <div>
- {{ list.materialName }}
- <!-- 璁惧12<i
- style="font-size: 14px"
- class="el-icon-right font-arrow-20"
- ></i>
- 璁惧13 -->
+ <div class="card-top-input-out-l">
+ <div class="font_dian">
+ <el-popover
+ width="200"
+ :content="list.materialName"
+ placement="top-start"
+ trigger="click"
+ >
+ <span slot="reference">{{ list.materialName }}</span>
+ </el-popover>
</div>
</div>
- <div class="card_top2">
+ <div class="card-top-input-out-r">
<div style="line-height: 45px; text-align: center">
{{ list.amount }} {{ list.unit }}
</div>
- <!-- <span class="card-top-r-t">鐢熶骇瀹屾垚</span>
- <span class="card-top-r-b">12鏈�28鏃� 08:24</span> -->
</div>
- <!-- <div class="card-info-box">棰勮10鍒嗛挓閫佽揪</div> -->
</div>
- <!-- <div class="card">
- <div class="card_content">
- <div class="card_contentLeft color_green">
- 鍖呭彿:G22122304 100鍚�
- </div>
- </div>
- <div class="card_top">
- <div>
- 璁惧12<i
- style="font-size: 14px"
- class="el-icon-right font-arrow-20"
- ></i>
- 璁惧13
- </div>
- </div>
- <div class="card_top-2">
- <span class="card-top-r-t">鐢熶骇瀹屾垚</span>
- <span class="card-top-r-b">12鏈�28鏃� 08:24</span>
- </div>
- </div> -->
</div>
</el-carousel-item>
</el-carousel>
- <el-button type="primary" class="color_f70f83">
+ <el-button type="primary" class="color_f70f83 bottom-box-btn">
<i class="el-icon-phone-outline" />杩愯緭鍛煎彨</el-button
>
</div>
</div>
+ </template>
+ <!-- 2涓换鍔$殑鏃跺�欙紝绗簩涓换鍔′负绌虹殑鏃跺�欐樉绀� -->
+ <template
+ v-if="activeName == 2 &&(!taskData||Object.keys(taskData).length==0)"
+ >
+
+ <el-empty description="鏆傛棤浠诲姟..."></el-empty>
+ </template>
</div>
</div>
<div class="right">
@@ -436,14 +473,28 @@
</div>
<div class="right-top-m">
璁惧鐘舵��:
- <!-- 1鏂紑2鐢熶骇3寰呮満 -->
- <span style="position: relative"
- >
- <img v-if="plcStatus == 1" src="../../public/duan.png" />
- <img v-else src="../../public/lian.png" />
- <!-- <span class="yuandian"></span> -->
- {{ plcStatus==1?'鏂紑':(plcStatus==2?'鐢熶骇涓�':'寰呮満') }}
- </span>
+ <template v-for="(plcStatus, channel) in displayPLCStatus">
+ <!-- 1鏂紑2鐢熶骇3寰呮満 -->
+ <span class="plc-status" style="position: relative" v-if="plcStatus">
+ <el-popover
+ v-if="plcStatus === 1&&plcNotConnected"
+ width="180"
+ :content="plcNotConnected"
+ placement="top-end"
+ trigger="click"
+ >
+ <span slot="reference">
+ <img src="../../public/duan.png"/>
+ 鏂紑
+ </span>
+ </el-popover>
+ <span v-else>
+ <img v-if="plcStatus === 1&&!plcNotConnected" src="../../public/duan.png"/>
+ <img v-else src="../../public/lian.png"/>
+ {{ plcStatus === 1 ? '鏂紑' : (plcStatus === 2 ? '鐢熶骇涓�' : '寰呮満') }}
+ </span>
+ </span>
+ </template>
</div>
<div class="right-top-m-btn">
<!-- <el-button type="primary" @click="controlClick"> 鎺у埗</el-button> -->
@@ -454,7 +505,7 @@
<div class="right-person-box" v-if="workers && workers.length > 0">
<dl
class="right-small-person"
- v-for="(item, index) in workers"
+ v-for="(item, index) in deduplicateWorkers(displayWorkers())"
:key="index"
>
<dt>
@@ -471,9 +522,12 @@
style="font-size: 20px; font-weight: 600; margin-right: 10px"
>{{ item.workerName || "" }}</span
>
- <span>{{ item.phoneNum || "" }}</span>
+ <!-- <span>{{ item.phoneNum || "" }}</span> -->
+ <span class="color_yellow"><i class="el-icon-star-on" /><i class="el-icon-star-on" /><i class="el-icon-star-on" /><i class="el-icon-star-on" /><i class="el-icon-star-on" /></span>
</dl>
+
</div>
+
<!-- <div
style="
width: 100%;
@@ -488,7 +542,7 @@
</div> -->
</div>
<div class="right_base">
- <div class="right-small-title" style="line-height: 40px">鐭ヨ瘑搴�</div>
+ <div class="right-small-title" style="line-height: 40px;margin-top:20px;">鐭ヨ瘑搴�</div>
<Knowledge />
<div class="right-base-btn call">
<el-button type="primary"
@@ -498,8 +552,8 @@
</div>
</div>
</template>
- <!-- v-else -->
- <template>
+ <!-- -->
+ <!-- <template v-else>
<div class="home-img-box">
<div class="bg-title">
<img src="../../public/bg-title.png" />
@@ -529,17 +583,22 @@
</div>
</div>
</div>
- </template>
+
+ </template> -->
<!-- 鎺у埗鐨勫脊妗� -->
- <AddControl ref="control" :Arr="Arr" />
- <!-- 鎺у埗鐨勫脊妗� -->
- <AddIssue
+ <TaskControlModal
ref="control"
- :Arr="Arr"
- :taskData="taskData"
- :Order="taskData.Order"
- @getSetProductNumber="getTaskInfo"
+ :activeName="activeName"
+ @getSetProductNumber="reloadPage"
+ @isTip="isTip"
/>
+ <!-- 宸ヨ壓妯″瀷 -->
+ <ProcessModel
+ ref="processModel"
+ :listData="listData"
+ @updateGet="updateGet"
+ />
+ <ParamsConfigModal :visible="paramsConfigIsShow" @close="closeParamsConfigModal"></ParamsConfigModal>
</div>
</template>
@@ -552,20 +611,31 @@
startTask,
getProgress,
countdown,
+ getTaskUnStarted,
+ processModelList,
} from "@/api/home/index"; // 浜х嚎
import Card from "@/components/Card.vue";
import Knowledge from "../components/Knowledge.vue";
import AddControl from "../components/AddControl.vue";
import AddIssue from "../components/AddIssue.vue";
+import ProcessModel from "../components/ProcessModel.vue";
+import TaskControlModal from "@/components/TaskControlModal.vue";
+import {channelNameConfig} from "@/common/constants";
+import _ from 'lodash'
+import ParamsConfigModal from "@/components/ParamsConfigModal.vue";
export default {
components: {
+ ParamsConfigModal,
+ TaskControlModal,
Card,
Knowledge,
AddControl,
AddIssue,
+ ProcessModel,
},
data() {
return {
+ pollingTaskCountTimer: null,
activeName: 1,
progress: 70, //杩涘害
passrate: 30, //鍚堟牸鐜�
@@ -575,6 +645,9 @@
// 鍙充晶瀹屾垚
finishShow:{},
workers:[],
+ // 淇濆瓨褰撳墠涓嶅悓閫氶亾鐨勫�肩彮浜�
+ channelWorkersMap:{0:[],1:[]},
+ TasksCopy:[],
Tasks: [
{
Order: {
@@ -660,11 +733,35 @@
countDownHour: 0,
countDownMinute: 0,
Arr: [],
+ ArrError:'',
// 璁板綍瀹氭椂鍣ㄧ姸鎬�
procInfoTimer: null,
cutdownTimer: null,
+ ProcessModelTimer: null,
TaskCount:0,
- plcStatus:1,
+ PLCStatusMap:{0:0,1:0},
+ isTipShow:false,
+ // isFinsh:0,
+ safeProduce:'',
+ // 璁惧鏂紑鐨勫師鍥�
+ plcNotConnected:'',
+ ChannelAmount:0,
+ object:{
+ Order: {},
+ Procedure: {
+ procedure: { inputMaterials: [], outputMaterials: [], workers: [] },
+ },
+ inputMaterials: [],
+ outputMaterials: [],
+ procedureList: [],
+ },
+ processList:[],
+ listData:[],
+ resResult:[],
+ resprocInfoTimer:null,
+ channelNameConfig: channelNameConfig,
+ index:null,
+ paramsConfigIsShow:false
};
},
mounted() {
@@ -679,23 +776,222 @@
this.getDate3();
this.getDate2();
}, 5000);
- this.getTaskInfo();
+
+ let channelType = this.getChannelTypeFromUrl()
+ channelType = channelType ?? 1
+ this.activeName = channelType
+ this.getTaskInfo(channelType);
+ this.getTaskCountStatistics()
+ },
+ beforeDestroy() {
+ clearTimeout(this.pollingTaskCountTimer)
+ clearTimeout(this.procInfoTimer)
+ clearTimeout(this.ProcessModelTimer)
+ },
+ watch:{
+ // isFinsh(){
+ // if(this.isFinsh==this.Tasks.length){
+ // this.getStartArr()
+ // }
+ // }
+ },
+ computed:{
+ displayPLCStatus(){
+ let PLCStatus = []
+ if (this.activeName===1){
+ PLCStatus =[this.PLCStatusMap[0]]
+ }else if (this.activeName===2){
+ PLCStatus =[this.PLCStatusMap[0],this.PLCStatusMap[1]]
+ }else if (this.activeName===3){
+ PLCStatus =[this.PLCStatusMap[1]]
+ }else {
+ return []
+ }
+
+ return PLCStatus
+ }
},
methods: {
+ newTaskPlaceholder(channel){
+ return {
+ Order: {},
+ Procedure: {
+ procedure: { inputMaterials: [], outputMaterials: [], workers: [] },
+ },
+ Channel:channel,
+ inputMaterials: [],
+ outputMaterials: [],
+ procedureList: [],
+ }
+ },
+ /**
+ * 灞曠ず宸ュ簭鐘舵��
+ * 濡傛灉PLC鐨勭姸鎬佹槸寰呮満瑕佽窡闅廝LC鐘舵��
+ * @param taskData
+ * @return {string}
+ */
+ displayProcedureStatus(taskData){
+ if (taskData?.plcStatus === 3){
+ return '寰呮満'
+ }
+ if (!taskData?.Procedure?.Status){
+ return ''
+ }
+ if (taskData.Procedure.Status===3){
+ return '鐢熶骇瀹屾垚'
+ }else{
+ return '鐢熶骇涓�'
+ }
+ },
+ /**
+ * 浠庝换鍔′腑鑾峰彇鍔犲伐鏁板拰鐩爣鏁�
+ * @param taskData
+ * @return {{totalNumber: number, finishNumber: number}}
+ */
+ processingStatistics(taskData){
+ const totalNumber = taskData?.totalNumber ?? 0
+ const finishNumber = taskData?.finishNumber ?? 0
+
+ return {
+ /** 鐩爣鏁� */
+ totalNumber: +totalNumber,
+ /** 鍔犲伐鏁� */
+ finishNumber: +finishNumber,
+ }
+ },
+ /**
+ * 璁$畻鐢熶骇杩涘害
+ * @param {{totalNumber: number, finishNumber: number}} statistics
+ * @return {number} 杩涘害,0~100
+ */
+ calculateProgress(statistics){
+ if (statistics.finishNumber === 0){
+ return 0
+ }
+ if (statistics.finishNumber === statistics.totalNumber){
+ return 100
+ }
+
+ const result = Math.floor(statistics.finishNumber / statistics.totalNumber * 100)
+ return result > 100 ? 100 : result
+ },
+ deduplicateWorkers(workers){
+ return _.uniqBy(workers,ele=>ele.workerName)
+ },
+ updateGet(number,val){
+ if(val){
+ this.getTaskInfo(this.activeName,'new')
+ return true;
+ }
+ this.listData.number=number
+ if(this.index){
+ this.TasksCopy[this.index].number=number
+ }
+ },
+ getModelList(){
+ for (let i in this.TasksCopy){
+ this.TasksCopy[i].isUpdateIcon=false;
+ if(this.TasksCopy[i].Procedure.ID&&this.TasksCopy[i].number){
+ processModelList({
+ procedureId: this.TasksCopy[i].Procedure.ID,
+ page: 1,
+ pageSize:6,
+ number:this.TasksCopy[i].number
+ }).then(res=>{
+ if(res.code==200){
+ this.processList=res.data?res.data:[];
+ if(this.processList.length>0){
+ for(let j in this.processList){
+ if(this.processList[j].isUpdate){
+ this.TasksCopy[i].isUpdateIcon=true;
+ this.$forceUpdate()
+ break;
+ }
+ }
+ }
+ }
+ this.resResult[i]=res;
+ // console.log( this.resResult[i],'===res111')
+ })
+ }
+ }
+ },
+ processModelClick(list,index){
+ this.listData=list;
+ this.index=index
+ if( Object.keys(this.listData).length > 0){
+ if(this.listData.Procedure.ID&&this.listData.number){
+ this.$refs.processModel.islook=true
+ return true;
+ }
+ }
+ this.$message.error('褰撳墠宸ュ簭鏃犵紪鍙凤紝鏃犳硶鏌ョ湅宸ュ簭!')
+ },
+ getProcessModelList(){
+ this.getModelList()
+ let string=false;
+ if(this.resResult.length>0){
+ for(let i in this.resResult){
+ if(this.resResult[i]){
+ string=false;
+ }
+ }
+ }
+ if (!this.ProcessModelTimer&&!string) {
+ this.ProcessModelTimer = setInterval(() => {
+ this.resResult=[]
+ this.getModelList();
+ }, 5000)
+ }
+ },
+ mergeProcessParams(params){
+ if (params?.length){
+ return params.map(ele=> `${ele.Key}: ${ele.Value}`).join(' ')
+ }else{
+ return ''
+ }
+ },
taskClick(){
if(this.TaskCount>0){
- this.$refs.control.islook=true
+ // this.getStartArr()
+ this.$refs.control.show=true
}else{
- this.$message.error('鐩墠娌℃湁浠诲姟锛�')
+ this.$message({
+ message:'鐩墠娌℃湁浠诲姟锛�',
+ type: 'error',
+ duration: 3 * 1000
+ })
}
+ },
+ isTip(val){
+ this.isTipShow=val
},
cutClick(val) {
this.activeName = val;
- this.getTaskInfo();
+ this.updateChannelTypeToUrl(val)
+ if(this.activeName==2){
+ this.Tasks=this.TasksCopy.slice(0,2)
+ if(this.Tasks.length<2){
+ if(this.Tasks.length==0){
+ this.Tasks.push(this.object)
+ }
+ this.Tasks.push(this.object)
+ }
+ }else if(this.activeName==1){
+ this.Tasks=this.TasksCopy.slice(0,1)
+ if(this.Tasks.length<1){
+ this.Tasks.push(this.object)
+ }
+ }else if(this.activeName==3){
+ this.Tasks=this.TasksCopy.slice(1)
+ if(this.Tasks.length<1){
+ this.Tasks.push(this.object)
+ }
+ }
},
- reloadPage() {
+ reloadPage(val) {
// window.location.reload();
- this.getTaskInfo();
+ this.getTaskInfo(val);
},
getcountdown() {
countdown().then((res) => {
@@ -709,10 +1005,12 @@
this.countDownMinute = res.data.CountDownMinute
? res.data.CountDownMinute
: 0;
+ if(this.countDownHour==0&& this.countDownMinute==0){
+ this.getTaskInfo();
+ }
}
});
},
-
getDateObj(date, fmt) {
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(
@@ -745,7 +1043,7 @@
formatDate(value) {
if (value) {
const now = value ? new Date(value * 1000) : new Date();
- let time = this.getDateObj(now, "yyyy-MM-dd hh:mm:ss");
+ let time = this.getDateObj(now, "MM-dd hh:mm");
return time;
} else {
return "";
@@ -769,34 +1067,71 @@
let now = new Date();
this.formatTime2 = this.getDateObj(now, "yyyy骞碝M鏈坉d鏃�");
},
- getFormatTime(date){
- const getCha=()=>{
- let now=new Date().getTime()
- let String=now-date*1000;
- let seconds=Math.floor(String/1000)
- let minutes=Math.floor(seconds/60)
-
- let days=Math.floor(String/1000/60/60/24)
- let hours=Math.floor(minutes/60)-days*24
- let m=minutes-days*24*60-hours*60
- return days+'澶�'+hours+'鏃�'+m+'鍒�'
+ /**
+ * 璁$畻鏃堕棿娈�, 娉ㄦ剰鍙傛暟瑕佹眰鏃堕棿鎴充负 JS Date 鐨�13浣嶆椂闂存埑
+ * @param {number} startTime
+ * @param {number} endTime
+ * @return {string}
+ */
+ calcRunningDuration(startTime,endTime){
+ let timeDuration=endTime-startTime;
+ if (timeDuration<0){
+ return '0澶�0鏃�0鍒�'
}
- let d= getCha()
+
+ let seconds=Math.floor(timeDuration/1000)
+ let minutes=Math.floor(seconds/60)
+
+ let days=Math.floor(timeDuration/1000/60/60/24)
+ let hours=Math.floor(minutes/60)-days*24
+ let m=minutes-days*24*60-hours*60
+ return `${days}澶�${hours}鏃�${m}鍒哷
+ },
+
+ /**
+ * 宸ュ簭杩愯鏃堕棿
+ * 鏍规嵁鎺ュ彛杩斿洖 realStartTime realEndTime 鍒ゆ柇濡備綍灞曠ず
+ * 濡傛灉 realEndTime 涓� 0 鍒� 鐢ㄥ綋鍓嶆椂闂� - realStartTime
+ * 濡傛灉 瀛樺湪 realEndTime, 鍒� realEndTime - realStartTime
+ * 娉ㄦ剰 realStartTime realEndTime 鏄帴鍙h繑鍥炵殑10浣嶆椂闂存埑
+ * @param realStartTime
+ * @param realEndTime
+ * @return {string}
+ */
+ getTaskRunningTime(realStartTime,realEndTime){
+ const getInfo = ()=>{
+ if (!realStartTime && !realEndTime){
+ return '--'
+ }
+ if(!realEndTime){
+ const now = Math.floor(new Date().getTime()/1000) * 1000
+ return this.calcRunningDuration(realStartTime*1000,now)
+ }
+
+ return this.calcRunningDuration(realStartTime*1000,realEndTime*1000)
+ }
+
+ let result = getInfo()
setInterval(() => {
- d= getCha();
+ result = getInfo();
}, 6000);
- return d;
+ return result;
},
setInterCard(value, name, i) {
- if (this.Tasks[i].Procedure.procedure[value]) {
+ if (this.TasksCopy[i].Procedure.procedure[value]!=null) {
let height = 200;
- let num = 1;
- if (this.$refs[name]) {
- height = this.$refs[name].$el.offsetHeight;
- num = Math.floor(height / 80);
+ let num = 3;
+ // if (this.$refs[name]) {
+ // height = this.$refs[name].$el?this.$refs[name].$el.offsetHeight:200;
+ // num = Math.floor(height / 80);
+ // }
+ height = this.$refs['homeRef']?(this.$refs['homeRef'].offsetHeight-470-90-20):200;
+ if(this.activeName==2){
+ height=height-610-90-20
}
+ num = Math.floor(height / 80);
let inputMaterials = JSON.parse(
- JSON.stringify(this.Tasks[i].Procedure.procedure[value])
+ JSON.stringify(this.TasksCopy[i].Procedure.procedure[value])
);
let newDataList = [];
let current = 0;
@@ -817,115 +1152,207 @@
}
}
}
- this.Tasks[i][value] = [...newDataList];
+ this.TasksCopy[i][value] = [...newDataList];
}
},
- getTaskInfo() {
- let object = {
- Order: {},
- Procedure: {
- procedure: { inputMaterials: [], outputMaterials: [], workers: [] },
- },
- inputMaterials: [],
- outputMaterials: [],
- procedureList: [],
- };
+ /**
+ * 杞鑾峰彇浠诲姟鏁伴噺
+ */
+ getTaskCountStatistics(){
+ getTaskInfo({taskMode:1}).then((res) => {
+ if (res.code === 200&&res.data) {
+ this.TaskCount=res.data?.TaskCount ?? 0
+ }
+ },err=>{
+ this.TaskCount = 0
+ console.error(err)
+ }).finally(()=>{
+ this.pollingTaskCountTimer = setTimeout(()=>{
+ this.getTaskCountStatistics()
+ // 20绉掍竴娆¤疆璇�
+ },20000)
+ });
+ },
+
+ /**
+ * 鏍规嵁褰撳墠灞曠ず鐨勬槸0閫氶亾杩樻槸1閫氶亾杩樻槸涓や釜閫氶亾灞曠ず瀵瑰簲鐨勫�肩彮浜�
+ * @return {*[]}
+ */
+ displayWorkers(){
+ let showWorkers = []
+ if (this.activeName===1){
+ showWorkers =[...this.channelWorkersMap[0]]
+ }else if (this.activeName===2){
+ showWorkers =[...this.channelWorkersMap[0],...this.channelWorkersMap[1]]
+ }else if (this.activeName===3){
+ showWorkers =[...this.channelWorkersMap[1]]
+ }else {
+ return []
+ }
+
+ return showWorkers
+ },
+
+ getTaskInfo(val,info) {
this.Tasks = [];
- getTaskInfo({ page: 1, pageSize: this.activeName }).then((res) => {
+ this.TasksCopy=[]
+ getTaskInfo({taskMode:2}).then((res) => {
if (res.code == 200&&res.data) {
- let arr=[]
- if(res.data.Tasks){
- arr.sort(function(a,b){
- return (a.Position - b.Position)
- })
- }
- this.Tasks = res.data.Tasks ? res.data.Tasks : [];
- this.TaskCount=res.data.TaskCount?res.data.TaskCount:0
+ this.TasksCopy = res.data?.Tasks ?? [];
+ // this.safeProduce=res.data.Prompt.safeProduce?res.data.Prompt.safeProduce:''
+ this.plcNotConnected=res.data.Prompt.plcNotConnected ?? ''
+ this.ChannelAmount=res.data.ChannelAmount ?? 1
+ // if(this.ChannelAmount>1 &&this.TasksCopy.length<2){
+ // this.TasksCopy.push(this.object)
+ // }
+ this.TaskCount=res.data.TaskCount ?? 0
+
+ // 鎵惧嚭缂哄皯浠诲姟鏁版嵁鐨勯�氶亾, 浣跨敤鍗犱綅鏁版嵁鍗犱綇瀵瑰簲閫氶亾
+ const channelNumbers = this.TasksCopy.map(task=>task.Channel)
+ const allChannels = [0,1];
+ const lackChannels = _.chain(allChannels).difference(channelNumbers).value()
+ lackChannels.forEach(channel => this.TasksCopy.push(this.newTaskPlaceholder(channel)))
+ this.TasksCopy.sort((a,b)=>a.Channel - b.Channel)
+
this.workers=res.data.workers?res.data.workers:[]
- if (this.Tasks.length == 0) {
- if (this.activeName == 1) {
- this.Tasks.push(object);
- } else {
- this.Tasks.push(object);
- this.Tasks.push(object);
- }
- }
- for (let i in this.Tasks) {
- this.Tasks[i].procedureList = [];
- this.Tasks[i].inputMaterials = [];
- this.Tasks[i].outputMaterials = [];
- this.Tasks[i].finishNumber = 0;
+
+ // 灏嗗�肩彮浜烘牴鎹�氶亾鍙峰垎缁�
+ const groupByChannel= _.groupBy(res.data.Tasks,ele=>ele.Channel)
+ const taskList0= _.first(groupByChannel[0])
+ const taskList1= _.first(groupByChannel[1])
+ const worker0List = taskList0?.Procedure?.procedure?.workers ?? []
+ const worker1List = taskList1?.Procedure?.procedure?.workers ?? []
+ this.channelWorkersMap['0'] =worker0List
+ this.channelWorkersMap['1'] =worker1List
+
+ for (let i in this.TasksCopy) {
+ this.TasksCopy[i].procedureList = [];
+ this.TasksCopy[i].inputMaterials = [];
+ this.TasksCopy[i].outputMaterials = [];
+ this.TasksCopy[i].finishNumber = 0;
+ this.TasksCopy[i].totalNumber = 0;
+ this.TasksCopy[i].plcStatus = 0;
+ this.TasksCopy[i].number=0;
+ this.TasksCopy[i].isUpdateIcon=false;
this.finishShow['finishShow&'+i]=false
- this.Tasks[i].Procedure.procedure.workers = this.Tasks[i].Procedure
+ this.TasksCopy[i].Procedure.procedure.workers = this.TasksCopy[i].Procedure
.procedure.workers
- ? this.Tasks[i].Procedure.procedure.workers
+ ? this.TasksCopy[i].Procedure.procedure.workers
: [];
- this.Tasks[i].procedureList.push([
+
+ this.TasksCopy[i].procedureList.push([
{
name: "宸ュ簭",
- ...this.Tasks[i].Procedure.procedure,
+ ...this.TasksCopy[i].Procedure.procedure,
},
]);
-
- if (this.Tasks[i].Procedure.ID) {
- startTask({ id: this.Tasks[i].Procedure.ID }).then((res) => {
+
+ if (this.TasksCopy[i].Procedure.ID) {
+ startTask({ id: this.TasksCopy[i].Procedure.ID }).then((res) => {
if (res.code == 200) {
+ this.TasksCopy[i].number=res.data.Number
// res.data.number
- this.Tasks[i].procedureList[0].push({
+ this.TasksCopy[i].procedureList[0].push({
number: res.data.Number,
- name: "宸ヨ壓",
- Arr:res.data.Params ? res.data.Params : [],
});
+ this.TasksCopy[i].Arr=res.data.Params ? res.data.Params : []
+ // this.isFinsh=Number(i)+1
+ this.$forceUpdate()
}
});
}
this.setInterCard("inputMaterials", "cardBox1&" + i, i);
this.setInterCard("outputMaterials", "cardBox3&" + i, i);
}
+ this.getProcessModelList();
this.getStartArr()
+ this.cutClick(val?val:1)
+ if(info=='new'){
+ return true;
+ }
+
this.getProgressInfo();
- if (!this.procInfoTimer) {
+ if (!this.procInfoTimer&&!this.resprocInfoTimer) {
this.procInfoTimer = setInterval(() => {
this.getProgressInfo();
- }, 9000);
- }
+ }, 3000);
+ }
}
- if (res.code != 200 || this.Tasks.length == 0) {
- this.getcountdown();
- // 鎺у埗閲嶆柊璇锋眰getTaskInfo, 鍙紑鍚竴涓畾鏃跺櫒
- if (!this.cutdownTimer) {
- this.cutdownTimer = setInterval(() => {
- this.getcountdown();
- }, 60000);
- }
- }
+ // if (res.code != 200 || this.TasksCopy.length == 0) {
+ // this.getcountdown();
+ // // 鎺у埗閲嶆柊璇锋眰getTaskInfo, 鍙紑鍚竴涓畾鏃跺櫒
+ // if (!this.cutdownTimer) {
+ // this.cutdownTimer = setInterval(() => {
+ // this.getcountdown();
+ // }, 60000);
+ // }
+ // }
+
});
+ // this.TasksCopy.push(this.object)
+ // this.TasksCopy.push(this.object)
},
getStartArr(){
- for (let i in this.Tasks) {
- if (this.Tasks[i].Procedure.Status==1) {
- this.Arr = this.Tasks[i].procedureList[0].Arr ?this.Tasks[i].procedureList[0].Arr: [];
- this.taskData=this.Tasks[i];
- break;
+ // for (let i in this.TasksCopy) {
+ // if (this.TasksCopy[i].Procedure.Status==1) {
+ // this.Arr = this.TasksCopy[i].Arr ?this.TasksCopy[i].Arr: [];
+ // // this.taskData=this.TasksCopy[i];
+ // break;
+ // }
+ // }
+ getTaskInfo({taskMode:1}).then(res=>{
+ if(res.code==200){
+ this.taskData=res.data.Tasks?res.data.Tasks[0]:{};
+ this.ArrError=''
+ if (Object.keys(this.taskData).length > 0 &&this.taskData.Procedure.ID) {
+ startTask({ id: this.taskData.Procedure.ID }).then((res) => {
+ if (res.code == 200) {
+ this.Arr =res.data.Params ? res.data.Params : []
+ }else{
+ this.ArrError=res.msg?res.msg:'鑾峰彇宸ヨ壓鍙傛暟澶辫触锛�';
+ }
+ });
+ }
}
+ })
+ },
+ /**
+ * 鍚慤RL涓缃綋鍓嶉�氶亾灞曠ず绫诲瀷
+ * @param {number} type 閫氶亾灞曠ず绫诲瀷
+ */
+ updateChannelTypeToUrl(type){
+ const activeName = this.getChannelTypeFromUrl();
+ if (activeName === type){
+ return
}
+ let path = this.$router.history.current.path
+ this.$router.push({path, query: {activeName: `${type ?? 1}`}})
+ },
+ /**
+ * 浠嶶RL鑾峰彇褰撳墠閫氶亾灞曠ず绫诲瀷
+ * @return {number}
+ */
+ getChannelTypeFromUrl(){
+ let activeName = new URLSearchParams(location.search).get('activeName')
+ activeName = activeName ? +activeName : undefined
+ return activeName
},
getProgressInfo() {
- for (let i in this.Tasks){
- getProgress({
- position: Number(i),
- procedureId: this.Tasks[i].Procedure.ID,
- }).then((res) => {
- if (res.code == 200) {
- this.Tasks[i].finishNumber = res.data.finishNumber
- ? res.data.finishNumber
- : 0;
- this.plcStatus=res.data.plcStatus?res.data.plcStatus:1
- }
- });
+ this.resprocInfoTimer=null
+ for (let i in this.TasksCopy){
+ getProgress({
+ channel: Number(i),
+ }).then((res) => {
+ if (res.code == 200) {
+ this.TasksCopy[i].finishNumber = res.data?.finishNumber ?? 0;
+ this.TasksCopy[i].totalNumber = res.data?.totalNumber ?? 0;
+ this.TasksCopy[i].plcStatus = res.data?.plcStatus ?? 0
+ this.PLCStatusMap[i] = res.data?.plcStatus ?? 0
+ }
+ this.resprocInfoTimer=res;
+ });
}
-
},
// 璁剧疆
setUrl() {
@@ -936,6 +1363,12 @@
this.$router.push({
path: "/set",
});
+ },
+ openParamsConfigModal(){
+ this.paramsConfigIsShow=true
+ },
+ closeParamsConfigModal(){
+ this.paramsConfigIsShow=false
},
// 鍙充晶鎺у埗
controlClick() {
@@ -956,13 +1389,22 @@
finishTask({ id: taskData.Procedure.ID }).then((res) => {
if (res.code == 200) {
this.finishShow['finishShow&'+i] = false;
- this.getTaskInfo();
+ this.reloadPage(this.activeName?this.activeName:1);
this.$message.success("鎿嶄綔鎴愬姛锛�");
}
});
} else {
this.$message.error("褰撳墠璁惧娌℃湁宸ュ簭锛�");
}
+ },
+
+ /**
+ * 鍏抽棴 tooltip
+ * @param index
+ */
+ closePopover(index){
+ this.finishShow['finishShow&'+index] = false
+ this.$refs?.['popoverRef_' + index]?.[0]?.doClose()
},
getRandomNumber(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
@@ -975,6 +1417,33 @@
</script>
<style lang="scss">
+.tooltip-width-200{
+ width:200px;
+ line-height:1.3!important;
+}
+.el-popover{
+ background:#12234a!important;
+ color:#fff!important;
+ border-color: #09e5ed !important;
+
+ .popper__arrow::after{
+ border-top-color:#09e5ed !important;
+ }
+}
+.color_yellow{
+ color:yellow;
+}
+.color_318583{
+ color:#318583;
+}
+.el-empty{
+ height:calc(100% - 190px);
+ .el-empty__description p{
+ font-size:16px!important;
+ color:#fff!important;
+ }
+}
+
.active-one {
width: 100%;
height: calc(100% - 100px);
@@ -985,10 +1454,13 @@
margin-bottom: 20px;
}
.content {
- height: 240px;
+ height: 300px;
}
.bottom {
- height: calc(100% - 410px);
+ height: calc(100% - 470px);
+ }
+ .font_size_20px{
+ font-size:20px!important;
}
}
.active-two {
@@ -1002,6 +1474,7 @@
box-sizing: border-box;
border-right: 1px solid #eee;
}
+
.small_title {
margin-bottom: 30px;
}
@@ -1016,18 +1489,18 @@
line-height: 20px;
}
.content {
- height: 370px;
+ height: 430px;
.content-top {
- height: calc(50% - 20px) !important;
- padding-top: 10px !important;
+ height: calc(50% - 30px) !important;
+ padding-top: 20px !important;
}
.el-descriptions__body {
font-size: 16px !important;
}
}
.bottom {
- height: calc(100% - 560px);
+ height: calc(100% - 610px);
}
.bottom_list .bottom-title {
font-size: 16px;
@@ -1057,7 +1530,7 @@
font-size:14px;
}
}
-
+
.el-step{
.el-step__icon{
background:#00cc66;
@@ -1068,19 +1541,47 @@
}
}
}
- .el-step__head.is-process{
- color: #00cc66 !important;
- border-color:#00cc66;
- }
- .el-step__title.is-process{
- color: #00cc66 !important;
- }
.el-step__head.is-wait{
color:#fff;
border-color:#fff;
}
.el-step__title.is-wait{
color:#fff;
+ }
+
+ // 浣挎楠ゆ潯鑺傜偣鐘舵�佹垚鍔熸椂,鍓嶉潰鐨勭嚎鍚屾鏇存敼棰滆壊
+ .steps{
+ /* 杩涜涓姸鎬侊細鍦堢嚎 */
+ & .el-step__head.is-process {
+ color: #00cc66;
+ border-color: #00cc66;
+ }
+ /* 杩涜涓姸鎬侊細鍦堝唴 */
+ & .el-step__head.is-process > .el-step__icon {
+ background: #00cc66;
+ color: #00cc66;
+ }
+ /* 杩涜涓姸鎬侊細title锛堟枃瀛楋級 */
+ & .el-step__title.is-process {
+ color: #00cc66;
+ }
+
+ /* 瀹屾垚鐘舵�侊細鍦堢嚎 */
+ & .el-step__head.is-success {
+ color: #00cc66;
+ border-color: #00cc66;
+ }
+ /* 瀹屾垚鐘舵�侊細title锛堟枃瀛楋級 */
+ & .el-step__title.is-success {
+ color: #00cc66;
+ }
+ /* 瀹屾垚鐘舵�侊細line
+ * 鎻忚堪锛氱涓�姝ュ畬鎴愶紝绗簩姝ヨ繘琛屾椂锛屼箣闂寸殑杩涘害鏉℃湁棰滆壊
+ */
+ & .el-step__head.is-success > .el-step__line > .el-step__line-inner {
+ width: 100% !important;
+ border-width: 1px !important;
+ }
}
}
.set-title {
@@ -1185,6 +1686,38 @@
background: #09e5ed !important;
color: #333 !important;
}
+.yuandian {
+ width: 35px;
+ height: 35px;
+ display:inline-block;
+ // background: #15d815;
+ background:red;
+ border-radius: 50%;
+ // margin-top:-5px;
+ vertical-align: middle;
+ }
+
+
+.tip {
+ display:inline-block;
+ // background: #15d815;
+ background:red;
+ border-radius: 50%;
+ // margin-top:-5px;
+ vertical-align: middle;
+}
+.blink{
+ display: inline-block;
+ width: 14px;
+ height: 14px;
+}
+.tip, .blink{
+ position: absolute;
+ top: -6px;
+ right: -6px;
+ width: 14px;
+ height: 14px;
+}
.bottom_list {
position: relative;
padding: 10px;
@@ -1239,14 +1772,24 @@
}
.card-box {
width: 100%;
- height: calc(100% - 50px - 50px);
+ height: calc(100% - 50px - 40px);
// height:300px;
.el-carousel__container{
overflow-y:auto;
}
- // .el-carousel__item{
- // min-height:116px;
- // }
+ .el-carousel__item{
+ height:auto;
+ }
+ }
+ .bottom-box-btn{
+ width:calc(100% - 20px);
+ position:absolute;
+ bottom:10px;
+ left:10px;
+ .el-button{
+ height: 40px;
+
+ }
}
}
@@ -1254,7 +1797,6 @@
font-size: 20px;
}
.right-small-btn {
- margin-top: 10px;
width: calc(100% - 20px);
margin: 0 auto;
position: absolute;
@@ -1280,6 +1822,15 @@
border: 0;
}
}
+ .huise{
+ width: 46%;
+ float: right;
+ }
+ .huise.el-button--primary {
+ background: #CCE8E8;
+ color: #AAAAAA;
+ border: 0;
+ }
}
.home {
width: 100%;
@@ -1313,11 +1864,12 @@
align-content: center;
justify-content: space-around;
align-items: center;
+ overflow:hidden;
.title-item {
- width: calc(33.333% - 50px);
+ width: calc((100% - 50px)/3);
float: left;
margin-right: 10px;
- padding: 15px 20px;
+ padding: 10px 5px;
text-align: center;
border-radius: 4px;
display: inline-block;
@@ -1359,7 +1911,7 @@
width: 100%;
height: 30px;
// text-align: left;
- font-size: 24px;
+ font-size: 28px!important;
margin: 0;
text-align: center;
line-height: 36px;
@@ -1372,7 +1924,25 @@
padding: 0 10px;
background: rgb(22 72 173);
border-radius: 6px;
+ position:relative;
+ .gif{
+ background: url("../../public/setting.png") no-repeat;
+ background-size:100% 100%;
+ position:absolute;
+ right:15px;
+ top:10px;
+ width:35px;
+ height: 35px;
+ vertical-align: middle;
+ cursor:pointer;
+ //img{
+ // width:100%;
+ //}
+ }
// background: #233b9e;
+ .el-descriptions-row{
+ height:45px;
+ }
.el-descriptions__body {
background: transparent;
font-size: 18px;
@@ -1409,18 +1979,31 @@
// border: 1px solid #ccc;
background: #6b83ff;
border-radius: 5px;
- margin-top: 20px;
+ margin-top: 10px;
color: #333;
position: relative;
- .card_top-2,
+ .font_dian{
+ -webkit-box-orient:vertical;
+ overflow:hidden;
+ text-overflow:ellipsis;
+ white-space:nowrap;
+ }
+ .card_top-2{
+ width:38%;
+ }
+ .card-top-input-out-r,
.card_top-3 {
- width: 50%;
+ width:62%;
+ }
+ .card_top-2,.card-top-input-out-r,
+ .card_top-3 {
height: 45px;
border-radius: 5px;
background: #6b83ff;
- font-size: 12px;
+ font-size: 13px;
color: #fff;
float: left;
+ font-weight: 700;
.card-top-r-t {
width: 100%;
text-align: center;
@@ -1454,7 +2037,7 @@
}
}
- .card_top,
+ .card_top,.card-top-input-out-l,
.card_top-4 {
width: 50%;
height: 45px;
@@ -1463,10 +2046,8 @@
color: #fff;
font-size: 12px;
line-height: 45px;
- float: left;
-
> div {
- margin-left: 12px;
+ padding-left: 12px;
position: relative;
p {
position: absolute;
@@ -1476,15 +2057,32 @@
}
}
}
+ .card_top{
+ float: left;
+ }
+ .card-top-input-out-l{
+ float:left;
+ width:65%;
+ line-height:20px;
+ vertical-align: middle;
+ display:flex;
+ justify-content:space-around;
+ align-items:center;
+ }
+ .card-top-input-out-r{
+ width:35%;
+ }
.card_top-4 {
width: calc(100% - 20px);
- padding: 0 10px;
- height: 70px;
-
- line-height: 70px;
+ padding: 10px 10px;
color: #fff;
background: rgb(19, 35, 90);
- font-size: 20px;
+ font-size: 14px;
+ height:50px;
+ line-height: 25px;
+ >div{
+ margin-left:0px;
+ }
}
.card-info-box {
position: absolute;
@@ -1511,6 +2109,7 @@
border-radius: 5px 5px 0 0;
background: rgb(19, 35, 90);
}
+
.card_contentRight {
width: 100%;
@@ -1581,18 +2180,6 @@
display:inline-block;
}
}
-
- .yuandian {
- width: 25px;
- height: 25px;
- line-height: 40px;
- margin-top: 12.5px;
- display: inline-block;
- background: #15d815;
- display: block;
- border-radius: 50%;
- float: right;
- }
}
.right-top-m-btn {
margin-top: 10px;
@@ -1608,7 +2195,7 @@
.right_dutyLst {
width: calc(106% - 20px);
// height: 270px;
- height: 310px;
+ height: 370px;
border-radius: 4px;
line-height: 30px;
overflow: hidden;
@@ -1627,7 +2214,7 @@
}
.right-person-box {
width: 100%;
- height: calc(100% - 40px);
+ height: calc(100% - 60px);
overflow: auto;
margin-top: -10px;
}
@@ -1657,14 +2244,14 @@
}
.right_base {
width: 100%;
- height: calc(100% - 520px);
+ height: calc(100% - 580px);
min-height: 200px;
// overflow-y:auto;
position: relative;
.right-base-btn {
width: 100%;
position: absolute;
- bottom: 0;
+ bottom: 24px;
left: 0;
.el-button--primary {
width: 100%;
@@ -1674,6 +2261,10 @@
color: #fff;
font-weight: 700;
font-size: 18px;
+ height: 40px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
}
}
// .call {
@@ -1699,4 +2290,43 @@
font-weight: 700 !important;
font-size: 16px;
}
+.process-params{
+ margin-top: 10px;
+ border-radius: 5px;
+ overflow: hidden;
+ color: #fff;
+ font-size: 12px;
+ &-title{
+ height: 25px;
+ padding: 0 5px;
+ background-color: #13235a;
+ line-height: 25px;
+ }
+ &-value{
+ background-color: #6b83ff;
+ min-height: 45px;
+ box-sizing: border-box;
+ padding: 12px;
+ }
+}
+.plc-status{
+ margin-right: 24px;
+ position: relative;
+ display: inline-block;
+ height: 50px;
+ &:after{
+ content: '';
+ position: absolute;
+ top: 50%;
+ right: -12px;
+ margin-top: -15px;
+ border-right: 2px solid #ffffff;
+ height: 30px;
+ }
+}
+.plc-status:last-child{
+ &:after{
+ display: none;
+ }
+}
</style>
--
Gitblit v1.8.0