From 0d4b65b968fdbf59cc9c0b0b2ca2091b4fc6c4ba Mon Sep 17 00:00:00 2001
From: songshankun <songshankun@foxmail.com>
Date: 星期五, 10 十一月 2023 11:50:38 +0800
Subject: [PATCH] feat: 添加获取/设定设备配置接口,添加设备配置弹窗,生产弹窗添加根据配置决定是否允许无工艺参数生产

---
 src/components/ParamsConfigModal.vue |  142 +++++++++++++++++++++++++++++++++++
 src/components/TaskControlModal.vue  |   32 +++++++-
 src/views/visualization.vue          |   15 +++
 src/api/home/index.js                |   37 +++++++--
 4 files changed, 214 insertions(+), 12 deletions(-)

diff --git a/src/api/home/index.js b/src/api/home/index.js
index f548303..92b940c 100644
--- a/src/api/home/index.js
+++ b/src/api/home/index.js
@@ -1,6 +1,6 @@
 import request from "@/utils/request";
 import axios from "axios"
-// 鑾峰彇缃戠粶閰嶇疆 
+// 鑾峰彇缃戠粶閰嶇疆
 export const NetworkCard = () => {
   return request({
     url: "/v1/config/net",
@@ -15,7 +15,7 @@
     data
   });
 };
-// 鑾峰彇鐢熶骇杩涘害 
+// 鑾峰彇鐢熶骇杩涘害
 export const getProgress = (data) => {
   return request({
     url: "/v1/plc/productProgress",
@@ -31,29 +31,29 @@
     method: "get",
   });
 };
-// 娣诲姞 pLC鍝佺墝 
+// 娣诲姞 pLC鍝佺墝
 export const addMiniDict = () => {
   return request({
     url: "/v1/plcBrand/add",
     method: "post",
   });
 };
-// 鍒犻櫎 pLC鍝佺墝 
+// 鍒犻櫎 pLC鍝佺墝
 export const deleteMiniDict = (data) => {
   return request({
     url: `v1/plcBrand/delete/${data.id}`,
-    
+
     method: "delete",
   });
 };
-// 鏇存柊 pLC鍝佺墝 
+// 鏇存柊 pLC鍝佺墝
 export const updateMiniDict = () => {
   return request({
     url: "/v1/plcBrand/update",
     method: "put",
   });
 };
-// 鑾峰彇plc 
+// 鑾峰彇plc
 export const getPlc = () => {
   return request({
     url: "/v1/config/plc",
@@ -115,7 +115,7 @@
     data,
   });
 };
-//鑾峰彇鏈换鍔� 
+//鑾峰彇鏈换鍔�
 export const getTaskUnStarted = (data) => {
   return request({
     url: "/v1/task/get/unStarted?page="+data.page+'&pageSize='+data.pageSize,
@@ -140,3 +140,24 @@
     data,
   });
 };
