This commit is contained in:
15066119699 2025-03-11 00:08:18 +08:00
parent 1cb60092c4
commit 33e985f965
9 changed files with 762 additions and 170 deletions

View File

@ -48,4 +48,13 @@ export function enableGoods(goodsId) {
url: '/app/goods/changeGoodsIsEnableStatus/' + goodsId, url: '/app/goods/changeGoodsIsEnableStatus/' + goodsId,
method: 'post' method: 'post'
}) })
} }
// 查询物料类别下拉树结构
export function goodsTypeTreeSelect() {
return request({
url: '/system/goodsType/goodsTypeTree',
method: 'get'
})
}

View File

@ -42,3 +42,13 @@ export function delPmsOrderOut(recordId) {
method: 'delete' method: 'delete'
}) })
} }
//新增出库通知单
export function createOrderOut(data){
return request({
url: '/app/pms/orderOut',
method: 'post',
data: data
})
}

View File

@ -42,3 +42,11 @@ export function delStock(stockId) {
method: 'delete' method: 'delete'
}) })
} }
// 模糊查询库存统计
export function queryListByGoodsId(query) {
return request({
url: '/app/stock/queryListByGoodsId',
method: 'get',
params: query
})
}

View File

@ -0,0 +1,214 @@
<!-- 物料出库弹窗 -->
<template>
<el-dialog
title="物料出库"
:visible.sync="visible"
width="900px"
append-to-body
destroy-on-close
>
<div class="outbound-table">
<el-table :data="tableData" size="small" border>
<el-table-column label="物料编码" width="280">
<template slot-scope="scope">
<el-autocomplete
v-model="scope.row.materialCode"
:fetch-suggestions="searchMaterials"
:trigger-on-focus="false"
@select="(item) => handleMaterialSelect(item, scope.$index)"
placeholder="请输入物料编码或名称"
clearable
>
<template slot-scope="{ item }">
<div class="material-item">
<div class="material-code">{{ item.code }}</div>
<div class="material-desc">{{ item.description }}</div>
</div>
</template>
</el-autocomplete>
</template>
</el-table-column>
<el-table-column label="物料描述" prop="materialDescription">
<template slot-scope="scope">
<el-input v-model="scope.row.materialDescription" readonly placeholder="物料描述" />
</template>
</el-table-column>
<el-table-column label="出库数量" width="150">
<template slot-scope="scope">
<el-input-number
v-model="scope.row.quantity"
:min="1"
controls-position="right"
placeholder="请输入数量"
/>
</template>
</el-table-column>
<el-table-column label="操作" width="80" align="center">
<template slot-scope="scope">
<el-button
type="text"
icon="el-icon-delete"
@click="removeRow(scope.$index)"
:disabled="tableData.length === 1"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<div class="table-footer">
<el-button type="primary" icon="el-icon-plus" @click="addRow">新增行</el-button>
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="handleSubmit"> </el-button>
</div>
</el-dialog>
</template>
<script>
export default {
name: 'OutboundDialog',
props: {
visible: {
type: Boolean,
default: false
}
},
data() {
return {
tableData: [
{
id: Date.now(),
materialCode: '',
materialDescription: '',
quantity: 1
}
]
}
},
methods: {
//
async searchMaterials(query, callback) {
if (query.length < 2) {
callback([])
return
}
try {
// API
// const { data } = await getMaterialList({ keyword: query })
// callback(data.map(item => ({
// code: item.materialCode,
// description: item.materialName,
// value: item.materialCode
// })))
// 使API
const mockData = [
{ code: 'MAT001', description: '钢板', value: 'MAT001' },
{ code: 'MAT002', description: '铝板', value: 'MAT002' },
{ code: 'MAT003', description: '铜线', value: 'MAT003' }
].filter(item =>
item.code.toLowerCase().includes(query.toLowerCase()) ||
item.description.includes(query)
)
callback(mockData)
} catch (error) {
this.$message.error('获取物料列表失败')
callback([])
}
},
//
handleMaterialSelect(item, index) {
this.$set(this.tableData[index], 'materialCode', item.code)
this.$set(this.tableData[index], 'materialDescription', item.description)
},
//
addRow() {
this.tableData.push({
id: Date.now(),
materialCode: '',
materialDescription: '',
quantity: 1
})
},
//
removeRow(index) {
if (this.tableData.length > 1) {
this.tableData.splice(index, 1)
}
},
//
handleCancel() {
this.$emit('update:visible', false)
this.resetForm()
},
//
handleSubmit() {
//
const invalidRow = this.tableData.find(item =>
!item.materialCode ||
!item.materialDescription ||
!item.quantity ||
item.quantity < 1
)
if (invalidRow) {
this.$message.warning('请填写完整的出库信息')
return
}
//
this.$emit('submit', this.tableData)
this.handleCancel()
},
//
resetForm() {
this.tableData = [
{
id: Date.now(),
materialCode: '',
materialDescription: '',
quantity: 1
}
]
}
}
}
</script>
<style lang="scss" scoped>
.outbound-table {
.material-item {
.material-code {
font-weight: bold;
}
.material-desc {
font-size: 12px;
color: #666;
}
}
.table-footer {
margin-top: 15px;
display: flex;
justify-content: flex-start;
}
}
.el-autocomplete {
width: 100%;
}
.el-input-number {
width: 100%;
}
</style>

