shop-front-end/src/views/cabinet/cabinet-cell/index.vue

235 lines
7.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script setup lang="ts">
import { ref, onMounted } from "vue";
import { PureTableBar } from "@/components/RePureTableBar";
import { onBeforeRouteUpdate, useRoute } from "vue-router";
import { useRenderIcon } from "@/components/ReIcon/src/hooks";
import { getCabinetCellList, deleteCabinetCell, CabinetCellDTO } from "@/api/cabinet/cabinet-cell";
import EditPen from "@iconify-icons/ep/edit-pen";
import Delete from "@iconify-icons/ep/delete";
import AddFill from "@iconify-icons/ri/add-circle-line";
import Search from "@iconify-icons/ep/search";
import Refresh from "@iconify-icons/ep/refresh";
import CellFormModal from "./cell-form-modal.vue";
import CellEditModal from "./cell-edit-modal.vue";
import { ElMessage, ElMessageBox } from "element-plus";
import { on } from "events";
defineOptions({
name: "CabinetCell"
});
const formRef = ref();
const tableRef = ref();
const modalVisible = ref(false);
const searchFormParams = ref({
cabinetId: null,
cellNo: null,
cellType: null
});
const pagination = ref({
pageSize: 10,
currentPage: 1,
total: 0
});
const loading = ref(false);
const dataList = ref([]);
const multipleSelection = ref<number[]>([]);
const editVisible = ref(false);
const currentRow = ref<CabinetCellDTO>();
const route = useRoute();
onMounted(() => {
if (route.query.cabinetId) {
searchFormParams.value.cabinetId = Number(route.query.cabinetId);
getList();
}
});
onBeforeRouteUpdate(() => {
if (route.query.cabinetId) {
searchFormParams.value.cabinetId = Number(route.query.cabinetId);
getList();
}
});
const getList = async () => {
try {
loading.value = true;
const { data } = await getCabinetCellList({
...searchFormParams.value,
pageSize: pagination.value.pageSize,
pageNum: pagination.value.currentPage
});
dataList.value = data.rows;
pagination.value.total = data.total;
} finally {
loading.value = false;
}
};
const onSearch = () => {
pagination.value.currentPage = 1;
getList();
};
const resetForm = () => {
formRef.value.resetFields();
onSearch();
};
const onSizeChange = (val: number) => {
pagination.value.pageSize = val;
getList();
};
const onCurrentChange = (val: number) => {
pagination.value.currentPage = val;
getList();
};
const handleDelete = async (row: CabinetCellDTO) => {
try {
await deleteCabinetCell(row.cellId!.toString());
ElMessage.success("删除成功");
getList();
} catch (error) {
console.error("删除失败", error);
}
};
const handleBulkDelete = async () => {
if (multipleSelection.value.length === 0) return;
try {
await ElMessageBox.confirm(
`确认删除选中的${multipleSelection.value.length}项单元格吗?`,
"警告",
{ confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" }
);
await deleteCabinetCell(multipleSelection.value.join(","));
ElMessage.success("批量删除成功");
multipleSelection.value = [];
getList();
} catch (error) {
console.error("删除取消或失败", error);
}
};
const handleSelectionChange = (rows: CabinetCellDTO[]) => {
multipleSelection.value = rows.map(row => row.cellId!);
};
const handleEdit = (row: CabinetCellDTO) => {
currentRow.value = row;
editVisible.value = true;
};
const switchCellType = (cellType: number) => {
switch (cellType) {
case 1:
return "小格";
case 2:
return "中格";
case 3:
return "大格";
case 4:
return "超大格";
default:
return "未知";
}
};
</script>
<template>
<div class="main">
<el-form ref="formRef" :inline="true" :model="searchFormParams"
class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px]">
<el-form-item label="柜体ID" prop="cabinetId">
<el-input v-model.number="searchFormParams.cabinetId" placeholder="请输入柜体ID" clearable class="!w-[200px]" />
</el-form-item>
<el-form-item label="单元格号:" prop="cellNo">
<el-input v-model.number="searchFormParams.cellNo" placeholder="请输入单元格号" clearable class="!w-[180px]" />
</el-form-item>
<el-form-item label="单元格类型:" prop="cellType">
<el-select v-model="searchFormParams.cellType" placeholder="请选择类型" clearable class="!w-[180px]">
<el-option label="小格" :value="1" />
<el-option label="中格" :value="2" />
<el-option label="大格" :value="3" />
<el-option label="超大格" :value="4" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" :icon="useRenderIcon(Search)" @click="onSearch">
搜索
</el-button>
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm">
重置
</el-button>
</el-form-item>
</el-form>
<PureTableBar title="柜体单元格管理" @refresh="getList">
<template #buttons>
<el-button type="primary" :icon="useRenderIcon(AddFill)" @click="modalVisible = true">
新增单元格
</el-button>
<el-button type="danger" :icon="useRenderIcon(Delete)" :disabled="multipleSelection.length === 0"
@click="handleBulkDelete">
批量删除
</el-button>
</template>
<el-table ref="tableRef" v-loading="loading" :data="dataList" row-key="cellId"
@selection-change="handleSelectionChange" border>
<el-table-column type="selection" width="55" />
<el-table-column label="柜体ID" prop="cabinetId" width="100" />
<el-table-column label="单元格号" prop="cellNo" width="120" />
<el-table-column label="针脚号" prop="pinNo" width="120" />
<el-table-column label="单元格类型" prop="cellType">
<template #default="{ row }">
{{ switchCellType(row.cellType) }}
</template>
</el-table-column>
<el-table-column label="使用状态" prop="usageStatus" width="120">
<template #default="{ row }">
{{ { 1: '空闲', 2: '已占用' }[row.usageStatus] || '未知' }}
</template>
</el-table-column>
<el-table-column label="可用状态" prop="availableStatus" width="120">
<template #default="{ row }">
<el-tag :type="row.availableStatus === 1 ? 'success' : 'danger'">
{{ { 1: '正常', 2: '故障' }[row.availableStatus] || '未知' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="150" fixed="right">
<template #default="{ row }">
<el-button type="primary" link :icon="useRenderIcon(EditPen)" @click="handleEdit(row)">
编辑
</el-button>
<el-popconfirm :title="`确认删除【${row.cellNo}】号单元格?`" @confirm="handleDelete(row)">
<template #reference>
<el-button type="danger" link :icon="useRenderIcon(Delete)">
删除
</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<el-pagination v-model:current-page="pagination.currentPage" v-model:page-size="pagination.pageSize"
:page-sizes="[10, 20, 50]" layout="total, sizes, prev, pager, next, jumper" :total="pagination.total"
@size-change="onSizeChange" @current-change="onCurrentChange" />
</PureTableBar>
<cell-form-modal v-model:visible="modalVisible" :initial-cabinet-id="searchFormParams.cabinetId"
@refresh="getList" />
<cell-edit-modal v-model:visible="editVisible" :row="currentRow" @refresh="getList" />
</div>
</template>
<style scoped></style>