Merge remote-tracking branch 'origin/main'

main
suixy 4 weeks ago
commit 631a88fd03

@ -1,11 +1,92 @@
import request from '@/utils/request'; import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import {
DashboardVO,
RealtimeStats,
DeviceStatusVO,
SuccessRateTrend,
StatisticsOverview,
AlarmStatVO
} from './types';
// ==================== 新增接口(按需刷新) ====================
/** /**
* * 1
* 线线+
*
* @param alarmLimit 10
*/ */
export const getDashboardStats = () => { export const getRealtimeStats = (alarmLimit?: number): AxiosPromise<RealtimeStats> => {
return request({ return request({
url: '/rfid/dashboard/stats', url: '/rfid/dashboard/realtime',
method: 'get',
params: { alarmLimit }
});
};
/**
* 2
* 线
*
* @param locationId ID
*/
export const getDeviceStatusList = (locationId?: number): AxiosPromise<DeviceStatusVO[]> => {
return request({
url: '/rfid/dashboard/deviceStatus',
method: 'get',
params: { locationId }
});
};
/**
* 3
*
*
* @param type today-yesterday-
*/
export const getSuccessRateTrends = (type?: string): AxiosPromise<SuccessRateTrend[]> => {
return request({
url: '/rfid/dashboard/successRate',
method: 'get',
params: { type }
});
};
// ==================== 原有接口(保留) ====================
/**
*
*
* @param locationId ID
*/
export const getDashboardData = (locationId?: number): AxiosPromise<DashboardVO> => {
return request({
url: '/rfid/dashboard/data',
method: 'get',
params: { locationId }
});
};
/**
*
*/
export const getOverview = (): AxiosPromise<StatisticsOverview> => {
return request({
url: '/rfid/dashboard/overview',
method: 'get' method: 'get'
}) });
} };
/**
*
*
* @param limit 10
*/
export const getAlarmStats = (limit?: number): AxiosPromise<AlarmStatVO[]> => {
return request({
url: '/rfid/dashboard/alarmStats',
method: 'get',
params: { limit }
});
};

@ -0,0 +1,106 @@
/**
*
*/
/**
*
*/
export interface DashboardVO {
/** 统计概览 */
overview: StatisticsOverview;
/** 设备状态列表 */
deviceStatusList: DeviceStatusVO[];
/** 成功率趋势数据 */
successRateTrends: SuccessRateTrend[];
/** 告警统计列表 */
alarmStats: AlarmStatVO[];
}
/**
*
*/
export interface StatisticsOverview {
/** 设备总数 */
deviceTotal: number;
/** 在线数量 */
onlineCount: number;
/** 离线数量 */
offlineCount: number;
/** 告警数量 */
alarmCount: number;
}
/**
*
*/
export interface AlarmStatVO {
/** 告警时间 */
alarmTime: string;
/** 设备名称 */
deviceName: string;
/** 位置 */
location: string;
/** 告警级别 */
alarmLevel: string;
/** 告警行为 */
alarmAction: string;
}
/**
* 1
* +
*/
export interface RealtimeStats {
/** 统计概览 */
overview: StatisticsOverview;
/** 告警统计列表 */
alarmStats: AlarmStatVO[];
}
/**
*
*/
export interface LatestReadRecord {
/** 工位名称 */
stationName: string;
/** 条码信息 */
barcode: string;
/** 读取时间 */
recordTime: string;
/** 读取状态 (1-成功;0-失败) */
readStatus: string;
}
/**
* 2
* +
*/
export interface DeviceStatusVO {
/** 设备ID */
deviceId: number;
/** 设备编号 */
deviceCode: string;
/** 设备名称 */
deviceName: string;
/** 所属位置ID */
locationId: number;
/** 位置别名 */
locationAlias: string;
/** 在线状态 (1-在线;0-离线) */
onlineStatus: string;
/** 告警状态 (0-正常;1-告警) */
alarmStatus: string;
/** 最新读取记录 */
latestRecord?: LatestReadRecord;
}
/**
* 3
*
*/
export interface SuccessRateTrend {
/** 时间点(小时,如 "09:00" */
timePoint: string;
/** 成功率(百分比,如 98.5 */
successRate: number | null;
}

