完成合并

This commit is contained in:
jjLv 2024-08-20 18:16:49 +08:00
parent c3fe409c04
commit c7e168c840
11 changed files with 453 additions and 125 deletions

View File

@ -6,4 +6,58 @@ export function getDzWarnList(query) {
method: 'get',
params: query
})
}
/* 近电感应设备列表 */
export function getJdList(query) {
return request({
url: '/bracelet/consControl/getJdList',
method: 'get',
params: query
})
}
/* 线路属性 */
export function getLineStats(query) {
return request({
url: '/system/select/getLineStats',
method: 'get',
params: query
})
}
/* 线路属性的电压等级 */
export function getVoltageLevelByLineStats(query) {
return request({
url: '/system/select/getVoltageLevelByLineStats',
method: 'get',
params: query
})
}
/* 添加近电感应配置 */
export function configJdDevice(data) {
return request({
url: '/bracelet/consControl/configJdDevice',
method: 'post',
data:data
})
}
/* 查询近电感应设备配置 */
export function getConfigJdDevice(query) {
return request({
url: '/bracelet/consControl/getConfigJdDevice',
method: 'get',
params: query
})
}
/* 近电感应设备预警信息 */
export function getJdWarnList(query) {
return request({
url: '/bracelet/consControl/getJdWarnList',
method: 'get',
params: query
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -62,7 +62,7 @@ service.interceptors.request.use(config => {
const s_url = sessionObj.url; // 请求地址
const s_data = sessionObj.data; // 请求数据
const s_time = sessionObj.time; // 请求时间
const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交
const interval = 3000; // 间隔时间(ms),小于此时间视为重复提交
if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
const message = '数据正在处理,请勿重复提交';
console.warn(`[${s_url}]: ` + message)

View File

@ -15,6 +15,7 @@
placeholder="请输入班组名称"
clearable
@keyup.enter.native="handleQuery"
maxlength="30"
/>
</el-form-item>
<el-form-item label="班组长" prop="teamLeader">
@ -23,6 +24,7 @@
placeholder="请输入班组长"
clearable
@keyup.enter.native="handleQuery"
maxlength="30"
/>
</el-form-item>
<!-- <el-form-item label="项目部" prop="roleCode">
@ -88,10 +90,15 @@
<el-table v-loading="loading" :data="teamList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="班组名称" align="center" prop="teamName" />
<el-table-column label="所属工程 " align="center" prop="proName" />
<el-table-column label="班组长" align="center" prop="teamLeader" />
<el-table-column label="班组成员(在施\未施)" align="center" prop="workNum">
<el-table-column label="序号" align="center" width="80" type="index">
<template slot-scope="scope">
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="班组名称" align="center" prop="teamName" sortable/>
<el-table-column label="所属工程 " align="center" prop="proName" sortable/>
<el-table-column label="班组长" align="center" prop="teamLeader" sortable/>
<el-table-column label="班组成员(在施\未施)" align="center" prop="workNum" sortable>
<template slot-scope="scope">
<div style="cursor: pointer;" @click="openTeamTable(scope.row)">
<span style="color: green;">{{ scope.row.workNum }}/</span><span>{{ scope.row.notWorkNum }}</span>
@ -100,13 +107,13 @@
</template>
</el-table-column>
<el-table-column label="班组状态" align="center" prop="teamStatus">
<el-table-column label="班组状态" align="center" prop="teamStatus" sortable>
<template slot-scope="scope">
<div v-if="scope.row.teamStatus==0" style="color: green;">{{ stateList[Number(scope.row.teamStatus)] }}</div>
<div v-if="scope.row.teamStatus==1" style="color: red;">{{ stateList[Number(scope.row.teamStatus)] }}</div>
</template>
</el-table-column>
<el-table-column label="创建日期" align="center" prop="createTime" width="180">
<el-table-column label="创建日期" align="center" prop="createTime" width="180" sortable>
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
@ -126,13 +133,13 @@
@click="handleUpdate(scope.row)"
v-hasPermi="['basic:team:edit']"
>修改</el-button>
<el-button
<!-- <el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['basic:team:del']"
>删除</el-button>
>删除</el-button> -->
<el-button
size="mini"
type="text"
@ -166,6 +173,7 @@
placeholder="请输入姓名"
clearable
@keyup.enter.native="handleQuery"
maxlength="30"
/>
</el-form-item>
<el-form-item label="性别" prop="sex">
@ -274,7 +282,7 @@
<el-table-column label="电话" align="center" prop="phone" />
<el-table-column label="操作" align="center" >
<template slot-scope="scope">
<el-button size="mini" type="text" @click="delUser(scope.row)">删除</el-button>
<el-button size="mini" type="text" @click="delUser(scope.row)" v-if="scope.row.isLeader!=0">删除</el-button>
</template>
</el-table-column>
</el-table>
@ -385,6 +393,7 @@
//
form: {},
teamUserList:[],//-
leaderData:{},//-
chosenUser:[],//-
peopleDataList:[],//-
peopleList:[],//-
@ -411,7 +420,7 @@
created() {
this.getProList();
this.getPersonList();
this.getList();
},
methods: {
@ -422,12 +431,12 @@
});
},
//
getPersonList(){
getPersonList(teamId){
let param = {
type:1,//1. 2. 3. 4.
type:4,//1. 2. 3. 4.
roleCode: this.$store.getters.roleCode,
departId: this.$store.getters.departId,
teamId: this.$store.getters.teamId,
teamId: teamId
}
getPersonList(param).then(response => {
this.personList = response.data;
@ -440,8 +449,21 @@
if(item.id==val){
this.form.teamLeader = item.name;
this.form.leaderPhone = item.phone;
this.leaderData=item;
}
})
this.leaderData.isLeader=0;//01
if(this.teamUserList.length==0){
this.teamUserList.push(this.leaderData)
}else{
var index = this.teamUserList.findIndex(uItem => {return uItem.isLeader == 0})
if(index>-1){
this.teamUserList.splice(index,1)
this.teamUserList.unshift(this.leaderData)
}else{
this.teamUserList.unshift(this.leaderData)
}
}
},
/** 查询班组列表 */
getList() {
@ -594,21 +616,15 @@
},
//-
submitPeople(){
// let arrs=[...this.chosenUser,...this.teamUserList];
// //id
// let map=new Map();
// for(let item of arrs){
// if(!map.has(item.id)){
// map.set(item.id,item)
// }
// }
// let newArr=[...map.values()];
// console.log(this.teamUserList)
// console.log(this.chosenUser)
this.teamUserList = this.chosenUser;
this.teamUserList.unshift(this.leaderData)
this.openPeople = false;
},
/** 新增按钮操作 */
handleAdd() {
this.getPersonList("");
this.reset();
this.checkList = []
this.open = true;
@ -618,12 +634,20 @@
handleUpdate(row) {
this.reset();
const teamId = row.teamId
this.getPersonList(teamId);
getTeamInfo({id:teamId}).then(response => {
this.form = response.data;
this.personList.forEach(item=>{
if(item.id==this.form.teamLeaderId){
this.leaderData=item;
this.leaderData.isLeader=0;
}
})
this.$set(this.form,'proId',response.data.proId+'')
this.checkList = response.data.checkList;
// this.$set(this.form,'sex',response.data.sex+'')
this.teamUserList = response.data.checkList.slice();
this.teamUserList.unshift(this.leaderData)
this.open = true;
this.title = "修改班组";
});

View File

@ -3,7 +3,7 @@
<div class="left">
<div class="layout">
<el-input placeholder="请输入关键字" prefix-icon="el-icon-search" v-model="keyWord" maxlength="30"
style="margin: 10px 10px 10px 0;width: 80%;" @keydown="searchData"></el-input>
style="margin: 10px 10px 10px 0;width: 80%;" @keydown.enter="searchData"></el-input>
<el-button type="primary" plain @click="searchData">查询</el-button>
</div>
<div class="dev-box" v-if="isShow">
@ -19,7 +19,6 @@
</div>
</div>
<div class="no-data-box layout" v-if="!isShow">
<!-- <div>暂无数据</div> -->
<el-empty description="暂无数据"></el-empty>
</div>
</div>
@ -45,124 +44,137 @@
</div>
</div>
<div class="right">
<div class="dev-config"></div>
<div class="warn-info"></div>
</div>
<el-dialog title="近电感应配置" :visible.sync="dialogVisible" :append-to-body="true" :draggable="true"
:destroy-on-close="true" width="40%" custom-class="my-dialog1">
<div style="width: 100%;height: 50vh;overflow: auto;">
<div v-for="(item, index) in hoistSetUpData" style="width: 100%;height: 60%;">
<div>配置{{ index + 1 }}</div>
<el-form label-width="120px">
<el-form-item label="线路属性:">
<el-radio-group v-model="item.lineType" class="ml-4" @change="lineTypeRadioChange(item, index)"
style="margin-top: 10px;">
<el-radio label="1" size="large">交流</el-radio>
<el-radio label="2" size="large">直流</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="电压等级:">
<el-radio-group v-model="item.level" class="ml-4" @change="levelRadioChange(item, index)"
style="margin-top: 10px;">
<el-radio label="1" size="large">10kV</el-radio>
<el-radio label="2" size="large">20~35kV</el-radio>
<el-radio label="3" size="large">66~110kV</el-radio>
<el-radio label="4" size="large">220kV</el-radio>
<el-radio label="5" size="large">330kV</el-radio>
<el-radio label="6" size="large">500kV</el-radio>
<el-radio label="7" size="large">700kV</el-radio>
<el-radio label="8" size="large">1000kV</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="报警距离:">
<el-input v-model="item.distance" type="number" placeholder="请输入" style="width: 25%;">
</el-input>&nbsp;
</el-form-item>
</el-form>
<el-button @click="delHoistSetUp(index)" v-if="index > 0" style="margin-left: 80%;">删除配置</el-button>
<div class="dev-config layout" v-if="isShow2">
<div class="jd-dev-info layout" v-for="item in jdDevArr" :key="item.devId">
<div class="jd-dev-detail layout">
<img :src="jd_dev_img" alt="近电感应设备" style="margin-right: 5px;">
<span>{{ item.devName }}</span>
</div>
<div class="jd-dev-elec layout">
<img :src="battery1" alt="电量" v-if="parseFloat(item.electricQuantity) == 100">
<img :src="battery2" alt="电量"
v-if="parseFloat(item.electricQuantity) < 100 && parseFloat(item.electricQuantity) >= 20">
<img :src="battery3" alt="电量" v-if="parseFloat(item.electricQuantity) < 20">
<span style="margin-left: 5px;">{{ item.electricQuantity }}%</span>
</div>
<div class="jd-dev-img layout"><img :src="config" alt="配置" @click.stop="clickJdDev(item.devId)"></div>
</div>
</div>
<template #footer>
<span class="dialog-footer">
<el-button type="primary" @click="addHoistSetUp">添加配置</el-button>
<el-button @click="provingDialogClose">取消</el-button>
<el-button type="primary" @click="provingDialogConfirm">确定</el-button>
</span>
</template>
<div class="no-data-box layout" v-if="!isShow2">
<el-empty description="暂无数据"></el-empty>
</div>
<div class="warn-info">
<el-table :data="tableData" style="width: 100%" max-height="400">
<el-table-column prop="devName" label="设备名称" align="center">
</el-table-column>
<el-table-column prop="warnTime" label="告警时间" align="center">
</el-table-column>
<el-table-column prop="warnContent" label="告警内容" align="center">
</el-table-column>
</el-table>
</div>
</div>
<el-dialog title="近电感应配置" :visible.sync="dialogVisible" :append-to-body="true" width="700px"
@close="closeConfigItem">
<el-form ref="form" :model="form" :rules="rules" v-loading="loading" element-loading-text="数据加载中请稍候..."
element-loading-spinner="el-icon-loading">
<div class="form-box">
<div v-for="(data, index) in form.configItems" :key="data.key">
<h3>配置{{ index + 1 }}</h3>
<el-form-item label="线路属性" :key="data.key">
<el-radio-group v-model="data.configType">
<el-radio v-for="item in configTypeArr" :label="item.id" :key="item.id"
@change="chooseConfigType(index, data.configType)">{{ item.name }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="电压等级">
<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-group>
<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-group>
</el-form-item>
<el-form-item label="报警距离" :prop="'configItems.' + index + '.distance'" :rules="[
{
required: true, message: '报警距离不能为空', trigger: 'blur'
},
{
pattern: /^(?:100(?:\.0{1,2})?|[1-9][0-9]?(?:\.\d{1,2})?|1(?:\.\d{1,2})?)$/,
message: '距离为1-100米区间内,最多保留两位小数',
trigger: 'blur'
}
]">
<el-col :span="12">
<el-input v-model="data.distance"></el-input>
</el-col>
<el-col :span="5" style="margin-left: 10px;"><el-button type="danger" plain
@click.prevent="removeConfig(data)"><i class="el-icon-delete"></i></el-button></el-col>
</el-form-item>
<hr>
</div>
</div>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确定</el-button>
<el-button type="primary" @click="addConfigItem">添加配置</el-button>
<el-button @click="closeConfigItem">取消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { getDzWarnList } from "@/api/construction/manage/hoistManage.js";
import { getDzWarnList, getJdList, getLineStats, getVoltageLevelByLineStats, configJdDevice, getConfigJdDevice,getJdWarnList } from "@/api/construction/manage/hoistManage.js";
import dz_dev_img from "@/assets/images/dz_dev.png";
import dz_dev_warn_img from "@/assets/images/test.jpg";
import jd_dev_img from "@/assets/images/jd_dev.png";
export default {
name: 'hoistManage',
data() {
return {
keyWord: '',
//
dz_dev_img: dz_dev_img,
dz_dev_warn_img: dz_dev_warn_img,
jd_dev_img: jd_dev_img,
//
devArr: [],
//
jdDevArr: [],
//
isShow: true,
isShow: false,
//
isShow2: false,
// 线
configTypeArr: [],
//
jlArr: [],
//
zlArr: [],
loading: false,
//
batterys: {
battery1: require('../../../../assets/images/battery1.png'),
battery2: require('../../../../assets/images/battery2.png'),
battery3: require('../../../../assets/images/battery3.png'),
},
//
vibeDeviceData: [
{
name: '近电感应设备DX-J431',
battery: 90
},
{
name: '近电感应设备DX-J431',
battery: 30
}
],
battery1: require('../../../../assets/images/battery1.png'),
battery2: require('../../../../assets/images/battery2.png'),
battery3: require('../../../../assets/images/battery3.png'),
config: require('../../../../assets/images/config.png'),
//
tableData: [
{
deviceName: '近电感应设备DX-J431',
time: '2024-03-03 13:26',
reason: '低于安全施工sss距离'
},
{
deviceName: '近电感应设备DX-J431',
time: '2024-03-03 13:26',
reason: '低于安全施工sss距离'
},
{
deviceName: '近电感应设备DX-J431',
time: '2024-03-03 13:26',
reason: '低于安全施工sss距离'
},
],
tableData: [],
//
dialogVisible: false,
//
hoistSetUpData: [
{
lineType: '1',
level: '1',
distance: 10
}
]
form: {
devId: null,
configItems: [],
},
//
rules: {},
};
},
created() {
this.laodDzWarnList();
this.loadJdList();
this.loadJdWarnList();
},
methods: {
/* 加载吊装预警设备列表 */
@ -180,12 +192,173 @@ export default {
}
}).catch(() => { })
},
/* 加载近电感应设备 */
loadJdList() {
let params = {};
getJdList(params).then((res) => {
const data = res.data
this.jdDevArr = data;
if (data && data.length > 0) {
this.isShow2 = true;
} else {
this.isShow2 = false;
}
}).catch(() => { })
},
/* 加载近电感应设备预警信息 */
loadJdWarnList() {
let params = {};
getJdWarnList(params).then((res) => {
const data = res.data
this.tableData = data;
}).catch(() => { })
},
/* 加载线路属性 */
async loadLineStats() {
this.loading = true;
let params = {};
await getLineStats(params).then((res) => {
const data = res.data
this.configTypeArr = data;
}).catch(() => { })
await this.loadVoltageLevelByLineStats(this.configTypeArr[0].id);
await this.loadVoltageLevelByLineStats(this.configTypeArr[1].id);
await this.loadConfigJdDevice();
if (this.form.configItems.length === 0) {
this.form.configItems.push({
configType: this.configTypeArr[0].id,
voltageLevel: this.jlArr[0].id,
distance: 1,
key: Date.now()
});
}
this.loading = false;
// loading.close();
},
/* 线路属性的电压等级 */
async loadVoltageLevelByLineStats(param) {
let params = {
id: param
};
await getVoltageLevelByLineStats(params).then((res) => {
const data = res.data
if (param === 'communication') { //
this.jlArr = data;
} else if (param === 'direct_current') { //
this.zlArr = data;
}
}).catch(() => { })
},
/* 加载近电感应设备配置 */
async loadConfigJdDevice() {
const params = {
'devId': this.form.devId
}
await getConfigJdDevice(params).then((res) => {
const data = res.data
data.forEach((item, index) => {
this.form.configItems.push({
configType: item.configType,
voltageLevel: item.voltageLevel,
distance: item.distance,
key: Date.now()
})
})
}).catch(() => { })
},
searchData() {
this.laodDzWarnList();
},
/* 吊装设备点击事件 */
clickDev(id) {
},
/* 近电感应设备点击事件 */
clickJdDev(id) {
this.form.devId = id;
this.loadLineStats();
this.dialogVisible = true;
},
//
addConfigItem() {
if (this.form.configItems.length >= 10) {
return this.$message({
message: '最多添加十个配置',
type: 'warning'
});
}
this.form.configItems.push({
configType: this.configTypeArr[0].id,
voltageLevel: this.jlArr[0].id,
distance: 1,
key: Date.now()
});
},
//
removeConfig(item) {
if (this.form.configItems.length === 1) {
return this.$message({
message: '最少保留一个配置',
type: 'warning'
});
}
var index = this.form.configItems.indexOf(item)
if (index !== -1) {
this.form.configItems.splice(index, 1)
}
},
//
closeConfigItem() {
this.form.configItems.splice(0);
this.form.devId = null;
this.dialogVisible = false;
},
// 线
chooseConfigType(index, val) {
if (val === 'communication') { //
this.form.configItems[index].voltageLevel = this.jlArr[0].id
} else if (val === 'direct_current') { //
this.form.configItems[index].voltageLevel = this.zlArr[0].id
}
},
//
submitForm: function () {
this.$refs["form"].validate(valid => {
if (valid) {
const flag = this.hasDuplicates();
if (flag) {
return this.$message({
message: '存在相同配置',
type: 'warning'
});
}
const obj = {
'devId': this.form.devId,
'configItems': this.form.configItems
}
configJdDevice(obj).then((res) => {
this.$modal.msgSuccess(res.msg);
this.closeConfigItem();
}).catch((res) => { });
}
});
},
//
hasDuplicates() {
const configTypes = new Set();
const voltageLevels = new Set();
const distances = new Set();
for (const item of this.form.configItems) {
if (configTypes.has(item.configType) && voltageLevels.has(item.voltageLevel) && distances.has(item.distance)) {
return true;
}
configTypes.add(item.configType);
voltageLevels.add(item.voltageLevel);
distances.add(item.distance);
}
return false;
},
//
searchClick() {
@ -324,17 +497,51 @@ export default {
.dev-config {
width: 100%;
min-height: 150px;
max-height: 300px;
overflow-y: auto;
border: 1px solid #cccccc;
border-radius: 6px;
flex-direction: column;
}
.jd-dev-info {
width: 100%;
min-height: 50px;
flex-direction: row;
}
.jd-dev-detail {
width: calc(100% - 130px);
height: 100%;
}
.jd-dev-elec {
width: 100px;
height: 100%;
align-items: center;
justify-content: flex-start;
}
.jd-dev-img {
width: 30px;
height: 100%;
align-items: center;
justify-content: center;
cursor: pointer;
}
.warn-info {
width: 100%;
margin-top: 10px;
min-height: calc(100% - 300px);
max-height: calc(100% - 150px);
overflow-y: auto;
}
.form-box {
min-height: 12vh;
max-height: 70vh;
overflow-y: auto;
}
</style>

View File

@ -111,7 +111,7 @@
</div>
<el-dialog title="选择抽检范围" :visible.sync="dialogVisible1" :append-to-body="true" width="500px">
<el-dialog title="选择抽检范围" :visible.sync="dialogVisible1" :append-to-body="true" width="500px" @close="dialogVisible1 = false">
<el-input placeholder="请输入关键字" prefix-icon="el-icon-search" v-model="filterText2" maxlength="30"
style="margin-bottom: 10px;"></el-input>
<el-tree :data="teamTreeData" class="tree-container tree" icon="el-icon-search" show-checkbox node-key="id"
@ -124,7 +124,7 @@
</el-dialog>
<el-dialog title="自动验证人脸配置" :visible.sync="dialogVisible2" :append-to-body="true" width="500px">
<el-dialog title="自动验证人脸配置" :visible.sync="dialogVisible2" :append-to-body="true" width="500px" @close="closeTimeConfig">
<el-form ref="form" :model="form" :label-position="labelPosition" :rules="rules">
<el-form-item label="模式选择">
<el-radio-group v-model="form.configType">

View File

@ -2,8 +2,17 @@
<div class="realTimeManage">
<div class="left">
<!-- 云平台 -->
<div class="cloud-platform-box">
<div class="cloud-platform-box layout">
<div id="platform-left" class="layout">
<div class="left-right-btn-box layout"></div>
</div>
<div id="platform-center">
<div id="center-btn-top-box"></div>
<div id="center-btn-bottom-box"></div>
</div>
<div id="platform-right">
<div class="left-right-btn-box layout"></div>
</div>
</div>
<!-- 球机树 -->
<div class="tree-box tree">
@ -56,8 +65,6 @@ export default {
},
data() {
return {
//
winDom: 'videoPlayer1',
//
pageNo: 1,
//
@ -167,7 +174,7 @@ export default {
//
}
},
//icon
renderContent(h, { node, data }) {
// 使
@ -217,12 +224,48 @@ export default {
.cloud-platform-box {
width: 100%;
height: 250px;
height: 35%;
justify-items: center;
justify-content: space-evenly;
}
#platform-left,
#platform-right {
width: 15%;
height: 52%;
margin-top: 30%;
align-items: center;
}
.left-right-btn-box {
width: 100%;
height: 100%;
background: url("../../../../assets/images/video/left_btn.png") no-repeat;
background-position: center center !important;
}
#platform-center {
width: 67%;
height: 100%;
}
#center-btn-top-box {
width: 100%;
height: 80%;
background: url("../../../../assets/images/video/back.png") no-repeat;
background-position: center center !important;
}
#center-btn-bottom-box {
width: 100%;
height: 20%;
background: url("../../../../assets/images/video/back3.png") no-repeat;
background-position: center center !important;
}
.tree-box {
width: 100%;
height: calc(100% - 250px);
height: 65%;
overflow-y: auto;
}