418 lines
15 KiB
Vue
Raw Normal View History

2025-03-10 13:48:17 +08:00
<template>
<div class="vue-element-page-wrap" ref="tableContainer">
<el-row class="page-search" justify="space-between" align="middle">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-row :gutter="20">
<el-col :span="5">
<el-form-item label="入库单" prop="queryParams.params">
2025-05-22 16:59:12 +08:00
<el-Input v-model="state.queryParams.params.RECEIVEREQUESTNAME" placeholder="到货单" @keydown.enter.prevent = "handleQuery" clearable />
2025-03-10 13:48:17 +08:00
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="page-search-btns">
2025-04-10 19:07:14 +08:00
<el-button type="primary" @click="addDeliveryNote">新增到货单</el-button>
2025-03-10 13:48:17 +08:00
<el-button type="primary" @click="handleQuery">搜索</el-button>
</div>
</el-row>
<div class="vue-element-page-table">
<div class="page-table-operate">
<div class="page-table-title">
<span>入库单详细信息</span>
</div>
<div class="page-table-operateBtns">
<el-popover :persistent="false" placement="right" popper-class="config-table-wrap" trigger="click">
<template #reference>
<el-button class="operateBtns-setting">
<svg-icon icon-class="table_title" width="16px" height="16px" />
</el-button>
</template>
<ConfigTable :list="column" @updateList="updateList" />
</el-popover>
</div>
</div>
2025-04-11 17:01:15 +08:00
<!-- <el-table :height="tableHeight" border v-loading="loading" :data="state.MATERIALRECEIVEACT" highlight-current-row row-key="id"
style="width: 100%" @row-click="handle">-->
2025-03-10 13:48:17 +08:00
<el-table :height="tableHeight" border v-loading="loading" :data="state.MATERIALRECEIVEACT" highlight-current-row row-key="id"
2025-04-11 17:01:15 +08:00
style="width: 100%">
<el-table-column prop="ERPFACTORY" fixed="left" label="库存组织" width="100"></el-table-column>
<el-table-column prop="ERPFACTORY2" label="库存组织" width="100"></el-table-column>
<!-- <el-table-column prop="RECEIVEREQUESTNAME" label="到货单" width="100"></el-table-column>-->
<!-- <el-table-column prop="RECEIVEREQUESTDETAILNAME" label="到货单明细" width="80"></el-table-column>-->
2025-03-10 13:48:17 +08:00
<el-table-column prop="MATERIALSPECNAME" label="物料编号" width="100"></el-table-column>
<el-table-column prop="DESC_CN" label="物料品名" width="80"></el-table-column>
<el-table-column prop="MATERIALUNIT" label="单位" width="80"></el-table-column>
<el-table-column prop="MATERIALUNITDESC" label="单位描述" width="80"></el-table-column>
<el-table-column prop="DESCRPTION" label="物料规格" width="80"></el-table-column>
<el-table-column prop="REQUESTQUANTITY" label="订单数量" width="80"></el-table-column>
<el-table-column prop="RECEIVEDQUANTITY" label="实收数量" width="80"></el-table-column>
2025-04-11 17:01:15 +08:00
<el-table-column prop="THISACCEPTNUMBER" label="本次接收数量" width="180">
<template #default="scope">
<el-input v-model="scope.row.THISACCEPTNUMBER" min = 0 type =number style="width: 170px">
</el-input>
</template>
</el-table-column>
<el-table-column prop="ERPLOCATION" label="仓库" width="180">
2025-03-10 13:48:17 +08:00
<template #default="scope">
2025-04-11 17:01:15 +08:00
<!-- <el-select v-model="scope.row.ERPLOCATION" placeholder="选择仓库" style="width: 170px"
default-first-option @focus="getStorageSpec(scope.row.ERPLOCATION)" filterable >-->
2025-03-10 13:48:17 +08:00
<el-select v-model="scope.row.ERPLOCATION" placeholder="选择仓库" style="width: 170px"
default-first-option filterable @change="getStorageSpec">
2025-05-22 16:57:49 +08:00
<el-option v-for="item in state.ERPLocationList" :key="item.VALUE" :label="item.LABEL"
:value="item.VALUE" />
2025-03-10 13:48:17 +08:00
</el-select>
</template>
</el-table-column>
<!-- <el-table-column prop="ERPLOCATIONDESC" label="库位(CN)" width="180"></el-table-column>-->
<el-table-column prop="LOCATIONNAME" label="货位" width="180">
<template #default="scope">
2025-05-22 16:57:49 +08:00
<el-select v-model="scope.row.LOCATIONNAME" placeholder="选择库位" style="width: 170px" @focus="getStorageSpec(scope.row.ERPLOCATION)"
2025-03-10 13:48:17 +08:00
default-first-option filterable >
2025-05-22 16:57:49 +08:00
<!-- <el-select v-model="scope.row.LOCATIONNAME" placeholder="选择库位" style="width: 170px"
default-first-option filterable >-->
<el-option v-for="item in state.POCreateLocationList" :key="item.VALUE" :label="item.LABEL"
:value="item.VALUE" />
2025-03-10 13:48:17 +08:00
</el-select>
</template>
</el-table-column>
2025-05-27 20:06:35 +08:00
<el-table-column prop="SUPPLIERNO" label="供应商编码" width="80"></el-table-column>
<el-table-column prop="ORDERREMARK" label="单据备注"></el-table-column>
<el-table-column prop="OHREMARK" label="行备注"></el-table-column>
2025-03-10 13:48:17 +08:00
</el-table>
</div>
<div class="vue-element-page-table">
<el-row class="page-search" justify="space-between" align="middle">
<el-form ref="operateFormRef" :model="operateParams" :inline="true">
<el-row :gutter="20">
<el-col :span = "4">
<el-form-item label="过账日期" prop="state.commitDate">
<el-date-picker :clearable="true" :editable="true" v-model="state.commitDate" type="date" placeholder="选择过账时间" value-format="YYYY-MM-DD"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-Input v-model="state.OpCode" :disabled = false readonly />
</el-col>
<el-col :span="3">
<el-button type="primary" @click="sendToERP" :disabled="state.button_state" v-loading="state.button_loading">入库</el-button>
</el-col>
</el-row>
</el-form>
</el-row>
</div>
2025-04-10 19:07:14 +08:00
<drawer v-if="showDeliveryDrawer" v-model="showDeliveryDrawer" @refresh="refresh" :delivery-type="'02'"/>
2025-03-10 13:48:17 +08:00
</div>
</template>
<script lang="ts">
export default {
name: "NoPoStockIn",
};
</script>
<script lang="ts" setup>
import { reactive, ref, onMounted, toRefs, getCurrentInstance, nextTick } from "vue";
import { ElForm, ElMessageBox, ElTable } from "element-plus";
import { BpelEvent, getQueryList } from "@/api/common";
import { useRoute } from 'vue-router'
import { localStorage } from "@/utils/storage";
import { IFTRUE, areAllNotEmpty, msToDate } from "@/utils/CommonUtil"
import { NoChargeStockIn } from '@/api/StockIn'
import {getOpCode} from "@/api/opcode";
import { bTableHeight } from "../../../composables/calcTableHeight";
2025-04-10 19:07:14 +08:00
import Drawer from '@/views/stockIn/delivery/drawer.vue'
2025-04-11 17:01:15 +08:00
import { getStoreDetail } from '@/api/delivery'
import request from '@/utils/request'
2025-03-10 13:48:17 +08:00
const { tableContainer, tableHeight, updateTableHeight, handleResize } = bTableHeight(220);
const route = useRoute()
const queryFormRef = ref(ElForm);
const operateFormRef = ref(ElForm);
const formDataRef = ref(ElForm);
const { proxy }: any = getCurrentInstance();
const state = reactive({
ERPFACTORY: '',
orgNo:'',
commitDate:'',
rsa: "",
loadings: false,
disabledss: false,
InputState: true,
RealERPLocation: [] as any,//用于存储实际查询到仓库
RealLocation: [] as any,//用于存储实际查询到库位
POCreateLocationList: [] as any,
UnitList: [] as any,
ERPLocationList: [] as any,
button_state: false,
MATERIALRECEIVEACT: [] as any,
ReceiveACTList: [] as any,
2025-04-10 19:07:14 +08:00
showDeliveryDrawer: false,
2025-03-10 13:48:17 +08:00
queryParams: {
queryId: "",
version: "",
params: {
//SITENAME: localStorage.get("siteName"),
SITENAME: 'SDK',
RECEIVEREQUESTNAME: "",
2025-04-11 17:01:15 +08:00
deliveryType: '02'
2025-03-10 13:48:17 +08:00
},
},
ChangeParams: {
header: {
MESSAGENAME: '',
LANGUAGE: 'Chinese',
EventUser: localStorage.get('userId')
},
body: {
RECEIVETIME: '',//过账时间
SITENAME: localStorage.get("siteName") == null ? "SDK" : localStorage.get("siteName"),
RECEIVEACTNO: '',
RECEIVEREQUESTNAME: '',
}
},
operateParams: {
date: new Date()
},
OpCode : "",
loading: false,
button_loading: false,
userList: [] as any,
column: [] as any,
});
2025-04-10 19:07:14 +08:00
const { ERPFACTORY, MATERIALRECEIVEACT, rsa, showDeliveryDrawer, queryParams, loading, button_loading, userList, column, operateParams } = toRefs(state);
2025-03-10 13:48:17 +08:00
onMounted(() =>{
var newDate = new Date();
var year = newDate.getFullYear();
var moth = newDate.getMonth() + 1;
if(moth < 10) moth = '0' + moth;
var day = newDate.getDate();
if(day < 10) day = '0' + day;
state.commitDate = year + '-' + moth + '-' + day
// state.column = [
// { header: "库存组织", field: "ERPFACTORY", hide: true },
// { header: "库存组织", field: "ERPFACTORY2", hide: false },
// { header: "到货单", field: "RECEIVEREQUESTNAME", hide: false },
// { header: "到货单明细", field: "RECEIVEREQUESTDETAILNAME", hide: false },
// { header: "物料编号", field: "MATERIALSPECNAME", hide: false },
// { header: "物料品名", field: "DESC_CN", hide: false },
// { header: "单位", field: "MATERIALUNIT", hide: false },
// { header: "单位描述", field: "MATERIALUNITDESC", hide: false },
// { header: "规格", field: "DESCRPTION", hide: false },
// { header: "订单数量", field: "REQUESTQUANTITY", hide: false },
// { header: "实收数量", field: "RECEIVEDQUANTITY", hide: false, },
// { header: "仓库", field: "ERPLOCATION", hide: true, text: true },
// { header: "货位", field: "LOCATIONNAME", hide: true, display: true },
// { header: "本次接收数量", field: "ThisAcceptNumber", hide: true, time: true },
// ];
updateTableHeight();
window.addEventListener('resize', handleResize);
let pwd: any = localStorage.get('remeberPwd');
// state.orgNo = JSON.parse(pwd).orgNo;
state.ERPFACTORY = JSON.parse(pwd)?.orgNo;
});
//查询所有的入库单
function SelectReceiveAct() {
state.queryParams.queryId = 'GetNormalReceiveActNoList'
state.queryParams.version = 'H0002'
getQueryList(state.queryParams).then((res: any) => {
state.ReceiveACTList = res.data
})
}
2025-04-10 19:07:14 +08:00
// 新增到货单
function addDeliveryNote() {
state.showDeliveryDrawer = true
}
// 创建到货单后刷新页面
function refresh(data:any) {
state.queryParams.params.RECEIVEREQUESTNAME = data
state.showDeliveryDrawer = false
handleQuery()
}
2025-03-10 13:48:17 +08:00
// 更新列
function updateList(col: any) {
state.column = col;
}
function handleQuery() {
state.InputState = true
state.queryParams.queryId = 'GetNoBatchPOStockIn'
state.queryParams.version = '00001'
state.MATERIALRECEIVEACT = []
if(state.queryParams.params.RECEIVEREQUESTNAME == ''){
ElMessageBox.alert('输入查询条件', '提醒框', {
confirmButtonText: 'OK',
})
return
}
2025-04-11 17:01:15 +08:00
getStoreDetail(state.queryParams).then((res: any) => {
if (res.resultObj) {
// 加载库位
if (res.resultObj.length > 0) {
2025-05-22 16:57:49 +08:00
getERPLocation(res.resultObj[0].ERPFACTORY)
getStorageSpec(res.resultObj[0].ERPFACTORY)
2025-04-11 17:01:15 +08:00
}
state.MATERIALRECEIVEACT = res.resultObj
} else {
2025-03-10 13:48:17 +08:00
ElMessageBox.alert('查无数据', '提醒框', {
confirmButtonText: 'OK',
})
}
}).catch((error: any) => {
ElMessageBox.alert(error.message, '提醒框', {
confirmButtonText: 'OK',
})
})
}
function sendToERP() {
state.button_loading=true
state.loading=true
console.log(state.button_loading);
console.log(state.loading);
console.log(state.commitDate)
if(state.commitDate == null){
ElMessageBox.alert('过账时间不可清空', {
confirmButtonText: 'OK',
})
return;
}
getOpCode (
{
opcode : state.OpCode,
user: localStorage.get('userId'),
}
).then((res: any) => {
console.log(res.resultObj)
state.OpCode = res.resultObj
let pattern = new RegExp("[\u4E00-\u9FA5]+");
for (let i = 0; i < state.MATERIALRECEIVEACT.length; i++) {
console.log(areAllNotEmpty(state.MATERIALRECEIVEACT[i].LOCATIONNAME), state.RealERPLocation[i])
if (pattern.test(state.MATERIALRECEIVEACT[i].ERPLOCATION || (!areAllNotEmpty(state.MATERIALRECEIVEACT[i].LOCATIONNAME)))) {
state.MATERIALRECEIVEACT[i].LOCATIONNAME = state.RealLocation[i] == null ? "" : state.RealLocation[i]
state.MATERIALRECEIVEACT[i].ERPLOCATION = state.RealERPLocation[i] == null ? "" : state.RealERPLocation[i]
}
}
console.log(state.MATERIALRECEIVEACT)
NoChargeStockIn({
commitDate : state.commitDate,
USER : localStorage.get("userId"),
2025-04-14 11:42:28 +08:00
SITENAME: localStorage.get('siteName') || 'SDK',
RECEIVEREQUESTNAME: state.queryParams.params.RECEIVEREQUESTNAME,
2025-03-10 13:48:17 +08:00
BOXLIST: {
...state.MATERIALRECEIVEACT
}
}).then((res: any) => {
if (res.success) {
console.log(res.message)
2025-03-10 13:48:17 +08:00
state.OpCode = "",
ElMessageBox.alert('入库成功', '提醒框', {
confirmButtonText: 'OK',
})
state.button_loading = false
state.loading = false
handleQuery()
2025-03-10 13:48:17 +08:00
} else {
ElMessageBox.alert('入库失败:' + res.message, '提醒框', {
confirmButtonText: 'OK',
})
state.button_loading = false
state.loading = false
}
}).catch((err: any) => {
console.log(res.message)
ElMessageBox.alert('入库失败' + err.response.data.message, '提醒框', {
confirmButtonText: 'OK',
})
state.button_loading = false
state.loading = false
})
})
}
function handle(row: any, event: any, column: any) {
if (areAllNotEmpty(row.ERPFACTORY)) {
getERPLocation(row.ERPFACTORY)
} else {
ElMessageBox.alert("该明细下组织为空!", '警示框', {
confirmButtonText: 'OK',
})
}
if (areAllNotEmpty(row.ERPLOCATION)){
getStorageSpec(row.ERPLOCATION)
} else {
ElMessageBox.alert("该仓库下货位为空!", '警示框', {
confirmButtonText: 'OK',
})
}
}
/**************************************************公共方法************************************************/
function formatDate(date: any) {
var year = date.getFullYear();
// 注意JavaScript中的月份是从0开始的所以需要+1
var month = ("0" + (date.getMonth() + 1)).slice(-2);
// 同样日期也是从1开始的但是我们需要检查它是否小于10并在前面添加0如果需要
var day = ("0" + date.getDate()).slice(-2);
// 拼接字符串
return year + "-" + month + "-" + day;
}
function getStorageSpec(value: any) {
2025-05-22 16:57:49 +08:00
state.POCreateLocationList = []
2025-03-10 13:48:17 +08:00
getQueryList({
queryId: "GetLocationForCreatePO",
2025-05-22 16:57:49 +08:00
version: "00001",
2025-03-10 13:48:17 +08:00
params: {
SITENAME: "SDK",
2025-05-22 16:57:49 +08:00
ERPLOCATION: value
2025-03-10 13:48:17 +08:00
} as any,
}).then((res: any) => {
state.POCreateLocationList = res.data
2025-05-22 16:57:49 +08:00
})
2025-03-10 13:48:17 +08:00
}
2025-05-22 16:57:49 +08:00
function getERPLocation(erpfactory: any) {
2025-03-10 13:48:17 +08:00
getQueryList({
2025-05-22 16:57:49 +08:00
queryId: "GetERPLocationForCreatePO",
version: "00001",
2025-03-10 13:48:17 +08:00
params: {
2025-05-22 16:57:49 +08:00
SITENAME: "SDK",
ERPFACTORYNAME: erpfactory,//PO
2025-03-10 13:48:17 +08:00
} as any,
}).then((res: any) => {
state.ERPLocationList = res.data
})
}
</script>
<style scoped lang="scss">
.el-overlay.userRoleModel {}
.operate-bottom {
width: 80px;
height: 28px;
float: right;
margin-top: 20px;
}
</style>