From 43dc204f89527ba402666ba92345efbfe751f297 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期四, 09 十月 2025 18:32:22 +0800
Subject: [PATCH] 钥匙柜、钥匙

---
 admin/src/components/business/BorrowingAndReturningRecords.vue |  153 ++++++++
 admin/src/components/business/OperaJkCabinetWindow.vue         |  225 ++++++++---
 admin/src/views/business/jkCabinet.vue                         |  179 ++-------
 admin/src/components/business/OperaJkKeysWindow.vue            |   78 ++--
 admin/src/components/business/cabinetDetails.vue               |  152 ++++++++
 admin/package-lock.json                                        |  160 ++++----
 admin/src/views/business/jkKeys.vue                            |   98 ++---
 admin/.env.development                                         |    2 
 8 files changed, 670 insertions(+), 377 deletions(-)

diff --git a/admin/.env.development b/admin/.env.development
index fd98857..3661935 100644
--- a/admin/.env.development
+++ b/admin/.env.development
@@ -2,7 +2,7 @@
 NODE_ENV = 'development'
 
 # VUE_APP_API_URL  = 'https://atwl.ahzyssl.com/zhyq_interface'
-VUE_APP_API_URL  = 'http://192.168.1.46:10010'
+VUE_APP_API_URL  = 'http://192.168.1.54:10010'
 # VUE_APP_API_URL  = 'https://atwl.ahzyssl.com/zhyq_interface'
 # VUE_APP_API_URL  = 'http://10.50.250.253:8088/gateway_interface'
 
diff --git a/admin/package-lock.json b/admin/package-lock.json
index f24166f..1e1e87e 100644
--- a/admin/package-lock.json
+++ b/admin/package-lock.json
@@ -1886,63 +1886,6 @@
           "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
           "dev": true
         },
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
-          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true,
-          "optional": true
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true,
-          "optional": true
-        },
-        "loader-utils": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
-          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^2.1.2"
-          }
-        },
         "ssri": {
           "version": "8.0.1",
           "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-8.0.1.tgz?cache=0&sync_timestamp=1617826515595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-8.0.1.tgz",
@@ -1950,28 +1893,6 @@
           "dev": true,
           "requires": {
             "minipass": "^3.1.1"
-          }
-        },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
-          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        },
-        "vue-loader-v16": {
-          "version": "npm:vue-loader@16.8.3",
-          "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
-          "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "chalk": "^4.1.0",
-            "hash-sum": "^2.0.0",
-            "loader-utils": "^2.0.0"
           }
         }
       }
@@ -14207,6 +14128,87 @@
         }
       }
     },
