This commit is contained in:
高云鹏 2024-07-11 14:39:33 +08:00
commit cd219785b1
9 changed files with 332 additions and 167 deletions

View File

@ -6,10 +6,7 @@ import com.das.common.constant.SysAuthorityIds;
import com.das.common.exceptions.ServiceException;
import com.das.common.result.R;
import com.das.common.utils.PageDataInfo;
import com.das.common.utils.StringUtils;
import com.das.modules.auth.entity.SysOrg;
import com.das.modules.equipment.domain.dto.SysEquipmentDto;
import com.das.modules.equipment.domain.dto.SysIotModelDto;
import com.das.modules.equipment.domain.vo.EquipmentTypeVo;
import com.das.modules.equipment.domain.vo.SysEquipmentVo;
import com.das.modules.equipment.service.SysEquipmentService;

View File

@ -3,6 +3,7 @@ package com.das.modules.node.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.das.modules.node.domain.dto.SysCommunicationLinkDto;
import com.das.modules.node.domain.vo.SysCommunicationLinkVo;
import com.das.modules.node.entity.SysCommunicationLink;
import org.apache.ibatis.annotations.Mapper;
@ -10,6 +11,6 @@ import org.apache.ibatis.annotations.Param;
@Mapper
public interface SysCommunicationLinkMapper extends BaseMapper<SysCommunicationLink> {
IPage<SysCommunicationLinkVo> querySysCommunicationLinkList(IPage<SysCommunicationLinkVo> page, @Param("id")Long id);
IPage<SysCommunicationLinkVo> querySysCommunicationLinkList(IPage<SysCommunicationLinkVo> page, @Param("info") SysCommunicationLinkDto sysCommunicationLinkDto);
}

View File

@ -97,7 +97,7 @@ public class SysNodeServiceImpl implements SysNodeService {
PageQuery pageQuery = new PageQuery();
pageQuery.setPageNum(sysCommunicationLinkDto.getPageNum());
pageQuery.setPageSize(sysCommunicationLinkDto.getPageSize());
IPage<SysCommunicationLinkVo> iPage = sysCommunicationLinkMapper.querySysCommunicationLinkList(pageQuery.build(), sysCommunicationLinkDto.getNodeId());
IPage<SysCommunicationLinkVo> iPage = sysCommunicationLinkMapper.querySysCommunicationLinkList(pageQuery.build(), sysCommunicationLinkDto);
return PageDataInfo.build(iPage.getRecords(), iPage.getTotal());
}

View File

@ -14,7 +14,14 @@
<select id="querySysCommunicationLinkList" resultMap="SysCommunicationLinkMap">
select sc.*, sn.node_name as nodeName from sys_communicationlink sc left join sys_node sn on sc.node_id = sn.id
where sc.node_id = #{id}
<where>
<if test="info.id != null and info.id != ''">
and sc.node_id = #{info.id}
</if>
<if test="info.linkName != null and info.linkName != ''">
and sc.link_name like concat('%',#{info.linkName},'%')
</if>
</where>
</select>

View File

@ -72,12 +72,15 @@
<if test="info.code != null and info.code != ''">
and t.code like concat('%',#{info.code},'%')
</if>
<if test="info.objectType != null and info.objectType != ''">
and t.object_type = #{info.objectType}
</if>
</where>
</select>
<select id="queryEquipmentTree" resultMap="SysEquipmentListMap">
select t.* from sys_equipment t WHERE t.parent_equipment_id = 0 order by t.code
select t.* from sys_equipment t order by t.code
</select>
<select id="queryChildrenEquipById" resultMap="SysEquipmentListMap">

View File

@ -237,3 +237,31 @@ export function equipExport(params: object = {}) {
responseType: 'blob',
})
}
// 设备类型
export function equipType(params: object = {}) {
return createAxios({
url: '/api/equipment/type',
method: 'POST',
data: params,
})
}
// 设备详情物模型
export function equipDetailsModel(params: object = {}) {
return createAxios({
url: '/api/equipment/model/list',
method: 'POST',
data: params,
})
}
// 设备详情机构
export function equipDetailsOrg(params: object = {} ) {
return createAxios({
url: '/api/org/list',
method: 'POST',
data: params,
})
}

View File

@ -14,6 +14,7 @@
:load="loadNode"
lazy
@node-click="handleNodeClick"
:default-expanded-keys="['1']"
/>
</el-main>
</el-aside>

View File

