From 3a154bdb0a5aaa2c0ac3eac95a6ba747068bd454 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期二, 13 一月 2026 10:00:37 +0800
Subject: [PATCH] 优化

---
 admin/src/components/business/OperaJkCabinetWindow.vue |  327 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 327 insertions(+), 0 deletions(-)

diff --git a/admin/src/components/business/OperaJkCabinetWindow.vue b/admin/src/components/business/OperaJkCabinetWindow.vue
new file mode 100644
index 0000000..5372648
--- /dev/null
+++ b/admin/src/components/business/OperaJkCabinetWindow.vue
@@ -0,0 +1,327 @@
+<template>
+  <GlobalWindow
+    width="50%"
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <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>
+      <el-form-item label="璁惧鍚嶇О" prop="name">
+        <el-input v-model="form.name" placeholder="璇疯緭鍏ヨ澶囧悕绉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="璁惧ID" prop="devId">
+        <el-input v-model="form.devId" placeholder="璇疯緭鍏ヨ澶嘔D" v-trim/>
+      </el-form-item>
+      <el-form-item label="搴忓垪鍙�" prop="serialNo">
+        <el-input v-model="form.serialNo" placeholder="璇疯緭鍏ュ簭鍒楀彿" v-trim/>
+      </el-form-item>
+      <el-form-item label="閫氳鍦板潃" prop="linkAddr">
+        <el-input v-model="form.linkAddr" placeholder="璇疯緭鍏ラ�氳鍦板潃" v-trim/>
+      </el-form-item>
+      <el-form-item label="绔彛鍙�" prop="port">
+        <el-input v-model="form.port" placeholder="璇疯緭鍏ョ鍙e彿" v-trim/>
+      </el-form-item>
+      <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="Number(item.id)">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <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="doubleAuth">
+        <div style="width: 100%; display: flex; align-items: center;">
+          <el-switch
+            v-model="form.alcoholStatus"
+            active-color="#13ce66"
+            inactive-color="#ff4949"
+            :active-value="0"
+            :inactive-value="1">
+          </el-switch>
+          <span style="margin-left: 20px; color: #999999;">寮�鍚悗锛岄渶瑕侀厭绮炬娴嬮�氳繃鍚庯紝鎵嶈兘寮�闂�</span>
+        </div>
+      </el-form-item>
+      <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="楠岃瘉浜�" 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="Number(item.id)">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鎵�鍦ㄤ綅缃�" prop="location">
+        <el-input v-model="form.location" placeholder="璇疯緭鍏ユ墍鍦ㄤ綅缃�" v-trim/>
+      </el-form-item>
+      <el-form-item label="缁忕含搴�" prop="jwd">
+        <div style="width: 100%; display: flex; align-items: center;">
+          <el-input v-model="form.jwd" 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="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="婵�娲绘枃浠�" prop="activateFile">
+        <el-upload
+          accept=".zip"
+          class="upload-demo"
+          :action="base"
+          :limit="1"
+          :data="{ folder: 'activate' }"
+          :file-list="fileList"
+          :on-success="getFile"
+          :on-remove="removeFile">
+          <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
+          <div slot="tip" class="el-upload__tip">鍙兘涓婁紶zip鏂囦欢</div>
+        </el-upload>
+      </el-form-item>
+      <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" :disabled="form.id ? true : false" type="number" placeholder="璇疯緭鍏ユ帓鏁�" v-trim>
+            <template slot="append">鎺�</template>
+          </el-input>
+          <span style="margin: 0 20px;">x</span>
+          <el-input v-model="form.columnNum" :disabled="form.id ? true : false" type="number" placeholder="璇疯緭鍏ュ垪鏁�" v-trim>
+            <template slot="append">鍒�</template>
+          </el-input>
+        </div>
+      </el-form-item>
+      <el-form-item label="缂栫爜" prop="noType">
+        <el-radio-group v-model="form.noType" :disabled="form.id ? true : false" @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="noPrefix" v-if="form.noType === 1">
+        <div style="width: 100%; display: flex; align-items: center;">
+          <el-input style="flex: 1;" v-model="form.noPrefix" :disabled="form.id ? true : false" placeholder="璇疯緭鍏ユ暟瀛楁垨瀛楁瘝" v-trim/>
+          <span style="margin: 0 20px;">浣嶆暟</span>
+          <el-input style="flex: 1;" v-model="form.noLength" :disabled="form.id ? true : false" placeholder="璇疯緭鍏ユ暟瀛�" v-trim/>
+          <span style="margin: 0 20px;">璧峰缂栧彿</span>
+          <el-input style="flex: 1;" v-model="form.noIndex" :disabled="form.id ? true : false" placeholder="璇疯緭鍏ユ暟瀛�" v-trim/>
+        </div>
+      </el-form-item>
+      <el-form-item label="鎺掑垪椤哄簭" prop="sortType" v-if="form.noType === 1">
+        <el-radio-group v-model="form.sortType" :disabled="form.id ? true : false">
+          <el-radio :label="0">浠庡乏寰�鍙�</el-radio>
+          <el-radio :label="1">浠庝笂鍚戜笅</el-radio>
+        </el-radio-group>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { allList } from '@/api/business/member'
+import { getInfoById } from '@/api/business/jkCabinet'
+export default {
+  name: 'OperaJkCabinetWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    var validate = (rule, value, callback) => {
+      if (this.form.noType === 1 && this.form.noLength === '' || this.form.noIndex === '') {
+        callback(new Error('浣嶆暟鍜岃捣濮嬬紪鍙蜂笉鑳戒负绌猴紒'));
+      } else {
+        callback();
+      }
+    };
+    return {
+      base: process.env.VUE_APP_API_PREFIX + 'visitsAdmin/cloudService/public/upload',
+      fileList: [],
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        code: '',
+        name: '',
+        devId: '',
+        serialNo: '',
+        linkAddr: '',
+        status: 0,
+        port: '',
+        managerIdList: '',
+        location: '',
+        useTime: '',
+        doubleAuth: 0,
+        authMemberIdList: '',
+        rowNum: '',
+        columnNum: '',
+        jwd: '',
+        latitude: '',
+        noType: 0,
+        noPrefix: '',
+        noLength: '',
+        noIndex: '',
+        sortType: 0,
+        activateFile: null,
+        alcoholStatus: 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, validator: validate, trigger: 'blur' }
+        ],
+        sortType: [
+          { required: true, message: '璇疯緭鍏ユ帓鍒楅『搴�', trigger: 'blur' }
+        ]
+      },
+      memberList: []
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/jkCabinet',
+      'field.id': 'id'
+    })
+  },
+  methods: {
+    getFile(response) {
+      this.fileList = [{
+        name: response.data.originname,
+        fileurl: response.data.imgaddr,
+        ...response.data
+      }]
+      this.form.activateFile = {
+        name: response.data.originname,
+        fileurl: response.data.imgaddr,
+        ...response.data
+      }
+    },
+    removeFile() {
+      this.form.activateFile = null
+      this.fileList = []
+    },
+    open (title, target) {
+      this.title = title
+      this.loadMember()
+      if (target) {
+        getInfoById(target.id)
+          .then(res => {
+            res.managerIdList = res.managerIdList.map(item => Number(item))
+            res.authMemberIdList = res.authMemberIdList.map(item => Number(item))
+            this.$nextTick(() => {
+              for (const key in this.form) {
+                this.form[key] = res[key]
+              }
+              if (res.activateFile) {
+                this.fileList = [{
+                  name: res.activateFile.name,
+                  url: res.activateFile.fileurlFull,
+                  ...res.activateFile
+                }]
+              }
+              this.visible = true
+            })
+          })
+      } else {
+        this.$nextTick(() => {
+          this.form = {
+            id: null,
+            code: '',
+            name: '',
+            devId: '',
+            serialNo: '',
+            linkAddr: '',
+            status: 0,
+            port: '',
+            managerIdList: '',
+            useTime: '',
+            doubleAuth: 0,
+            authMemberIdList: '',
+            rowNum: '',
+            columnNum: '',
+            jwd: '',
+            latitude: '',
+            noType: 0,
+            noPrefix: '',
+            noLength: '',
+            noIndex: '',
+            sortType: 0
+          }
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+        })
+        this.visible = true
+      }
+    },
+    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>

--
Gitblit v1.9.3