+    "vue-loader-v16": {
+      "version": "npm:vue-loader@16.8.3",
+      "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
+      "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "chalk": "^4.1.0",
+        "hash-sum": "^2.0.0",
+        "loader-utils": "^2.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "optional": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
+        "loader-utils": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
+          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
     "vue-property-decorator": {
       "version": "8.5.1",
       "resolved": "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-8.5.1.tgz",
diff --git a/admin/src/components/business/BorrowingAndReturningRecords.vue b/admin/src/components/business/BorrowingAndReturningRecords.vue
new file mode 100644
index 0000000..caffbf9
--- /dev/null
+++ b/admin/src/components/business/BorrowingAndReturningRecords.vue
@@ -0,0 +1,153 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :visible.sync="visible"
+        :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>
+            <el-form-item label="鐘舵��" prop="status">
+                <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨" @change="getList">
+                    <el-option label="鍏ㄩ儴" value=""></el-option>
+                    <el-option label="鍚敤" :value="0"></el-option>
+                    <el-option label="绂佺敤" :value="1"></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="鏌滄牸鐘舵��" prop="bindStatus">
+                <el-select v-model="searchForm.bindStatus" placeholder="璇烽�夋嫨" @change="getList">
+                    <el-option label="鍏ㄩ儴" value=""></el-option>
+                    <el-option label="鏈粦瀹�" :value="0"></el-option>
+                    <el-option label="宸茬粦瀹�" :value="1"></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item>
+                <el-button type="primary" @click="getList">鎼滅储</el-button>
+            </el-form-item>
+            <el-form-item>
+                <el-button @click="reset">閲嶇疆</el-button>
+            </el-form-item>
+        </el-form>
+        <ul class="toolbar">
+            <li><el-button type="primary">鎵归噺瑙g粦</el-button></li>
+        </ul>
+        <el-table
+            v-loading="loading"
+            :data="list"
+            stripe
+        >
+            <el-table-column prop="code" label="鏌滄牸缂栧彿" min-width="100px"></el-table-column>
+            <el-table-column prop="cabinetName" label="鎵�灞為挜鍖欐煖" min-width="100px"></el-table-column>
+            <el-table-column prop="keyId" label="缁戝畾閽ュ寵" min-width="100px"></el-table-column>
+            <el-table-column label="鐘舵��" min-width="100px">
+                <template slot-scope="{row}">
+                    <el-switch
+                        v-model="row.status"
+                        active-color="#13ce66"
+                        inactive-color="#ff4949"
+                        :active-value="0"
+                        :inactive-value="1">
+                    </el-switch>
+                </template>
+            </el-table-column>
+            <el-table-column label="杩愯鐘舵��" min-width="100px">
+                <template slot-scope="{row}">
+                    <el-link type="success" v-if="row.workingStatus === 0">姝e父</el-link>
+                    <el-link type="warning" v-if="row.workingStatus === 1">鏁呴殰</el-link>
+                </template>
+            </el-table-column>
+            <el-table-column label="鏌滄牸鐘舵��" min-width="100px">
+                <template slot-scope="{row}">
+                    <el-link type="warning" v-if="row.bindStatus === 0">鏈粦瀹�</el-link>
+                    <el-link type="success" v-if="row.bindStatus === 1">宸茬粦瀹�</el-link>
+                </template>
+            </el-table-column>
+            <el-table-column
+                label="鎿嶄綔"
+                min-width="100"
+                fixed="right"
+            >
+                <template slot-scope="{row}">
+                    <el-button type="text" v-if="row.bindStatus === 0">缁戝畾</el-button>
+                    <el-button type="text" v-if="row.bindStatus === 1">瑙g粦</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div style="width: 100%; text-align: right; margin-top: 20px">
+            <el-pagination
+                @current-change="handleCurrentChange"
+                :current-page="page"
+                :page-size="10"
+                layout="total, prev, pager, next, jumper"
+                :total="total">
+            </el-pagination>
+        </div>
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import { fetchList } from '@/api/business/jkCabinetGrid'
+  import { allList } from '@/api/business/cars'
+  export default {
+    name: 'BorrowingAndReturningRecords',
+    extends: BaseOpera,
+    components: { GlobalWindow },
+    data () {
+      return {
+        id: null,
+        info: null,
+        searchForm: {
+          keyId: '',
+          status: '',
+          bindStatus: ''
+        },
+        list: [],
+        page: 1,
+        total: 0,
+        loading: false
+      }
+    },
+    methods: {
+      open (title, id) {
+        this.title = title
+        this.id = id
+        this.getList()
+        this.visible = true
+      },
+      handleCurrentChange(e) {
+        this.page = e
+        this.getList()
+      },
+      reset() {
+        this.searchForm.keyId = ''
+        this.searchForm.status = ''
+        this.searchForm.workingStatus = ''
+        this.page = 1
+        this.getList()
+      },
+      getList() {
+        this.loading = true
+        fetchList({
+          capacity: 10,
+          page: this.page,
+          model: {
+            cabinetId: this.id,
+            keyId: this.searchForm.keyId,
+            status: this.searchForm.status,
+            workingStatus: this.searchForm.workingStatus
+          }
+        }).then(res => {
+          console.log(res)
+          this.list = res.records
+          this.total = res.total
+        }).finally(() => {
+          this.loading = false
+        })
+      }
+    }
+  }
+</script>
diff --git a/admin/src/components/business/OperaJkCabinetWindow.vue b/admin/src/components/business/OperaJkCabinetWindow.vue
index ee63049..7817588 100644
--- a/admin/src/components/business/OperaJkCabinetWindow.vue
+++ b/admin/src/components/business/OperaJkCabinetWindow.vue
@@ -1,29 +1,13 @@
 <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="creator">
-        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉缂栫爜" v-trim/>
-      </el-form-item>
-      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
-        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="鏇存柊浜虹紪鐮�" prop="editor">
-        <el-input v-model="form.editor" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" v-trim/>
-      </el-form-item>
-      <el-form-item label="鏇存柊鏃堕棿" prop="editDate">
-        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="鏄惁鍒犻櫎0鍚� 1鏄�" prop="isdeleted">
-        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀垹闄�0鍚� 1鏄�" v-trim/>
-      </el-form-item>
-      <el-form-item label="澶囨敞" prop="info">
-        <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
-      </el-form-item>
+      <h3 style="margin: 0 0 20px 0;">璁惧淇℃伅</h3>
       <el-form-item label="璁惧缂栧彿" prop="code">
         <el-input v-model="form.code" placeholder="璇疯緭鍏ヨ澶囩紪鍙�" v-trim/>
       </el-form-item>
@@ -39,53 +23,97 @@
       <el-form-item label="閫氳鍦板潃" prop="linkAddr">
         <el-input v-model="form.linkAddr" placeholder="璇疯緭鍏ラ�氳鍦板潃" v-trim/>
       </el-form-item>
-      <el-form-item label="鐘舵�� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭" prop="status">
-        <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭" v-trim/>
+      <el-form-item label="绔彛鍙�" prop="port">
+        <el-input v-model="form.port" placeholder="璇疯緭鍏ョ鍙e彿" v-trim/>
       </el-form-item>
-      <el-form-item label="绔彛" prop="port">
-        <el-input v-model="form.port" placeholder="璇疯緭鍏ョ鍙�" v-trim/>
+      <el-form-item label="璁惧绠$悊鍛�" prop="managerIdList">
+        <el-select v-model="form.managerIdList" filterable multiple placeholder="璇烽�夋嫨璁惧绠$悊鍛�">
+          <el-option
+            v-for="item in memberList"
+            :key="item.id"
+            :label="item.name+'-'+item.companyName"
+            :value="item.id">
+          </el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="璁惧绠$悊鍛樼紪鐮侊紙鍏宠仈member)" prop="managerId">
-        <el-input v-model="form.managerId" placeholder="璇疯緭鍏ヨ澶囩鐞嗗憳缂栫爜锛堝叧鑱攎ember)" v-trim/>
+      <el-form-item label="浣跨敤鏃堕暱" prop="useTime">
+        <div style="width: 100%; display: flex; align-items: center;">
+          <el-input v-model="form.useTime" placeholder="璇疯緭鍏ュ崟娆℃嬁鍙栭挜鍖欏彲浣跨敤鏃堕暱" v-trim style="flex: 1;"/>
+          <span style="margin-left: 20px;">鍗曚綅锛氬垎閽�</span>
+        </div>
       </el-form-item>
-      <el-form-item label="浣跨敤鏃堕暱(绉�)" prop="useTime">
-        <el-input v-model="form.useTime" placeholder="璇疯緭鍏ヤ娇鐢ㄦ椂闀�(绉�)" v-trim/>
+      <el-form-item label="鍙岄噸楠岃瘉" prop="doubleAuth">
+        <div style="width: 100%; display: flex; align-items: center;">
+          <el-switch
+            v-model="form.doubleAuth"
+            active-color="#13ce66"
+            inactive-color="#ff4949"
+            :active-value="1"
+            :inactive-value="0">
+          </el-switch>
+          <span style="margin-left: 20px; color: #999999;">寮�鍚弻閲嶈璇佸悗锛岄挜鍖欓鍙栨椂鍏堟牎楠岄獙璇佷汉韬唤锛屽啀鏍¢獙鍙告満韬唤</span>
+        </div>
       </el-form-item>
-      <el-form-item label="鏄惁鍙岄噸楠岃瘉 0鍚� 1鏄�" prop="doubleAuth">
-        <el-input v-model="form.doubleAuth" placeholder="璇疯緭鍏ユ槸鍚﹀弻閲嶉獙璇� 0鍚� 1鏄�" v-trim/>
-      </el-form-item>
-      <el-form-item label="楠岃瘉浜虹紪鐮侊紙鍏宠仈member)" prop="authMemberId">
-        <el-input v-model="form.authMemberId" placeholder="璇疯緭鍏ラ獙璇佷汉缂栫爜锛堝叧鑱攎ember)" v-trim/>
-      </el-form-item>
-      <el-form-item label="鎺掓暟" prop="rowNum">
-        <el-input v-model="form.rowNum" placeholder="璇疯緭鍏ユ帓鏁�" v-trim/>
-      </el-form-item>
-      <el-form-item label="鍒楁暟" prop="columnNum">
-        <el-input v-model="form.columnNum" placeholder="璇疯緭鍏ュ垪鏁�" v-trim/>
-      </el-form-item>
-      <el-form-item label="鏈�鍚庨�氳鏃堕棿" prop="haertTime">
-        <el-date-picker v-model="form.haertTime" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ渶鍚庨�氳鏃堕棿"></el-date-picker>
+      <el-form-item label="楠岃瘉浜�" prop="authMemberIdList">
+        <el-select v-model="form.authMemberIdList" filterable multiple placeholder="璇烽�夋嫨楠岃瘉浜�">
+          <el-option
+            v-for="item in memberList"
+            :key="item.id"
+            :label="item.name+'-'+item.companyName"
+            :value="item.id">
+          </el-option>
+        </el-select>
       </el-form-item>
       <el-form-item label="鎵�鍦ㄤ綅缃�" prop="lacation">
         <el-input v-model="form.lacation" placeholder="璇疯緭鍏ユ墍鍦ㄤ綅缃�" v-trim/>
       </el-form-item>
-      <el-form-item label="缁忓害" prop="longitude">
-        <el-input v-model="form.longitude" placeholder="璇疯緭鍏ョ粡搴�" v-trim/>
+      <el-form-item label="缁忕含搴�" prop="longitude">
+        <div style="width: 100%; display: flex; align-items: center;">
+          <el-input v-model="form.longitude" placeholder="璇疯緭鍏ョ粡绾害" v-trim/>
+          <a style="margin-left: 20px; flex-shrink: 0;" href="https://lbs.amap.com/tools/picker" target="_blank">缁忕含搴﹀湪绾挎嬀鍙栧湴鍧�</a>
+        </div>
       </el-form-item>
-      <el-form-item label="缁村害" prop="latitude">
-        <el-input v-model="form.latitude" placeholder="璇疯緭鍏ョ淮搴�" v-trim/>
+      <el-form-item label="鐘舵��" prop="status">
+        <el-switch
+          v-model="form.status"
+          active-color="#13ce66"
+          inactive-color="#ff4949"
+          :active-value="0"
+          :inactive-value="1">
+        </el-switch>
       </el-form-item>
-      <el-form-item label="缂栫爜鏂瑰紡 0鑷姩缂栫爜 1鎵嬪姩缂栫爜" prop="noType">
-        <el-input v-model="form.noType" placeholder="璇疯緭鍏ョ紪鐮佹柟寮� 0鑷姩缂栫爜 1鎵嬪姩缂栫爜" v-trim/>
+      <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>
+            <template slot="append">鎺�</template>
+          </el-input>
+          <span style="margin: 0 20px;">x</span>
+          <el-input v-model="form.columnNum" type="number" placeholder="璇疯緭鍏ュ垪鏁�" v-trim>
+            <template slot="append">鍒�</template>
+          </el-input>
+        </div>
       </el-form-item>
-      <el-form-item label="缂栫爜鍓嶇紑" prop="noPrefix">
-        <el-input v-model="form.noPrefix" placeholder="璇疯緭鍏ョ紪鐮佸墠缂�" v-trim/>
+      <el-form-item label="缂栫爜" prop="noType">
+        <el-radio-group v-model="form.noType" @change="changeNoType">
+          <el-radio :label="0">鑷姩缂栫爜</el-radio>
+          <el-radio :label="1">鎵嬪姩缂栫爜</el-radio>
+        </el-radio-group>
       </el-form-item>
-      <el-form-item label="缂栫爜浣嶆暟" prop="noLength">
-        <el-input v-model="form.noLength" placeholder="璇疯緭鍏ョ紪鐮佷綅鏁�" v-trim/>
+      <el-form-item label="鍓嶇紑" prop="noPrefix" v-if="form.noType === 1">
+        <div style="width: 100%; display: flex; align-items: center;">
+          <el-input style="flex: 1;" v-model="form.noPrefix" placeholder="璇疯緭鍏ユ暟瀛楁垨瀛楁瘝" v-trim/>
+          <span style="margin: 0 20px;">浣嶆暟</span>
+          <el-input style="flex: 1;" v-model="form.noLength" placeholder="璇疯緭鍏ユ暟瀛�" v-trim/>
+          <span style="margin: 0 20px;">璧峰缂栧彿</span>
+          <el-input style="flex: 1;" v-model="form.noIndex" placeholder="璇疯緭鍏ユ暟瀛�" v-trim/>
+        </div>
       </el-form-item>
-      <el-form-item label="璧峰缂栫爜" prop="noIndex">
-        <el-input v-model="form.noIndex" placeholder="璇疯緭鍏ヨ捣濮嬬紪鐮�" v-trim/>
+      <el-form-item label="鎺掑垪椤哄簭" prop="sortType" v-if="form.noType === 1">
+        <el-radio-group v-model="form.sortType">
+          <el-radio :label="0">浠庡乏寰�鍙�</el-radio>
+          <el-radio :label="1">浠庝笂鍚戜笅</el-radio>
+        </el-radio-group>
       </el-form-item>
     </el-form>
   </GlobalWindow>
@@ -94,6 +122,7 @@
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
+import { allList } from '@/api/business/member'
 export default {
   name: 'OperaJkCabinetWindow',
   extends: BaseOpera,
@@ -103,37 +132,65 @@
       // 琛ㄥ崟鏁版嵁
       form: {
         id: null,
-        creator: '',
-        createDate: '',
-        editor: '',
-        editDate: '',
-        isdeleted: '',
-        info: '',
         code: '',
         name: '',
         devId: '',
         serialNo: '',
         linkAddr: '',
-        status: '',
+        status: 0,
         port: '',
-        managerId: '',
+        managerIdList: '',
         useTime: '',
-        doubleAuth: '',
-        authMemberId: '',
+        doubleAuth: 0,
+        authMemberIdList: '',
         rowNum: '',
         columnNum: '',
-        haertTime: '',
         lacation: '',
         longitude: '',
         latitude: '',
-        noType: '',
+        noType: 0,
         noPrefix: '',
         noLength: '',
-        noIndex: ''
+        noIndex: '',
+        sortType: 0
       },
       // 楠岃瘉瑙勫垯
       rules: {
-      }
+        code: [
+          { required: true, message: '璇疯緭鍏ヨ澶囩紪鍙�', trigger: 'blur' }
+        ],
+        name: [
+          { required: true, message: '璇疯緭鍏ヨ澶囧悕绉�', trigger: 'blur' }
+        ],
+        devId: [
+          { required: true, message: '璇疯緭鍏ヨ澶嘔D', trigger: 'blur' }
+        ],
+        linkAddr: [
+          { required: true, message: '璇疯緭鍏ラ�氳鍦板潃', trigger: 'blur' }
+        ],
+        port: [
+          { required: true, message: '璇疯緭鍏ョ鍙e彿', trigger: 'blur' }
+        ],
+        managerIdList: [
+          { required: true, message: '璇烽�夋嫨璁惧绠$悊鍛�', trigger: 'blur' }
+        ],
+        authMemberIdList: [
+          { required: true, message: '璇烽�夋嫨楠岃瘉浜�', trigger: 'blur' }
+        ],
+        rowNum: [
+          { required: true, message: '璇疯緭鍏ユ帓鍒�', trigger: 'blur' }
+        ],
+        noType: [
+          { required: true, message: '璇烽�夋嫨缂栫爜', trigger: 'blur' }
+        ],
+        noPrefix: [
+          { required: true, message: '璇疯緭鍏ュ墠缂�', trigger: 'blur' }
+        ],
+        sortType: [
+          { required: true, message: '璇疯緭鍏ユ帓鍒楅『搴�', trigger: 'blur' }
+        ]
+      },
+      memberList: []
     }
   },
   created () {
@@ -141,6 +198,42 @@
       api: '/business/jkCabinet',
       'field.id': 'id'
     })
