fix: 设备管理,新增删除,清零等功能。

This commit is contained in:
tianyongbao
2026-07-12 09:33:46 +08:00
parent a430ee6f7f
commit d944778d84
5 changed files with 89 additions and 15 deletions

View File

@@ -74,3 +74,25 @@ export const delDevice = (id: string | number | Array<string | number>) => {
method: 'delete'
});
};
/**
* 硬删除设备(彻底删除)
* @param ids
*/
export const hardDeleteDevice = (ids: string | number | Array<string | number>) => {
return request({
url: '/fishery/device/hard_delete/' + (Array.isArray(ids) ? ids.join(',') : ids),
method: 'delete'
});
};
/**
* 数据清零
* @param id
*/
export const resetTestData = (id: string | number) => {
return request({
url: '/fishery/device/resetTestData/' + id,
method: 'put'
});
};

View File

@@ -17,10 +17,15 @@ declare module 'vue' {
ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
ElButton: typeof import('element-plus/es')['ElButton']
ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup']
ElCard: typeof import('element-plus/es')['ElCard']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCol: typeof import('element-plus/es')['ElCol']
ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
ElDialog: typeof import('element-plus/es')['ElDialog']
ElDivider: typeof import('element-plus/es')['ElDivider']
ElDrawer: typeof import('element-plus/es')['ElDrawer']
@@ -32,11 +37,9 @@ declare module 'vue' {
ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElIcon: typeof import('element-plus/es')['ElIcon']
ElInput: typeof import('element-plus/es')['ElInput']
ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElOption: typeof import('element-plus/es')['ElOption']
ElOptionGroup: typeof import('element-plus/es')['ElOptionGroup']
ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopover: typeof import('element-plus/es')['ElPopover']
ElRow: typeof import('element-plus/es')['ElRow']
@@ -46,6 +49,8 @@ declare module 'vue' {
ElSwitch: typeof import('element-plus/es')['ElSwitch']
ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
ElTabPane: typeof import('element-plus/es')['ElTabPane']
ElTabs: typeof import('element-plus/es')['ElTabs']
ElTag: typeof import('element-plus/es')['ElTag']
ElTooltip: typeof import('element-plus/es')['ElTooltip']
ElTree: typeof import('element-plus/es')['ElTree']

View File

@@ -3,12 +3,12 @@
<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">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" style="white-space: nowrap">
<el-form-item label="用户名" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入用户名" clearable @keyup.enter="handleQuery" />
<el-input v-model="queryParams.userName" placeholder="请输入用户名" clearable style="width: 160px" @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="手机号" prop="mobilePhone">
<el-input v-model="queryParams.mobilePhone" placeholder="请输入手机号" clearable @keyup.enter="handleQuery" />
<el-input v-model="queryParams.mobilePhone" placeholder="请输入手机号" clearable style="width: 160px" @keyup.enter="handleQuery" />
</el-form-item>
<!-- <el-form-item label="省份" prop="province">
<el-input v-model="queryParams.province" placeholder="请输入省份" clearable @keyup.enter="handleQuery" />
@@ -20,7 +20,13 @@
<el-input v-model="queryParams.district" placeholder="请输入区县" clearable @keyup.enter="handleQuery" />
</el-form-item> -->
<el-form-item label="报警电话" prop="warnPhoneJson">
<el-input v-model="queryParams.warnPhoneJson" placeholder="请输入报警电话" clearable @keyup.enter="handleQuery" />
<el-input v-model="queryParams.warnPhoneJson" placeholder="请输入报警电话" clearable style="width: 160px" @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="是否管理员" prop="isManager">
<el-select v-model="queryParams.isManager" placeholder="请选择" clearable style="width: 120px">
<el-option label="是" :value="1" />
<el-option label="否" :value="0" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
@@ -59,6 +65,13 @@
<el-table-column label="主键id" align="center" prop="id" v-if="false" />
<el-table-column label="用户名" align="center" prop="userName" />
<el-table-column label="手机号" align="center" prop="mobilePhone" />
<el-table-column label="是否管理员" align="center" prop="isManager" width="100">
<template #default="scope">
<el-tag :type="scope.row.isManager === 1 ? 'success' : 'info'" size="small">
{{ scope.row.isManager === 1 ? '是' : '否' }}
</el-tag>
</template>
</el-table-column>
<!-- <el-table-column label="省份" align="center" prop="province" />
<el-table-column label="城市" align="center" prop="city" />
<el-table-column label="区县" align="center" prop="district" /> -->
@@ -122,7 +135,10 @@
<el-input v-model="form.wxSessionKey" placeholder="请输入微信SessionKey" />
</el-form-item>
<el-form-item label="是否管理员" prop="isManager">
<el-input v-model="form.isManager" placeholder="请输入是否管理员" />
<el-select v-model="form.isManager" placeholder="请选择是否管理员" clearable style="width: 200px">
<el-option label="是" :value="1" />
<el-option label="否" :value="0" />
</el-select>
</el-form-item>
<el-form-item label="微信unionId" prop="wxUnionId">
<el-input v-model="form.wxUnionId" placeholder="请输入微信unionId" />
@@ -891,6 +907,7 @@ const data = reactive<PageData<AquUserForm, AquUserQuery>>({
city: undefined,
district: undefined,
warnPhoneJson: undefined,
isManager: undefined,
params: {}
},
rules: {

View File

@@ -43,7 +43,10 @@
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['fishery:device:edit']">修改</el-button>
</el-col> -->
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['fishery:device:remove']">解绑</el-button>
<el-button type="warning" plain icon="Connection" :disabled="multiple" @click="handleUnbind()" v-hasPermi="['fishery:device:remove']">解绑</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['fishery:device:remove']">删除</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['fishery:device:export']">导出</el-button>
@@ -145,7 +148,7 @@
</template>
</el-table-column>
<el-table-column label="电量电话告警下限" align="center" prop="batteryWarnLower" />
<el-table-column label="操作" align="center" fixed="right" width="240" class-name="small-padding fixed-width">
<el-table-column label="操作" align="center" fixed="right" width="280" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="曲线图" placement="top">
<el-button link type="primary" icon="TrendCharts" @click="handleViewHistory(scope.row)" v-hasPermi="['fishery:monitorHistory:list']"></el-button>
@@ -162,9 +165,15 @@
<el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['fishery:device:edit']"></el-button>
</el-tooltip>
<!-- <el-tooltip content="删除" placement="top">
<el-tooltip content="数据清零" placement="top">
<el-button link type="warning" icon="RefreshLeft" @click="handleResetTestData(scope.row)" v-hasPermi="['fishery:device:edit']"></el-button>
</el-tooltip>
<el-tooltip content="解绑" placement="top">
<el-button link type="warning" icon="Connection" @click="handleUnbind(scope.row)" v-hasPermi="['fishery:device:remove']"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['fishery:device:remove']"></el-button>
</el-tooltip> -->
</el-tooltip>
</template>
</el-table-column>
</el-table>
@@ -278,6 +287,9 @@
<el-button size="small" plain @click="handleUpdate(item)" v-hasPermi="['fishery:device:edit']">
<el-icon><Edit /></el-icon>修改
</el-button>
<el-button type="warning" size="small" plain @click="handleResetTestData(item)" v-hasPermi="['fishery:device:edit']">
<el-icon><RefreshLeft /></el-icon>清零
</el-button>
</div>
</el-card>
</div>
@@ -995,7 +1007,7 @@
</template>
<script setup name="Device" lang="ts">
import { listDevice, getDevice, delDevice, addDevice, updateDevice } from '@/api/fishery/device';
import { listDevice, getDevice, delDevice, addDevice, updateDevice, resetTestData, hardDeleteDevice } from '@/api/fishery/device';
import { DeviceVO, DeviceQuery, DeviceForm } from '@/api/fishery/device/types';
import { listAquUser } from '@/api/fishery/aquUser';
import { AquUserVO } from '@/api/fishery/aquUser/types';
@@ -1434,8 +1446,17 @@ const submitForm = () => {
});
}
/** 删除按钮操作 */
const handleDelete = async (row?: DeviceVO) => {
/** 数据清零 */
const handleResetTestData = async (row: DeviceVO) => {
await proxy?.$modal.confirm('是否确认对设备「' + (row.deviceName || row.serialNum) + '」进行数据清零操作?');
loading.value = true;
await resetTestData(row.id).finally(() => loading.value = false);
proxy?.$modal.msgSuccess("数据清零成功");
await getList();
}
/** 解绑按钮操作 */
const handleUnbind = async (row?: DeviceVO) => {
const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认解绑选中的数据项?').finally(() => loading.value = false);
await delDevice(_ids);
@@ -1443,6 +1464,15 @@ const handleDelete = async (row?: DeviceVO) => {
await getList();
}
/** 删除按钮操作 */
const handleDelete = async (row?: DeviceVO) => {
const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除选中的数据项?').finally(() => loading.value = false);
await hardDeleteDevice(_ids);
proxy?.$modal.msgSuccess("删除成功");
await getList();
}
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download('fishery/device/export', {

View File

@@ -25,7 +25,7 @@ export default defineConfig(({ mode, command }) => {
proxy: {
[env.VITE_APP_BASE_API]: {
// target: 'http://localhost:8080',
target: 'https://api.yuceyun.cn/test-api/',
target: 'https://api.yuceyun.cn/prod-api/',
changeOrigin: true,
ws: true,
rewrite: (path) => path.replace(new RegExp('^' + env.VITE_APP_BASE_API), '')