469 lines
14 KiB
Vue
Raw Normal View History

2024-02-23 16:52:51 +08:00
<template>
<a-modal
:title="mdl.id>0?'编辑':'新增'"
2024-03-26 14:23:04 +08:00
style='top: 20px'
2024-03-27 14:49:43 +08:00
width='1200px'
2024-03-26 14:23:04 +08:00
v-model='visible'
:confirmLoading='confirmLoading'
2024-03-07 09:41:32 +08:00
2024-03-26 14:23:04 +08:00
@ok='handleSubmit'
2024-02-23 16:52:51 +08:00
>
2024-03-26 14:23:04 +08:00
<a-form :form='form'>
<a-form-item style='display: none'>
2024-02-23 16:52:51 +08:00
<a-input v-decorator="['id']" />
</a-form-item>
2024-03-26 14:23:04 +08:00
<a-form-item style='display: none'>
2024-02-23 16:52:51 +08:00
<a-input v-decorator="['version']" />
</a-form-item>
2024-03-07 09:41:32 +08:00
<a-row>
2024-03-26 14:23:04 +08:00
<a-col :span='10'>
2024-09-25 00:22:02 +08:00
<a-form-item label='所属楼层' :labelCol='labelCol' :wrapperCol='wrapperCol'>
<a-select v-decorator="['floor',{rules: [{ required: true, message: '选择所属楼层' }]}]"
placeholder='所属楼层'>
<a-select-option v-for='item in typeList' :value='item.value'>
{{ item.text }}
</a-select-option>
</a-select>
2024-03-07 09:41:32 +08:00
</a-form-item>
</a-col>
2024-03-26 14:23:04 +08:00
<a-col :span='10'>
2024-09-25 00:22:02 +08:00
<a-form-item label='会议室名称' :labelCol='labelCol' :wrapperCol='wrapperCol'>
<a-input placeholder='会议室名称'
v-decorator="['name',{rules: [{ required: true, message: '输入会议室名称' }]}]" />
2024-03-07 09:41:32 +08:00
</a-form-item>
</a-col>
</a-row>
<a-row>
2024-03-26 14:23:04 +08:00
<a-col :span='10'>
2024-09-25 00:22:02 +08:00
<a-form-item label='会议室形式' :labelCol='labelCol' :wrapperCol='wrapperCol'>
<a-select v-decorator="['typeName',{rules: [{ required: true, message: '选择会议室形式' }]}]"
placeholder='会议室形式'>
<a-select-option v-for='item in shapeList' :value='item.value'>
{{ item.text }}
2024-03-07 09:41:32 +08:00
</a-select-option>
</a-select>
</a-form-item>
</a-col>
2024-03-26 14:23:04 +08:00
<a-col :span='10'>
2024-09-25 00:22:02 +08:00
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='所属房间 '>
<a-input placeholder='所属房间'
v-decorator="['roomNum',{rules: [{ required: true, message: '输入所属房间' }]}]" />
2024-03-07 09:41:32 +08:00
</a-form-item>
</a-col>
2024-09-25 00:22:02 +08:00
</a-row>
<a-row>
<a-col :span='10'>
2024-09-25 00:22:02 +08:00
<a-form-item label='会议室面积' :labelCol='labelCol' :wrapperCol='wrapperCol'>
<a-input placeholder='会议室面积'
v-decorator="['area',{rules: [{ required: true, message: '请输入会议室面积' }]}]" />
</a-form-item>
</a-col>
2024-03-26 14:23:04 +08:00
<a-col :span='10'>
<a-form-item label='容纳人数' :labelCol='labelCol' :wrapperCol='wrapperCol'>
<a-input placeholder='容纳人数'
v-decorator="['capacityNum',{rules: [{ required: true, message: '输入容纳人数' }]}]" />
2024-03-07 09:41:32 +08:00
</a-form-item>
</a-col>
2024-03-07 09:41:32 +08:00
</a-row>
<a-row>
2024-03-28 15:37:49 +08:00
<a-col :span='10'>
2024-09-25 00:22:02 +08:00
<a-form-item label='会议室设备' :labelCol='labelCol' :wrapperCol='wrapperCol'>
<a-checkbox-group :defaultValue='defaultCheckedList'
v-decorator="['device',{rules: [{ required: true, message: '请选择会议室设备' }]}]">
<a-checkbox v-for='item in deviceList' :value='item.value'>
{{ item.text }}
</a-checkbox>
</a-checkbox-group>
2024-03-28 15:37:49 +08:00
</a-form-item>
</a-col>
2024-03-26 14:23:04 +08:00
<a-col :span='10'>
<a-form-item label='是否启用' :labelCol='labelCol' :wrapperCol='wrapperCol'>
2024-09-25 00:22:02 +08:00
<a-select v-decorator="['enable',{rules: [{ required: true, message: '请选择是否启用'}]}]"
2024-03-26 14:23:04 +08:00
placeholder='是否启用'>
<a-select-option :value='0'>
</a-select-option>
<a-select-option :value='1'>
</a-select-option>
2024-03-07 09:41:32 +08:00
</a-select>
</a-form-item>
</a-col>
</a-row>
<a-row>
2024-03-26 14:23:04 +08:00
<a-col :span='10'>
2024-03-28 15:17:20 +08:00
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='会议室描述 '>
2024-03-28 15:37:49 +08:00
<a-textarea placeholder='会议室描述 ' v-decorator="['content']" style='height: 100px' />
2024-03-07 09:41:32 +08:00
</a-form-item>
</a-col>
</a-row>
<a-row>
2024-03-26 14:23:04 +08:00
<a-col :span='10'>
2024-03-27 14:49:43 +08:00
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='室内图片'>
2024-03-07 09:41:32 +08:00
<a-upload
2024-09-25 00:22:02 +08:00
v-decorator="['files', {rules: [{ required: true, message: '上传室内图片' }]}]"
2024-03-26 14:23:04 +08:00
list-type='picture-card'
class='avatar-uploader'
2024-04-08 15:25:44 +08:00
:file-list='fileList'
2024-03-26 14:23:04 +08:00
:action='uploadUrl'
:headers='headers'
2024-04-08 15:25:44 +08:00
@preview='handlePreview'
@change='handleChangeFileList'
2024-03-07 09:41:32 +08:00
>
2024-04-08 15:25:44 +08:00
<div v-if='fileList.length < 4'>
<a-icon type='plus' />
2024-03-26 14:23:04 +08:00
<div class='ant-upload-text'> 上传</div>
2024-03-07 09:41:32 +08:00
</div>
</a-upload>
2024-04-08 15:25:44 +08:00
<a-modal :visible='previewVisible' :footer='null' @cancel='handleCancel'>
<img style='width: 100%' :src='previewImage' />
</a-modal>
2024-03-07 09:41:32 +08:00
</a-form-item>
</a-col>
</a-row>
2024-04-08 15:25:44 +08:00
2024-02-23 16:52:51 +08:00
</a-form>
</a-modal>
</template>
<script>
2024-03-26 14:23:04 +08:00
import {
saveRoomContent,
getRoomListByFloorId,
2024-09-25 00:22:02 +08:00
selectRoomById, getMeetingDict, getRoomInfo
2024-03-26 14:23:04 +08:00
} from '@/api/admin/meeting/roomContent'
2024-02-23 16:52:51 +08:00
import pick from 'lodash.pick'
import storage from 'store'
2024-03-07 09:41:32 +08:00
import moment from 'moment'
2024-02-23 16:52:51 +08:00
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { getInfo } from '@/api/login'
import { getTenantList } from '@/api/tenant'
import { getParkList } from '@/api/admin/park'
import { getBuildingList } from '@/api/admin/building'
import { getBuildingDetailList } from '@/api/admin/buildingDetail'
2024-02-23 16:52:51 +08:00
export default {
name: 'RoomContentModal',
props: {},
components: {},
2024-03-26 14:23:04 +08:00
data() {
2024-02-23 16:52:51 +08:00
return {
visible: false,
labelCol: {
xs: { span: 24 },
2024-03-27 14:49:43 +08:00
sm: { span: 8 }
2024-02-23 16:52:51 +08:00
},
2024-09-25 00:22:02 +08:00
// uploadUrl: process.env.VUE_APP_API_BASE_URL + '/api/dfs/upload',
uploadUrl: process.env.VUE_APP_API_BASE_URL + '/admin/meetingRoom/upload',
2024-02-23 16:52:51 +08:00
imageUrl: '',
headers: {
Authorization: 'Bearer ' + storage.get(ACCESS_TOKEN)
},
loading: false,
wrapperCol: {
2024-03-27 14:49:43 +08:00
xs: { span: 35 },
2024-03-26 14:23:04 +08:00
sm: { span: 16 }
2024-02-23 16:52:51 +08:00
},
confirmLoading: false,
mdl: {},
typeData: [],
form: this.$form.createForm(this),
userDetail: {},
2024-09-25 00:22:02 +08:00
typeList: [],
shapeList: [],
deviceList: [],
typeMap: {},
shapeMap: {},
deviceMap: {},
// tenantList: [], // 地区
// parkList: [], // 园区
// buildingList: [], // 楼宇
// buildingDetailList: [], // 楼层
// roomList: [], // 房间
tenantEnable: false,
2024-04-08 15:25:44 +08:00
parkEnable: false,
previewVisible: false,
previewImage: '',
fileList: []
2024-02-23 16:52:51 +08:00
}
},
2024-03-26 14:23:04 +08:00
beforeCreate() {
},
created() {
2024-03-26 14:23:04 +08:00
},
2024-03-07 09:41:32 +08:00
mounted() {
2024-09-25 00:22:02 +08:00
this.getDict()
2024-03-07 09:41:32 +08:00
},
2024-02-23 16:52:51 +08:00
methods: {
2024-09-25 00:22:02 +08:00
getDict() {
getMeetingDict().then((res) => {
// 楼层
let _typeList = []
let _typeMap = {}
let dataObj = res.data
for (let key in dataObj.floors) {
let eachObj = dataObj.floors[key]
const keys = Object.keys(eachObj)
_typeList.push({
text: keys[0],
value: keys[0]
})
2024-09-25 00:22:02 +08:00
this.typeMap[keys[0]] = eachObj[keys[0]]
// this.typeMap.keys[0] = eachObj[keys[0]]
}
2024-03-07 09:41:32 +08:00
2024-09-25 00:22:02 +08:00
this.typeList = _typeList
2024-09-25 00:22:02 +08:00
// 形状
let _shapeList = []
for (let key in dataObj.types) {
let eachObj = dataObj.types[key]
const keys = Object.keys(eachObj)
_shapeList.push({
text: keys[0],
value: keys[0]
})
this.shapeMap[keys[0]] = eachObj[keys[0]]
}
this.shapeList = _shapeList
2024-09-25 00:22:02 +08:00
// 设备
let _deviceList = []
for (let key in dataObj.devices) {
let eachObj = dataObj.devices[key]
const keys = Object.keys(eachObj)
_deviceList.push({
text: keys[0],
value: keys[0]
})
this.deviceMap[keys[0]] = eachObj[keys[0]]
}
this.deviceList = _deviceList
2024-03-07 09:41:32 +08:00
})
},
2024-09-25 00:22:02 +08:00
// 获取用户详细信息
getUserDetail() {
getInfo().then(res => {
console.log('getUserDetail', res)
this.userDetail = res
// 园区5
// if (this.userDetail.roleIds && this.userDetail.roleIds.length > 0 && this.userDetail.roleIds[0] == 5) {
// //
// // 判断:是新增就查询园区
// let { id } = this.mdl
// if (!id) {
// // 选择地区 -> 查询园区
// this.selectTenant(this.userDetail.tenantId)
// // 选择园区 -> 查询楼宇
// this.selectPark(this.userDetail.parkId)
// }
// //
// // 不可编辑
// this.tenantEnable = true
// this.parkEnable = true
// // 关联地区和园区
// this.mdl.parkId = this.userDetail.parkId
// this.mdl.tenantId = this.userDetail.tenantId
// this.form.setFieldsValue({
// parkId: this.mdl.parkId,
// tenantId: this.mdl.tenantId
// })
// }
console.log(this.mdl)
})
},
moment,
//
2024-04-08 15:25:44 +08:00
async handlePreview(file) {
if (!file.url && !file.preview) {
file.preview = await getBase64FileList(file.originFileObj)
2024-02-23 16:52:51 +08:00
}
2024-04-08 15:25:44 +08:00
this.previewImage = file.url || file.preview
this.previewVisible = true
2024-02-23 16:52:51 +08:00
},
2024-04-08 15:25:44 +08:00
handleCancel() {
this.previewVisible = false
},
// 上传banner
handleChangeFileList({ fileList }) {
this.fileList = fileList
2024-02-23 16:52:51 +08:00
},
2024-03-26 14:23:04 +08:00
add() {
2024-02-23 16:52:51 +08:00
this.form.resetFields()
2024-04-15 11:29:56 +08:00
this.mdl = {}
2024-09-25 00:22:02 +08:00
this.fileList = []
this.visible = true
2024-02-23 16:52:51 +08:00
},
2024-09-25 00:22:02 +08:00
edit(id) {
this.form.resetFields()
this.mdl = {}
this.fileList = []
getRoomInfo({ roomId: id }).then((res) => {
let deviceStr = res.room.device
if (deviceStr != '') {
deviceStr = deviceStr.replaceAll(' ', '')
let deviceArr = deviceStr.split('#')
if (deviceArr[0] == '') {
deviceArr.shift()
}
res.room.device = deviceArr
}
2024-09-25 00:22:02 +08:00
this.mdl = Object.assign(this.mdl, res.room)
2024-09-25 00:22:02 +08:00
this.visible = true
this.$nextTick(() => {
this.form.setFieldsValue(
pick(
this.mdl,
'id',
'device',
'typeName',
'name',
'capacityNum',
'floor',
'files',
'startTime',
'endDate',
'money',
'enable',
'typeName',
'content',
'area',
'roomNum'
)
2024-02-23 16:52:51 +08:00
)
2024-09-25 00:22:02 +08:00
})
// 图片
console.log(this.mdl)
if (this.mdl.imgs) {
let files = []
let fileId = []
for (let key in this.mdl.imgs) {
let eachObj = this.mdl.imgs[key]
files.push({
uid: '0',
id: eachObj.id,
url: process.env.VUE_APP_MODEL_BASE_URL + eachObj.url,
status: 'done',
name: eachObj.url
})
fileId.push(eachObj.id)
}
this.fileList = files
this.mdl.files = fileId
} else {
this.fileList = []
}
2024-02-23 16:52:51 +08:00
})
2024-09-25 00:22:02 +08:00
// // let copyMdl = JSON.parse(JSON.stringify(this.mdl))
// // 查询地区
// // this.getTenantData()
// //
// if (record.id != 0) { // 编辑
// } else { // 新增
// }
// // 获取用户信息
// this.getUserDetail()
// //
2024-02-23 16:52:51 +08:00
},
2024-03-26 14:23:04 +08:00
handleSubmit(e) {
2024-02-23 16:52:51 +08:00
e.preventDefault()
this.form.validateFields((err, values) => {
if (!err) {
console.log('Received values of form: ', values)
2024-09-25 00:22:02 +08:00
this.confirmLoading = false
// const indoorPicUrl = []
const files = []
2024-04-08 15:25:44 +08:00
this.fileList.forEach((file, index) => {
// 添加原来的
2024-09-25 00:22:02 +08:00
if (file.hasOwnProperty('url') && file.hasOwnProperty('id')) {
// indoorPicUrl.push({ 'name': file.name, 'url': file.name, 'id': file.id })
files.push(file.id)
2024-04-08 15:25:44 +08:00
}
2024-09-25 00:22:02 +08:00
if (file.hasOwnProperty('response') && file.status === 'done' && file.response.code === 0) {
2024-04-08 15:25:44 +08:00
const data = file.response
2024-09-25 00:22:02 +08:00
// indoorPicUrl.push({ 'name': data.fileName, 'url': data.fileName, 'uid': index })
files.push(file.response.id)
2024-04-08 15:25:44 +08:00
}
2024-09-25 00:22:02 +08:00
2024-04-08 15:25:44 +08:00
})
2024-09-25 00:22:02 +08:00
2024-04-08 15:25:44 +08:00
// 多个图片
2024-09-25 00:22:02 +08:00
// values.indoorPicUrl = JSON.stringify(indoorPicUrl)
// values.files = files
2024-09-25 00:22:02 +08:00
let deviceArr = values.device
let deviceStr = ''
for (let key in deviceArr) {
let eachObj = deviceArr[key]
deviceStr += '#' + eachObj + ' '
}
values.device = deviceStr
values.floorId = this.typeMap[values.floor]
values.typeId = this.shapeMap[values.typeName]
saveRoomContent(values, files)
2024-02-23 16:52:51 +08:00
.then((res) => {
if (res.code === 0) {
this.$message.success('保存成功')
this.$emit('ok')
this.visible = false
} else {
this.$message.error(res.msg)
}
})
.catch(() => {
this.$message.error('系统错误,请稍后再试')
})
.finally(() => {
this.confirmLoading = false
})
}
})
2024-03-26 14:23:04 +08:00
}
2024-02-23 16:52:51 +08:00
}
}
2024-03-26 14:23:04 +08:00
function getBase64(img, callback) {
2024-02-23 16:52:51 +08:00
const reader = new FileReader()
reader.addEventListener('load', () => callback(reader.result))
reader.readAsDataURL(img)
}
</script>
2024-03-07 09:41:32 +08:00
<style scoped>
2024-03-26 14:23:04 +08:00
.self-item-cell {
2024-03-07 09:41:32 +08:00
display: flex;
justify-content: space-between;
align-items: center;
}
2024-03-26 14:23:04 +08:00
.self-item-cell .self-item {
2024-03-07 09:41:32 +08:00
display: flex;
justify-content: flex-start;
align-items: center;
width: 50%;
}
2024-03-26 14:23:04 +08:00
.self-item-cell .self-item:first-of-type {
2024-03-07 09:41:32 +08:00
margin-right: 10px;
}
2024-03-26 14:23:04 +08:00
.self-item-cell .self-item .title {
2024-03-07 09:41:32 +08:00
margin-right: 10px;
}
2024-03-26 14:23:04 +08:00
.self-item-cell .self-item .input {
2024-03-07 09:41:32 +08:00
flex: 1;
}
</style>