|  |  |  | 
|---|
|  |  |  | <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> | 
|---|
|  |  |  | 
|---|
|  |  |  | <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="请输入端口号" 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="Number(item.id)"> | 
|---|
|  |  |  | </el-option> | 
|---|
|  |  |  | </el-select> | 
|---|
|  |  |  | </el-form-item> | 
|---|
|  |  |  | <el-form-item label="设备管理员编码(关联member)" prop="managerId"> | 
|---|
|  |  |  | <el-input v-model="form.managerId" placeholder="请输入设备管理员编码(关联member)" 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 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="验证人编码(关联member)" prop="authMemberId"> | 
|---|
|  |  |  | <el-input v-model="form.authMemberId" placeholder="请输入验证人编码(关联member)" v-trim/> | 
|---|
|  |  |  | <el-form-item label="所在位置" prop="location"> | 
|---|
|  |  |  | <el-input v-model="form.location" placeholder="请输入所在位置" v-trim/> | 
|---|
|  |  |  | </el-form-item> | 
|---|
|  |  |  | <el-form-item label="排数" prop="rowNum"> | 
|---|
|  |  |  | <el-input v-model="form.rowNum" placeholder="请输入排数" v-trim/> | 
|---|
|  |  |  | <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="columnNum"> | 
|---|
|  |  |  | <el-input v-model="form.columnNum" 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="最后通讯时间" prop="haertTime"> | 
|---|
|  |  |  | <el-date-picker v-model="form.haertTime" value-format="yyyy-MM-dd" placeholder="请输入最后通讯时间"></el-date-picker> | 
|---|
|  |  |  | <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="lacation"> | 
|---|
|  |  |  | <el-input v-model="form.lacation" placeholder="请输入所在位置" v-trim/> | 
|---|
|  |  |  | <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="longitude"> | 
|---|
|  |  |  | <el-input v-model="form.longitude" 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" :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="latitude"> | 
|---|
|  |  |  | <el-input v-model="form.latitude" placeholder="请输入维度" v-trim/> | 
|---|
|  |  |  | </el-form-item> | 
|---|
|  |  |  | <el-form-item label="编码方式 0自动编码 1手动编码" prop="noType"> | 
|---|
|  |  |  | <el-input v-model="form.noType" placeholder="请输入编码方式 0自动编码 1手动编码" v-trim/> | 
|---|
|  |  |  | </el-form-item> | 
|---|
|  |  |  | <el-form-item label="编码前缀" prop="noPrefix"> | 
|---|
|  |  |  | <el-input v-model="form.noPrefix" placeholder="请输入编码前缀" v-trim/> | 
|---|
|  |  |  | </el-form-item> | 
|---|
|  |  |  | <el-form-item label="编码位数" prop="noLength"> | 
|---|
|  |  |  | <el-input v-model="form.noLength" placeholder="请输入编码位数" v-trim/> | 
|---|
|  |  |  | </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" :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> | 
|---|
|  |  |  | 
|---|
|  |  |  | <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 { | 
|---|
|  |  |  | // 表单数据 | 
|---|
|  |  |  | form: { | 
|---|
|  |  |  | id: null, | 
|---|
|  |  |  | creator: '', | 
|---|
|  |  |  | createDate: '', | 
|---|
|  |  |  | editor: '', | 
|---|
|  |  |  | editDate: '', | 
|---|
|  |  |  | isdeleted: '', | 
|---|
|  |  |  | info: '', | 
|---|
|  |  |  | code: '', | 
|---|
|  |  |  | name: '', | 
|---|
|  |  |  | devId: '', | 
|---|
|  |  |  | serialNo: '', | 
|---|
|  |  |  | linkAddr: '', | 
|---|
|  |  |  | status: '', | 
|---|
|  |  |  | status: 0, | 
|---|
|  |  |  | port: '', | 
|---|
|  |  |  | managerId: '', | 
|---|
|  |  |  | managerIdList: '', | 
|---|
|  |  |  | location: '', | 
|---|
|  |  |  | useTime: '', | 
|---|
|  |  |  | doubleAuth: '', | 
|---|
|  |  |  | authMemberId: '', | 
|---|
|  |  |  | doubleAuth: 0, | 
|---|
|  |  |  | authMemberIdList: '', | 
|---|
|  |  |  | rowNum: '', | 
|---|
|  |  |  | columnNum: '', | 
|---|
|  |  |  | haertTime: '', | 
|---|
|  |  |  | lacation: '', | 
|---|
|  |  |  | longitude: '', | 
|---|
|  |  |  | jwd: '', | 
|---|
|  |  |  | 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: '请输入设备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 () { | 
|---|
|  |  |  | 
|---|
|  |  |  | api: '/business/jkCabinet', | 
|---|
|  |  |  | 'field.id': 'id' | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | methods: { | 
|---|
|  |  |  | 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] | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 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> | 
|---|