MrShi
6 天以前 3a154bdb0a5aaa2c0ac3eac95a6ba747068bd454
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="请输入设备ID" 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="请输入端口号" 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: '请输入设备ID', trigger: 'blur' }
        ],
        linkAddr: [
          { required: true, message: '请输入通讯地址', trigger: 'blur' }
        ],
        port: [
          { required: true, message: '请输入端口号', 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>