@ -18,12 +18,14 @@ export const listRfidReadRecord = (query?: RfidReadRecordQuery): AxiosPromise<Rf
/** /**
* *
* @param id * @param id
* @param queryDate yyyy-MM-dd
*/ */
export const getRfidReadRecord = (id: string | number): AxiosPromise<RfidReadRecordVO> => { export const getRfidReadRecord = (id: string | number, queryDate?: string): AxiosPromise<RfidReadRecordVO> => {
return request({ return request({
url: '/rfid/rfidReadRecord/' + id, url: '/rfid/rfidReadRecord/' + id,
method: 'get' method: 'get',
params: { queryDate }
}); });
}; };
@ -53,12 +55,14 @@ export const updateRfidReadRecord = (data: RfidReadRecordForm) => {
/** /**
* *
* @param id * @param id
* @param queryDate yyyy-MM-dd
*/ */
export const delRfidReadRecord = (id: string | number | Array<string | number>) => { export const delRfidReadRecord = (id: string | number | Array<string | number>, queryDate?: string) => {
return request({ return request({
url: '/rfid/rfidReadRecord/' + id, url: '/rfid/rfidReadRecord/' + id,
method: 'delete' method: 'delete',
params: { queryDate }
}); });
}; };

@ -42,17 +42,17 @@ export interface RfidReadRecordVO {
/** /**
* (1-;2-) * (1-;2-)
*/ */
alarmLevel: string; alarmLevel?: string;
/** /**
* *
*/ */
alarmType: string; alarmType?: string;
/** /**
* *
*/ */
alarmAction: string; alarmAction?: string;
} }
@ -122,9 +122,14 @@ export interface RfidReadRecordQuery extends PageQuery {
barcode?: string; barcode?: string;
/** /**
* * -
*/ */
recordTime?: string; beginRecordTime?: string;
/**
* -
*/
endRecordTime?: string;
/** /**
* (0-;1-) * (0-;1-)
@ -146,6 +151,13 @@ export interface RfidReadRecordQuery extends PageQuery {
*/ */
alarmAction?: string; alarmAction?: string;
/**
*
* - null <= 1
* - > 1 N
*/
samplingInterval?: number;
/** /**
* *
*/ */

@ -72,43 +72,43 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['rfid:rfidDevice:export']"></el-button> <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['rfid:rfidDevice:export']"></el-button>
</el-col> </el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="rfidDeviceList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" border :data="rfidDeviceList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column type="index" width="55" align="center" label="序号" /> <el-table-column type="index" width="55" align="center" label="序号" />
<el-table-column label="设备编号" align="center" prop="deviceCode" /> <el-table-column label="设备编号" align="center" prop="deviceCode" v-if="columns[0].visible" />
<el-table-column label="设备名称" align="center" prop="deviceName" /> <el-table-column label="设备名称" align="center" prop="deviceName" v-if="columns[1].visible" />
<el-table-column label="所在位置" align="center" prop="locationAlias" /> <el-table-column label="所在位置" align="center" prop="locationAlias" v-if="columns[2].visible" />
<el-table-column label="设备地址" align="center" prop="deviceAddress" /> <el-table-column label="设备地址" align="center" prop="deviceAddress" v-if="columns[3].visible" />
<el-table-column label="设备端口" align="center" prop="devicePort" /> <el-table-column label="设备端口" align="center" prop="devicePort" v-if="columns[4].visible" />
<el-table-column label="读取频率" align="center" prop="readFrequency" /> <el-table-column label="读取频率" align="center" prop="readFrequency" v-if="columns[5].visible" />
<el-table-column label="在线状态" align="center" prop="onlineStatus"> <el-table-column label="在线状态" align="center" prop="onlineStatus" v-if="columns[6].visible">
<template #default="scope"> <template #default="scope">
<dict-tag :options="online_status" :value="scope.row.onlineStatus"/> <dict-tag :options="online_status" :value="scope.row.onlineStatus"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="告警状态" align="center" prop="alarmStatus"> <el-table-column label="告警状态" align="center" prop="alarmStatus" v-if="columns[7].visible">
<template #default="scope"> <template #default="scope">
<dict-tag :options="alarm_status" :value="scope.row.alarmStatus"/> <dict-tag :options="alarm_status" :value="scope.row.alarmStatus"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="是否标识" align="center" prop="isMarked"> <el-table-column label="是否标识" align="center" prop="isMarked" v-if="columns[8].visible">
<template #default="scope"> <template #default="scope">
<dict-tag :options="is_marked" :value="scope.row.isMarked"/> <dict-tag :options="is_marked" :value="scope.row.isMarked"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" v-if="columns[9].visible" />
<el-table-column label="创建人" align="center" prop="createdBy" /> <el-table-column label="创建人" align="center" prop="createdBy" v-if="columns[10].visible" />
<el-table-column label="创建时间" align="center" prop="createdAt" width="180"> <el-table-column label="创建时间" align="center" prop="createdAt" width="180" v-if="columns[11].visible">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="更新人" align="center" prop="updatedBy" /> <el-table-column label="更新人" align="center" prop="updatedBy" v-if="columns[12].visible" />
<el-table-column label="更新时间" align="center" prop="updatedAt" width="180"> <el-table-column label="更新时间" align="center" prop="updatedAt" width="180" v-if="columns[13].visible">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
</template> </template>
@ -247,6 +247,24 @@ const total = ref(0);
const locationOptions = ref<RfidLocationOption[]>([]); const locationOptions = ref<RfidLocationOption[]>([]);
//
const columns = ref<FieldOption[]>([
{ key: 0, label: '设备编号', visible: true },
{ key: 1, label: '设备名称', visible: true },
{ key: 2, label: '所在位置', visible: true },
{ key: 3, label: '设备地址', visible: true },
{ key: 4, label: '设备端口', visible: true },
{ key: 5, label: '读取频率', visible: true },
{ key: 6, label: '在线状态', visible: true },
{ key: 7, label: '告警状态', visible: true },
{ key: 8, label: '是否标识', visible: false },
{ key: 9, label: '备注', visible: false },
{ key: 10, label: '创建人', visible: false },
{ key: 11, label: '创建时间', visible: false },
{ key: 12, label: '更新人', visible: false },
{ key: 13, label: '更新时间', visible: false }
]);
const queryFormRef = ref<ElFormInstance>(); const queryFormRef = ref<ElFormInstance>();
const rfidDeviceFormRef = ref<ElFormInstance>(); const rfidDeviceFormRef = ref<ElFormInstance>();
@ -294,9 +312,6 @@ const data = reactive<PageData<RfidDeviceForm, RfidDeviceQuery>>({
} }
}, },
rules: { rules: {
id: [
{ required: true, message: "标识不能为空", trigger: "blur" }
],
deviceCode: [ deviceCode: [
{ required: true, message: "设备编号不能为空", trigger: "blur" } { required: true, message: "设备编号不能为空", trigger: "blur" }
], ],
@ -403,10 +418,15 @@ const submitForm = () => {
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (row?: RfidDeviceVO) => { const handleDelete = async (row?: RfidDeviceVO) => {
const _ids = row?.id || ids.value; const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除设备信息编号为"' + _ids + '"的数据项?').finally(() => loading.value = false); try {
await delRfidDevice(_ids); await proxy?.$modal.confirm('是否确认删除设备信息编号为"' + _ids + '"的数据项?');
proxy?.$modal.msgSuccess("删除成功"); loading.value = true;
await getList(); await delRfidDevice(_ids);
proxy?.$modal.msgSuccess("删除成功");
await getList();
} finally {
loading.value = false;
}
} }
/** 导出按钮操作 */ /** 导出按钮操作 */

@ -66,7 +66,7 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="info" plain icon="Sort" @click="handleToggleExpandAll">/</el-button> <el-button type="info" plain icon="Sort" @click="handleToggleExpandAll">/</el-button>
</el-col> </el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template> </template>
<el-table <el-table
@ -78,28 +78,28 @@
:default-expand-all="isExpandAll" :default-expand-all="isExpandAll"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
> >
<el-table-column type="index" width="55" align="center" label="序号" /> <!-- 树形结构页面不使用序号列仅展示业务字段 -->
<el-table-column label="位置编号" prop="locationCode" /> <el-table-column label="位置编号" prop="locationCode" v-if="columns[0].visible" />
<el-table-column label="位置别名" align="center" prop="locationAlias" /> <el-table-column label="位置别名" align="center" prop="locationAlias" v-if="columns[1].visible" />
<el-table-column label="位置类型" align="center" prop="locationType"> <el-table-column label="位置类型" align="center" prop="locationType" v-if="columns[2].visible">
<template #default="scope"> <template #default="scope">
<dict-tag :options="location_type" :value="scope.row.locationType"/> <dict-tag :options="location_type" :value="scope.row.locationType"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="是否标识" align="center" prop="isMarked"> <el-table-column label="是否标识" align="center" prop="isMarked" v-if="columns[3].visible">
<template #default="scope"> <template #default="scope">
<dict-tag :options="is_marked" :value="scope.row.isMarked"/> <dict-tag :options="is_marked" :value="scope.row.isMarked"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" v-if="columns[4].visible" />
<el-table-column label="创建人" align="center" prop="createdBy" /> <el-table-column label="创建人" align="center" prop="createdBy" v-if="columns[5].visible" />
<el-table-column label="创建时间" align="center" prop="createdAt" width="180"> <el-table-column label="创建时间" align="center" prop="createdAt" width="180" v-if="columns[6].visible">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.createdAt, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="更新人" align="center" prop="updatedBy" /> <el-table-column label="更新人" align="center" prop="updatedBy" v-if="columns[7].visible" />
<el-table-column label="更新时间" align="center" prop="updatedAt" width="180"> <el-table-column label="更新时间" align="center" prop="updatedAt" width="180" v-if="columns[8].visible">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.updatedAt, '{y}-{m}-{d}') }}</span>
</template> </template>
@ -214,6 +214,19 @@ const rfidLocationList = ref<RfidLocationVO[]>([]);
const rfidLocationOptions = ref<RfidLocationOption[]>([]); const rfidLocationOptions = ref<RfidLocationOption[]>([]);
const buttonLoading = ref(false); const buttonLoading = ref(false);
const showSearch = ref(true); const showSearch = ref(true);
//
const columns = ref<FieldOption[]>([
{ key: 0, label: '位置编号', visible: true },
{ key: 1, label: '位置别名', visible: true },
{ key: 2, label: '位置类型', visible: true },
{ key: 3, label: '是否标识', visible: false },
{ key: 4, label: '备注', visible: false },
{ key: 5, label: '创建人', visible: false },
{ key: 6, label: '创建时间', visible: false },
{ key: 7, label: '更新人', visible: false },
{ key: 8, label: '更新时间', visible: false }
]);
const isExpandAll = ref(true); const isExpandAll = ref(true);
const loading = ref(false); const loading = ref(false);
@ -257,9 +270,6 @@ const data = reactive<PageData<RfidLocationForm, RfidLocationQuery>>({
} }
}, },
rules: { rules: {
id: [
{ required: true, message: "标识不能为空", trigger: "blur" }
],
locationCode: [ locationCode: [
{ required: true, message: "位置编号不能为空", trigger: "blur" } { required: true, message: "位置编号不能为空", trigger: "blur" }
], ],
@ -373,11 +383,15 @@ const submitForm = () => {
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (row: RfidLocationVO) => { const handleDelete = async (row: RfidLocationVO) => {
await proxy?.$modal.confirm('是否确认删除位置信息编号为"' + row.id + '"的数据项?'); try {
loading.value = true; await proxy?.$modal.confirm('是否确认删除位置信息编号为"' + row.id + '"的数据项?');
await delRfidLocation(row.id).finally(() => loading.value = false); loading.value = true;
await getList(); await delRfidLocation(row.id);
proxy?.$modal.msgSuccess("删除成功"); proxy?.$modal.msgSuccess("删除成功");
await getList();
} finally {
loading.value = false;
}
} }
onMounted(() => { onMounted(() => {

@ -22,12 +22,15 @@
<el-form-item label="条码信息" prop="barcode"> <el-form-item label="条码信息" prop="barcode">
<el-input v-model="queryParams.barcode" placeholder="请输入条码信息" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.barcode" placeholder="请输入条码信息" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="记录时间" prop="recordTime"> <el-form-item label="记录时间" style="width: 308px">
<el-date-picker clearable <el-date-picker
v-model="queryParams.recordTime" v-model="dateRange"
type="date" value-format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD" type="daterange"
placeholder="请选择记录时间" range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
/> />
</el-form-item> </el-form-item>
<el-form-item label="是否告警" prop="alarmFlag"> <el-form-item label="是否告警" prop="alarmFlag">
@ -61,6 +64,8 @@
<el-card shadow="never"> <el-card shadow="never">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<!-- 仅保留查询与导出屏蔽新增/修改/删除操作按钮 -->
<!--
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['rfid:rfidReadRecord:add']"></el-button> <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['rfid:rfidReadRecord:add']"></el-button>
</el-col> </el-col>
@ -70,41 +75,44 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['rfid:rfidReadRecord:remove']"></el-button> <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['rfid:rfidReadRecord:remove']"></el-button>
</el-col> </el-col>
-->
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['rfid:rfidReadRecord:export']"></el-button> <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['rfid:rfidReadRecord:export']"></el-button>
</el-col> </el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" border :data="rfidReadRecordList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" border :data="rfidReadRecordList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column type="index" width="55" align="center" label="序号" /> <el-table-column type="index" width="55" align="center" label="序号" />
<el-table-column label="设备编号" align="center" prop="deviceCode" /> <el-table-column label="设备编号" align="center" prop="deviceCode" v-if="columns[0].visible" />
<el-table-column label="设备名称" align="center" prop="deviceName" /> <el-table-column label="设备名称" align="center" prop="deviceName" v-if="columns[1].visible" />
<el-table-column label="读取状态" align="center" prop="readStatus"> <el-table-column label="读取状态" align="center" prop="readStatus" v-if="columns[2].visible">
<template #default="scope"> <template #default="scope">
<dict-tag :options="read_status" :value="scope.row.readStatus"/> <dict-tag :options="read_status" :value="scope.row.readStatus"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="条码信息" align="center" prop="barcode" /> <el-table-column label="条码信息" align="center" prop="barcode" v-if="columns[3].visible" />
<el-table-column label="记录时间" align="center" prop="recordTime" width="180"> <el-table-column label="记录时间" align="center" prop="recordTime" width="180" v-if="columns[4].visible">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.recordTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.recordTime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="是否告警" align="center" prop="alarmFlag"> <el-table-column label="是否告警" align="center" prop="alarmFlag" v-if="columns[5].visible">
<template #default="scope"> <template #default="scope">
<dict-tag :options="alarm_flag" :value="scope.row.alarmFlag"/> <dict-tag :options="alarm_flag" :value="scope.row.alarmFlag"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="告警级别" align="center" prop="alarmLevel"> <el-table-column label="告警级别" align="center" prop="alarmLevel" v-if="columns[6].visible">
<template #default="scope"> <template #default="scope">
<dict-tag :options="alarm_level" :value="scope.row.alarmLevel"/> <dict-tag :options="alarm_level" :value="scope.row.alarmLevel"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="告警类型" align="center" prop="alarmType" /> <el-table-column label="告警类型" align="center" prop="alarmType" v-if="columns[7].visible" />
<el-table-column label="告警行为" align="center" prop="alarmAction" /> <el-table-column label="告警行为" align="center" prop="alarmAction" v-if="columns[8].visible" />
<!-- 仅保留查询不展示行级修改/删除操作按钮 -->
<!--
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-tooltip content="修改" placement="top"> <el-tooltip content="修改" placement="top">
@ -115,6 +123,7 @@
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
-->
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
@ -202,10 +211,25 @@ const buttonLoading = ref(false);
const loading = ref(true); const loading = ref(true);
const showSearch = ref(true); const showSearch = ref(true);
const ids = ref<Array<string | number>>([]); const ids = ref<Array<string | number>>([]);
//
const selectedRecordTimes = ref<string[]>([]);
const single = ref(true); const single = ref(true);
const multiple = ref(true); const multiple = ref(true);
const total = ref(0); const total = ref(0);
//
const columns = ref<FieldOption[]>([
{ key: 0, label: '设备编号', visible: true },
{ key: 1, label: '设备名称', visible: true },
{ key: 2, label: '读取状态', visible: true },
{ key: 3, label: '条码信息', visible: true },
{ key: 4, label: '记录时间', visible: true },
{ key: 5, label: '是否告警', visible: false },
{ key: 6, label: '告警级别', visible: false },
{ key: 7, label: '告警类型', visible: false },
{ key: 8, label: '告警行为', visible: false }
]);
const queryFormRef = ref<ElFormInstance>(); const queryFormRef = ref<ElFormInstance>();
const rfidReadRecordFormRef = ref<ElFormInstance>(); const rfidReadRecordFormRef = ref<ElFormInstance>();
@ -215,6 +239,18 @@ const dialog = reactive<DialogOption>({
}); });
const deviceOptions = ref<RfidDeviceVO[]>([]); const deviceOptions = ref<RfidDeviceVO[]>([]);
//
const dateRange = ref<[string, string] | []>([]);
/** 初始化默认时间范围:当天 00:00:00 ~ 23:59:59 */
const initDefaultDateRange = () => {
const today = new Date();
const year = today.getFullYear();
const month = String(today.getMonth() + 1).padStart(2, '0');
const day = String(today.getDate()).padStart(2, '0');
const dateStr = `${year}-${month}-${day}`;
dateRange.value = [`${dateStr} 00:00:00`, `${dateStr} 23:59:59`];
};
const initFormData: RfidReadRecordForm = { const initFormData: RfidReadRecordForm = {
id: undefined, id: undefined,
@ -235,7 +271,8 @@ const data = reactive<PageData<RfidReadRecordForm, RfidReadRecordQuery>>({
deviceId: undefined, deviceId: undefined,
readStatus: undefined, readStatus: undefined,
barcode: undefined, barcode: undefined,
recordTime: undefined, beginRecordTime: undefined,
endRecordTime: undefined,
alarmFlag: undefined, alarmFlag: undefined,
alarmLevel: undefined, alarmLevel: undefined,
alarmType: undefined, alarmType: undefined,
@ -244,18 +281,13 @@ const data = reactive<PageData<RfidReadRecordForm, RfidReadRecordQuery>>({
} }
}, },
rules: { rules: {
id: [
{ required: true, message: "标识不能为空", trigger: "blur" }
],
deviceId: [ deviceId: [
{ required: true, message: "设备名称不能为空", trigger: "change" } { required: true, message: "设备名称不能为空", trigger: "change" }
], ],
readStatus: [ readStatus: [
{ required: true, message: "读取状态不能为空", trigger: "change" } { required: true, message: "读取状态不能为空", trigger: "change" }
], ],
barcode: [ // barcode:
{ required: true, message: "条码信息不能为空", trigger: "blur" }
],
recordTime: [ recordTime: [
{ required: true, message: "记录时间不能为空", trigger: "blur" } { required: true, message: "记录时间不能为空", trigger: "blur" }
], ],
@ -270,6 +302,14 @@ const { queryParams, form, rules } = toRefs(data);
/** 查询读取记录列表 */ /** 查询读取记录列表 */
const getList = async () => { const getList = async () => {
loading.value = true; loading.value = true;
//
if (dateRange.value && dateRange.value.length === 2) {
queryParams.value.beginRecordTime = dateRange.value[0];
queryParams.value.endRecordTime = dateRange.value[1];
} else {
queryParams.value.beginRecordTime = undefined;
queryParams.value.endRecordTime = undefined;
}
const res = await listRfidReadRecord(queryParams.value); const res = await listRfidReadRecord(queryParams.value);
rfidReadRecordList.value = res.rows; rfidReadRecordList.value = res.rows;
total.value = res.total; total.value = res.total;
@ -302,6 +342,8 @@ const handleQuery = () => {
/** 重置按钮操作 */ /** 重置按钮操作 */
const resetQuery = () => { const resetQuery = () => {
//
initDefaultDateRange();
queryFormRef.value?.resetFields(); queryFormRef.value?.resetFields();
handleQuery(); handleQuery();
} }
@ -309,6 +351,8 @@ const resetQuery = () => {
/** 多选框选中数据 */ /** 多选框选中数据 */
const handleSelectionChange = (selection: RfidReadRecordVO[]) => { const handleSelectionChange = (selection: RfidReadRecordVO[]) => {
ids.value = selection.map(item => item.id); ids.value = selection.map(item => item.id);
//
selectedRecordTimes.value = selection.map(item => item.recordTime?.substring(0, 10) || '');
single.value = selection.length != 1; single.value = selection.length != 1;
multiple.value = !selection.length; multiple.value = !selection.length;
} }
@ -323,8 +367,10 @@ const handleAdd = () => {
/** 修改按钮操作 */ /** 修改按钮操作 */
const handleUpdate = async (row?: RfidReadRecordVO) => { const handleUpdate = async (row?: RfidReadRecordVO) => {
reset(); reset();
const _id = row?.id || ids.value[0] const _id = row?.id || ids.value[0];
const res = await getRfidReadRecord(_id); //
const queryDate = row?.recordTime?.substring(0, 10) || selectedRecordTimes.value[0];
const res = await getRfidReadRecord(_id, queryDate);
Object.assign(form.value, res.data); Object.assign(form.value, res.data);
dialog.visible = true; dialog.visible = true;
dialog.title = "修改读取记录"; dialog.title = "修改读取记录";
@ -350,10 +396,17 @@ const submitForm = () => {
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (row?: RfidReadRecordVO) => { const handleDelete = async (row?: RfidReadRecordVO) => {
const _ids = row?.id || ids.value; const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除读取记录编号为"' + _ids + '"的数据项?').finally(() => loading.value = false); //
await delRfidReadRecord(_ids); const queryDate = row?.recordTime?.substring(0, 10) || selectedRecordTimes.value[0];
proxy?.$modal.msgSuccess("删除成功"); try {
await getList(); await proxy?.$modal.confirm('是否确认删除读取记录编号为"' + _ids + '"的数据项?');
loading.value = true;
await delRfidReadRecord(_ids, queryDate);
proxy?.$modal.msgSuccess("删除成功");
await getList();
} finally {
loading.value = false;
}
} }
/** 导出按钮操作 */ /** 导出按钮操作 */
@ -364,6 +417,8 @@ const handleExport = () => {
} }
onMounted(() => { onMounted(() => {
//
initDefaultDateRange();
getList(); getList();
loadDeviceOptions(); loadDeviceOptions();
}); });

Loading…
Cancel
Save