+  },
+  methods: {
+    open (title, target) {
+      this.title = title
+      this.loadMember()
+      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]
+        }
+      })
+    },
+    loadMember () {
+      allList({
+        type: 2
+      }).then(res => {
+        this.memberList = res
+      })
+    },
+    changeNoType() {
+      if (this.form.noType === 0) {
+        this.form.noPrefix = ''
+        this.form.noLength = ''
+        this.form.noIndex = ''
+        this.form.sortType = 0
+      }
+    }
   }
 }
 </script>
diff --git a/admin/src/components/business/OperaJkKeysWindow.vue b/admin/src/components/business/OperaJkKeysWindow.vue
index 9fbb1bf..964ba35 100644
--- a/admin/src/components/business/OperaJkKeysWindow.vue
+++ b/admin/src/components/business/OperaJkKeysWindow.vue
@@ -1,46 +1,33 @@
 <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="creator">
-        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉缂栫爜" v-trim/>
-      </el-form-item>
-      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
-        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="鏇存柊浜虹紪鐮�" prop="editor">
-        <el-input v-model="form.editor" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" v-trim/>
-      </el-form-item>
-      <el-form-item label="鏇存柊鏃堕棿" prop="editDate">
-        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="鏄惁鍒犻櫎0鍚� 1鏄�" prop="isdeleted">
-        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀垹闄�0鍚� 1鏄�" v-trim/>
-      </el-form-item>
-      <el-form-item label="澶囨敞" prop="info">
-        <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
-      </el-form-item>
       <el-form-item label="閽ュ寵缂栧彿" prop="code">
         <el-input v-model="form.code" placeholder="璇疯緭鍏ラ挜鍖欑紪鍙�" v-trim/>
       </el-form-item>
