|
|
@@ -0,0 +1,593 @@
|
|
|
+<template>
|
|
|
+ <div class="page animate__animated animate__faster animate__fadeInLeft">
|
|
|
+ <more title="车位使用情况" nomore></more>
|
|
|
+ <operateList @save="save" @search="search" ref="operateList" @initDone="initDone"></operateList>
|
|
|
+
|
|
|
+ <div v-show="$isNotEmpty(parkingLotObj)" class="parking-layout" @click="activedIndex=-1;closePopover"
|
|
|
+ id="parkingLayout"
|
|
|
+ :style="$isEmpty(parkingAreaList)?'display: flex;justify-content: center;align-items: center;':''">
|
|
|
+ <div class="parking-grid" v-if="gridShow"></div>
|
|
|
+
|
|
|
+ <div class="addParkingArea" style="z-index: 999999999999999999999;"
|
|
|
+ @click="$refs.operateList.addLayoutVisible=true" v-if="$isEmpty(parkingAreaList)">
|
|
|
+ <i class="el-icon-circle-plus-outline" style="color: #3b8ff4;font-size: 3.125rem;"></i>
|
|
|
+ <span>添加区域</span>
|
|
|
+ </div>
|
|
|
+ <VueDragResize class="animate__animated animate__faster animate__zoomIn" v-if="item.show&&!enlarge"
|
|
|
+ :isDraggable="disabled" :isResizable="disabled" v-for="(item, index) in parkingAreaList" :key="index"
|
|
|
+ :w="item.width" :h="item.height" :x="item.x" :y="item.y" :z="(index+1)" :parentW="listWidth"
|
|
|
+ :parentH="listHeight" :parentLimitation="true" :snapToGrid="true" :gridX="10" :gridY="10"
|
|
|
+ @resizestop="rectStop($event, index)" @dragstop="rectStop($event, index)">
|
|
|
+ <div @click.stop="activedIndex=index"
|
|
|
+ style="width: 100%;height: 100%;position: relative;z-index: 9999999999999999;">
|
|
|
+ <el-button class="delLayoutClass" @click.stop="delLayout(item)" v-if="delLayoutShow" type="danger"
|
|
|
+ icon="el-icon-close" size="mini" style="padding: 0.26rem;" circle></el-button>
|
|
|
+ <el-button v-if="activedIndex==index&&!delLayoutShow&&!disabled" class="delLayoutClass"
|
|
|
+ @click.stop="enlarge=true;enlargeItem=item;" type="primary" icon="el-icon-zoom-in" size="mini"
|
|
|
+ style="padding: 0.26rem;" circle></el-button>
|
|
|
+
|
|
|
+ <div id="parkingBox" class="parking-box" style="position:relative;">
|
|
|
+ <div class="watermark">
|
|
|
+ {{item.name}}
|
|
|
+ </div>
|
|
|
+ <div @click.stop="showPopover(item1)"
|
|
|
+ v-if="$isNotEmpty(item.parkingSpaceList)" class="car" :style="changeParkingSpaceParams(item)"
|
|
|
+ v-for="(item1,index1) in item.parkingSpaceList" :key="index1">
|
|
|
+ <el-popover placement="bottom" title="" width="230" v-model="item1.popoverShow" trigger="manual">
|
|
|
+ <div class="tips" style="position: relative;">
|
|
|
+ <div style="position: absolute;right: 0rem;top: -10px">
|
|
|
+ <i class="el-icon-delete" style="font-weight: 800;"></i>
|
|
|
+ <i class="el-icon-edit-outline" style="margin-left: 0.25rem;font-weight: 800;"></i>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <label>停车场:</label>
|
|
|
+ {{parkingLotObj.parkName}}
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <label>车位编号:</label>
|
|
|
+ {{item1.number}}
|
|
|
+ </div>
|
|
|
+ <div style="display: flex;">
|
|
|
+ <label>车牌号码:</label>
|
|
|
+ <span v-if="item1.carNo">{{item1.carNo}}
|
|
|
+ <span v-if="$isNotEmpty(item1.id)" class="bind" @click.stop="parkingSpaceItem=item1;tableShow=true">换绑</span>
|
|
|
+ </span>
|
|
|
+ <span style="color: red;justify-content: center;display: flex;align-items: center;" v-else>
|
|
|
+ 车位为空
|
|
|
+ <span v-if="$isNotEmpty(item1.id)" class="bind" @click.stop="parkingSpaceItem=item1;tableShow=true">绑定</span>
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div slot="reference" :style="changeParkingSpaceParams(item)">
|
|
|
+ <img :src="carEmptyImg(item,item1)">
|
|
|
+ </div>
|
|
|
+ </el-popover>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="car" :style="changeParkingSpaceParams(item)">
|
|
|
+ <i class="el-icon-circle-plus-outline" @click.stop="addParkingSpace(item)"></i>
|
|
|
+ <el-popover placement="bottom" title="" width="270" trigger="hover">
|
|
|
+ <div class="popoverContent" style="justify-content: center;">
|
|
|
+ <el-button style="margin:0.25rem" v-for="(item2,index2) in tipsBtnList" :key="index2"
|
|
|
+ @click="popoverClick(item,item2)" type="primary" size="mini" plain>{{item2.name}}</el-button>
|
|
|
+ </div>
|
|
|
+ <i slot="reference" class="el-icon-edit-outline"></i>
|
|
|
+ <!-- <i slot="reference" class="el-icon-edit-outline" @click.stop="editPopoverVisible(enlargeItem)"></i> -->
|
|
|
+ </el-popover>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </VueDragResize>
|
|
|
+
|
|
|
+ <VueDragResize class="animate__animated animate__faster "
|
|
|
+ :class="enlargeAreaShow()?'animate__zoomIn':'animate__zoomOut'" v-if="enlargeAreaShow()" :isDraggable="false"
|
|
|
+ :isResizable="false" :w="(listWidth - 20)" :h="(listHeight - 20)" :x="10" :y="10" :parentW="listWidth"
|
|
|
+ :parentH="listHeight" :parentLimitation="true" :snapToGrid="true" :gridX="20" :gridY="20"
|
|
|
+ @resizestop="rectStop($event, index)" @dragstop="rectStop($event, index)">
|
|
|
+ <div style="width: 100%;height: 100%;position: relative;z-index: 9999999999999999;">
|
|
|
+ <el-button class="delLayoutClass" @click.stop="enlarge=false;enlargeItem={}" type="primary"
|
|
|
+ icon="el-icon-zoom-out" size="mini" style="padding: 0.26rem;" circle></el-button>
|
|
|
+ <div class="parking-box" style="position:relative;">
|
|
|
+ <div v-if="$isNotEmpty(enlargeItem.parkingSpaceList)" class="car"
|
|
|
+ :style="changeParkingSpaceParams(enlargeItem)" v-for="(item1,index1) in enlargeItem.parkingSpaceList"
|
|
|
+ :key="index1">
|
|
|
+ <el-popover placement="bottom" title="" width="230" trigger="hover">
|
|
|
+ <div class="tips" style="position: relative;">
|
|
|
+ <div style="position: absolute;right: 0rem;top: -10px">
|
|
|
+ <i class="el-icon-delete" style="font-weight: 800;"></i>
|
|
|
+ <i class="el-icon-edit-outline" style="margin-left: 0.25rem;font-weight: 800;"></i>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <label>停车场:</label>
|
|
|
+ {{parkingLotObj.parkName}}
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <label>车位编号:</label>
|
|
|
+ {{item1.number}}
|
|
|
+ </div>
|
|
|
+ <div style="display: flex;">
|
|
|
+ <label>车牌号码:</label>
|
|
|
+ <span v-if="item1.carNo">{{item1.carNo}}
|
|
|
+ <span v-if="item1.id" class="bind" @click="parkingSpaceItem=item1;tableShow=true">换绑</span>
|
|
|
+ </span>
|
|
|
+ <span style="color: red;justify-content: center;display: flex;align-items: center;" v-else>
|
|
|
+ 车位为空
|
|
|
+ <span v-if="item1.id" class="bind" @click="parkingSpaceItem=item1;tableShow=true">绑定</span>
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div slot="reference" :style="changeParkingSpaceParams(enlargeItem)">
|
|
|
+ <img :src="carEmptyImg(enlargeItem,item1)">
|
|
|
+ </div>
|
|
|
+ </el-popover>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </VueDragResize>
|
|
|
+
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <el-dialog style="z-index: 99999;" :close-on-click-modal="false" :append-to-body="true"
|
|
|
+ :visible.sync="popoverVisible" width="20.5%">
|
|
|
+ <div class="popoverContent" style="justify-content: flex-start;">
|
|
|
+ <el-button style="margin:0.25rem" v-for="(item2,index2) in tipsBtnList" :key="index2"
|
|
|
+ @click="popoverClick(item,item2)" type="primary" size="mini" plain>{{item2.name}}</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+
|
|
|
+ <el-dialog title="批量添加车位" style="z-index: 99999;" :close-on-click-modal="false" :append-to-body="true"
|
|
|
+ :visible.sync="operateDialogShow">
|
|
|
+ <el-form>
|
|
|
+ <el-form-item label="添加数量">
|
|
|
+ <el-input v-model="num" autocomplete="off" type="number"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click="operateDialogShow = false">取 消</el-button>
|
|
|
+ <el-button type="primary" @click="operateDialogConfirm">确 定</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+
|
|
|
+ <!-- 绑定车辆 -->
|
|
|
+ <el-dialog v-if="$isNotEmpty(parkingSpaceItem)" title="绑定车辆" @close="tableShow=false" append-to-body width="50%"
|
|
|
+ :close-on-click-modal="false" :visible.sync="tableShow">
|
|
|
+ <car-table ref="car" @bindCar="bindCar"></car-table>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+<script>
|
|
|
+ import {
|
|
|
+ deepClone,
|
|
|
+ guid,
|
|
|
+ } from '@/util/util.js'
|
|
|
+ import {
|
|
|
+ saveLayout,
|
|
|
+ getLayout
|
|
|
+ } from '@/api/estate/parkingarea.js'
|
|
|
+ import VueDragResize from 'vue-drag-resize';
|
|
|
+ import operateList from "./operate-list.vue"
|
|
|
+ import more from "@/components/more.vue"
|
|
|
+ import carTable from "../dialog/car-table.vue"
|
|
|
+ import {
|
|
|
+ bindCar
|
|
|
+ } from '@/api/estate/parkingspace.js'
|
|
|
+ export default {
|
|
|
+ components: {
|
|
|
+ VueDragResize,
|
|
|
+ operateList,
|
|
|
+ more,
|
|
|
+ carTable
|
|
|
+ },
|
|
|
+ provide() {
|
|
|
+ return {
|
|
|
+ parkingLayout: this
|
|
|
+ };
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ //搜索匹配的项
|
|
|
+ searchList: [],
|
|
|
+ //绑定车辆
|
|
|
+ tableShow: false,
|
|
|
+ parkingSpaceItem: '',
|
|
|
+
|
|
|
+ //激活的项
|
|
|
+ activedIndex: -1,
|
|
|
+ enlarge: false,
|
|
|
+ enlargeItem: {},
|
|
|
+
|
|
|
+ listWidth: 0,
|
|
|
+ listHeight: 0,
|
|
|
+ //当前车场
|
|
|
+ parkingLotObj: {},
|
|
|
+ //是否显示网格
|
|
|
+ gridShow: true,
|
|
|
+ //是否允许拖拽布局
|
|
|
+ disabled: false,
|
|
|
+ //是否显示删除布局按钮
|
|
|
+ delLayoutShow: false,
|
|
|
+ //停车区域
|
|
|
+ originalParkingAreaList: "",
|
|
|
+ parkingAreaList: [],
|
|
|
+ obj: {
|
|
|
+ id: '',
|
|
|
+ name: '',
|
|
|
+ //车场id
|
|
|
+ parkingLotId: '',
|
|
|
+ parkingSpaceParams: '35,60',
|
|
|
+ parkingSpaceList: [],
|
|
|
+ show: true,
|
|
|
+ width: 200,
|
|
|
+ height: 200,
|
|
|
+ x: 10,
|
|
|
+ y: 10
|
|
|
+ },
|
|
|
+ //车位
|
|
|
+ parkingSpaceObj: {
|
|
|
+ id: '',
|
|
|
+ //车场区域id
|
|
|
+ parkingAreaId: '',
|
|
|
+ //车场id
|
|
|
+ parkingLotId: '',
|
|
|
+ //车场名
|
|
|
+ parkingLotName: '',
|
|
|
+ //车位编号
|
|
|
+ number: '',
|
|
|
+ //车辆id
|
|
|
+ carId: '',
|
|
|
+ //车牌号
|
|
|
+ carNo: '',
|
|
|
+ popoverShow: false
|
|
|
+ },
|
|
|
+ // 操作栏
|
|
|
+ num: 0,
|
|
|
+ operatePopoverItem: {},
|
|
|
+ operateDialogShow: false,
|
|
|
+ popoverVisible: false,
|
|
|
+ tipsBtnList: [{
|
|
|
+ name: '批量添加',
|
|
|
+ event: () => {
|
|
|
+ this.operateType = 0
|
|
|
+ this.operateDialogShow = true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '修改宽高',
|
|
|
+ event: () => {
|
|
|
+ this.$message.success('操作成功')
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '车位翻转',
|
|
|
+ event: () => {
|
|
|
+ this.changeParkingSpaceParams(this.operatePopoverItem, true)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ carEmptyImg() {
|
|
|
+ return (item, item1) => {
|
|
|
+ let arr = item.parkingSpaceParams.split(",")
|
|
|
+ let flag = arr[0] > arr[1]
|
|
|
+ let carEmpty = this.$isEmpty(item1.carNo)
|
|
|
+ if (flag) {
|
|
|
+ if (carEmpty) {
|
|
|
+ return '/img/test/parking2-empty.png'
|
|
|
+ } else {
|
|
|
+ return '/img/test/parking2.png'
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (carEmpty) {
|
|
|
+ return '/img/test/parking1-empty.png'
|
|
|
+ } else {
|
|
|
+ return '/img/test/parking1.png'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ editPopoverShow() {
|
|
|
+ this.parkingAreaList.forEach(item => {
|
|
|
+ item.parkingSpaceList.forEach(item1 => item1.popoverShow = false)
|
|
|
+ })
|
|
|
+ },
|
|
|
+ showPopover(data) {
|
|
|
+ let flag=data.popoverShow
|
|
|
+ this.editPopoverShow()
|
|
|
+ data.popoverShow=!flag
|
|
|
+ setTimeout(()=>{
|
|
|
+ data.popoverShow=false
|
|
|
+ },3000)
|
|
|
+ },
|
|
|
+ search(searchKey) {
|
|
|
+ this.searchList = []
|
|
|
+ this.parkingAreaList.forEach((item, index) => {
|
|
|
+ item.parkingSpaceList.forEach((item1, index1) => {
|
|
|
+ if (item1.number.indexOf(searchKey) >= 0 || item1.carNo.indexOf(searchKey) >= 0) {
|
|
|
+ let arr = [index, index1]
|
|
|
+ this.searchList.push(arr)
|
|
|
+ item1.popoverShow = true
|
|
|
+ } else {
|
|
|
+ item1.popoverShow = false
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ if (this.$isEmpty(this.searchList)) {
|
|
|
+ this.$message.info('没用找到匹配结果')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ setTimeout(() => {
|
|
|
+ this.editPopoverShow()
|
|
|
+ }, 3000)
|
|
|
+ },
|
|
|
+ async bindCar(car) {
|
|
|
+ if (this.$isEmpty(this.parkingSpaceItem)) {
|
|
|
+ this.$message.error('车位信息为空')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ let res = await bindCar(car.id, this.parkingSpaceItem.id)
|
|
|
+ if (res.data.success) {
|
|
|
+ this.$message.success('绑定成功')
|
|
|
+ this.parkingSpaceItem.carId = car.id
|
|
|
+ this.parkingSpaceItem.carNo = car.number
|
|
|
+ this.parkingSpaceItem.isUsed = 1
|
|
|
+ } else {
|
|
|
+ this.$message.error('绑定失败')
|
|
|
+ }
|
|
|
+ this.parkingSpaceItem = null
|
|
|
+ this.tableShow = false
|
|
|
+ },
|
|
|
+ enlargeAreaShow() {
|
|
|
+ let flag = false
|
|
|
+ if (this.enlarge && this.$isNotEmpty(this.enlargeItem) && this.enlargeItem.show) {
|
|
|
+ flag = true
|
|
|
+ }
|
|
|
+ return flag
|
|
|
+ },
|
|
|
+ initDone() {
|
|
|
+ this.$nextTick(function() {
|
|
|
+ this.initLayout()
|
|
|
+ })
|
|
|
+ this.getParkingArealist()
|
|
|
+ },
|
|
|
+ initLayout() {
|
|
|
+ let listEl = document.getElementById('parkingLayout');
|
|
|
+ this.listWidth = listEl.clientWidth;
|
|
|
+ this.listHeight = listEl.clientHeight;
|
|
|
+ window.addEventListener('resize', () => {
|
|
|
+ this.listWidth = listEl.clientWidth;
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getParkingArealist() {
|
|
|
+ getLayout(this.parkingLotObj.id).then(res => {
|
|
|
+ if (this.$isNotEmpty(res.data.data)) {
|
|
|
+ this.parkingAreaList = res.data.data
|
|
|
+ this.parkingAreaList.forEach(item => {
|
|
|
+ item.show = true;
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ save() {
|
|
|
+ saveLayout(this.parkingAreaList).then(res => {
|
|
|
+ if (res.data.success) {
|
|
|
+ this.$message.success('保存成功')
|
|
|
+ this.getParkingArealist()
|
|
|
+ } else {
|
|
|
+ this.$message.success('保存失败')
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ delLayout(item) {
|
|
|
+ this.$confirm("确定删除该区域?", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning"
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ item.show = false
|
|
|
+ this.$message({
|
|
|
+ type: "success",
|
|
|
+ message: "操作成功!"
|
|
|
+ });
|
|
|
+ })
|
|
|
+ },
|
|
|
+ addParkingSpace(item) {
|
|
|
+ let tmp = deepClone(this.parkingSpaceObj)
|
|
|
+ tmp.parkingAreaId = item.id
|
|
|
+ tmp.parkingLotId = this.parkingLotObj.id
|
|
|
+ tmp.parkingLotName = this.parkingLotObj.parkName
|
|
|
+ tmp.number = guid(8)
|
|
|
+ item.parkingSpaceList.push(tmp)
|
|
|
+ },
|
|
|
+ changeParkingSpaceParams(item, flag = false) {
|
|
|
+ let arr = item.parkingSpaceParams.split(',')
|
|
|
+ if (flag) {
|
|
|
+ let tmp = arr[0]
|
|
|
+ arr[0] = arr[1]
|
|
|
+ arr[1] = tmp
|
|
|
+ item.parkingSpaceParams = arr.join(',')
|
|
|
+ }
|
|
|
+ let flexStyle = arr[0] > arr[1] ? 'flex-direction: row' : 'flex-direction: column'
|
|
|
+ let parkingSpaceStyle = `width:${arr[0]}px;height:${arr[1]}px;${flexStyle}`
|
|
|
+ return parkingSpaceStyle
|
|
|
+ },
|
|
|
+ popoverClick(item, item2) {
|
|
|
+ this.operatePopoverItem = item
|
|
|
+ item2.event(item)
|
|
|
+ this.popoverVisible = false
|
|
|
+ },
|
|
|
+ operateDialogConfirm() {
|
|
|
+ let num = parseInt(this.num)
|
|
|
+ for (var i = 0; i < num; i++) {
|
|
|
+ let tmp = deepClone(this.parkingSpaceObj)
|
|
|
+ tmp.parkingLotId = this.parkingLotObj.id
|
|
|
+ tmp.parkingLotName = this.parkingLotObj.parkName
|
|
|
+ tmp.number = guid(8)
|
|
|
+ tmp.popoverShow = false
|
|
|
+ tmp.carNo = ''
|
|
|
+ this.operatePopoverItem.parkingSpaceList.push(tmp)
|
|
|
+ }
|
|
|
+ this.operateDialogShow = false
|
|
|
+ this.$forceUpdate()
|
|
|
+ this.$message.success('操作成功')
|
|
|
+ },
|
|
|
+ rectStop(newRect, index) {
|
|
|
+ this.parkingAreaList[index].width = newRect.width
|
|
|
+ this.parkingAreaList[index].height = newRect.height
|
|
|
+ this.parkingAreaList[index].x = newRect.left
|
|
|
+ this.parkingAreaList[index].y = newRect.top
|
|
|
+ },
|
|
|
+ }
|
|
|
+ }
|
|
|
+</script>
|
|
|
+
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+ .page {
|
|
|
+ background-color: #FFFFFF;
|
|
|
+ padding: 1.25rem;
|
|
|
+ position: relative;
|
|
|
+ box-sizing: border-box;
|
|
|
+ margin: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .watermark {
|
|
|
+ width: 100%;
|
|
|
+ height: 30px;
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ top: 45%;
|
|
|
+ color: #3b8ff4;
|
|
|
+ ;
|
|
|
+ text-align: center;
|
|
|
+ opacity: 0.15;
|
|
|
+ z-index: 9999999999;
|
|
|
+ font-size: 22px;
|
|
|
+ pointer-events: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .addParkingArea {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ margin: 1.875rem;
|
|
|
+ color: #3b8ff4;
|
|
|
+
|
|
|
+ i {
|
|
|
+ font-size: 3.125rem;
|
|
|
+ }
|
|
|
+
|
|
|
+ i:active {
|
|
|
+ transform: scale(1.05);
|
|
|
+ }
|
|
|
+
|
|
|
+ span {
|
|
|
+ padding-left: 0.625rem;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .bind {
|
|
|
+ margin-left: 0.625rem;
|
|
|
+ color: #3b8ff4;
|
|
|
+ text-decoration: underline;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+
|
|
|
+ .bind:active {
|
|
|
+ transform: scale(1.05);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ .delLayoutClass {
|
|
|
+ position: absolute;
|
|
|
+ right: -20px;
|
|
|
+ top: -20px;
|
|
|
+ font-weight: 800;
|
|
|
+ }
|
|
|
+
|
|
|
+ .tips {
|
|
|
+ padding: 10px;
|
|
|
+
|
|
|
+ div {
|
|
|
+ display: flex;
|
|
|
+ padding-top: 0.625rem;
|
|
|
+ font-size: 14px;
|
|
|
+ }
|
|
|
+
|
|
|
+ label {
|
|
|
+ width: 70px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ .parking-grid {
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ background-size: 20px 20px, 20px 20px;
|
|
|
+ background-image: linear-gradient(rgba(245, 245, 245, .2) 1px, transparent 0), linear-gradient(90deg, rgba(245, 245, 245, .2) 1px, transparent 0);
|
|
|
+ overflow: hidden;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+
|
|
|
+ .parking-layout {
|
|
|
+ margin-top: 1.25rem;
|
|
|
+ width: 100%;
|
|
|
+ height: 660px;
|
|
|
+ position: relative;
|
|
|
+ border: 1px solid #e5e5e5;
|
|
|
+ background-color: #052252;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ .parking-box {
|
|
|
+ z-index: 99;
|
|
|
+ position: relative;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ box-sizing: border-box;
|
|
|
+ display: flex;
|
|
|
+ padding: 0.3125rem 0;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ background: #f5f5f5;
|
|
|
+ overflow: scroll;
|
|
|
+ }
|
|
|
+
|
|
|
+ .car {
|
|
|
+ box-sizing: border-box;
|
|
|
+ margin: 0.3125rem;
|
|
|
+ background-color: #c4e1ff;
|
|
|
+ color: #052252;
|
|
|
+ z-index: 99999999;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ justify-content: space-around;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ img {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .popoverContent {
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+</style>
|