feat(机柜管理): 添加主板管理功能并更新机柜图片映射

在机柜管理模块中添加了主板管理功能,包括主板列表的查询、编辑和删除操作。同时更新了机柜图片映射,移除了不再使用的图片文件并调整了相关映射配置。
This commit is contained in:
dzq 2025-05-19 11:21:47 +08:00
parent 727671c58b
commit dc4d746412
5 changed files with 186 additions and 6 deletions

View File

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

View File

@ -0,0 +1,88 @@
import { http } from '@/utils/http';
/**
*
*/
export interface SearchCabinetMainboardQuery extends BasePageQuery {
/** 关联柜机ID */
cabinetId?: number;
/** 锁控板序号 */
lockControlNo?: number;
}
/**
*
*/
export interface CabinetMainboardDTO {
/** 主板唯一ID */
mainboardId?: number;
/** 关联柜机ID */
cabinetId: number;
/** 锁控板序号 */
lockControlNo: number;
/** 创建时间 */
createTime?: string;
/** 更新时间 */
updateTime?: string;
}
/**
*
*/
export interface AddCabinetMainboardCommand {
/** 关联柜机ID */
cabinetId: number;
/** 锁控板序号 */
lockControlNo: number;
}
/**
*
*/
export interface UpdateCabinetMainboardCommand {
/** 主板唯一ID */
mainboardId: number;
/** 关联柜机ID */
cabinetId?: number;
/** 锁控板序号 */
lockControlNo?: number;
}
/**
*
* @param params
*/
export const getMainboardList = (params?: SearchCabinetMainboardQuery) => {
return http.request<ResponseData<PageDTO<CabinetMainboardDTO>>>('get', '/cabinet/mainboards', {
params
});
};
/**
*
* @param data
*/
export const addMainboard = (data: AddCabinetMainboardCommand) => {
return http.request<ResponseData<void>>('post', '/cabinet/mainboards', {
data
});
};
/**
*
* @param id ID
* @param data
*/
export const updateMainboard = (id: number, data: UpdateCabinetMainboardCommand) => {
return http.request<ResponseData<void>>('put', `/cabinet/mainboards/${id}`, {
data
});
};
/**
*
* @param ids ID()
*/
export const deleteMainboard = (ids: string) => {
return http.request<ResponseData<void>>('delete', `/cabinet/mainboards/${ids}`);
};

View File

@ -28,15 +28,11 @@ export const CabinetImgMap = {
name: "60口机柜",
},
8: {
img: "cabinet_120_6X20.jpg",
name: "120口机柜6X20",
img: "cabinet_120.jpg",
name: "120口机柜",
},
9: {
img: "cabinet_4.jpg",
name: "4口机柜",
},
10: {
img: "cabinet_120_4X30.jpg",
name: "120口机柜4X30",
},
}

View File

