hldy_yunwei_vue/src/views/iot/baseIot/CheckBaseIotList.vue

225 lines
7.7 KiB
Vue
Raw Normal View History

<template>
<div class="p-2">
2025-08-01 09:21:40 +08:00
<div v-show="activeKey==='1'">
<!--查询区域-->
<div class="jeecg-basic-table-form-container">
<a-form ref="formRef" @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
2025-08-01 09:21:40 +08:00
<a-row :gutter="24" style="margin-top:10px;">
<a-col :lg="6">
<a-form-item name="syncType">
<template #label><span title="机构名称">机构名称</span></template>
<j-dict-select-tag type='list' v-model:value="queryParam.id" dictCode="sys_depart,depart_name,id"
placeholder="请选机构名称" allow-clear />
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
<a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button>
<a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button>
</span>
</a-col>
</a-row>
</a-form>
</div>
<a-row>
<a-col v-for="(item,index) in orgList" style="padding: 5px" :key="index" :xs="24" :sm="24" :md="12" :lg="12" :xl="8" :xxl="6">
<a-card :title="item.departName"
:class="['card-3d', { 'card-selected': isSelected===item }]"
@mouseenter="item.key"
@mouseleave="item.key"
@click="isSelected = item">
<p>机构编码{{item.orgCode}}</p>
<p>创建时间{{item.createTime}}</p>
<p style="text-align: right"><a-button @click="handleCheckOrg(item)">选择</a-button></p>
</a-card>
</a-col>
</a-row>
</div>
2025-08-01 09:21:40 +08:00
<div v-show="activeKey==='2'">
<a-row style="padding:10px;">
<a-col :span="12"><span style="font-size: 18px;">{{orgInfo.departName}} - 物联设备配置</span></a-col>
<a-col :span="12" style="text-align: right"><a-button @click="activeKey = '1'">返回上一页</a-button></a-col>
<a-col v-for="(item,index) in baseList" style="padding: 5px" :key="index" :xs="24" :sm="24" :md="12" :lg="12" :xl="8" :xxl="6">
<a-card :title="`NUID`+item.nuId"
:class="['card-3d', { 'card-selected': isSelected===item }]"
@mouseenter="item.key"
@mouseleave="item.key"
@click="isSelected = item">
<p>单元名称{{item.nuName}}</p>
<p>创建时间{{item.createTime}}</p>
<p>单元类型{{item.areaFlagText}}</p>
<div style="text-align: center;">
<a-badge :count="item.sxtNum">
<a-button type="dashed" size="small" @click="handleSxt(item)" style="margin-left: 10px;">摄像头</a-button>
</a-badge>
<a-badge :count="item.dbNum">
<a-button type="dashed" size="small" @click="handleDb(item)" style="margin-left: 10px;">电表</a-button>
</a-badge>
<a-badge :count="item.sbNum" >
<a-button type="dashed" size="small" @click="handleSb(item)" style="margin-left: 10px;">水表</a-button>
</a-badge>
<a-badge :count="item.wsdjNum" >
<a-button type="dashed" size="small" @click="handleWsd(item)" style="margin-left: 10px;">温湿度</a-button>
</a-badge>
</div>
</a-card>
</a-col>
</a-row>
</div>
2025-07-28 11:26:04 +08:00
<SxtModal ref="sxtModal" @success="handleWlsbSuccess"></SxtModal>
2025-07-30 11:17:11 +08:00
<DbModal ref="dbModal" @success="handleWlsbSuccess"></DbModal>
<SbModal ref="sbModal" @success="handleWlsbSuccess"></SbModal>
<WsdModal ref="wsdModal" @success="handleWlsbSuccess"></WsdModal>
</div>
</template>
<script lang="ts" name="ElectricitySyncLog-ElectricitySyncLog" setup>
import { ref, reactive,onMounted } from 'vue';
import { defHttp } from '/@/utils/http/axios';
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import SxtModal from '/@/views/iot/baseIot/compoents/SxtModal.vue';
2025-07-30 11:17:11 +08:00
import DbModal from '/@/views/iot/baseIot/compoents/DbModal.vue';
import SbModal from '/@/views/iot/baseIot/compoents/SbModal.vue';
import WsdModal from '/@/views/iot/baseIot/compoents/WsdModal.vue';
const formRef = ref();
const sxtModal = ref();
2025-07-30 11:17:11 +08:00
const dbModal = ref();
const sbModal = ref();
const wsdModal = ref();
const queryParam = reactive<any>({});
const activeKey= ref('1');
const orgInfo= ref<any>({});
const orgList= ref<any>([]);
const baseList= ref<any>([]);
const isHover = ref(false);
const isSelected = ref(false);
const labelCol = reactive({
2025-08-01 09:21:40 +08:00
xs:24, sm:8
});
const wrapperCol = reactive({
2025-08-01 09:21:40 +08:00
xs: 24, sm: 15,
});
//查询机构列表
function searchQuery() {
defHttp.get({ url: '/sys/sysDepart/listAll', params: queryParam }).then((res) => {
orgList.value = res;
});
}
//重置
function searchReset() {
queryParam.id = '';
searchQuery();
}
//操作成功刷新页面
function handleSuccess(){
searchQuery();
}
// 选择机构
function handleCheckOrg(item){
activeKey.value = "2";
orgInfo.value = item;
getBaseList(item);
}
//获取区域及物联设备数量
function getBaseList(item){
defHttp.get({ url: '/admin/nuBaseInfo/nuBaseInfo/getBaseWlsbList', params: {orgCode:item.orgCode} }).then((res) => {
baseList.value = res;
});
}
//选择摄像头
function handleSxt(item){
console.log("🚀 ~ handleSxt ~ item:", item)
2025-07-28 11:26:04 +08:00
item.orgInfo = orgInfo.value;
sxtModal.value.init(item);
}
//选择电表
function handleDb(item){
console.log("🚀 ~ handleDb ~ item:", item)
2025-07-30 11:17:11 +08:00
item.orgInfo = orgInfo.value;
dbModal.value.init(item);
}
//选择水表
function handleSb(item){
console.log("🚀 ~ handleSb ~ item:", item)
2025-07-30 11:17:11 +08:00
item.orgInfo = orgInfo.value;
sbModal.value.init(item);
}
//选择温湿度计
function handleWsd(item){
console.log("🚀 ~ handleWsd ~ item:", item)
2025-07-30 11:17:11 +08:00
item.orgInfo = orgInfo.value;
wsdModal.value.init(item);
}
2025-07-28 11:26:04 +08:00
//物联设备同步后刷新列表
function handleWlsbSuccess(){
2025-07-28 13:35:03 +08:00
console.log("🚀 ~ handleWlsbSuccess ~ handleWlsbSuccess:", orgInfo.value)
2025-07-28 11:26:04 +08:00
getBaseList(orgInfo.value)
}
// 自动请求并暴露内部方法
onMounted(() => {
activeKey.value = "1";
searchQuery();
});
</script>
<style lang="less" scoped>
/* 基础卡片样式 */
.card-3d {
border-radius: 8px;
border: 1px solid #f0f0f0; /* 边框增强立体感 */
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
background: white;
position: relative;
}
/* 鼠标悬停:阴影加深 + 轻微上浮 */
.card-3d:hover {
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.15);
transform: translate(-2px,-2px);
}
/* 选中状态:蓝色边框 + 更明显的阴影 */
.card-3d.card-selected {
box-shadow: 0 8px 24px rgba(24, 144, 255, 0.3);
border: 1px solid #1890ff;
}
/* 选中 + 悬停:阴影更强 */
.card-3d.card-selected.card-hover {
box-shadow: 0 10px 28px rgba(24, 144, 255, 0.4);
transform: translate(-3px,-3px);
}
2025-08-01 09:21:40 +08:00
.jeecg-basic-table-form-container {
padding: 14px 0 0 14px;
background: white;
border-radius: 8px;
.table-page-search-submitButtons {
display: block;
margin-bottom: 24px;
white-space: nowrap;
}
.query-group-cust{
min-width: 100px !important;
}
.query-group-split-cust{
width: 30px;
display: inline-block;
text-align: center
}
.ant-form-item:not(.ant-form-item-with-help){
margin-bottom: 16px;
height: 32px;
}
:deep(.ant-picker),:deep(.ant-input-number){
width: 100%;
}
}
</style>