优化仓库和库区管理功能,将状态字段类型从number改为string,移除编辑表单中的状态选择项,在列表页面将状态标签改为开关组件支持直接切换状态,新增updateWarehouseStatus和updateZoneStatus接口用于批量更新状态,同时在操作列新增日志按钮并集成操作日志对话框组件,在列表中添加修改时间列,优化查询参数将name改为keyword统一搜索字段命名

This commit is contained in:
WUSIJIAN
2026-01-29 11:20:13 +08:00
parent 23cc5b22f8
commit 5864db37d8
9 changed files with 683 additions and 50 deletions

View File

@@ -38,17 +38,7 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="状态" prop="status">
<el-radio-group v-model="ruleForm.status">
<el-radio :value="1">启用</el-radio>
<el-radio :value="0">禁用</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="ruleForm.remark" type="textarea" :rows="3" placeholder="请输入备注" />
@@ -96,7 +86,6 @@ const ruleForm = reactive({
address: '',
contactPerson: '',
contactPhone: '',
status: 1,
remark: '',
});
@@ -113,7 +102,6 @@ const resetForm = () => {
ruleForm.address = '';
ruleForm.contactPerson = '';
ruleForm.contactPhone = '';
ruleForm.status = 1;
ruleForm.remark = '';
};
@@ -132,7 +120,6 @@ const openDialog = async (row?: any) => {
ruleForm.address = data.address || '';
ruleForm.contactPerson = data.contactPerson || '';
ruleForm.contactPhone = data.contactPhone || '';
ruleForm.status = (data.status === '1' || data.status === 1 || data.status === true) ? 1 : 0;
ruleForm.remark = data.remark || '';
} catch (error) {
console.error('获取仓库详情失败:', error);
@@ -164,7 +151,6 @@ const onSubmit = async () => {
address: ruleForm.address,
contactPerson: ruleForm.contactPerson,
contactPhone: ruleForm.contactPhone,
status: ruleForm.status,
remark: ruleForm.remark,
};

View File

@@ -9,8 +9,8 @@
</el-form-item>
<el-form-item label="状态">
<el-select size="default" v-model="tableData.param.status" placeholder="请选择状态" clearable style="width: 120px">
<el-option label="启用" :value="1" />
<el-option label="禁用" :value="0" />
<el-option label="启用" value="enabled" />
<el-option label="禁用" value="disabled" />
</el-select>
</el-form-item>
<el-form-item>
@@ -36,17 +36,23 @@
<el-table-column prop="address" label="仓库地址" min-width="200" show-overflow-tooltip />
<el-table-column prop="contactPerson" label="联系人" width="100" show-overflow-tooltip />
<el-table-column prop="contactPhone" label="联系电话" width="130" show-overflow-tooltip />
<el-table-column prop="status" label="状态" width="100" align="center">
<el-table-column prop="status" label="状态" width="80" align="center">
<template #default="scope">
<el-tag :type="scope.row.status == '1' || scope.row.status === 1 ? 'success' : 'danger'">
{{ scope.row.status == '1' || scope.row.status === 1 ? '启用' : '禁用' }}
</el-tag>
<el-switch
v-model="scope.row.statusEnabled"
inline-prompt
active-text=""
inactive-text=""
@change="onStatusChange(scope.row)"
/>
</template>
</el-table-column>
<el-table-column prop="createdAt" label="创建时间" width="170" show-overflow-tooltip />
<el-table-column label="操作" width="150" fixed="right" align="center">
<el-table-column prop="updatedAt" label="修改时间" width="170" show-overflow-tooltip />
<el-table-column label="操作" width="180" fixed="right" align="center">
<template #default="scope">
<el-button size="small" text type="primary" @click="onEdit(scope.row)">修改</el-button>
<el-button size="small" text type="info" @click="onViewLog(scope.row)">日志</el-button>
<el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</el-button>
</template>
</el-table-column>
@@ -66,6 +72,7 @@
</el-card>
</div>
<EditWarehouse ref="editWarehouseRef" @getWarehouseList="getWarehouseList" />
<OperationLogDialog ref="operationLogRef" />
</div>
</template>
@@ -78,8 +85,9 @@ export default {
<script setup lang="ts">
import { ref, reactive, onMounted } from 'vue';
import { ElMessage, ElMessageBox } from 'element-plus';
import { listWarehouses, deleteWarehouse } from '/@/api/assets/warehouse';
import { listWarehouses, deleteWarehouse, updateWarehouseStatus } from '/@/api/assets/warehouse';
import EditWarehouse from './component/editWarehouse.vue';
import OperationLogDialog from '/@/views/assets/component/operationLogDialog.vue';
// 表格数据
const tableData = reactive({
@@ -88,7 +96,7 @@ const tableData = reactive({
loading: false,
param: {
keyword: '',
status: undefined as number | undefined,
status: undefined as string | undefined,
pageNum: 1,
pageSize: 10,
},
@@ -96,13 +104,20 @@ const tableData = reactive({
// 编辑弹窗ref
const editWarehouseRef = ref();
// 日志弹窗ref
const operationLogRef = ref();
// 获取仓库列表
const getWarehouseList = async () => {
tableData.loading = true;
try {
const res: any = await listWarehouses(tableData.param);
tableData.data = res.data?.list || [];
const list = res.data?.list || [];
// 添加 statusEnabled 字段用于开关组件
tableData.data = list.map((item: any) => ({
...item,
statusEnabled: item.status === 'enabled' || item.status === '1' || item.status === 1,
}));
tableData.total = res.data?.total || 0;
} catch (error) {
console.error('获取仓库列表失败:', error);
@@ -129,6 +144,25 @@ const onEdit = (row: any) => {
editWarehouseRef.value.openDialog(row);
};
// 状态切换
const onStatusChange = async (row: any) => {
const newStatus = row.statusEnabled ? 'enabled' : 'disabled';
const statusText = row.statusEnabled ? '启用' : '禁用';
try {
await updateWarehouseStatus({ id: [row.id], status: newStatus });
ElMessage.success(`${statusText}成功`);
} catch (error) {
console.error('状态更新失败:', error);
// 失败时恢复原状态
row.statusEnabled = !row.statusEnabled;
}
};
// 查看日志
const onViewLog = (row: any) => {
operationLogRef.value?.openDialog(row.id);
};
// 删除仓库
const onRowDel = (row: any) => {
ElMessageBox.confirm(`确定要删除仓库【${row.warehouseName}】吗?`, '提示', {