-      <el-form-item label="杞︾墝鍙�" prop="carCode">
-        <el-input v-model="form.carCode" placeholder="璇疯緭鍏ヨ溅鐗屽彿" v-trim/>
-      </el-form-item>
-      <el-form-item label="鎵�灞炶溅杈�(鍏宠仈cars)" prop="carId">
-        <el-input v-model="form.carId" placeholder="璇疯緭鍏ユ墍灞炶溅杈�(鍏宠仈cars)" v-trim/>
+      <el-form-item label="鎵�灞炶溅杈�" prop="carId">
+        <el-select v-model="form.carId" placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="item in carAll"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id">
+          </el-option>
+        </el-select>
       </el-form-item>
       <el-form-item label="RFID鏍囩" prop="rfidLable">
         <el-input v-model="form.rfidLable" placeholder="璇疯緭鍏FID鏍囩" v-trim/>
       </el-form-item>
-      <el-form-item label="棰嗗彇瑙勫垯 0闅忚溅 1闅忔淳杞﹀崟" prop="roleType">
-        <el-input v-model="form.roleType" placeholder="璇疯緭鍏ラ鍙栬鍒� 0闅忚溅 1闅忔淳杞﹀崟" v-trim/>
-      </el-form-item>
-      <el-form-item label="鐘舵�� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭" prop="status">
-        <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭" v-trim/>
+      <el-form-item label="棰嗗彇瑙勫垯" prop="roleType">
+        <el-radio-group v-model="form.roleType">
+          <el-radio :label="0">闅忚溅</el-radio>
+          <el-radio :label="1">闅忔淳杞﹀崟</el-radio>
+        </el-radio-group>
       </el-form-item>
     </el-form>
   </GlobalWindow>
@@ -49,6 +36,7 @@
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
+import { allList } from '@/api/business/cars'
 export default {
   name: 'OperaJkKeysWindow',
   extends: BaseOpera,
@@ -58,22 +46,27 @@
       // 琛ㄥ崟鏁版嵁
       form: {
         id: null,
-        creator: '',
-        createDate: '',
-        editor: '',
-        editDate: '',
-        isdeleted: '',
-        info: '',
         code: '',
-        carCode: '',
         carId: '',
         rfidLable: '',
-        roleType: '',
-        status: ''
+        roleType: 0
       },
       // 楠岃瘉瑙勫垯
       rules: {
-      }
+        code: [
+          { required: true, message: '璇疯緭鍏ラ挜鍖欑紪鍙�', trigger: 'blur' }
+        ],
+        carId: [
+          { required: true, message: '璇烽�夋嫨鎵�灞炶溅杈�', trigger: 'blur' }
+        ],
+        rfidLable: [
+          { required: true, message: '璇疯緭鍏FID鏍囩', trigger: 'blur' }
+        ],
+        roleType: [
+          { required: true, message: '璇烽�夋嫨棰嗗彇瑙勫垯', trigger: 'blur' }
+        ]
+      },
+      carAll: []
     }
   },
   created () {
@@ -81,6 +74,15 @@
       api: '/business/jkKeys',
       'field.id': 'id'
     })
+    this.getCars()
+  },
+  methods: {
+    getCars() {
+      allList({ type: 0 })
+        .then(res => {
+          console.log(res)
+        })
+    }
   }
 }
 </script>
