|
@@ -1,229 +1,354 @@
|
|
|
<template>
|
|
|
- <div class="sub-container">
|
|
|
- <div class="left-pane">
|
|
|
- <el-input placeholder="请输入关键字" suffix-icon="el-icon-search" v-model="filterText"></el-input>
|
|
|
- <el-tree ref="tree" :data="data" :props="defaultProps" node-key="id" default-expand-all
|
|
|
- :filter-node-method="filterNode" @node-click="handleNodeClick">
|
|
|
- <span slot-scope="{node,data}">
|
|
|
- <el-image :src="data.url"></el-image>
|
|
|
- <span style="padding-left: 10px; vertical-align: text-bottom;">{{ node.label }}</span>
|
|
|
- <span class="operate_btns">
|
|
|
- <dropdown :events="data.id ? menuEvents : subMenuEvents" :data="{ node, data }"
|
|
|
- @itemClick="dropDownClick"></dropdown>
|
|
|
- </span>
|
|
|
- </span>
|
|
|
- </el-tree>
|
|
|
- </div>
|
|
|
- <div class="right-pane">
|
|
|
- <div>
|
|
|
- <p class="info">选择设备</p>
|
|
|
- </div>
|
|
|
- <div style="display: flex; margin-left: 20px; height: 80%;">
|
|
|
- <div>
|
|
|
- <el-tree :data="data1" :default-checked-keys="[1]" :props="defaultProps" show-checkbox node-key="id"
|
|
|
- @node-click="handleNodeClick">
|
|
|
- </el-tree>
|
|
|
- <el-tree :data="data2" :default-checked-keys="[1]" :props="defaultProps" show-checkbox node-key="id"
|
|
|
- @node-click="handleNodeClick">
|
|
|
- </el-tree>
|
|
|
- </div>
|
|
|
- <div style="margin-left: 200px">
|
|
|
- <el-tree :data="data3" :default-checked-keys="[1]" :props="defaultProps" show-checkbox node-key="id"
|
|
|
- @node-click="handleNodeClick">
|
|
|
- </el-tree>
|
|
|
- <el-tree :data="data4" :props="defaultProps" show-checkbox node-key="id" @node-click="handleNodeClick">
|
|
|
- </el-tree>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="bottom">
|
|
|
- <el-button class="delete_btn">删除</el-button>
|
|
|
- <el-button>更新默认配置</el-button>
|
|
|
- <el-button>更新可配置设备</el-button>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ <div class="sub-container">
|
|
|
+ <div class="left-pane">
|
|
|
+ <el-input
|
|
|
+ placeholder="请输入关键字"
|
|
|
+ suffix-icon="el-icon-search"
|
|
|
+ v-model="filterText"
|
|
|
+ ></el-input>
|
|
|
+ <div class="tree_container">
|
|
|
+ <el-tree
|
|
|
+ ref="tree"
|
|
|
+ :data="floorList"
|
|
|
+ :props="defaultProps"
|
|
|
+ node-key="id"
|
|
|
+ default-expand-all
|
|
|
+ :filter-node-method="filterNode"
|
|
|
+ @node-click="handleNodeClick"
|
|
|
+ >
|
|
|
+ <span slot-scope="{node,data}">
|
|
|
+ <el-image :src="data.url"></el-image>
|
|
|
+ <span
|
|
|
+ style="padding-left: 10px; vertical-align: text-bottom;"
|
|
|
+ :title="node.label"
|
|
|
+ >{{ node.label }}</span>
|
|
|
+ <span class="operate_btns">
|
|
|
+ <!-- <dropdown
|
|
|
+ :events="data.id ? menuEvents : subMenuEvents"
|
|
|
+ :data="{ node, data }"
|
|
|
+ ></dropdown> -->
|
|
|
+ <!-- @itemClick="dropDownClick($event)" -->
|
|
|
+ </span>
|
|
|
+ </span>
|
|
|
+ </el-tree>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </div>
|
|
|
+ <div class="right-pane">
|
|
|
+ <div v-if="selectedFloor!=null">
|
|
|
+ <el-breadcrumb
|
|
|
+ class="info"
|
|
|
+ separator-class="el-icon-arrow-right"
|
|
|
+ v-if="Object.getOwnPropertyNames(selectedFloor).length>0"
|
|
|
+ >
|
|
|
+ <el-breadcrumb-item>{{selectedFloor.floor}}F</el-breadcrumb-item>
|
|
|
+ <el-breadcrumb-item>{{selectedFloor.label}}</el-breadcrumb-item>
|
|
|
+ <el-breadcrumb-item>选择设备</el-breadcrumb-item>
|
|
|
+ </el-breadcrumb>
|
|
|
+ </div>
|
|
|
+ <div v-if="deviceConfig.length > 0">
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-checkbox v-model="deviceConfig[0].checked">{{deviceConfig[0].label}}</el-checkbox>
|
|
|
+ <div class="mark"></div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-checkbox v-model="deviceConfig[1].checked">{{deviceConfig[1].label}}</el-checkbox>
|
|
|
+ <div class="mark"></div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-checkbox v-model="deviceConfig[2].checked">{{deviceConfig[2].label}}</el-checkbox>
|
|
|
+ <div class="mark"></div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-checkbox v-model="deviceConfig[3].checked">{{deviceConfig[3].label}}</el-checkbox>
|
|
|
+ <div class="mark"></div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ <div class="bottom">
|
|
|
+ <el-button
|
|
|
+ class="delete_btn"
|
|
|
+ @click="deletePZ"
|
|
|
+ >删除</el-button>
|
|
|
+ <!-- <el-button @click="updateDefaultConfig">更新默认配置</el-button> -->
|
|
|
+ <el-button @click="updateDevice">更新可配置设备</el-button>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import dropdown from '@/components/Dropdown/index';
|
|
|
+import dropdown from "@/components/Dropdown/index2";
|
|
|
+import api from "@/api/systemConfig/api";
|
|
|
+
|
|
|
+import louceng from "@/assets/tree/strategy/louceng@3x.png";
|
|
|
+import huiyishi from "@/assets/tree/strategy/huiyishi@3x.png";
|
|
|
+
|
|
|
export default {
|
|
|
- components: {
|
|
|
- dropdown
|
|
|
+ components: {
|
|
|
+ dropdown,
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ filterText: "",
|
|
|
+ floorList: [],
|
|
|
+ deviceConfig: [],
|
|
|
+ selectedFloor: null,
|
|
|
+ menuEvents: [{ label: "新建", funcName: "addNode" }],
|
|
|
+ subMenuEvents: [
|
|
|
+ { label: "新建", funcName: "addNode" },
|
|
|
+ { label: "上移", funcName: "moveUp" },
|
|
|
+ { label: "下移", funcName: "moveDown" },
|
|
|
+ { label: "编辑", funcName: "editNode" },
|
|
|
+ { label: "删除", funcName: "removeNode" },
|
|
|
+ ],
|
|
|
+ defaultProps: {
|
|
|
+ children: "children",
|
|
|
+ label: "label",
|
|
|
+ },
|
|
|
+ };
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.getList();
|
|
|
+ },
|
|
|
+ watch: {
|
|
|
+ filterText(val) {
|
|
|
+ this.$refs.tree.filter(val);
|
|
|
},
|
|
|
- data() {
|
|
|
- return {
|
|
|
- filterText: '',
|
|
|
- data: [
|
|
|
- {
|
|
|
- id: 1,
|
|
|
- label: '3F',
|
|
|
- url: require('@/assets/tree/strategy/louceng@3x.png'),
|
|
|
- children: [{
|
|
|
- url: require('@/assets/tree/strategy/huiyishi@3x.png'),
|
|
|
- label: '301会议室',
|
|
|
- }, {
|
|
|
- url: require('@/assets/tree/strategy/huiyishi@3x.png'),
|
|
|
- label: '302会议室'
|
|
|
- }, {
|
|
|
- url: require('@/assets/tree/strategy/huiyishi@3x.png'),
|
|
|
- label: '303会议室'
|
|
|
- }]
|
|
|
- },
|
|
|
- {
|
|
|
- id: 2,
|
|
|
- label: '4F',
|
|
|
- url: require('@/assets/tree/strategy/louceng@3x.png'),
|
|
|
- children: [{
|
|
|
- url: require('@/assets/tree/strategy/huiyishi@3x.png'),
|
|
|
- label: '401会议室',
|
|
|
- }, {
|
|
|
- url: require('@/assets/tree/strategy/huiyishi@3x.png'),
|
|
|
- label: '402会议室'
|
|
|
- }, {
|
|
|
- url: require('@/assets/tree/strategy/huiyishi@3x.png'),
|
|
|
- label: '403会议室'
|
|
|
- }]
|
|
|
- }
|
|
|
- ],
|
|
|
- data1: [{
|
|
|
- id: 1,
|
|
|
- label: '闸机系统-人脸门禁设备',
|
|
|
- children: [{
|
|
|
-
|
|
|
- }]
|
|
|
- }],
|
|
|
- data2: [{
|
|
|
- id: 1,
|
|
|
- label: '能源系统-灯光控制设备',
|
|
|
- children: [{
|
|
|
-
|
|
|
- }]
|
|
|
- }],
|
|
|
- data3: [{
|
|
|
- id: 1,
|
|
|
- label: '能源系统-空调控制设备',
|
|
|
- children: [{
|
|
|
-
|
|
|
- }]
|
|
|
- }],
|
|
|
- data4: [{
|
|
|
- label: '能源系统-灯光控制设备',
|
|
|
- children: [{
|
|
|
-
|
|
|
- }]
|
|
|
- }],
|
|
|
- menuEvents: [
|
|
|
- { label: '新建', funcName: 'addNode' }
|
|
|
- ],
|
|
|
- subMenuEvents: [
|
|
|
- { label: '新建', funcName: 'addNode' },
|
|
|
- { label: '上移', funcName: 'moveUp' },
|
|
|
- { label: '下移', funcName: 'moveDown' },
|
|
|
- { label: '编辑', funcName: 'editNode' },
|
|
|
- { label: '删除', funcName: 'removeNode' }
|
|
|
- ],
|
|
|
- defaultProps: {
|
|
|
- children: 'children',
|
|
|
- label: 'label'
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ getList() {
|
|
|
+ let that = this;
|
|
|
+ api
|
|
|
+ .getFloorList()
|
|
|
+ .then((result) => {
|
|
|
+ let obj = [];
|
|
|
+ for (const key in result.data.data) {
|
|
|
+ if (Object.hasOwnProperty.call(result.data.data, key)) {
|
|
|
+ const ele = result.data.data[key];
|
|
|
+ let children = ele.map(function (str) {
|
|
|
+ return {
|
|
|
+ floor: key,
|
|
|
+ url: huiyishi,
|
|
|
+ label: str,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ obj.push({
|
|
|
+ id: key,
|
|
|
+ label: key + "F",
|
|
|
+ url: louceng,
|
|
|
+ children: children,
|
|
|
+ });
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
+ that.floorList = obj;
|
|
|
+ })
|
|
|
+ .catch((err) => {});
|
|
|
},
|
|
|
- watch: {
|
|
|
- filterText(val) {
|
|
|
- this.$refs.tree.filter(val);
|
|
|
- }
|
|
|
+ filterNode(value, data) {
|
|
|
+ if (!value) return true;
|
|
|
+ return data.label.indexOf(value) !== -1;
|
|
|
},
|
|
|
- methods: {
|
|
|
- filterNode(value, data) {
|
|
|
- if (!value) return true;
|
|
|
- return data.label.indexOf(value) !== -1;
|
|
|
+ handleNodeClick(data) {
|
|
|
+ if (!data.floor) return;
|
|
|
+ let arr = [
|
|
|
+ {
|
|
|
+ label: "闸机系统-人脸门禁设备",
|
|
|
+ checked: true,
|
|
|
},
|
|
|
- handleNodeClick(data) {
|
|
|
-
|
|
|
+ {
|
|
|
+ label: "能源系统-灯光控制设备",
|
|
|
+ checked: true,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "能源系统-空调控制设备",
|
|
|
+ checked: true,
|
|
|
},
|
|
|
- dropDownClick(funcName, data) {
|
|
|
+ {
|
|
|
+ label: "能源系统-灯光控制设备",
|
|
|
+ checked: false,
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ arr.map(function (item) {
|
|
|
+ item.checked = parseInt(Math.random() * 10) % 2 == 0 ? true : false;
|
|
|
+ return item;
|
|
|
+ });
|
|
|
+ this.deviceConfig = arr;
|
|
|
+ this.selectedFloor = data;
|
|
|
+ },
|
|
|
+ // dropDownClick(event, funcName, data) {
|
|
|
+ // event.stopPropagation();
|
|
|
+ // },
|
|
|
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
+ updateDefaultConfig() {},
|
|
|
+ updateDevice() {
|
|
|
+ let that = this;
|
|
|
+ const loading = this.$loading({
|
|
|
+ lock: true,
|
|
|
+ text: "更新中,请稍后!",
|
|
|
+ spinner: "el-icon-loading",
|
|
|
+ background: "rgba(0, 0, 0, 0.7)",
|
|
|
+ customClass: "systemConfigLoading",
|
|
|
+ });
|
|
|
+ setTimeout(() => {
|
|
|
+ loading.close();
|
|
|
+ that.deviceConfig = JSON.parse(JSON.stringify(that.deviceConfig));
|
|
|
+ }, 2000);
|
|
|
+ },
|
|
|
+ deletePZ() {
|
|
|
+ this.$confirm("此操作将删除该会议室配置, 是否继续?", "提示", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning",
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ this.$message({
|
|
|
+ type: "success",
|
|
|
+ message: "删除成功!",
|
|
|
+ });
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ this.$message({
|
|
|
+ type: "info",
|
|
|
+ message: "已取消删除",
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
</script>
|
|
|
|
|
|
<style lang="less" scoped>
|
|
|
.sub-container {
|
|
|
- position: relative;
|
|
|
- height: calc(100% - 65px);
|
|
|
- line-height: 20px;
|
|
|
- background-color: rgba(255, 255, 255, 1);
|
|
|
- color: rgba(16, 16, 16, 1);
|
|
|
- font-size: 14px;
|
|
|
- text-align: center;
|
|
|
- display: flex;
|
|
|
- //box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.15);
|
|
|
-
|
|
|
- .left-pane {
|
|
|
- width: 300px;
|
|
|
- padding: 15px;
|
|
|
- height: calc(100% - 30px);
|
|
|
-
|
|
|
- .el-tree {
|
|
|
- margin-top: 10px;
|
|
|
- height: calc(98% - 30px);
|
|
|
- background-color: #FAFAFA;
|
|
|
-
|
|
|
- /deep/.el-tree-node__content {
|
|
|
- align-items: center;
|
|
|
- height: 30px;
|
|
|
- cursor: pointer;
|
|
|
- font-size: 16px;
|
|
|
- position: relative;
|
|
|
- color: #999999;
|
|
|
- padding-top: 10px;
|
|
|
- padding-left: 30px !important;
|
|
|
-
|
|
|
- .operate_btns {
|
|
|
- position: absolute;
|
|
|
- right: 20px;
|
|
|
- display: none;
|
|
|
- }
|
|
|
-
|
|
|
- &:hover,
|
|
|
- :focus-within {
|
|
|
- background-color: #f7fbff;
|
|
|
-
|
|
|
- .operate_btns {
|
|
|
- display: inline;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ position: relative;
|
|
|
+ width: 100%;
|
|
|
+ height: calc(100% - 90px);
|
|
|
+ line-height: 20px;
|
|
|
+ background-color: rgba(255, 255, 255, 1);
|
|
|
+ color: rgba(16, 16, 16, 1);
|
|
|
+ font-size: 14px;
|
|
|
+ text-align: center;
|
|
|
+ display: inline-block;
|
|
|
+ vertical-align: top;
|
|
|
+ //box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.15);
|
|
|
+
|
|
|
+ .left-pane {
|
|
|
+ width: 300px;
|
|
|
+ padding: 15px;
|
|
|
+ height: calc(100% - 30px);
|
|
|
+ display: inline-block;
|
|
|
+
|
|
|
+ .tree_container {
|
|
|
+ overflow: hidden;
|
|
|
+ overflow-y: auto;
|
|
|
+ height: calc(98% - 30px);
|
|
|
+ .el-tree {
|
|
|
+ margin-top: 10px;
|
|
|
+ background-color: #fafafa;
|
|
|
+
|
|
|
+ /deep/.el-tree-node__content {
|
|
|
+ align-items: center;
|
|
|
+ height: 30px;
|
|
|
+ cursor: pointer;
|
|
|
+ font-size: 16px;
|
|
|
+ position: relative;
|
|
|
+ color: #999999;
|
|
|
+ padding-top: 10px;
|
|
|
+ padding-left: 5px !important;
|
|
|
|
|
|
- /deep/.el-tree-node__children {
|
|
|
- .el-tree-node__content {
|
|
|
- padding-left: 60px !important;
|
|
|
- }
|
|
|
+ .operate_btns {
|
|
|
+ position: absolute;
|
|
|
+ right: 20px;
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:hover,
|
|
|
+ :focus-within {
|
|
|
+ background-color: #f7fbff;
|
|
|
+
|
|
|
+ .operate_btns {
|
|
|
+ display: inline;
|
|
|
}
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- .right-pane {
|
|
|
- .info {
|
|
|
- text-align: left;
|
|
|
- padding: 10px;
|
|
|
- font-size: 25px;
|
|
|
+ /deep/.el-tree-node__children {
|
|
|
+ .el-tree-node__content {
|
|
|
+ padding-left: 60px !important;
|
|
|
+ }
|
|
|
}
|
|
|
+ }
|
|
|
}
|
|
|
- .bottom{
|
|
|
- .el-button{
|
|
|
- width: 200px;
|
|
|
- height: 30px;
|
|
|
- color: #fff;
|
|
|
- padding: 3px;
|
|
|
- margin-left: 50px;
|
|
|
- font-size: 14px;
|
|
|
- background: #3da0d6;
|
|
|
+ }
|
|
|
+
|
|
|
+ .right-pane {
|
|
|
+ display: inline-block;
|
|
|
+ vertical-align: top;
|
|
|
+ width: calc(100% - 330px);
|
|
|
+ height: 100%;
|
|
|
+ min-width: 600px;
|
|
|
+ position: relative;
|
|
|
+ .info {
|
|
|
+ text-align: left;
|
|
|
+ padding: 10px;
|
|
|
+ font-size: 25px;
|
|
|
+ margin-bottom: 30px;
|
|
|
+ }
|
|
|
+ .el-row {
|
|
|
+ text-align: left;
|
|
|
+ padding-left: 60px;
|
|
|
+ box-sizing: border-box;
|
|
|
+ .el-col {
|
|
|
+ margin-bottom: 20px;
|
|
|
+ .mark {
|
|
|
+ width: 92px;
|
|
|
+ height: 92px;
|
|
|
+ margin-top: 10px;
|
|
|
+ margin-left: 42px;
|
|
|
}
|
|
|
- .delete_btn{
|
|
|
- background: #B3B3B3;
|
|
|
- }
|
|
|
+ }
|
|
|
+
|
|
|
+ &:nth-child(1) .el-col:nth-child(1) .mark {
|
|
|
+ background: url("~@/assets/systemConfig/rlmj.png") center center / 100%
|
|
|
+ 100% no-repeat;
|
|
|
+ }
|
|
|
+ &:nth-child(1) .el-col:nth-child(2) .mark {
|
|
|
+ background: url("~@/assets/systemConfig/dgkz.png") center center / 100%
|
|
|
+ 100% no-repeat;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:nth-child(2) .el-col:nth-child(1) .mark {
|
|
|
+ background: url("~@/assets/systemConfig/ktkz.png") center center / 100%
|
|
|
+ 100% no-repeat;
|
|
|
+ }
|
|
|
+ &:nth-child(2) .el-col:nth-child(2) .mark {
|
|
|
+ background: url("~@/assets/systemConfig/xfxt.png") center center / 100%
|
|
|
+ 100% no-repeat;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .bottom {
|
|
|
+ width: 100%;
|
|
|
+ position: absolute;
|
|
|
+ bottom: 0px;
|
|
|
+ .el-button {
|
|
|
+ width: 200px;
|
|
|
+ height: 30px;
|
|
|
+ color: #fff;
|
|
|
+ padding: 3px;
|
|
|
+ margin-left: 50px;
|
|
|
+ font-size: 14px;
|
|
|
+ background: #3da0d6;
|
|
|
+ &:first-child {
|
|
|
+ margin-left: 0px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .delete_btn {
|
|
|
+ background: #b3b3b3;
|
|
|
}
|
|
|
+ }
|
|
|
}
|
|
|
</style>
|