From 474b71ef13f6c8fd7f258c8fe9236d85afa93f2e Mon Sep 17 00:00:00 2001 From: x_z <zrhdyxa@163.com> Date: Tue, 25 Apr 2023 17:24:57 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=B0=83=E6=95=B4=E6=91=86=E6=94=BE=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/inventory/invPlace.js | 16 + src/views/inventory/InvOrderPlaceModify.vue | 316 ++++++++++++++++++ src/views/inventory/InvPlace.vue | 267 +++------------ src/views/inventory/InvPlaceSelectOrder.vue | 163 +++++++++ src/views/inventory/InvProductPlaceModify.vue | 268 +++++++++++++++ 5 files changed, 805 insertions(+), 225 deletions(-) create mode 100644 src/views/inventory/InvOrderPlaceModify.vue create mode 100644 src/views/inventory/InvPlaceSelectOrder.vue create mode 100644 src/views/inventory/InvProductPlaceModify.vue diff --git a/src/api/inventory/invPlace.js b/src/api/inventory/invPlace.js index 9c9cf58e..184d0421 100644 --- a/src/api/inventory/invPlace.js +++ b/src/api/inventory/invPlace.js @@ -23,3 +23,19 @@ export function checkCodeSpace(data) { data: data }); } + +export function getInvProductInfo(params) { + return axios({ + url: "/spms/inv/product/getInvProductInfo", + method: "get", + params: params + }); +} + +export function getInvPlaceOrderList(params) { + return axios({ + url: "/spms/inv/product/getInvPlaceOrderList", + method: "get", + params: params + }); +} diff --git a/src/views/inventory/InvOrderPlaceModify.vue b/src/views/inventory/InvOrderPlaceModify.vue new file mode 100644 index 00000000..12205a78 --- /dev/null +++ b/src/views/inventory/InvOrderPlaceModify.vue @@ -0,0 +1,316 @@ +<template> + <div> + <el-form :model="formData" label-width="100px" > + <el-button-group style="display: flex;margin: 0px 0 10px 80%; height: 35px"> + <el-button size="mini" type="primary" @click.native="selectOrder()">选入单据</el-button> + <el-button size="mini" type="primary" @click.native="saveData()">提交</el-button> + <el-button size="mini" type="primary" @click.native="closePlaceDialog(2)">关闭</el-button> + </el-button-group> + <el-row> + <el-col :span="10"> + <el-form-item prop="invWarehouseCode" label="当前仓库:"> + <el-select v-model="formData.invCode" + placeholder="当前仓库信息" + :disabled="list.length>0" + @change="invChange" + style="width: 90%" + clearable> + <el-option + v-for="item in invList" + :key="item.name" + :label="item.name" + :value="item.code"> + <span style="float: left">{{ item.name }}</span> + </el-option> + </el-select> + </el-form-item> + </el-col> + + <el-col :span="10"> + <el-form-item class="query-form-item" label="当前货位:"> + <el-autocomplete + v-model="formData.invSpaceName" + :fetch-suggestions="querySearchAsync" + placeholder="请输入内容" + @select="handleSelect" + clearable + style="width: 90%" + ></el-autocomplete> + </el-form-item> + </el-col> + </el-row> + + <el-row> + <el-col :span="18"> + <el-form-item class="query-form-item" label="扫码录入:"> + <el-input + id="inputer" + @focus="getInputFocus($event)" + @keypress.enter.native="enterKey($event)" + ref='inputRef' + style="ime-mode:disabled" + type="tel" + v-model="formData.code" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="2"> + <el-button + type="primary" + size="mini" + @click.native.stop="search()" + style="margin-left: 15px" + >查询 + </el-button + > + </el-col> + </el-row> + + <el-table v-loading="loading" :data="list" style="width: 100%;margin-top: 20px;" + highlight-current-row + border max-height="300" height="300"> + <el-table-column label="序号" type="index" width="50"></el-table-column> + <el-table-column label="DI/物资编码" prop="relId" width="150"></el-table-column> + <el-table-column label="物资名称" prop="productName" width="150"></el-table-column> + <el-table-column label="规格型号" prop="ggxh" width="150"></el-table-column> + <el-table-column label="批次号" prop="batchNo" width="150"></el-table-column> + <el-table-column label="序列号" prop="serialNo" width="150"></el-table-column> + <el-table-column label="计量单位" prop="measname" width="150"></el-table-column> + <el-table-column label="货位" prop="invSpaceName" width="150"></el-table-column> + <el-table-column label="注册备案号" prop="zczbhhzbapzbh" width="150"></el-table-column> + <el-table-column label="生产厂家" prop="manufactory" width="150"></el-table-column> + <el-table-column label="供应商" prop="supName" width="150"></el-table-column> + </el-table> + </el-form> + + + <el-dialog + title="选入单据" + :visible.sync="orderDialogVisible" + :close-on-click-modal="false" + :close-on-press-escape="false" + width="60%" + v-if="orderDialogVisible" + append-to-body + > + <invPlaceSelectOrder + :closeDialog="closeDialog" + :formData="selectFormData" + :getInvProductInfogetInvProductInfogetInvProductInfo="getInvProductInfo" + > + </invPlaceSelectOrder> + </el-dialog> + </div> +</template> + +<script> +import {getInvListByUser} from "@/api/system/invWarehouse"; +import {getInvSpaceList} from "@/api/inventory/invSpace"; +import {isBlank} from "@/utils/strUtil"; +import {bindInvSpace, getInvProductInfo} from "@/api/inventory/invPlace"; +import invPlaceSelectOrder from "@/views/inventory/InvPlaceSelectOrder.vue"; + +export default { + props: { + closePlaceDialog: { + type: Function, + required: true + } + }, + name: "InvOrderPlaceModify", + data() { + return { + formData: { + invCode: this.$store.getters.locInvCode, + invSpaceCode: null, + invSpaceName: null, + orderId: null, + }, + list: [], + codeArray: [], + invList: [], + spaceList: [], + loading: false, + orderDialogVisible: false, + selectFormData: { + invCode: null, + invName: null + } + } + }, + methods: { + saveData() { + if (isBlank(this.formData.invCode)) { + this.$message.error("请选择当前仓库"); + return; + } + if (isBlank(this.formData.invSpaceCode)) { + this.$message.error("请选择当前货位"); + return; + } + if (this.list.length === 0) { + this.$message.error("请录入需要上架的物资数据"); + return; + } + this.$confirm('是否确认保存当前数据?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.list.forEach((item) => { + this.codeArray.push(item.code); + }); + let params = { + invCode: this.formData.invCode, + invSpaceCode: this.formData.invSpaceCode, + codeArray: this.codeArray + }; + bindInvSpace(params).then((res) => { + if (res.code === 20000) { + this.$message.success("上架成功"); + this.clearFormData(); + } else { + this.$message.error(res.message); + } + }).catch((error) => { + this.$message.error(error.message); + }); + }).catch(() => { + }); + }, + clearFormData() { + //清空表单数据 + this.formData = { + invCode: this.$store.getters.locInvCode, + invSpaceCode: null, + invSpaceName: null, + code: null, + }; + this.codeArray = []; + this.list = []; + this.selectFormData = { + invCode: null, + invName: null + }; + }, + invChange() { + this.formData.invSpaceCode = null; + this.formData.invSpaceName = null; + this.list.forEach((item) => { + item.invSpaceCode = null; + item.invSpaceName = null; + }) + this.getSpaceList(); + }, + querySearchAsync(queryString, cb) { + let restaurants = this.spaceList; + restaurants.forEach((item) => { + item.value = item.name; + }) + let results = queryString ? restaurants.filter(this.createStateFilter(queryString)) : restaurants; + cb(results); + }, + createStateFilter(queryString) { + return (state) => { + return (state.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0); + }; + }, + handleSelect(item) { + this.formData.invSpaceCode = item.code; + this.formData.invSpaceName = item.name; + this.list.forEach((invProduct) => { + invProduct.invSpaceCode = item.code; + invProduct.invSpaceName = item.name; + }); + }, + getInvList() { + getInvListByUser() + .then((response) => { + this.invList = response.data || []; + this.getSpaceList(); + this.getList(); + }) + .catch(() => { + }); + }, + getSpaceList() { + let params = { + invWarehouseCode: this.formData.invCode, + status: 1 + }; + getInvSpaceList(params).then((res) => { + this.spaceList = res.data.list || []; + }) + }, + search(event) { + if (event != null) { + event.target.select(); + } + this.$refs.inputRef.select(); + if (isBlank(this.formData.invCode)) { + this.$message.error('当前仓库不能为空'); + return; + } + + this.formData.orderId = this.formData.orderId.trim(); + if (this.$isBlank(this.formData.orderId)) return; + this.getInvProductInfo(this.formData.orderId); + this.$refs.inputRef.select(); + }, + getInvProductInfo(orderId) { + let params = { + invCode: this.formData.invCode, + invSpaceCode: this.formData.invSpaceCode, + code: orderId + }; + getInvProductInfo(params).then((res) => { + if (res.data !== null) { + res.data.forEach((item) => { + this.list.push(item); + }); + } else { + this.$message.warning("未查询到产品信息"); + } + }) + }, + getInputFocus(event) { + event.currentTarget.select(); + }, + enterKey(event) { + this.checkSuccess = true; + this.addCode(event); + this.$refs.inputRef.focus(); + this.$refs.inputRef.select(); + }, + selectOrder() { + this.orderDialogVisible = true; + this.invList.forEach((item) => { + if (item.code === this.formData.invCode) { + this.selectFormData = { + invCode: this.formData.invCode, + invName: item.name + }; + } + }) + }, + closeDialog() { + this.orderDialogVisible = false; + this.selectFormData = { + invCode: null, + invName: null + }; + }, + + }, + components: { + invPlaceSelectOrder + }, + created() { + this.getInvList(); + }, +} +</script> + +<style scoped> + +</style> diff --git a/src/views/inventory/InvPlace.vue b/src/views/inventory/InvPlace.vue index 3ece1e89..5d2d56e2 100644 --- a/src/views/inventory/InvPlace.vue +++ b/src/views/inventory/InvPlace.vue @@ -31,7 +31,8 @@ <el-button-group style="margin-left: 10px;display:flex;"> <el-button type="primary" icon="el-icon-refresh" @click="onReset">重置</el-button> <el-button type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button> - <el-button type="primary" icon="el-icon-box" @click="invPlace">摆放</el-button> + <el-button type="primary" icon="el-icon-box" @click="invPlace(1)">按物资上架</el-button> + <el-button type="primary" icon="el-icon-box" @click="invPlace(2)">按单上架</el-button> </el-button-group> </el-form-item> </el-form> @@ -62,120 +63,40 @@ </el-card> <el-dialog - title="库存摆放" - :visible.sync="placeDialogVisible" + title="按物资上架" + :visible.sync="productPlaceDialogVisible" :close-on-click-modal="false" :close-on-press-escape="false" - width="60%" - v-if="placeDialogVisible" + width="85%" + v-if="productPlaceDialogVisible" > - <el-card style="margin: 5px;margin-top: -20px"> - <el-form :model="formData" label-width="100px" style="margin-bottom: -15px"> - <el-button-group style="display: flex;margin: 0px 0 10px 80%; height: 35px"> - <el-button - size="mini" - type="primary" - @click.native="saveData()" - >提交 - </el-button - > - </el-button-group> - <el-row> - <el-col :span="10"> - <el-form-item prop="invWarehouseCode" label="当前仓库:"> - <el-select v-model="formData.invCode" - placeholder="当前仓库信息" - :disabled="codeArray.length>0" - @change="formInvChange" - style="width: 90%" - clearable> - <el-option - v-for="item in invList" - :key="item.name" - :label="item.name" - :value="item.code"> - <span style="float: left">{{ item.name }}</span> - </el-option> - </el-select> - </el-form-item> - </el-col> - - <el-col :span="10"> - <el-form-item class="query-form-item" label="当前货位:"> - <el-select v-model="formData.invSpaceCode" - placeholder="当前货位信息" - :disabled="codeArray.length>0" - style="width: 90%" - clearable> - <el-option - v-for="item in formSpaceList" - :key="item.name" - :label="item.name" - :value="item.code"> - <span style="float: left">{{ item.name }}</span> - </el-option> - </el-select> - </el-form-item> - </el-col> - </el-row> - - <el-row> - <el-col :span="18"> - <el-form-item class="query-form-item" label="扫码录入:"> - <el-input - id="inputer" - @focus="getInputFocus($event)" - @keypress.enter.native="enterKey($event)" - ref='inputRef' - style="ime-mode:disabled" - type="tel" - v-model="formData.code" - ></el-input> - </el-form-item> - </el-col> - <el-col :span="2"> - <el-button - type="primary" - size="mini" - @click.native.stop="addCode()" - style="margin-left: 15px" - >添加 - </el-button - > - </el-col> - </el-row> - - <el-table v-loading="codeTableLoading" :data="codeArray" style="width: 100%;margin-top: 20px;" - highlight-current-row - border max-height="300" height="300"> - <el-table-column label="序号" type="index" width="50"></el-table-column> - <el-table-column label="条码" prop="code" show-overflow-tooltip> - </el-table-column> - <el-table-column label="操作" width="150"> - <template slot-scope="scope"> - <el-button - type="text" - size="small" - @click.stop="true" - @click.native="deleteCodeArray(scope.$index, scope.row)" - >删除 - </el-button - > - </template> - </el-table-column> - </el-table> - </el-form> - </el-card> + <invProductPlaceModify + :closePlaceDialog="closePlaceDialog" + ></invProductPlaceModify> </el-dialog> + <el-dialog + title="按单上架" + :visible.sync="orderPlaceDialogVisible" + :close-on-click-modal="false" + :close-on-press-escape="false" + width="85%" + v-if="orderPlaceDialogVisible" + > + <invOrderPlaceModify + :closePlaceDialog="closePlaceDialog" + ></invOrderPlaceModify> + </el-dialog> </div> </template> <script> import {getInvListByUser} from "@/api/system/invWarehouse"; import {getInvSpaceList} from "@/api/inventory/invSpace"; -import {getPlaceDetailList, bindInvSpace, checkCodeSpace} from "@/api/inventory/invPlace"; +import {getPlaceDetailList} from "@/api/inventory/invPlace"; import {isBlank} from "@/utils/strUtil"; +import invProductPlaceModify from "@/views/inventory/InvProductPlaceModify.vue"; +import invOrderPlaceModify from "@/views/inventory/InvOrderPlaceModify.vue"; export default { name: "InvProducts", @@ -192,18 +113,8 @@ export default { invList: [], spaceList: [], loading: false, - fromOptions: [], - formData: { - invCode: null, - invSpaceCode: null, - code: null, - codeArray: [] - }, - placeDialogVisible: false, - codeTableLoading: false, - codeArray: [], - formInvList: [], - formSpaceList: [] + productPlaceDialogVisible: false, + orderPlaceDialogVisible: false }; }, methods: { @@ -266,121 +177,27 @@ export default { this.spaceList = res.data.list || []; }) }, - formInvChange() { - this.formData.invSpaceCode = null; - let params = { - invWarehouseCode: this.formData.invCode, - status: 1 - }; - getInvSpaceList(params).then((res) => { - this.formSpaceList = res.data.list || []; - }) - }, - invPlace() { - this.placeDialogVisible = true; - this.formData = { - invCode: null, - invSpaceCode: null, - code: null, - codeArray: [] - }; - this.codeArray = []; - }, - deleteCodeArray(index, row) { - for (let i = 0; i < this.codeArray.length; i++) { - if (this.codeArray[i] === row) { - this.codeArray.splice(i, 1); - return; - } - } - }, - addCode(event) { - if (event != null) { - event.target.select(); + invPlace(type) { + if (type === 1) { + //按物资上架 + this.productPlaceDialogVisible = true; + } else if (type === 2) { + this.orderPlaceDialogVisible = true; } - this.$refs.inputRef.select(); - if (isBlank(this.formData.invCode)) { - this.$message.error('当前仓库不能为空'); - return; - } - - if (isBlank(this.formData.invSpaceCode)) { - this.$message.error('当前货位不能为空'); - return; - } - - this.formData.code = this.formData.code.trim(); - if (this.$isBlank(this.formData.code)) return; - let tQuery = Object.assign(JSON.parse(JSON.stringify(this.formData))); - this.checkCode(tQuery); - this.$refs.inputRef.select(); - }, - getInputFocus(event) { - event.currentTarget.select(); - }, - enterKey(event) { - this.checkSuccess = true; - this.addCode(event); - this.$refs.inputRef.focus(); - this.$refs.inputRef.select(); }, - checkCode(tQuery) { - //检验是否重复添加 - let flag = false; - this.codeArray.forEach(item => { - if (item.code === this.formData.code) { - this.$message.error("重复条码!"); - flag = true; - return; - } - }); - if (flag) { - return; + closePlaceDialog(type) { + if (type === 1) { + this.productPlaceDialogVisible = false; + } else if (type === 2) { + this.orderPlaceDialogVisible = false; } - //校验此条码是否已经被绑定到其他货位,如已被绑定,则提示,点击确定之后,重置此库存数据的仓库和分库数据 - checkCodeSpace(tQuery).then((res) => { - if (res.code === 20000) { - this.codeArray.push({code: this.formData.code}); - } else if (res.code === 8) { - this.loading = false; - this.$message.error(res.message); - } else if (res.code === 7) { - this.$confirm(res.message, '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning' - }).then(() => { - this.codeArray.push({code: this.formData.code}); - }).catch(() => { - this.loading = false; - }); - } - }); - }, - saveData() { - if (isBlank(this.formData.invCode) || isBlank(this.formData.invSpaceCode)) { - this.$message.warning("请选择仓库和货位信息"); - return; - } - if (this.codeArray.length === 0) { - this.$message.warning("请扫描需要摆放的货物"); - return; - } - this.formData.codeArray = []; - this.codeArray.forEach(item => { - this.formData.codeArray.push(item.code); - }); - bindInvSpace(this.formData).then((res) => { - if (res.code === 20000) { - this.$message.success("绑定成功"); - this.placeDialogVisible = false; - this.getList(); - } else { - this.$message.error("绑定失败"); - } - }) + this.getList(); }, }, + components: { + invProductPlaceModify, + invOrderPlaceModify + }, mounted() { document.body.ondrop = function (event) { event.preventDefault(); diff --git a/src/views/inventory/InvPlaceSelectOrder.vue b/src/views/inventory/InvPlaceSelectOrder.vue new file mode 100644 index 00000000..63465c93 --- /dev/null +++ b/src/views/inventory/InvPlaceSelectOrder.vue @@ -0,0 +1,163 @@ +<template> + <div> + <el-form :model="formData" class="query-form" size="mini" label-width="100px" :inline="true"> + <el-form-item prop="invWarehouseCode" label="当前仓库:"> + <el-input disabled :value="formData.invName"></el-input> + </el-form-item> + + <el-form-item prop="invWarehouseCode" label="单号:"> + <el-input :value="formData.orderId" clearable placeholder="请输入单号"></el-input> + </el-form-item> + + <el-form-item> + <el-button-group style="margin-left: 10px;display:flex;"> + <el-button type="primary" icon="el-icon-refresh" @click.native.stop="reset()">重置</el-button> + <el-button type="primary" icon="el-icon-search" @click.native.stop="search()">查询</el-button> + <el-button type="primary" icon="el-icon-check" @click.native.stop="check()">选入</el-button> + </el-button-group> + </el-form-item> + + </el-form> + + <el-table v-loading="loading" :data="list" style="width: 100%;margin-top: 20px;" + highlight-current-row + @current-change="checkedOrder" + border max-height="300" height="300"> + <el-table-column label="序号" type="index" width="50"></el-table-column> + <el-table-column label="单号" prop="billNo" width="150"></el-table-column> + <el-table-column label="单据类型" prop="billTypeName" width="150"></el-table-column> + <el-table-column label="出入库类型" prop="mainAction" width="150"> + <template slot-scope="scope"> + {{ mainActionNames[scope.row.mainAction] }} + </template> + </el-table-column> + <el-table-column label="往来单位" prop="fromName" width="150"></el-table-column> + <el-table-column label="来源单号" prop="corpOrderId" width="150"></el-table-column> + <el-table-column label="单据来源" prop="fromType" width="150"> + <template slot-scope="scope"> + <span>{{ sourceMap[scope.row.fromType] }}</span> + </template> + </el-table-column> + <el-table-column label="创建时间" prop="createTime" width="150"></el-table-column> + <el-table-column label="验收时间" prop="auditTime" width="150"></el-table-column> + <el-table-column label="审核人" prop="reviewUserName" width="150"></el-table-column> + </el-table> + + <pagination + v-show="total>0" + :total="total" + :limit.sync="filterQuery.limit" + :page.sync="filterQuery.page" + @pagination="getList" + ></pagination> + </div> + +</template> + +<script> +import {getInvPlaceOrderList} from "@/api/inventory/invPlace"; +import {isBlank} from "@/utils/strUtil"; + +export default { + props: { + closeDialog: { + type: Function, + required: true + }, + formData: { + type: Object, + required: true + }, + getInvProductInfo: { + type: Function, + required: true + } + }, + name: "InvPlaceSelectOrder", + data() { + return { + filterQuery: { + invCode: this.formData.invCode, + orderId: null, + page: 1, + limit: 10 + }, + list: [], + total: 0, + codeArray: [], + invList: [], + loading: false, + orderDialogVisible: false, + mainActionNames: { + WareHouseIn: "入库", + WareHouseOut: "出库" + }, + sourceMap: { + "1": "UDIMS平台", + "2": "网页新增", + "3": "pda已校验", + "4": "pda未校验", + "5": "pc端扫码精灵", + "6": "单据流转", + "7": "供应商平台", + "8": "平衡补单", + "9": "单据验收直接补单", + "10": "单据复制", + "11": "盘点单据转单", + "12": "申购计划转单", + "13": "领用单据转单", + "14": "第三方单据转单", + }, + checkOrderId: null + } + }, + methods: { + reset() { + this.filterQuery.orderId = null; + this.filterQuery.page = 1; + this.list = []; + this.checkOrderId = null; + this.getList(); + }, + search() { + this.filterQuery.page = 1; + this.getList(); + }, + getList() { + this.loading = true; + getInvPlaceOrderList().then((res) => { + this.loading = false; + if (res.code === 20000) { + this.list = res.data.list || []; + this.total = res.data.total || 0; + } else { + this.list = []; + this.total = 0; + } + }).catch((error) => { + this.loading = false; + this.list = []; + this.total = 0; + }); + }, + check() { + if (isBlank(this.checkOrderId)) { + this.$message.error("请选择单据"); + return; + } + this.getInvProductInfo(this.checkOrderId); + this.closeDialog(); + }, + checkedOrder(order) { + this.checkOrderId = order.billNo; + }, + }, + created() { + this.getInvList(); + }, +} +</script> + +<style scoped> + +</style> diff --git a/src/views/inventory/InvProductPlaceModify.vue b/src/views/inventory/InvProductPlaceModify.vue new file mode 100644 index 00000000..2d029203 --- /dev/null +++ b/src/views/inventory/InvProductPlaceModify.vue @@ -0,0 +1,268 @@ +<template> + <el-form :model="formData" label-width="100px"> + <el-button-group style="display: flex;margin: 0px 0 10px 80%; height: 35px"> + <el-button size="mini" type="primary" @click.native="saveData()">提交</el-button> + <el-button size="mini" type="primary" @click.native="closePlaceDialog(1)">关闭</el-button> + </el-button-group> + <el-row> + <el-col :span="10"> + <el-form-item prop="invWarehouseCode" label="当前仓库:"> + <el-select v-model="formData.invCode" + placeholder="当前仓库信息" + :disabled="list.length>0" + @change="invChange" + style="width: 90%" + clearable> + <el-option + v-for="item in invList" + :key="item.name" + :label="item.name" + :value="item.code"> + <span style="float: left">{{ item.name }}</span> + </el-option> + </el-select> + </el-form-item> + </el-col> + + <el-col :span="10"> + <el-form-item class="query-form-item" label="当前货位:"> + <el-autocomplete + v-model="formData.invSpaceName" + :fetch-suggestions="querySearchAsync" + placeholder="请输入内容" + @select="handleSelect" + clearable + style="width: 90%" + ></el-autocomplete> + </el-form-item> + </el-col> + </el-row> + + <el-row> + <el-col :span="18"> + <el-form-item class="query-form-item" label="扫码录入:"> + <el-input + id="inputer" + @focus="getInputFocus($event)" + @keypress.enter.native="enterKey($event)" + ref='inputRef' + style="ime-mode:disabled" + type="tel" + v-model="formData.code" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="2"> + <el-button + type="primary" + size="mini" + @click.native.stop="addCode()" + style="margin-left: 15px" + >添加 + </el-button + > + </el-col> + </el-row> + + <el-table v-loading="loading" :data="list" style="width: 100%;margin-top: 20px;" + highlight-current-row + border max-height="300" height="300"> + <el-table-column label="序号" type="index" width="50"></el-table-column> + <el-table-column label="DI/物资编码" prop="relId" width="150"></el-table-column> + <el-table-column label="物资名称" prop="productName" width="150"></el-table-column> + <el-table-column label="规格型号" prop="ggxh" width="150"></el-table-column> + <el-table-column label="批次号" prop="batchNo" width="150"></el-table-column> + <el-table-column label="序列号" prop="serialNo" width="150"></el-table-column> + <el-table-column label="计量单位" prop="measname" width="150"></el-table-column> + <el-table-column label="货位" prop="invSpaceName" width="150"></el-table-column> + <el-table-column label="注册备案号" prop="zczbhhzbapzbh" width="150"></el-table-column> + <el-table-column label="生产厂家" prop="manufactory" width="150"></el-table-column> + <el-table-column label="供应商" prop="supName" width="150"></el-table-column> + </el-table> + </el-form> +</template> + +<script> +import {getInvListByUser} from "@/api/system/invWarehouse"; +import {getInvSpaceList} from "@/api/inventory/invSpace"; +import {isBlank} from "@/utils/strUtil"; +import {bindInvSpace, getInvProductInfo} from "@/api/inventory/invPlace"; + +export default { + props: { + closePlaceDialog: { + type: Function, + required: true + } + }, + name: "InvProductPlaceModify", + data() { + return { + formData: { + invCode: this.$store.getters.locInvCode, + invSpaceCode: null, + invSpaceName: null, + code: null, + }, + list: [], + codeArray: [], + invList: [], + spaceList: [], + loading: false + } + }, + methods: { + saveData() { + if (isBlank(this.formData.invCode)) { + this.$message.error("请选择当前仓库"); + return; + } + if (isBlank(this.formData.invSpaceCode)) { + this.$message.error("请选择当前货位"); + return; + } + if (this.list.length === 0) { + this.$message.error("请录入需要上架的物资数据"); + return; + } + this.$confirm('是否确认保存当前数据?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.list.forEach((item) => { + this.codeArray.push(item.code); + }); + let params = { + invCode: this.formData.invCode, + invSpaceCode: this.formData.invSpaceCode, + codeArray: this.codeArray + }; + bindInvSpace(params).then((res) => { + if (res.code === 20000) { + this.$message.success("上架成功"); + this.clearFormData(); + } else { + this.$message.error(res.message); + } + }).catch((error) => { + this.$message.error(error.message); + }); + }).catch(() => { + }); + }, + clearFormData() { + //清空表单数据 + this.formData = { + invCode: this.$store.getters.locInvCode, + invSpaceCode: null, + invSpaceName: null, + code: null, + }; + this.codeArray = []; + this.list = []; + }, + invChange() { + this.formData.invSpaceCode = null; + this.formData.invSpaceName = null; + this.list.forEach((item) => { + item.invSpaceCode = null; + item.invSpaceName = null; + }) + this.getSpaceList(); + }, + querySearchAsync(queryString, cb) { + let restaurants = this.spaceList; + restaurants.forEach((item) => { + item.value = item.name; + }) + let results = queryString ? restaurants.filter(this.createStateFilter(queryString)) : restaurants; + cb(results); + }, + createStateFilter(queryString) { + return (state) => { + return (state.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0); + }; + }, + handleSelect(item) { + this.formData.invSpaceCode = item.code; + this.formData.invSpaceName = item.name; + this.list.forEach((invProduct) => { + invProduct.invSpaceCode = item.code; + invProduct.invSpaceName = item.name; + }); + }, + getInvList() { + getInvListByUser() + .then((response) => { + this.invList = response.data || []; + this.getSpaceList(); + this.getList(); + }) + .catch(() => { + }); + }, + getSpaceList() { + let params = { + invWarehouseCode: this.formData.invCode, + status: 1 + }; + getInvSpaceList(params).then((res) => { + this.spaceList = res.data.list || []; + }) + }, + addCode(event) { + if (event != null) { + event.target.select(); + } + this.$refs.inputRef.select(); + if (isBlank(this.formData.invCode)) { + this.$message.error('当前仓库不能为空'); + return; + } + + if (isBlank(this.formData.invSpaceCode)) { + this.$message.error('当前货位不能为空'); + return; + } + + this.formData.code = this.formData.code.trim(); + if (this.$isBlank(this.formData.code)) return; + this.getInvProductInfo(this.formData.code); + this.$refs.inputRef.select(); + }, + getInvProductInfo(code) { + let params = { + invCode: this.formData.invCode, + invSpaceCode: this.formData.invSpaceCode, + code: code + }; + getInvProductInfo(params).then((res) => { + if (res.data !== null) { + res.data.forEach((item) => { + this.list.push(item); + }); + } else { + this.$message.warning("未查询到产品信息"); + } + }) + }, + getInputFocus(event) { + event.currentTarget.select(); + }, + enterKey(event) { + this.checkSuccess = true; + this.addCode(event); + this.$refs.inputRef.focus(); + this.$refs.inputRef.select(); + }, + }, + created() { + this.getInvList(); + }, +} +</script> + +<style scoped> + +</style>