diff --git a/admin/src/components/business/cabinetDetails.vue b/admin/src/components/business/cabinetDetails.vue
new file mode 100644
index 0000000..e858232
--- /dev/null
+++ b/admin/src/components/business/cabinetDetails.vue
@@ -0,0 +1,152 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :visible.sync="visible"
+        :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>
+            <el-form-item label="鐘舵��" prop="status">
+                <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨" @change="getList">
+                    <el-option label="鍏ㄩ儴" value=""></el-option>
+                    <el-option label="鍚敤" :value="0"></el-option>
+                    <el-option label="绂佺敤" :value="1"></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="鏌滄牸鐘舵��" prop="bindStatus">
+                <el-select v-model="searchForm.bindStatus" placeholder="璇烽�夋嫨" @change="getList">
+                    <el-option label="鍏ㄩ儴" value=""></el-option>
+                    <el-option label="鏈粦瀹�" :value="0"></el-option>
+                    <el-option label="宸茬粦瀹�" :value="1"></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item>
+                <el-button type="primary" @click="getList">鎼滅储</el-button>
+            </el-form-item>
+            <el-form-item>
+                <el-button @click="reset">閲嶇疆</el-button>
+            </el-form-item>
+        </el-form>
+        <ul class="toolbar">
+            <li><el-button type="primary">鎵归噺瑙g粦</el-button></li>
+        </ul>
+        <el-table
+            v-loading="loading"
+            :data="list"
+            stripe
+        >
+            <el-table-column prop="code" label="鏌滄牸缂栧彿" min-width="100px"></el-table-column>
+            <el-table-column prop="cabinetName" label="鎵�灞為挜鍖欐煖" min-width="100px"></el-table-column>
+            <el-table-column prop="keyId" label="缁戝畾閽ュ寵" min-width="100px"></el-table-column>
+            <el-table-column label="鐘舵��" min-width="100px">
+                <template slot-scope="{row}">
+                    <el-switch
+                        v-model="row.status"
+                        active-color="#13ce66"
+                        inactive-color="#ff4949"
+                        :active-value="0"
+                        :inactive-value="1">
+                    </el-switch>
+                </template>
+            </el-table-column>
+            <el-table-column label="杩愯鐘舵��" min-width="100px">
+                <template slot-scope="{row}">
+                    <el-link type="success" v-if="row.workingStatus === 0">姝e父</el-link>
+                    <el-link type="warning" v-if="row.workingStatus === 1">鏁呴殰</el-link>
+                </template>
+            </el-table-column>
+            <el-table-column label="鏌滄牸鐘舵��" min-width="100px">
+                <template slot-scope="{row}">
+                    <el-link type="warning" v-if="row.bindStatus === 0">鏈粦瀹�</el-link>
+                    <el-link type="success" v-if="row.bindStatus === 1">宸茬粦瀹�</el-link>
+                </template>
+            </el-table-column>
+            <el-table-column
+                label="鎿嶄綔"
+                min-width="100"
+                fixed="right"
+            >
+                <template slot-scope="{row}">
+                    <el-button type="text" v-if="row.bindStatus === 0">缁戝畾</el-button>
+                    <el-button type="text" v-if="row.bindStatus === 1">瑙g粦</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div style="width: 100%; text-align: right; margin-top: 20px">
+            <el-pagination
+                @current-change="handleCurrentChange"
+                :current-page="page"
+                :page-size="10"
+                layout="total, prev, pager, next, jumper"
+                :total="total">
+            </el-pagination>
+        </div>
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import { fetchList } from '@/api/business/jkCabinetGrid'
+  export default {
+    name: 'cabinetDetails',
+    extends: BaseOpera,
+    components: { GlobalWindow },
+    data () {
+      return {
+        id: null,
+        info: null,
+        searchForm: {
+          keyId: '',
+          status: '',
+          bindStatus: ''
+        },
+        list: [],
+        page: 1,
+        total: 0,
+        loading: false
+      }
+    },
+    methods: {
+      open (title, id) {
+        this.title = title
+        this.id = id
+        this.getList()
+        this.visible = true
+      },
+      handleCurrentChange(e) {
+        this.page = e
+        this.getList()
+      },
+      reset() {
+        this.searchForm.keyId = ''
+        this.searchForm.status = ''
+        this.searchForm.workingStatus = ''
+        this.page = 1
+        this.getList()
+      },
+      getList() {
+        this.loading = true
+        fetchList({
+          capacity: 10,
+          page: this.page,
+          model: {
+            cabinetId: this.id,
+            keyId: this.searchForm.keyId,
+            status: this.searchForm.status,
+            workingStatus: this.searchForm.workingStatus
+          }
+        }).then(res => {
+          console.log(res)
+          this.list = res.records
+          this.total = res.total
+        }).finally(() => {
+          this.loading = false
+        })
+      }
+    }
+  }
+</script>
diff --git a/admin/src/views/business/jkCabinet.vue b/admin/src/views/business/jkCabinet.vue
index 6feef3f..e4c7b55 100644
--- a/admin/src/views/business/jkCabinet.vue
+++ b/admin/src/views/business/jkCabinet.vue
@@ -2,146 +2,82 @@
   <TableLayout :permissions="['business:jkcabinet:query']">
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      <el-form-item label="涓婚敭" prop="id">
-        <el-input v-model="searchForm.id" placeholder="璇疯緭鍏ヤ富閿�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鍒涘缓浜虹紪鐮�" prop="creator">
-        <el-input v-model="searchForm.creator" placeholder="璇疯緭鍏ュ垱寤轰汉缂栫爜" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
-        <el-date-picker v-model="searchForm.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" @change="search"/>
-      </el-form-item>
-      <el-form-item label="鏇存柊浜虹紪鐮�" prop="editor">
-        <el-input v-model="searchForm.editor" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鏇存柊鏃堕棿" prop="editDate">
-        <el-date-picker v-model="searchForm.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�" @change="search"/>
-      </el-form-item>
-      <el-form-item label="鏄惁鍒犻櫎0鍚� 1鏄�" prop="isdeleted">
-        <el-input v-model="searchForm.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀垹闄�0鍚� 1鏄�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="澶囨敞" prop="info">
-        <el-input v-model="searchForm.info" placeholder="璇疯緭鍏ュ娉�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
       <el-form-item label="璁惧缂栧彿" prop="code">
         <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ヨ澶囩紪鍙�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="璁惧鍚嶇О" prop="name">
         <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ヨ澶囧悕绉�" @keypress.enter.native="search"></el-input>
       </el-form-item>