View File

@ -254,11 +254,13 @@
<el-form-item label="物料描述" prop="goodsName"> <el-form-item label="物料描述" prop="goodsName">
<el-input v-model="form.goodsName" placeholder="请输入物料描述" /> <el-input v-model="form.goodsName" placeholder="请输入物料描述" />
</el-form-item> </el-form-item>
<el-form-item label="计量单位" prop="goodsUnit"> <el-form-item label="计量单位">
<el-input v-model="form.goodsUnit" placeholder="请输入计量单位" /> <el-select v-model="form.goodsUnit" placeholder="请选择计量单位">
<el-option v-for="dict in dict.type.goods_unit" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="物料类别" prop="goodsType"> <el-form-item label="物料类别" prop="goodsType">
<el-input v-model="form.goodsType" placeholder="请输入物料类别" /> <treeselect v-model="form.goodsType" :options="enabledGoodsTypeOptions" :show-count="true" placeholder="请输入物料类别" />
</el-form-item> </el-form-item>
<el-form-item label="通用容器类型" prop="normalVehicleType"> <el-form-item label="通用容器类型" prop="normalVehicleType">
<el-input v-model="form.normalVehicleType" placeholder="请输入通用容器类型" /> <el-input v-model="form.normalVehicleType" placeholder="请输入通用容器类型" />
@ -312,11 +314,14 @@
<script> <script>
// import {addMessage, updateMessage} from "@/api/system/message"; // import {addMessage, updateMessage} from "@/api/system/message";
import {getToken} from "@/utils/auth"; import {getToken} from "@/utils/auth";
import {addGoods, delGoods, getGoods, listGoods, updateGoods , enableGoods} from "@/api/system/goods"; import {addGoods, delGoods, getGoods, listGoods, updateGoods , enableGoods, goodsTypeTreeSelect} from "@/api/system/goods";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default { export default {
name: "goods", name: "goods",
dicts: ['kc_sts','site_type'], dicts: ['kc_sts','site_type','goods_unit'],
components: { Treeselect },
data() { data() {
return { return {
upload: { upload: {
@ -338,6 +343,8 @@ export default {
isAdvanced: true, isAdvanced: true,
// //
showSearch: true, showSearch: true,
//
enabledGoodsTypeOptions: undefined,
// //
total: 0, total: 0,
// //
@ -404,6 +411,7 @@ export default {
}, },
created() { created() {
this.getList(); this.getList();
this.getGoodsTypeTree();
this.initTableHeight(); this.initTableHeight();
window.addEventListener('resize', this.handleResize); window.addEventListener('resize', this.handleResize);
}, },
@ -427,6 +435,24 @@ export default {
toggleSearch() { toggleSearch() {
this.showSearch = !this.showSearch; this.showSearch = !this.showSearch;
}, },
/** 查询部门下拉树结构 */
getGoodsTypeTree() {
goodsTypeTreeSelect().then(response => {
this.enabledGoodsTypeOptions = this.filterDisabledDept(JSON.parse(JSON.stringify(response.data)));
});
},
//
filterDisabledDept(deptList) {
return deptList.filter(dept => {
if (dept.disabled) {
return false;
}
if (dept.children && dept.children.length) {
dept.children = this.filterDisabledDept(dept.children);
}
return true;
});
},
/** /**
列表 */ 列表 */
getList() { getList() {

View File

@ -0,0 +1,256 @@
<template>
<el-dialog
title="新增手动出库"
:visible.sync="visible"
width="900px"
append-to-body
destroy-on-close
>
<div class="outbound-table">
<el-table :data="tableData" size="small" border>
<el-table-column label="物料编码" width="280">
<template slot-scope="scope">
<el-autocomplete
:value="queryGoods"
v-model="scope.row.goodsId"
:fetch-suggestions="searchMaterials"
:trigger-on-focus="false"
placeholder="请输入物料编码或名称"
clearable
@select="handleMaterialSelect(scope.$index,$event)"
>
<template slot-scope="{ item }">
<div class="material-item">
<div class="material-code">{{ item.goodsId }}</div>
<div class="material-desc">{{ item.goodsName }}</div>
<div class="material-divider"></div>
</div>
</template>
</el-autocomplete>
</template>
</el-table-column>
<el-table-column label="物料名称" prop="goodsName">
<template slot-scope="scope">
<el-input v-model="scope.row.goodsName" readonly placeholder="物料名称" />
</template>
</el-table-column>
<el-table-column label="物料描述" prop="goodsDesc">
<template slot-scope="scope">
<el-input v-model="scope.row.goodsDesc" readonly placeholder="物料描述" />
</template>
</el-table-column>
<el-table-column label="库存数量" prop="remainNum">
<template slot-scope="scope">
<el-input v-model="scope.row.remainNum" readonly placeholder="库存数量" />
</template>
</el-table-column>
<el-table-column label="出库数量" width="150">
<template slot-scope="scope">
<el-input-number
v-model="scope.row.goodsNum"
:min="1"
controls-position="right"
placeholder="请输入数量"
:max="scope.row.remainNum"
/>
</template>
</el-table-column>
<el-table-column label="操作" width="80" align="center">
<template slot-scope="scope">
<el-button
type="text"
icon="el-icon-delete"
@click="removeRow(scope.$index)"
:disabled="tableData.length === 1"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<div class="table-footer">
<el-button type="primary" icon="el-icon-plus" @click="addRow">新增行</el-button>
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleCancel"> </el-button>
<el-button type="primary" @click="handleSubmit"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { queryListByGoodsId } from "@/api/system/stock";
export default {
name: 'OutboundDialog',
props: {
visible: {
type: Boolean,
default: false
}
},
data() {
return {
queryGoods: "",
tableData: [
{
stockId: Date.now(),
goodsId: '',
goodsDesc: '',
goodsNum: 1, // 使 goodsNum
remainNum: 0
}
]
}
},
methods: {
//
async searchMaterials(query, callback) {
if (query.length < 2) {
callback([]);
return;
}
const queryParams = {
goodsId: query
};
let mockData = [];
await queryListByGoodsId(queryParams).then(response => {
if(response.code === 200){
response.data.forEach(item => {
mockData.push({
value: item.goodsId,
goodsId: item.goodsId,
goodsName: item.goodsName,
goodsDesc: item.goodsDesc
});
});
mockData = response.data;
}
});
callback(mockData);
},
//
// handleMaterialSelect(index,item) {
// consoe.log("=======================");
// console.log("index", index);
// console.log("item",item );
// this.$set(this.tableData[index], 'goodsId', item.goodsId);
// this.$set(this.tableData[index], 'goodsDesc', item.goodsDesc);
// this.$set(this.tableData[index], 'goodsName', item.goodsName);
// this.$set(this.tableData[index], 'remainNum', item.remainNum);
// },
//
addRow() {
this.tableData.push({
stockId: Date.now(),
goodsId: '',
goodsDesc: '',
goodsNum: 1,
remainNum: 0
});
},
//
removeRow(index) {
if (this.tableData.length > 1) {
this.tableData.splice(index, 1);
}
},
//
handleCancel() {
this.$emit('update:visible', false);
this.resetForm();
},
// goodsName goodsDesc
handleMaterialSelect(index,item){
console.log("handleMaterialSelect",index);
const selectedItem = this.tableData[index];
console.log("selectedItem",selectedItem);
// API
// const selectedMaterial = {
// goodsId: selectedItem.goodsId,
// goodsName: '', //
// goodsDesc: '' //
// };
this.$set(this.tableData, index, {
...selectedItem,
goodsId: item.goodsId, //
goodsName: item.goodsName, //
goodsDesc: item.goodsDesc, //
remainNum: item.remainNum, //
goodsNum: item.remainNum
});
},
//
handleSubmit() {
//
const invalidRow = this.tableData.find(item =>
!item.goodsId ||
item.goodsNum < 1 ||
item.goodsNum > item.remainNum
);
if (invalidRow) {
this.$message.warning('请填写完整的出库信息');
return;
}
//
this.$emit('submit', this.tableData);
this.handleCancel();
},
//
resetForm() {
this.tableData = [
{
stockId: Date.now(),
goodsId: '',
goodsDesc: '',
goodsNum: 1,
remainNum: 0
}
];
}
}
};
</script>
<style lang="scss" scoped>
.outbound-table {
.material-item {
.material-code {
font-weight: bold;
}
.material-desc {
font-size: 12px;
color: #666;
}
}
.table-footer {
margin-top: 15px;
display: flex;
justify-content: flex-start;
}
}
.el-autocomplete {
width: 100%;
}
.el-input-number {
width: 100%;
}
.material-divider {
border-top: 1px dashed #ccc;
margin: 8px 0;
}
</style>

View File

@ -120,6 +120,8 @@
<el-table-column label="物料描述" align="center" prop="goodsDesc" /> <el-table-column label="物料描述" align="center" prop="goodsDesc" />
<el-table-column label="订单状态" align="center" prop="orderStatus" /> <el-table-column label="订单状态" align="center" prop="orderStatus" />
<el-table-column label="是否锁定" align="center" prop="isLock" /> <el-table-column label="是否锁定" align="center" prop="isLock" />
<el-table-column label="操作人" align="center" prop="createBy" />
<el-table-column label="创建时间" align="center" prop="createTime" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@ -149,61 +151,64 @@
/> />
<!-- 添加或修改出库单对话框 --> <!-- 添加或修改出库单对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="wms订单号" prop="orderId"> <el-table v-model="form.goodsList" :data="form.goodsList" style="width: 100%">
<el-input v-model="form.orderId" placeholder="请输入wms订单号" /> <el-table-column label="物料号" prop="goodsId">
</el-form-item> <template slot-scope="scope">
<el-form-item label="出库单号" prop="listId"> <el-autocomplete
<el-input v-model="form.listId" placeholder="请输入出库单号" /> v-model="scope.row.goodsId"
</el-form-item> :fetch-suggestions="searchGoods"
<el-form-item label="客户名称" prop="customerId"> placeholder="请输入物料号"
<el-input v-model="form.customerId" placeholder="请输入客户名称" /> @select="handleSelectGoods(scope.row)"
</el-form-item> :debounce="300"
<el-form-item label="物料号" prop="goodsId"> ></el-autocomplete>
<el-input v-model="form.goodsId" placeholder="请输入物料号" /> </template>
</el-form-item> </el-table-column>
<el-form-item label="订单出库数量" prop="goodsNum"> <el-table-column label="物料名称" prop="goodsName">
<el-input v-model="form.goodsNum" placeholder="请输入订单出库数量" /> <template slot-scope="scope">
</el-form-item> <el-input v-model="scope.row.goodsName" disabled placeholder="物料名称" />
<el-form-item label="总出库数量" prop="pickNum"> </template>
<el-input v-model="form.pickNum" placeholder="请输入总出库数量" /> </el-table-column>
</el-form-item> <el-table-column label="库存数量" prop="stockQty">
<el-form-item label="确认出库数量" prop="trNum"> <template slot-scope="scope">
<el-input v-model="form.trNum" placeholder="请输入确认出库数量" /> <el-input v-model="scope.row.stockQty" disabled placeholder="库存数量" />
</el-form-item> </template>
<el-form-item label="本次出库数量" prop="shelvesNum"> </el-table-column>
<el-input v-model="form.shelvesNum" placeholder="请输入本次出库数量" /> <el-table-column label="出库数量" prop="goodsNum">
</el-form-item> <template slot-scope="scope">
<el-form-item label="库存数量" prop="stockNum"> <el-input v-model="scope.row.goodsNum" placeholder="请输入出库数量" />
<el-input v-model="form.stockNum" placeholder="请输入库存数量" /> </template>
</el-form-item> </el-table-column>
<el-form-item label="物料描述" prop="goodsDesc"> <el-table-column label="物料描述" prop="goodsDesc">
<el-input v-model="form.goodsDesc" placeholder="请输入物料描述" /> <template slot-scope="scope">
</el-form-item> <el-input v-model="scope.row.goodsDesc" placeholder="请输入物料描述" />
<el-form-item label="预留1" prop="spare1"> </template>
<el-input v-model="form.spare1" placeholder="请输入预留1" /> </el-table-column>
</el-form-item> </el-table>
<el-form-item label="预留2" prop="spare2"> </el-form>
<el-input v-model="form.spare2" placeholder="请输入预留2" /> <div slot="footer" class="dialog-footer">
</el-form-item> <el-button type="primary" @click="submitForm"> </el-button>
<el-form-item label="是否锁定" prop="isLock"> <el-button @click="cancel"> </el-button>
<el-input v-model="form.isLock" placeholder="请输入是否锁定" /> </div>
</el-form-item> </el-dialog>
</el-form> <!-- 出库弹窗 -->
<div slot="footer" class="dialog-footer"> <outbound-dialog
<el-button type="primary" @click="submitForm"> </el-button> :visible.sync="dialogVisible"
<el-button @click="cancel"> </el-button> @submit="handleDialogSubmit"
</div> />
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { listPmsOrderOut, getPmsOrderOut, delPmsOrderOut, addPmsOrderOut, updatePmsOrderOut } from "@/api/system/pmsOrderOut"; import { listPmsOrderOut, getPmsOrderOut, delPmsOrderOut, addPmsOrderOut, updatePmsOrderOut,createOrderOut } from "@/api/system/pmsOrderOut";
import {createOutRequestByPmsOrders} from "@/api/system/task"; import {createOutRequestByPmsOrders} from "@/api/system/task";
import OutboundDialog from './components/OutboundDialog'
export default { export default {
name: "PmsOrderOut", name: "PmsOrderOut",
components: {
OutboundDialog
},
data() { data() {
return { return {
// //
@ -222,6 +227,7 @@ export default {
pmsOrderOutList: [], pmsOrderOutList: [],
// //
title: "", title: "",
dialogVisible: false,
// //
open: false, open: false,
// //
@ -235,7 +241,11 @@ export default {
isLock: null isLock: null
}, },
// //
form: {}, form: {
goodsList: [
{ goodsId: '11', goodsName: '11', stockQty: '11', goodsNum: '', goodsDesc: '' }
]
},
// //
rules: { rules: {
recordId: [ recordId: [
@ -260,6 +270,11 @@ export default {
this.getList(); this.getList();
}, },
methods: { methods: {
/** 新增按钮操作 */
handleAdd() {
this.dialogVisible = true
},
/** 查询出库单列表 */ /** 查询出库单列表 */
getList() { getList() {
this.loading = true; this.loading = true;
@ -325,11 +340,11 @@ export default {
this.multiple = !selection.length this.multiple = !selection.length
}, },
/** 新增按钮操作 */ /** 新增按钮操作 */
handleAdd() { // handleAdd() {
this.reset(); // this.reset();
this.open = true; // this.open = true;
this.title = "添加出库单"; // this.title = "";
}, // },
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
this.reset(); this.reset();
@ -340,6 +355,25 @@ export default {
this.title = "修改出库单"; this.title = "修改出库单";
}); });
}, },
handleDialogSubmit(data){
let form = [];
console.log("data",data);
data.forEach((element) => {
form.push({
orderType: 6,
goodsId: element.goodsId,
goodsNum: element.goodsNum,
goodsDesc: element.goodsDesc,
inner: true
});
});
createOrderOut(form).then(response => {
this.$modal.msgSuccess("出库成功");
this.open = false;
this.getList();
});
},
/** 提交按钮 */ /** 提交按钮 */
submitForm() { submitForm() {
this.$refs["form"].validate(valid => { this.$refs["form"].validate(valid => {
@ -416,6 +450,33 @@ export default {
...this.queryParams ...this.queryParams
}, `pmsOrderOut_${new Date().getTime()}.xlsx`) }, `pmsOrderOut_${new Date().getTime()}.xlsx`)
} }
} },
//
searchGoods(queryString, cb) {
// API
const goodsData = [
{ goodsId: '123', goodsName: '物料A', stockQty: 100 },
{ goodsId: '456', goodsName: '物料B', stockQty: 200 },
{ goodsId: '789', goodsName: '物料C', stockQty: 50 },
];
const results = goodsData.filter(item => item.goodsId.includes(queryString));
cb(results);
},
//
handleSelectGoods(row) {
//
const selectedGoods = [
{ goodsId: '123', goodsName: '物料A', stockQty: 100 },
{ goodsId: '456', goodsName: '物料B', stockQty: 200 },
{ goodsId: '789', goodsName: '物料C', stockQty: 50 },
].find(item => item.goodsId === row.goodsId);
if (selectedGoods) {
row.goodsName = selectedGoods.goodsName;
row.stockQty = selectedGoods.stockQty;
}
},
}; };
</script> </script>

View File

@ -274,6 +274,7 @@
<script> <script>
import { listTask, getTask, delTask, addTask, updateTask } from "@/api/system/task"; import { listTask, getTask, delTask, addTask, updateTask } from "@/api/system/task";
export default { export default {
name: "Task", name: "Task",
dicts: ['order_status','task_type'], dicts: ['order_status','task_type'],

View File

@ -25,54 +25,9 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="物料名称" prop="goodsName">
<el-input
v-model="queryParams.goodsName"
placeholder="请输入物料名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="单位" prop="goodsUnit">
<el-input
v-model="queryParams.goodsUnit"
placeholder="请输入单位"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="供应商id" prop="providerId">
<el-input
v-model="queryParams.providerId"
placeholder="请输入供应商id"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="供应商名称" prop="providerName">
<el-input
v-model="queryParams.providerName"
placeholder="请输入供应商名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="剩余数量" prop="remainNum">
<el-input
v-model="queryParams.remainNum"
placeholder="请输入剩余数量"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="入库数量" prop="originNum">
<el-input
v-model="queryParams.originNum"
placeholder="请输入入库数量"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="批次号" prop="batchNo"> <el-form-item label="批次号" prop="batchNo">
<el-input <el-input
v-model="queryParams.batchNo" v-model="queryParams.batchNo"
@ -81,38 +36,8 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="库龄" prop="invAge">
<el-input
v-model="queryParams.invAge"
placeholder="请输入库龄"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="入库用户" prop="createUser">
<el-input
v-model="queryParams.createUser"
placeholder="请输入入库用户"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="最近更新时间" prop="lastUpdateTime">
<el-date-picker clearable
v-model="queryParams.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="queryParams.lastUpdateUser"
placeholder="请输入最近更新用户"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <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-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@ -120,7 +45,7 @@
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <!-- <el-col :span="1.5">
<el-button <el-button
type="primary" type="primary"
plain plain
@ -151,7 +76,7 @@
@click="handleDelete" @click="handleDelete"
v-hasPermi="['app:stock:remove']" v-hasPermi="['app:stock:remove']"
>删除</el-button> >删除</el-button>
</el-col> </el-col> -->
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="warning" type="warning"
@ -162,45 +87,67 @@
v-hasPermi="['app:stock:export']" v-hasPermi="['app:stock:export']"
>导出</el-button> >导出</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <!-- <el-col :span="1.5">
<el-button <el-button
type="warning" type="danger"
plain plain
icon="el-icon-edit" icon="el-icon-remove"
size="mini" size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleCK" @click="handleCK"
v-hasPermi="['app:stock:export']" v-hasPermi="['app:stock:export']"
>物料出库</el-button> >手动出库</el-button>
</el-col> </el-col> -->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="stockList" @selection-change="handleSelectionChange"> <!-- <el-table v-loading="loading" :data="stockList" @selection-change="handleSelectionChange" :row-class-name="tableRowClassName"> -->
<el-table-column type="selection" width="55" align="center" /> <el-table v-loading="loading" :data="stockList" @selection-change="handleSelectionChange" >
<el-table-column label="物料编号" align="center" prop="stockId" /> <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="vehicleId" />
<el-table-column label="库位号" align="center" prop="locationId" /> <el-table-column label="库位号" align="center" prop="locationId" />
<el-table-column label="物料编号" align="center" prop="goodsId" /> <el-table-column label="物料编号" align="center" prop="goodsId" />
<el-table-column label="物料名称" align="center" prop="goodsName" /> <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 label="单位" align="center" prop="goodsUnit" />
<el-table-column label="供应商id" align="center" prop="providerId" /> <!-- <el-table-column prop="packingNum" label="出库数量" width="200">
<el-table-column label="供应商名称" align="center" prop="providerName" /> <template slot-scope="scope">
<el-table-column label="剩余数量" align="center" prop="remainNum" /> <el-input-number
<el-table-column label="入库数量" align="center" prop="originNum" /> 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="batchNo" />
<el-table-column label="库龄" align="center" prop="invAge" /> <el-table-column label="库龄" align="center" prop="invAge" />
<el-table-column label="物料状态" align="center" prop="goodsStatus" /> <el-table-column label="供应商id" align="center" prop="providerId" />
<el-table-column label="库存状态" align="center" prop="stockStatus" /> <el-table-column label="供应商名称" align="center" prop="providerName" />
<el-table-column label="入库用户" align="center" prop="createUser" /> <!-- <el-table-column label="物料状态" align="center" prop="goodsStatus" /> -->
<el-table-column label="最近更新时间" align="center" prop="lastUpdateTime" width="180"> <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"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.lastUpdateTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.lastUpdateTime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="最近更新用户" align="center" prop="lastUpdateUser" /> <el-table-column label="最近更新用户" align="center" prop="lastUpdateUser" /> -->
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
@ -217,7 +164,7 @@
v-hasPermi="['app:stock:remove']" v-hasPermi="['app:stock:remove']"
>删除</el-button> >删除</el-button>
</template> </template>
</el-table-column> </el-table-column> -->
</el-table> </el-table>
<pagination <pagination
@ -260,6 +207,9 @@
<el-form-item label="物料名称" prop="goodsName"> <el-form-item label="物料名称" prop="goodsName">
<el-input v-model="form.goodsName" placeholder="请输入物料名称" /> <el-input v-model="form.goodsName" placeholder="请输入物料名称" />
</el-form-item> </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-form-item label="单位" prop="goodsUnit">
<el-input v-model="form.goodsUnit" placeholder="请输入单位" /> <el-input v-model="form.goodsUnit" placeholder="请输入单位" />
</el-form-item> </el-form-item>
@ -312,6 +262,7 @@ import { listStock, getStock, delStock, addStock, updateStock } from "@/api/syst
import {taskOutRequest} from "@/api/system/task"; import {taskOutRequest} from "@/api/system/task";
export default { export default {
dicts: ["in_order_type", "stock_status"],
name: "Stock", name: "Stock",
data() { data() {
return { return {
@ -400,6 +351,23 @@ export default {
this.getList(); this.getList();
}, },
methods: { methods: {
checkSelectable(row) {
if (this.stockList.length > 0) {
//
//idid
if (
this.stockList.some(
(item) => item.stockId === row.stockId && item.stockStatus == 1
)
) {
return false; //false ,falsecheckbox
} else {
return true; //true,checkbox
}
} else {
return true;
}
},
/** 查询【请填写功能名称】列表 */ /** 查询【请填写功能名称】列表 */
getList() { getList() {
this.loading = true; this.loading = true;
@ -436,7 +404,8 @@ export default {
createUser: null, createUser: null,
lastUpdateTime: null, lastUpdateTime: null,
lastUpdateUser: null, lastUpdateUser: null,
remark: null remark: null,
goodsDesc: null
}; };
this.resetForm("form"); this.resetForm("form");
}, },
@ -449,10 +418,22 @@ export default {
resetQuery() { resetQuery() {
this.resetForm("queryForm"); this.resetForm("queryForm");
this.handleQuery(); this.handleQuery();
},
//
tableRowClassName: function ({ row, rowIndex }) {
// console.log(row, "row");
if (row.stockStatus == 1) {
return "warm-row";
}
}, },
// //
handleSelectionChange(selection) { handleSelectionChange(selection) {
this.ids = selection.map(item => item.stockId) 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.single = selection.length!==1
this.multiple = !selection.length this.multiple = !selection.length
}, },
@ -523,15 +504,41 @@ export default {
}, `stock_${new Date().getTime()}.xlsx`) }, `stock_${new Date().getTime()}.xlsx`)
}, },
handleCK(row) { handleCK(row) {
this.reset(); const stockIds = row.stockId || this.ids;
const stockId = row.stockId || this.ids if (stockIds == "" || stockIds == undefined || stockIds.length == 0) {
getStock(stockId).then(response => { this.$modal.msgError("请选择待出库的库存!");
this.form = response.data; return;
this.ck = true; }
this.title = "物料出库"; 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> </script>
<style lang="scss">
.warm-row {
background-color: #f9f9f9 !important;
}
</style>