修改了展厅详情页面,修改了设备管理关联用户页面

This commit is contained in:
chendaze 2024-03-22 08:42:24 +08:00
parent 319adea722
commit 14743bf189
6 changed files with 441 additions and 86 deletions

View File

@ -20,6 +20,23 @@ export function get (id) {
})
}
export function recordByDeviceId (id) {
return axios({
url: api.equipment + '/recordByDeviceId/'+id,
method: 'get',
params: {}
})
}
export function getUserList(){
return axios({
url: api.equipment + '/getUserList',
method: 'get',
params: {}
})
}
export function saveEquipment (parameter) {
return axios({
url: api.equipment + (parameter.id > 0 ? '/update' : '/save'),

View File

@ -53,6 +53,9 @@
<span v-if='text == 1'><a-tag color="warn">损坏</a-tag></span>
<span v-if='text == 2'><a-tag color="danger">离线</a-tag></span>
</span>
<span slot='persons' slot-scope='text,record'>
<a @click='handlePersonList(record)'>{{ 1 }}</a>
</span>
<span slot='action' slot-scope='text, record'>
<a v-if='editEnabel' @click='handleEdit(record)'>编辑</a>
<a-divider type='vertical' />
@ -60,15 +63,50 @@
</span>
</s-table>
<equipment-modal ref='modal' @ok='handleOk' />
<a-modal v-model='visible' title='会议设备' width='1000px' @ok='personHandleOk()'>
<div class='table-page-search-wrapper'>
<a-form layout='inline'>
<a-row :gutter='48'>
<a-col :md='8' :sm='15'>
<a-form-item label='关键词'>
<a-input placeholder='请输入关键词' v-model='personQueryParam.itemName' />
</a-form-item>
</a-col>
<a-col :md='8' :sm='24'>
<span class='table-page-search-submitButtons'>
<!-- 查询有问题-->
<a-button type='primary' @click='$refs.table.refresh(true)'>查询</a-button>
<a-button style='margin-left: 8px' @click='() => (personQueryParam = {})'>重置</a-button>
</span>
</a-col>
</a-row>
</a-form>
</div>
<div class='table-operator'>
</div>
<a-table
size='default'
ref='table'
rowKey='id'
:rowSelection='{ selectedRowKeys: selectedPersonRowKeys, onChange: onPersonSelectChange }'
:columns='personColumns'
:data-source='personLoadData'
>
</a-table>
</a-modal>
</a-card>
</template>
<script>
import { STable } from '@/components'
import { delEquipment, getEquipmentList } from '@/api/admin/meeting/equipment'
import { delEquipment, getEquipmentList,getUserList } from '@/api/admin/meeting/equipment'
import EquipmentModal from './modules/EquipmentModal.vue'
import { checkPermission } from '@/utils/permissions'
import difference from 'lodash/difference';
export default {
name: 'TableList',
@ -78,6 +116,9 @@ export default {
},
data() {
return {
disabled: false,
showSearch: false,
personLoadData:[],
labelCol: {
xs: { span: 24 },
sm: { span: 5 }
@ -86,12 +127,31 @@ export default {
xs: { span: 24 },
sm: { span: 16 }
},
selectedItemRowKeys:[],
onItemSelectChange:[],
form: this.$form.createForm(this),
mdl: {},
visible:false,
// /
advanced: false,
//
queryParam: {},
selectedPersonRowKeys:[],
selectedPersonRows: [],
deviceId:'',
personQueryParam:{
},
personColumns: [
{
title: '人员名称',
dataIndex: 'username'
},
{
title: '公司名称',
dataIndex: 'customerName'
},
],
//
columns: [
{
@ -106,7 +166,11 @@ export default {
title: '设备类型',
dataIndex: 'type',
scopedSlots: { customRender: 'type' }
},
{
title: '授权人员',
dataIndex: 'persons',
scopedSlots: { customRender: 'persons' }
},
{
title: '设备ip',
@ -121,7 +185,6 @@ export default {
title: '设备状态',
dataIndex: 'status',
scopedSlots: { customRender: 'status' }
},
{
@ -135,6 +198,7 @@ export default {
loadData: parameter => {
return getEquipmentList(Object.assign(parameter, this.queryParam))
},
selectedRowKeys: [],
selectedRows: [],
addEnable: checkPermission('meeting:equipment:add'),
@ -146,6 +210,23 @@ export default {
created() {
},
methods: {
handlePersonList(record){
this.visible = true
getUserList().then(res =>{
this.personLoadData =res.data
})
this.deviceId =record.id
},
personHandleOk(){
console.log(this.deviceId)
console.log(this.selectedPersonRowKeys)
//
},
onPersonSelectChange(selectedRowKeys, selectedRows){
this.selectedPersonRowKeys = selectedRowKeys
this.selectedPersonRows = selectedRows
},
onSelectChange(selectedRowKeys, selectedRows) {
this.selectedRowKeys = selectedRowKeys
this.selectedRows = selectedRows

View File

@ -0,0 +1,196 @@
<template>
<a-card :body-style="{padding: '24px 32px'}" :bordered='false'>
<div class='back' @click='backPage'>
<a-icon type='rollback' />
<div class='label'>返回</div>
</div>
<div style='display: flex;margin-bottom: 20px'>
<span style='width: 20px;display: block;font-size: 25px;color: #1890ff;font-weight: bold;'>|</span>
<span style='display: block;margin-top: 11px;font-size: 15px'>预约详情</span>
</div>
<a-form-model :model='form' :label-col='labelCol' :wrapper-col='wrapperCol'>
<a-row>
<a-col :span='10'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='会议主题'>
{{ form.title }}
</a-form-item>
</a-col>
<a-col :span='10'>
<a-form-item label='来访人数' :labelCol='labelCol' :wrapperCol='wrapperCol'>
{{ form.title }}
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span='10'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='预约人'>
{{ form.userName }}
</a-form-item>
</a-col>
<a-col :span='10'>
<a-form-item label='到访公司' :labelCol='labelCol' :wrapperCol='wrapperCol'>
{{ form.customerName }}
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span='10'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='联系方式'>
{{ form.userPhone }}
</a-form-item>
</a-col>
<a-col :span='10'>
<a-form-item label='拟参观区域' :labelCol='labelCol' :wrapperCol='wrapperCol'>
{{ form.visitArea }}
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span='10'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='展厅开始时间'>
{{ form.startTime }}
</a-form-item>
</a-col>
<a-col :span='10'>
<a-form-item label='展厅结束时间' :labelCol='labelCol' :wrapperCol='wrapperCol'>
{{ form.endDate }}
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span='10'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='时长'>
{{ form.duration }}
</a-form-item>
</a-col>
<a-col :span='10'>
<a-form-item label='来参观人员' :labelCol='labelCol' :wrapperCol='wrapperCol'>
{{ form.persons }}
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span='10'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='订单编号'>
{{ form.reservationNumber }}
</a-form-item>
</a-col>
<a-col :span='10'>
<a-form-item label='参观目的' :labelCol='labelCol' :wrapperCol='wrapperCol'>
{{ form.visitType }}
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span='10'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='讲解需求'>
{{ form.explainNeedType == 1?'是':'否' }}
</a-form-item>
</a-col>
<a-col :span='10'>
<a-form-item label='是否需要会议室' :labelCol='labelCol' :wrapperCol='wrapperCol'>
{{ form.meetingNeedType == 1?'是':'否' }}
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span='10'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='摄影需求'>
{{ form.photographType == 1?'是':'否' }}
</a-form-item>
</a-col>
<a-col :span='10'>
<a-form-item label='创建时间' :labelCol='labelCol' :wrapperCol='wrapperCol'>
{{ form.createTime }}
</a-form-item>
</a-col>
</a-row>
</a-form-model>
</a-card>
</template>
<script>
import {get} from '@/api/admin/meeting/showroomRecord'
// import ReservationModal from '@/views/admin/meeting/modules/ReservationModal'
export default {
name: 'reservationInfo',
data() {
return {
labelCol: { span: 12 },
wrapperCol: { span: 8 },
form: {
roomContent: {}
},
queryParam: {
reservationId: this.$route.query.id
},
actualNum : null,
attainNum : null
}
},
created() {
this.getDetail()
},
methods: {
getDetail() {
get(this.$route.query.id).then(res => {
this.form = res
let persons = JSON.parse(res.persons)
let names = persons.map(item =>item.name)
let visitName = names.join(",");
this.form.persons = visitName
})
},
backPage() {
this.$router.back()
}
}
}
</script>
<style scoped>
.back {
display: flex;
justify-content: flex-end;
align-items: center;
padding-right: 100px;
cursor: pointer;
}
.back .label {
margin-left: 4px;
}
.recordHeadView {
display: flex;
justify-content: space-between;
align-items: center;
width: 1000px;
margin: 14px auto;
color: black;
}
.recordHeadView .shidarenshu {
margin-left: 50px;
}
.recordHeadView .search {
display: flex;
justify-content: center;
align-items: center;
}
.recordHeadView .search .searchInput {
flex: 1;
}
.dataTable {
width: 1000px;
margin: 0 auto;
}
</style>

View File

@ -38,6 +38,8 @@
<a @click='handlePersons(record)'>查看</a>
</span>
<span slot="action" slot-scope="text, record">
<a @click='handleInfo(record)'>详情</a>
<a-divider type="vertical" />
<a v-if="editEnabel" @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" />
<a v-if="removeEnable" @click="delByIds([record.id])">删除</a>
@ -166,6 +168,11 @@
})
},
methods: {
handleInfo(record){
this.$router.push({ name: 'showroomRecordInfo', query: { id: record.id } })
},
onSelectChange (selectedRowKeys, selectedRows) {
this.selectedRowKeys = selectedRowKeys
this.selectedRows = selectedRows

View File

@ -2,7 +2,7 @@
<a-modal
title='操作'
style='top: 20px;'
:width='800'
:width='1000'
v-model='visible'
:confirmLoading='confirmLoading'
@ok='handleSubmit'
@ -14,81 +14,121 @@
<a-form-item style='display:none'>
<a-input v-decorator="['version']" />
</a-form-item>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='设备编号'>
<a-input placeholder='设备编号' v-decorator="['equipmentNum', {rules: [{required: true, message: '请输入设备编号'}]}]" />
</a-form-item>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='设备名称'>
<a-input placeholder='设备名称' v-decorator="['equipmentName',{rules: [{required: true, message: '请输入设备名称'}]}]" />
</a-form-item>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='设备类型'>
<a-select v-decorator="['type',{rules: [{ required: true, message: '请选择设备类型'}]}]" placeholder='请选择设备类型'>
<a-select-option value='0'>
门禁
</a-select-option>
<a-select-option value='1'>
开门控制器
</a-select-option>
</a-select>
</a-form-item>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='设备ip'>
<a-input placeholder='设备ip' v-decorator="['ip',{rules: [{required: true, message: '请输入设备ip'}]}]" />
</a-form-item>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='所属楼层'>
<a-select v-decorator="['buildId',{rules: [{ required: true, message: '请选择所属楼层' }]}]" placeholder='所属楼层'
@change='getRoomList'>
<a-select-option v-for='item in floorList' :key='item.id' :value='item.id' >
{{ item.floorName }}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='存放地点'>
<a-select v-decorator="['roomId',{rules: [{ required: true, message: '选择存放地点' }]}]" placeholder='所属房间'
>
<a-select-option v-for='item in roomList' :key='item.id' :value='item.id' >
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
<!-- <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="存放地点">-->
<!-- <a-input placeholder="存放地点" v-decorator="['roomId',{rules: [{required: true, message: '请输入存放地点'}]}]"/>-->
<!-- </a-form-item>-->
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='设备状态'>
<a-select v-decorator="['status',{rules: [{ required: true, message: '请选择设备状态'}]}]" placeholder='请选择设备状态'>
<a-select-option value='0'>
开启
</a-select-option>
<a-select-option value='1'>
损坏
</a-select-option>
<a-select-option value='2'>
离线
</a-select-option>
</a-select>
</a-form-item>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='设备图片'>
<!-- <a-input placeholder="设备图片" v-decorator="['pic',{rules: [{required: true, message: '请输入设备图片'}]}]"/>-->
<a-upload
v-decorator="['pic']"
list-type='picture-card'
class='avatar-uploader'
:show-upload-list='false'
:action='uploadUrl'
:headers='headers'
:before-upload='beforeUpload'
@change='handleChange'
>
<img v-if='imageUrl' :src='imageUrl' style='width: 102px; height: 102px' />
<div v-else>
<a-icon :type="loading ? 'loading' : 'plus'" />
<div class='ant-upload-text'> 上传</div>
</div>
</a-upload>
</a-form-item>
<div style='display: flex;margin-bottom: 20px'>
<span style='width: 20px;display: block;font-size: 25px;color: #1890ff;font-weight: bold;'>|</span>
<span style='display: block;margin-top: 11px;font-size: 15px'>新增设备</span>
</div>
<a-row>
<a-col :span='11'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='设备编号'>
<a-input placeholder='设备编号' v-decorator="['equipmentNum', {rules: [{required: true, message: '请输入设备编号'}]}]" />
</a-form-item>
</a-col>
<a-col :span='11'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='设备名称'>
<a-input placeholder='设备名称' v-decorator="['equipmentName',{rules: [{required: true, message: '请输入设备名称'}]}]" />
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span='11'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='设备类型'>
<a-select v-decorator="['type',{rules: [{ required: true, message: '请选择设备类型'}]}]" placeholder='请选择设备类型'>
<a-select-option value='0'>
门禁
</a-select-option>
<a-select-option value='1'>
开门控制器
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span='11'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='设备ip'>
<a-input placeholder='设备ip' v-decorator="['ip',{rules: [{required: true, message: '请输入设备ip'}]}]" />
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span='11'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='所属楼层'>
<a-select v-decorator="['buildId',{rules: [{ required: true, message: '请选择所属楼层' }]}]" placeholder='所属楼层'
@change='getRoomList'>
<a-select-option v-for='item in floorList' :key='item.id' :value='item.id' >
{{ item.floorName }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span='11'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='存放地点'>
<a-select v-decorator="['roomId',{rules: [{ required: true, message: '选择存放地点' }]}]" placeholder='所属房间'
>
<a-select-option v-for='item in roomList' :key='item.id' :value='item.id' >
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span='11'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='设备状态'>
<a-select v-decorator="['status',{rules: [{ required: true, message: '请选择设备状态'}]}]" placeholder='请选择设备状态'>
<a-select-option value='0'>
开启
</a-select-option>
<a-select-option value='1'>
损坏
</a-select-option>
<a-select-option value='2'>
离线
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span='11'>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='设备图片'>
<!-- <a-input placeholder="设备图片" v-decorator="['pic',{rules: [{required: true, message: '请输入设备图片'}]}]"/>-->
<a-upload
v-decorator="['pic']"
list-type='picture-card'
class='avatar-uploader'
:show-upload-list='false'
:action='uploadUrl'
:headers='headers'
:before-upload='beforeUpload'
@change='handleChange'
>
<img v-if='imageUrl' :src='imageUrl' style='width: 102px; height: 102px' />
<div v-else>
<a-icon :type="loading ? 'loading' : 'plus'" />
<div class='ant-upload-text'> 上传</div>
</div>
</a-upload>
</a-form-item>
</a-col>
</a-row>
</a-form>
<div style='display: flex;margin-bottom: 20px'>
<span style='width: 20px;display: block;font-size: 25px;color: #1890ff;font-weight: bold;'>|</span>
<span style='display: block;margin-top: 11px;font-size: 15px'>开门记录</span>
</div>
<a-table :columns='columns'
size='default'
ref='table'
style='width: 800px;margin-left: 20px'
:data-source='loadData'
>
<a slot='name' slot-scope='text'>{{ text }}</a>
</a-table>
</a-modal>
</template>
<script>
import { saveEquipment, get } from '@/api/admin/meeting/equipment'
import { saveEquipment, get,recordByDeviceId } from '@/api/admin/meeting/equipment'
import pick from 'lodash.pick'
import { getFloorList, getRoomListByFloorId } from '@/api/admin/meeting/roomContent'
import storage from 'store'
@ -105,6 +145,7 @@ export default {
xs: { span: 24 },
sm: { span: 5 }
},
loadData:[],
loading: false,
wrapperCol: {
xs: { span: 24 },
@ -119,7 +160,21 @@ export default {
mdl: {},
form: this.$form.createForm(this),
floorList: [],
roomList: []
roomList: [],
columns: [
{
title: '开门时间',
dataIndex: 'createTime'
},
{
title: '开门方式',
dataIndex: 'type',
},
{
title: '开门人',
dataIndex: 'userName'
},
],
}
},
beforeCreate() {
@ -141,6 +196,9 @@ export default {
this.roomList = res.data
})
},
//
beforeUpload(file) {
const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png'
if (!isJpgOrPng) {
@ -179,20 +237,22 @@ export default {
this.edit({ id: 0 })
},
edit(record) {
if (record.id != 0){
get(record.id).then((res) => {
console.log(res)
this.form.setFieldsValue({
ip: res.ip,
status: res.status.toString(),
type: res.type.toString(),
buildId: res.buildId,
roomId: res.roomName,
})
})
recordByDeviceId(record.id).then(res =>{
this.loadData =res.data
})
}

View File

@ -262,16 +262,10 @@
})
})
this.$nextTick(() => {
this.form.setFieldsValue(pick(this.mdl, 'id', 'showroomId', 'userId', 'title', 'stauts',"explainNeedType","meetingNeedType","photographType",
'reservationNumber', 'cancelTime', 'cancelResaon', 'startTime', 'endDate', 'deleteFlag', 'createBy', 'createTime', 'updateBy', 'updateTime', 'remake'))
})
},
handleSubmit (e) {
e.preventDefault()