From 39fc2d6754953e41a7334a2166347baacfcfb40a Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期六, 11 十月 2025 18:21:18 +0800
Subject: [PATCH] 对接口

---
 admin/src/components/business/OperaJkCabinetWindow.vue |    6 
 admin/src/views/business/jkCabinet.vue                 |   26 ++++--
 admin/src/api/business/jkCabinet.js                    |   12 ++
 admin/src/components/business/cabinetDetails.vue       |   62 +++++++++++++--
 admin/src/api/business/jkCabinetGrid.js                |    5 +
 admin/src/api/business/jkKeys.js                       |    5 +
 admin/src/components/business/alcoholTest.vue          |  112 ++++++++++++++++++++++++++++
 7 files changed, 206 insertions(+), 22 deletions(-)

diff --git a/admin/src/api/business/jkCabinet.js b/admin/src/api/business/jkCabinet.js
index 8f81b84..2370a04 100644
--- a/admin/src/api/business/jkCabinet.js
+++ b/admin/src/api/business/jkCabinet.js
@@ -35,9 +35,19 @@
   return request.post('/visitsAdmin/cloudService/business/jkCabinet/updateStatusById', data)
 }
 
+// 鏇存柊閰掔簿妫�娴嬮厤缃�
+export function updateCabinetConfig (data) {
+  return request.post('/visitsAdmin/cloudService/business/jkCabinet/updateCabinetConfig', data)
+}
+
 // 鍒犻櫎
 export function deleteById (id) {
-  return request.get(`/business/jkCabinet/delete/${id}`)
+  return request.get(`/visitsAdmin/cloudService/business/jkCabinet/delete/${id}`)
+}
+
+// 鑾峰彇閰掔簿妫�娴嬮厤缃�
+export function getCabinetConfig () {
+  return request.get(`/visitsAdmin/cloudService/business/jkCabinet/getCabinetConfig`)
 }
 
 // 鎵归噺鍒犻櫎
diff --git a/admin/src/api/business/jkCabinetGrid.js b/admin/src/api/business/jkCabinetGrid.js
index bc2d362..15c20d7 100644
--- a/admin/src/api/business/jkCabinetGrid.js
+++ b/admin/src/api/business/jkCabinetGrid.js
@@ -30,6 +30,11 @@
   return request.post('/visitsAdmin/cloudService/business/jkCabinetGrid/updateStatusById', data)
 }
 
+// 瑙g粦閽ュ寵
+export function unBindKeys (data) {
+  return request.post('/visitsAdmin/cloudService/business/jkCabinetGrid/unBindKeys', data)
+}
+
 // 鍒犻櫎
 export function deleteById (id) {
   return request.get(`/business/jkCabinetGrid/delete/${id}`)
diff --git a/admin/src/api/business/jkKeys.js b/admin/src/api/business/jkKeys.js
index edd2d47..b85f391 100644
--- a/admin/src/api/business/jkKeys.js
+++ b/admin/src/api/business/jkKeys.js
@@ -20,6 +20,11 @@
   return request.post('/visitsAdmin/cloudService/business/jkKeys/create', data)
 }
 