+
+/**
+ * 鑾峰彇褰撳墠闈㈡澘缁戝畾鐨勮澶囧垪琛�
+ */
+export function getDeviceList() {
+  return request({
+    url: `/v1/device/list`,
+    method: 'get'
+  })
+}
+
+/**
+ * 璁惧畾褰撳墠璁惧閰嶇疆
+ */
+export function apiSetCurrentDeviceConfig(data) {
+  return request({
+    url: `/v1/device/config`,
+    method: 'post',
+    data
+  })
+}
diff --git a/src/components/ParamsConfigModal.vue b/src/components/ParamsConfigModal.vue
new file mode 100644
index 0000000..65fce1b
--- /dev/null
+++ b/src/components/ParamsConfigModal.vue
@@ -0,0 +1,142 @@
+<template>
+<div class="params-config-modal">
+  <el-dialog
+    title="閰嶇疆"
+    :visible.sync="visible"
+    width="30%"
+    :before-close="handleClose">
+    <div class="content">
+      <el-radio-group v-model="config" class="config-radio-group">
+        <el-radio :label="false" size="large">鏃犲伐鑹哄弬鏁帮紝涓嶅厑璁镐笅鍙戠敓浜т换鍔�</el-radio>
+        <el-radio :label="true" size="large">鏃犲伐鑹哄弬鏁帮紝鍏佽涓嬪彂鐢熶骇浠诲姟</el-radio>
+      </el-radio-group>
+    </div>
+    <span slot="footer" class="dialog-footer">
+    <el-button class="submit" @click="setConfig">纭� 瀹�</el-button>
+  </span>
+  </el-dialog>
+</div>
+</template>
+
+<script>
+import {apiSetCurrentDeviceConfig, getDeviceList} from "@/api/home";
+import {Message} from "element-ui";
+
+export default {
+  name: "ParamsConfigModal",
+  props:{
+    visible:{
+      type: Boolean,
+      default:false
+    }
+  },
+  data(){
+    return{
+      config:false,
+      deviceInfo:null
+    }
+  },
+  watch:{
+    visible(val){
+      if (val){
+        this.getDeviceInfo()
+      }
+    }
+  },
+  methods:{
+    handleClose(){
+      this.$emit('update:visible', false)
+      this.$emit('close')
+    },
+    getDeviceInfo(){
+      getDeviceList().then(res=>{
+        this.deviceInfo = res.data
+        this.config=this.getConfig(this.deviceInfo)
+      }).catch(err=>{
+        console.error(err)
+      })
+    },
+    setConfig() {
+      apiSetCurrentDeviceConfig({
+        // 閫変腑鍏佽涓嬪彂鍗充笉闇�瑕佸伐鑹哄弬鏁� ,杩欎咯鏄弽鐨�
+        needSetProcessParams: !this.config
+      })
+        .then(() => {
+          Message({
+            message: '璁剧疆鎴愬姛',
+            type: 'success',
+            duration: 3 * 1000
+          })
+          this.handleClose()
+        })
+        .catch((err) => {
+          console.error(err)
+        })
+    },
+    getConfig(deviceInfo){
+      const currentDeviceInfo = deviceInfo.deviceList?.find((ele) => {
+        return ele.deviceID === deviceInfo.currentDeviceID
+      })
+      return !currentDeviceInfo?.needSetProcessParams
+    }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+::v-deep {
+  .el-dialog{
+    background-color: #10256c;
+    color: #fff;
+  }
+  .el-dialog__title,.el-dialog__body{
+    color: #fff;
+  }
+}
+.submit{
+  background-color: #0dfde6;
+  outline: none;
+  border: none;
+  color:#333333;
+  width: 100px;
+  height: 40px;
+  font-size: 14px;
+  font-weight: 500;
+  &:hover{
+    background-color: #0dfde6;
+    color:#333333;
+  }
+  &:focus{
+    background-color: #0dfde6;
+    color:#333333;
+  }
+  &:active{
+    background-color: #0dfde6;
+    color:#333333;
+  }
+}
+.dialog-footer{
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.content{
+  height: 160px;
+  padding:30px 20px;
+  box-sizing: border-box;
+}
+
+.config-radio-group {
+  display: flex;
+  flex-direction: column;
+  justify-content: start;
+  align-items: start;
+
+}
+::v-deep .el-radio__label {
+  color: #fff!important;
+}
+.el-radio{
+  margin-bottom: 20px;
+}
+</style>
diff --git a/src/components/TaskControlModal.vue b/src/components/TaskControlModal.vue
index adf7f82..73dec7f 100644
--- a/src/components/TaskControlModal.vue
+++ b/src/components/TaskControlModal.vue
@@ -93,6 +93,10 @@
                 >
                   宸ヨ壓鍙傛暟
                 </div>
+                <!-- 鏈幏鍙栧埌宸ヨ壓鍙傛暟, 涓斿綋鍓嶈澶囧厑璁稿湪娌℃湁宸ヨ壓鍙傛暟鐨勬儏鍐典笅鐢熶骇, 鍒欐彁绀�-->
+                <div v-if="getProcessParamsErrMsg && currentDeviceAllowNoParams" class="title-item title-item-two">
+                  鏈幏鍙栧埌宸ヨ壓鍙傛暟, 璇锋墜鍔ㄨ缃垨鍦ㄤ簯绔伐鑹烘ā鍨嬩腑涓婁紶
+                </div>
                 <div
                   class="title-item title-item-two"
                   v-for="(item, index) in currentProcessParams"
@@ -103,7 +107,7 @@
                 </div>
               </div>
             </div>
-            <div class="process-err-tip" v-if="getProcessParamsErrMsg">
+            <div class="process-err-tip" v-if="getProcessParamsErrMsg && !currentDeviceAllowNoParams">
               <div class="tip-icon">
                 <span class="el-icon-error color_error"></span>
               </div>
@@ -170,7 +174,7 @@
       </div>
       <div slot="footer" :class="messageError?'dialog-footer tac btn-error':'dialog-footer tac'"
            style="overflow: hidden">
-        <template v-if="messageError || getProcessParamsErrMsg">
+        <template v-if="(messageError || getProcessParamsErrMsg) && !currentDeviceAllowNoParams">
           <div class="btn" v-if="messageError ==='涓嬪彂鎴愬姛锛�'||getProcessParamsErrMsg" @click="closeClick">
             <img src="../../public/close-btn.png"/>
           </div>
@@ -215,7 +219,7 @@
 </template>
 
 <script>
-import {getTaskInfo, sendProcessParams, startTask,} from "@/api/home"; // 浜х嚎
+import {getDeviceList, getTaskInfo, sendProcessParams, startTask,} from "@/api/home"; // 浜х嚎
 import {channelNameConfig} from "@/common/constants";
 export default {
   name: 'TaskControlModal',
@@ -248,13 +252,17 @@
       isLoading: false,
       second: 0,
       secondTimer: null,
-      channelNameConfig: channelNameConfig
+      channelNameConfig: channelNameConfig,
+      currentDeviceAllowNoParams:false,
+      deviceInfo:null
     };
   },
   mounted() {
     this.getTaskList().then(() => {
       const firstData = this.taskList[0]
       const id = firstData?.Procedure?.ID
+      console.log(this.taskList)
+      this.getDeviceInfo()
       if (id) {
         this.currentTaskIndex = this.taskList.findIndex(ele => ele.Procedure.ID === id)
         this.getCurrentTaskProduceParams(id)
@@ -312,6 +320,7 @@
       this.messageError = ''
       this.resParams = {};
       if (newVal) {
+        this.getDeviceInfo()
         this.getTaskList().then(() => {
           const firstData = this.taskList[0]
           const id = firstData?.Procedure?.ID
@@ -361,6 +370,20 @@
         console.error(err)
       },)
     },
+    getDeviceInfo(){
+      getDeviceList().then(res=>{
+        this.deviceInfo = res.data
+        this.currentDeviceAllowNoParams=this.getConfig(this.deviceInfo)
+      }).catch(err=>{
+        console.error(err)
+      })
+    },
+    getConfig(deviceInfo){
+      const currentDeviceInfo = deviceInfo.deviceList?.find((ele) => {
+        return ele.deviceID === deviceInfo.currentDeviceID
+      })
+      return !currentDeviceInfo?.needSetProcessParams
+    },
     /**
      * 鑾峰彇褰撳墠灞曠ず鐨勪换鍔$殑宸ヨ壓鍙傛暟
      */
@@ -369,6 +392,7 @@
       if (id) {
         this.currentProcessParams = []
         this.getProcessParamsErrMsg = ""
+
         startTask({id}).then((res) => {
           if (res.code === 200) {
             this.currentProcessParams = res.data.Params ?? []
diff --git a/src/views/visualization.vue b/src/views/visualization.vue
index 3e5f353..65eda1a 100644
--- a/src/views/visualization.vue
+++ b/src/views/visualization.vue
@@ -38,6 +38,11 @@
             @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"
           >
@@ -593,6 +598,7 @@
       :listData="listData"
       @updateGet="updateGet"
     />
+    <ParamsConfigModal :visible="paramsConfigIsShow" @close="closeParamsConfigModal"></ParamsConfigModal>
   </div>
 </template>
 
@@ -616,8 +622,10 @@
 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,
@@ -753,6 +761,7 @@
       resprocInfoTimer:null,
       channelNameConfig: channelNameConfig,
       index:null,
+      paramsConfigIsShow:false
     };
   },
   mounted() {
@@ -1355,6 +1364,12 @@
         path: "/set",
       });
     },
+    openParamsConfigModal(){
+      this.paramsConfigIsShow=true
+    },
+    closeParamsConfigModal(){
+      this.paramsConfigIsShow=false
+    },
     // 鍙充晶鎺у埗
     controlClick() {
       if (this.Tasks.length > 0) {

--
Gitblit v1.8.0