-      <el-form-item label="璁惧ID" prop="devId">
-        <el-input v-model="searchForm.devId" placeholder="璇疯緭鍏ヨ澶嘔D" @keypress.enter.native="search"></el-input>
+      <el-form-item label="杩愯鐘舵��" prop="rumStatus">
+        <el-select v-model="searchForm.rumStatus" placeholder="璇烽�夋嫨" @change="search">
+          <el-option label="鍏ㄩ儴" value=""></el-option>
+          <el-option label="鍦ㄧ嚎" :value="0"></el-option>
+          <el-option label="绂荤嚎" :value="1"></el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="搴忓垪鍙�" prop="serialNo">
-        <el-input v-model="searchForm.serialNo" placeholder="璇疯緭鍏ュ簭鍒楀彿" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="閫氳鍦板潃" prop="linkAddr">
-        <el-input v-model="searchForm.linkAddr" placeholder="璇疯緭鍏ラ�氳鍦板潃" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鐘舵�� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭" prop="status">
-        <el-input v-model="searchForm.status" placeholder="璇疯緭鍏ョ姸鎬� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="绔彛" prop="port">
-        <el-input v-model="searchForm.port" placeholder="璇疯緭鍏ョ鍙�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="璁惧绠$悊鍛樼紪鐮侊紙鍏宠仈member)" prop="managerId">
-        <el-input v-model="searchForm.managerId" placeholder="璇疯緭鍏ヨ澶囩鐞嗗憳缂栫爜锛堝叧鑱攎ember)" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="浣跨敤鏃堕暱(绉�)" prop="useTime">
-        <el-input v-model="searchForm.useTime" placeholder="璇疯緭鍏ヤ娇鐢ㄦ椂闀�(绉�)" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鏄惁鍙岄噸楠岃瘉 0鍚� 1鏄�" prop="doubleAuth">
-        <el-input v-model="searchForm.doubleAuth" placeholder="璇疯緭鍏ユ槸鍚﹀弻閲嶉獙璇� 0鍚� 1鏄�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="楠岃瘉浜虹紪鐮侊紙鍏宠仈member)" prop="authMemberId">
-        <el-input v-model="searchForm.authMemberId" placeholder="璇疯緭鍏ラ獙璇佷汉缂栫爜锛堝叧鑱攎ember)" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鎺掓暟" prop="rowNum">
-        <el-input v-model="searchForm.rowNum" placeholder="璇疯緭鍏ユ帓鏁�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鍒楁暟" prop="columnNum">
-        <el-input v-model="searchForm.columnNum" placeholder="璇疯緭鍏ュ垪鏁�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鏈�鍚庨�氳鏃堕棿" prop="haertTime">
-        <el-date-picker v-model="searchForm.haertTime" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ渶鍚庨�氳鏃堕棿" @change="search"/>
-      </el-form-item>
-      <el-form-item label="鎵�鍦ㄤ綅缃�" prop="lacation">
-        <el-input v-model="searchForm.lacation" placeholder="璇疯緭鍏ユ墍鍦ㄤ綅缃�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="缁忓害" prop="longitude">
-        <el-input v-model="searchForm.longitude" placeholder="璇疯緭鍏ョ粡搴�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="缁村害" prop="latitude">
-        <el-input v-model="searchForm.latitude" placeholder="璇疯緭鍏ョ淮搴�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="缂栫爜鏂瑰紡 0鑷姩缂栫爜 1鎵嬪姩缂栫爜" prop="noType">
-        <el-input v-model="searchForm.noType" placeholder="璇疯緭鍏ョ紪鐮佹柟寮� 0鑷姩缂栫爜 1鎵嬪姩缂栫爜" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="缂栫爜鍓嶇紑" prop="noPrefix">
-        <el-input v-model="searchForm.noPrefix" placeholder="璇疯緭鍏ョ紪鐮佸墠缂�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="缂栫爜浣嶆暟" prop="noLength">
-        <el-input v-model="searchForm.noLength" placeholder="璇疯緭鍏ョ紪鐮佷綅鏁�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="璧峰缂栫爜" prop="noIndex">
-        <el-input v-model="searchForm.noIndex" placeholder="璇疯緭鍏ヨ捣濮嬬紪鐮�" @keypress.enter.native="search"></el-input>
+      <el-form-item label="鐘舵��" prop="status">
+        <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨" @change="search">
+          <el-option label="鍏ㄩ儴" value=""></el-option>
+          <el-option label="鍚敤" :value="1"></el-option>
+          <el-option label="绂佺敤" :value="0"></el-option>
+        </el-select>
       </el-form-item>
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:jkcabinet:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
         <el-button @click="reset">閲嶇疆</el-button>
       </section>
     </el-form>
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <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 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>
       </ul>
       <el-table
+        :height="tableHeightNew"
         v-loading="isWorking.search"
         :data="tableData.list"
         stripe
-        @selection-change="handleSelectionChange"
       >
-        <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="id" label="涓婚敭" min-width="100px"></el-table-column>
-        <el-table-column prop="creator" label="鍒涘缓浜虹紪鐮�" min-width="100px"></el-table-column>
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
-        <el-table-column prop="editor" label="鏇存柊浜虹紪鐮�" min-width="100px"></el-table-column>
-        <el-table-column prop="editDate" label="鏇存柊鏃堕棿" min-width="100px"></el-table-column>
-        <el-table-column prop="isdeleted" label="鏄惁鍒犻櫎0鍚� 1鏄�" min-width="100px"></el-table-column>
-        <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column>
         <el-table-column prop="code" label="璁惧缂栧彿" min-width="100px"></el-table-column>
         <el-table-column prop="name" label="璁惧鍚嶇О" min-width="100px"></el-table-column>
         <el-table-column prop="devId" label="璁惧ID" min-width="100px"></el-table-column>
-        <el-table-column prop="serialNo" label="搴忓垪鍙�" min-width="100px"></el-table-column>
         <el-table-column prop="linkAddr" label="閫氳鍦板潃" min-width="100px"></el-table-column>
-        <el-table-column prop="status" label="鐘舵�� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭" min-width="100px"></el-table-column>
-        <el-table-column prop="port" label="绔彛" min-width="100px"></el-table-column>
-        <el-table-column prop="managerId" label="璁惧绠$悊鍛樼紪鐮侊紙鍏宠仈member)" min-width="100px"></el-table-column>
-        <el-table-column prop="useTime" label="浣跨敤鏃堕暱(绉�)" min-width="100px"></el-table-column>
-        <el-table-column prop="doubleAuth" label="鏄惁鍙岄噸楠岃瘉 0鍚� 1鏄�" min-width="100px"></el-table-column>
-        <el-table-column prop="authMemberId" label="楠岃瘉浜虹紪鐮侊紙鍏宠仈member)" min-width="100px"></el-table-column>
-        <el-table-column prop="rowNum" label="鎺掓暟" min-width="100px"></el-table-column>
-        <el-table-column prop="columnNum" label="鍒楁暟" min-width="100px"></el-table-column>
-        <el-table-column prop="haertTime" label="鏈�鍚庨�氳鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="port" label="绔彛鍙�" min-width="100px"></el-table-column>
         <el-table-column prop="lacation" label="鎵�鍦ㄤ綅缃�" min-width="100px"></el-table-column>