@ -17,6 +17,7 @@ import AddFill from "@iconify-icons/ri/add-circle-line";
import Search from "@iconify-icons/ep/search";
import Refresh from "@iconify-icons/ep/refresh";
import { getGoodsInfo } from "@/api/shop/goods";
import { CabinetMainboardDTO, deleteMainboard, getMainboardList, updateMainboard } from "@/api/cabinet/mainboards";
defineOptions({
name: "SmartCabinetDetail"
@ -33,6 +34,13 @@ const cabinetInfo = ref<SmartCabinetDTO>({
});
const loading = ref(false);
const activeTab = ref('cells');
const mainboardConfigVisible = ref(false);
const mainboardList = ref<CabinetMainboardDTO[]>([]);
const mainboardPagination = ref({
pageSize: 5,
currentPage: 1,
total: 0
});
const cabinetId = ref<number>(0);
const gatewayConfigVisible = ref(false);
const shopConfigVisible = ref(false);
@ -146,10 +154,73 @@ function handleCellPageChange(val: number) {
fetchCellList();
}
async function fetchMainboardList() {
try {
loading.value = true;
const { data } = await getMainboardList({
cabinetId: cabinetId.value,
pageSize: mainboardPagination.value.pageSize,
pageNum: mainboardPagination.value.currentPage
});
mainboardList.value = data.rows;
mainboardPagination.value.total = data.total;
} finally {
loading.value = false;
}
}
function handleMainboardSizeChange(val: number) {
mainboardPagination.value.pageSize = val;
fetchMainboardList();
}
function handleMainboardPageChange(val: number) {
mainboardPagination.value.currentPage = val;
fetchMainboardList();
}
async function handleEditMainboard(row: CabinetMainboardDTO) {
try {
const { value } = await ElMessageBox.prompt(
'请输入锁控板序号',
'编辑主板',
{
inputPattern: /^\d+$/,
inputValue: row.lockControlNo.toString(),
inputErrorMessage: '请输入有效的数字'
}
);
await updateMainboard(row.mainboardId!, {
mainboardId: row.mainboardId,
lockControlNo: Number(value)
});
ElMessage.success('主板更新成功');
fetchMainboardList();
} catch (error) {
console.error('操作取消或失败', error);
}
}
async function handleDeleteMainboard(row: CabinetMainboardDTO) {
try {
await ElMessageBox.confirm(
'确认要删除该主板吗?',
'警告',
{ confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }
);
await deleteMainboard(row.mainboardId!.toString());
ElMessage.success('主板删除成功');
fetchMainboardList();
} catch (error) {
console.error('操作取消或失败', error);
}
}
onMounted(() => {
cabinetId.value = Number(route.query.id);
fetchCabinetDetail();
fetchCellList();
fetchMainboardList();
});
</script>
@ -200,6 +271,7 @@ onMounted(() => {
<el-tabs type="card" v-model="activeTab">
<el-tab-pane label="格口管理" name="cells"></el-tab-pane>
<el-tab-pane label="基本信息" name="basic"></el-tab-pane>
<el-tab-pane label="主板管理" name="mainboards"></el-tab-pane>
</el-tabs>
</div>
@ -208,6 +280,9 @@ onMounted(() => {
<el-descriptions-item label="主柜名称">{{ cabinetInfo.mainCabinetName || '-' }}</el-descriptions-item>
<el-descriptions-item label="MQTT服务器ID">{{ cabinetInfo.mqttServerId || '-' }}</el-descriptions-item>
<el-descriptions-item label="操作员">{{ cabinetInfo.operator || '-' }}</el-descriptions-item>
<el-button type="primary" link :icon="useRenderIcon('ep:setting')" @click="mainboardConfigVisible = true">
配置主板
</el-button>
</el-descriptions>
<div class="cell-details" v-if="activeTab === 'cells'">
@ -266,6 +341,27 @@ onMounted(() => {
:total="cellPagination.total" @size-change="handleCellSizeChange" @current-change="handleCellPageChange"
class="pagination" />
</div>
<div class="mainboard-details" v-if="activeTab === 'mainboards'">
<el-table v-loading="loading" :data="mainboardList" border>
<el-table-column label="主板ID" prop="mainboardId" width="80" />
<el-table-column label="锁控板序号" prop="lockControlNo" width="120" />
<el-table-column label="操作" width="150" fixed="right">
<template #default="{ row }">
<el-button type="primary" link :icon="useRenderIcon(EditPen)" @click="handleEditMainboard(row)">
编辑
</el-button>
<el-button type="danger" link :icon="useRenderIcon(Delete)" @click="handleDeleteMainboard(row)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination v-model:current-page="mainboardPagination.currentPage"
v-model:page-size="mainboardPagination.pageSize" :page-sizes="[5, 8, 16, 24, 32]"
layout="total, sizes, prev, pager, next, jumper" :total="mainboardPagination.total"
@size-change="handleMainboardSizeChange" @current-change="handleMainboardPageChange" class="pagination" />
</div>
</el-card>
<GatewayConfigModal v-model="gatewayConfigVisible" :cabinet-id="cabinetId" @refresh="fetchCabinetDetail" />
<ShopConfigModal v-model="shopConfigVisible" :cabinet-id="cabinetId" @refresh="fetchCabinetDetail" />