+// 鍒楄〃鏌ヨ
+export function list (data) {
+  return request.post('/visitsAdmin/cloudService/business/jkKeys/list', data)
+}
+
 // 淇敼
 export function updateById (data) {
   return request.post('/visitsAdmin/cloudService/business/jkKeys/updateById', data)
diff --git a/admin/src/components/business/OperaJkCabinetWindow.vue b/admin/src/components/business/OperaJkCabinetWindow.vue
index 7817588..fe508bb 100644
--- a/admin/src/components/business/OperaJkCabinetWindow.vue
+++ b/admin/src/components/business/OperaJkCabinetWindow.vue
@@ -85,11 +85,11 @@
       <h3 style="margin: 20px 0;">鏌滅粍淇℃伅</h3>
       <el-form-item label="鎺掑垪" prop="rowNum">
         <div style="width: 100%; display: flex; align-items: center;">
-          <el-input v-model="form.rowNum" type="number" placeholder="璇疯緭鍏ユ帓鏁�" v-trim>
+          <el-input v-model="form.rowNum" :disabled="form.id" type="number" placeholder="璇疯緭鍏ユ帓鏁�" v-trim>
             <template slot="append">鎺�</template>
           </el-input>
           <span style="margin: 0 20px;">x</span>
-          <el-input v-model="form.columnNum" type="number" placeholder="璇疯緭鍏ュ垪鏁�" v-trim>
+          <el-input v-model="form.columnNum" :disabled="form.id" type="number" placeholder="璇疯緭鍏ュ垪鏁�" v-trim>
             <template slot="append">鍒�</template>
           </el-input>
         </div>
@@ -110,7 +110,7 @@
         </div>
       </el-form-item>
       <el-form-item label="鎺掑垪椤哄簭" prop="sortType" v-if="form.noType === 1">
-        <el-radio-group v-model="form.sortType">
+        <el-radio-group v-model="form.sortType" :disabled="form.id">
           <el-radio :label="0">浠庡乏寰�鍙�</el-radio>
           <el-radio :label="1">浠庝笂鍚戜笅</el-radio>
         </el-radio-group>
diff --git a/admin/src/components/business/alcoholTest.vue b/admin/src/components/business/alcoholTest.vue
new file mode 100644
index 0000000..9d7e2d6
--- /dev/null
+++ b/admin/src/components/business/alcoholTest.vue
@@ -0,0 +1,112 @@
+<template>
+    <GlobalWindow
+        width="50%"
+        :title="title"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <el-form :model="form" ref="form" :rules="rules">
+            <el-form-item label="鍚规皵鏃堕暱" prop="blowTime">
+                <el-input v-model="form.blowTime" placeholder="璇疯緭鍏ュ惞姘旀椂闀匡紙绉掞級" v-trim/>
+            </el-form-item>
+            <el-form-item label="鍘嬪姏鍊�" prop="pressure">
+                <el-input v-model="form.pressure" placeholder="璇疯緭鍏ュ帇鍔涘��" v-trim/>
+            </el-form-item>
+            <el-form-item label="閰掔簿娴撳害闃堝��" prop="concentration">
+                <div style="width: 100%; display: flex; align-items: center;">
+                    <el-input v-model="form.concentration" placeholder="璇疯緭鍏ラ厭绮炬祿搴﹂璀﹀��" style="flex: 1;" v-trim/>
+                    <el-select v-model="form.threshold" placeholder="璇烽�夋嫨" style="flex-shrink: 0; margin-left: 15px;">
+                        <el-option label="mg/100ml" value="1"></el-option>
+                        <el-option label="mg/L" value="2"></el-option>
+                        <el-option label="%BAC" value="3"></el-option>
+                    </el-select>
+                </div>
+            </el-form-item>
+        </el-form>
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import { updateCabinetConfig } from '@/api/business/jkCabinet'
+  export default {
+    name: 'alcoholTest',
+    extends: BaseOpera,
+    components: { GlobalWindow },
+    data () {
+      return {
+        // 琛ㄥ崟鏁版嵁
+        form: {
+          id: null,
+          blowTime: '',
+          pressure: '',
+          concentration: '',
+          threshold: ''
+        },
+        // 楠岃瘉瑙勫垯
+        rules: {
+          blowTime: [
+            { required: true, message: '璇疯緭鍏ュ惞姘旀椂闀�', trigger: 'blur' }
+          ],
+          pressure: [
+            { required: true, message: '璇疯緭鍏ュ帇鍔涘��', trigger: 'blur' }
+          ],
+          concentration: [
+            { required: true, message: '璇烽�夋嫨閰掔簿娴撳害棰勮鍊�', trigger: 'blur' }
+          ],
+        }
+      }
+    },
+    created () {
+      this.config({
+        api: '/business/jkCabinet',
+        'field.id': 'id'
+      })
+    },
+    methods: {
+      open (title, target) {
+        this.title = title
+        this.form.threshold = ''
+        this.visible = true
+        // 鏂板缓
+        if (target == null) {
+          this.$nextTick(() => {
+            this.$refs.form.resetFields()
+            this.form[this.configData['field.id']] = null
+          })
+          return
+        }
+        // 缂栬緫
+        this.$nextTick(() => {
+          for (const key in this.form) {
+            this.form[key] = target[key]
+          }
+        })
+      },
+      // 纭鏂板缓
+      __confirmCreate () {
+        this.$refs.form.validate((valid) => {
+          if (!valid) {
+            return
+          }
+          // 璋冪敤鏂板缓鎺ュ彛
+          this.isWorking = true
+          updateCabinetConfig(this.form)
+            .then(() => {
+              this.visible = false
+              this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
+              this.$emit('success')
+            })
+            .catch(e => {
+              // this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.isWorking = false
+            })
+        })
+      },
+    }
+  }
+</script>
diff --git a/admin/src/components/business/cabinetDetails.vue b/admin/src/components/business/cabinetDetails.vue
index 8e324d7..f08a6ba 100644
--- a/admin/src/components/business/cabinetDetails.vue
+++ b/admin/src/components/business/cabinetDetails.vue
@@ -6,8 +6,8 @@
         :withFooter="false"
     >
         <el-form ref="searchForm" :model="searchForm" label-width="100px" inline>
-            <el-form-item label="閽ュ寵" prop="keyId">
-                <el-input v-model="searchForm.keyId" placeholder="璇疯緭鍏ラ挜鍖欑紪鐮佹垨鍚嶇О" @keypress.enter.native="getList"></el-input>
+            <el-form-item label="閽ュ寵" prop="keyCode">
+                <el-input v-model="searchForm.keyCode" placeholder="璇疯緭鍏ラ挜鍖欑紪鐮佹垨鍚嶇О" @keypress.enter.native="getList"></el-input>
             </el-form-item>
             <el-form-item label="鐘舵��" prop="status">
                 <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨" @change="getList">
@@ -31,7 +31,7 @@
             </el-form-item>
         </el-form>
         <ul class="toolbar">
-            <li><el-button type="primary">鎵归噺瑙g粦</el-button></li>
+            <li><el-button type="primary" @click="bathUnBindKeys">鎵归噺瑙g粦</el-button></li>
         </ul>
         <el-table
             v-loading="loading"
@@ -42,24 +42,25 @@
             <el-table-column prop="cabinetName" label="鎵�灞為挜鍖欐煖" min-width="100px"></el-table-column>
             <el-table-column prop="keyId" label="缁戝畾閽ュ寵" min-width="100px">
                 <template slot-scope="{row}">
-                    <el-select v-model="row.keyId" placeholder="璇烽�夋嫨">
+                    <el-select v-model="row.keyId" placeholder="璇烽�夋嫨" @change="blurFunc($event, row, 1)">
                         <el-option
                             v-for="item in keysAll"
                             :key="item.id"
-                            :label="item.name"
-                            :value="item.id">
+                            :label="item.code"
+                            :value="item.id"
+                            :disabled="item.isBinding === 1">
                         </el-option>
                     </el-select>
                 </template>
             </el-table-column>
             <el-table-column label="鏉垮彿" min-width="100px">
                 <template slot-scope="{row}">
-                    <el-input v-model="row.boardCode" placeholder="璇疯緭鍏ユ澘鍙�"></el-input>
+                    <el-input v-model="row.boardCode" @blur="blurFunc($event, row, 2)" placeholder="璇疯緭鍏ユ澘鍙�"></el-input>
                 </template>
             </el-table-column>
             <el-table-column label="閫氶亾鍙�" min-width="100px">
                 <template slot-scope="{row}">
-                    <el-input v-model="row.channelCode" placeholder="璇疯緭鍏ラ�氶亾鍙�"></el-input>
+                    <el-input v-model="row.channelCode" @blur="blurFunc($event, row, 3)" placeholder="璇疯緭鍏ラ�氶亾鍙�"></el-input>
                 </template>
             </el-table-column>
             <el-table-column label="鐘舵��" min-width="100px">
@@ -93,7 +94,8 @@
 <script>
   import BaseOpera from '@/components/base/BaseOpera'
   import GlobalWindow from '@/components/common/GlobalWindow'
-  import { fetchList, updateStatusById } from '@/api/business/jkCabinetGrid'
+  import { fetchList, updateStatusById, unBindKeys, updateById } from '@/api/business/jkCabinetGrid'
+  import { list } from '@/api/business/jkKeys'
   export default {
     name: 'cabinetDetails',
     extends: BaseOpera,
@@ -103,7 +105,7 @@
         id: null,
         info: null,
         searchForm: {
-          keyId: '',
+          keyCode: '',
           status: '',
           bindStatus: ''
         },
@@ -117,8 +119,48 @@
         this.title = title
         this.id = id
         this.getList()
+        this.getKeysAll()
         this.visible = true
       },
+      getKeysAll() {
+        list({  })
+            .then(res => {
+              this.keysAll = res
+            })
+      },
+      blurFunc(e, row, type) {
+        let obj = {
+          id: row.id
+        }
+        if (type === 1) {
+          obj.keyId = row.keyId
+        } else if (type === 2) {
+          obj.boardCode = row.boardCode
+        } else if (type === 3) {
+          obj.channelCode = row.channelCode
+        }
+        updateById(obj)
+            .then(res => {
+              this.getList()
+              if (type === 1) {
+                this.getKeysAll()
+              }
+            })
+      },
+      bathUnBindKeys() {
+        this.$confirm('纭鎵归噺瑙g粦鍚�?', '鎻愮ず', {
+          confirmButtonText: '纭畾',
+          cancelButtonText: '鍙栨秷',
+          type: 'warning'
+        }).then(() => {
+          unBindKeys(this.list.map(item => item.id))
+            .then(res => {
+              this.getList()
+            })
+        }).catch(() => {
+
+        });
+      },
       changeStatus(status, id) {
         updateStatusById({ id, status })
           .then(res => {
diff --git a/admin/src/views/business/jkCabinet.vue b/admin/src/views/business/jkCabinet.vue
index d6f7b5c..a15d6d7 100644
--- a/admin/src/views/business/jkCabinet.vue
+++ b/admin/src/views/business/jkCabinet.vue
@@ -31,7 +31,7 @@
     <template v-slot:table-wrap>
       <ul class="toolbar" v-permissions="['business:jkcabinet:create', 'business:jkcabinet:delete']">
         <li><el-button type="primary" @click="$refs.operaJkCabinetWindow.open('鏂板缓璁惧')" icon="el-icon-plus" v-permissions="['business:jkcabinet:create']">鏂板缓</el-button></li>
-        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:jkcabinet:delete']">鍒犻櫎</el-button></li>
+        <li><el-button type="warning" @click="$refs.alcoholTest.open('鏂板缓閰掔簿妫�娴嬮厤缃�', form)">閰掔簿妫�娴嬮厤缃�</el-button></li>
       </ul>
       <el-table
         :height="tableHeightNew"
@@ -52,8 +52,8 @@
         </el-table-column>
         <el-table-column label="杩愯鐘舵��" min-width="100px">
           <template slot-scope="{row}">
-            <el-link type="success" v-if="row.runStatus === 0">鍦ㄧ嚎</el-link>
-            <el-link type="danger" v-if="row.runStatus === 1">绂荤嚎</el-link>
+            <el-link type="success" :underline="false" v-if="row.runStatus === 0">鍦ㄧ嚎</el-link>
+            <el-link type="danger" :underline="false" v-if="row.runStatus === 1">绂荤嚎</el-link>
           </template>
         </el-table-column>
         <el-table-column label="鐘舵��" min-width="100px">
@@ -75,8 +75,7 @@
           fixed="right"
         >
           <template slot-scope="{row}">
-            <el-button type="text">鏃ュ織</el-button>
-            <el-button type="text">缁戝畾閽ュ寵</el-button>
+            <el-button type="text" @click="$refs.cabinetDetails.open(row.name + '-鏌滄牸淇℃伅', row.id)">缁戝畾閽ュ寵</el-button>
             <el-button type="text" @click="$refs.operaJkCabinetWindow.open('缂栬緫閽ュ寵鏌滃熀鏈俊鎭〃', row)" v-permissions="['business:jkcabinet:update']">缂栬緫</el-button>
             <el-button type="text" @click="deleteById(row)" v-permissions="['business:jkcabinet:delete']">鍒犻櫎</el-button>
           </template>
@@ -93,6 +92,8 @@
     <OperaJkCabinetWindow ref="operaJkCabinetWindow" @success="handlePageChange"/>
     <!-- 鏌滃瓙璇︽儏 -->
     <CabinetDetails ref="cabinetDetails" />
+    <!-- 鏂板閰掔簿妫�娴� -->
+    <AlcoholTest ref="alcoholTest" @success="GetCabinetConfig" />
   </TableLayout>
 </template>
 
@@ -102,11 +103,12 @@
 import Pagination from '@/components/common/Pagination'
 import OperaJkCabinetWindow from '@/components/business/OperaJkCabinetWindow'
 import CabinetDetails from '@/components/business/cabinetDetails'
-import { updateStatusById } from '@/api/business/jkCabinet'
+import AlcoholTest from '@/components/business/alcoholTest'
+import { updateStatusById, getCabinetConfig } from '@/api/business/jkCabinet'
 export default {
   name: 'JkCabinet',
   extends: BaseTable,
-  components: { TableLayout, Pagination, OperaJkCabinetWindow, CabinetDetails },
+  components: { TableLayout, Pagination, OperaJkCabinetWindow, CabinetDetails, AlcoholTest},
   data () {
     return {
       // 鎼滅储
@@ -115,7 +117,8 @@
         name: '',
         status: '',
         rumStatus: ''
-      }
+      },
+      form: null
     }
   },
   created () {
@@ -126,6 +129,7 @@
       'field.main': 'id'
     })
     this.search()
+    this.GetCabinetConfig()
   },
   methods: {
     changeStatus(status, id) {
@@ -133,6 +137,12 @@
         .then(res => {
           this.search()
         })
+    },
+    GetCabinetConfig() {
+      getCabinetConfig()
+        .then(res => {
+          this.form = res
+        })
     }
   }
 }

--
Gitblit v1.9.3