feat(rfidDevice): 优化设备搜索及位置筛选功能

- 将位置选择从下拉树改为带搜索过滤功能的树结构展示
- 新增位置过滤输入框,支持动态筛选节点
- 点击位置节点即触发查询,提升交互体验
- 调整部分搜索字段显示状态,简化搜索表单
- 修改设备列表中“在线状态”列默认隐藏
- 修正表格及分页布局,兼容两列布局排版
- 注释条码信息和告警级别搜索项,避免误操作
- 改为显示“是否告警”列,提升搜索筛选灵活性
main
zangch@mesnac.com 1 month ago
parent aab1d35cd2
commit ea7d078556

@ -1,5 +1,30 @@
<template>
<div class="p-2">
<el-row :gutter="10">
<el-col :span="5">
<el-card shadow="hover">
<template #header>
<el-input
v-model="treeFilterText"
placeholder="请输入位置名称"
clearable
size="small"
@input="handleLocationFilterInput"
/>
</template>
<el-tree
ref="locationTreeRef"
:data="locationOptions"
node-key="id"
:props="{ label: 'locationAlias', children: 'children' }"
default-expand-all
highlight-current
:filter-node-method="filterLocationTreeNode"
@node-click="handleLocationTreeClick"
/>
</el-card>
</el-col>
<el-col :span="19">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
@ -10,7 +35,7 @@
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model="queryParams.deviceName" placeholder="请输入设备名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="所在位置" prop="locationId">
<!-- <el-form-item label="所在位置" prop="locationId">
<el-tree-select
v-model="queryParams.locationId"
:data="locationOptions"
@ -20,7 +45,7 @@
check-strictly
clearable
/>
</el-form-item>
</el-form-item> -->
<!-- 以下为不常用搜索条件按需开放 -->
<!--
<el-form-item label="设备地址" prop="deviceAddress">
@ -33,16 +58,16 @@
<el-input-number v-model="queryParams.readFrequency" :min="0" placeholder="请输入读取频率" controls-position="right" />
</el-form-item>
-->
<el-form-item label="在线状态" prop="onlineStatus">
<!-- <el-form-item label="在线状态" prop="onlineStatus">
<el-select v-model="queryParams.onlineStatus" placeholder="请选择在线状态" clearable >
<el-option v-for="dict in online_status" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="告警状态" prop="alarmStatus">
</el-form-item> -->
<!-- <el-form-item label="告警状态" prop="alarmStatus">
<el-select v-model="queryParams.alarmStatus" placeholder="请选择告警状态" clearable >
<el-option v-for="dict in alarm_status" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item label="是否标识" prop="isMarked">
<el-select v-model="queryParams.isMarked" placeholder="请选择是否标识" clearable >
<el-option v-for="dict in is_marked" :key="dict.value" :label="dict.label" :value="dict.value"/>
@ -127,6 +152,8 @@
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
</el-col>
</el-row>
<!-- 添加或修改设备信息对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="rfidDeviceFormRef" :model="form" :rules="rules" label-width="80px">
@ -245,6 +272,9 @@ const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const treeFilterText = ref('');
const locationTreeRef = ref();
const locationOptions = ref<RfidLocationOption[]>([]);
//
@ -255,7 +285,7 @@ const columns = ref<FieldOption[]>([
{ key: 3, label: '设备地址', visible: true },
{ key: 4, label: '设备端口', visible: true },
{ key: 5, label: '读取频率', visible: true },
{ key: 6, label: '在线状态', visible: true },
{ key: 6, label: '在线状态', visible: false },
{ key: 7, label: '告警状态', visible: true },
{ key: 8, label: '是否标识', visible: false },
{ key: 9, label: '备注', visible: false },
@ -350,6 +380,32 @@ const loadLocationOptions = async () => {
locationOptions.value.push(root);
}
const handleLocationTreeClick = (data: RfidLocationOption) => {
if (data.id === 0) {
queryParams.value.locationId = undefined;
} else {
queryParams.value.locationId = data.id;
}
handleQuery();
}
const filterLocationTreeNode = (value: string, data: RfidLocationOption) => {
if (!value) {
return true;
}
if (data.id === 0) {
return true;
}
return data.locationAlias?.includes(value);
}
const handleLocationFilterInput = (value: string) => {
if (!locationTreeRef.value) {
return;
}
locationTreeRef.value.filter(value);
}
/** 取消按钮 */
const cancel = () => {
reset();

@ -19,9 +19,9 @@
<el-option v-for="dict in read_status" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="条码信息" prop="barcode">
<!-- <el-form-item label="条码信息" prop="barcode">
<el-input v-model="queryParams.barcode" placeholder="请输入条码信息" clearable @keyup.enter="handleQuery" />
</el-form-item>
</el-form-item> -->
<el-form-item label="记录时间" style="width: 308px">
<el-date-picker
v-model="dateRange"
@ -38,11 +38,11 @@
<el-option v-for="dict in alarm_flag" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="告警级别" prop="alarmLevel">
<!-- <el-form-item label="告警级别" prop="alarmLevel">
<el-select v-model="queryParams.alarmLevel" placeholder="请选择告警级别" clearable >
<el-option v-for="dict in alarm_level" :key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
</el-form-item> -->
<!-- 以下为不常用搜索条件按需开放 -->
<!--
<el-form-item label="告警类型" prop="alarmType">
@ -224,7 +224,7 @@ const columns = ref<FieldOption[]>([
{ key: 2, label: '读取状态', visible: true },
{ key: 3, label: '条码信息', visible: true },
{ key: 4, label: '记录时间', visible: true },
{ key: 5, label: '是否告警', visible: false },
{ key: 5, label: '是否告警', visible: true },
{ key: 6, label: '告警级别', visible: false },
{ key: 7, label: '告警类型', visible: false },
{ key: 8, label: '告警行为', visible: false }

Loading…
Cancel
Save