施工管控

This commit is contained in:
cwchen 2024-08-30 17:51:31 +08:00
parent 6c4b5da2b8
commit 66364232e1
5 changed files with 148 additions and 50 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -648,7 +648,7 @@
staticStyle: { staticStyle: {
color: "#fff", color: "#fff",
position: "absolute", position: "absolute",
top: "calc(50% - 13px)", top: "calc(75% - 13px)",
"text-align": "center", "text-align": "center",
width: "100%", width: "100%",
}, },
@ -34480,7 +34480,7 @@
staticStyle: { staticStyle: {
color: "#fff", color: "#fff",
position: "absolute", position: "absolute",
top: "calc(50% - 13px)", top: "calc(75% - 13px)",
"text-align": "center", "text-align": "center",
width: "100%", width: "100%",
}, },

View File

@ -46,21 +46,29 @@
<img :src="battery3" alt="电量" v-if="parseFloat(item.electricQuantity) < 20"> <img :src="battery3" alt="电量" v-if="parseFloat(item.electricQuantity) < 20">
<span style="margin-left: 5px;">{{ item.electricQuantity }}%</span> <span style="margin-left: 5px;">{{ item.electricQuantity }}%</span>
</div> </div>
<div class="jd-dev-img layout"><img :src="config" alt="配置" @click.stop="clickJdDev(item.devId)"></div> <div class="jd-dev-img layout"><img :src="config" alt="配置" @click.stop="clickJdDev(item.devId, item.devCode)">
</div>
</div> </div>
</div> </div>
<div class="no-data-box layout" v-if="!isShow2"> <div class="no-data-box layout" v-if="!isShow2">
<el-empty description="暂无数据"></el-empty> <el-empty description="暂无数据"></el-empty>
</div> </div>
<div class="warn-info"> <div class="warn-info">
<el-table :data="tableData" style="width: 100%" max-height="400"> <div class="warn-title">
<el-table-column prop="devName" label="设备名称" align="center"> 预警信息
</el-table-column> </div>
<el-table-column prop="warnTime" label="告警时间" align="center"> <div class="infinite-list-wrapper" v-if="isShow3">
</el-table-column> <ul class="list" v-infinite-scroll="loadWarnInfoData" infinite-scroll-disabled="busy"
<el-table-column prop="warnContent" label="告警内容" align="center"> infinite-scroll-distance="50">
</el-table-column> <li v-for="(item, index) in tableData" :key="index" class="warn-li layout">
</el-table> <span class="layout">{{ item.devName }}</span>
<span class="layout">{{ item.warnTime }}</span>
<span class="layout">{{ item.warnContent }}</span>
</li>
<p v-if="loading" style="text-align: center;">加载中...</p>
</ul>
</div>
<el-empty v-if="!isShow3" description="暂无预警信息"></el-empty>
</div> </div>
</div> </div>
<el-dialog title="近电感应配置" :visible.sync="dialogVisible" :append-to-body="true" width="700px" <el-dialog title="近电感应配置" :visible.sync="dialogVisible" :append-to-body="true" width="700px"
@ -68,21 +76,22 @@
<el-form ref="form" :model="form" :rules="rules"> <el-form ref="form" :model="form" :rules="rules">
<div class="form-box"> <div class="form-box">
<div v-for="(data, index) in form.configItems" :key="index"> <div v-for="(data, index) in form.configItems" :key="index">
<h3>配置{{ index + 1 }}</h3> <h3>配置</h3>
<el-form-item label="线路属性"> <!-- <h3>配置{{ index + 1 }}</h3> -->
<!-- <el-form-item label="线路属性">
<el-radio-group v-model="data.configType"> <el-radio-group v-model="data.configType">
<el-radio v-for="item in configTypeArr" :label="item.id" :key="item.id" <el-radio v-for="item in configTypeArr" :label="item.id" :key="item.id"
@change="chooseConfigType(index, data.configType)">{{ item.name }}</el-radio> @change="chooseConfigType(index, data.configType)">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item> -->
<el-form-item label="电压等级"> <!-- <el-form-item label="电压等级">
<el-radio-group v-model="data.voltageLevel" v-if="data.configType === 'communication'"> <el-radio-group v-model="data.voltageLevel" v-if="data.configType === 'communication'">
<el-radio v-for="item in jlArr" :label="item.id" :key="item.id">{{ item.name }}</el-radio> <el-radio v-for="item in jlArr" :label="item.id" :key="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
<el-radio-group v-model="data.voltageLevel" v-if="data.configType === 'direct_current'"> <el-radio-group v-model="data.voltageLevel" v-if="data.configType === 'direct_current'">
<el-radio v-for="item in zlArr" :label="item.id" :key="item.id">{{ item.name }}</el-radio> <el-radio v-for="item in zlArr" :label="item.id" :key="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item> -->
<el-form-item label="报警距离" :prop="'configItems.' + index + '.distance'" :rules="[ <el-form-item label="报警距离" :prop="'configItems.' + index + '.distance'" :rules="[
{ {
required: true, message: '报警距离不能为空', trigger: 'blur' required: true, message: '报警距离不能为空', trigger: 'blur'
@ -93,19 +102,21 @@
trigger: 'blur' trigger: 'blur'
} }
]"> ]">
<el-col :span="12"> <el-col :span="20">
<el-input v-model="data.distance"></el-input> <el-input v-model="data.distance" maxlength="5"></el-input>
</el-col> </el-col>
<el-col :span="5" style="margin-left: 10px;"><el-button type="danger" plain <!-- <el-col :span="5" style="margin-left: 10px;">
@click.prevent="removeConfig(data)"><i class="el-icon-delete"></i></el-button></el-col> <el-button type="danger" plain
@click.prevent="removeConfig(data)"><i class="el-icon-delete"></i></el-button>
</el-col> -->
</el-form-item> </el-form-item>
<hr> <!-- <hr> -->
</div> </div>
</div> </div>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确定</el-button> <el-button type="primary" @click="submitForm">确定</el-button>
<el-button type="primary" @click="addConfigItem">添加配置</el-button> <!-- <el-button type="primary" @click="addConfigItem">添加配置</el-button> -->
<el-button @click="closeConfigItem">取消</el-button> <el-button @click="closeConfigItem">取消</el-button>
</div> </div>
</el-dialog> </el-dialog>
@ -133,13 +144,15 @@ export default {
isShow: false, isShow: false,
// //
isShow2: false, isShow2: false,
//
isShow3: true,
// 线 // 线
configTypeArr: [], configTypeArr: [],
// //
jlArr: [], jlArr: [],
// //
zlArr: [], zlArr: [],
loading: false, // loading: false,
// //
battery1: require('../../../../assets/images/battery1.png'), battery1: require('../../../../assets/images/battery1.png'),
battery2: require('../../../../assets/images/battery2.png'), battery2: require('../../../../assets/images/battery2.png'),
@ -152,6 +165,7 @@ export default {
// //
form: { form: {
devId: null, devId: null,
devCode: null,
configItems: [], configItems: [],
}, },
// //
@ -160,16 +174,26 @@ export default {
nocheckStyle: ['dev-info-box', 'layout', 'nocheck'], nocheckStyle: ['dev-info-box', 'layout', 'nocheck'],
checkStyle: ['dev-info-box', 'layout', 'check'], checkStyle: ['dev-info-box', 'layout', 'check'],
warnStyle: ['dev-info-box', 'layout', 'warn'], warnStyle: ['dev-info-box', 'layout', 'warn'],
//
loading: false,
//
isHasData: true,
busy: true,
//
queryParams: {
pageNum: 0,
pageSize: 10
},
}; };
}, },
created() { created() {
this.laodDzWarnList(); this.laodDzWarnList();
this.loadJdList(); this.loadJdList();
this.loadJdWarnList();
}, },
mounted() { mounted() {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.iframePage.src = this.htmlContent; this.$refs.iframePage.src = this.htmlContent;
this.busy = false;
}) })
}, },
methods: { methods: {
@ -222,13 +246,40 @@ export default {
}).catch(() => { }) }).catch(() => { })
}, },
/* 加载近电感应设备预警信息 */ /* 加载近电感应设备预警信息 */
loadJdWarnList() { //
loadWarnInfoData() {
if (!this.isHasData) {
return;
}
this.queryParams.pageNum = this.queryParams.pageNum + 1;
this.loading = true;
this.busy = true;
getJdWarnList(this.queryParams).then(res => {
const data = res.data;
if (data && data.length > 0) {
data.forEach(item => {
this.tableData.push(item);
})
} else {
this.isHasData = false;
if(this.queryParams.pageNum === 1){
this.isShow3 = false;
}
}
this.loading = false;
this.busy = false;
}).catch(res => {
this.loading = false;
this.busy = false;
});
},
/* loadJdWarnList() {
let params = {}; let params = {};
getJdWarnList(params).then((res) => { getJdWarnList(params).then((res) => {
const data = res.data const data = res.data
this.tableData = data; this.tableData = data;
}).catch(() => { }) }).catch(() => { })
}, }, */
/* 加载线路属性 */ /* 加载线路属性 */
async loadLineStats() { async loadLineStats() {
let loading = this.$loading({ let loading = this.$loading({
@ -292,8 +343,9 @@ export default {
this.laodDzWarnList(); this.laodDzWarnList();
}, },
/* 近电感应设备点击事件 */ /* 近电感应设备点击事件 */
clickJdDev(id) { clickJdDev(id, devCode) {
this.form.devId = id; this.form.devId = id;
this.form.devCode = devCode;
this.loadLineStats(); this.loadLineStats();
}, },
// //
@ -328,6 +380,7 @@ export default {
closeConfigItem() { closeConfigItem() {
this.form.configItems.splice(0); this.form.configItems.splice(0);
this.form.devId = null; this.form.devId = null;
this.form.devCode = null;
this.dialogVisible = false; this.dialogVisible = false;
}, },
// 线 // 线
@ -352,6 +405,7 @@ export default {
} }
const obj = { const obj = {
'devId': this.form.devId, 'devId': this.form.devId,
'devCode': this.form.devCode,
'configItems': this.form.configItems 'configItems': this.form.configItems
} }
configJdDevice(obj).then((res) => { configJdDevice(obj).then((res) => {
@ -549,7 +603,7 @@ export default {
.dev-config { .dev-config {
width: 100%; width: 100%;
max-height: 300px; height: 200px;
overflow-y: auto; overflow-y: auto;
border: 1px solid #cccccc; border: 1px solid #cccccc;
border-radius: 6px; border-radius: 6px;
@ -586,9 +640,30 @@ export default {
.warn-info { .warn-info {
width: 100%; width: 100%;
margin-top: 10px; margin-top: 10px;
min-height: calc(100% - 300px); height: calc(100% - 220px);
max-height: calc(100% - 150px); }
overflow-y: auto;
.warn-li {
width: 100%;
height: 60px;
border-bottom: 1px solid #cccccc;
}
.warn-li span {
width: 33.33%;
height: 100%;
letter-spacing: 1px;
}
ul {
padding-inline-start: 0;
margin-block-start: 0;
margin-block-end: 0;
}
.infinite-list-wrapper {
height: 96%;
overflow: auto;
} }
.form-box { .form-box {

View File

@ -6,7 +6,7 @@
<div class="content tree"> <div class="content tree">
<el-tree :data="treeData" icon="el-icon-search" node-key="id" :default-expanded-keys="idArr" <el-tree :data="treeData" icon="el-icon-search" node-key="id" :default-expanded-keys="idArr"
@node-click="handleNodeClick" :render-content="renderContent" style="font-size: 15px;letter-spacing: 1px;" @node-click="handleNodeClick" :render-content="renderContent" style="font-size: 15px;letter-spacing: 1px;"
ref="tree" :filter-node-method="filterNode" :highlight-current="true" /> ref="tree" :filter-node-method="filterNode" :highlight-current="true" :expand-on-click-node="false" />
</div> </div>
</div> </div>
<div class="center"> <div class="center">
@ -306,12 +306,8 @@ export default {
keyword2: "", keyword2: "",
// //
teamTreeData: [], teamTreeData: [],
// //
intervalTime: 1, checkTeamId: null
//
provingTypeRadioValue: "1",
provingTimeValue: [''],
}; };
}, },
created() { created() {
@ -343,7 +339,11 @@ export default {
this.treeData = treeData this.treeData = treeData
// //
treeData.forEach(item => { treeData.forEach(item => {
this.idArr.push(item.id); const children = item.children;
children.forEach(child => {
//
this.idArr.push(child.id);
})
}) })
} }
}).catch(res => { }).catch(res => {
@ -353,7 +353,7 @@ export default {
/* 人员树过滤 */ /* 人员树过滤 */
filterNode(value, data, node) { filterNode(value, data, node) {
if (!value) { if (!value) {
if (node.level == 1) { if (node.level == 1 || node.level == 2) {
node.expanded = true node.expanded = true
} else { } else {
node.expanded = false node.expanded = false
@ -411,7 +411,7 @@ export default {
const teamTreeData = res.data; const teamTreeData = res.data;
if (teamTreeData && teamTreeData.length > 0) { if (teamTreeData && teamTreeData.length > 0) {
this.teamTreeData = teamTreeData this.teamTreeData = teamTreeData
// //
teamTreeData.forEach(item => { teamTreeData.forEach(item => {
this.idArr2.push(item.id); this.idArr2.push(item.id);
}) })
@ -495,7 +495,7 @@ export default {
this.dialogVisible2 = false this.dialogVisible2 = false
}, },
// //
loadPersonsInfo(params) { loadPersonsInfo(params, personData) {
getPersonsInfo(params).then((res) => { getPersonsInfo(params).then((res) => {
const data = res.data; const data = res.data;
if (data) { if (data) {
@ -524,6 +524,9 @@ export default {
this.addPersonMarker(item); this.addPersonMarker(item);
} }
} }
if (personData) {
this.clickMarker(personData);
}
} }
} }
}).catch((res) => { }) }).catch((res) => { })
@ -610,13 +613,26 @@ export default {
'id': towerId, 'id': towerId,
'teamId': teamId 'teamId': teamId
} }
this.loadPersonsInfo(obj); this.checkTeamId = teamId;
this.loadPersonsInfo(obj, null);
} else if (node.level === 4) { } else if (node.level === 4) {
this.isTower = false; this.isTower = false;
this.isTeam = false; this.isTeam = false;
this.isPerson = true; this.isPerson = true;
// const teamId = parseInt(data.parentId.replace('team-', ''));
this.clickMarker(data); const towerId = data.gtId;
if (!this.checkTeamId || this.checkTeamId !== teamId) {
this.removeOverlay();
const obj = {
'id': towerId,
'teamId': teamId
}
this.checkTeamId = teamId;
this.loadPersonsInfo(obj, data);
} else {
//
this.clickMarker(data);
}
} else { } else {
this.isTower = false; this.isTower = false;
this.isTeam = false; this.isTeam = false;
@ -711,7 +727,7 @@ export default {
'id': this.id, 'id': this.id,
'teamId': this.teamId 'teamId': this.teamId
} }
this.loadPersonsInfo(obj); this.loadPersonsInfo(obj, null);
}, },
// //
loadGj() { loadGj() {
@ -900,7 +916,7 @@ export default {
.personManage .left { .personManage .left {
width: 20%; width: 22%;
height: 100%; height: 100%;
padding: 0 0.5%; padding: 0 0.5%;
box-sizing: border-box; box-sizing: border-box;
@ -913,7 +929,7 @@ export default {
} }
.personManage .center { .personManage .center {
width: 58%; width: 54%;
height: 100%; height: 100%;
} }
@ -931,7 +947,7 @@ export default {
} }
.personManage .right { .personManage .right {
width: 20%; width: 22%;
height: 100%; height: 100%;
} }

View File

@ -106,7 +106,7 @@
<!-- 预警信息 --> <!-- 预警信息 -->
<div class="right"> <div class="right">
<h4>预警信息</h4> <h4>预警信息</h4>
<div class="infinite-list-wrapper"> <div class="infinite-list-wrapper" v-if="isShow3">
<ul class="list" v-infinite-scroll="loadWarnInfoData" infinite-scroll-disabled="busy" <ul class="list" v-infinite-scroll="loadWarnInfoData" infinite-scroll-disabled="busy"
infinite-scroll-distance="50"> infinite-scroll-distance="50">
<li v-for="(item, index) in warnInfoArr" :key="index" class="warn-li layout"> <li v-for="(item, index) in warnInfoArr" :key="index" class="warn-li layout">
@ -118,6 +118,7 @@
<p v-if="loading" style="text-align: center;">加载中...</p> <p v-if="loading" style="text-align: center;">加载中...</p>
</ul> </ul>
</div> </div>
<el-empty v-if="!isShow3" description="暂无预警信息"></el-empty>
</div> </div>
</div> </div>
</template> </template>
@ -159,6 +160,7 @@ export default {
// //
isHasData: true, isHasData: true,
busy: true, busy: true,
isShow3:true,
// //
boxNum: 1,//14 boxNum: 1,//14
boxIndex:1,// boxIndex:1,//
@ -238,6 +240,9 @@ export default {
}) })
} else { } else {
this.isHasData = false; this.isHasData = false;
if(this.queryParams.pageNum === 1){
this.isShow3 = false;
}
} }
this.loading = false; this.loading = false;
this.busy = false; this.busy = false;
@ -735,6 +740,8 @@ export default {
ul { ul {
padding-inline-start: 0; padding-inline-start: 0;
margin-block-start: 0;
margin-block-end: 0;
} }
.infinite-list-wrapper { .infinite-list-wrapper {