wms_web_xugongteji/src/views/system/stock/index.vue
2025-03-11 00:08:18 +08:00

544 lines
18 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="68px">
<el-form-item label="载具号" prop="vehicleId">
<el-input
v-model="queryParams.vehicleId"
placeholder="请输入载具号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="库位号" prop="locationId">
<el-input
v-model="queryParams.locationId"
placeholder="请输入库位号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="物料编号" prop="goodsId">
<el-input
v-model="queryParams.goodsId"
placeholder="请输入物料编号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="批次号" prop="batchNo">
<el-input
v-model="queryParams.batchNo"
placeholder="请输入批次号"
clearable
@keyup.enter.native="handleQuery"
/>
</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"
v-hasPermi="['app:stock:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['app:stock:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['app:stock:remove']"
>删除</el-button>
</el-col> -->
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['app:stock:export']"
>导出</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-remove"
size="mini"
:disabled="multiple"
@click="handleCK"
v-hasPermi="['app:stock:export']"
>手动出库</el-button>
</el-col> -->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- <el-table v-loading="loading" :data="stockList" @selection-change="handleSelectionChange" :row-class-name="tableRowClassName"> -->
<el-table v-loading="loading" :data="stockList" @selection-change="handleSelectionChange" >
<el-table-column type="selection" width="55" align="center" :selectable="checkSelectable"/>
<!-- <el-table-column label="库存编号" align="center" prop="stockId" style="display: none;" /> -->
<el-table-column label="载具号" align="center" prop="vehicleId" />
<el-table-column label="库位号" align="center" prop="locationId" />
<el-table-column label="物料编号" align="center" prop="goodsId" />
<el-table-column label="物料名称" align="center" prop="goodsName" />
<el-table-column label="物料描述" align="center" prop="goodsDesc" />
<el-table-column label="单位" align="center" prop="goodsUnit" />
<!-- <el-table-column prop="packingNum" label="出库数量" width="200">
<template slot-scope="scope">
<el-input-number
class="item"
v-model="scope.row.packingNum"
:min="0"
:max="scope.row.remainNum"
:disabled="scope.row.stockStatus == 1"
></el-input-number>
</template>
</el-table-column> -->
<el-table-column label="库存数量" align="center" prop="remainNum" />
<!-- <el-table-column label="入库数量" align="center" prop="originNum" /> -->
<el-table-column label="批次号" align="center" prop="batchNo" />
<el-table-column label="库龄" align="center" prop="invAge" />
<el-table-column label="供应商id" align="center" prop="providerId" />
<el-table-column label="供应商名称" align="center" prop="providerName" />
<!-- <el-table-column label="物料状态" align="center" prop="goodsStatus" /> -->
<el-table-column label="入库类型" align="center" prop="storageMode" >
<template slot-scope="scope">
<dict-tag :options="dict.type.in_order_type" :value="scope.row.storageMode"/>
</template>
</el-table-column>
<el-table-column label="库存状态" align="center" prop="stockStatus" >
<template slot-scope="scope">
<dict-tag :options="dict.type.stock_status" :value="scope.row.stockStatus"/>
</template>
</el-table-column>
<el-table-column label="操作人" align="center" prop="createUser" />
<!-- <el-table-column label="最近更新时间" align="center" prop="lastUpdateTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.lastUpdateTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="最近更新用户" align="center" prop="lastUpdateUser" /> -->
<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)"
v-hasPermi="['app:stock:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['app:stock:remove']"
>删除</el-button>
</template>
</el-table-column> -->
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<el-dialog :title="title" :visible.sync="ck" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="物料编号" prop="goodsId" >
<el-input v-model="form.goodsId" placeholder="请输入载具号" disabled/>
</el-form-item>
<el-form-item label="需求数量" prop="needNum">
<el-input v-model="form.needNum" placeholder="请输入需求数量" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForms">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
<!-- 添加或修改【请填写功能名称】对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="载具号" prop="vehicleId">
<el-input v-model="form.vehicleId" placeholder="请输入载具号" />
</el-form-item>
<el-form-item label="库位号" prop="locationId">
<el-input v-model="form.locationId" placeholder="请输入库位号" />
</el-form-item>
<el-form-item label="物料编号" prop="goodsId">
<el-input v-model="form.goodsId" placeholder="请输入物料编号" />
</el-form-item>
<el-form-item label="物料名称" prop="goodsName">
<el-input v-model="form.goodsName" placeholder="请输入物料名称" />
</el-form-item>
<el-form-item label="物料描述" prop="goodsDesc">
<el-input v-model="form.goodsDesc" placeholder="请输入物料描述" />
</el-form-item>
<el-form-item label="单位" prop="goodsUnit">
<el-input v-model="form.goodsUnit" placeholder="请输入单位" />
</el-form-item>
<el-form-item label="供应商id" prop="providerId">
<el-input v-model="form.providerId" placeholder="请输入供应商id" />
</el-form-item>
<el-form-item label="供应商名称" prop="providerName">
<el-input v-model="form.providerName" placeholder="请输入供应商名称" />
</el-form-item>
<el-form-item label="剩余数量" prop="remainNum">
<el-input v-model="form.remainNum" placeholder="请输入剩余数量" />
</el-form-item>
<el-form-item label="入库数量" prop="originNum">
<el-input v-model="form.originNum" placeholder="请输入入库数量" />
</el-form-item>
<el-form-item label="批次号" prop="batchNo">
<el-input v-model="form.batchNo" placeholder="请输入批次号" />
</el-form-item>
<el-form-item label="库龄" prop="invAge">
<el-input v-model="form.invAge" placeholder="请输入库龄" />
</el-form-item>
<el-form-item label="入库用户" prop="createUser">
<el-input v-model="form.createUser" placeholder="请输入入库用户" />
</el-form-item>
<el-form-item label="最近更新时间" prop="lastUpdateTime">
<el-date-picker clearable
v-model="form.lastUpdateTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择最近更新时间">
</el-date-picker>
</el-form-item>
<el-form-item label="最近更新用户" prop="lastUpdateUser">
<el-input v-model="form.lastUpdateUser" placeholder="请输入最近更新用户" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listStock, getStock, delStock, addStock, updateStock } from "@/api/system/stock";
import {taskOutRequest} from "@/api/system/task";
export default {
dicts: ["in_order_type", "stock_status"],
name: "Stock",
data() {
return {
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 【请填写功能名称】表格数据
stockList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
ck: false,
taskOut:{
goodsId: null,
needNum: null,
},
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
vehicleId: null,
locationId: null,
goodsId: null,
goodsName: null,
goodsUnit: null,
providerId: null,
providerName: null,
remainNum: null,
originNum: null,
batchNo: null,
invAge: null,
goodsStatus: null,
stockStatus: null,
createUser: null,
lastUpdateTime: null,
lastUpdateUser: null,
},
// 表单参数
form: {},
// 表单校验
rules: {
vehicleId: [
{ required: true, message: "载具号不能为空", trigger: "blur" }
],
locationId: [
{ required: true, message: "库位号不能为空", trigger: "blur" }
],
goodsId: [
{ required: true, message: "物料编号不能为空", trigger: "blur" }
],
providerId: [
{ required: true, message: "供应商id不能为空", trigger: "blur" }
],
remainNum: [
{ required: true, message: "剩余数量不能为空", trigger: "blur" }
],
invAge: [
{ required: true, message: "库龄不能为空", trigger: "blur" }
],
goodsStatus: [
{ required: true, message: "物料状态不能为空", trigger: "change" }
],
stockStatus: [
{ required: true, message: "库存状态不能为空", trigger: "change" }
],
createTime: [
{ required: true, message: "入库时间不能为空", trigger: "blur" }
],
needNum: [
{ required: true, message: "需求数量不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
},
methods: {
checkSelectable(row) {
if (this.stockList.length > 0) {
//判断容器表里是否有数据
//有数据的话取容器表里的id和勾选过来的id判断是否有相等
if (
this.stockList.some(
(item) => item.stockId === row.stockId && item.stockStatus == 1
)
) {
return false; //有相等的返回false ,返回false当前行的checkbox就可以置灰
} else {
return true; //没有相等的返回true,当前行checkbox不置灰
}
} else {
return true;
}
},
/** 查询【请填写功能名称】列表 */
getList() {
this.loading = true;
listStock(this.queryParams).then(response => {
this.stockList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.ck = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
stockId: null,
vehicleId: null,
locationId: null,
goodsId: null,
goodsName: null,
goodsUnit: null,
providerId: null,
providerName: null,
remainNum: null,
originNum: null,
batchNo: null,
invAge: null,
goodsStatus: null,
stockStatus: null,
createTime: null,
createUser: null,
lastUpdateTime: null,
lastUpdateUser: null,
remark: null,
goodsDesc: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//指定行颜色
tableRowClassName: function ({ row, rowIndex }) {
// console.log(row, "row");
if (row.stockStatus == 1) {
return "warm-row";
}
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.stockId)
// selection.forEach((element) => {
// if (element.packingNum == undefined || element.packingNum == 0) {
// element.packingNum = element.remainNum;
// }
// });
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加【请填写功能名称】";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const stockId = row.stockId || this.ids
getStock(stockId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改【请填写功能名称】";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.stockId != null) {
updateStock(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addStock(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
submitForms() {
this.$refs["form"].validate(valid => {
if (valid) {
taskOutRequest(this.form).then(response => {
this.$modal.msgSuccess("出库成功");
this.ck = false;
this.getList();
}).catch(() => {
this.ck = false;
this.getList();
});
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const stockIds = row.stockId || this.ids;
this.$modal.confirm('是否确认删除【请填写功能名称】编号为"' + stockIds + '"的数据项?').then(function() {
return delStock(stockIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('app/stock/export', {
...this.queryParams
}, `stock_${new Date().getTime()}.xlsx`)
},
handleCK(row) {
const stockIds = row.stockId || this.ids;
if (stockIds == "" || stockIds == undefined || stockIds.length == 0) {
this.$modal.msgError("请选择待出库的库存!");
return;
}
var reqArr = [];
var error = false;
for (var j = 0; j < stockIds.length; j++) {
for (var i = 0; i < this.stockList.length; i++) {
if (stockIds[j] == this.stockList[i].stockId) {
reqArr.push(this.stockList[i]);
break;
}
}
}
this.$modal
.confirm("如果出库数量等于库存,则为整出,不会自动产生回库任务!")
.then(function () {
return delStock(reqArr);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("出库任务创建成功");
})
.catch(() => {
this.$modal.msgSuccess("出库任务创建异常");
});
},
}
};
</script>
<style lang="scss">
.warm-row {
background-color: #f9f9f9 !important;
}
</style>