@ -15,6 +15,7 @@
:load="loadNode"
lazy
@node-click="handleNodeClick"
:default-expanded-keys="['1']"
/>
</el-main>
</el-aside>
@ -231,7 +232,8 @@ const getTree = () => {
console.log(treeQuery, 'treeQuery')
userList(treeQuery).then((res) => {
console.log(res, '树')
console.log(res.data[0].id, '树用户111')
formQuery.orgId = res.data[0].id
userData.value = res.data
})
}

View File

@ -51,10 +51,10 @@
<span style="color: #0064aa; cursor: pointer" @click="viewDeviceDetails(scope)">查看 </span>
<span style="color: #0064aa"> | </span>
<span style="color: #0064aa; cursor: pointer" @click="deviceDeletion(scope)"> 删除 </span>
<span style="color: #0064aa"> | </span>
<!-- <span style="color: #0064aa"> | </span>
<span style="color: #0064aa; cursor: pointer"> 门户 </span>
<span style="color: #0064aa"> | </span>
<span style="color: #0064aa; cursor: pointer"> 密码</span>
<span style="color: #0064aa; cursor: pointer"> 密码</span> -->
</template>
</el-table-column>
</el-table>
@ -74,24 +74,26 @@
</el-main>
</el-container>
<!-- 查看设备详情页面 -->
<el-dialog v-model="editDeviceDialog" title="编辑设备台账" width="1000" :before-close="handleCloseEditDevice">
<el-dialog v-model="editDeviceDialog" title="编辑设备台账" width="720" :before-close="handleCloseEditDevice">
<el-form
ref="modifyDeviceDetails"
:inline="true"
label-width="auto"
:model="editDeviceData"
:rules="editDeviceRules"
style="padding: 20px 33px; font-size: 14px; line-height: 1.5; word-wrap: break-word; font-size: 20px"
style="padding: 5px 15px; font-size: 14px; line-height: 1.5; word-wrap: break-word; font-size: 20px"
>
<el-row>
<el-col :span="12">
<el-form-item label="设备类型:">
<el-input v-model="editDeviceData.objectType" placeholder="请输入设备类型" clearable />
<el-input v-model="editDeviceData.objectType" disabled placeholder="请输入设备类型" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="物模型ID:">
<el-input v-model="editDeviceData.iotModelId" placeholder="请输入物模型ID" clearable />
<el-form-item label="物模型:">
<el-select v-model="editDeviceData.iotModelId" placeholder="请选择物模型" style="width: 200px">
<el-option v-for="item in equipModeData" :key="item.id" :label="item.iotModelName" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
</el-row>
@ -108,43 +110,58 @@
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="管理部门:" prop="madeinFactory">
<el-input v-model="editDeviceData.orgId" placeholder="请输入管理部门" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="生产厂家:">
<el-input v-model="editDeviceData.madeinFactory" placeholder="请输入生产厂家" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="规格型号:">
<el-input v-model="editDeviceData.model" placeholder="请输入规格型号" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="用户登录管理部门:" prop="madeinFactory">
<!-- <el-input v-model="editDeviceData.orgId" placeholder="请输入用户登录管理部门" clearable /> -->
<el-tree-select
v-model="editDeviceData.orgId"
lazy
:load="treeSelectLoad"
:props="treeSelectProps"
check-strictly
style="width: 240px"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属设备:">
<el-input v-model="editDeviceData.parentEquipmentId" disabled placeholder="请输入所属设备" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="安装位置:">
<el-input v-model="editDeviceData.location" placeholder="请输入安装位置" clearable />
<el-input v-model="editDeviceData.location" style="width: 540px" placeholder="请输入安装位置" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="安装位置_经度:">
<el-input v-model="editDeviceData.longitude" placeholder="请输入安装位置_经度" clearable />
<el-form-item label="经度:" prop="longitude">
<el-input v-model="editDeviceData.longitude" placeholder="请输入经度" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="安装位置_纬度:">
<el-input v-model="editDeviceData.latitude" placeholder="请输入安装位置_纬度" clearable />
<el-form-item label="纬度:" prop="latitude">
<el-input v-model="editDeviceData.latitude" placeholder="请输入纬度" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-col :span="8">
<el-form-item label="安装日期:">
<el-date-picker
v-model="editDeviceData.installDate"
@ -157,16 +174,16 @@
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-col :span="16">
<el-form-item label="备注:">
<el-input v-model="editDeviceData.remarks" placeholder="请输入备注" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col>
<el-form-item label="上级设备ID:">
<el-input v-model="editDeviceData.parentEquipmentId" placeholder="请输入上级设备ID" clearable />
<el-input
v-model="editDeviceData.remarks"
style="width: 295px"
:rows="2"
type="textarea"
placeholder="请输入备注"
clearable
/>
</el-form-item>
</el-col>
</el-row>
@ -180,24 +197,26 @@
</template>
</el-dialog>
<!-- 新增设备详情页面 -->
<el-dialog v-model="editAddDeviceDialog" title="新增设备台账" width="1000" :before-close="handleCloseAddEditDevice">
<el-dialog v-model="editAddDeviceDialog" title="新增设备台账" width="720" :before-close="handleCloseAddEditDevice">
<el-form
ref="modifyAddDeviceDetails"
:inline="true"
label-width="auto"
:model="editAddDeviceData"
:rules="editAddDeviceRules"
style="padding: 20px 33px; font-size: 14px; line-height: 1.5; word-wrap: break-word; font-size: 20px"
style="padding: 5px 15px; font-size: 14px; line-height: 1.5; word-wrap: break-word; font-size: 20px"
>
<el-row>
<el-col :span="12">
<el-form-item label="设备类型:">
<el-input v-model="editAddDeviceData.objectType" placeholder="请输入设备类型" clearable />
<el-input v-model="editAddDeviceData.objectType" disabled placeholder="请输入设备类型" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="物模型ID:">
<el-input v-model="editAddDeviceData.iotModelId" placeholder="请输入物模型ID" clearable />
<el-form-item label="物模型:">
<el-select v-model="editAddDeviceData.iotModelId" placeholder="请选择物模型" style="width: 200px">
<el-option v-for="item in equipModeData" :key="item.id" :label="item.iotModelName" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
</el-row>
@ -214,43 +233,58 @@
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="管理部门:" prop="madeinFactory">
<el-input v-model="editAddDeviceData.orgId" placeholder="请输入管理部门" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="生产厂家:">
<el-input v-model="editAddDeviceData.madeinFactory" placeholder="请输入生产厂家" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="规格型号:">
<el-input v-model="editAddDeviceData.model" placeholder="请输入规格型号" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="用户登录管理部门:" prop="madeinFactory">
<!-- <el-input v-model="editAddDeviceData.orgId" placeholder="请输入用户登录管理部门" clearable /> -->
<el-tree-select
v-model="editAddDeviceData.orgId"
lazy
:load="treeSelectLoad"
:props="treeSelectProps"
check-strictly
style="width: 240px"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属设备:">
<el-input v-model="editAddDeviceData.parentEquipmentId" disabled placeholder="请输入所属设备" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="安装位置:">
<el-input v-model="editAddDeviceData.location" placeholder="请输入安装位置" clearable />
<el-input v-model="editAddDeviceData.location" style="width: 540px" placeholder="请输入安装位置" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="安装位置_经度:">
<el-input v-model="editAddDeviceData.longitude" placeholder="请输入安装位置_经度" clearable />
<el-form-item label="经度:" prop="longitude">
<el-input v-model="editAddDeviceData.longitude" placeholder="请输入经度" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="安装位置_纬度:">
<el-input v-model="editAddDeviceData.latitude" placeholder="请输入安装位置_纬度" clearable />
<el-form-item label="纬度:" prop="latitude">
<el-input v-model="editAddDeviceData.latitude" placeholder="请输入纬度" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-col :span="8">
<el-form-item label="安装日期:">
<el-date-picker
v-model="editAddDeviceData.installDate"
@ -263,16 +297,16 @@
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-col :span="16">
<el-form-item label="备注:">
<el-input v-model="editAddDeviceData.remarks" placeholder="请输入备注" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="上级设备ID:">
<el-input v-model="editAddDeviceData.parentEquipmentId" placeholder="请输入上级设备ID" clearable />
<el-input
v-model="editAddDeviceData.remarks"
style="width: 295px"
:rows="2"
type="textarea"
placeholder="请输入备注"
clearable
/>
</el-form-item>
</el-col>
</el-row>
@ -302,9 +336,19 @@
<script setup lang="ts">
import { ref, reactive, onMounted } from 'vue'
import { Search, CirclePlusFilled, Upload, Download } from '@element-plus/icons-vue'
import { equipTree, equipQuery, equipAdd, equipDelete, equipUpdate, equipImport, equipExport } from '/@/api/backend'
import {
equipTree,
equipQuery,
equipAdd,
equipDelete,
equipUpdate,
equipImport,
equipExport,
equipType,
equipDetailsModel,
equipDetailsOrg,
} from '/@/api/backend'
import { ElTable, ElMessage, ElMessageBox } from 'element-plus'
import type { UploadProps, UploadUserFile } from 'element-plus'
import type Node from 'element-plus/es/components/tree/src/model/node'
import { useAdminInfo } from '/@/stores/adminInfo'
import { encrypt_aes, generateRandomNumber } from '/@/utils/crypto'
@ -331,24 +375,72 @@ const getTree = () => {
userData.value = res.data
})
}
//
const deviceTypeList = ref()
const equipTypeList = () => {
equipType().then((res) => {
deviceTypeList.value = res.data
})
}
// const aa = (data: any[]) => {
// data.forEach((item: any) => {
// if (!item.orgChildren) {
// item.orgChildren = []
// }
// if (!item.equipChildren) {
// item.equipChildren = []
// }
// if (item.orgChildren && item.orgChildren.length) {
// item.equipChildren = [...item.equipChildren, ...item.orgChildren]
// aa(item.orgChildren)
// }
// })
// }
//
const equipModeData = ref()
const equipModeList = () => {
equipDetailsModel({
objectType: '',
}).then((res) => {
equipModeData.value = res.data
})
}
//
const equipOrgData = ref()
const equipOrgList = () => {
equipDetailsOrg({
parentOrgId: adminInfo.orgid,
}).then((res) => {
console.log(res, '设备详情机构列表')
equipOrgData.value = res.data
})
}
const treeSelectLoad = (node: any, resolve: any) => {
console.log(node, 'treeSelectLoad')
if (node.level === 0) {
equipDetailsOrg({
parentOrgId: null,
}).then((res: any) => {
if (!res.data.length) {
node.isLeaf = true
}
return resolve(res.data)
})
} else {
equipDetailsOrg({ parentOrgId: node.data.id })
.then((res: any) => {
if (!res.data.length) {
node.isLeaf = true
}
return resolve(res.data)
})
.catch((err) => {
console.log(err)
})
}
}
const treeSelectProps = {
label: 'name',
value: 'id',
children: 'children',
}
onMounted(() => {
getTree()
equipTypeList()
equipModeList()
equipOrgList()
})
const formQuery = reactive({
@ -403,21 +495,28 @@ const nameQuery2 = reactive({
code: '',
})
const deviceTypeQuery = () => {
//
if (headerForm.resource === '1') {
nameQuery.name = headerForm.searchFor
nameQuery.parentEquipmentId = queryParameter.value.id
nameQuery.pageSize = currentPageSize.value
nameQuery.pageNum = currentPage.value
deviceQuery(nameQuery)
}
//
if (headerForm.resource === '2') {
nameQuery2.code = headerForm.searchFor
nameQuery2.parentEquipmentId = queryParameter.value.id
nameQuery2.pageSize = currentPageSize.value
nameQuery2.pageNum = currentPage.value
deviceQuery(nameQuery2)
if (queryParameter.value) {
//
if (headerForm.resource === '1') {
nameQuery.name = headerForm.searchFor
nameQuery.parentEquipmentId = queryParameter.value.id
nameQuery.pageSize = currentPageSize.value
nameQuery.pageNum = currentPage.value
deviceQuery(nameQuery)
}
//
if (headerForm.resource === '2') {
nameQuery2.code = headerForm.searchFor
nameQuery2.parentEquipmentId = queryParameter.value.id
nameQuery2.pageSize = currentPageSize.value
nameQuery2.pageNum = currentPage.value
deviceQuery(nameQuery2)
}
} else {
ElMessage.error({
message: '无设备节点搜索,请选择!',
type: 'error',
})
}
}
@ -447,20 +546,31 @@ const headerForm = reactive({
//
const addDeviceList = () => {
editAddDeviceDialog.value = true
editAddDeviceData.objectType = ''
editAddDeviceData.code = ''
editAddDeviceData.name = ''
editAddDeviceData.madeinFactory = ''
editAddDeviceData.model = ''
editAddDeviceData.location = ''
editAddDeviceData.longitude = ''
editAddDeviceData.latitude = ''
editAddDeviceData.installDate = ''
editAddDeviceData.remarks = ''
editAddDeviceData.orgId = ''
editAddDeviceData.parentEquipmentId = ''
editAddDeviceData.iotModelId = ''
if (queryParameter.value) {
editAddDeviceDialog.value = true
deviceTypeList.value.forEach((ele: any) => {
if (String(ele.equipmentTypeId) === queryParameter.value.code) {
editAddDeviceData.objectType = ele.equipmentTypeName
}
})
editAddDeviceData.code = ''
editAddDeviceData.name = ''
editAddDeviceData.madeinFactory = ''
editAddDeviceData.model = ''
editAddDeviceData.location = ''
editAddDeviceData.longitude = ''
editAddDeviceData.latitude = ''
editAddDeviceData.installDate = ''
editAddDeviceData.remarks = ''
editAddDeviceData.orgId = ''
editAddDeviceData.parentEquipmentId = queryParameter.value.id
editAddDeviceData.iotModelId = ''
} else {
ElMessage.error({
message: '无设备节点添加,请选择!',
type: 'error',
})
}
}
//
@ -492,10 +602,16 @@ const handleCloseEditDevice = () => {
//
const viewDeviceDetails = (data: any) => {
console.log(data, '查看设备详情')
modifyDeviceDetails.value?.resetFields()
editDeviceDialog.value = true
editDeviceData.id = data.row.id
editDeviceData.objectType = data.row.objectType
deviceTypeList.value.forEach((ele: any) => {
if (ele.equipmentTypeId === data.row.objectType) {
editDeviceData.objectType = ele.equipmentTypeName
}
})
// editDeviceData.objectType = data.row.objectType
editDeviceData.code = data.row.code
editDeviceData.name = data.row.name
editDeviceData.madeinFactory = data.row.madeinFactory
@ -543,36 +659,47 @@ const dialogDeviceDeletion1 = () => {
}
})
}
const longitudePass = (rule: any, value: any, callback: any) => {
console.log(value, 6666)
if (!value) {
callback()
}
if (value >= 73.66 && value <= 135.05) {
callback()
} else {
callback(new Error('请输入73.66~135.05之间的数字'))
}
}
const latitudePass = (rule: any, value: any, callback: any) => {
console.log(value, 6666)
if (!value) {
callback()
}
if (value >= 3.86 && value <= 53.55) {
callback()
} else {
callback(new Error('请输入3.86~53.55之间的数字'))
}
}
const editDeviceRules = reactive({
// name: [
// {
// required: true,
// message: '',
// trigger: 'blur',
// },
// ],
// code: [
// {
// required: true,
// message: '',
// trigger: 'blur',
// },
// ],
// administrative: [
// {
// required: true,
// message: '',
// trigger: 'blur',
// },
// ],
// statusIdentification: [
// {
// required: true,
// message: '',
// trigger: 'blur',
// },
// ],
name: [
{
required: true,
message: '设备名称不能为空',
trigger: 'blur',
},
],
code: [
{
required: true,
message: '设备编码不能为空',
trigger: 'blur',
},
],
longitude: [{ validator: longitudePass, trigger: 'blur' }],
latitude: [{ validator: latitudePass, trigger: 'blur' }],
})
const modifyDeviceDetails = ref()
const saveData = () => {
@ -580,6 +707,11 @@ const saveData = () => {
modifyDeviceDetails.value.validate((valid: any) => {
if (valid) {
deviceTypeList.value.forEach((ele: any) => {
if (ele.equipmentTypeName === editDeviceData.objectType) {
editDeviceData.objectType = ele.equipmentTypeId
}
})
equipUpdate(editDeviceData).then((res: any) => {
if (res.code == 200) {
ElMessage({
@ -622,34 +754,22 @@ const editAddDeviceData = reactive({
//
const editAddDeviceRules = reactive({
// name: [
// {
// required: true,
// message: '',
// trigger: 'blur',
// },
// ],
// code: [
// {
// required: true,
// message: '',
// trigger: 'blur',
// },
// ],
// administrative: [
// {
// required: true,
// message: '',
// trigger: 'blur',
// },
// ],
// statusIdentification: [
// {
// required: true,
// message: '',
// trigger: 'blur',
// },
// ],
name: [
{
required: true,
message: '设备名称不能为空',
trigger: 'blur',
},
],
code: [
{
required: true,
message: '设备编码不能为空',
trigger: 'blur',
},
],
longitude: [{ validator: longitudePass, trigger: 'blur' }],
latitude: [{ validator: latitudePass, trigger: 'blur' }],
})
const editAddDeviceDialog = ref(false)
@ -657,7 +777,13 @@ const modifyAddDeviceDetails = ref()
const saveAddData = () => {
modifyAddDeviceDetails.value.validate((valid: any) => {
if (valid) {
deviceTypeList.value.forEach((ele: any) => {
if (ele.equipmentTypeName === editAddDeviceData.objectType) {
editAddDeviceData.objectType = String(ele.equipmentTypeId)
}
})
console.log(editAddDeviceData, 'editAddDeviceData')
equipAdd(editAddDeviceData).then((res) => {
if (res.code == 200) {
ElMessage({