Files
klp-oa/klp-ui/src/views/wms/warehouse/index.vue
砂糖 77f43fa334 feat(wms): 新增钢卷状态管理和库位查询功能
refactor(warehouse): 将仓库相关术语统一修改为库位
style(warehouse): 优化库位管理界面表单布局
fix(warehouse): 修复树形组件数据展示问题

新增钢卷状态管理功能,支持在列表中直接修改状态
为钢卷管理添加库位查询条件,优化数据展示逻辑
统一将仓库相关术语修改为库位,保持系统一致性
移除部分无用代码和注释,优化界面布局
2025-10-31 15:07:03 +08:00

370 lines
12 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.

<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="60px">
<el-form-item label="库位编码" prop="warehouseCode">
<el-input
v-model="queryParams.warehouseCode"
placeholder="请输入库位编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="库位名称" prop="warehouseName">
<el-input
v-model="queryParams.warehouseName"
placeholder="请输入库位名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!-- <el-form-item label="库位类型" prop="warehouseType">
<el-select v-model="queryParams.warehouseType" placeholder="请选择库位类型" clearable>
<el-option
v-for="dict in dict.type.warehouse_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item> -->
<el-form-item label="启用状态" prop="isEnabled">
<el-select v-model="queryParams.isEnabled" placeholder="请选择启用状态" clearable>
<el-option label="启用" :value="1" />
<el-option label="禁用" :value="0" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="el-icon-sort"
size="mini"
@click="toggleExpandAll"
>展开/折叠</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<KLPTable
v-if="refreshTable"
v-loading="loading"
:data="warehouseList"
row-key="warehouseId"
:default-expand-all="isExpandAll"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
>
<!-- <el-table-column label="上级节点" prop="parentId" /> -->
<el-table-column label="库位编码" align="center" prop="warehouseCode" />
<el-table-column label="库位名称" align="center" prop="warehouseName" />
<!-- <el-table-column label="库位类型" align="center" prop="warehouseType">
<template slot-scope="scope">
<dict-tag :options="dict.type.warehouse_type" :value="scope.row.warehouseType"/>
</template>
</el-table-column> -->
<el-table-column label="排序号" align="center" prop="sortNo" />
<el-table-column label="启用状态" align="center" prop="isEnabled">
<template slot-scope="scope">
<span>{{ scope.row.isEnabled == 1 ? '启用' : '禁用' }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-plus"
@click="handleAdd(scope.row)"
>新增</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</KLPTable>
<!-- 添加或修改库位/库区/库位自关联对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="上级节点" prop="parentId">
<WarehouseSelect v-model="form.parentId" placeholder="请选择上级节点" />
</el-form-item>
<el-form-item label="库位编码" prop="warehouseCode">
<el-input v-model="form.warehouseCode" placeholder="请输入库位编码" />
</el-form-item>
<el-form-item label="库位名称" prop="warehouseName">
<el-input v-model="form.warehouseName" placeholder="请输入库位名称" />
</el-form-item>
<!-- <el-form-item label="库位类型" prop="warehouseType">
<el-select v-model="form.warehouseType" placeholder="请选择库位类型">
<el-option
v-for="dict in dict.type.warehouse_type"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select>
</el-form-item> -->
<el-form-item label="排序号" prop="sortNo">
<el-input v-model="form.sortNo" placeholder="请输入排序号" />
</el-form-item>
<el-form-item label="启用状态" prop="isEnabled">
<el-select v-model="form.isEnabled" placeholder="请选择启用状态">
<el-option label="启用" :value="1" />
<el-option label="禁用" :value="0" />
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listWarehouse, getWarehouse, delWarehouse, addWarehouse, updateWarehouse } from "@/api/wms/warehouse";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import WarehouseSelect from '@/components/WarehouseSelect';
export default {
name: "Warehouse",
// dicts: ['warehouse_type'],
components: {
Treeselect,
WarehouseSelect
},
data() {
return {
// 按钮loading
buttonLoading: false,
// 遮罩层
loading: true,
// 显示搜索条件
showSearch: true,
// 库位/库区/库位自关联表格数据
warehouseList: [],
// 库位/库区/库位自关联树选项
warehouseOptions: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 是否展开,默认全部展开
isExpandAll: true,
// 重新渲染表格状态
refreshTable: true,
// 查询参数
queryParams: {
parentId: undefined,
warehouseCode: undefined,
warehouseName: undefined,
warehouseType: undefined,
sortNo: undefined,
isEnabled: undefined,
},
// 表单参数
form: {},
// 表单校验
rules: {
warehouseCode: [
{ required: true, message: "库位/库区编码不能为空", trigger: "blur" }
],
warehouseName: [
{ required: true, message: "库位/库区名称不能为空", trigger: "blur" }
],
warehouseType: [
{ required: true, message: "类型不能为空", trigger: "change" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询库位/库区/库位自关联列表 */
getList() {
this.loading = true;
listWarehouse(this.queryParams).then(response => {
const list = this.handleTree(response.data, "warehouseId", "parentId");
// 递归遍历list通过sortNo排序
const sort = (list) => {
list.sort((a, b) => a.sortNo - b.sortNo);
list.forEach(item => {
if (item.children) {
sort(item.children);
}
});
};
sort(list);
this.warehouseList = list;
this.loading = false;
});
},
/** 转换库位/库区/库位自关联数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.warehouseId,
label: node.warehouseName,
children: node.children
};
},
/** 查询库位/库区/库位自关联下拉树结构 */
getTreeselect() {
listWarehouse().then(response => {
this.warehouseOptions = [];
const data = { warehouseId: 0, warehouseName: '顶级节点', children: [] };
data.children = this.handleTree(response.data, "warehouseId", "parentId");
this.warehouseOptions.push(data);
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
warehouseId: null,
parentId: null,
warehouseCode: null,
warehouseName: null,
warehouseType: 1,
sortNo: null,
isEnabled: null,
delFlag: null,
remark: null,
createTime: null,
createBy: null,
updateTime: null,
updateBy: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset();
this.getTreeselect();
if (row != null && row.warehouseId) {
this.form.parentId = row.warehouseId;
} else {
this.form.parentId = 0;
}
this.open = true;
this.title = "添加库位/库区/库位自关联";
},
/** 展开/折叠操作 */
toggleExpandAll() {
this.refreshTable = false;
this.isExpandAll = !this.isExpandAll;
this.$nextTick(() => {
this.refreshTable = true;
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
this.getTreeselect();
if (row != null) {
this.form.parentId = row.warehouseId;
}
getWarehouse(row.warehouseId).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改库位/库区/库位自关联";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
// 处理 parentId 为 0 的情况
let submitData = { ...this.form };
if (submitData.parentId === 0) {
delete submitData.parentId;
}
if (this.form.warehouseId != null) {
updateWarehouse(submitData).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addWarehouse(submitData).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
this.$modal.confirm('是否确认删除库位/库区/库位自关联编号为"' + row.warehouseId + '"的数据项?').then(() => {
this.loading = true;
return delWarehouse(row.warehouseId);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
}
}
};
</script>