-        <el-table-column prop="longitude" label="缁忓害" min-width="100px"></el-table-column>
-        <el-table-column prop="latitude" label="缁村害" min-width="100px"></el-table-column>
-        <el-table-column prop="noType" label="缂栫爜鏂瑰紡 0鑷姩缂栫爜 1鎵嬪姩缂栫爜" min-width="100px"></el-table-column>
-        <el-table-column prop="noPrefix" label="缂栫爜鍓嶇紑" min-width="100px"></el-table-column>
-        <el-table-column prop="noLength" label="缂栫爜浣嶆暟" min-width="100px"></el-table-column>
-        <el-table-column prop="noIndex" label="璧峰缂栫爜" min-width="100px"></el-table-column>
+        <el-table-column label="鏌滄牸鏁伴噺" min-width="100px">
+          <template slot-scope="{row}">
+            <el-button @click="$refs.cabinetDetails.open(row.name + '-鏌滄牸淇℃伅', row.id)">{{row.gridNum}}</el-button>
+          </template>
+        </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>
+          </template>
+        </el-table-column>
+        <el-table-column label="鐘舵��" min-width="100px">
+          <template slot-scope="{row}">
+            <el-switch
+              v-model="row.status"
+              active-color="#13ce66"
+              inactive-color="#ff4949"
+              :active-value="0"
+              :inactive-value="1">
+            </el-switch>
+          </template>
+        </el-table-column>
         <el-table-column
           v-if="containPermissions(['business:jkcabinet:update', 'business:jkcabinet:delete'])"
           label="鎿嶄綔"
-          min-width="120"
+          min-width="200"
           fixed="right"
         >
           <template slot-scope="{row}">
-            <el-button type="text" @click="$refs.operaJkCabinetWindow.open('缂栬緫閽ュ寵鏌滃熀鏈俊鎭〃', row)" icon="el-icon-edit" v-permissions="['business:jkcabinet:update']">缂栬緫</el-button>
-            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:jkcabinet:delete']">鍒犻櫎</el-button>
+            <el-button type="text">鏃ュ織</el-button>
+            <el-button type="text">缁戝畾閽ュ寵</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>
         </el-table-column>
       </el-table>
@@ -154,6 +90,8 @@
     </template>
     <!-- 鏂板缓/淇敼 -->
     <OperaJkCabinetWindow ref="operaJkCabinetWindow" @success="handlePageChange"/>
+    <!-- 鏌滃瓙璇︽儏 -->
+    <CabinetDetails ref="cabinetDetails" />
   </TableLayout>
 </template>
 
@@ -162,42 +100,19 @@
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
 import OperaJkCabinetWindow from '@/components/business/OperaJkCabinetWindow'
