From 3b37bb8209629c7906554226a69583bc69189701 Mon Sep 17 00:00:00 2001
From: songshankun <songshankun@foxmail.com>
Date: 星期二, 21 十一月 2023 10:10:26 +0800
Subject: [PATCH] feat: 同一时间相同提示只展示一条
---
src/components/AddIssue.vue | 610 +++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 439 insertions(+), 171 deletions(-)
diff --git a/src/components/AddIssue.vue b/src/components/AddIssue.vue
index 734943d..223ce43 100644
--- a/src/components/AddIssue.vue
+++ b/src/components/AddIssue.vue
@@ -3,12 +3,17 @@
<el-dialog
:close-on-click-modal="false"
:visible.sync="islook"
- width="700px"
+ width="753px"
class="add-event-dialog"
:show-close="false"
>
<div class="tank-box">
- <div slot="title" class="tac drawerHeader">鏂颁换鍔�</div>
+ <div slot="title" class="tac drawerHeader">
+ <span class="title-l">{{messageError?'鎻愮ず':'鏂颁换鍔�'}}</span>
+ <!-- <span class="title-r" @click="closeClick">
+ <img src="../../public/close.png" />
+ </span> -->
+ </div>
<div class="dialog-content-box">
<div
style="
@@ -16,102 +21,143 @@
width: 100%;
height: 100%;
overflow: hidden;
- margin-bottom: 30px;
text-align: left;
"
>
- <div class="title-box margin_bottom_13">
- <div class="title-item color_4efefa font_size_20 title-bng">
- 褰撳墠浠诲姟锛歿{ taskData.Procedure.procedure.procedureName || "" }}
+ <template v-if="messageError">
+ <div class="error-t">
+ <span v-if="messageError =='涓嬪彂鎴愬姛锛�'" class="el-icon-success color_success"></span>
+ <span v-else class="el-icon-error color_error"></span>
</div>
- <div class="title-item title-bng color_4efefa font_size_20">
- 鐢熶骇鏁伴噺锛�<span>{{ taskData.Order.amount || 0 }}</span>
+ <div class="error-m">
+ {{ messageError }}
</div>
- </div>
- <div class="title-auto-box">
- <div class="title-box margin_bottom_20">
- <div class="title-item">
- 璁㈠崟缂栧彿锛歿{ taskData.Order.orderId || "" }}
+ <div
+ class="font_size_20 color_fff"
+ style="text-align: center; width: 100%; margin: 10px 0"
+ >
+ <span v-if="messageError =='涓嬪彂鎴愬姛锛�'" style="font-size:30px;">{{3-Number(sencond)}}s</span>
+ <span v-else>璇烽噸璇�</span>
+ </div>
+
+ </template>
+ <template v-else-if="Object.keys(taskData).length > 0 ">
+ <div class="title-box margin_bottom_13">
+ <div class="title-item color_4efefa font_size_20 title-bng">
+ 褰撳墠浠诲姟锛歿{ taskData.Procedure.procedure.procedureName || "" }}
</div>
- <div class="title-item">
- 宸ュ崟缂栧彿锛歿{ taskData.Order.workOrderId || "" }}
+ <div class="title-item title-bng color_4efefa font_size_20">
+ 鐢熶骇鏁伴噺锛�<span style="color:#fff;">{{ taskData.Order.amount || 0 }}</span>
</div>
- <div class="title-item">
- 浜у搧鍚嶇О锛歿{ taskData.Order.productName || "" }}
- </div>
- <div class="title-item">
- 鏁伴噺锛歿{ taskData.Order.amount || 0 }}{{ taskData.Order.unit }}
- </div>
- <div class="title-item">
- 浜よ揣鏃ユ湡锛歿{ taskData.Order.deliverDate || "" }}
- </div>
- <div class="title-item">
- 宸ユ椂锛� {{ taskData.Procedure.procedure.workHours || "" }}
- </div>
- <div class="title-item">
- 璧锋鏃堕棿锛� {{ formatDate(taskData.Order.startTime) || "" }}
- -
- {{ formatDate(taskData.Order.endTime) }}
- </div>
- <div class="title-item">
- 瀹㈡埛鍚嶇О锛歿{ taskData.Order.customer || "" }}
- </div>
- <div class="title-item title-item-two">
- 璐х墿鎻忚堪锛� {{ taskData.Order.orderAttr || "" }}
- </div>
+ </div>
+ <div class="title-auto-box">
+ <div class="title-box margin_bottom_20">
+ <div class="title-item">
+ 璁㈠崟缂栧彿锛歿{ taskData.Order.orderId || "" }}
+ </div>
+ <div class="title-item">
+ 宸ュ崟缂栧彿锛歿{ taskData.Order.workOrderId || "" }}
+ </div>
+ <div class="title-item">
+ 浜у搧鍚嶇О锛歿{ taskData.Order.productName || "" }}
+ </div>
+ <div class="title-item">
+ 鏁伴噺锛歿{ taskData.Order.amount || 0
+ }}{{ taskData.Order.unit }}
+ </div>
+ <div class="title-item">
+ 浜よ揣鏃ユ湡锛歿{ taskData.Order.deliverDate || "" }}
+ </div>
+ <div class="title-item">
+ 宸ユ椂锛� {{ taskData.Procedure.procedure.workHours || "" }}
+ </div>
+ <div class="title-item">
+ 璁″垝鏃堕棿锛� {{ formatDate(taskData.Order.startTime) || "" }}
+ -
+ {{ formatDate(taskData.Order.endTime) }}
+ </div>
- <div class="title-item title-item-two">
- 鍙傛暟瑕佹眰锛歿{ taskData.Order.parameter || "" }}
+ <div class="title-item">
+ 瀹㈡埛鍚嶇О锛歿{ taskData.Order.customer || "" }}
+ </div>
+ <div class="title-item title-item-two">
+ 璐х墿鎻忚堪锛� {{ taskData.Order.orderAttr || "" }}
+ </div>
+
+ <div class="title-item title-item-two">
+ 鍙傛暟瑕佹眰锛歿{ taskData.Order.parameter || "" }}
+ </div>
+ </div>
+ <div class="title-box margin_bottom_20">
+ <div
+ style="
+ color: #fff;
+ font-size: 18px;
+ margin-bottom: 10px;
+ margin-top: 20px;
+ "
+ class="color_4efefa"
+ >
+ 宸ヨ壓鍙傛暟
+ </div>
+ <div
+ class="title-item title-item-two"
+ v-for="(item, index) in Arr"
+ :key="index"
+ >
+ {{ item.Key }}锛歿{ item.Value || "" }}
+
+ </div>
</div>
</div>
- <div class="title-box margin_bottom_20">
+ <div class="process-box" v-if="showBtn == 2 || showBtn == 3">
<div
style="
- color: #fff;
- font-size: 18px;
- font-weight: 700;
- margin-bottom: 10px;
- margin-top: 20px;
+ color: red;
+ font-size: 26px;
+ width: 100%;
+ text-align: center;
+ margin-bottom: 15px;
+ line-height:35px;
"
+ :class="showBtn == 3&&isLoading?'margin-top-10px':'margin-top-40px'"
>
- 宸ヨ壓鍙傛暟
- </div>
- <div
- class="title-item title-item-two"
- v-for="(item, index) in Arr"
- :key="index"
- >
- {{ item.Key }}锛歿{ item.Value || "" }}
- </div>
- </div>
- </div>
- <div class="process-box" v-if="showBtn==2||showBtn==3">
- <div
- style="
- color: red;
- font-size: 16px;
- width: 100%;
- text-align: center;
- font-weight: 700;
- margin-bottom: 20px;
- margin-top: 10px;
- "
- >
- 璇风‘璁ょ敓浜у畨鍏紒
- </div>
- <div class="progress-item">
- <span>{{ parseInt(num/60*100) }}%</span>
- <el-progress
- style="width:calc(100% - 50px);float:right"
- define-back-color="#CDC6C6"
- color="#00cc66"
- text-color="#fff"
- :text-inside="true"
- :stroke-width="20"
- :percentage="parseInt(num/60*100)"
- ></el-progress>
+ <div class="gif-box" v-if="showBtn == 2||(showBtn == 3&&!isLoading)">
+ <template v-if="showBtn == 2">
+ <div class="gif">
+ <img src="../../public/shan.gif" />
+ </div>
+
+ </template>
+ <template v-if="showBtn == 3&&!isLoading">
+ <div class="gif">
+ <span class="yuandian"></span>
+ </div>
+ </template>
+ <div class="gif-right">
+ ----- 鍓╀綑鏃堕棿 -----
+ <span>00:00:{{30 - Number(num)<10?0:''}}{{ 30 - Number(num) }}</span>
</div>
- </div>
+ </div>
+ {{ message }}
+ </div>
+ <template v-if="showBtn == 3&&isLoading">
+ <div class="progress-item">
+ <span>{{ parseInt((num / 30) * 100) }}%</span>
+ <el-progress
+ style="width: calc(100% - 50px); float: right"
+ define-back-color="#CDC6C6"
+ color="#00cc66"
+ text-color="#fff"
+ :text-inside="true"
+ :stroke-width="20"
+ :percentage="parseInt((num / 30) * 100)"
+ ></el-progress>
+ </div>
+ </template>
+ </div>
+ </template>
+
<!-- <div class="circel-text">
<div class="circel-text-b">
鐢熶骇鏁伴噺锛�<span>{{ Order.amount||0 }}</span>{{ Order.unit||'' }}
@@ -119,26 +165,49 @@
</div> -->
</div>
</div>
- <div slot="footer" class="dialog-footer tac" style="overflow: hidden">
- <div class="btn" @click="closeClick">
- <img src="../../public/btn1.png" />
- </div>
- <div class="btn" v-if="showBtn==1" @click="confirmClick1">
- <img src="../../public/confirm3.png" />
- </div>
- <div class="btn" v-if="showBtn==2">
- <img src="../../public/confirm2.png" />
- </div>
- <div class="btn" v-if="showBtn==3" @click="onSubmit()">
- <img src="../../public/confirm1.png" />
- </div>
+ <div slot="footer" :class="messageError?'dialog-footer tac btn-error':'dialog-footer tac'" style="overflow: hidden">
+ <template v-if="messageError">
+ <div class="btn" v-if="messageError =='涓嬪彂鎴愬姛锛�'||ArrError" @click="closeClick">
+ <img src="../../public/close-btn.png" />
+ </div>
+ <div class="btn" v-else @click="confirmClick2">
+ <img src="../../public/agin.png" />
+ </div>
+ </template>
+ <template v-else>
+ <div class="btn" @click="closeClick">
+ <img src="../../public/btn1.png" />
+ </div>
+ <div class="btn" v-if="showBtn == 1">
+ <div v-if='taskData&&taskData.CanStarted' @click="confirmClick1"><img src="../../public/confirm1.png" /></div>
+ <div v-else><img src="../../public/confirm2.png" /></div>
+ </div>
+ <div class="btn" v-if="showBtn == 2">
+ <img src="../../public/confirm2.png" />
+ </div>
+ <div
+ class="btn"
+ v-if="showBtn == 3"
+ v-prevent-re-click="3000"
+ @click="onSubmit()"
+ >
+ <i class="el-icon-loading icon-loading" v-if="isLoading"/>
+ <img src="../../public/loading.png" v-if="isLoading"/>
+ <img src="../../public/confirm3.png" v-if="!isLoading"/>
+ </div>
+ </template>
</div>
+ <!-- <ErrorIssue ref="error" :messageError="messageError" @shutdown="shutdown"/> -->
</div>
</el-dialog>
</template>
<script>
-import { startTask, setProductNumber,sendProcessParams } from "@/api/home/index"; // 浜х嚎
+import {
+ startTask,
+ sendProcessParams,
+} from "@/api/home/index"; // 浜х嚎
+// import ErrorIssue from "@/components/ErrorIssue";
export default {
components: {},
props: {
@@ -160,54 +229,113 @@
return [];
},
},
+ ArrError:{
+ type: [String],
+ default: () => {
+ return '';
+ },
+ },
+ safeProduce:{
+ type: [String],
+ default: () => {
+ return '';
+ },
+ },
+ activeName:{
+ type: [String,Number],
+ default: () => {
+ return 1;
+ },
+ },
},
data() {
return {
islook: false,
showBtn:1,
- num:0,
- timer:null,
-
+ num: 0,
+ timer: null,
+ message: this.safeProduce,
+ messageError: "",
+ resParams: {},
+ isLoading:false,
+ sencond:0,
+ sencondTimer:null,
};
},
mounted() {
+ this.message=this.safeProduce;
this.getInfo();
},
watch: {
taskData(val) {
+ this.message=this.safeProduce;
this.getInfo();
},
- num(){
- if(this.num==60){
- clearInterval(this.timer)
- this.showBtn=3;
+ num() {
+ if (this.num == 30) {
+ clearInterval(this.timer);
+ this.showBtn = 3;
}
- }
+ },
+ sencond(){
+ if(this.sencond==3){
+ clearInterval(this.sencondTimer);
+ this.closeClick()
+ }
+ },
+ islook(){
+ if (this.timer) {
+ clearInterval(this.timer);
+ }
+ this.num = 0;
+ this.showBtn=1;
+ this.isLoading=false
+ this.sencond=0
+ this.sencondTimer=null
+ this.messageError=''
+ this.resParams= {},
+ this.$emit('isTip',this.islook)
+ },
},
methods: {
- confirmClick1(){
- this.num=0;
- this.showBtn=2;
- this.timer=setInterval(()=>{
- this.num=this.num+1;
- },1000)
-
+ confirmClick2() {
+ this.messageError = "";
+ this.isLoading=false;
},
- closeClick(){
- if(this.timer){
- clearInterval(this.timer)
+ confirmClick1() {
+ this.num = 0;
+ this.showBtn = 2;
+ (this.message = this.safeProduce),
+ (this.timer = setInterval(() => {
+ this.num = this.num + 1;
+ }, 1000));
+ },
+ closeClick() {
+ if (this.timer) {
+ clearInterval(this.timer);
}
- this.num=0;
+ this.num = 0;
this.shutdown();
},
getInfo() {
- if (Object.keys(this.taskData).length > 0 && this.taskData.Procedure.ID && this.taskData.Procedure.Status == 1) {
- this.num=0;
- this.showBtn= 1;
- this.islook=true;
- }else{
- this.islook=false;
+ // 1 鏈敓浜� 2鐢熶骇涓� 3鐢熶骇瀹屾垚
+ if (
+ Object.keys(this.taskData).length > 0 && this.taskData.Procedure.ID &&
+ this.taskData.Procedure.Status == 1
+ ) {
+ this.num = 0;
+ this.showBtn = 1;
+ this.islook = true;
+ } else {
+ this.islook = false;
+ // this.islook = true;
+
}
+ if(this.ArrError){
+ this.messageError=this.ArrError;
+
+ }
+
},
getDateObj(date, fmt) {
if (/(y+)/.test(fmt)) {
@@ -241,29 +369,68 @@
formatDate(value) {
if (value) {
const now = value ? new Date(value * 1000) : new Date();
- let time = this.getDateObj(now, "yyyy-MM-dd");
+ let time = this.getDateObj(now, "MM-dd hh:mm");
return time;
} else {
return "";
}
},
+
onSubmit() {
- if(this.taskData.Procedure.ID){
- sendProcessParams({id:this.taskData.Procedure.ID}).then(res=>{
- if(res.code==200){
- setProductNumber().then((res) => {
- if (res.code == 200) {
- this.$message.success("涓嬪彂鎴愬姛锛�");
- // this.$message.success("涓嬪彂鐢熶骇鏁伴噺鎴愬姛锛�");
- this.$emit("getSetProductNumber");
- this.shutdown();
- }
- });
+ if (this.taskData.Procedure.ID) {
+ (this.message = "宸ヨ壓鍙傛暟涓嬪彂涓�..."), (this.num = 0);
+ this.timer = setInterval(() => {
+ this.num = this.num + 1;
+ if (this.num == 30 || this.resParams) {
+ this.num = 30;
+ this.getCode(this.resParams);
}
- })
-
+ }, 1000);
+ if(this.isLoading){
+ return true;
+ }
+ this.isLoading=true;
+ sendProcessParams({ procedureId: this.taskData.Procedure.ID,position: Number(this.taskData.Position), }).then((res) => {
+ if (res.code == 200) {
+ this.resParams = res;
+ this.isLoading=false;
+ } else {
+ this.isLoading=false;
+ this.resParams = res;
+ }
+ });
+ setTimeout(()=>{
+ this.isLoading=false;
+ },30000)
}
-
+ },
+ getCode(res) {
+ if (res.code == 200) {
+ if (this.num == 30) {
+ this.messageError = "涓嬪彂鎴愬姛锛�";
+ if (!this.sencondTimer) {
+ this.sencondTimer = setInterval(() => {
+ this.sencond = this.sencond + 1;
+ }, 1000);
+ }
+ clearInterval(this.timer);
+ // this.num = 30;
+ // this.showBtn = 2;
+ this.message = this.safeProduce;
+
+ this.num = 0;
+ this.showBtn= 1
+ this.shutdown();
+ this.$emit('getSetProductNumber',this.activeName)
+ // this.$message.success("涓嬪彂鐢熶骇鏁伴噺鎴愬姛锛�");
+ }
+ } else {
+ this.messageError = res.msg ? res.msg : "鎶辨瓑锛屽伐搴忎笅鍙戝け璐ワ紒";
+ clearInterval(this.timer);
+ this.num = 30;
+ this.showBtn = 2;
+ this.message =this.safeProduce;
+ }
},
shutdown() {
this.islook = false;
@@ -273,19 +440,35 @@
</script>
<style lang="scss" scoped>
+.color_error{
+ color:red;
+}
+.color_success{
+ color:green;
+}
.tank-box {
- width: 638px;
- height: 630px;
- padding: 0 20px;
+ width: 753px;
+ height: 728px;
background: url("../../public/tank.png") no-repeat center center / cover;
position: relative;
.dialog-footer {
position: absolute;
- bottom: 40px;
+ bottom: 25px;
+ width:100%;
+ text-align:center;
}
+}
+.margin-top-10px{
+ margin-top:10px;
+}
+.margin-top-40px{
+ margin-top:40px;
}
.color_4efefa {
color: #4efefa !important;
+}
+.color_fff {
+ color: #fff;
}
.font_size_20 {
font-size: 20px !important;
@@ -294,9 +477,10 @@
margin-bottom: 13px;
}
.title-box {
- width: 100%;
+ width: calc(100% - 140px);
height: auto;
overflow: hidden;
+ padding:0 70px;
.title-item {
width: 45%;
float: left;
@@ -308,12 +492,13 @@
width: 55%;
}
}
+
.title-bng {
- height: 42px;
- line-height: 42px;
+ height: 52px;
+ line-height:52px;
span {
- width: calc(100% - 110px);
- height: 42px;
+ width: calc(100% - 120px);
+ height: 52px;
text-align: center;
display: inline-block;
background: url("../../public/number.png") no-repeat center center / cover;
@@ -322,6 +507,21 @@
.title-item-two {
width: 100% !important;
}
+}
+.error-t {
+ width: 100px;
+ margin: 100px auto 40px;
+ font-size:98px;
+ span {
+ display: inline-block;
+ }
+}
+.error-m {
+ line-height: 35px;
+ font-size: 28px;
+ color: #fff;
+ margin-bottom: 20px;
+ text-align: center;
}
::v-deep .el-dialog {
background: transparent;
@@ -332,17 +532,27 @@
::v-deep .el-dialog__body {
padding: 0 !important;
}
+.btn-error{
+ bottom:80px!important;
+}
.btn {
- width: 200px;
+ width: 150px;
height: auto;
- float: left;
display: inline-block;
+ position:relative;
img {
width: 100%;
}
+ .icon-loading{
+ font-size:32px;
+ color:#333;
+ position:absolute;
+ line-height:2.0;
+ left:38%;
+ }
&:nth-of-type(1) {
- margin-right: 30px;
- margin-left: 110px;
+ // margin-right: 30px;
+ // margin-left: 110px;
}
}
::v-deep .el-tabs__content {
@@ -420,30 +630,71 @@
width: 100%;
}
.dialog-content-box {
- height: calc(100% - 200px);
+ height: calc(100% - 190px);
// overflow: hidden;
- padding: 50px 20px 20px;
+ padding: 20px 0px 10px;
.el-form {
overflow: hidden;
}
.title-auto-box {
- height: calc(100% - 150px);
+ height: calc(100% - 220px);
overflow: auto;
+ width:calc(100% - 140px);
+ margin: 0 auto;
+ background:#0E246A;
+ .title-box{
+ padding:0 10px;
+ width:calc(100% - 20px);
+ }
}
- .progress-item{
- width:55%;
- padding:2px 8px;
- height:20px;
- background:#fff;
- border-radius:30px;
+ .gif-box{
+ width:230px;
margin:0 auto;
- border:2px solid rgba(255,255,255,0.5);
- box-shadow: 1px 5px 5px rgba(255,255,255,0.5);
- span{
- float:left;
+ margin-bottom:5px;
+ .gif-right{
+ width:210px;
+ font-size:14px;
+ color:#fff;
+ line-height:28px;
+ span{
+ font-weight: 700;
+ font-size:18px;
+ }
+ }
+ }
+ .gif{
+ width:55px;
+ vertical-align: middle;
+ float:left;
+ margin-right:20px;
+ img{
+ width:100%;
+ }
+ .yuandian {
+ width: 55px;
+ height: 55px;
+ float:left;
+ // background: #15d815;
+ background:red;
+ border-radius: 50%;
+ // margin-top:-5px;
+ vertical-align: middle;
+ }
+ }
+ .progress-item {
+ width: 55%;
+ padding: 2px 8px;
+ height: 20px;
+ background: #fff;
+ border-radius: 30px;
+ margin: 0 auto;
+ border: 2px solid rgba(255, 255, 255, 0.5);
+ box-shadow: 1px 5px 5px rgba(255, 255, 255, 0.5);
+ span {
+ float: left;
font-weight: 700;
- color:#333;
- font-size:15px;
+ color: #333;
+ font-size: 15px;
}
}
}
@@ -456,12 +707,29 @@
font-weight: 600;
}
.drawerHeader {
- font-weight: 700;
- font-size: 20px;
- text-align: center;
- color: #fff;
- height: 35px;
- line-height: 35px;
+ width:98%;
+ margin:0 auto;
+ overflow:hidden;
+ .title-l{
+ width:25%;
+ float:left;
+ margin-left:30px;
+ font-size: 25px;
+ color: #fff;
+ height: 3.2vw;
+ line-height: 4.5vw;
+ }
+ .title-r{
+ width:60px;
+ float:right;
+ height: 60px;
+ line-height: 5vw;
+ cursor:pointer;
+ img{
+ display:inline-block;
+ width:100%;
+ }
+ }
.identify {
width: 80px;
height: 25px;
--
Gitblit v1.8.0