+import CabinetDetails from '@/components/business/cabinetDetails'
 export default {
   name: 'JkCabinet',
   extends: BaseTable,
-  components: { TableLayout, Pagination, OperaJkCabinetWindow },
+  components: { TableLayout, Pagination, OperaJkCabinetWindow, CabinetDetails },
   data () {
     return {
       // 鎼滅储
       searchForm: {
-        id: '',
-        creator: '',
-        createDate: '',
-        editor: '',
-        editDate: '',
-        isdeleted: '',
-        info: '',
         code: '',
         name: '',
-        devId: '',
-        serialNo: '',
-        linkAddr: '',
         status: '',
-        port: '',
-        managerId: '',
-        useTime: '',
-        doubleAuth: '',
-        authMemberId: '',
-        rowNum: '',
-        columnNum: '',
-        haertTime: '',
-        lacation: '',
-        longitude: '',
-        latitude: '',
-        noType: '',
-        noPrefix: '',
-        noLength: '',
-        noIndex: ''
+        rumStatus: ''
       }
     }
   },
diff --git a/admin/src/views/business/jkKeys.vue b/admin/src/views/business/jkKeys.vue
index dd82388..6762ccc 100644
--- a/admin/src/views/business/jkKeys.vue
+++ b/admin/src/views/business/jkKeys.vue
@@ -2,77 +2,59 @@
   <TableLayout :permissions="['business:jkkeys:query']">
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      <el-form-item label="涓婚敭" prop="id">
-        <el-input v-model="searchForm.id" placeholder="璇疯緭鍏ヤ富閿�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鍒涘缓浜虹紪鐮�" prop="creator">
-        <el-input v-model="searchForm.creator" placeholder="璇疯緭鍏ュ垱寤轰汉缂栫爜" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
-        <el-date-picker v-model="searchForm.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" @change="search"/>
-      </el-form-item>
-      <el-form-item label="鏇存柊浜虹紪鐮�" prop="editor">
-        <el-input v-model="searchForm.editor" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鏇存柊鏃堕棿" prop="editDate">
-        <el-date-picker v-model="searchForm.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�" @change="search"/>
-      </el-form-item>
-      <el-form-item label="鏄惁鍒犻櫎0鍚� 1鏄�" prop="isdeleted">
-        <el-input v-model="searchForm.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀垹闄�0鍚� 1鏄�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="澶囨敞" prop="info">
-        <el-input v-model="searchForm.info" placeholder="璇疯緭鍏ュ娉�" @keypress.enter.native="search"></el-input>
-      </el-form-item>
       <el-form-item label="閽ュ寵缂栧彿" prop="code">
         <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ラ挜鍖欑紪鍙�" @keypress.enter.native="search"></el-input>
       </el-form-item>
-      <el-form-item label="杞︾墝鍙�" prop="carCode">
-        <el-input v-model="searchForm.carCode" placeholder="璇疯緭鍏ヨ溅鐗屽彿" @keypress.enter.native="search"></el-input>
+      <el-form-item label="鎵�灞炶溅杈�" prop="carCode">
+        <el-input v-model="searchForm.carCode" placeholder="璇疯緭鍏ユ墍灞炶溅杈�" @keypress.enter.native="search"></el-input>
       </el-form-item>
-      <el-form-item label="鎵�灞炶溅杈�(鍏宠仈cars)" prop="carId">
-        <el-input v-model="searchForm.carId" placeholder="璇疯緭鍏ユ墍灞炶溅杈�(鍏宠仈cars)" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="RFID鏍囩" prop="rfidLable">
-        <el-input v-model="searchForm.rfidLable" placeholder="璇疯緭鍏FID鏍囩" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="棰嗗彇瑙勫垯 0闅忚溅 1闅忔淳杞﹀崟" prop="roleType">
-        <el-input v-model="searchForm.roleType" placeholder="璇疯緭鍏ラ鍙栬鍒� 0闅忚溅 1闅忔淳杞﹀崟" @keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item label="鐘舵�� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭" prop="status">
-        <el-input v-model="searchForm.status" placeholder="璇疯緭鍏ョ姸鎬� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭" @keypress.enter.native="search"></el-input>
+      <el-form-item label="鐘舵��" prop="status">
+        <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨" @change="search">
+          <el-option label="鍏ㄩ儴" value=""></el-option>
+          <el-option label="缁翠慨淇濆吇" :value="3"></el-option>
+          <el-option label="鍊熷嚭" :value="2"></el-option>
+          <el-option label="鍦ㄤ綅" :value="1"></el-option>
+          <el-option label="鏈粦瀹�" :value="0"></el-option>
+        </el-select>
       </el-form-item>
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:jkkeys:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
         <el-button @click="reset">閲嶇疆</el-button>
       </section>
     </el-form>
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
       <ul class="toolbar" v-permissions="['business:jkkeys:create', 'business:jkkeys:delete']">
-        <li><el-button type="primary" @click="$refs.operaJkKeysWindow.open('鏂板缓閽ュ寵鍩烘湰淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:jkkeys:create']">鏂板缓</el-button></li>
-        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:jkkeys:delete']">鍒犻櫎</el-button></li>
+        <li><el-button type="primary" @click="$refs.operaJkKeysWindow.open('鏂板缓閽ュ寵淇℃伅')" icon="el-icon-plus" v-permissions="['business:jkkeys:create']">鏂板缓</el-button></li>
+<!--        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:jkkeys:delete']">鍒犻櫎</el-button></li>-->
       </ul>
       <el-table
+        :height="tableHeightNew"
         v-loading="isWorking.search"
         :data="tableData.list"
         stripe
         @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="id" label="涓婚敭" min-width="100px"></el-table-column>
-        <el-table-column prop="creator" label="鍒涘缓浜虹紪鐮�" min-width="100px"></el-table-column>
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
-        <el-table-column prop="editor" label="鏇存柊浜虹紪鐮�" min-width="100px"></el-table-column>
-        <el-table-column prop="editDate" label="鏇存柊鏃堕棿" min-width="100px"></el-table-column>
-        <el-table-column prop="isdeleted" label="鏄惁鍒犻櫎0鍚� 1鏄�" min-width="100px"></el-table-column>
-        <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column>
         <el-table-column prop="code" label="閽ュ寵缂栧彿" min-width="100px"></el-table-column>
-        <el-table-column prop="carCode" label="杞︾墝鍙�" min-width="100px"></el-table-column>
-        <el-table-column prop="carId" label="鎵�灞炶溅杈�(鍏宠仈cars)" min-width="100px"></el-table-column>
+        <el-table-column prop="carName" label="鎵�灞炶溅杈�" min-width="100px"></el-table-column>
         <el-table-column prop="rfidLable" label="RFID鏍囩" min-width="100px"></el-table-column>
-        <el-table-column prop="roleType" label="棰嗗彇瑙勫垯 0闅忚溅 1闅忔淳杞﹀崟" min-width="100px"></el-table-column>
-        <el-table-column prop="status" label="鐘舵�� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭" min-width="100px"></el-table-column>
+        <el-table-column prop="rfidLable" label="缁戝畾閽ュ寵鏌�" min-width="100px"></el-table-column>
+        <el-table-column prop="rfidLable" label="瀛樻斁浣嶇疆" min-width="100px"></el-table-column>
+        <el-table-column label="缁戝畾鐘舵��" min-width="100px">
+          <template slot-scope="{row}">
+            <span v-if="row.isBinding === 0">鏈粦瀹�</span>
+            <span v-if="row.isBinding === 1">宸茬粦瀹�</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="閽ュ寵鐘舵��" min-width="100px">
+          <template slot-scope="{row}">
+            <span v-if="row.status === 0">鏈粦瀹�</span>
+            <span v-if="row.status === 1">鍦ㄤ綅</span>
+            <span v-if="row.status === 2">鍊熷嚭</span>
+            <span v-if="row.status === 3">缁翠慨淇濆吇</span>
+          </template>
+        </el-table-column>
         <el-table-column
           v-if="containPermissions(['business:jkkeys:update', 'business:jkkeys:delete'])"
           label="鎿嶄綔"
@@ -80,8 +62,9 @@
           fixed="right"
         >
           <template slot-scope="{row}">
-            <el-button type="text" @click="$refs.operaJkKeysWindow.open('缂栬緫閽ュ寵鍩烘湰淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:jkkeys:update']">缂栬緫</el-button>
-            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:jkkeys:delete']">鍒犻櫎</el-button>
+            <el-button type="text" @click="$refs.borrowingAndReturningRecords.open('鍊熻繕璁板綍', row)">棰嗗彇璁板綍</el-button>
+            <el-button type="text" @click="$refs.operaJkKeysWindow.open('缂栬緫閽ュ寵鍩烘湰淇℃伅琛�', row)" v-permissions="['business:jkkeys:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" v-permissions="['business:jkkeys:delete']">鍒犻櫎</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -94,6 +77,8 @@
     </template>
     <!-- 鏂板缓/淇敼 -->
     <OperaJkKeysWindow ref="operaJkKeysWindow" @success="handlePageChange"/>
+    <!-- 鍊熻繕璁板綍 -->
+    <BorrowingAndReturningRecords ref="borrowingAndReturningRecords"/>
   </TableLayout>
 </template>
 
@@ -102,26 +87,17 @@
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
 import OperaJkKeysWindow from '@/components/business/OperaJkKeysWindow'
+import BorrowingAndReturningRecords from '@/components/business/BorrowingAndReturningRecords'
 export default {
   name: 'JkKeys',
   extends: BaseTable,
-  components: { TableLayout, Pagination, OperaJkKeysWindow },
+  components: { TableLayout, Pagination, OperaJkKeysWindow, BorrowingAndReturningRecords },
   data () {
     return {
       // 鎼滅储
       searchForm: {
-        id: '',
-        creator: '',
-        createDate: '',
-        editor: '',
-        editDate: '',
-        isdeleted: '',
-        info: '',
         code: '',
         carCode: '',
-        carId: '',
-        rfidLable: '',
-        roleType: '',
         status: ''
       }
     }

--
Gitblit v1.9.3