Merge branch 'dev' of http://10.10.11.66:3000/mes/nalinv-ui into dev
This commit is contained in:
commit
97c336de32
39
src/api/wms/barcode-creation.js
Normal file
39
src/api/wms/barcode-creation.js
Normal file
@ -0,0 +1,39 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query,obj) {
|
||||
return request({
|
||||
url: '/wms/barcode-creation/log',
|
||||
method: 'post',
|
||||
params: query,
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function itemPage(query) {
|
||||
return request({
|
||||
url: '/wms/barcode-creation/item-page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
export function boxTypePage(query) {
|
||||
return request({
|
||||
url: '/wms/barcode-creation/box-type-page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
export function storageBinPage(query) {
|
||||
return request({
|
||||
url: '/wms/barcode-creation/storage-bin-page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
export function save(obj) {
|
||||
return request({
|
||||
url: '/wms/barcode-creation',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
16
src/api/wms/barcode-query.js
Normal file
16
src/api/wms/barcode-query.js
Normal file
@ -0,0 +1,16 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function getObjByInventoryId(inventoryId) {
|
||||
return request({
|
||||
url: '/wms/barCodeQuery/getObjByInventoryId/' + inventoryId,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
export function labelPrint(carrier) {
|
||||
return request({
|
||||
url: '/wms/barCodeQuery/labelPrint',
|
||||
method: 'get',
|
||||
params: carrier
|
||||
})
|
||||
|
||||
}
|
||||
80
src/api/wms/carrier-bind-inventory.js
Normal file
80
src/api/wms/carrier-bind-inventory.js
Normal file
@ -0,0 +1,80 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchPageList(query) {
|
||||
return request({
|
||||
url: '/wms/carrier-bind-inventory/getBindPage',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/carrier-bind-inventory/getBindList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
export function addObj(obj) {
|
||||
return request({
|
||||
url: '/wms/carrier-bind-inventory',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getObj(id) {
|
||||
return request({
|
||||
url: '/wms/carrier-bind-inventory/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
export function delObj(id) {
|
||||
return request({
|
||||
url: '/wms/carrier-bind-inventory/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function putObj(obj) {
|
||||
return request({
|
||||
url: '/wms/carrier-bind-inventory',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
//通过id查询载具库存绑定表,扫描主条码
|
||||
export function getBindList(carrier) {
|
||||
return request({
|
||||
url: '/wms/carrier-member/getBindList/' + carrier,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
//扫描子条码
|
||||
export function getItem(carrierOrInventory) {
|
||||
return request({
|
||||
url: '/wms/carrier-member/getItem/' + carrierOrInventory,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
//绑定
|
||||
export function bind(obj) {
|
||||
return request({
|
||||
url: '/wms/carrier-member/bind',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getBindListByTray(carrier) {
|
||||
return request({
|
||||
url: '/wms/carrier-member/getBindListByTray/' + carrier,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
95
src/api/wms/carrier-unbind-inventory.js
Normal file
95
src/api/wms/carrier-unbind-inventory.js
Normal file
@ -0,0 +1,95 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchPageList(query) {
|
||||
return request({
|
||||
url: '/wms/carrier-bind-inventory/getBindPage',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/carrier-bind-inventory/getBindList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
export function addObj(obj) {
|
||||
return request({
|
||||
url: '/wms/carrier-bind-inventory',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getObj(id) {
|
||||
return request({
|
||||
url: '/wms/carrier-bind-inventory/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
export function delObj(id) {
|
||||
return request({
|
||||
url: '/wms/carrier-bind-inventory/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function putObj(obj) {
|
||||
return request({
|
||||
url: '/wms/carrier-bind-inventory',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
//通过id查询载具库存绑定表,扫描主条码
|
||||
export function getBindList(carrier) {
|
||||
return request({
|
||||
url: '/wms/carrier-member/getBindList/' + carrier,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
//扫描子条码
|
||||
export function getItem(carrierOrInventory) {
|
||||
return request({
|
||||
url: '/wms/carrier-member/getItem/' + carrierOrInventory,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
//解绑
|
||||
export function unbind(obj) {
|
||||
return request({
|
||||
url: '/wms/carrier-member/unbind',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getCarrier(query) {
|
||||
return request({
|
||||
url: '/wms/carrier/getCarrier',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getBindListByTray(carrier) {
|
||||
return request({
|
||||
url: '/wms/carrier-member/getBindListByTray/' + carrier,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function confirmUnBind(obj) {
|
||||
return request({
|
||||
url: '/wms/carrier/confirmUnBind',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
48
src/api/wms/carrier.js
Normal file
48
src/api/wms/carrier.js
Normal file
@ -0,0 +1,48 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/carrier/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function addObj(obj) {
|
||||
return request({
|
||||
url: '/wms/carrier',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getObj(id) {
|
||||
return request({
|
||||
url: '/wms/carrier/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function delObj(id) {
|
||||
return request({
|
||||
url: '/wms/carrier/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function labelPrint(printList, printer) {
|
||||
return request({
|
||||
url: '/wms/carrier/by-labelRePrint',
|
||||
method: 'post',
|
||||
data: printList
|
||||
})
|
||||
}
|
||||
|
||||
export function putObj(obj) {
|
||||
return request({
|
||||
url: '/wms/carrier',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
|
||||
}
|
||||
39
src/api/wms/carriertype.js
Normal file
39
src/api/wms/carriertype.js
Normal file
@ -0,0 +1,39 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/carriertype/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function addObj(obj) {
|
||||
return request({
|
||||
url: '/wms/carriertype',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getObj(id) {
|
||||
return request({
|
||||
url: '/wms/carriertype/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function delObj(id) {
|
||||
return request({
|
||||
url: '/wms/carriertype/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function putObj(obj) {
|
||||
return request({
|
||||
url: '/wms/carriertype',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
10
src/api/wms/click-unShelve.js
Normal file
10
src/api/wms/click-unShelve.js
Normal file
@ -0,0 +1,10 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
//一键下架
|
||||
export function unShelve(storageLocation) {
|
||||
return request({
|
||||
url: '/wms/storage-bin-bind-inventory/unbindByStorageLocation?storageLocation=' + storageLocation,
|
||||
method: 'post',
|
||||
})
|
||||
}
|
||||
|
||||
17
src/api/wms/complex-report.js
Normal file
17
src/api/wms/complex-report.js
Normal file
@ -0,0 +1,17 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function page(query) {
|
||||
return request({
|
||||
url: '/wms/complexReport/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function list(query) {
|
||||
return request({
|
||||
url: '/wms/complexReport/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
57
src/api/wms/cost-center-requisition.js
Normal file
57
src/api/wms/cost-center-requisition.js
Normal file
@ -0,0 +1,57 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisition/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getDocumentDetail(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/' + documentNo,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function getInventoryOriginalQty(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getInventoryOriginalQty',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
//提交
|
||||
export function submit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisitionSubmit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getItemInventory',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getInventoryQty(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getInventoryQty',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function oneClickPassValidate(obj) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisitionSubmit/oneClickPassValidate',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
48
src/api/wms/cost-center-return.js
Normal file
48
src/api/wms/cost-center-return.js
Normal file
@ -0,0 +1,48 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisition/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getDocumentDetail(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/' + documentNo,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function getInventoryOriginalQty(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getInventoryOriginalQty',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
//提交
|
||||
export function returnSubmit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/returnSubmit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getItemInventory',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function rejectDocumentByNo(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/rejectDocumentByNo?documentNo=' + documentNo,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
39
src/api/wms/customer.js
Normal file
39
src/api/wms/customer.js
Normal file
@ -0,0 +1,39 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/customer/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function addObj(obj) {
|
||||
return request({
|
||||
url: '/wms/customer',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getObj(id) {
|
||||
return request({
|
||||
url: '/wms/customer/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function delObj(id) {
|
||||
return request({
|
||||
url: '/wms/customer/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function putObj(obj) {
|
||||
return request({
|
||||
url: '/wms/customer',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
53
src/api/wms/data-field.js
Normal file
53
src/api/wms/data-field.js
Normal file
@ -0,0 +1,53 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/mes-core/data-field/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function addObj(obj) {
|
||||
return request({
|
||||
url: '/mes-core/data-field',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getObj(id) {
|
||||
return request({
|
||||
url: '/mes-core/data-field/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function getByCode(code) {
|
||||
return request({
|
||||
url: '/mes-core/data-field/by-code?code=' + code,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function delByCode(code) {
|
||||
return request({
|
||||
url: '/mes-core/data-field/delete-by-code?code=' + code,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function delObj(id) {
|
||||
return request({
|
||||
url: '/mes-core/data-field/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function putObj(obj) {
|
||||
return request({
|
||||
url: '/mes-core/data-field',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
25
src/api/wms/dn-order.js
Normal file
25
src/api/wms/dn-order.js
Normal file
@ -0,0 +1,25 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/dn-order/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function selectDetailByID(query) {
|
||||
return request({
|
||||
url: '/wms/dn-order/selectDetailByID',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function updateDetailBatchById(param) {
|
||||
return request({
|
||||
url: '/wms/dn-order/updateDetailBatchById',
|
||||
method: 'put',
|
||||
data: param
|
||||
})
|
||||
}
|
||||
31
src/api/wms/document-cancel.js
Normal file
31
src/api/wms/document-cancel.js
Normal file
@ -0,0 +1,31 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function pageForCancel(query) {
|
||||
return request({
|
||||
url: '/wms/document/detail/pageForCancel',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function cancelCloseDocument(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/cancelCloseDocument',
|
||||
method: 'post',
|
||||
data: documentNo,
|
||||
headers: {
|
||||
'Content-Type': 'application/json; charset=utf-8'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export function saleReturnCancel(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/saleReturn/cancel',
|
||||
method: 'post',
|
||||
data: documentNo,
|
||||
headers: {
|
||||
'Content-Type': 'application/json; charset=utf-8'
|
||||
}
|
||||
})
|
||||
}
|
||||
23
src/api/wms/document-close.js
Normal file
23
src/api/wms/document-close.js
Normal file
@ -0,0 +1,23 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisition/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getDocumentDetail(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/' + documentNo,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
//提交
|
||||
export function submit(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/closeDocumentByNo?documentNo=' + documentNo,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
131
src/api/wms/document-maintain.js
Normal file
131
src/api/wms/document-maintain.js
Normal file
@ -0,0 +1,131 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function getOperationRules(site,activityId) {
|
||||
return request({
|
||||
url: '/wms/document/operationRules/'+site+'/'+activityId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
export function getCWarehouse(site) {
|
||||
return request({
|
||||
url: '/wms/document/getCWarehouse/'+site,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
export function getWarehouse(site) {
|
||||
return request({
|
||||
url: '/wms/document/getWarehouse/'+site,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
export function getRetrieve(current,size,obj) {
|
||||
return request({
|
||||
url: '/wms/document/getRetrieve/'+current+'/'+size,
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function saveOrUpdate(obj) {
|
||||
return request({
|
||||
url: '/wms/document/save',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
export function submit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/submit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function cancel(obj) {
|
||||
return request({
|
||||
url: '/wms/document/cancel',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function reject(obj) {
|
||||
return request({
|
||||
url: '/wms/document/reject',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function itemDialog(obj) {
|
||||
return request({
|
||||
url: '/wms/document/item/page',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
export function itemDialogs(obj) {
|
||||
return request({
|
||||
url: '/wms/document/item/pages',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
export function itemCustomFieldDialog(obj) {
|
||||
return request({
|
||||
url: '/wms/document/item/itemPage',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getItem(obj) {
|
||||
return request({
|
||||
url: '/wms/document/item',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
export function documentDialog(query) {
|
||||
return request({
|
||||
url: '/wms/document/getDocumentList',
|
||||
method: 'get',
|
||||
params:query
|
||||
})
|
||||
}
|
||||
export function userCheck(param) {
|
||||
return request({
|
||||
url: '/wms/document/userCheck/'+param +'/STORES_RETURNED',
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
export function getDetails(site,documentNo,seq,item) {
|
||||
return request({
|
||||
url: '/wms/document/selectSfc/'+site+'/'+documentNo+'/'+seq + '/' + item,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function getOaProjectCode(params) {
|
||||
return request({
|
||||
url: '/mom-mes-nei/cust-data-field-list/page',
|
||||
method: 'get',
|
||||
params:params
|
||||
})
|
||||
}
|
||||
|
||||
export function fertItemPage(obj) {
|
||||
return request({
|
||||
url: '/wms/document/item/fertItemPage',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function validateImport(obj) {
|
||||
return request({
|
||||
url: '/wms/document/validateImport',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
41
src/api/wms/false-warehoursing.js
Normal file
41
src/api/wms/false-warehoursing.js
Normal file
@ -0,0 +1,41 @@
|
||||
import request from '@/router/axios';
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/false-warehoursing/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchList2(query) {
|
||||
return request({
|
||||
url: '/wms/false-warehoursing/page2',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function transfer(obj) {
|
||||
return request({
|
||||
url: '/wms/false-warehoursing/transfer/',
|
||||
method: 'post',
|
||||
data: obj
|
||||
});
|
||||
}
|
||||
|
||||
export function transIn(obj) {
|
||||
return request({
|
||||
url: '/wms/false-warehoursing/transIn',
|
||||
method: 'post',
|
||||
data: obj
|
||||
});
|
||||
}
|
||||
|
||||
export function transOut(obj) {
|
||||
return request({
|
||||
url: '/wms/false-warehoursing/transOut',
|
||||
method: 'put',
|
||||
data: obj
|
||||
});
|
||||
}
|
||||
49
src/api/wms/finished-product-production-return.js
Normal file
49
src/api/wms/finished-product-production-return.js
Normal file
@ -0,0 +1,49 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisition/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getDocumentDetail(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/' + documentNo,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getItemInventory',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
//成品提交
|
||||
export function submit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/finishedProductsWarehouseSubmit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
//成品查询数量
|
||||
export function getFinishedProductQty(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getFinishedProductQty',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function rejectDocumentByNo(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/rejectDocumentByNo?documentNo=' + documentNo,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
42
src/api/wms/finished-products-purchase.js
Normal file
42
src/api/wms/finished-products-purchase.js
Normal file
@ -0,0 +1,42 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisition/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getDocumentDetail(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/' + documentNo,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getItemInventory',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
//提交
|
||||
export function submit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/finishedProductsPurchaseSubmit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getFinishedProductsPurchaseQty(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getFinishedProductsPurchaseQty',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
42
src/api/wms/inventory-allocation.js
Normal file
42
src/api/wms/inventory-allocation.js
Normal file
@ -0,0 +1,42 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisition/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getDocumentDetail(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/' + documentNo,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getItemInventory',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
//提交
|
||||
export function submit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/transferSubmit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getInventoryQty(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getInventoryQty',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
25
src/api/wms/inventory-group.js
Normal file
25
src/api/wms/inventory-group.js
Normal file
@ -0,0 +1,25 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function scanCode(query) {
|
||||
return request({
|
||||
url: '/wms/inventory-group/scanCode',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function bindGroup(obj) {
|
||||
return request({
|
||||
url: '/wms/inventory-group/bindGroup',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function unBindGroup(obj) {
|
||||
return request({
|
||||
url: '/wms/inventory-group/unBindGroup',
|
||||
method: 'delete',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
24
src/api/wms/inventory-lock.js
Normal file
24
src/api/wms/inventory-lock.js
Normal file
@ -0,0 +1,24 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function getInventoryList(inventoryIdOrCarrier) {
|
||||
return request({
|
||||
url: '/wms/carrier-member/getInventoryList/'+inventoryIdOrCarrier,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function freeze(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/freeze',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function unfreeze(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/unfreeze',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
53
src/api/wms/inventory-move.js
Normal file
53
src/api/wms/inventory-move.js
Normal file
@ -0,0 +1,53 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
//执行移动
|
||||
export function moveInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/storage-bin-bind-inventory/inventoryTransfer',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getInventoryQtyNewPassBox(params) {
|
||||
return request({
|
||||
url: '/wms/document/getInventoryQtyNewPassBox',
|
||||
method: 'post',
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
//获取是包材的物料
|
||||
export function fetchKmatItemList(query) {
|
||||
return request({
|
||||
url: '/wms/storage-bin-bind-inventory/fetchKmatItemList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
//根据来源位置和物料查询库存
|
||||
export function getKmatInventoryQty(storageLocation, item) {
|
||||
return request({
|
||||
url: '/wms/storage-bin-bind-inventory/getKmatInventoryQty?storageLocation=' + storageLocation + '&&item=' + item,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
//执行移动
|
||||
export function inventoryTransferForKmat(obj) {
|
||||
return request({
|
||||
url: '/wms/storage-bin-bind-inventory/inventoryTransferForKmat',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
//获取全区条码和托
|
||||
export function selectAllByStorageLocation(query) {
|
||||
return request({
|
||||
url: '/wms/storage-bin-bind-inventory/selectAllByStorageLocation',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
117
src/api/wms/inventory.js
Normal file
117
src/api/wms/inventory.js
Normal file
@ -0,0 +1,117 @@
|
||||
import request from '@/router/axios';
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
}
|
||||
|
||||
export function fetchDtoList(query) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/getInventoryDtoPage',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
}
|
||||
|
||||
export function fetchDtoListByCarrier(query) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/getInventoryDtoPageByCarrier',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
}
|
||||
|
||||
export function inventoryDto(query) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/inventoryDto',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
}
|
||||
|
||||
export function addObj(obj) {
|
||||
return request({
|
||||
url: '/wms/inventory',
|
||||
method: 'post',
|
||||
data: obj
|
||||
});
|
||||
}
|
||||
|
||||
export function getObj(id) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/' + id,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
export function getByCode(code) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/by-code?code=' + code,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
export function delByCode(code) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/delete-by-code?code=' + code,
|
||||
method: 'delete'
|
||||
});
|
||||
}
|
||||
|
||||
export function delObj(id) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/' + id,
|
||||
method: 'delete'
|
||||
});
|
||||
}
|
||||
|
||||
export function putObj(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory',
|
||||
method: 'put',
|
||||
data: obj
|
||||
});
|
||||
}
|
||||
|
||||
export function splitInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/splitInventory',
|
||||
method: 'post',
|
||||
data: obj
|
||||
});
|
||||
}
|
||||
|
||||
export function mergeInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/mergeInventory',
|
||||
method: 'post',
|
||||
data: obj
|
||||
});
|
||||
}
|
||||
|
||||
export function selectForSplit(query) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/selectForSplit',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
}
|
||||
|
||||
export function selectForStocktaking(query) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/selectForStocktaking',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
}
|
||||
|
||||
export function inventoryStocktaking(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/inventoryStocktaking',
|
||||
method: 'post',
|
||||
data: obj
|
||||
});
|
||||
}
|
||||
39
src/api/wms/item-safe-inventory.js
Normal file
39
src/api/wms/item-safe-inventory.js
Normal file
@ -0,0 +1,39 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/item-safe-inventory/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function addObj(obj) {
|
||||
return request({
|
||||
url: '/wms/item-safe-inventory',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getObj(id) {
|
||||
return request({
|
||||
url: '/wms/item-safe-inventory/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function delObj(id) {
|
||||
return request({
|
||||
url: '/wms/item-safe-inventory/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function putObj(obj) {
|
||||
return request({
|
||||
url: '/wms/item-safe-inventory',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
31
src/api/wms/label-reprint.js
Normal file
31
src/api/wms/label-reprint.js
Normal file
@ -0,0 +1,31 @@
|
||||
import request from '@/router/axios'
|
||||
export function operationOPType(operation,shopOrder) {
|
||||
return request({
|
||||
url: '/wms/z-knives-entry/operationOPType/' + operation + "/" + shopOrder,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function reprint(param) {
|
||||
return request({
|
||||
url: '/wms/picking/reprint',
|
||||
method: 'post',
|
||||
data: param
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteKnivesEntry(param) {
|
||||
return request({
|
||||
url: '/wms/z-knives-entry/deleteKnivesEntry',
|
||||
method: 'post',
|
||||
data: param
|
||||
})
|
||||
}
|
||||
|
||||
export function select(param) {
|
||||
return request({
|
||||
url: '/wms/picking/select',
|
||||
method: 'get',
|
||||
params: param
|
||||
})
|
||||
}
|
||||
49
src/api/wms/no-entity-post.js
Normal file
49
src/api/wms/no-entity-post.js
Normal file
@ -0,0 +1,49 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function pageForNoEntity(query) {
|
||||
return request({
|
||||
url: '/wms/document/detail/pageForNoEntity',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function noEntityPost(obj) {
|
||||
return request({
|
||||
url: '/wms/document/noEntity/post',
|
||||
method: 'post',
|
||||
data: obj,
|
||||
})
|
||||
}
|
||||
|
||||
export function noEntityPostCancel(obj) {
|
||||
return request({
|
||||
url: '/wms/document/noEntity/cancel',
|
||||
method: 'post',
|
||||
data: obj,
|
||||
})
|
||||
}
|
||||
|
||||
export function noEntityPickingPost(documentNo) {
|
||||
return request({
|
||||
url: '/wms/picking/noEntity/post',
|
||||
method: 'post',
|
||||
data: documentNo,
|
||||
headers: {
|
||||
'Content-Type': 'application/json; charset=utf-8'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
export function noEntityPickingPostCancel(documentNo) {
|
||||
return request({
|
||||
url: '/wms/picking/noEntity/cancel',
|
||||
method: 'post',
|
||||
data: documentNo,
|
||||
headers: {
|
||||
'Content-Type': 'application/json; charset=utf-8'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
42
src/api/wms/numbering-rule.js
Normal file
42
src/api/wms/numbering-rule.js
Normal file
@ -0,0 +1,42 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
|
||||
|
||||
export function fetchNextNumberList(query) {
|
||||
return request({
|
||||
url: '/wms/wms-numbering-rule',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
export function getObj(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-numbering-rule/doRetrieve',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function addObj(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-numbering-rule',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function putObj(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-numbering-rule',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function delObj(query) {
|
||||
return request({
|
||||
url: '/wms/wms-numbering-rule',
|
||||
method: 'delete',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
49
src/api/wms/outsourcing.js
Normal file
49
src/api/wms/outsourcing.js
Normal file
@ -0,0 +1,49 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisition/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getDocumentDetail(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/' + documentNo,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getItemInventory',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
//提交
|
||||
export function submit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisitionSubmit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getInventoryQty(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getInventoryQty',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getInventoryQtyNewOnlyTray(params) {
|
||||
return request({
|
||||
url: '/wms/document/getInventoryQtyNewOnlyTray',
|
||||
method: 'post',
|
||||
data: params
|
||||
})
|
||||
}
|
||||
58
src/api/wms/picking.js
Normal file
58
src/api/wms/picking.js
Normal file
@ -0,0 +1,58 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisition/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getDocumentDetail(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/' + documentNo,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function getPickInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/picking/getPickInventory',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
//提交
|
||||
export function submit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/pickingSubmit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getInventoryQty(obj) {
|
||||
return request({
|
||||
url: '/wms/picking/getInventoryQty',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
//清楚记录
|
||||
export function pickingRemove(obj) {
|
||||
return request({
|
||||
url: '/wms/picking/pickingRemove',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
//暂存记录
|
||||
export function saveTempPicking(obj) {
|
||||
return request({
|
||||
url: '/wms/picking/saveTempPicking',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
74
src/api/wms/production-out-inventory.js
Normal file
74
src/api/wms/production-out-inventory.js
Normal file
@ -0,0 +1,74 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisition/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getDocumentDetail(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/' + documentNo,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getItemInventory',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
//提交
|
||||
export function submit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisitionSubmit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getInventoryQty(params) {
|
||||
return request({
|
||||
url: '/wms/document/getInventoryQty',
|
||||
method: 'post',
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
export function getInventoryQtyNew(params) {
|
||||
return request({
|
||||
url: '/wms/document/getInventoryQtyNew',
|
||||
method: 'post',
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
export function checkFiFo(params) {
|
||||
return request({
|
||||
url: '/wms/document/checkFiFo',
|
||||
method: 'post',
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
export function getPickingInventoryQty(params) {
|
||||
return request({
|
||||
url: '/wms/document/getPickingInventoryQty',
|
||||
method: 'post',
|
||||
data: params
|
||||
})
|
||||
}
|
||||
|
||||
//提交
|
||||
export function submitFreePostDate(obj) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisitionSubmit/freePostDate',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
50
src/api/wms/production-warehousing.js
Normal file
50
src/api/wms/production-warehousing.js
Normal file
@ -0,0 +1,50 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisition/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getDocumentDetail(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/' + documentNo,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getItemInventory',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
//成品提交
|
||||
export function submit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/finishedProductsWarehouseSubmit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
//成品查询数量
|
||||
export function getFinishedProductQty(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getFinishedProductQty',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function rejectDocumentByNo(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/rejectDocumentByNo?documentNo=' + documentNo,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
49
src/api/wms/purchase-into-storage-reg.js
Normal file
49
src/api/wms/purchase-into-storage-reg.js
Normal file
@ -0,0 +1,49 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function pagePurchaseInToStorageReg(query) {
|
||||
return request({
|
||||
url: '/wms/document/purchase/pagePurchaseInToStorageReg',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function selectPoDetail(query) {
|
||||
return request({
|
||||
url: '/wms/po-order/selectPoDetail',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function registeSubmit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/purchase/registerSubmit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function selectPoWithDocumentDetail(query) {
|
||||
return request({
|
||||
url: '/wms/po-order/selectPoWithDocumentDetail',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function pagePoOrder(query) {
|
||||
return request({
|
||||
url: '/wms/po-order/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function registerCancel(obj) {
|
||||
return request({
|
||||
url: '/wms/document/purchase/registerCancel',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
50
src/api/wms/purchase-into-storage.js
Normal file
50
src/api/wms/purchase-into-storage.js
Normal file
@ -0,0 +1,50 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisition/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getDocumentDetail(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/' + documentNo,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getItemInventory',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
//提交
|
||||
export function submit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/procurementStorageSubmit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getInventoryQty(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getInventoryQty',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
export function getDdvanceBindQtyOnlyTray(params) {
|
||||
return request({
|
||||
url: '/wms/document-advance-bind/scanCodeOnlyTray',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
}
|
||||
42
src/api/wms/purchase-return.js
Normal file
42
src/api/wms/purchase-return.js
Normal file
@ -0,0 +1,42 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisition/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getDocumentDetail(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/' + documentNo,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getItemInventory',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
//提交
|
||||
export function submit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisitionSubmit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getInventoryQty(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getInventoryQty',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
49
src/api/wms/return-of-material.js
Normal file
49
src/api/wms/return-of-material.js
Normal file
@ -0,0 +1,49 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisition/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getDocumentDetail(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/' + documentNo,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function getInventoryOriginalQty(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getInventoryOriginalQty',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
//提交
|
||||
export function returnSubmit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/returnSubmit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getItemInventory',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function rejectDocumentByNo(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/rejectDocumentByNo?documentNo=' + documentNo,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
85
src/api/wms/return-of-sales.js
Normal file
85
src/api/wms/return-of-sales.js
Normal file
@ -0,0 +1,85 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisition/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getDocumentDetail(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/' + documentNo,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getItemInventory',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getInventoryQty(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getInventoryQty',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
//退货提交
|
||||
export function submit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/saleReturn/submit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
//扫描箱条码
|
||||
export function getSaleOutQty(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getSaleOutQty',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
//展开时扫描箱条码
|
||||
export function getSaleInventoryId(carrier) {
|
||||
return request({
|
||||
url: '/wms/document/getSaleInventoryId?carrier=' + carrier,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
//扫描卷条码
|
||||
export function getInventoryOriginalQty(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getInventoryOriginalQty',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getDdvanceBindQty(params) {
|
||||
return request({
|
||||
url: '/wms/document-advance-bind/scanCode',
|
||||
method: 'get',
|
||||
params: params
|
||||
})
|
||||
}
|
||||
|
||||
export function noInventorySubmit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/saleReturn/noInventorySubmit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
39
src/api/wms/role-area-bind.js
Normal file
39
src/api/wms/role-area-bind.js
Normal file
@ -0,0 +1,39 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/role-area-bind/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function addObj(obj) {
|
||||
return request({
|
||||
url: '/wms/role-area-bind',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getObj(id) {
|
||||
return request({
|
||||
url: '/wms/role-area-bind/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function delObj(id) {
|
||||
return request({
|
||||
url: '/wms/role-area-bind/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function putObj(obj) {
|
||||
return request({
|
||||
url: '/wms/role-area-bind',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
72
src/api/wms/sale-out-platform.js
Normal file
72
src/api/wms/sale-out-platform.js
Normal file
@ -0,0 +1,72 @@
|
||||
import request from '@/router/axios'
|
||||
export function selectSaleOutDetail(query) {
|
||||
return request({
|
||||
url: '/wms/picking/saleOut/selectSaleOutDetail',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function selectPickingSuggest(query) {
|
||||
return request({
|
||||
url: '/wms/picking/selectPickingSuggest',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function pickingPrint(obj) {
|
||||
return request({
|
||||
url: '/wms/picking/print',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function pickingPost(documentNo) {
|
||||
return request({
|
||||
url: `/wms/picking/post`,
|
||||
method: 'post',
|
||||
data: documentNo,
|
||||
headers: {
|
||||
'Content-Type': 'application/json; charset=utf-8'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export function saleOutPost(obj) {
|
||||
return request({
|
||||
url: `/wms/picking/saleOut/post`,
|
||||
method: 'post',
|
||||
data: obj,
|
||||
})
|
||||
}
|
||||
|
||||
export function pickingPostCancel(documentNo) {
|
||||
return request({
|
||||
url: `/wms/picking/cancel`,
|
||||
method: 'post',
|
||||
data: documentNo,
|
||||
headers: {
|
||||
'Content-Type': 'application/json; charset=utf-8'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export function saleOutPostCancel(obj) {
|
||||
return request({
|
||||
url: `/wms/picking/saleOut/cancel`,
|
||||
method: 'post',
|
||||
data: obj,
|
||||
})
|
||||
}
|
||||
|
||||
export function pickingPrintA4(obj) {
|
||||
return request({
|
||||
url: '/wms/picking/print/a4',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
42
src/api/wms/sales-out-of-storage.js
Normal file
42
src/api/wms/sales-out-of-storage.js
Normal file
@ -0,0 +1,42 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisition/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getDocumentDetail(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/' + documentNo,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getItemInventory',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
//提交
|
||||
export function submit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisitionSubmit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getInventoryQty(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getInventoryQty',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
42
src/api/wms/scrap.js
Normal file
42
src/api/wms/scrap.js
Normal file
@ -0,0 +1,42 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisition/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getDocumentDetail(documentNo) {
|
||||
return request({
|
||||
url: '/wms/document/' + documentNo,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemInventory(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getItemInventory',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
//提交
|
||||
export function submit(obj) {
|
||||
return request({
|
||||
url: '/wms/document/productionRequisitionSubmit',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getInventoryQty(obj) {
|
||||
return request({
|
||||
url: '/wms/document/getInventoryQty',
|
||||
method: 'get',
|
||||
params: obj
|
||||
})
|
||||
}
|
||||
|
||||
40
src/api/wms/shelf-management.js
Normal file
40
src/api/wms/shelf-management.js
Normal file
@ -0,0 +1,40 @@
|
||||
import request from "@/router/axios";
|
||||
|
||||
export function fetchErpStorageLocationList(query) {
|
||||
return request({
|
||||
url: '/wms/shelf-management/erp-storage-location',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchStorageLocationList(query) {
|
||||
return request({
|
||||
url: '/wms/shelf-management/storage-location',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchStorageBinList(query) {
|
||||
return request({
|
||||
url: '/wms/shelf-management/storage-bin',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getStorageLocationData(query) {
|
||||
return request({
|
||||
url: '/wms/shelf-management/storage-location-data',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
export function getStorageBinData(query) {
|
||||
return request({
|
||||
url: '/wms/shelf-management/storage-bin-data',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
32
src/api/wms/shelves.js
Normal file
32
src/api/wms/shelves.js
Normal file
@ -0,0 +1,32 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
|
||||
//上架功能
|
||||
export function upObj(obj) {
|
||||
return request({
|
||||
url: '/wms/storage-bin-bind-inventory/upDefault',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
//查询已上架的托条码(根据货架和货格号)
|
||||
export function getCarrierList(storageBin) {
|
||||
return request({
|
||||
url: '/wms/storage-bin-bind-inventory/getCarrierList?storageBin=' + storageBin,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
//上架操作时扫描托条码
|
||||
export function getUpCarrier(carrier) {
|
||||
return request({
|
||||
url: '/wms/storage-bin-bind-inventory/getInDefaultCarrier/' + carrier,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
65
src/api/wms/storage-location-item-lock.js
Normal file
65
src/api/wms/storage-location-item-lock.js
Normal file
@ -0,0 +1,65 @@
|
||||
import request from "@/router/axios";
|
||||
|
||||
export function getFreezeList(query) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/getFreezeList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function freeze(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/freeze',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function unfreeze(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/unfreeze',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchErpStorageLocationList(query) {
|
||||
return request({
|
||||
url: '/wms/shelf-management/erp-storage-location',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchItemList(query) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/fetchItemList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchItemGroesList(query) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/fetchItemGroesList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchCarrierList(query) {
|
||||
return request({
|
||||
url: '/wms/carrier/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function pageFreezeList(query) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory/pageFreezeList',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
39
src/api/wms/storage-location-type.js
Normal file
39
src/api/wms/storage-location-type.js
Normal file
@ -0,0 +1,39 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/storage-location-type/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function addObj(obj) {
|
||||
return request({
|
||||
url: '/wms/storage-location-type',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getObj(id) {
|
||||
return request({
|
||||
url: '/wms/storage-location-type/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function delObj(id) {
|
||||
return request({
|
||||
url: '/wms/storage-location-type/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function putObj(obj) {
|
||||
return request({
|
||||
url: '/wms/storage-location-type',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
80
src/api/wms/storage-location.js
Normal file
80
src/api/wms/storage-location.js
Normal file
@ -0,0 +1,80 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/wms-storage-location/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getStorageLocationPageBycode(str) {
|
||||
return request({
|
||||
url: '/wms/wms-storage-location/getStorageLocationPageBycode',
|
||||
method: 'get',
|
||||
params: str
|
||||
})
|
||||
}
|
||||
|
||||
export function addObj(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-storage-location',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getObj(id) {
|
||||
return request({
|
||||
url: '/wms/wms-storage-location/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function delObj(id) {
|
||||
return request({
|
||||
url: '/wms/wms-storage-location/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function putObj(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-storage-location',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function labelPrint(printList) {
|
||||
return request({
|
||||
url: '/wms/wms-storage-location/by-labelRePrint',
|
||||
method: 'post',
|
||||
data: printList
|
||||
})
|
||||
}
|
||||
|
||||
export function getStorageBin(storageLocation) {
|
||||
return request({
|
||||
url: '/wms/wms-storage-location/getStorageBin/' + storageLocation,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function updateBatchById(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-storage-location/updateBatchById',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getDefaultLocationsMap(erpStorageLocationList) {
|
||||
return request({
|
||||
url: '/wms/wms-storage-location/getDefaultLocationsMap/',
|
||||
method: 'get',
|
||||
params: {
|
||||
erpStorageLocationList: erpStorageLocationList
|
||||
}
|
||||
});
|
||||
}
|
||||
39
src/api/wms/storagebin-type.js
Normal file
39
src/api/wms/storagebin-type.js
Normal file
@ -0,0 +1,39 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/storagebin-type/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function addObj(obj) {
|
||||
return request({
|
||||
url: '/wms/storagebin-type',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getObj(id) {
|
||||
return request({
|
||||
url: '/wms/storagebin-type/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function delObj(id) {
|
||||
return request({
|
||||
url: '/wms/storagebin-type/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function putObj(obj) {
|
||||
return request({
|
||||
url: '/wms/storagebin-type',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
62
src/api/wms/storagebin.js
Normal file
62
src/api/wms/storagebin.js
Normal file
@ -0,0 +1,62 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/wms-storagebin/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
export function labelPrint(printList, printer) {
|
||||
return request({
|
||||
url: '/wms/wms-storagebin/by-labelRePrint',
|
||||
method: 'post',
|
||||
data: printList
|
||||
})
|
||||
}
|
||||
export function addObj(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-storagebin',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getObj(id) {
|
||||
return request({
|
||||
url: '/wms/wms-storagebin/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function delObj(id) {
|
||||
return request({
|
||||
url: '/wms/wms-storagebin/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function putObj(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-storagebin',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getStorageLocationByStorageBin(storageBin) {
|
||||
return request({
|
||||
url: '/wms/wms-storagebin/getStorageLocationByStorageBin/' + storageBin,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function updateBatchById(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-storagebin/updateBatchById',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
9
src/api/wms/temp-inventory.js
Normal file
9
src/api/wms/temp-inventory.js
Normal file
@ -0,0 +1,9 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/wms-temp-inventory/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
29
src/api/wms/unShelve.js
Normal file
29
src/api/wms/unShelve.js
Normal file
@ -0,0 +1,29 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
//下架功能
|
||||
export function downObj(obj) {
|
||||
return request({
|
||||
url: '/wms/storage-bin-bind-inventory/downDefault',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
//查询已上架的托条码(根据货架和货格号)
|
||||
export function getCarrierList(storageBin) {
|
||||
return request({
|
||||
url: '/wms/storage-bin-bind-inventory/getCarrierList?storageBin=' + storageBin,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
//下架操作时扫描托条码(需要返回货架和货格号)
|
||||
export function getNotInDefaultCarrier(carrier) {
|
||||
return request({
|
||||
url: '/wms/storage-bin-bind-inventory/getNotInDefaultCarrier/' + carrier,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
48
src/api/wms/up-down.js
Normal file
48
src/api/wms/up-down.js
Normal file
@ -0,0 +1,48 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
|
||||
//上架功能
|
||||
export function upObj(obj) {
|
||||
return request({
|
||||
url: '/wms/storage-bin-bind-inventory/up',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
//下架功能
|
||||
export function downObj(obj) {
|
||||
return request({
|
||||
url: '/wms/storage-bin-bind-inventory/down',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
//查询已上架的托条码(根据货架和货格号)
|
||||
export function getCarrierList(storageBin) {
|
||||
return request({
|
||||
url: '/wms/storage-bin-bind-inventory/getCarrierList?storageBin=' + storageBin,
|
||||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
//上架操作时扫描托条码
|
||||
export function getUpCarrier(carrier) {
|
||||
return request({
|
||||
url: '/wms/storage-bin-bind-inventory/getUpCarrier/' + carrier,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
//下架操作时扫描托条码(需要返回货架和货格号)
|
||||
export function getDownCarrier(carrier) {
|
||||
return request({
|
||||
url: '/wms/storage-bin-bind-inventory/getDownCarrier/' + carrier,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
18
src/api/wms/vendor.js
Normal file
18
src/api/wms/vendor.js
Normal file
@ -0,0 +1,18 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/vendor/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function pageText(query) {
|
||||
return request({
|
||||
url: '/wms/vendor/pageText',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
39
src/api/wms/warehouse.js
Normal file
39
src/api/wms/warehouse.js
Normal file
@ -0,0 +1,39 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/wms-warehouse/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function addObj(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-warehouse',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function getObj(id) {
|
||||
return request({
|
||||
url: '/wms/wms-warehouse/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function delObj(id) {
|
||||
return request({
|
||||
url: '/wms/wms-warehouse/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function putObj(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-warehouse',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
75
src/api/wms/wms-inventory-check.js
Normal file
75
src/api/wms/wms-inventory-check.js
Normal file
@ -0,0 +1,75 @@
|
||||
import request from '@/router/axios'
|
||||
|
||||
export function fetchList(query) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory-check/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchErpStorageLocationList(query) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory-check/storageLocationPage',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function addObj(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory-check',
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function putObj(obj) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory-check',
|
||||
method: 'put',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
export function fetchinventoryCheckDetailList(query) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory-check/inventoryCheckDetailpage',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function selectInventoryCheck(obj,params) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory-check/select',
|
||||
method: 'post',
|
||||
data: obj,
|
||||
params: params
|
||||
})
|
||||
}
|
||||
|
||||
export function selectIdCode(checkNo, erpStorageLocation, carrier1, carrier2, inventoryId) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory-check/selectId?checkNo=' + checkNo + "&erpStorageLocation=" + erpStorageLocation + "&carrier1=" + carrier1 + "&carrier2=" + carrier2 + "&inventoryId=" + inventoryId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function selectCheckNoSummary(obj,params) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory-check/selectCheckNoSummary',
|
||||
method: 'post',
|
||||
data: obj,
|
||||
params: params
|
||||
})
|
||||
}
|
||||
|
||||
export function doComplete(checkNo) {
|
||||
return request({
|
||||
url: '/wms/wms-inventory-check/doComplete?checkNo=' + checkNo,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
48
src/const/crud/wms/carrier.js
Normal file
48
src/const/crud/wms/carrier.js
Normal file
@ -0,0 +1,48 @@
|
||||
export const tableOption = {
|
||||
"border": true,
|
||||
"index": true,
|
||||
"indexLabel": "序号",
|
||||
"stripe": true,
|
||||
"menuAlign": "center",
|
||||
"align": "center",
|
||||
"searchMenuSpan": 6,
|
||||
"column": [
|
||||
{
|
||||
"type": "input",
|
||||
"search": true,
|
||||
"editDisabled": true,
|
||||
"label": "载具",
|
||||
"prop": "carrier",
|
||||
"span": 12,
|
||||
"required": true,
|
||||
"rules": [{
|
||||
"message": "请输入载具",
|
||||
"required": true
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "描述",
|
||||
"prop": "description",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"search": true,
|
||||
"label": "载具类型",
|
||||
"prop": "carrierType",
|
||||
"span": 12,
|
||||
"required": true,
|
||||
"rules": [{
|
||||
"message": "请输入载具类型",
|
||||
"required": true
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "状态",
|
||||
"prop": "status",
|
||||
"span": 12
|
||||
}
|
||||
]
|
||||
}
|
||||
44
src/const/crud/wms/carriertype.js
Normal file
44
src/const/crud/wms/carriertype.js
Normal file
@ -0,0 +1,44 @@
|
||||
export const tableOption = {
|
||||
"border": true,
|
||||
"index": true,
|
||||
"indexLabel": "序号",
|
||||
"stripe": true,
|
||||
"menuAlign": "center",
|
||||
"align": "center",
|
||||
"searchMenuSpan": 6,
|
||||
"column": [
|
||||
{
|
||||
"type": "input",
|
||||
"search": true,
|
||||
"label": "载具类型",
|
||||
"prop": "carrierType",
|
||||
"span": 12,
|
||||
"required": true,
|
||||
"rules": [{
|
||||
"message": "请输入载具类型",
|
||||
"required": true
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "描述",
|
||||
"prop": "description",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "switch",
|
||||
"label": "可否混料",
|
||||
"prop": "mixItem",
|
||||
"span": 12,
|
||||
dicData: [{
|
||||
label: '否',
|
||||
value: "N"
|
||||
},
|
||||
{
|
||||
label: '是',
|
||||
value: "Y"
|
||||
}],
|
||||
value: "N"
|
||||
}
|
||||
]
|
||||
}
|
||||
25
src/const/crud/wms/customer.js
Normal file
25
src/const/crud/wms/customer.js
Normal file
@ -0,0 +1,25 @@
|
||||
export const tableOption = {
|
||||
"border": true,
|
||||
"index": true,
|
||||
"indexLabel": "序号",
|
||||
"stripe": true,
|
||||
"menuAlign": "center",
|
||||
"align": "center",
|
||||
"searchMenuSpan": 6,
|
||||
"menu":false,
|
||||
"column": [
|
||||
{
|
||||
"type": "input",
|
||||
"label": "客户",
|
||||
"prop": "customer",
|
||||
"span": 12,
|
||||
"search": true
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "客户名称",
|
||||
"prop": "customerName",
|
||||
"span": 12
|
||||
}
|
||||
]
|
||||
}
|
||||
134
src/const/crud/wms/dn-order.js
Normal file
134
src/const/crud/wms/dn-order.js
Normal file
@ -0,0 +1,134 @@
|
||||
export const formatterConst = {
|
||||
"innerState": {
|
||||
"SAVE": "保存",
|
||||
"SUBMIT": "提交",
|
||||
"CLOSE": "关闭",
|
||||
"CANCEL": "取消",
|
||||
"POST": "过账"
|
||||
},
|
||||
"podStatus": {
|
||||
"A": '未POD确认',
|
||||
"C": '已POD确认'
|
||||
}
|
||||
};
|
||||
|
||||
export const tableOption = {
|
||||
"border": true,
|
||||
"index": true,
|
||||
"indexLabel": "序号",
|
||||
"stripe": true,
|
||||
"menuAlign": "center",
|
||||
"align": "center",
|
||||
"searchMenuSpan": 6,
|
||||
"menu": false,
|
||||
"searchLabelWidth": 110,
|
||||
"column": [
|
||||
{
|
||||
"type": "input",
|
||||
"label": "操作",
|
||||
"prop": "handle",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "销售组织",
|
||||
"prop": "salesOrganization",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"search": true,
|
||||
"type": "input",
|
||||
"label": "DN单号",
|
||||
"prop": "dnNumber",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "交货类型",
|
||||
"prop": "deliveryType",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "项目类别",
|
||||
"prop": "projectType",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"search": true,
|
||||
"type": "input",
|
||||
"label": "内部单号",
|
||||
"prop": "innerOrder",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "到货单状态",
|
||||
"prop": "innerState",
|
||||
"span": 12,
|
||||
formatter: (val, value, label) => {
|
||||
return formatterConst.innerState[value];
|
||||
},
|
||||
},
|
||||
{
|
||||
"search": true,
|
||||
"type": "input",
|
||||
"label": "下单日期",
|
||||
"prop": "deliveryDate",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "POD状态",
|
||||
"prop": "podStatus",
|
||||
"span": 12,
|
||||
formatter: (val, value, label) => {
|
||||
return formatterConst.podStatus[value];
|
||||
},
|
||||
},
|
||||
{
|
||||
"search": true,
|
||||
"type": "input",
|
||||
"label": "客户编码",
|
||||
"prop": "customerCode",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "送达方",
|
||||
"prop": "deliveryParty",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "送达方地址",
|
||||
"prop": "deliveryPartyAddressd",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "联系人及联系方式",
|
||||
"prop": "contact",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "计划发货日期",
|
||||
"prop": "deliveryPlanDate",
|
||||
"span": 12,
|
||||
"search": true,
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "备注",
|
||||
"prop": "dnRemarks",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "外仓",
|
||||
"prop": "extWarehourseRemarks",
|
||||
"span": 12
|
||||
},
|
||||
]
|
||||
};
|
||||
85
src/const/crud/wms/document-cancel.js
Normal file
85
src/const/crud/wms/document-cancel.js
Normal file
@ -0,0 +1,85 @@
|
||||
export const formatterConst = {
|
||||
"state": {
|
||||
"SAVE": "保存",
|
||||
"SUBMIT": "提交",
|
||||
"CLOSE": "关闭",
|
||||
"CANCEL": "取消",
|
||||
},
|
||||
"documentType": {
|
||||
"PURCHASE_RETURN": "采购退货",
|
||||
"COST_CENTER_RECEIVE": "成本中心领料",
|
||||
"SALES_RETURN": "销售退货",
|
||||
"SCRAP_OUT": "报废出库",
|
||||
"OUTSOURCING": "委外",
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
export const tableOption = {
|
||||
"border": true,
|
||||
"index": true,
|
||||
"indexLabel": "序号",
|
||||
"stripe": true,
|
||||
"menuAlign": "center",
|
||||
"align": "center",
|
||||
"searchMenuSpan": 6,
|
||||
"menu": false,
|
||||
"searchLabelWidth": 110,
|
||||
"column": [
|
||||
{
|
||||
"type": "input",
|
||||
"label": "内部单号",
|
||||
"prop": "documentNo",
|
||||
"span": 12,
|
||||
"search":true
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "内部类型",
|
||||
"prop": "documentType",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "单据状态",
|
||||
"prop": "state",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "物料",
|
||||
"prop": "item",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "物料描述",
|
||||
"prop": "itemDescription",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "数量",
|
||||
"prop": "actualQuantity",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "单位",
|
||||
"prop": "unitOfMeasure",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "来源仓",
|
||||
"prop": "sourceWarehouse",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "目标仓",
|
||||
"prop": "targetWarehouse",
|
||||
"span": 12
|
||||
},
|
||||
]
|
||||
};
|
||||
72
src/const/crud/wms/item-safe-inventory.js
Normal file
72
src/const/crud/wms/item-safe-inventory.js
Normal file
@ -0,0 +1,72 @@
|
||||
export const tableOption = {
|
||||
"border": true,
|
||||
"index": true,
|
||||
"indexLabel": "序号",
|
||||
"stripe": true,
|
||||
"menuAlign": "center",
|
||||
"align": "center",
|
||||
"searchMenuSpan": 6,
|
||||
"column": [
|
||||
{
|
||||
"type": "input",
|
||||
"label": "物料",
|
||||
"prop": "item",
|
||||
"span": 12,
|
||||
"formslot":true,
|
||||
"search": true
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "物料描述",
|
||||
"prop": "itemDescription",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "number",
|
||||
"label": "安全库存数量",
|
||||
"prop": "safeQty",
|
||||
"span": 12,
|
||||
"min": 0,
|
||||
"rules": [{
|
||||
"message": "请输入安全库存数量",
|
||||
"required": true
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type": "number",
|
||||
"label": "预警数量",
|
||||
"prop": "almQty",
|
||||
"span": 12,
|
||||
"min": 0,
|
||||
"rules": [{
|
||||
"message": "请输入安全库存数量",
|
||||
"required": true
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type": "select",
|
||||
"label": "是否预警",
|
||||
"prop": "almFlag",
|
||||
"span": 12,
|
||||
"search": true,
|
||||
"dicData": [
|
||||
{
|
||||
"label": '是',
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"label": '否',
|
||||
"value": false
|
||||
}
|
||||
],
|
||||
"searchValue": true,
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "采购周期",
|
||||
"prop": "purchaseCycle",
|
||||
"span": 12
|
||||
}
|
||||
]
|
||||
}
|
||||
91
src/const/crud/wms/no-entity-post.js
Normal file
91
src/const/crud/wms/no-entity-post.js
Normal file
@ -0,0 +1,91 @@
|
||||
export const formatterConst = {
|
||||
"state": {
|
||||
"SAVE": "保存",
|
||||
"SUBMIT": "提交",
|
||||
"CLOSE": "关闭",
|
||||
"CANCEL": "取消",
|
||||
},
|
||||
"documentType": {
|
||||
"PURCHASE_RETURN": "采购退货",
|
||||
"COST_CENTER_RECEIVE": "成本中心领料",
|
||||
"SALES_RETURN": "销售退货",
|
||||
"SCRAP_OUT": "报废出库",
|
||||
"OUTSOURCING": "委外",
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
export const tableOption = {
|
||||
"border": true,
|
||||
"index": true,
|
||||
"indexLabel": "序号",
|
||||
"stripe": true,
|
||||
"menuAlign": "center",
|
||||
"align": "center",
|
||||
"searchMenuSpan": 10,
|
||||
"menu": false,
|
||||
"searchLabelWidth": 110,
|
||||
"column": [
|
||||
{
|
||||
"type": "input",
|
||||
"label": "内部单号",
|
||||
"prop": "documentNo",
|
||||
"span": 12,
|
||||
"search":true
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "内部类型",
|
||||
"prop": "documentType",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "单据状态",
|
||||
"prop": "state",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "物料",
|
||||
"prop": "item",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "物料描述",
|
||||
"prop": "itemDescription",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "需求数量",
|
||||
"prop": "applicationsQuantity",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "过账数量",
|
||||
"prop": "actualQuantity",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "单位",
|
||||
"prop": "unitOfMeasure",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "来源仓",
|
||||
"prop": "sourceWarehouse",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "目标仓",
|
||||
"prop": "targetWarehouse",
|
||||
"span": 12
|
||||
},
|
||||
]
|
||||
};
|
||||
88
src/const/crud/wms/purchase-into-storage-reg.js
Normal file
88
src/const/crud/wms/purchase-into-storage-reg.js
Normal file
@ -0,0 +1,88 @@
|
||||
export const formatterConst = {
|
||||
"state": {
|
||||
"SAVE": "保存",
|
||||
"SUBMIT": "提交",
|
||||
"CLOSE": "关闭",
|
||||
"CANCEL": "取消",
|
||||
},
|
||||
"iqcResults": {
|
||||
"MJ": "免检",
|
||||
"BJ": "报检",
|
||||
"YJ": "已检",
|
||||
}
|
||||
};
|
||||
|
||||
export const tableOption = {
|
||||
"border": true,
|
||||
"index": true,
|
||||
"indexLabel": "序号",
|
||||
"stripe": true,
|
||||
"menuAlign": "center",
|
||||
"align": "center",
|
||||
"searchMenuSpan": 6,
|
||||
"menu": false,
|
||||
"searchLabelWidth": 110,
|
||||
"column": [
|
||||
{
|
||||
"type": "input",
|
||||
"label": "操作",
|
||||
"prop": "handle",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "采购订单号",
|
||||
"prop": "poNumber",
|
||||
"span": 12,
|
||||
"search": true,
|
||||
"searchSlot":true
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "采购到货单号",
|
||||
"prop": "documentNo",
|
||||
"span": 12,
|
||||
"search": true,
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "到货单状态",
|
||||
"prop": "state",
|
||||
"span": 12,
|
||||
formatter: (val, value, label) => {
|
||||
return formatterConst.state[value];
|
||||
},
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "供应商",
|
||||
"prop": "customerNo",
|
||||
"span": 12,
|
||||
"search": true,
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "采购日期",
|
||||
"prop": "procurementTime",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "采购人",
|
||||
"prop": "purchaser",
|
||||
"span": 12,
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "登记日期",
|
||||
"prop": "createDateTime",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "登记人",
|
||||
"prop": "createUser",
|
||||
"span": 12,
|
||||
},
|
||||
]
|
||||
};
|
||||
50
src/const/crud/wms/role-area-bind.js
Normal file
50
src/const/crud/wms/role-area-bind.js
Normal file
@ -0,0 +1,50 @@
|
||||
export const tableOption = {
|
||||
"border": true,
|
||||
"index": true,
|
||||
"indexLabel": "序号",
|
||||
"stripe": true,
|
||||
"menuAlign": "center",
|
||||
"align": "center",
|
||||
"searchMenuSpan": 6,
|
||||
"column": [
|
||||
{
|
||||
"type": "input",
|
||||
"label": "角色",
|
||||
"prop": "roleCode",
|
||||
"span": 12,
|
||||
"search":true,
|
||||
"editDisabled": false,
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "区域",
|
||||
"prop": "storageLocation",
|
||||
"span": 12,
|
||||
"editDisabled": false,
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "区域描述",
|
||||
"prop": "storageLocationDesc",
|
||||
"span": 12,
|
||||
"disabled": true
|
||||
},
|
||||
{
|
||||
"type": "select",
|
||||
"label": "是否启用",
|
||||
"prop": "status",
|
||||
"span": 12,
|
||||
"dicData": [
|
||||
{
|
||||
"label": '是',
|
||||
"value": "Y"
|
||||
},
|
||||
{
|
||||
"label": '否',
|
||||
"value": "N"
|
||||
}
|
||||
],
|
||||
"value": "Y"
|
||||
},
|
||||
]
|
||||
};
|
||||
32
src/const/crud/wms/storage-location-type.js
Normal file
32
src/const/crud/wms/storage-location-type.js
Normal file
@ -0,0 +1,32 @@
|
||||
export const tableOption = {
|
||||
"border": true,
|
||||
"index": true,
|
||||
"indexLabel": "序号",
|
||||
"stripe": true,
|
||||
"menuAlign": "center",
|
||||
"align": "center",
|
||||
"searchMenuSpan": 6,
|
||||
"column": [
|
||||
{
|
||||
"type": "input",
|
||||
"search": true,
|
||||
"editDisabled": true,
|
||||
"label": "存储位置类型",
|
||||
"prop": "storageLocationType",
|
||||
"required": true,
|
||||
"searchLabelWidth": 120,
|
||||
"searchSpan": 8,
|
||||
"labelWidth": 120,
|
||||
"rules": [{
|
||||
"message": "请输入存储位置类型名称",
|
||||
"required": true
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "描述",
|
||||
"prop": "description",
|
||||
"span": 12
|
||||
}
|
||||
]
|
||||
}
|
||||
78
src/const/crud/wms/storage-location.js
Normal file
78
src/const/crud/wms/storage-location.js
Normal file
@ -0,0 +1,78 @@
|
||||
export const tableOption = {
|
||||
"border": true,
|
||||
"index": true,
|
||||
"indexLabel": "序号",
|
||||
"stripe": true,
|
||||
"menuAlign": "center",
|
||||
"align": "center",
|
||||
"searchMenuSpan": 6,
|
||||
"column": [
|
||||
{
|
||||
"type": "input",
|
||||
"label": "存储位置",
|
||||
"search": true,
|
||||
"editDisabled": true,
|
||||
"prop": "storageLocation",
|
||||
"span": 12,
|
||||
"required": true,
|
||||
"rules": [{
|
||||
"message": "请输入存储位置",
|
||||
"required": true
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "描述",
|
||||
"prop": "description",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "存储位置类型",
|
||||
"search": true,
|
||||
"prop": "storageLocationType",
|
||||
"formslot": true,
|
||||
"span": 12,
|
||||
"required": true,
|
||||
"rules": [{
|
||||
"message": "请选择存储位置类型",
|
||||
"required": true
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "仓库",
|
||||
"search": true,
|
||||
"prop": "warehouse",
|
||||
"formslot": true,
|
||||
"span": 12,
|
||||
"required": true,
|
||||
"rules": [{
|
||||
"message": "请选择仓库",
|
||||
"required": true
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "ERP仓库编号",
|
||||
"prop": "erpStorageLocation",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "switch",
|
||||
"label": "默认存储位置",
|
||||
"prop": "isDefault",
|
||||
"span": 12,
|
||||
dicData: [{
|
||||
label: '否',
|
||||
value: "N"
|
||||
},
|
||||
{
|
||||
label: '是',
|
||||
value: "Y"
|
||||
}],
|
||||
value: "Y"
|
||||
}
|
||||
|
||||
]
|
||||
}
|
||||
90
src/const/crud/wms/storagebin-type.js
Normal file
90
src/const/crud/wms/storagebin-type.js
Normal file
@ -0,0 +1,90 @@
|
||||
export const tableOption = {
|
||||
"border": true,
|
||||
"index": true,
|
||||
"indexLabel": "序号",
|
||||
"stripe": true,
|
||||
"menuAlign": "center",
|
||||
"align": "center",
|
||||
"searchMenuSpan": 6,
|
||||
"column": [
|
||||
{
|
||||
"type": "input",
|
||||
"search": true,
|
||||
"editDisabled": true,
|
||||
"label": "存储货格类型",
|
||||
"prop": "storageBinType",
|
||||
"span": 12,
|
||||
"searchLabelWidth": 120,
|
||||
"searchSpan": 8,
|
||||
"rules": [{
|
||||
"message": "请输入存储货格类型",
|
||||
"required": true
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "描述",
|
||||
"prop": "description",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "number",
|
||||
"label": "长度",
|
||||
"prop": "length",
|
||||
"span": 12,
|
||||
"min": "",
|
||||
"rules": [{
|
||||
"message": "请输入长度",
|
||||
"required": true
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type": "number",
|
||||
"label": "宽度",
|
||||
"prop": "width",
|
||||
"span": 12,
|
||||
"min": "",
|
||||
"rules": [{
|
||||
"message": "请输入宽度",
|
||||
"required": true
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type": "number",
|
||||
"label": "高度",
|
||||
"prop": "height",
|
||||
"span": 12,
|
||||
"min": "",
|
||||
"rules": [{
|
||||
"message": "请输入高度",
|
||||
"required": true
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type": "number",
|
||||
"label": "最大承重",
|
||||
"prop": "maxWeight",
|
||||
"span": 12,
|
||||
"min": "",
|
||||
"rules": [{
|
||||
"message": "请输入最大承重",
|
||||
"required": true
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type": "switch",
|
||||
"label": "可否混料",
|
||||
"prop": "mixItem",
|
||||
"span": 12,
|
||||
dicData: [{
|
||||
label: '否',
|
||||
value: "N"
|
||||
},
|
||||
{
|
||||
label: '是',
|
||||
value: "Y"
|
||||
}],
|
||||
value: "N"
|
||||
}
|
||||
]
|
||||
}
|
||||
76
src/const/crud/wms/storagebin.js
Normal file
76
src/const/crud/wms/storagebin.js
Normal file
@ -0,0 +1,76 @@
|
||||
export const tableOption = {
|
||||
"border": true,
|
||||
"index": true,
|
||||
"indexLabel": "序号",
|
||||
"stripe": true,
|
||||
"menuAlign": "center",
|
||||
"align": "center",
|
||||
"searchMenuSpan": 6,
|
||||
"column": [
|
||||
{
|
||||
"type": "input",
|
||||
"search": true,
|
||||
"editDisabled": true,
|
||||
"label": "存储货格",
|
||||
"prop": "storageBin",
|
||||
"span": 12,
|
||||
"required": true,
|
||||
"rules": [{
|
||||
"message": "请输入存储货格",
|
||||
"required": true
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "描述",
|
||||
"prop": "description",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"search": true,
|
||||
"label": "存储货格类型",
|
||||
"prop": "storageBinType",
|
||||
"span": 12,
|
||||
"required": true,
|
||||
"rules": [{
|
||||
"message": "请输入存储货格类型",
|
||||
"required": true
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"search": true,
|
||||
"label": "存储位置",
|
||||
"prop": "storageLocation",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "行",
|
||||
"prop": "shelfRow",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "列",
|
||||
"prop": "shelfColumn",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "switch",
|
||||
"label": "默认货格",
|
||||
"prop": "isDefault",
|
||||
"span": 12,
|
||||
dicData: [{
|
||||
label: '否',
|
||||
value: "N"
|
||||
},
|
||||
{
|
||||
label: '是',
|
||||
value: "Y"
|
||||
}],
|
||||
value: "Y"
|
||||
}
|
||||
]
|
||||
}
|
||||
26
src/const/crud/wms/vendor.js
Normal file
26
src/const/crud/wms/vendor.js
Normal file
@ -0,0 +1,26 @@
|
||||
export const tableOption = {
|
||||
"border": true,
|
||||
"index": true,
|
||||
"indexLabel": "序号",
|
||||
"stripe": true,
|
||||
"menuAlign": "center",
|
||||
"align": "center",
|
||||
"searchMenuSpan": 6,
|
||||
"searchLabelWidth": 110,
|
||||
"menu":false,
|
||||
"column": [
|
||||
{
|
||||
"type": "input",
|
||||
"label": "供应商代码",
|
||||
"prop": "vendorCode",
|
||||
"span": 12,
|
||||
"search": true
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "供应商名称",
|
||||
"prop": "vendorName",
|
||||
"span": 12
|
||||
}
|
||||
]
|
||||
}
|
||||
25
src/const/crud/wms/warehouse.js
Normal file
25
src/const/crud/wms/warehouse.js
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
export const tableOption = {
|
||||
"border": true,
|
||||
"index": true,
|
||||
"indexLabel": "序号",
|
||||
"stripe": true,
|
||||
"menuAlign": "center",
|
||||
"align": "center",
|
||||
"searchMenuSpan": 6,
|
||||
"column": [
|
||||
{
|
||||
"type": "input",
|
||||
"search": true,
|
||||
"editDisabled": true,
|
||||
"label": "仓库",
|
||||
"prop": "warehouse",
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "描述",
|
||||
"prop": "description",
|
||||
"span": 12
|
||||
}
|
||||
]
|
||||
}
|
||||
76
src/util/inputSelectDialogUtil.js
Normal file
76
src/util/inputSelectDialogUtil.js
Normal file
@ -0,0 +1,76 @@
|
||||
/** 弹窗配置对象样例
|
||||
* <el-input ref="inputWorkCenter" v-model="workCenter" style="width: 200px;" :disabled="!lock">
|
||||
* <i slot="suffix" class="el-input__icon el-icon-copy-document" @click.stop="inputShowDialog(dialog.workCenterDialog,form,{'WORK_CENTER':'workCenter','DESCRIPTION':'workCenterDesc'})"></i>
|
||||
* </el-input>
|
||||
* dialog: {
|
||||
* workCenterDialog: {
|
||||
* id: "workCenter", //必需
|
||||
* queryParam:{},
|
||||
* page: false, //必需
|
||||
* tableColumn: [
|
||||
* {prop: "WORK_CENTER", label: "工作中心", width: "200"},
|
||||
* {prop: "DESCRIPTION", label: "描述"},
|
||||
* ], //必需
|
||||
* visible: false, //必需
|
||||
* fetchFun: fetchWorkCenterList, //必需
|
||||
* callBack: {
|
||||
* target: null,
|
||||
* keys: null
|
||||
* },
|
||||
* },
|
||||
* }
|
||||
*/
|
||||
/**
|
||||
* 弹窗开启
|
||||
* @param dialog 弹窗配置对象
|
||||
* @param target 回调对象,如 formObj,回调时根据传入的key将值赋值入该对象
|
||||
* @param keys 类型支持数组['key','key2'],和对象{'dialogKey','vueDataKey'}
|
||||
* @param requiredCheck 自定义判断
|
||||
* @param prepareQueryParams 自定义查询参数
|
||||
*/
|
||||
export function inputShowDialog(dialog, target, keys, requiredCheck, prepareQueryParams) {
|
||||
let me = this;
|
||||
requiredCheck instanceof Function ? requiredCheck.call(me,dialog.id) : null;
|
||||
dialog.queryParam = prepareQueryParams instanceof Function ? prepareQueryParams.call(me) : dialog.queryParam;
|
||||
if (!dialog.callBack) {
|
||||
dialog.callBack = {
|
||||
target: target,
|
||||
keys: keys
|
||||
};
|
||||
} else {
|
||||
dialog.callBack.target = target;
|
||||
dialog.callBack.keys = keys;
|
||||
}
|
||||
dialog.visible = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 弹窗回调
|
||||
* @param row 弹窗中选中的行
|
||||
* @param dialog 弹窗配置对象
|
||||
*/
|
||||
export function inputCallBack(row, dialog) {
|
||||
let me = this;
|
||||
if (dialog.callBack && dialog.callBack.target) {
|
||||
let rowKeys = dialog.tableColumn.map(o => o.prop), callBackKeys = dialog.callBack.keys;
|
||||
if (callBackKeys) {
|
||||
if (callBackKeys instanceof Array) {
|
||||
for (let key of callBackKeys) {
|
||||
me.$set(dialog.callBack.target, key, row[key]);
|
||||
}
|
||||
} else if (callBackKeys instanceof Object) {
|
||||
for (let key of Object.keys(callBackKeys)) {
|
||||
if (dialog.multiple && dialog.callBack.target[callBackKeys[key]] && dialog.callBack.target[callBackKeys[key]] !== '') {
|
||||
me.$set(dialog.callBack.target, callBackKeys[key],dialog.callBack.target[callBackKeys[key]] + "," +row[key]);
|
||||
} else {
|
||||
me.$set(dialog.callBack.target, callBackKeys[key], row[key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
me.$set(dialog.callBack.target, rowKeys[0], row[rowKeys[0]]);
|
||||
}
|
||||
} else {
|
||||
me.$message.error("dialog:" + dialog.id + " 未维护回调目标");
|
||||
}
|
||||
}
|
||||
437
src/views/wms/barcode-creation/index.vue
Normal file
437
src/views/wms/barcode-creation/index.vue
Normal file
@ -0,0 +1,437 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<basic-container>
|
||||
<el-form label-width="100px">
|
||||
<el-row>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="6" :xl="6">
|
||||
<el-form-item label="条码类型">
|
||||
<el-select v-model="barcodeType" style="width: 100%">
|
||||
<el-option label="卷条码" :value="'INVENTORY'"></el-option>
|
||||
<el-option label="箱条码" :value="'BOX'"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="6" :xl="6">
|
||||
<el-form-item label="条码号">
|
||||
<el-input v-model="barcode"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="4" :xl="4">
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="getDataList">检索</el-button>
|
||||
<el-button type="primary" @click="doClear">清除</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="时间">
|
||||
<el-date-picker type="datetime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss" v-model="startDateTime" @change="dateChange('START')"></el-date-picker>
|
||||
- <el-date-picker type="datetime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss" v-model="endDateTime" @change="dateChange('END')"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<br>
|
||||
<el-button type="primary" @click="doAdd">新增</el-button>
|
||||
<el-button type="primary" @click="doPrint">打印</el-button>
|
||||
<el-divider style="margin-top: 0px;"></el-divider>
|
||||
<el-table ref="table" :data="dataList" border row-key="id" @selection-change="handleSelectionChange" >
|
||||
<el-table-column :reserve-selection="true" type="selection" width="40"></el-table-column>
|
||||
<el-table-column header-align="center" align="center" label="序号">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.$index + 1 }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="barcode" header-align="center" align="center" label="条码号"></el-table-column>
|
||||
<el-table-column prop="barcodeType" header-align="center" align="center" label="类型(箱/卷)" :formatter="formatterBarcodeType"></el-table-column>
|
||||
<el-table-column prop="createTime" header-align="center" align="center" label="创建时间"></el-table-column>
|
||||
<el-table-column prop="creator" header-align="center" align="center" label="创建人"></el-table-column>
|
||||
</el-table>
|
||||
<div class="avue-crud__pagination">
|
||||
<el-pagination
|
||||
@size-change="sizeChangeHandle"
|
||||
@current-change="currentChangeHandle"
|
||||
:current-page="pageIndex"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:page-size="pageSize"
|
||||
:total="totalPage"
|
||||
background
|
||||
layout="total, sizes, prev, pager, next, jumper">
|
||||
</el-pagination>
|
||||
<el-dialog title="创建条码" :visible.sync="addDialogVisible" center :close-on-click-modal="false">
|
||||
<el-form v-if="barcodeType === 'INVENTORY'">
|
||||
<el-row :gutter="5">
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="6" :xl="6">
|
||||
<el-form-item label="物料">
|
||||
<el-input v-model="item"><i slot="suffix" class="el-input__icon el-icon-search" @click.stop="openItemDialog"></i></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="6" :xl="6">
|
||||
<el-form-item label="规格型号">
|
||||
<el-input v-model="groes" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="6" :xl="6">
|
||||
<el-form-item label="单位">
|
||||
<el-input v-model="unitOfMeasure" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="6" :xl="6">
|
||||
<el-form-item label="原始数量">
|
||||
<el-input v-model="qty" type="number"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="6" :xl="6">
|
||||
<el-form-item label="生产日期">
|
||||
<el-date-picker type="datetime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss" v-model="productionDataTime"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="6" :xl="6">
|
||||
<el-form-item label="失效日期">
|
||||
<el-date-picker type="datetime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss" v-model="validityDate"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="6" :xl="6">
|
||||
<el-form-item label="实际长度">
|
||||
<el-input v-model="itemLength" type="number"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="6" :xl="6">
|
||||
<el-form-item label="宽度">
|
||||
<el-input v-model="itemWidth" type="number"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="6" :xl="6">
|
||||
<el-form-item label="质量等级">
|
||||
<el-select v-model="status" style="width: 100%;">
|
||||
<el-option label="" value=""></el-option>
|
||||
<el-option label="A1" value="A1"></el-option>
|
||||
<el-option label="A2" value="A2"></el-option>
|
||||
<el-option label="A3" value="A3"></el-option>
|
||||
<el-option label="A4" value="A4"></el-option>
|
||||
<el-option label="B" value="B"></el-option>
|
||||
<el-option label="PASS" value="PASS"></el-option>
|
||||
<el-option label="NG" value="NG"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-form v-else-if="barcodeType === 'BOX'">
|
||||
<el-form-item label="创建数量">
|
||||
<el-input v-model="barcodeQty" onkeyup="value=value.replace(/^(0+)|[^\d]+/g,'')"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型">
|
||||
<el-input v-model="boxType"><i slot="suffix" class="el-input__icon el-icon-search" @click.stop="boxTypeDialogVisible = true"></i></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态">
|
||||
<el-select v-model="status" style="width: 100%">
|
||||
<el-option label="有效" :value="'Y'"></el-option>
|
||||
<el-option label="无效" :value="'N'"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="doCreate">创建</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<input-select-dialog :modal-obj="itemDialogObj" :modal-fetch-fun='itemListFun' :modal-show.sync="itemDialogVisible" @inputDialogSelected="doItemSelected"></input-select-dialog>
|
||||
<input-select-dialog :modal-obj="boxTypeDialogObj" :modal-fetch-fun='boxTypeListFun' :modal-show.sync="boxTypeDialogVisible" @inputDialogSelected="doBoxTypeSelected"></input-select-dialog>
|
||||
</div>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getStore} from '@/util/store'
|
||||
import {showLoading, hideLoading} from '@/const/loading'
|
||||
import {stringFormat, isBlank} from "@/util/string"
|
||||
import {fetchList,itemPage,boxTypePage,storageBinPage,save} from '@/api/wms/barcode-creation'
|
||||
import {listByActivityId} from "@/api/admin/activity-option"
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
site: '',
|
||||
INVENTORY_CODE_RULE: '',
|
||||
BOX_CODE_RULE: '',
|
||||
TYPE_OF_MATERIAL: '',
|
||||
barcode: '',
|
||||
barcodeType: 'INVENTORY',
|
||||
startDateTime: '',
|
||||
endDateTime: '',
|
||||
dataList:[],
|
||||
multipleSelection: [],
|
||||
pageIndex: 1,
|
||||
pageSize: 10,
|
||||
totalPage: 0,
|
||||
addDialogVisible: false,
|
||||
storageBin: '',
|
||||
storageBinBO: '',
|
||||
item: '',
|
||||
itemBO: '',
|
||||
groes: '',
|
||||
unitOfMeasure: '',
|
||||
qty: 0,
|
||||
productionDataTime: '',
|
||||
validityDate: '',
|
||||
itemLength: '',
|
||||
itemWidth: '',
|
||||
barcodeQty: 1,
|
||||
status: '',
|
||||
boxType: '',
|
||||
boxTypeBO: '',
|
||||
itemDialogObj: {
|
||||
"condition": "searchText",
|
||||
tableColumn: [
|
||||
{prop: "ITEM", label: "物料编码"},
|
||||
{prop: "ITEM_DESCRIPTION", label: "物料描述"},
|
||||
{prop: "GROES", label: "规格型号"},
|
||||
{prop: "UNIT_OF_MEASURE", label: "单位"}
|
||||
]
|
||||
},
|
||||
itemDialogVisible: false,
|
||||
itemListFun:itemPage,
|
||||
boxTypeDialogObj:{
|
||||
"condition": "searchText",
|
||||
tableColumn: [
|
||||
{prop: "carrierType", label: "载具类型"},
|
||||
{prop: "description", label: "载具描述"},
|
||||
{prop: "mixItem", label: "是否混料"},
|
||||
{prop: "grade", label: "等级"}
|
||||
]
|
||||
},
|
||||
boxTypeDialogVisible: false,
|
||||
boxTypeListFun:boxTypePage
|
||||
}
|
||||
},
|
||||
created() {
|
||||
//加载站点信息
|
||||
this.site = getStore({name: 'tenantId'})
|
||||
},
|
||||
|
||||
beforeRouteEnter(to, from, next){
|
||||
next(vm => {
|
||||
try {
|
||||
//获取作业规则
|
||||
let me = vm
|
||||
let activityId = me.$route.query.ACTIVITY_ID
|
||||
listByActivityId(activityId).then(response =>{
|
||||
|
||||
if (response.data.code != 0) {
|
||||
return me.$message.error(response.data.msg);
|
||||
}
|
||||
let data = response.data.data;
|
||||
|
||||
if (data && data.length > 0) {
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() == "INVENTORY_CODE_RULE") {
|
||||
me.INVENTORY_CODE_RULE = data[i].optionValue
|
||||
}
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() == "BOX_CODE_RULE") {
|
||||
me.BOX_CODE_RULE = data[i].optionValue
|
||||
}
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() == "TYPE_OF_MATERIAL") {
|
||||
me.TYPE_OF_MATERIAL = data[i].optionValue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}).catch(e=>{
|
||||
console.log(e)
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
formatterBarcodeType(row, column, cellValue, index){
|
||||
switch (cellValue) {
|
||||
case 'INVENTORY':
|
||||
return '卷条码'
|
||||
case 'BOX':
|
||||
return '箱条码'
|
||||
default:
|
||||
return cellValue
|
||||
}
|
||||
},
|
||||
// 每页数
|
||||
sizeChangeHandle (val) {
|
||||
this.pageSize = val
|
||||
this.pageIndex = 1
|
||||
this.getDataList()
|
||||
},
|
||||
// 当前页
|
||||
currentChangeHandle (val) {
|
||||
this.pageIndex = val
|
||||
this.getDataList()
|
||||
},
|
||||
//表格多选
|
||||
handleSelectionChange(val) {
|
||||
this.multipleSelection = val;
|
||||
},
|
||||
//日期判断
|
||||
dateChange(t) {
|
||||
let me = this
|
||||
if (isBlank(me.startDateTime) && isBlank(me.endDateTime)) {
|
||||
return
|
||||
}
|
||||
let date1 = Date.parse(me.startDateTime)
|
||||
let date2 = Date.parse(me.endDateTime)
|
||||
if (t === 'START') {
|
||||
if (date1 > date2) {
|
||||
me.startDateTime = ''
|
||||
return me.$message.warning('开始时期不能大于结束日期')
|
||||
}
|
||||
}
|
||||
if (t === 'END') {
|
||||
if (date1 > date2) {
|
||||
me.endDateTime = ''
|
||||
return me.$message.warning('结束时期不能小于开始日期')
|
||||
}
|
||||
}
|
||||
},
|
||||
//打开物料类型
|
||||
openItemDialog(){
|
||||
this.itemDialogObj.queryParam = {'materialType': this.TYPE_OF_MATERIAL}
|
||||
this.itemDialogVisible = true
|
||||
},
|
||||
doItemSelected(row) {
|
||||
this.item = row['ITEM']
|
||||
this.groes = row['GROES']
|
||||
this.unitOfMeasure = row['UNIT_OF_MEASURE']
|
||||
this.itemBO = row['HANDLE']
|
||||
},
|
||||
doBoxTypeSelected(row){
|
||||
this.boxType = row['carrierType']
|
||||
this.boxTypeBO = row['handle']
|
||||
},
|
||||
//清除
|
||||
doClear(){
|
||||
this.barcode = null
|
||||
this.barcodeType = 'INVENTORY'
|
||||
this.startDateTime = null
|
||||
this.endDateTime = null
|
||||
this.dataList = []
|
||||
this.multipleSelection = []
|
||||
this.pageIndex = 1
|
||||
this.pageSize = 10
|
||||
this.totalPage = 0
|
||||
},
|
||||
//检索数据
|
||||
getDataList(){
|
||||
let dto = {
|
||||
site: this.site,
|
||||
barcode: this.barcode,
|
||||
barcodeType: this.barcodeType,
|
||||
startDateTime: this.startDateTime,
|
||||
endDateTime: this.endDateTime
|
||||
}
|
||||
showLoading()
|
||||
fetchList({current: this.pageIndex, size: this.pageSize},dto).then(response => {
|
||||
hideLoading()
|
||||
this.dataList = response.data.data.records
|
||||
this.totalPage = response.data.data.total
|
||||
}).catch(e =>{
|
||||
hideLoading()
|
||||
console.log(e)
|
||||
});
|
||||
},
|
||||
//新增
|
||||
doAdd(){
|
||||
if(this.barcodeType === 'INVENTORY'){
|
||||
this.status = ''
|
||||
this.item = ''
|
||||
this.itemBO = ''
|
||||
this.groes = ''
|
||||
this.unitOfMeasure = ''
|
||||
this.qty = 0
|
||||
this.productionDataTime = ''
|
||||
this.validityDate = ''
|
||||
this.itemLength = ''
|
||||
this.itemWidth = ''
|
||||
this.barcodeQty = 1
|
||||
}else {
|
||||
this.status = 'Y'
|
||||
this.barcodeQty = 1
|
||||
this.boxType = ''
|
||||
this.boxTypeBO = ''
|
||||
}
|
||||
this.addDialogVisible = true
|
||||
},
|
||||
//创建
|
||||
doCreate(){
|
||||
let dto = {}
|
||||
dto.site = this.site
|
||||
dto.barcodeType = this.barcodeType
|
||||
if(this.barcodeType === 'INVENTORY'){
|
||||
if(isBlank(this.itemBO)){
|
||||
this.$message.warning('请选择物料')
|
||||
return false
|
||||
}
|
||||
if(isBlank(this.qty) || this.qty < 0 || this.qty == 0){
|
||||
this.$message.warning('数量不能小于等于0')
|
||||
return false
|
||||
}
|
||||
if(isBlank(this.status)){
|
||||
this.$message.warning('质量等级不能为空')
|
||||
return false
|
||||
}
|
||||
if(isBlank(this.productionDataTime)){
|
||||
this.$message.warning('请输入生产日期')
|
||||
return false
|
||||
}
|
||||
if(isBlank(this.itemLength)){
|
||||
this.$message.warning('请输入实际长度')
|
||||
return false
|
||||
}
|
||||
if(isBlank(this.itemWidth)){
|
||||
this.$message.warning('请输入宽度')
|
||||
return false
|
||||
}
|
||||
|
||||
dto.barcodeQty = 1
|
||||
dto.qty = this.qty
|
||||
dto.itemBo = this.itemBO
|
||||
dto.groes = this.groes
|
||||
dto.unitOfMeasure = this.unitOfMeasure
|
||||
dto.qualityInspectionStatus = this.status
|
||||
dto.validityDate = this.validityDate
|
||||
dto.productionDataTime = this.productionDataTime
|
||||
dto.length = this.itemLength
|
||||
dto.width = this.itemWidth
|
||||
dto.rule = this.INVENTORY_CODE_RULE
|
||||
}else {
|
||||
if(isBlank(this.boxTypeBO)){
|
||||
this.$message.warning('请选择载具类型')
|
||||
return false
|
||||
}
|
||||
if(isBlank(this.barcodeQty) || this.barcodeQty < 0 || this.barcodeQty == 0){
|
||||
this.$message.warning('条码数量不能小于0')
|
||||
return false
|
||||
}
|
||||
dto.barcodeQty = this.barcodeQty
|
||||
dto.boxType = this.boxTypeBO
|
||||
dto.qualityInspectionStatus = this.status
|
||||
dto.rule = this.BOX_CODE_RULE
|
||||
}
|
||||
showLoading()
|
||||
save(dto).then(response => {
|
||||
hideLoading()
|
||||
this.dataList = response.data.data
|
||||
this.addDialogVisible = false
|
||||
}).catch(e =>{
|
||||
hideLoading()
|
||||
console.log(e)
|
||||
})
|
||||
},
|
||||
doPrint(){
|
||||
this.$message.warning(stringFormat('{0}暂不支持打印',this.site))
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
/deep/.el-form-item{
|
||||
margin-bottom: 0px !important;
|
||||
}
|
||||
</style>
|
||||
146
src/views/wms/barcode-query/index.vue
Normal file
146
src/views/wms/barcode-query/index.vue
Normal file
@ -0,0 +1,146 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<basic-container>
|
||||
<el-form :model="formObj" ref="formObj" label-width="auto">
|
||||
<el-row :gutter="20">
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="库存条码:" prop="inventoryId" :required="true">
|
||||
<el-input @keyup.enter.native="getObjByInventoryId()" v-model="formObj.inventoryId"
|
||||
placeholder="请输入库存条码">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div>
|
||||
<el-button type="primary" @click="getObjByInventoryId()">查询</el-button>
|
||||
<el-button type="primary" @click="doClear">清除</el-button>
|
||||
<el-button type="primary" @click="labelRePrint">打印</el-button>
|
||||
</div>
|
||||
</el-form>
|
||||
<el-tabs>
|
||||
<el-tab-pane label="条码信息">
|
||||
<el-descriptions :model="list" :column="2" border :labelStyle="lableWidth">
|
||||
<el-descriptions-item label="条码:">{{ list.inventoryId }}</el-descriptions-item>
|
||||
<el-descriptions-item label="条码状态:">{{ list.status }}</el-descriptions-item>
|
||||
<el-descriptions-item label="物料号:">{{ list.item }}</el-descriptions-item>
|
||||
<el-descriptions-item label="质量等级:">{{ list.qualityInspectionStatus }}</el-descriptions-item>
|
||||
<el-descriptions-item label="物料描述:">{{ list.description }}</el-descriptions-item>
|
||||
<el-descriptions-item label="规则型号:">{{ list.groes }}</el-descriptions-item>
|
||||
<el-descriptions-item label="箱条码:">{{ list.box }}</el-descriptions-item>
|
||||
<el-descriptions-item label="托条码:">{{ list.pallet }}</el-descriptions-item>
|
||||
<el-descriptions-item label="长度:">{{ list.length }}</el-descriptions-item>
|
||||
<el-descriptions-item label="货格号:">{{ list.storageBin }}</el-descriptions-item>
|
||||
<el-descriptions-item label="宽度:">{{ list.width }}</el-descriptions-item>
|
||||
<el-descriptions-item label="ERP仓库:">{{ list.erpStorageLocation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="厚度:">{{ list.bismt }}</el-descriptions-item>
|
||||
<el-descriptions-item label="接收数量:">{{ list.originalQty }}</el-descriptions-item>
|
||||
<el-descriptions-item label="入库日期:">{{ list.createTime }}</el-descriptions-item>
|
||||
<el-descriptions-item label="现有数量:">{{ list.qtyOnHand }}</el-descriptions-item>
|
||||
<el-descriptions-item label="生产日期:">{{ list.productionDate }}</el-descriptions-item>
|
||||
<el-descriptions-item label="有效截至日期:">{{ list.expireDate }}</el-descriptions-item>
|
||||
<el-descriptions-item label="采购批次">{{ list.batchNo }}</el-descriptions-item>
|
||||
<el-descriptions-item label="供应商批次">{{ list.vendorBatchNo }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
</basic-container>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getObjByInventoryId,labelPrint } from "@/api/wms/barcode-query"
|
||||
import { isBlank } from "@/util/string";
|
||||
import { hideLoading, showLoading } from "@/const/loading"
|
||||
import { getByActivityOption } from "@/api/admin/activity-option";
|
||||
import {getStore} from '@/util/store'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
lableWidth: {
|
||||
'width': '150px'
|
||||
},
|
||||
formObj: {
|
||||
"inventoryId": ""
|
||||
},
|
||||
printer :"",
|
||||
list: {}
|
||||
|
||||
}
|
||||
},
|
||||
created() {
|
||||
//加载站点信息
|
||||
this.site = getStore({ name: 'tenantId' })
|
||||
//加载作业规则
|
||||
let activityId = this.$route.query.ACTIVITY_ID
|
||||
showLoading();
|
||||
getByActivityOption(activityId, 'PRINTER').then(response => {
|
||||
hideLoading();
|
||||
if (response.data.code != 0) {
|
||||
return this.$message.error(response.data.msg)
|
||||
}
|
||||
this. printer = response.data.data.optionValue;
|
||||
|
||||
}).catch(e => {
|
||||
console.log(e)
|
||||
hideLoading()
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
getObjByInventoryId() {
|
||||
let me = this;
|
||||
let inventoryId = me.formObj.inventoryId;
|
||||
if (isBlank(inventoryId)) {
|
||||
me.$message.error("库存条码不能为空");
|
||||
return;
|
||||
}
|
||||
showLoading();
|
||||
getObjByInventoryId(inventoryId).then(res => {
|
||||
if (res.data.code == 0 && res.data.data != null) {
|
||||
hideLoading();
|
||||
me.list = res.data.data;
|
||||
me.formObj.inventoryId = "";
|
||||
} else {
|
||||
me.$message.error("不存在此条码");
|
||||
hideLoading();
|
||||
return;
|
||||
}
|
||||
}).catch(e => {
|
||||
hideLoading();
|
||||
console.log(e);
|
||||
})
|
||||
},
|
||||
labelRePrint(){
|
||||
let me = this
|
||||
if (isBlank(me.printer)){
|
||||
this.$message.error('打印机编号不能为空')
|
||||
return false;
|
||||
}
|
||||
if (isBlank(me.list.inventoryId)){
|
||||
this.$message.error('条码信息不能为空')
|
||||
return false;
|
||||
}
|
||||
showLoading();
|
||||
let obj ={
|
||||
"inventoryId": me.list.inventoryId,
|
||||
"printer":me.printer
|
||||
}
|
||||
labelPrint(obj).then(respData => {
|
||||
hideLoading()
|
||||
this.$message.success(row.carrier + '打印成功')
|
||||
}).catch(error => {
|
||||
hideLoading()
|
||||
});
|
||||
|
||||
},
|
||||
doClear() {
|
||||
let me = this;
|
||||
me.formObj.inventoryId = "";
|
||||
me.list = {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
292
src/views/wms/carrier-bind-inventory/index.vue
Normal file
292
src/views/wms/carrier-bind-inventory/index.vue
Normal file
@ -0,0 +1,292 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<basic-container>
|
||||
<el-form ref="formObj" :model="formObj" :rules="rules" label-width="auto">
|
||||
<el-row :gutter="10">
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="站点:" prop="site">
|
||||
<el-input placeHolder="站点" v-model="formObj.site" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="已绑数量:" prop="bindNum">
|
||||
<el-input placeHolder="已绑数量" v-model="formObj.bindNum" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="已扫数量:" prop="scanNum">
|
||||
<el-input placeHolder="已扫数量" v-model="formObj.scanNum" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="主条码:" prop="carrier">
|
||||
<el-input placeHolder="手动输入或者扫码" v-model="formObj.carrier" :disabled="isDisabled"
|
||||
@keyup.enter.native="scanCarrier">
|
||||
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="子条码:" prop="carrierOrInventory">
|
||||
<el-input placeHolder="手动输入或者扫码" v-model="formObj.carrierOrInventory"
|
||||
@keyup.enter.native="scancarrierOrInventory">
|
||||
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table :data="formObj.list" :row-style="rowStyle">
|
||||
<el-table-column label="序号" prop="seq"></el-table-column>
|
||||
<el-table-column label="子条码" prop="carrierOrInventory"></el-table-column>
|
||||
<el-table-column label="物料号" prop="item"></el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
|
||||
<div style="margin-top: 10px;">
|
||||
<el-button type="warning" @click="doClear">清除</el-button>
|
||||
<el-button type="primary" @click="bind">绑定</el-button>
|
||||
</div>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import { getBindList, getItem, bind, getBindListByTray } from '@/api/wms/carrier-bind-inventory';
|
||||
import { getStore } from '@/util/store';
|
||||
import {showLoading, hideLoading} from '@/const/loading'
|
||||
import { isBlank } from '@/util/string';
|
||||
import {
|
||||
mapGetters
|
||||
} from 'vuex'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
formObj: {},
|
||||
isDisabled: false,
|
||||
wms_carrier_member_bind: false,
|
||||
isBind: "",
|
||||
needBindList: [],
|
||||
scanCodeList: [],
|
||||
rules: {
|
||||
carrier: [
|
||||
{ required: true, message: "主条码不可为空" }
|
||||
],
|
||||
carrierOrInventory: [
|
||||
{ required: true, message: "子条码不可为空" }
|
||||
],
|
||||
},
|
||||
initData: {
|
||||
site: getStore({ name: 'tenantId' }),
|
||||
bindNum: 0,
|
||||
scanNum: 0,
|
||||
list: []
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.wms_carrier_member_bind = this.permissions["wms_carrier_member_bind"];
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.list = [];
|
||||
this.needBindList = [];
|
||||
this.scanCodeList = [];
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(["permissions"]),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
//扫描主条码
|
||||
scanCarrier() {
|
||||
let me = this;
|
||||
let carrier = me.formObj.carrier;
|
||||
me.formObj.list = [];
|
||||
me.needBindList = [];
|
||||
me.formObj.scanNum = 0;
|
||||
if (isBlank(carrier)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
return;
|
||||
}
|
||||
getBindListByTray(carrier).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
let data = res.data.data;
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
let obj = Object.assign({}, {
|
||||
"seq": i + 1,
|
||||
"carrierOrInventory": data[i].carrierOrInventory,
|
||||
"item": data[i].item,
|
||||
"status": data[i].status,
|
||||
"isBind": "Y",
|
||||
});
|
||||
me.formObj.list.push(obj);
|
||||
}
|
||||
me.formObj.bindNum = data.length;
|
||||
me.isDisabled = true;
|
||||
} else {
|
||||
me.formObj.carrier = "";
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
|
||||
//扫描子条码
|
||||
scancarrierOrInventory() {
|
||||
let me = this;
|
||||
let carrierOrInventory = me.formObj.carrierOrInventory;
|
||||
|
||||
if (isBlank(carrierOrInventory)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
return;
|
||||
}
|
||||
let maxSeq = 0;
|
||||
//获得当前列表的序号
|
||||
for (let i = 0; i < me.formObj.list.length; i++) {
|
||||
let list = me.formObj.list[i];
|
||||
if (list.seq > maxSeq) {
|
||||
maxSeq = list.seq
|
||||
}
|
||||
}
|
||||
//判断子条码是否被扫描
|
||||
if (me.scanCodeList.length > 0) {
|
||||
for (let i = 0; i < me.scanCodeList.length; i++) {
|
||||
if (me.scanCodeList[i].code === carrierOrInventory) {
|
||||
me.delListItem(carrierOrInventory);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (let i = 0; i < me.formObj.list.length; i++) {
|
||||
if (carrierOrInventory === me.formObj.list[i].carrierOrInventory) {
|
||||
me.$message.error("已存在此子条码");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
getItem(carrierOrInventory).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
let data = res.data.data;
|
||||
if (me.formObj.list.length > 0) {
|
||||
if (data.status !== me.formObj.list[0].status) {
|
||||
me.$message.error("库存状态不一致,不允许混装");
|
||||
return;
|
||||
}
|
||||
}
|
||||
let obj = Object.assign({}, {
|
||||
"seq": maxSeq + 1,
|
||||
"carrierOrInventory": data.carrierOrInventory,
|
||||
"item": data.item,
|
||||
"status": data.status,
|
||||
"isBind": "N"
|
||||
});
|
||||
me.formObj.list.push(obj);
|
||||
me.needBindList.push(obj);
|
||||
//将已经扫描过的子条码存入一个集合
|
||||
me.scanCodeList.push({ "code": carrierOrInventory });
|
||||
me.formObj.scanNum += 1;
|
||||
}
|
||||
})
|
||||
//扫描之后清空子条码输入框
|
||||
me.formObj.carrierOrInventory = "";
|
||||
},
|
||||
|
||||
//绑定
|
||||
bind() {
|
||||
let me = this;
|
||||
let bindList = [];
|
||||
//判断需绑定条码是否为空
|
||||
if (me.needBindList.length > 0) {
|
||||
for (let i = 0; i < me.needBindList.length; i++) {
|
||||
let obj = Object.assign({}, {
|
||||
"carrier": me.formObj.carrier,
|
||||
"carrierOrInventory": me.needBindList[i].carrierOrInventory,
|
||||
"item": me.needBindList[i].item
|
||||
})
|
||||
bindList.push(obj);
|
||||
}
|
||||
|
||||
me.$refs['formObj'].validateField('carrier', ErrorMsg => {
|
||||
if (!ErrorMsg) {
|
||||
showLoading();
|
||||
bind({
|
||||
str: me.$route.query.ACTIVITY_ID,
|
||||
list: bindList
|
||||
}).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code == 0) {
|
||||
me.$message.success("绑定成功,请及时更新托盘清单");
|
||||
me.doClear();
|
||||
} else {
|
||||
me.$message.error("绑定失败");
|
||||
}
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
}
|
||||
})
|
||||
} else {
|
||||
me.$message.error("不存在需要绑定的条码")
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
//清除操作
|
||||
doClear() {
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.formObj.list = [];
|
||||
this.list = [];
|
||||
this.bindList = [];
|
||||
this.isDisabled = false;
|
||||
this.$refs['formObj'].resetFields();
|
||||
this.needBindList = [];
|
||||
this.scanCodeList = [];
|
||||
},
|
||||
|
||||
//在列表中删除重复扫描的子条码
|
||||
delListItem(code) {
|
||||
let me = this;
|
||||
//已经扫过的子条码再次扫描则删除
|
||||
for (let i = 0; i < me.needBindList.length; i++) {
|
||||
if (code === me.needBindList[i].carrierOrInventory) {
|
||||
me.needBindList.splice(i, 1);
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < me.formObj.list.length; i++) {
|
||||
if (code === me.formObj.list[i].carrierOrInventory) {
|
||||
me.formObj.list.splice(i, 1);
|
||||
me.formObj.scanNum = me.formObj.scanNum - 1;
|
||||
//更新显示列表中的序号
|
||||
for (let j = i; j < me.formObj.list.length; j++) {
|
||||
me.formObj.list[j].seq = me.formObj.list[j].seq - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < me.scanCodeList.length; i++) {
|
||||
if (code === me.scanCodeList[i].code) {
|
||||
me.scanCodeList.splice(i, 1);
|
||||
}
|
||||
}
|
||||
me.formObj.carrierOrInventory = "";
|
||||
},
|
||||
|
||||
// 更改选中行背景色
|
||||
rowStyle({ row }) {
|
||||
if (row.isBind === "N") {
|
||||
return { 'background-color': '#00FF00', cursor: 'pointer' };
|
||||
}
|
||||
return { cursor: 'pointer' };
|
||||
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.el-table__row:hover>td {
|
||||
background-color: transparent;
|
||||
}
|
||||
</style>
|
||||
198
src/views/wms/carrier-type/index.vue
Normal file
198
src/views/wms/carrier-type/index.vue
Normal file
@ -0,0 +1,198 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<basic-container>
|
||||
<avue-crud ref="crud" :page.sync="page" :data="tableData" :permission="permissionList"
|
||||
:table-loading="tableLoading" :option="tableOption" @on-load="getList" @search-change="searchChange"
|
||||
@refresh-change="refreshChange" @size-change="sizeChange" @current-change="currentChange"
|
||||
@row-update="handleUpdate" @row-save="handleSave" @row-del="handleDel">
|
||||
|
||||
</avue-crud>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { fetchList, getObj, addObj, putObj, delObj } from '@/api/wms/carriertype'
|
||||
import { tableOption } from '@/const/crud/wms/carriertype'
|
||||
import { mapGetters } from 'vuex'
|
||||
|
||||
export default {
|
||||
name: 'carriertype',
|
||||
data() {
|
||||
var validateName = (rule, value, callback) => {
|
||||
let acount = /[\u4E00-\u9FA5]/g;
|
||||
if (value === '') {
|
||||
callback(new Error('名称不可为空'));
|
||||
} else if (acount.test(value)) {
|
||||
callback(new Error('名称不可包含中文'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
searchForm: {},
|
||||
tableData: [],
|
||||
page: {
|
||||
total: 0, // 总页数
|
||||
currentPage: 1, // 当前页数
|
||||
pageSize: 20 // 每页显示多少条
|
||||
},
|
||||
tableLoading: false,
|
||||
tableOption: {
|
||||
"border": true,
|
||||
"index": true,
|
||||
"indexLabel": "序号",
|
||||
"stripe": true,
|
||||
"menuAlign": "center",
|
||||
"align": "center",
|
||||
"searchMenuSpan": 6,
|
||||
"column": [
|
||||
{
|
||||
"type": "input",
|
||||
"search": true,
|
||||
"editDisabled": true,
|
||||
"maxlength": 12,
|
||||
"label": "载具类型",
|
||||
"prop": "carrierType",
|
||||
"span": 12,
|
||||
"required": true,
|
||||
"rules": [{ validator: validateName, trigger: 'blur', "required": true }]
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "描述",
|
||||
"prop": "description",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "最大承载数量",
|
||||
"prop": "maxLoadQty",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "switch",
|
||||
"label": "可否混料",
|
||||
"prop": "mixItem",
|
||||
"span": 12,
|
||||
dicData: [{
|
||||
label: '否',
|
||||
value: "N"
|
||||
},
|
||||
{
|
||||
label: '是',
|
||||
value: "Y"
|
||||
}],
|
||||
value: "N"
|
||||
},
|
||||
{
|
||||
"type": "select",
|
||||
"label": "等级",
|
||||
"required": true,
|
||||
"prop": "grade",
|
||||
"rules": [{
|
||||
"message": "请选择等级",
|
||||
"required": true
|
||||
}],
|
||||
dicData: [{
|
||||
label: '1',
|
||||
value: 1
|
||||
},
|
||||
{
|
||||
label: '2',
|
||||
value: 2
|
||||
},
|
||||
{
|
||||
label: '3',
|
||||
value: 3
|
||||
}],
|
||||
value: 1
|
||||
},
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['permissions']),
|
||||
permissionList() {
|
||||
return {
|
||||
addBtn: this.vaildData(this.permissions.wms_carrier_type_add, false),
|
||||
delBtn: this.vaildData(this.permissions.wms_carrier_type_del, false),
|
||||
editBtn: this.vaildData(this.permissions.wms_carrier_type_edit, false)
|
||||
};
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 列表查询
|
||||
getList(page, params) {
|
||||
this.tableLoading = true
|
||||
fetchList(Object.assign({
|
||||
current: page.currentPage,
|
||||
size: page.pageSize
|
||||
}, params, this.searchForm)).then(response => {
|
||||
this.tableData = response.data.data.records
|
||||
this.page.total = response.data.data.total
|
||||
this.tableLoading = false
|
||||
}).catch(() => {
|
||||
this.tableLoading = false
|
||||
})
|
||||
},
|
||||
// 删除
|
||||
handleDel: function (row, index) {
|
||||
this.$confirm('是否确认删除载具类型' + row.carrierType, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(function () {
|
||||
return delObj(row.handle)
|
||||
}).then(data => {
|
||||
this.$message.success('删除成功')
|
||||
this.getList(this.page)
|
||||
})
|
||||
},
|
||||
// 更新
|
||||
handleUpdate: function (row, index, done, loading) {
|
||||
putObj(row).then(data => {
|
||||
this.$message.success('修改成功')
|
||||
done()
|
||||
this.getList(this.page)
|
||||
}).catch(() => {
|
||||
loading();
|
||||
});
|
||||
},
|
||||
// 保存
|
||||
handleSave: function (row, done, loading) {
|
||||
addObj(row).then(data => {
|
||||
this.$message.success('添加成功')
|
||||
done()
|
||||
this.getList(this.page)
|
||||
}).catch(() => {
|
||||
loading();
|
||||
});
|
||||
},
|
||||
// 每页条数改变事件
|
||||
sizeChange(pageSize) {
|
||||
this.page.pageSize = pageSize
|
||||
},
|
||||
// 当前页发生改变事件
|
||||
currentChange(current) {
|
||||
this.page.currentPage = current
|
||||
},
|
||||
// 查询事件
|
||||
searchChange(form, done) {
|
||||
this.searchForm = form
|
||||
this.page.currentPage = 1
|
||||
this.getList(this.page, form)
|
||||
done()
|
||||
},
|
||||
// 刷新事件
|
||||
refreshChange() {
|
||||
this.getList(this.page)
|
||||
},
|
||||
// 导出excel
|
||||
exportExcel() {
|
||||
this.downBlobFile('/wms/carriertype/export', this.searchForm, 'carriertype.xlsx')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
403
src/views/wms/carrier-unbind-inventory/index.vue
Normal file
403
src/views/wms/carrier-unbind-inventory/index.vue
Normal file
@ -0,0 +1,403 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<basic-container>
|
||||
<el-form ref="formObj" :model="formObj" :rules="rules" label-width="auto">
|
||||
<el-row :gutter="10">
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="站点:" prop="site">
|
||||
<el-input placeHolder="站点" v-model="formObj.site" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="已绑数量:" prop="bindNum">
|
||||
<el-input placeHolder="已绑数量" v-model="formObj.bindNum" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="已扫数量:" prop="scanNum">
|
||||
<el-input placeHolder="已扫数量" v-model="formObj.scanNum" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="主条码:" prop="carrier">
|
||||
<el-input placeHolder="手动输入或者扫码" v-model="formObj.carrier" :disabled="isDisabled"
|
||||
@keyup.enter.native="scanCarrier">
|
||||
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="子条码:" prop="carrierOrInventory">
|
||||
<el-input placeHolder="手动输入或者扫码" v-model="formObj.carrierOrInventory"
|
||||
@keyup.enter.native="scancarrierOrInventory">
|
||||
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col>
|
||||
<el-button type="primary" @click="selectionAll">全选</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table :data="formObj.list" :row-style="rowStyle">
|
||||
<el-table-column label="序号" prop="seq"></el-table-column>
|
||||
<el-table-column label="子条码" prop="carrierOrInventory"></el-table-column>
|
||||
<el-table-column label="物料号" prop="item"></el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
|
||||
<div style="margin-top: 10px;">
|
||||
<el-button type="warning" @click="doClear">清除</el-button>
|
||||
<el-button type="primary" @click="unBind">解绑</el-button>
|
||||
<el-button type="primary" @click="print">托盘清单打印</el-button>
|
||||
</div>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getBindList, getItem, unbind, getCarrier, getBindListByTray,confirmUnBind} from '@/api/wms/carrier-unbind-inventory';
|
||||
import {getStore} from '@/util/store';
|
||||
import {isBlank} from '@/util/string';
|
||||
import {showLoading, hideLoading} from '@/const/loading';
|
||||
import {listByActivityId} from "@/api/admin/activity-option";
|
||||
import {
|
||||
mapGetters
|
||||
} from 'vuex';
|
||||
import axios from "axios";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
formObj: {},
|
||||
isDisabled: false,
|
||||
wms_carrier_member_unbind: false,
|
||||
isBind: "",
|
||||
needBindList: [],
|
||||
scanCodeList: [],
|
||||
rules: {
|
||||
carrier: [
|
||||
{required: true, message: "主条码不可为空", trigger: 'blur'}
|
||||
],
|
||||
carrierOrInventory: [
|
||||
{required: true, message: "子条码不可为空", trigger: 'blur'}
|
||||
],
|
||||
},
|
||||
initData: {
|
||||
site: getStore({name: 'tenantId'}),
|
||||
carrierOrInventory: "",
|
||||
bindNum: 0,
|
||||
scanNum: 0,
|
||||
list: []
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.wms_carrier_member_unbind = this.permissions["wms_carrier_member_unbind"];
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.list = [];
|
||||
this.needBindList = [];
|
||||
this.scanCodeList = [];
|
||||
},
|
||||
|
||||
beforeRouteEnter(to, from, next) {
|
||||
next(vm => {
|
||||
try {
|
||||
//获取作业规则
|
||||
let me = vm;
|
||||
let activityId = me.$route.query.ACTIVITY_ID;
|
||||
listByActivityId(activityId).then(response => {
|
||||
|
||||
if (response.data.code != 0) {
|
||||
return me.$message.error(response.data.msg);
|
||||
}
|
||||
let data = response.data.data;
|
||||
|
||||
if (data && data.length > 0) {
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() === "UNBIND_XNT") {
|
||||
me.unbindXnt = data[i].optionValue;
|
||||
}
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() === "CONFIRM_ID") {
|
||||
me.confirmId = data[i].optionValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}).catch(e => {
|
||||
console.log(e);
|
||||
});
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapGetters(["permissions"]),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
//扫描主条码
|
||||
scanCarrier() {
|
||||
let me = this;
|
||||
let carrier = me.formObj.carrier;
|
||||
me.formObj.list = [];
|
||||
me.needBindList = [];
|
||||
me.formObj.carrierOrInventory = "";
|
||||
me.formObj.scanNum = 0;
|
||||
if (isBlank(carrier)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
return;
|
||||
}
|
||||
getBindListByTray(carrier).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
let obj = Object.assign({}, {
|
||||
"seq": i + 1,
|
||||
"carrierOrInventory": res.data.data[i].carrierOrInventory,
|
||||
"item": res.data.data[i].item,
|
||||
"isBind": "Y"
|
||||
});
|
||||
me.formObj.list.push(obj);
|
||||
}
|
||||
me.formObj.bindNum = res.data.data.length;
|
||||
me.isDisabled = true;
|
||||
} else {
|
||||
me.formObj.carrier = "";
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
//扫描子条码
|
||||
scancarrierOrInventory() {
|
||||
let me = this;
|
||||
let carrierOrInventory = me.formObj.carrierOrInventory;
|
||||
if (isBlank(carrierOrInventory)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
return;
|
||||
}
|
||||
//判断子条码是否被扫描
|
||||
if (me.scanCodeList.includes(carrierOrInventory)) {
|
||||
me.delListItem(carrierOrInventory);
|
||||
return;
|
||||
}
|
||||
//判断是否为与主条码绑定
|
||||
if (me.formObj.list.length > 0) {
|
||||
for (let j = 0; j < me.formObj.list.length; j++) {
|
||||
if (me.formObj.list[j].carrierOrInventory === carrierOrInventory) {
|
||||
me.formObj.list[j].isBind = "N";
|
||||
me.needBindList.push(me.formObj.list[j]);
|
||||
me.scanCodeList.push(carrierOrInventory);
|
||||
me.formObj.scanNum += 1;
|
||||
me.formObj.carrierOrInventory = "";
|
||||
me.sort(j);
|
||||
return;
|
||||
}
|
||||
}
|
||||
me.$message.error("此条码与主条码不存在绑定关系");
|
||||
me.formObj.carrierOrInventory = "";
|
||||
return;
|
||||
} else {
|
||||
me.$message.error("请先扫描主条码");
|
||||
me.formObj.carrierOrInventory = "";
|
||||
return;
|
||||
}
|
||||
},
|
||||
|
||||
//解绑
|
||||
unBind() {
|
||||
let me = this;
|
||||
let unbindList = [];
|
||||
//判断需绑定条码是否为空
|
||||
if (me.needBindList.length > 0) {
|
||||
for (let i = 0; i < me.needBindList.length; i++) {
|
||||
let obj = Object.assign({}, {
|
||||
"carrier": me.formObj.carrier,
|
||||
"carrierOrInventory": me.needBindList[i].carrierOrInventory,
|
||||
"item": me.needBindList[i].item
|
||||
});
|
||||
unbindList.push(obj);
|
||||
}
|
||||
me.$refs['formObj'].validateField('carrier', ErrorMsg => {
|
||||
if (!ErrorMsg) {
|
||||
let fun = () => {
|
||||
showLoading();
|
||||
unbind({
|
||||
str: me.$route.query.ACTIVITY_ID,
|
||||
list: unbindList
|
||||
}).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code == 0) {
|
||||
me.$message.success("解绑成功,请及时更新托盘清单");
|
||||
me.doClear();
|
||||
} else {
|
||||
me.$message.error("解绑失败");
|
||||
}
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
}
|
||||
let text;
|
||||
if (me.unbindXnt === 'Y'){
|
||||
text = "此次解绑为绑定虚拟托模式!";
|
||||
} else {
|
||||
text = "此次解绑为直接解绑模式!";
|
||||
}
|
||||
if (!isBlank(me.confirmId)) {
|
||||
me.$prompt(text, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
}).then(({value}) => {
|
||||
if (value === me.confirmId) {
|
||||
fun();
|
||||
} else {
|
||||
me.$message.error("解绑密码错误");
|
||||
}
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
} else {
|
||||
me.$confirm(text, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(function () {
|
||||
fun();
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
me.$message.error("不存在需要解绑的条码");
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
//清除操作
|
||||
doClear() {
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.formObj.list = [];
|
||||
this.list = [];
|
||||
this.isDisabled = false;
|
||||
this.$refs['formObj'].resetFields();
|
||||
this.needBindList = [];
|
||||
this.scanCodeList = [];
|
||||
},
|
||||
|
||||
//在列表中删除重复扫描的子条码
|
||||
delListItem(code) {
|
||||
let me = this;
|
||||
//已经扫过的子条码再次扫描则删除
|
||||
for (let i = 0; i < me.needBindList.length; i++) {
|
||||
if (code === me.needBindList[i].carrierOrInventory) {
|
||||
me.needBindList.splice(i, 1);
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < me.formObj.list.length; i++) {
|
||||
if (code === me.formObj.list[i].carrierOrInventory && "N" === me.formObj.list[i].isBind) {
|
||||
me.formObj.list[i].isBind = "Y";
|
||||
|
||||
}
|
||||
}
|
||||
let index = me.scanCodeList.findIndex(o => code === o);
|
||||
if (index >= 0) {
|
||||
me.scanCodeList.splice(index, 1);
|
||||
}
|
||||
me.formObj.carrierOrInventory = "";
|
||||
},
|
||||
|
||||
//列表重新排序
|
||||
sort(index) {
|
||||
let newList = [];
|
||||
let obj = Object.assign({}, this.formObj.list[index], {"seq": 1});
|
||||
newList.push(obj);
|
||||
this.formObj.list.splice(index, 1);
|
||||
for (let i = 0; i < this.formObj.list.length; i++) {
|
||||
let listObj = Object.assign({}, this.formObj.list[i], {"seq": i + 2});
|
||||
newList.push(listObj);
|
||||
}
|
||||
this.formObj.list = newList;
|
||||
},
|
||||
|
||||
// 更改选中行背景色
|
||||
rowStyle({row}) {
|
||||
if (row.isBind === "N") {
|
||||
return {'background-color': '#FF0000', cursor: 'pointer'};
|
||||
}
|
||||
return {cursor: 'pointer'};
|
||||
|
||||
},
|
||||
|
||||
print() {
|
||||
let me = this;
|
||||
let carrier = me.formObj.carrier;
|
||||
if (carrier) {
|
||||
showLoading();
|
||||
getCarrier({carrier: carrier}).then(respData => {
|
||||
if (respData.data.code != 0) {
|
||||
return me.$message.error(respData.data.msg);
|
||||
}
|
||||
let data = respData.data.data;
|
||||
if (!data.carrierTypeBo || data.carrierTypeBo.indexOf("TP") < 0) {
|
||||
return me.$message.error("主条码非托条码");
|
||||
} else {
|
||||
// me.downBlobFile("/wms/carrier-member/print", {carrier: carrier}, carrier + ".pdf");
|
||||
axios({
|
||||
method: 'get',
|
||||
url: '/wms/carrier-member/print/',
|
||||
params: {carrier: carrier},
|
||||
headers: {
|
||||
'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
||||
},
|
||||
responseType: 'blob' //设置响应的数据类型为一个包含二进制数据的 Blob 对象,必须设置!!!
|
||||
}).then(response => {
|
||||
hideLoading();
|
||||
// 处理返回的文件流
|
||||
const binaryData = [];
|
||||
binaryData.push(response);
|
||||
if (binaryData[0].size === 0) {
|
||||
return this.$notify.error("内容为空,无法下载");
|
||||
}
|
||||
let pdfUrl = window.URL.createObjectURL(new Blob([response.data], {type: response.data.type}));
|
||||
const newPage = window.open(pdfUrl, "_blank", "scrollbars=yes,resizable=1,modal=false,alwaysRaised=yes");
|
||||
newPage.document.title = carrier + '.pdf';
|
||||
}).catch(e => {
|
||||
console.log(e);
|
||||
hideLoading();
|
||||
});
|
||||
}
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
selectionAll(){
|
||||
let me = this;
|
||||
let list = me.formObj.list;
|
||||
me.needBindList = [];
|
||||
me.scanCodeList = [];
|
||||
if (list.length > 0) {
|
||||
for (let j = 0; j < list.length; j++) {
|
||||
let row = list[j];
|
||||
row.isBind = "N";
|
||||
me.needBindList.push(row);
|
||||
me.scanCodeList.push(row.carrierOrInventory);
|
||||
}
|
||||
me.formObj.scanNum = list.length;
|
||||
} else {
|
||||
me.$message.error("请先扫描主条码");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.el-table__row:hover > td {
|
||||
background-color: transparent;
|
||||
}
|
||||
</style>
|
||||
318
src/views/wms/carrier/index.vue
Normal file
318
src/views/wms/carrier/index.vue
Normal file
@ -0,0 +1,318 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<input-select-dialog :modal-obj='carrierTypeDialogObj' :modal-fetch-fun='carrierTypeDialogFetchFun'
|
||||
:modal-show.sync="carrierTypeDialogVisible" @inputDialogSelected="carrierTypeSelect">
|
||||
</input-select-dialog>
|
||||
<basic-container>
|
||||
<avue-crud ref="crud" :page.sync="page" :data="tableData" v-model="form" :permission="permissionList"
|
||||
:table-loading="tableLoading" :option="tableOption" @selection-change="selectionChange"
|
||||
@on-load="getList" @search-change="searchChange" @search-reset="searchReset"
|
||||
@refresh-change="refreshChange" @size-change="sizeChange" @current-change="currentChange"
|
||||
@row-update="handleUpdate" @row-save="handleSave" @row-del="handleDel">
|
||||
<template slot-scope="scope" slot="carrierTypeForm">
|
||||
<el-input placeholder="请输入载具类型" v-model="form.carrierType">
|
||||
<i slot="suffix" class="el-input__icon el-icon-search" @click.stop="showCarrierTypeDialog"></i>
|
||||
</el-input>
|
||||
</template>
|
||||
<template slot="menuLeft" slot-scope="{size}">
|
||||
<el-button type="primary" icon="el-icon-printer" :size="size" @click="printCode()" :disabled="!print_permissions">打印</el-button>
|
||||
<el-button type="danger" icon="el-icon-delete" :size="size"
|
||||
@click="toggleSelection()">取消选择</el-button>
|
||||
</template>
|
||||
</avue-crud>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { fetchList, getObj, addObj, putObj, delObj,labelPrint} from '@/api/wms/carrier'
|
||||
import { tableOption } from '@/const/crud/wms/carrier'
|
||||
import { getByActivityOption } from "@/api/admin/activity-option";
|
||||
import { showLoading, hideLoading } from '@/const/loading'
|
||||
import { mapGetters } from 'vuex'
|
||||
import {getStore} from '@/util/store'
|
||||
import {stringFormat, isBlank} from "@/util/string"
|
||||
import { fetchList as FetchCarrierTypeList } from "@/api/wms/carriertype"
|
||||
|
||||
export default {
|
||||
name: 'carrier',
|
||||
data() {
|
||||
var validateName = (rule, value, callback) => {
|
||||
let acount = /[\u4E00-\u9FA5]/g;
|
||||
if (value === '') {
|
||||
callback(new Error('名称不可为空'));
|
||||
} else if (acount.test(value)) {
|
||||
callback(new Error('名称不可包含中文'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
form: {},
|
||||
printer :"",
|
||||
selectList: [], //打印传的数据
|
||||
searchForm: {},
|
||||
tableData: [],
|
||||
page: {
|
||||
total: 0, // 总页数
|
||||
currentPage: 1, // 当前页数
|
||||
pageSize: 20 // 每页显示多少条
|
||||
},
|
||||
tableLoading: false,
|
||||
tableOption: {
|
||||
"tip": false,
|
||||
"reserveSelection": true,
|
||||
"selection": true,
|
||||
"border": true,
|
||||
"index": true,
|
||||
"indexLabel": "序号",
|
||||
"stripe": true,
|
||||
"menuAlign": "center",
|
||||
"align": "center",
|
||||
"searchMenuSpan": 6,
|
||||
"column": [
|
||||
{
|
||||
"type": "input",
|
||||
"search": true,
|
||||
"editDisabled": true,
|
||||
"label": "载具",
|
||||
"prop": "carrier",
|
||||
"maxlength": 20,
|
||||
"span": 12,
|
||||
"required": true,
|
||||
"rules": [{ validator: validateName, trigger: 'blur', "required": true }]
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"label": "描述",
|
||||
"prop": "description",
|
||||
"span": 12
|
||||
},
|
||||
{
|
||||
"type": "input",
|
||||
"search": true,
|
||||
"label": "载具类型",
|
||||
"prop": "carrierType",
|
||||
"span": 12,
|
||||
"required": true,
|
||||
"rules": [{
|
||||
"message": "请输入载具类型",
|
||||
"required": true
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type": "select",
|
||||
"label": "状态",
|
||||
"prop": "status",
|
||||
"span": 12,
|
||||
dicData: [{
|
||||
label: '有效',
|
||||
value: "Y"
|
||||
}, {
|
||||
label: '无效',
|
||||
value: "N"
|
||||
}],
|
||||
value: "Y"
|
||||
}
|
||||
]
|
||||
},
|
||||
carrierTypeDialogVisible: false,
|
||||
carrierTypeDialogFetchFun: FetchCarrierTypeList,
|
||||
carrierTypeDialogObj: {
|
||||
"condition": "carrierType",
|
||||
tableColumn: [
|
||||
{ prop: "carrierType", label: "载具类型", width: "200" },
|
||||
{ prop: "description", label: "描述" }
|
||||
]
|
||||
},
|
||||
}
|
||||
},
|
||||
created() {
|
||||
//加载站点信息
|
||||
this.site = getStore({ name: 'tenantId' })
|
||||
this.print_permissions = this.permissions['wms_carrier_print'];
|
||||
},
|
||||
|
||||
beforeRouteEnter(to, from, next){
|
||||
next(vm => {
|
||||
try {
|
||||
//获取作业规则
|
||||
let me = vm
|
||||
let activityId = me.$route.query.ACTIVITY_ID
|
||||
getByActivityOption(activityId, 'PRINTER').then(response => {
|
||||
if (response.data.code != 0) {
|
||||
return me.$message.error(response.data.msg)
|
||||
}
|
||||
if(response.data.data && response.data.data != {} && !isBlank(response.data.data.optionValue)){
|
||||
me.printer = response.data.data.optionValue
|
||||
}
|
||||
}).catch(e => {
|
||||
console.log(e)
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
})
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['permissions']),
|
||||
permissionList() {
|
||||
return {
|
||||
addBtn: this.vaildData(this.permissions.wms_carrier_add, false),
|
||||
delBtn: this.vaildData(this.permissions.wms_carrier_del, false),
|
||||
editBtn: this.vaildData(this.permissions.wms_carrier_edit, false)
|
||||
};
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
//载具类型弹出框
|
||||
showCarrierTypeDialog() {
|
||||
let me = this;
|
||||
me.carrierTypeDialogVisible = true;
|
||||
},
|
||||
|
||||
carrierTypeSelect(row) {
|
||||
let me = this;
|
||||
me.form.carrierType = row.carrierType;
|
||||
me.form.carrierTypeBo = row.handle;
|
||||
},
|
||||
|
||||
//表格多选
|
||||
selectionChange(list) {
|
||||
let me = this;
|
||||
me.selectList = list;
|
||||
},
|
||||
|
||||
//取消选择
|
||||
toggleSelection(val) {
|
||||
if(this.$refs.crud){
|
||||
this.$refs.crud.toggleSelection(val);
|
||||
}
|
||||
},
|
||||
|
||||
searchReset() {
|
||||
this.selectList = [];
|
||||
},
|
||||
|
||||
printCode(){
|
||||
let me = this
|
||||
if (isBlank(me.printer)){
|
||||
this.$message.error('打印机编号不能为空')
|
||||
return false;
|
||||
}
|
||||
if (me.selectList.length==0){
|
||||
this.$message.error('请选择打印数据')
|
||||
return false;
|
||||
}
|
||||
let printList=[];
|
||||
for (let i = 0; i < me.selectList.length; i++) {
|
||||
let obj ={
|
||||
"carrier": me.selectList[i].carrier,
|
||||
"description": me.selectList[i].description,
|
||||
"printer": me.printer
|
||||
}
|
||||
printList.push(obj);
|
||||
}
|
||||
showLoading();
|
||||
labelPrint(printList).then(respData => {
|
||||
hideLoading();
|
||||
this.$message.success('打印成功')
|
||||
}).catch(error => {
|
||||
hideLoading()
|
||||
});
|
||||
},
|
||||
|
||||
// 列表查询
|
||||
getList(page, params) {
|
||||
this.tableLoading = true;
|
||||
this.toggleSelection();
|
||||
fetchList(Object.assign({
|
||||
current: page.currentPage,
|
||||
size: page.pageSize
|
||||
}, params, this.searchForm)).then(response => {
|
||||
this.tableData = response.data.data.records
|
||||
this.page.total = response.data.data.total
|
||||
this.tableLoading = false
|
||||
}).catch(() => {
|
||||
this.tableLoading = false
|
||||
})
|
||||
},
|
||||
// 删除
|
||||
handleDel: function (row, index) {
|
||||
this.$confirm('是否确认删除载具' + row.carrier, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(function () {
|
||||
return delObj(row.handle)
|
||||
}).then(data => {
|
||||
this.$message.success('删除成功')
|
||||
this.getList(this.page)
|
||||
})
|
||||
},
|
||||
labelRePrint(row){
|
||||
let me = this
|
||||
console.log(row)
|
||||
if (isBlank(me.printer)){
|
||||
this.$message.error('打印机编号不能为空')
|
||||
return false;
|
||||
}
|
||||
showLoading();
|
||||
let carrier = row.carrier
|
||||
let description = row.description
|
||||
let printNumber = me.printer
|
||||
labelPrint(carrier,description, printNumber).then(respData => {
|
||||
hideLoading()
|
||||
this.$message.success(row.carrier + '打印成功')
|
||||
}).catch(error => {
|
||||
hideLoading()
|
||||
});
|
||||
|
||||
},
|
||||
// 更新
|
||||
handleUpdate: function (row, index, done, loading) {
|
||||
putObj(row).then(data => {
|
||||
this.$message.success('修改成功')
|
||||
done()
|
||||
this.getList(this.page)
|
||||
}).catch(() => {
|
||||
loading();
|
||||
});
|
||||
},
|
||||
// 保存
|
||||
handleSave: function (row, done, loading) {
|
||||
addObj(row).then(data => {
|
||||
this.$message.success('添加成功')
|
||||
done()
|
||||
this.getList(this.page)
|
||||
}).catch(() => {
|
||||
loading();
|
||||
});
|
||||
},
|
||||
// 每页条数改变事件
|
||||
sizeChange(pageSize) {
|
||||
this.page.pageSize = pageSize
|
||||
},
|
||||
// 当前页发生改变事件
|
||||
currentChange(current) {
|
||||
this.toggleSelection();
|
||||
this.page.currentPage = current
|
||||
},
|
||||
// 查询事件
|
||||
searchChange(form, done) {
|
||||
this.searchForm = form
|
||||
this.page.currentPage = 1
|
||||
this.getList(this.page, form)
|
||||
done()
|
||||
},
|
||||
// 刷新事件
|
||||
refreshChange() {
|
||||
this.getList(this.page)
|
||||
},
|
||||
// 导出excel
|
||||
exportExcel() {
|
||||
this.downBlobFile('/wms/carrier/export', this.searchForm, 'carrier.xlsx')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
107
src/views/wms/click-unShelve/index.vue
Normal file
107
src/views/wms/click-unShelve/index.vue
Normal file
@ -0,0 +1,107 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<input-select-dialog :modal-obj='storageLocationDialogObj' :modal-fetch-fun='storageLocationDialogFetchFun'
|
||||
:modal-show.sync="storageLocationDialogVisible" @inputDialogSelected="storageLocationSelect">
|
||||
</input-select-dialog>
|
||||
<basic-container>
|
||||
<el-form ref="formObj" :rules="rules" :model="formObj" label-width="auto">
|
||||
<el-row :gutter="10">
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="货架选择:" prop="storageLocation">
|
||||
<el-input placeHolder="货架选择" v-model="formObj.storageLocation">
|
||||
<i slot="suffix" class="el-input__icon el-icon-search"
|
||||
@click.stop="showstorageLocationDialog"></i></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-button type="warning" @click="doClear">清除</el-button>
|
||||
<el-button type="primary" @click="unShelve">一键下架</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import { unShelve } from "@/api/wms/click-unShelve"
|
||||
import { fetchList as fetchstorageLocationList } from "@/api/wms/storage-location"
|
||||
import { showLoading, hideLoading } from '@/const/loading';
|
||||
import {
|
||||
mapGetters
|
||||
} from 'vuex'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
formObj: {
|
||||
storageLocation: ""
|
||||
},
|
||||
rules: {
|
||||
storageLocation: [{ required: true, message: '请输入货架名称', trigger: 'blur' }]
|
||||
},
|
||||
storageLocationDialogVisible: false,
|
||||
storageLocationDialogFetchFun: fetchstorageLocationList,
|
||||
storageLocationDialogObj: {
|
||||
"condition": "storageLocation",
|
||||
tableColumn: [
|
||||
{ prop: "storageLocation", label: "货架", width: "200" },
|
||||
{ prop: "description", label: "描述" }
|
||||
]
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapGetters(["permissions"]),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
//货格弹出框
|
||||
showstorageLocationDialog() {
|
||||
let me = this;
|
||||
me.storageLocationDialogVisible = true;
|
||||
},
|
||||
storageLocationSelect(row) {
|
||||
let me = this;
|
||||
me.formObj.storageLocation = row.storageLocation;
|
||||
},
|
||||
|
||||
//一键下架
|
||||
unShelve() {
|
||||
let me = this
|
||||
this.$refs['formObj'].validate((valid) => {
|
||||
if (valid) {
|
||||
showLoading();
|
||||
unShelve(me.formObj.storageLocation).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code == 0) {
|
||||
me.$message.success("下架成功");
|
||||
}
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
} else {
|
||||
console.log('error submit!!');
|
||||
return false;
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
//清除
|
||||
doClear() {
|
||||
let me = this;
|
||||
me.formObj.storageLocation = "";
|
||||
this.$refs['formObj'].resetFields();
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
299
src/views/wms/complex-report/index.vue
Normal file
299
src/views/wms/complex-report/index.vue
Normal file
@ -0,0 +1,299 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
|
||||
<basic-container>
|
||||
<c-top-bar :offset="50">
|
||||
<el-button type="text" @click="doRetrieve()">检索</el-button>
|
||||
<el-divider direction="vertical"></el-divider>
|
||||
<el-button type="text" @click="doRest()">清除</el-button>
|
||||
<el-divider direction="vertical"></el-divider>
|
||||
<el-button type="text" @click="doExport()">导出</el-button>
|
||||
<el-divider style="margin-top: 0px;"></el-divider>
|
||||
</c-top-bar>
|
||||
<el-form ref="search" :model="search" label-width="100px">
|
||||
<el-row>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="单据号:">
|
||||
<el-input v-model.trim="search.documentNo"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="DN单号:">
|
||||
<el-input v-model.trim="search.erpNo"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="日期:" class="">
|
||||
<el-date-picker
|
||||
v-model="search.tempDateTime"
|
||||
style="width: 100%"
|
||||
type="datetimerange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
format="yyyy-MM-dd HH:mm:ss"
|
||||
@change="dateChange">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<el-table size="mini" :data="table" border
|
||||
style="width: 100%;margin-top: 15px;"
|
||||
height="600"
|
||||
@current-change="handleSelectionChange"
|
||||
highlight-current-row>
|
||||
<el-table-column label="单据号" prop="documentNo" align="center" width="120"></el-table-column>
|
||||
<el-table-column label="单据总量" prop="documentQty" align="center"></el-table-column>
|
||||
<el-table-column label="物料编码" prop="item" align="center"></el-table-column>
|
||||
<el-table-column label="物料描述" prop="description" width="160" align="center"
|
||||
:show-overflow-tooltip="true"></el-table-column>
|
||||
<el-table-column label="规格型号" prop="groes" align="center" :show-overflow-tooltip="true"></el-table-column>
|
||||
<el-table-column label="宽度" prop="width" align="center"></el-table-column>
|
||||
<el-table-column label="长度" prop="standardLength" align="center"></el-table-column>
|
||||
<el-table-column label="DN单号" prop="externalDocumentNo" align="center" width="110"></el-table-column>
|
||||
<el-table-column label="出货批次" prop="salesBatch" align="center" width="110"></el-table-column>
|
||||
<el-table-column align="center" label="托数">
|
||||
<template slot-scope="scope">
|
||||
<el-button @click="showPallet(scope.row)" type="text">{{scope.row.palletNum}}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="箱数">
|
||||
<template slot-scope="scope">
|
||||
<el-button @click="showBox(scope.row)" type="text">{{scope.row.boxNum}}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="卷数" prop="reelNum" align="center"></el-table-column>
|
||||
<el-table-column label="生产日期" prop="productionDate" align="center"
|
||||
:show-overflow-tooltip="true"></el-table-column>
|
||||
</el-table>
|
||||
<el-dialog :visible.sync="dialog.palletDialog.visible" @close="dialog.palletDialog.visible=false" center
|
||||
title="托明细" v-el-drag-dialog width="35%">
|
||||
<el-table size="mini" :data="dialog.palletDialog.table" border highlight-current-row style="user-select:text;">
|
||||
<el-table-column label="托号" prop="pallet" align="center"></el-table-column>
|
||||
<el-table-column label="托总面积" prop="palletQty" align="center"></el-table-column>
|
||||
</el-table>
|
||||
</el-dialog>
|
||||
<el-dialog :visible.sync="dialog.boxDialog.visible" @close="dialog.boxDialog.visible=false" center title="箱明细"
|
||||
v-el-drag-dialog width="35%">
|
||||
<el-table size="mini" :data="dialog.boxDialog.table" border highlight-current-row style="user-select:text;">
|
||||
<el-table-column label="箱号" prop="box" align="center"></el-table-column>
|
||||
<el-table-column label="箱总面积" prop="boxQty" align="center"></el-table-column>
|
||||
</el-table>
|
||||
</el-dialog>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {list} from '@/api/wms/complex-report';
|
||||
import {mapGetters} from 'vuex';
|
||||
import {getStore} from '@/util/store';
|
||||
import {hideLoading, showLoading} from '@/const/loading';
|
||||
import {trimHandle} from '@/util/handle';
|
||||
import {isBlank, trimString} from '@/util/string';
|
||||
|
||||
export default {
|
||||
name: 'reportCompleteView',
|
||||
|
||||
data() {
|
||||
return {
|
||||
containerMarginTopStyle: {
|
||||
marginTop: "30px"
|
||||
},
|
||||
changeStamp: 0,
|
||||
site: getStore({name: 'tenantId'}),
|
||||
search: {},
|
||||
dialog: {
|
||||
palletDialog: {
|
||||
table: [],
|
||||
visible: false,
|
||||
},
|
||||
boxDialog: {
|
||||
table: [],
|
||||
visible: false,
|
||||
},
|
||||
},
|
||||
table: [],
|
||||
tableSelection: null
|
||||
};
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapGetters(['permissions', 'userInfo']),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
|
||||
directives: { // 使用局部注册指令的方式
|
||||
resize: { // 指令的名称
|
||||
bind(el, binding) { // el为绑定的元素,binding为绑定给指令的对象
|
||||
let width = '', height = '';
|
||||
|
||||
function isReize() {
|
||||
const style = document.defaultView.getComputedStyle(el);
|
||||
if (width !== style.width || height !== style.height) {
|
||||
binding.value(); // 关键
|
||||
}
|
||||
width = style.width;
|
||||
height = style.height;
|
||||
}
|
||||
|
||||
el.__vueSetInterval__ = setInterval(isReize, 300); // 监听组件尺寸变化事件
|
||||
},
|
||||
unbind(el) {
|
||||
clearInterval(el.__vueSetInterval__);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
mounted() {
|
||||
this.urlParam = this.$route.query;
|
||||
this.loadData(this.urlParam);
|
||||
},
|
||||
|
||||
methods: {
|
||||
resize() {
|
||||
let affixRef = this.$refs["affixRef"];
|
||||
this.containerMarginTopStyle.marginTop = affixRef.clientHeight + 'px';
|
||||
},
|
||||
|
||||
loadData(urlParam) {
|
||||
let me = this;
|
||||
|
||||
},
|
||||
|
||||
doRest() {
|
||||
this.search = {};
|
||||
this.queryParam = {current: 1, size: 20};
|
||||
this.table = [];
|
||||
},
|
||||
|
||||
doRetrieve() {
|
||||
let me = this, oData = this.search;
|
||||
|
||||
let param = {
|
||||
documentNo: oData.documentNo,
|
||||
startS: oData.startDate,
|
||||
endS: oData.endDate,
|
||||
erpNo: oData.erpNo
|
||||
};
|
||||
|
||||
showLoading();
|
||||
list(param).then(respData => {
|
||||
hideLoading();
|
||||
if (respData.data.code != 0) {
|
||||
return this.$message.error(respData.data.msg);
|
||||
}
|
||||
this.table = respData.data.data;
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
},
|
||||
|
||||
isNotBank(str) {
|
||||
return !(isBlank(str));
|
||||
},
|
||||
|
||||
toFixed(num, digit) {
|
||||
return Math.round(parseFloat(num) * Math.pow(10, digit)) / Math.pow(10, digit);
|
||||
},
|
||||
|
||||
doExport() {
|
||||
let me = this, oData = this.search;
|
||||
let param = {
|
||||
documentNo: oData.documentNo,
|
||||
startS: oData.startDate,
|
||||
endS: oData.endDate,
|
||||
erpNo: oData.erpNo
|
||||
};
|
||||
let url = "/wms/complexReport/export";
|
||||
this.downBlobFile(url, param, "备货汇总表.xlsx");
|
||||
},
|
||||
|
||||
handleSizeChange(val) {
|
||||
this.queryParam.size = val;
|
||||
this.doRetrieve();
|
||||
},
|
||||
handleCurrentChange(val) {
|
||||
this.queryParam.current = val;
|
||||
this.doRetrieve();
|
||||
},
|
||||
handleSelectionChange(row) {
|
||||
this.tableSelection = row;
|
||||
},
|
||||
|
||||
tableColumnFormatter(row, column, cellValue, index) {
|
||||
switch (column.property) {
|
||||
}
|
||||
},
|
||||
|
||||
dateChange(array) {
|
||||
if (array && array.length == 2) {
|
||||
this.search.startDate = array[0];
|
||||
this.search.endDate = array[1];
|
||||
}
|
||||
},
|
||||
|
||||
showPallet(row) {
|
||||
this.dialog.palletDialog.table = row.palletDetail;
|
||||
this.dialog.palletDialog.visible = true;
|
||||
},
|
||||
showBox(row) {
|
||||
this.dialog.boxDialog.table = row.boxDetail;
|
||||
this.dialog.boxDialog.visible = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.requiredclass ::v-deep div.cell::before {
|
||||
content: "*";
|
||||
width: 10px;
|
||||
height: 20px;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
line-height: 26px;
|
||||
font-size: large;
|
||||
color: #f00;
|
||||
}
|
||||
|
||||
.inputRequired ::v-deep .el-form-item__label::before {
|
||||
content: "*";
|
||||
width: 10px;
|
||||
height: 20px;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
line-height: 26px;
|
||||
font-size: large;
|
||||
color: #f00;
|
||||
}
|
||||
|
||||
.line {
|
||||
float: right;
|
||||
width: 99%;
|
||||
height: 1px;
|
||||
margin-top: 1.4em;
|
||||
margin-bottom: 2em;
|
||||
background: #E6E6E6;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.relationContainer {
|
||||
display: flex;
|
||||
justify-content: center; /*主轴上居中*/
|
||||
align-items: center; /*侧轴上居中*/
|
||||
}
|
||||
|
||||
.el-dialog__body ::v-deep {
|
||||
user-select: all;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
819
src/views/wms/cost-center-requisition/index.vue
Normal file
819
src/views/wms/cost-center-requisition/index.vue
Normal file
@ -0,0 +1,819 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<input-select-dialog :modal-obj='productionRequisitionDialogObj'
|
||||
:modal-fetch-fun='productionRequisitionDialogFetchFun'
|
||||
:modal-show.sync="productionRequisitionDialogVisible"
|
||||
@inputDialogSelected="productionRequisitionSelect" ref="documentDialog">
|
||||
</input-select-dialog>
|
||||
<input-select-dialog :modal-obj='storageLocationDialogObj' :modal-fetch-fun='storageLocationDialogFetchFun'
|
||||
:modal-show.sync="storageLocationDialogVisible" @inputDialogSelected="storageLocationSelect">
|
||||
</input-select-dialog>
|
||||
<basic-container>
|
||||
<el-form ref="formObj" :model="formObj" label-width="auto">
|
||||
<el-row :gutter="10">
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="站点:" prop="site">
|
||||
<el-input placeHolder="站点" v-model="formObj.site" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item prop="documentNo">
|
||||
<el-input v-model="formObj.documentNo" placeholder="单据号" autofocus
|
||||
@keyup.enter.native="scanProductionRequisitionOrder">
|
||||
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
|
||||
<el-button slot="append" icon="el-icon-search"
|
||||
@click.stop="showProductionRequisitionDialog"></el-button>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-table :data="formObj.itemList" border>
|
||||
<el-table-column label="物料" prop="item">
|
||||
</el-table-column>
|
||||
<el-table-column label="物料描述" prop="itemDescription">
|
||||
</el-table-column>
|
||||
<el-table-column label="来源仓" prop="sourceWarehouse">
|
||||
</el-table-column>
|
||||
<el-table-column :label="targetWarehouseDesc" prop="targetWarehouse">
|
||||
</el-table-column>
|
||||
<el-table-column label="需求数量" prop="applicationsQuantity">
|
||||
</el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="primary" @click="showItemDialog(scope.$index, scope.row)">出库执行
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态">
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.state === 'CLOSE'" type="warning" disable-transitions>
|
||||
已执行
|
||||
</el-tag>
|
||||
<el-tag v-if="scope.row.state === 'SUBMIT'" disable-transitions>
|
||||
待执行
|
||||
</el-tag>
|
||||
<el-tag v-if="scope.row.state === 'SAVING'" type="success" disable-transitions>
|
||||
已保存
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<div style="margin-top: 10px;">
|
||||
<el-button type="primary" @click="openPostDateDialog">提交</el-button>
|
||||
<el-button type="primary" @click="oneClickExecute">一键出库</el-button>
|
||||
<el-button type="warning" @click="doClear">清除</el-button>
|
||||
</div>
|
||||
|
||||
<el-dialog :visible.sync="dialogItemType1FormVisible" center fullscreen @close="backUpCodeList">
|
||||
<div style="margin-top: 10px;">
|
||||
<el-form :model="itemForm" label-width="auto">
|
||||
<el-descriptions :column="1" border :labelStyle="lableWidth">
|
||||
<el-descriptions-item label="单据号">
|
||||
{{ itemForm.documentNo }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="物料">
|
||||
{{ itemForm.item }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="物料描述">
|
||||
{{ itemForm.itemDescription }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="来源仓">
|
||||
{{ itemForm.sourceWarehouse }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :label="targetWarehouseDesc">
|
||||
{{ itemForm.targetWarehouse }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="需求数量">
|
||||
{{ itemForm.applicationsQuantity }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="汇总数量">
|
||||
{{ itemForm.sumQuantity }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="单位">
|
||||
{{ itemForm.unitOfMeasure }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="批次">
|
||||
{{ itemForm.batch }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<div style="margin-top: 10px;">
|
||||
<el-form-item prop="code">
|
||||
<el-input v-model="itemForm.code" placeholder="扫描条码" autofocus
|
||||
@keyup.enter.native="scanCode" :disabled="isUse">
|
||||
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-table :data="itemForm.inventoryList" border>
|
||||
<el-table-column label="序号" prop="seq"></el-table-column>
|
||||
<el-table-column label="条码" prop="inventoryIdOrCarrier"></el-table-column>
|
||||
<el-table-column label="数量" prop="inventoryQty"></el-table-column>
|
||||
<el-table-column label="载具类型" prop="type" v-if="itemForm.itemType === 'FERT'"></el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="primary" @click="delRow(scope.$index, scope.row)"
|
||||
:disabled="scope.row.isScan === 'N'">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="saveItemType1" :disabled="isUse">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="dialogItemType2FormVisible" center fullscreen>
|
||||
<div style="margin-top: 10px;">
|
||||
<el-form :model="itemForm" label-width="auto">
|
||||
<el-descriptions :column="1" border :labelStyle="lableWidth">
|
||||
<el-descriptions-item label="单据号">
|
||||
{{ itemForm.documentNo }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="物料">
|
||||
{{ itemForm.item }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="物料描述">
|
||||
{{ itemForm.itemDescription }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="来源仓">
|
||||
{{ itemForm.sourceWarehouse }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :label="targetWarehouseDesc">
|
||||
{{ itemForm.targetWarehouse }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="需求数量">
|
||||
{{ itemForm.applicationsQuantity }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="出货数量">
|
||||
<el-input type="number" v-model="itemForm.sumQuantity" :disabled="isUse"></el-input>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="单位">
|
||||
{{ itemForm.unitOfMeasure }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="存储区域">
|
||||
<el-input v-model="itemForm.storageLocation" :disabled="isUse">
|
||||
<i slot="suffix" class="el-input__icon el-icon-search"
|
||||
@click.stop="showStorageLocationDialog"></i>
|
||||
</el-input>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="saveItemType2" :disabled="isUse">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="postDateDialogVisible" center width="20%">
|
||||
<el-form label-width="auto">
|
||||
<el-form-item label="选择日期:">
|
||||
<el-date-picker
|
||||
v-model="postDate"
|
||||
placeholder="选择日期"
|
||||
style="width: 100%"
|
||||
type="date"
|
||||
format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submit">确认</el-button>
|
||||
<el-button type="primary" @click="closeDialog">返回</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import {
|
||||
fetchList as fetchProductionRequisitionList,
|
||||
getDocumentDetail,
|
||||
getInventoryQty,
|
||||
getItemInventory,
|
||||
oneClickPassValidate
|
||||
} from "@/api/wms/cost-center-requisition";
|
||||
import {submitFreePostDate} from "@/api/wms/production-out-inventory";
|
||||
import {fetchList as fetchStorageLocationList, getStorageLocationPageBycode} from '@/api/wms/storage-location';
|
||||
import {getInventoryQtyNew} from "@/api/wms/production-out-inventory";
|
||||
import {isBlank} from "@/util/string";
|
||||
import {getStore} from '@/util/store';
|
||||
import {add} from '@/util/bigNumber';
|
||||
import {dateFormatCustom} from '@/util/date';
|
||||
import {showLoading, hideLoading} from '@/const/loading';
|
||||
import {listByActivityId} from "@/api/admin/activity-option";
|
||||
import {
|
||||
mapGetters
|
||||
} from 'vuex';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
lableWidth: {
|
||||
'width': '150px'
|
||||
},
|
||||
isUse: false,
|
||||
wms_document_return: false,
|
||||
formObj: {},
|
||||
documentNo: "",
|
||||
itemForm: {},
|
||||
submitList: [],
|
||||
codeList: [],
|
||||
verifyDefaultStorageBin: "",
|
||||
storageLocationList: "",
|
||||
postDate: null,
|
||||
postDateDialogVisible: false,
|
||||
dialogItemType1FormVisible: false,
|
||||
dialogItemType2FormVisible: false,
|
||||
productionRequisitionDialogFetchFun: fetchProductionRequisitionList,
|
||||
productionRequisitionDialogVisible: false,
|
||||
productionRequisitionDialogObj: {
|
||||
"condition": "searchText",
|
||||
tableColumn: [
|
||||
{prop: "documentNo", label: "单据"},
|
||||
{
|
||||
prop: "state", label: "状态", formatter: (row, column, cellValue, index) => {
|
||||
if (cellValue == "SUBMIT") {
|
||||
return "提交";
|
||||
}
|
||||
if (cellValue == "CLOSE") {
|
||||
return "关闭";
|
||||
}
|
||||
}
|
||||
},
|
||||
{prop: "sourceWarehouse", label: "来源仓"},
|
||||
]
|
||||
},
|
||||
storageLocationDialogVisible: false,
|
||||
storageLocationDialogFetchFun: fetchStorageLocationList,
|
||||
storageLocationDialogObj: {
|
||||
"condition": "storageLocation",
|
||||
tableColumn: [
|
||||
{prop: "storageLocation", label: "存储位置", width: "200"},
|
||||
{prop: "description", label: "描述"}
|
||||
]
|
||||
},
|
||||
initData: {
|
||||
documentNo: "",
|
||||
itemList: [],
|
||||
site: getStore({name: 'tenantId'})
|
||||
},
|
||||
documentType: "",
|
||||
targetWarehouseDesc:"",
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.wms_document_return = this.permissions["wms_document_return"];
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.itemForm = Object.assign({}, {"inventoryList": [], "sumQuantity": 0, "code": "", "storageLocation": ""});
|
||||
this.documentNo = "";
|
||||
this.codeList = [];
|
||||
},
|
||||
|
||||
beforeRouteEnter(to, from, next) {
|
||||
next(vm => {
|
||||
try {
|
||||
//获取作业规则
|
||||
let me = vm;
|
||||
let activityId = me.$route.query.ACTIVITY_ID;
|
||||
listByActivityId(activityId).then(response => {
|
||||
if (response.data.code != 0) {
|
||||
return me.$message.error(response.data.msg);
|
||||
}
|
||||
let data = response.data.data;
|
||||
|
||||
if (data && data.length > 0) {
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() === "IS_DOWN") {
|
||||
me.verifyDefaultStorageBin = isBlank(data[i].optionValue) ? true : data[i].optionValue === "Y";
|
||||
}
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() === "STORAGE_LOCATION") {
|
||||
me.storageLocationList = data[i].optionValue;
|
||||
}
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() === "FINISH_QTY_CONTROL") {
|
||||
me.finishQtyControl = data[i].optionValue;
|
||||
}
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() === "ALLOW_ONE_SUBMIT") {
|
||||
me.allowOneSubmit = data[i].optionValue === "Y";
|
||||
}
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() === "FREEZE_STATUS") {
|
||||
me.transferFreeze = data[i].optionValue === "Y";
|
||||
}
|
||||
if (data[i].optionName && data[i].optionName === "DOCUMENT_TYPE") {
|
||||
let value = data[i].optionValue;
|
||||
if (!isBlank(value) && (value === "COST_CENTER_RECEIVE" || value === "ENGINEER_RECEIVE")) {
|
||||
me.documentType = value;
|
||||
me.targetWarehouseDesc = me.documentType === 'COST_CENTER_RECEIVE' ? '成本中心' : '在建工程编号';
|
||||
}
|
||||
}
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() === "ALLOW_CHECK_WAREHOUSE") {
|
||||
me.oneClickWarhouses = data[i].optionValue.split(",");
|
||||
}
|
||||
}
|
||||
if (isBlank(me.documentType)) {
|
||||
me.documentType = "COST_CENTER_RECEIVE";
|
||||
me.targetWarehouseDesc = "成本中心";
|
||||
}
|
||||
}
|
||||
}).catch(e => {
|
||||
console.log(e);
|
||||
});
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
});
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(["permissions"]),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
||||
//存储区域弹出框
|
||||
showStorageLocationDialog() {
|
||||
let me = this;
|
||||
me.storageLocationDialogVisible = true;
|
||||
if (this.storageLocationList != "") {
|
||||
this.storageLocationDialogFetchFun = getStorageLocationPageBycode;
|
||||
this.storageLocationDialogObj.queryParam = {"str": this.storageLocationList};
|
||||
} else {
|
||||
this.storageLocationDialogObj.queryParam = {"erpStorageLocation": me.itemForm.sourceWarehouse};
|
||||
}
|
||||
|
||||
},
|
||||
storageLocationSelect(row) {
|
||||
let me = this;
|
||||
me.itemForm.storageLocation = row.storageLocation;
|
||||
console.log(me.itemForm);
|
||||
},
|
||||
|
||||
//单据号弹出框
|
||||
showProductionRequisitionDialog() {
|
||||
let me = this;
|
||||
me.productionRequisitionDialogVisible = true;
|
||||
me.$refs.documentDialog.clear();
|
||||
me.productionRequisitionDialogObj.queryParam = {"documentType": me.documentType};
|
||||
},
|
||||
productionRequisitionSelect(row) {
|
||||
let me = this;
|
||||
me.formObj.itemList = [];
|
||||
me.submitList = [];
|
||||
me.formObj.documentNo = row.documentNo;
|
||||
me.documentNo = me.formObj.documentNo;
|
||||
getDocumentDetail(me.formObj.documentNo).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
let obj = Object.assign({}, {
|
||||
"item": res.data.data[i].item,
|
||||
"applicationsQuantity": res.data.data[i].applicationsQuantity,
|
||||
"documentNo": me.documentNo,
|
||||
"isPack": res.data.data[i].isPack,
|
||||
"itemDescription": res.data.data[i].itemDescription,
|
||||
"seq": res.data.data[i].seq,
|
||||
"sourceWarehouse": res.data.data[i].sourceWarehouse,
|
||||
"targetWarehouse": res.data.data[i].targetWarehouse,
|
||||
"unitOfMeasure": res.data.data[i].unitOfMeasure,
|
||||
"itemGroup": res.data.data[i].itemGroup,
|
||||
"state": res.data.data[i].state,
|
||||
"handle": res.data.data[i].handle,
|
||||
"documentType": res.data.data[i].documentType,
|
||||
"storageLocation": res.data.data[i].storageLocation,
|
||||
"itemType": res.data.data[i].itemType,
|
||||
"batch": res.data.data[i].batch,
|
||||
});
|
||||
me.formObj.itemList.push(obj);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
//扫描单据号
|
||||
scanProductionRequisitionOrder() {
|
||||
let me = this;
|
||||
let code = me.formObj.documentNo;
|
||||
if (isBlank(code)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
return;
|
||||
}
|
||||
if (me.documentNo === code) {
|
||||
me.$message.error("不可重复扫描");
|
||||
return;
|
||||
}
|
||||
me.formObj.itemList = [];
|
||||
me.submitList = [];
|
||||
getDocumentDetail(me.formObj.documentNo).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
if (res.data.data[0].documentType != me.documentType) {
|
||||
if (me.documentType === 'COST_CENTER_RECEIVE') {
|
||||
return me.$message.error("单据类型不是成本中心领料");
|
||||
}
|
||||
if (me.documentType === 'ENGINEER_RECEIVE') {
|
||||
return me.$message.error("单据类型不是在建工程领料");
|
||||
}
|
||||
return me.$message.error("单据类型不支持");
|
||||
}
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
let obj = Object.assign({}, {
|
||||
"item": res.data.data[i].item,
|
||||
"applicationsQuantity": res.data.data[i].applicationsQuantity,
|
||||
"documentNo": me.formObj.documentNo,
|
||||
"isPack": res.data.data[i].isPack,
|
||||
"itemDescription": res.data.data[i].itemDescription,
|
||||
"seq": res.data.data[i].seq,
|
||||
"sourceWarehouse": res.data.data[i].sourceWarehouse,
|
||||
"targetWarehouse": res.data.data[i].targetWarehouse,
|
||||
"unitOfMeasure": res.data.data[i].unitOfMeasure,
|
||||
"itemGroup": res.data.data[i].itemGroup,
|
||||
"state": res.data.data[i].state,
|
||||
"handle": res.data.data[i].handle,
|
||||
"documentType": res.data.data[i].documentType,
|
||||
"storageLocation": res.data.data[i].storageLocation,
|
||||
"itemType": res.data.data[i].itemType,
|
||||
"batch": res.data.data[i].batch,
|
||||
});
|
||||
me.formObj.itemList.push(obj);
|
||||
me.documentNo = me.formObj.documentNo;
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
showItemDialog(index, row) {
|
||||
//判断是物料类型弹出不同的表单
|
||||
let me = this;
|
||||
|
||||
//判断行项目是否已经关闭,关闭则不可扫描条码和保存
|
||||
this.isUse = row.state === "CLOSE";
|
||||
|
||||
if (row.itemType === 'ROH' || row.itemType === 'VERP' || row.itemType === 'FERT') {
|
||||
//获取汇总数量
|
||||
let obj = Object.assign({
|
||||
"inventoryList": [],
|
||||
"code": "",
|
||||
"sumQuantity": 0,
|
||||
"storageLocation": ""
|
||||
}, row);
|
||||
if (me.submitList.length > 0) {
|
||||
let saveObj = me.submitList.find(o => o.seq === row.seq);
|
||||
if (saveObj) {
|
||||
obj = Object.assign({}, saveObj);
|
||||
obj.inventoryList = saveObj.inventoryList.slice();
|
||||
}
|
||||
}
|
||||
me.itemForm = obj;
|
||||
me.dialogItemType1FormVisible = true;
|
||||
me.loadSaveData(row);
|
||||
} else if (row.itemType === 'KMAT') {
|
||||
//获取汇总数量
|
||||
let obj = Object.assign({
|
||||
"inventoryList": [],
|
||||
"sumQuantity": row.applicationsQuantity,
|
||||
"storageLocation": ""
|
||||
}, row);
|
||||
if (me.submitList.length > 0) {
|
||||
let saveObj = me.submitList.find(o => o.seq === row.seq);
|
||||
if (saveObj) {
|
||||
obj = Object.assign({}, saveObj);
|
||||
obj.inventoryList = saveObj.inventoryList.slice();
|
||||
}
|
||||
}
|
||||
me.itemForm = obj;
|
||||
me.dialogItemType2FormVisible = true;
|
||||
me.loadMatSaveData(row);
|
||||
} else {
|
||||
me.$message.error("不支持的物料类型");
|
||||
}
|
||||
},
|
||||
|
||||
loadMatSaveData(row) {
|
||||
let me = this;
|
||||
getItemInventory(row).then(res => {
|
||||
let sumInventoryQty = 0;
|
||||
if (res.data.code === 0 && res.data.data.length > 0) {
|
||||
me.itemForm.inventoryList = [];
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
sumInventoryQty = add(sumInventoryQty, res.data.data[i].inventoryQty);
|
||||
}
|
||||
me.$set(me.itemForm, "sumQuantity", sumInventoryQty);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
loadSaveData(row) {
|
||||
let me = this;
|
||||
getItemInventory(row).then(res => {
|
||||
let sumInventoryQty = 0;
|
||||
if (res.data.code === 0 && res.data.data.length > 0) {
|
||||
let array = [], length = res.data.data.length;
|
||||
for (let data of res.data.data) {
|
||||
sumInventoryQty = add(sumInventoryQty, data.inventoryQty);
|
||||
array.push({
|
||||
"inventoryIdOrCarrier": data.inventoryIdOrCarrier,
|
||||
"inventoryQty": data.inventoryQty,
|
||||
"isScan": "N",
|
||||
"seq": length--
|
||||
});
|
||||
}
|
||||
me.$set(me.itemForm, "inventoryList", array);
|
||||
me.$set(me.itemForm, "sumQuantity", sumInventoryQty);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
getInventoryList() {
|
||||
let me = this;
|
||||
let obj = Object.assign({}, {
|
||||
"item": me.itemForm.item,
|
||||
"sourceWarehouse": me.itemForm.sourceWarehouse,
|
||||
"inventoryIdOrCarrier": me.itemForm.code,
|
||||
"batch": me.itemForm.batch,
|
||||
"verifyDefaultStorageBin": me.verifyDefaultStorageBin,
|
||||
"checkStatus": false,
|
||||
"documentType": me.itemForm.documentType,
|
||||
"transferFreeze": me.transferFreeze
|
||||
});
|
||||
showLoading();
|
||||
getInventoryQtyNew(obj).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code === 0) {
|
||||
//库存总数大于需求数量
|
||||
let data = res.data.data;
|
||||
let qty = 0, rowArray = [], codeArray = [];
|
||||
let length = me.itemForm.inventoryList.length;
|
||||
if (length > 0) {
|
||||
data = data.filter(o => {
|
||||
for (let code of me.codeList) {
|
||||
if (code === o.inventoryIdOrCarrier || code === o.carrier) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
if (data.length === 0) {
|
||||
me.$message.error("不可重复扫描");
|
||||
} else {
|
||||
for (let row of data) {
|
||||
let inventoryQty = row.inventoryQty;
|
||||
qty = add(qty, inventoryQty);
|
||||
rowArray.push({
|
||||
"inventoryIdOrCarrier": row.inventoryIdOrCarrier,
|
||||
"inventoryQty": row.inventoryQty,
|
||||
"group": row.group,
|
||||
"carrier": row.carrier,
|
||||
"isScan": "Y",
|
||||
"type": row.type,
|
||||
"seq": ++length,
|
||||
});
|
||||
codeArray.push(row.inventoryIdOrCarrier);
|
||||
}
|
||||
if (!isBlank(data[0].carrier) && data[0].inventoryIdOrCarrier !== data[0].carrier) {
|
||||
codeArray.push(data[0].carrier);
|
||||
}
|
||||
if ((add(qty, me.itemForm.sumQuantity) > me.itemForm.applicationsQuantity) && me.finishQtyControl !== "2") {
|
||||
me.$message.error("汇总数量大于需求数量");
|
||||
} else {
|
||||
rowArray.reverse();
|
||||
me.itemForm.sumQuantity = add(me.itemForm.sumQuantity, qty);
|
||||
me.itemForm.inventoryList = rowArray.concat(me.itemForm.inventoryList);
|
||||
me.codeList = me.codeList.concat(codeArray);
|
||||
me.itemForm.code = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}).catch(e => hideLoading());
|
||||
},
|
||||
|
||||
scanCode() {
|
||||
let me = this;
|
||||
if (isBlank(me.itemForm.code)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
return;
|
||||
}
|
||||
if (me.itemForm.inventoryList.length > 0) {
|
||||
if (me.codeList.includes(me.itemForm.code)) {
|
||||
me.$message.error("不可重复扫描");
|
||||
return;
|
||||
}
|
||||
this.getInventoryList();
|
||||
} else {
|
||||
this.getInventoryList();
|
||||
}
|
||||
},
|
||||
|
||||
submit() {
|
||||
let me = this;
|
||||
for (let i = 0; i < me.submitList.length; i++) {
|
||||
let list = me.submitList[i].inventoryList;
|
||||
for (let j = 0; j < list.length; j++) {
|
||||
if (list[j].isScan === "N") {
|
||||
me.submitList[i].inventoryList.splice(j, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
showLoading();
|
||||
submitFreePostDate({
|
||||
date: dateFormatCustom(me.postDate,"yyyy-MM-dd"),
|
||||
list: me.submitList,
|
||||
}).then(res => {
|
||||
hideLoading();
|
||||
me.$message.success("提交成功");
|
||||
me.doClear();
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
saveItemType1() {
|
||||
let me = this;
|
||||
if (me.itemForm.state === "CLOSE") {
|
||||
me.$message.error("此行项目已关闭");
|
||||
} else if (me.itemForm.inventoryList.length === 0) {
|
||||
me.$message.error("无信息可以保存,请点击返回按钮");
|
||||
} else if (me.itemForm.sumQuantity !== me.itemForm.applicationsQuantity && isBlank(me.finishQtyControl)) {
|
||||
me.$message.error("汇总数量不等于需求数量,请确认");
|
||||
} else {
|
||||
me.backUpList = [];
|
||||
let fun = () => {
|
||||
let obj = me.itemForm;
|
||||
obj.state = "SAVING";
|
||||
if (me.submitList.length > 0) {
|
||||
let index = me.submitList.findIndex(o => o.seq === obj.seq);
|
||||
if (index >= 0) {
|
||||
me.submitList.splice(index, 1, obj);
|
||||
} else {
|
||||
me.submitList.push(obj);
|
||||
}
|
||||
} else {
|
||||
me.submitList.push(obj);
|
||||
}
|
||||
me.$set(me.formObj.itemList.find(o => o.seq === obj.seq), "state", obj.state);
|
||||
me.dialogItemType1FormVisible = false;
|
||||
};
|
||||
fun();
|
||||
}
|
||||
},
|
||||
|
||||
saveItemType2() {
|
||||
let me = this;
|
||||
if (me.itemForm.state === "CLOSE") {
|
||||
me.$message.error("此行项目已关闭");
|
||||
} else if (isBlank(me.itemForm.storageLocation)) {
|
||||
me.$message.error("无信息可以保存,请点击返回按钮");
|
||||
} else {
|
||||
me.itemForm.inventoryList = [{
|
||||
"inventoryQty": me.itemForm.sumQuantity
|
||||
}];
|
||||
let obj = me.itemForm;
|
||||
obj.state = "SAVING";
|
||||
if (me.submitList.length > 0) {
|
||||
let index = me.submitList.findIndex(o => o.seq === obj.seq);
|
||||
if (index >= 0) {
|
||||
me.submitList.splice(index, 1, obj);
|
||||
} else {
|
||||
me.submitList.push(obj);
|
||||
}
|
||||
} else {
|
||||
me.submitList.push(obj);
|
||||
}
|
||||
me.$set(me.formObj.itemList.find(o => o.seq === obj.seq), "state", obj.state);
|
||||
me.dialogItemType2FormVisible = false;
|
||||
}
|
||||
},
|
||||
|
||||
//清除页面信息
|
||||
doClear() {
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.itemForm = Object.assign({}, {"inventoryList": [], "sumQuantity": 0, "code": ""});
|
||||
this.documentNo = "";
|
||||
this.codeList = [];
|
||||
this.submitList = [];
|
||||
this.postDateDialogVisible = false;
|
||||
},
|
||||
|
||||
delRow(index, row) {
|
||||
let me = this;
|
||||
//删除已扫描过条码中集合的信息
|
||||
let inventoryList = me.itemForm.inventoryList, delList = [], delQty = 0;
|
||||
let groupOrCarrier = isBlank(row.group) ? row.carrier : row.group;
|
||||
if (!isBlank(groupOrCarrier)) {
|
||||
let startIndex = -1, endIndex = -1;
|
||||
for (let i = 0; i < inventoryList.length; i++) {
|
||||
if (startIndex < 0 && (inventoryList[i].group === groupOrCarrier || inventoryList[i].carrier === groupOrCarrier)) {
|
||||
startIndex = i;
|
||||
}
|
||||
if (startIndex >= 0 && (inventoryList[i].group === groupOrCarrier || inventoryList[i].carrier === groupOrCarrier)) {
|
||||
endIndex = i + 1;
|
||||
}
|
||||
}
|
||||
for (let delRow of me.itemForm.inventoryList.splice(startIndex, endIndex === -1 ? 1 : endIndex)) {
|
||||
delQty = add(delQty, row.inventoryQty);
|
||||
delList.push(delRow.inventoryIdOrCarrier);
|
||||
}
|
||||
if (!isBlank(row.carrier) && row.inventoryIdOrCarrier !== row.carrier) {
|
||||
delList.push(groupOrCarrier);
|
||||
}
|
||||
} else {
|
||||
delQty = row.inventoryQty;
|
||||
delList = me.itemForm.inventoryList.splice(index, 1).map(o => o.inventoryIdOrCarrier);
|
||||
}
|
||||
for (let i = 0; i < me.itemForm.inventoryList.length; i++) {
|
||||
me.itemForm.inventoryList[i].seq = me.itemForm.inventoryList.length - i;
|
||||
}
|
||||
me.codeList = me.codeList.filter(o => !delList.includes(o));
|
||||
if (me.itemForm.state === "SAVING") {
|
||||
me.backUpList = me.backUpList.concat(delList.filter(o => !me.backUpList.includes(o)));
|
||||
}
|
||||
me.itemForm.sumQuantity -= delQty;
|
||||
},
|
||||
|
||||
backUpCodeList() {
|
||||
let me = this;
|
||||
if (me.backUpList.length > 0) {
|
||||
me.codeList = me.codeList.concat(me.backUpList.filter(o => !me.codeList.includes(o)));
|
||||
}
|
||||
},
|
||||
|
||||
openPostDateDialog() {
|
||||
let me = this;
|
||||
if (me.submitList.length > 0) {
|
||||
if (!me.allowOneSubmit) {
|
||||
for (let row of me.formObj.itemList) {
|
||||
if (row.state !== "SAVING") {
|
||||
if (row.state === "CLOSE") {
|
||||
me.$message.error("行项目" + row.seq + "已关闭,不可以提交,请修改作业规则");
|
||||
} else {
|
||||
me.$message.error("行项目" + row.seq + "无保存信息可以提交,请确认");
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
me.postDate = new Date();
|
||||
me.postDateDialogVisible = true;
|
||||
} else {
|
||||
me.$message.error("没有可提交的行");
|
||||
}
|
||||
},
|
||||
|
||||
oneClickExecute() {
|
||||
let me = this;
|
||||
if (me.oneClickWarhouses && me.oneClickWarhouses.length > 0) {
|
||||
let itemList = me.formObj.itemList;
|
||||
itemList = itemList.filter(o => o.state === 'SUBMIT');
|
||||
if (itemList.length > 0) {
|
||||
if (itemList.every(o => o.itemType === 'KMAT')) {
|
||||
if (itemList.every(o => me.oneClickWarhouses.includes(o.sourceWarehouse))) {
|
||||
if (Array.from(new Set(itemList.map(o => o.item))).length === itemList.length) {
|
||||
showLoading();
|
||||
oneClickPassValidate(itemList).then(res => {
|
||||
hideLoading();
|
||||
let data = res.data.data;
|
||||
for (let item of Object.keys(data)) {
|
||||
let row = itemList.find(o => o.item === item);
|
||||
let itemForm = Object.assign({}, row);
|
||||
itemForm.inventoryList = [{
|
||||
"inventoryQty": row.applicationsQuantity
|
||||
}];
|
||||
itemForm.sumQuantity = row.applicationsQuantity;
|
||||
me.submitList.push(itemForm);
|
||||
me.$set(row, "state", "SAVING");
|
||||
}
|
||||
me.openPostDateDialog();
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
} else {
|
||||
me.$message.error("待执行项物料重复,不允许一键出库");
|
||||
}
|
||||
} else {
|
||||
me.$message.error("待执行项含有不允许一键出库的来源仓");
|
||||
}
|
||||
} else {
|
||||
me.$message.error("待执行项含有非五金备件物料,不允许一键出库");
|
||||
}
|
||||
} else {
|
||||
me.$message.error("单据没有待执行的行项目");
|
||||
}
|
||||
} else {
|
||||
me.$message.error("未维护可一键出库的来源仓");
|
||||
}
|
||||
},
|
||||
closeDialog() {
|
||||
this.postDateDialogVisible = false;
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
</script>
|
||||
473
src/views/wms/cost-center-return/index.vue
Normal file
473
src/views/wms/cost-center-return/index.vue
Normal file
@ -0,0 +1,473 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<input-select-dialog :modal-obj='productionRequisitionDialogObj'
|
||||
:modal-fetch-fun='productionRequisitionDialogFetchFun' :modal-show.sync="productionRequisitionDialogVisible"
|
||||
@inputDialogSelected="productionRequisitionSelect" ref="documentDialog">
|
||||
</input-select-dialog>
|
||||
<input-select-dialog :modal-obj='storageLocationDialogObj' :modal-fetch-fun='storageLocationDialogFetchFun'
|
||||
:modal-show.sync="storageLocationDialogVisible" @inputDialogSelected="storageLocationSelect">
|
||||
</input-select-dialog>
|
||||
<basic-container>
|
||||
<el-form ref="formObj" :model="formObj" label-width="auto">
|
||||
<el-row :gutter="10">
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="站点:" prop="site">
|
||||
<el-input placeHolder="站点" v-model="formObj.site" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item prop="documentNo">
|
||||
<el-input v-model="formObj.documentNo" placeholder="单据号" autofocus
|
||||
@keyup.enter.native="scanProductionRequisitionOrder">
|
||||
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
|
||||
<el-button slot="append" icon="el-icon-search"
|
||||
@click.stop="showProductionRequisitionDialog"></el-button>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table :data="formObj.itemList" border>
|
||||
<el-table-column label="物料" prop="item">
|
||||
</el-table-column>
|
||||
<el-table-column label="物料描述" prop="itemDescription">
|
||||
</el-table-column>
|
||||
<el-table-column label="成本中心" prop="sourceWarehouse">
|
||||
</el-table-column>
|
||||
<el-table-column label="目标仓" prop="targetWarehouse">
|
||||
</el-table-column>
|
||||
<el-table-column label="需求数量" prop="applicationsQuantity">
|
||||
</el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="primary" @click="showItemDialog(scope.$index, scope.row)">入库执行
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态">
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.state === 'CLOSE'" type="warning" disable-transitions>
|
||||
已执行</el-tag>
|
||||
<el-tag v-if="scope.row.state === 'SUBMIT'" disable-transitions>
|
||||
待执行</el-tag>
|
||||
<el-tag v-if="scope.row.state === 'SAVING'" type="success" disable-transitions>
|
||||
已保存</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
|
||||
<div style="margin-top: 10px;">
|
||||
<el-button type="primary" @click="returnSubmit">提交</el-button>
|
||||
<el-button type="warning" @click="doClear">清除</el-button>
|
||||
<el-button type="danger" @click="reject">拒收</el-button>
|
||||
</div>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="dialogItemType2FormVisible" center fullscreen>
|
||||
<div style="margin-top: 10px;">
|
||||
<el-form :model="itemForm" label-width="auto">
|
||||
<el-descriptions :column="1" border :labelStyle="lableWidth">
|
||||
<el-descriptions-item label="单据号">
|
||||
{{ itemForm.documentNo }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="物料">
|
||||
{{ itemForm.item }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="物料描述">
|
||||
{{ itemForm.itemDescription }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="成本中心">
|
||||
{{ itemForm.sourceWarehouse }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="目标仓">
|
||||
{{ itemForm.targetWarehouse }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="需求数量">
|
||||
{{ itemForm.applicationsQuantity }}
|
||||
</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="实际数量">
|
||||
<el-input type="number" v-model="itemForm.sumQuantity" :disabled="isUse"></el-input>
|
||||
</el-descriptions-item> -->
|
||||
<el-descriptions-item label="单位">
|
||||
{{ itemForm.unitOfMeasure }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="存储区域">
|
||||
<el-input v-model="itemForm.storageLocation" :disabled="isUse">
|
||||
<i slot="suffix" class="el-input__icon el-icon-search"
|
||||
@click.stop="showStorageLocationDialog"></i>
|
||||
</el-input>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="saveItemType2" :disabled="isUse">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import {
|
||||
fetchList as fetchProductionRequisitionList,
|
||||
getDocumentDetail,
|
||||
returnSubmit,
|
||||
getInventoryOriginalQty,
|
||||
getItemInventory,
|
||||
rejectDocumentByNo
|
||||
} from "@/api/wms/cost-center-return";
|
||||
import {
|
||||
fetchList as fetchStorageLocationList,
|
||||
getStorageLocationPageBycode
|
||||
} from '@/api/wms/storage-location'
|
||||
import { isBlank } from "@/util/string";
|
||||
import { showLoading, hideLoading } from '@/const/loading'
|
||||
import { getStore } from '@/util/store';
|
||||
import { getByActivityOption } from "@/api/admin/activity-option";
|
||||
import {
|
||||
mapGetters
|
||||
} from 'vuex'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
lableWidth: {
|
||||
'width': '150px'
|
||||
},
|
||||
isUse: false,
|
||||
wms_document_return: false,
|
||||
formObj: {},
|
||||
documentNo: "",
|
||||
itemForm: {},
|
||||
submitList: [],
|
||||
codeList: [],
|
||||
storageLocationList: "",
|
||||
dialogItemType1FormVisible: false,
|
||||
dialogItemType2FormVisible: false,
|
||||
productionRequisitionDialogFetchFun: fetchProductionRequisitionList,
|
||||
productionRequisitionDialogVisible: false,
|
||||
productionRequisitionDialogObj: {
|
||||
"condition": "searchText",
|
||||
tableColumn: [
|
||||
{ prop: "documentNo", label: "单据", },
|
||||
{
|
||||
prop: "state", label: "状态", formatter: (row, column, cellValue, index) => {
|
||||
if (cellValue == "SUBMIT") {
|
||||
return "提交"
|
||||
}
|
||||
if (cellValue == "CLOSE") {
|
||||
return "关闭"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
storageLocationDialogVisible: false,
|
||||
storageLocationDialogFetchFun: fetchStorageLocationList,
|
||||
storageLocationDialogObj: {
|
||||
"condition": "storageLocation",
|
||||
tableColumn: [
|
||||
{ prop: "storageLocation", label: "存储位置", width: "200" },
|
||||
{ prop: "description", label: "描述" }
|
||||
]
|
||||
},
|
||||
initData: {
|
||||
documentNo: "",
|
||||
itemList: [],
|
||||
site: getStore({ name: 'tenantId' })
|
||||
},
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.wms_document_return = this.permissions["wms_document_return"];
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.itemForm = Object.assign({}, { "inventoryList": [], "sumQuantity": 0, "code": "", "storageLocation": "" });
|
||||
this.documentNo = "";
|
||||
this.codeList = [];
|
||||
|
||||
let activityId = this.$route.query.ACTIVITY_ID
|
||||
getByActivityOption(activityId, 'STORAGE_LOCATION').then(response => {
|
||||
if (response.data.code != 0) {
|
||||
return this.$message.error(response.data.msg)
|
||||
}
|
||||
this.storageLocationList = response.data.data.optionValue
|
||||
}).catch(e => {
|
||||
console.log(e)
|
||||
})
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(["permissions"]),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
||||
//存储区域弹出框
|
||||
showStorageLocationDialog() {
|
||||
let me = this;
|
||||
me.storageLocationDialogVisible = true;
|
||||
if (this.storageLocationList != "") {
|
||||
this.storageLocationDialogFetchFun = getStorageLocationPageBycode;
|
||||
this.storageLocationDialogObj.queryParam = { "str": this.storageLocationList };
|
||||
} else {
|
||||
this.storageLocationDialogObj.queryParam = { "erpStorageLocation": me.itemForm.targetWarehouse };
|
||||
}
|
||||
|
||||
},
|
||||
storageLocationSelect(row) {
|
||||
let me = this;
|
||||
me.itemForm.storageLocation = row.storageLocation;
|
||||
console.log(me.itemForm);
|
||||
},
|
||||
|
||||
|
||||
//单据号弹出框
|
||||
showProductionRequisitionDialog() {
|
||||
let me = this;
|
||||
me.productionRequisitionDialogVisible = true;
|
||||
me.$refs.documentDialog.clear();
|
||||
me.productionRequisitionDialogObj.queryParam = { "documentType": "COST_CENTER_RETURNED" }
|
||||
},
|
||||
productionRequisitionSelect(row) {
|
||||
let me = this;
|
||||
me.formObj.itemList = [];
|
||||
me.submitList = [];
|
||||
me.formObj.documentNo = row.documentNo;
|
||||
me.documentNo = me.formObj.documentNo;
|
||||
getDocumentDetail(me.formObj.documentNo).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
let obj = Object.assign({}, {
|
||||
"item": res.data.data[i].item,
|
||||
"applicationsQuantity": res.data.data[i].applicationsQuantity,
|
||||
"documentNo": me.documentNo,
|
||||
"isPack": res.data.data[i].isPack,
|
||||
"itemDescription": res.data.data[i].itemDescription,
|
||||
"seq": res.data.data[i].seq,
|
||||
"sourceWarehouse": res.data.data[i].sourceWarehouse,
|
||||
"targetWarehouse": res.data.data[i].targetWarehouse,
|
||||
"unitOfMeasure": res.data.data[i].unitOfMeasure,
|
||||
"itemGroup": res.data.data[i].itemGroup,
|
||||
"state": res.data.data[i].state,
|
||||
"handle": res.data.data[i].handle,
|
||||
"documentType": res.data.data[i].documentType,
|
||||
"storageLocation": res.data.data[i].storageLocation
|
||||
})
|
||||
me.formObj.itemList.push(obj);
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
showItemDialog(index, row) {
|
||||
//判断是物料类型弹出不同的表单
|
||||
let me = this;
|
||||
let sumInventoryQty = 0;
|
||||
//判断行项目是否已经关闭,关闭则不可扫描条码和保存
|
||||
if (row.state === "CLOSE") {
|
||||
this.isUse = true;
|
||||
} else {
|
||||
this.isUse = false;
|
||||
}
|
||||
//获取汇总数量
|
||||
/* getItemInventory(row).then(res => {
|
||||
if (res.data.code == 0 && res.data.data.length > 0) {
|
||||
me.itemForm.inventoryList = [];
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
sumInventoryQty += res.data.data[i].inventoryQty;
|
||||
}
|
||||
me.itemForm.sumQuantity = sumInventoryQty;
|
||||
}
|
||||
}) */
|
||||
if (me.submitList.length > 0) {
|
||||
console.log(me.submitList);
|
||||
for (let i = 0; i < me.submitList.length; i++) {
|
||||
let obj = Object.assign({}, me.submitList[i]);
|
||||
if (me.submitList[i].seq === row.seq) {
|
||||
me.itemForm = obj;
|
||||
me.dialogItemType2FormVisible = true;
|
||||
return;
|
||||
} else {
|
||||
me.dialogItemType2FormVisible = true;
|
||||
me.itemForm = Object.assign(obj, { "inventoryList": [], "storageLocation": "", "sumQuantity": row.applicationsQuantity }, row);
|
||||
|
||||
}
|
||||
}
|
||||
} else {
|
||||
me.dialogItemType2FormVisible = true;
|
||||
me.itemForm = Object.assign(me.itemForm, { "inventoryList": [], "storageLocation": "", "sumQuantity": row.applicationsQuantity }, row);
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
//扫描单据号
|
||||
scanProductionRequisitionOrder() {
|
||||
let me = this;
|
||||
let code = me.formObj.documentNo;
|
||||
if (isBlank(code)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
return;
|
||||
};
|
||||
if (me.documentNo === code) {
|
||||
me.$message.error("不可重复扫描");
|
||||
return;
|
||||
};
|
||||
me.formObj.itemList = [];
|
||||
me.submitList = [];
|
||||
getDocumentDetail(me.formObj.documentNo).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
if (res.data.data[0].documentType != "COST_CENTER_RETURNED") {
|
||||
return me.$message.error("单据类型不是成本中心退料");
|
||||
}
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
let obj = Object.assign({}, {
|
||||
"item": res.data.data[i].item,
|
||||
"applicationsQuantity": res.data.data[i].applicationsQuantity,
|
||||
"documentNo": me.formObj.documentNo,
|
||||
"isPack": res.data.data[i].isPack,
|
||||
"itemDescription": res.data.data[i].itemDescription,
|
||||
"seq": res.data.data[i].seq,
|
||||
"sourceWarehouse": res.data.data[i].sourceWarehouse,
|
||||
"targetWarehouse": res.data.data[i].targetWarehouse,
|
||||
"unitOfMeasure": res.data.data[i].unitOfMeasure,
|
||||
"itemGroup": res.data.data[i].itemGroup,
|
||||
"state": res.data.data[i].state,
|
||||
"handle": res.data.data[i].handle,
|
||||
"documentType": res.data.data[i].documentType,
|
||||
"storageLocation": res.data.data[i].storageLocation
|
||||
})
|
||||
me.formObj.itemList.push(obj);
|
||||
me.documentNo = me.formObj.documentNo;
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
getinventoryList() {
|
||||
let me = this;
|
||||
console.log(me.itemForm);
|
||||
let obj = Object.assign({}, {
|
||||
"item": me.itemForm.item,
|
||||
"sourceWarehouse": me.itemForm.sourceWarehouse,
|
||||
"inventoryIdOrCarrier": me.itemForm.code
|
||||
})
|
||||
getInventoryOriginalQty(obj).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
//库存总数大于需求数量
|
||||
if (res.data.data.inventoryQty + me.itemForm.sumQuantity > me.itemForm.applicationsQuantity) {
|
||||
me.$message.error("汇总数量大于需求数量");
|
||||
return;
|
||||
}
|
||||
let obj = Object.assign({},
|
||||
{
|
||||
"inventoryIdOrCarrier": res.data.data.inventoryIdOrCarrier,
|
||||
"inventoryQty": res.data.data.inventoryQty,
|
||||
"isScan": "Y"
|
||||
});
|
||||
me.itemForm.sumQuantity = res.data.data.inventoryQty;
|
||||
me.itemForm.inventoryList.push(obj);
|
||||
|
||||
}
|
||||
me.codeList.push({ "code": me.itemForm.code });
|
||||
});
|
||||
},
|
||||
|
||||
returnSubmit() {
|
||||
let me = this;
|
||||
if (me.submitList.length > 0) {
|
||||
|
||||
if (me.submitList.length != me.formObj.itemList.length) {
|
||||
me.$message.error("未执行所有行项目");
|
||||
return;
|
||||
}
|
||||
|
||||
for (let i = 0; i < me.submitList.length; i++) {
|
||||
let list = me.submitList[i].inventoryList;
|
||||
for (let j = 0; j < list.length; j++) {
|
||||
if (list[j].isScan === "N") {
|
||||
me.submitList[i].inventoryList.splice(j, 1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
showLoading();
|
||||
returnSubmit(me.submitList).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code == 0) {
|
||||
me.$message.success("提交成功");
|
||||
me.doClear();
|
||||
}
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
} else {
|
||||
me.$message.error("没有可提交的行");
|
||||
return;
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
saveItemType2() {
|
||||
let me = this;
|
||||
me.itemForm.inventoryList = [];
|
||||
me.dialogItemType2FormVisible = false;
|
||||
let obj1 = Object.assign({}, {
|
||||
"inventoryQty": me.itemForm.applicationsQuantity
|
||||
});
|
||||
me.itemForm.inventoryList.push(obj1);
|
||||
let obj = Object.assign({}, me.itemForm);
|
||||
if (me.submitList.length > 0) {
|
||||
for (let i = 0; i < me.submitList.length; i++) {
|
||||
if (me.submitList[i].seq === obj.seq) {
|
||||
me.submitList[i] = obj;
|
||||
return;
|
||||
}
|
||||
}
|
||||
me.submitList.push(obj);
|
||||
} else {
|
||||
me.submitList.push(obj);
|
||||
}
|
||||
|
||||
//保存之后改变行项目状态为已保存
|
||||
//item和seq都相等时候,找到行项目列表改变其状态
|
||||
for (let i = 0; i < me.formObj.itemList.length; i++) {
|
||||
if (me.itemForm.seq == me.formObj.itemList[i].seq && me.itemForm.item == me.formObj.itemList[i].item) {
|
||||
me.formObj.itemList[i].state = "SAVING"
|
||||
}
|
||||
}
|
||||
|
||||
console.log(me.submitList);
|
||||
},
|
||||
|
||||
//拒收
|
||||
reject() {
|
||||
let me = this;
|
||||
if (isBlank(me.formObj.documentNo)) {
|
||||
me.$message.error("请选择单据");
|
||||
return;
|
||||
}
|
||||
console.log(me.formObj.documentNo);
|
||||
rejectDocumentByNo(me.formObj.documentNo).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
me.$message.success("拒收成功");
|
||||
me.doClear();
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
//清除页面信息
|
||||
doClear() {
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.itemForm = Object.assign({}, { "inventoryList": [], "sumQuantity": 0, "code": "" });
|
||||
this.documentNo = "";
|
||||
this.codeList = [];
|
||||
this.submitList = [];
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
</script>
|
||||
137
src/views/wms/customer/index.vue
Normal file
137
src/views/wms/customer/index.vue
Normal file
@ -0,0 +1,137 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<basic-container>
|
||||
<avue-crud ref="crud"
|
||||
:page.sync="page"
|
||||
:data="tableData"
|
||||
:permission="permissionList"
|
||||
:table-loading="tableLoading"
|
||||
:option="tableOption"
|
||||
@on-load="getList"
|
||||
@search-change="searchChange"
|
||||
@refresh-change="refreshChange"
|
||||
@size-change="sizeChange"
|
||||
@current-change="currentChange"
|
||||
@row-update="handleUpdate"
|
||||
@row-save="handleSave"
|
||||
@row-del="handleDel">
|
||||
<template slot="menuLeft">
|
||||
<el-button
|
||||
v-if="permissions.wms_customer_export"
|
||||
class="filter-item"
|
||||
plain
|
||||
type="primary"
|
||||
size="small"
|
||||
icon="el-icon-download"
|
||||
@click="exportExcel">导出
|
||||
</el-button>
|
||||
</template>
|
||||
</avue-crud>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {fetchList, getObj, addObj, putObj, delObj} from '@/api/wms/customer'
|
||||
import {tableOption} from '@/const/crud/wms/customer'
|
||||
import {mapGetters} from 'vuex'
|
||||
|
||||
export default {
|
||||
name: 'customer',
|
||||
data() {
|
||||
return {
|
||||
searchForm: {},
|
||||
tableData: [],
|
||||
page: {
|
||||
total: 0, // 总页数
|
||||
currentPage: 1, // 当前页数
|
||||
pageSize: 20 // 每页显示多少条
|
||||
},
|
||||
tableLoading: false,
|
||||
tableOption: tableOption
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['permissions']),
|
||||
permissionList() {
|
||||
return {
|
||||
addBtn: this.vaildData(this.permissions.wms_customer_add, false),
|
||||
delBtn: this.vaildData(this.permissions.wms_customer_del, false),
|
||||
editBtn: this.vaildData(this.permissions.wms_customer_edit, false)
|
||||
};
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 列表查询
|
||||
getList(page, params) {
|
||||
this.tableLoading = true
|
||||
fetchList(Object.assign({
|
||||
current: page.currentPage,
|
||||
size: page.pageSize
|
||||
}, params, this.searchForm )).then(response => {
|
||||
this.tableData = response.data.data.records
|
||||
this.page.total = response.data.data.total
|
||||
this.tableLoading = false
|
||||
}).catch(() => {
|
||||
this.tableLoading=false
|
||||
})
|
||||
},
|
||||
// 删除
|
||||
handleDel: function (row, index) {
|
||||
this.$confirm('是否确认删除ID为' + row.handle, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(function () {
|
||||
return delObj(row.handle)
|
||||
}).then(data => {
|
||||
this.$message.success('删除成功')
|
||||
this.getList(this.page)
|
||||
})
|
||||
},
|
||||
// 更新
|
||||
handleUpdate: function (row, index, done,loading) {
|
||||
putObj(row).then(data => {
|
||||
this.$message.success('修改成功')
|
||||
done()
|
||||
this.getList(this.page)
|
||||
}).catch(() => {
|
||||
loading();
|
||||
});
|
||||
},
|
||||
// 保存
|
||||
handleSave: function (row, done,loading) {
|
||||
addObj(row).then(data => {
|
||||
this.$message.success('添加成功')
|
||||
done()
|
||||
this.getList(this.page)
|
||||
}).catch(() => {
|
||||
loading();
|
||||
});
|
||||
},
|
||||
// 每页条数改变事件
|
||||
sizeChange(pageSize){
|
||||
this.page.pageSize = pageSize
|
||||
},
|
||||
// 当前页发生改变事件
|
||||
currentChange(current){
|
||||
this.page.currentPage = current
|
||||
},
|
||||
// 查询事件
|
||||
searchChange(form, done) {
|
||||
this.searchForm = form
|
||||
this.page.currentPage = 1
|
||||
this.getList(this.page, form)
|
||||
done()
|
||||
},
|
||||
// 刷新事件
|
||||
refreshChange() {
|
||||
this.getList(this.page)
|
||||
},
|
||||
// 导出excel
|
||||
exportExcel() {
|
||||
this.downBlobFile('/wms/customer/export',this.searchForm, 'customer.xlsx')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
363
src/views/wms/data-field/index.vue
Normal file
363
src/views/wms/data-field/index.vue
Normal file
@ -0,0 +1,363 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<input-select-dialog :modal-obj="dataFieldDialogObj" :modal-fetch-fun='dataFieldDialogFetchFun'
|
||||
:modal-show.sync="dataFieldDialogVisible" @inputDialogSelected="dataFieldSelected"></input-select-dialog>
|
||||
<basic-container style="margin-top: -20px">
|
||||
<c-top-bar :offset="50">
|
||||
<el-button type="text" icon="el-icon-search" @click="doRetrive('formObj')">检索</el-button>
|
||||
<el-divider direction="vertical"></el-divider>
|
||||
<el-button type="text" icon="el-icon-circle-check" @click="doSave('formObj')">保存</el-button>
|
||||
<el-divider direction="vertical"></el-divider>
|
||||
<el-button type="text" icon="el-icon-circle-close" @click="restForm('formObj')">清除</el-button>
|
||||
<el-divider direction="vertical"></el-divider>
|
||||
<el-button type="text" icon="el-icon-delete" @click="doRemove('formObj')">删除</el-button>
|
||||
<el-divider style="margin-top: 0px;"></el-divider>
|
||||
</c-top-bar>
|
||||
<el-form ref="formObj" :rules="rules" :model="formObj" label-width="200px">
|
||||
<el-row :gutter="10">
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="数据字段:" prop="dataField">
|
||||
<el-input placeHolder="数据字段" v-model="formObj.dataField">
|
||||
<i slot="suffix" class="el-input__icon el-icon-search"
|
||||
@click.stop="showDataFieldDialog()"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="类型:" prop="validationType" placeholder="请选择类型">
|
||||
<el-select v-model="formObj.validationType" @change="validationTypeChange">
|
||||
<el-option label="文本" value="TEXT"></el-option>
|
||||
<el-option label="文本区域" value="TEXT_AREA"></el-option>
|
||||
<el-option label="日期" value="DATE"></el-option>
|
||||
<el-option label="数字" value="NUMBER"></el-option>
|
||||
<el-option label="复选框" value="CHECK"></el-option>
|
||||
<el-option label="列表" value="LIST"></el-option>
|
||||
</el-select>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="描述:" prop="description">
|
||||
<el-input placeHolder="描述" v-model="formObj.description"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="字段标签:" prop="dataTag">
|
||||
<el-input placeHolder="字段标签" v-model="formObj.dataTag"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="QM选定集:" prop="isErp">
|
||||
<el-switch v-model="formObj.isErp" active-value="Y" inactive-value="N" active-text="是"
|
||||
inactive-text="否"></el-switch>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="浏览图标:" prop="isBrowse">
|
||||
<el-switch v-model="formObj.isBrowse" active-value="Y" inactive-value="N" active-text="是"
|
||||
inactive-text="否" :disabled="isBan"></el-switch>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<!-- 掩码组和预保存作业暂时注释 -->
|
||||
<!-- <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="掩码组:" prop="maskGroupBo">
|
||||
<el-input placeHolder="掩码组" v-model="formObj.maskGroupBo"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="预保存作业:" prop="validationActivityBo">
|
||||
<el-input placeHolder="预保存作业" v-model="formObj.validationActivityBo"></el-input>
|
||||
</el-form-item>
|
||||
</el-col> -->
|
||||
</el-row>
|
||||
<el-tabs v-model="tabActiveName" v-if="formObj.validationType == 'LIST'">
|
||||
<el-tab-pane label="列表明细" name="dataFieldListTab">
|
||||
<el-col :span="24">
|
||||
<el-button type="primary" @click="addDataFieldListDetail()">新增</el-button>
|
||||
</el-col>
|
||||
<el-table size="mini" height="250" :data="formObj.dataFieldListList" border style="width: 100%"
|
||||
highlight-current-row>
|
||||
<el-table-column prop="seq" label="顺序">
|
||||
<template slot-scope="scope">
|
||||
<el-input v-model="scope.row.seq"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="dataValue" label="字段值">
|
||||
<template slot-scope="scope">
|
||||
<el-input v-model="scope.row.dataValue"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="dataTag" label="标签值">
|
||||
<template slot-scope="scope">
|
||||
<el-input v-model="scope.row.dataTag"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="isDefault" label="缺省标签">
|
||||
<template slot-scope="scope">
|
||||
<el-switch v-model="scope.row.isDefault" active-value="Y" inactive-value="N"
|
||||
active-text="是" inactive-text="否"></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="操作" width="60">
|
||||
<template slot-scope="scope">
|
||||
<span class="el-tag el-tag--danger el-tag--mini" style="cursor: pointer;"
|
||||
@click="removeDataFieldListDetail(scope.row,scope.$index)">删除</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-form>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
fetchList,
|
||||
getByCode,
|
||||
delByCode,
|
||||
addObj,
|
||||
putObj,
|
||||
delObj
|
||||
} from '@/api/wms/data-field'
|
||||
import { showLoading, hideLoading } from '@/const/loading'
|
||||
import { stringFormat, isBlank } from "@/util/string"
|
||||
import {
|
||||
mapGetters
|
||||
} from 'vuex'
|
||||
import IconSelect from '../../../components/element-ui/icon-select.vue'
|
||||
|
||||
export default {
|
||||
name: "data-field_maintain",
|
||||
data() {
|
||||
return {
|
||||
tabActiveName: "dataFieldListTab",
|
||||
formObj: {},
|
||||
retrivedDataField: "",
|
||||
mes_data_field_save: false,
|
||||
mes_data_field_del: false,
|
||||
mes_data_field_retrive: false,
|
||||
dataFieldDialogVisible: false,
|
||||
isBan: false,
|
||||
initData: {
|
||||
handle: "",
|
||||
site: "",
|
||||
dataField: "",
|
||||
validationType: "",
|
||||
description: "",
|
||||
dataTag: "",
|
||||
fieldType: "",
|
||||
isBrowse: "",
|
||||
isErp: "",
|
||||
maskGroupBo: "",
|
||||
validationActivityBo: "",
|
||||
creator: "",
|
||||
updater: "",
|
||||
dateCreate: "",
|
||||
dateUpdate: "",
|
||||
dataFieldListList: [],
|
||||
},
|
||||
rules: {
|
||||
dataField: [
|
||||
{ required: true, message: "请输入数据字段名称" }
|
||||
],
|
||||
validationType: [
|
||||
{ required: true, message: "请输入数据字段验证类型" }
|
||||
],
|
||||
dataTag: [
|
||||
{ required: true, message: "请输入字段标签" }
|
||||
]
|
||||
|
||||
},
|
||||
dataFieldDialogFetchFun: fetchList,
|
||||
dataFieldDialogObj: {
|
||||
condition: "searchText",
|
||||
tableColumn: [
|
||||
{ prop: "dataField", label: "数据字段" },
|
||||
{ prop: "description", label: "描述" }
|
||||
]
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.mes_data_field_save = this.permissions["mes_data_field_save"];
|
||||
this.mes_data_field_del = this.permissions["mes_data_field_del"];
|
||||
this.mes_data_field_retrive = this.permissions["mes_data_field_retrive"];
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(["permissions"]),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
//显示操作弹窗框
|
||||
showDataFieldDialog() {
|
||||
this.dataFieldDialogVisible = true;
|
||||
},
|
||||
dataFieldSelected(row) {
|
||||
let me = this;
|
||||
me.formObj.dataField = row.dataField;
|
||||
},
|
||||
doRetrive(formName) {
|
||||
let me = this;
|
||||
me.$refs[formName].validateField(["dataField"], (errorMessage) => {
|
||||
if (errorMessage) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
showLoading();
|
||||
let handle = me.formObj.dataField;
|
||||
getByCode(handle).then(response => {
|
||||
hideLoading();
|
||||
if (!response.data.data || response.data.data.length === 0) {
|
||||
me.doClear({ handle: handle });
|
||||
let errorMsg = stringFormat("{0} 不存在", handle);
|
||||
return me.$message.error(errorMsg);
|
||||
}
|
||||
me.formObj = Object.assign({}, response.data.data);
|
||||
me.retrivedDataField = me.formObj.dataField;
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
doSave(formName) {
|
||||
let me = this;
|
||||
me.$refs[formName].validate((valid) => {
|
||||
if (valid) {
|
||||
if (me.isUpdate()) {
|
||||
me.doUpdate();
|
||||
}
|
||||
else {
|
||||
me.doAdd();
|
||||
}
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
},
|
||||
doAdd() {
|
||||
let me = this;
|
||||
showLoading();
|
||||
addObj(me.formObj).then(respData => {
|
||||
hideLoading();
|
||||
me.doRetrive("formObj");
|
||||
this.$message.success("新增成功");
|
||||
}).catch(error => {
|
||||
hideLoading();
|
||||
});
|
||||
},
|
||||
doUpdate() {
|
||||
let me = this;
|
||||
showLoading();
|
||||
if (me.formObj.validationType != 'LIST') {
|
||||
me.formObj.dataFieldListList = [];
|
||||
}
|
||||
putObj(me.formObj).then(respData => {
|
||||
hideLoading();
|
||||
me.doRetrive("formObj");
|
||||
this.$message.success("更新成功");
|
||||
}).catch(error => {
|
||||
hideLoading();
|
||||
});
|
||||
},
|
||||
doRemove(formName) {
|
||||
let me = this;
|
||||
let code = me.formObj.dataField;
|
||||
me.$refs[formName].validateField(["dataField"], (errorMessage) => {
|
||||
if (errorMessage) {
|
||||
return;
|
||||
}
|
||||
else {
|
||||
if (!me.isUpdate()) {
|
||||
return this.$message.warning("必须先检索记录,然后才能将其删除");
|
||||
}
|
||||
showLoading();
|
||||
me.$confirm("是否确认删除" + code, "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(function () {
|
||||
hideLoading();
|
||||
return delByCode(code);
|
||||
}).then(data => {
|
||||
hideLoading();
|
||||
this.$message.success("删除成功");
|
||||
me.doClear();
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
doClear(retainData) {
|
||||
let me = this;
|
||||
me.formObj = retainData ? Object.assign({}, this.initData, retainData) : Object.assign({}, this.initData);
|
||||
me.retrivedDataField = "";
|
||||
me.formObj.dataFieldListList = [];
|
||||
},
|
||||
isUpdate() {
|
||||
let me = this;
|
||||
if (me.formObj.dataField === me.retrivedDataField) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
addDataFieldListDetail() {
|
||||
let me = this;
|
||||
if (!me.formObj.dataFieldListList) {
|
||||
me.formObj.dataFieldListList = [];
|
||||
}
|
||||
let maxSeq = 0;
|
||||
for (let i = 0; i < me.formObj.dataFieldListList.length; i++) {
|
||||
let dataFieldListList = me.formObj.dataFieldListList[i]
|
||||
if (dataFieldListList.seq > maxSeq) {
|
||||
maxSeq = dataFieldListList.seq
|
||||
}
|
||||
}
|
||||
let obj = { seq: Math.floor(maxSeq / 10) * 10 + 10, dataValue: "", dataTag: "", isDefault: "N" };
|
||||
me.formObj.dataFieldListList.push(obj);
|
||||
},
|
||||
removeDataFieldListDetail(row, index) {
|
||||
let me = this
|
||||
me.formObj.dataFieldListList.splice(index, 1);
|
||||
let maxSeq = row.seq
|
||||
for (let i = index; i < me.formObj.dataFieldListList.length; i++) {
|
||||
me.formObj.dataFieldListList[i].seq = maxSeq
|
||||
maxSeq += 10
|
||||
}
|
||||
},
|
||||
validationTypeChange(e) {
|
||||
if (e == 'LIST') {
|
||||
this.isBan = true;
|
||||
} else
|
||||
this.isBan = false;
|
||||
},
|
||||
restForm(formName) {
|
||||
this.$refs[formName].resetFields();
|
||||
this.doClear();
|
||||
}
|
||||
},
|
||||
components: { IconSelect }
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.el-transfer-panel {
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
.el-divider--horizontal {
|
||||
margin-top: 5px !important;
|
||||
}
|
||||
</style>
|
||||
290
src/views/wms/dn-order/index.vue
Normal file
290
src/views/wms/dn-order/index.vue
Normal file
@ -0,0 +1,290 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<basic-container>
|
||||
<avue-crud ref="crud"
|
||||
:page.sync="page"
|
||||
:data="tableData"
|
||||
:permission="permissionList"
|
||||
:table-loading="tableLoading"
|
||||
:option="tableOption"
|
||||
@on-load="getList"
|
||||
@search-change="searchChange"
|
||||
@refresh-change="refreshChange"
|
||||
@size-change="sizeChange"
|
||||
@current-change="currentChange"
|
||||
@search-reset="searchReset">
|
||||
<template slot-scope="scope" slot="handle">
|
||||
<el-link type="primary" @click="showDetail(scope.row)" style="color: #66b1ff !important;">展开</el-link>
|
||||
</template>
|
||||
<template slot-scope="scope" slot="deliveryDateSearch">
|
||||
<el-date-picker type="date" value-format="yyyy-MM-dd" format="yyyy-MM-dd" v-model="searchForm.deliveryDate" style="width: 100%" placeholder="请选择 下单日期"></el-date-picker>
|
||||
</template>
|
||||
<template slot-scope="scope" slot="deliveryPlanDateSearch">
|
||||
<el-date-picker type="date" value-format="yyyy-MM-dd" format="yyyy-MM-dd" v-model="searchForm.deliveryPlanDate" style="width: 100%" placeholder="请选择 计划发货日期"></el-date-picker>
|
||||
</template>
|
||||
</avue-crud>
|
||||
<el-dialog :visible.sync="dialogVisible" center fullscreen>
|
||||
<el-form ref="formObj" :model="formObj" label-width="auto">
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="DN单号:" prop="dnOrder">
|
||||
{{formObj.dnNumber}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="销售出库单号:" prop="dnNumber">
|
||||
{{formObj.innerOrder}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="到货单状态:" prop="innerState">
|
||||
{{formatterConst.innerState[formObj.innerState]}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="客户编码:" prop="customerCode">
|
||||
{{formObj.customerCode}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="POD状态:" prop="podStatus">
|
||||
{{formatterConst.podStatus[formObj.podStatus]}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-table :data="detailList" border @selection-change="selectionChange" :key="changeStamp">
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="55">
|
||||
</el-table-column>
|
||||
<el-table-column label="序号" align="center" width="55">
|
||||
<template slot-scope="scope">
|
||||
{{scope.$index+1}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-for="item in columnList" :label="item.label" :prop="item.prop" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-input v-if="item.editable" v-model="scope.row[item.prop]"></el-input>
|
||||
<span v-else>{{ scope.row[item.prop] }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="saveDetail" v-if="onEdit">保存</el-button>
|
||||
<el-button type="primary" @click="editSwitch" v-else :disabled="detailList.length === 0">修改</el-button>
|
||||
<el-button @click="dialogVisible = false">关闭</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {fetchList, selectDetailByID, updateDetailBatchById} from '@/api/wms/dn-order';
|
||||
import {getByCode} from '@/api/wms/data-field';
|
||||
import {isBlank} from "@/util/string";
|
||||
import {showLoading, hideLoading} from '@/const/loading';
|
||||
import {tableOption, formatterConst} from '@/const/crud/wms/dn-order';
|
||||
import {mapGetters} from 'vuex';
|
||||
|
||||
export default {
|
||||
name: 'dn-order',
|
||||
data() {
|
||||
return {
|
||||
searchForm: {},
|
||||
tableData: [],
|
||||
tableSelection: [],
|
||||
detailList: [],
|
||||
changeStamp: 0,
|
||||
page: {
|
||||
total: 0, // 总页数
|
||||
currentPage: 1, // 当前页数
|
||||
pageSize: 20 // 每页显示多少条
|
||||
},
|
||||
tableLoading: false,
|
||||
tableOption: tableOption,
|
||||
formatterConst: formatterConst,
|
||||
dialogVisible: false,
|
||||
onEdit: false,
|
||||
formObj: {},
|
||||
columnList: [
|
||||
{
|
||||
label: "物料编号",
|
||||
prop: "material",
|
||||
name: "MATERIAL"
|
||||
},
|
||||
{
|
||||
label: "物料名称",
|
||||
prop: "materialDescription",
|
||||
name: "MATERIAL_DESCRIPTION"
|
||||
},
|
||||
{
|
||||
label: "客户物料编码",
|
||||
prop: "customerItem",
|
||||
name: "CUSTOMER_ITEM"
|
||||
},
|
||||
{
|
||||
label: "客户物料描述",
|
||||
prop: "customerItemDesc",
|
||||
name: "CUSTOMER_ITEM_DESC"
|
||||
},
|
||||
{
|
||||
label: "客户PO单号",
|
||||
prop: "customerPoNumber",
|
||||
name: "CUSTOMER_PO_NUMBER"
|
||||
},
|
||||
{
|
||||
label: "数量",
|
||||
prop: "qty",
|
||||
name: "QTY"
|
||||
},
|
||||
{
|
||||
label: "单位",
|
||||
prop: "unit",
|
||||
name: "UNIT"
|
||||
},
|
||||
{
|
||||
label: "批次",
|
||||
prop: "charg",
|
||||
name: "CHARG"
|
||||
},
|
||||
{
|
||||
label: "到货单批次",
|
||||
prop: "deliveryBatch",
|
||||
name: "DELIVERY_BATCH"
|
||||
},
|
||||
{
|
||||
label: "出货仓库",
|
||||
prop: "storagLocation",
|
||||
name: "STORAG_LOCATION"
|
||||
},
|
||||
{
|
||||
label: "备注",
|
||||
prop: "deliveryLineRemarks",
|
||||
name: "DELIVERY_LINE_REMARKS"
|
||||
}
|
||||
]
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['permissions']),
|
||||
permissionList() {
|
||||
return {
|
||||
addBtn: false,
|
||||
delBtn: false,
|
||||
editBtn: false
|
||||
};
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 列表查询
|
||||
getList(page, params) {
|
||||
this.tableLoading = true;
|
||||
fetchList(Object.assign({
|
||||
current: page.currentPage,
|
||||
size: page.pageSize
|
||||
}, params, this.searchForm)).then(response => {
|
||||
this.tableData = response.data.data.records;
|
||||
this.page.total = response.data.data.total;
|
||||
this.tableLoading = false;
|
||||
}).catch(() => {
|
||||
this.tableLoading = false;
|
||||
});
|
||||
},
|
||||
// 每页条数改变事件
|
||||
sizeChange(pageSize) {
|
||||
this.page.pageSize = pageSize;
|
||||
},
|
||||
// 当前页发生改变事件
|
||||
currentChange(current) {
|
||||
this.page.currentPage = current;
|
||||
},
|
||||
// 查询事件
|
||||
searchChange(form, done) {
|
||||
this.page.currentPage = 1;
|
||||
this.getList(this.page, form);
|
||||
done();
|
||||
},
|
||||
// 刷新事件
|
||||
refreshChange() {
|
||||
this.getList(this.page);
|
||||
},
|
||||
showDetail(row) {
|
||||
let me = this;
|
||||
me.reSetDialog();
|
||||
showLoading();
|
||||
selectDetailByID({
|
||||
dnOrderBo: row.handle
|
||||
}).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code !== 0) {
|
||||
return me.$message.error(res.data.msg);
|
||||
}
|
||||
me.formObj = row;
|
||||
me.detailList = res.data.data;
|
||||
me.dialogVisible = true;
|
||||
}).catch(e => hideLoading());
|
||||
},
|
||||
editSwitch() {
|
||||
let me = this;
|
||||
me.onEdit = true;
|
||||
showLoading();
|
||||
getByCode("ALLOW_UPDATE_FIELD").then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code !== 0) {
|
||||
return me.$message.error(res.data.msg);
|
||||
}
|
||||
let data = res.data.data.dataFieldListList;
|
||||
if (data.length > 0) {
|
||||
let editColumns = data.map(o => o.dataValue);
|
||||
for (let column of me.columnList) {
|
||||
if (editColumns.includes(column.name)) {
|
||||
column.editable = true;
|
||||
}
|
||||
}
|
||||
me.reLoadTable();
|
||||
}
|
||||
}).catch(e => hideLoading());
|
||||
|
||||
},
|
||||
saveDetail() {
|
||||
let me = this;
|
||||
let tableSelection = me.tableSelection;
|
||||
if (tableSelection.length === 0) {
|
||||
return me.$message.error("请选择要保存的数据");
|
||||
} else {
|
||||
showLoading();
|
||||
updateDetailBatchById(me.detailList).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code !== 0) {
|
||||
return me.$message.error(res.data.msg);
|
||||
}
|
||||
me.reSetDialog();
|
||||
me.dialogVisible = false;
|
||||
return me.$message.success("保存成功");
|
||||
}).catch(e => hideLoading());
|
||||
}
|
||||
},
|
||||
|
||||
reSetDialog() {
|
||||
let me = this;
|
||||
me.onEdit = false;
|
||||
me.columnList.forEach(o => o.editable = false);
|
||||
},
|
||||
|
||||
reLoadTable() {
|
||||
this.changeStamp = Date.now();
|
||||
},
|
||||
|
||||
selectionChange(rows) {
|
||||
this.tableSelection = rows;
|
||||
},
|
||||
|
||||
searchReset() {
|
||||
this.searchForm={}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
144
src/views/wms/document-cancel/index.vue
Normal file
144
src/views/wms/document-cancel/index.vue
Normal file
@ -0,0 +1,144 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<basic-container>
|
||||
<avue-crud ref="crud"
|
||||
:page.sync="page"
|
||||
:data="tableData"
|
||||
:permission="permissionList"
|
||||
:table-loading="tableLoading"
|
||||
:option="tableOption"
|
||||
@search-change="searchChange"
|
||||
@refresh-change="refreshChange"
|
||||
@size-change="sizeChange"
|
||||
@current-change="currentChange"
|
||||
@search-reset="searchReset">
|
||||
<template slot="searchMenu" slot-scope="{row,size}">
|
||||
<el-button type="primary" @click="doCancel">冲销</el-button>
|
||||
</template>
|
||||
</avue-crud>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {pageForCancel, cancelCloseDocument, saleReturnCancel} from '@/api/wms/document-cancel';
|
||||
import {isBlank} from "@/util/string";
|
||||
import {hideLoading, showLoading} from '@/const/loading';
|
||||
import {formatterConst, tableOption} from '@/const/crud/wms/document-cancel';
|
||||
import {mapGetters} from 'vuex';
|
||||
|
||||
export default {
|
||||
name: 'document-cancel',
|
||||
data() {
|
||||
return {
|
||||
searchForm: {},
|
||||
tableData: [],
|
||||
tableSelection: [],
|
||||
changeStamp: 0,
|
||||
page: {
|
||||
total: 0, // 总页数
|
||||
currentPage: 1, // 当前页数
|
||||
pageSize: 20 // 每页显示多少条
|
||||
},
|
||||
tableLoading: false,
|
||||
tableOption: tableOption,
|
||||
formatterConst: formatterConst,
|
||||
dialogVisible: false,
|
||||
onEdit: false,
|
||||
formObj: {},
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['permissions']),
|
||||
permissionList() {
|
||||
return {
|
||||
addBtn: false,
|
||||
delBtn: false,
|
||||
editBtn: false
|
||||
};
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 列表查询
|
||||
getList(page, params) {
|
||||
let me = this;
|
||||
if (!params || isBlank(params.documentNo)) {
|
||||
return me.$message.error("内部单号不能为空");
|
||||
} else {
|
||||
me.tableLoading = true;
|
||||
pageForCancel(Object.assign({
|
||||
current: page.currentPage,
|
||||
size: page.pageSize
|
||||
}, params, me.searchForm)).then(response => {
|
||||
me.tableData = response.data.data.records;
|
||||
me.page.total = response.data.data.total;
|
||||
me.tableLoading = false;
|
||||
}).catch(() => {
|
||||
me.tableLoading = false;
|
||||
});
|
||||
}
|
||||
},
|
||||
// 每页条数改变事件
|
||||
sizeChange(pageSize) {
|
||||
this.page.pageSize = pageSize;
|
||||
},
|
||||
// 当前页发生改变事件
|
||||
currentChange(current) {
|
||||
this.page.currentPage = current;
|
||||
},
|
||||
// 查询事件
|
||||
searchChange(form, done) {
|
||||
this.searchForm = form;
|
||||
this.page.currentPage = 1;
|
||||
this.getList(this.page, form);
|
||||
done();
|
||||
},
|
||||
searchReset(form, done) {
|
||||
this.tableData = [];
|
||||
done();
|
||||
},
|
||||
// 刷新事件
|
||||
refreshChange() {
|
||||
this.getList(this.page,this.searchForm);
|
||||
},
|
||||
selectionChange(rows) {
|
||||
this.tableSelection = rows;
|
||||
},
|
||||
doCancel() {
|
||||
let me = this;
|
||||
if (me.tableData.length === 0) {
|
||||
return me.$message.error("没有待冲销数据");
|
||||
} else if (me.tableData[0].state === "CANCEL") {
|
||||
return me.$message.error("单据已冲销");
|
||||
} else {
|
||||
let documentNo = me.tableData[0].documentNo;
|
||||
let documentType = me.tableData[0].documentType;
|
||||
let fun;
|
||||
switch (documentType) {
|
||||
case "PURCHASE_RETURN":
|
||||
case "COST_CENTER_RECEIVE":
|
||||
case "SCRAP_OUT":
|
||||
case "OUTSOURCING":
|
||||
case "ENGINEER_RECEIVE":
|
||||
fun = cancelCloseDocument;
|
||||
break;
|
||||
case "SALES_RETURN":
|
||||
fun = saleReturnCancel;
|
||||
break;
|
||||
default:
|
||||
return me.$message.error("不支持的单据类型");
|
||||
}
|
||||
me.tableLoading = true;
|
||||
fun(documentNo).then(resp => {
|
||||
me.tableLoading = false;
|
||||
me.$message.success("冲销成功");
|
||||
me.refreshChange();
|
||||
}).catch(() => {
|
||||
me.tableLoading = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
136
src/views/wms/document-close/index.vue
Normal file
136
src/views/wms/document-close/index.vue
Normal file
@ -0,0 +1,136 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<input-select-dialog :modal-obj='productionRequisitionDialogObj'
|
||||
:modal-fetch-fun='productionRequisitionDialogFetchFun'
|
||||
:modal-show.sync="productionRequisitionDialogVisible"
|
||||
@inputDialogSelected="productionRequisitionSelect" ref="documentDialog">
|
||||
</input-select-dialog>
|
||||
<basic-container>
|
||||
<el-form ref="formObj" :model="formObj" label-width="auto">
|
||||
<el-row :gutter="10">
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="站点:" prop="site">
|
||||
<el-input placeHolder="站点" v-model="formObj.site" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item prop="documentNo">
|
||||
<el-input v-model="formObj.documentNo" placeholder="单据号" autofocus
|
||||
@keyup.enter.native="scanProductionRequisitionOrder">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<div style="margin-top: 10px;">
|
||||
<el-button type="primary" @click="submit">关闭</el-button>
|
||||
<el-button type="warning" @click="doClear">清除</el-button>
|
||||
</div>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import {
|
||||
getDocumentDetail,
|
||||
fetchList as fetchProductionRequisitionList,
|
||||
submit
|
||||
} from "@/api/wms/document-close";
|
||||
import {isBlank} from "@/util/string";
|
||||
import {getStore} from '@/util/store';
|
||||
import {showLoading, hideLoading} from '@/const/loading'
|
||||
import {
|
||||
mapGetters
|
||||
} from 'vuex'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
lableWidth: {
|
||||
'width': '150px'
|
||||
},
|
||||
formObj: {},
|
||||
productionRequisitionDialogFetchFun: fetchProductionRequisitionList,
|
||||
productionRequisitionDialogVisible: false,
|
||||
productionRequisitionDialogObj: {
|
||||
"condition": "searchText",
|
||||
tableColumn: [
|
||||
{prop: "documentNo", label: "单据"},
|
||||
{
|
||||
prop: "state", label: "状态", formatter: (row, column, cellValue, index) => {
|
||||
if (cellValue == "SUBMIT") {
|
||||
return "提交"
|
||||
}
|
||||
if (cellValue == "CLOSE") {
|
||||
return "关闭"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
initData: {
|
||||
documentNo: "",
|
||||
site: getStore({name: 'tenantId'})
|
||||
},
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.documentNo = "";
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
||||
//单据号弹出框
|
||||
showProductionRequisitionDialog() {
|
||||
let me = this;
|
||||
me.productionRequisitionDialogVisible = true;
|
||||
me.$refs.documentDialog.clear();
|
||||
me.productionRequisitionDialogObj.queryParam = {"documentType": "STORES_REQUISITION", "state": "SUBMIT"}
|
||||
},
|
||||
productionRequisitionSelect(row) {
|
||||
let me = this;
|
||||
me.formObj.documentNo = row.documentNo;
|
||||
},
|
||||
//扫描单据号
|
||||
scanProductionRequisitionOrder() {
|
||||
let me = this;
|
||||
let code = me.formObj.documentNo;
|
||||
if (isBlank(code)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
return;
|
||||
}
|
||||
;
|
||||
getDocumentDetail(me.formObj.documentNo).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
|
||||
submit() {
|
||||
let me = this;
|
||||
showLoading();
|
||||
submit(me.formObj.documentNo).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code == 0) {
|
||||
me.$message.success("关闭成功");
|
||||
me.doClear();
|
||||
}
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
//清除页面信息
|
||||
doClear() {
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
}
|
||||
|
||||
},
|
||||
}
|
||||
|
||||
</script>
|
||||
1340
src/views/wms/document-maintain/index.vue
Normal file
1340
src/views/wms/document-maintain/index.vue
Normal file
File diff suppressed because it is too large
Load Diff
340
src/views/wms/false-warehoursing-matCust/index.vue
Normal file
340
src/views/wms/false-warehoursing-matCust/index.vue
Normal file
@ -0,0 +1,340 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<basic-container>
|
||||
<el-form ref="formObj" :model="formObj" label-width="auto">
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户编码:" prop="customer">
|
||||
<el-input v-model="formObj.customer"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="物料:" prop="material">
|
||||
<el-input v-model="formObj.material"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="类型:" prop="type">
|
||||
<el-select v-model="formObj.type" style="width: 100%">
|
||||
<el-option value="MAT_SERVICE" label="备件维修仓"/>
|
||||
<el-option value="CUSTOMER" label="客户仓"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="doRetrieve">查询</el-button>
|
||||
<el-button type="primary" @click="doExport">导出</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-table :data="list.records" border @current-change="handleSelectionChange" highlight-current-row>
|
||||
<el-table-column label="序号" align="center" width="50">
|
||||
<template slot-scope="scope">
|
||||
{{scope.$index+1}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="类型" prop="type" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{formatterConst[scope.column.property][scope.row[scope.column.property]]}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="客户编码" prop="customer" align="center"></el-table-column>
|
||||
<el-table-column label="物料" prop="material" align="center"></el-table-column>
|
||||
<el-table-column label="数量" prop="qty" align="center"></el-table-column>
|
||||
<el-table-column label="单位" prop="unit" align="center"></el-table-column>
|
||||
</el-table>
|
||||
<el-pagination
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="list.total"
|
||||
:page-size="list.size"
|
||||
@size-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange">
|
||||
</el-pagination>
|
||||
<div style="margin-top: 10px;">
|
||||
<el-button type="primary" @click="openDialog('IN')">转入</el-button>
|
||||
<el-button type="primary" @click="openDialog('OUT')">转出</el-button>
|
||||
<el-button type="primary" @click="openDialog('TRANSFER')">转移</el-button>
|
||||
<el-button type="warning" @click="doClear">清除</el-button>
|
||||
</div>
|
||||
|
||||
<el-dialog :visible.sync="transferDialogVisible" center width="20%">
|
||||
<el-form :model="dialogFormObj" label-width="auto">
|
||||
<el-form-item label="转移数量:" class="inputRequired">
|
||||
<el-input v-model="dialogFormObj.qty" type="number"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="客户编码:" v-if="selection && selection.type === 'MAT_SERVICE'">
|
||||
<el-input v-model="dialogFormObj.customer"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注:">
|
||||
<el-input v-model="dialogFormObj.remarks"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="transfer">确认</el-button>
|
||||
<el-button type="primary" @click="transferDialogVisible = false">返回</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="transInDialogVisible" center width="20%">
|
||||
<el-form :model="dialogFormObj" label-width="auto">
|
||||
<el-form-item label="类型:" class="inputRequired">
|
||||
<el-select v-model="dialogFormObj.type" style="width: 100%">
|
||||
<el-option value="MAT_SERVICE" label="备件维修仓"/>
|
||||
<el-option value="CUSTOMER" label="客户仓"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="客户编码:" class="inputRequired">
|
||||
<el-input v-model="dialogFormObj.customer" :disabled="dialogFormObj.type === 'MAT_SERVICE'"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="物料:" class="inputRequired">
|
||||
<el-input v-model="dialogFormObj.material" type="number"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="转入数量:" class="inputRequired">
|
||||
<el-input v-model="dialogFormObj.qty" type="number"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注:">
|
||||
<el-input v-model="dialogFormObj.remarks"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="transIn">确认</el-button>
|
||||
<el-button type="primary" @click="transInDialogVisible = false">返回</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="transOutDialogVisible" center width="20%">
|
||||
<el-form :model="dialogFormObj" label-width="auto">
|
||||
<el-form-item label="转出数量:" class="inputRequired">
|
||||
<el-input v-model="dialogFormObj.qty" type="number"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注:">
|
||||
<el-input v-model="dialogFormObj.remarks"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="transOut">确认</el-button>
|
||||
<el-button type="primary" @click="transOutDialogVisible = false">返回</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {fetchList2, transfer, transIn, transOut} from '@/api/wms/false-warehoursing';
|
||||
import {isBlank} from "@/util/string";
|
||||
import {getStore} from '@/util/store';
|
||||
import {hideLoading, showLoading} from '@/const/loading';
|
||||
import {listByActivityId} from "@/api/admin/activity-option";
|
||||
import {mapGetters} from 'vuex';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
lableWidth: {
|
||||
'width': '150px'
|
||||
},
|
||||
site: getStore({name: 'tenantId'}),
|
||||
formObj: {},
|
||||
initData: {},
|
||||
list: {
|
||||
records: [],
|
||||
total: 0,
|
||||
size: 0
|
||||
},
|
||||
selection: null,
|
||||
dialogFormObj: {},
|
||||
transferDialogVisible: false,
|
||||
transOutDialogVisible: false,
|
||||
transInDialogVisible: false,
|
||||
queryParam: {current: 1, size: 20},
|
||||
formatterConst: {
|
||||
type: {
|
||||
"MAT_SERVICE": "备件维修仓",
|
||||
"CUSTOMER": "客户仓",
|
||||
},
|
||||
}
|
||||
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.doClear();
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapGetters(["permissions"]),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
||||
doRetrieve() {
|
||||
let me = this;
|
||||
let param = Object.assign({
|
||||
type: me.formObj.type,
|
||||
material: me.formObj.material,
|
||||
customer: me.formObj.customer,
|
||||
}, me.queryParam);
|
||||
|
||||
showLoading();
|
||||
fetchList2(param).then(respData => {
|
||||
hideLoading();
|
||||
this.list = respData.data.data;
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
},
|
||||
|
||||
//清除页面信息
|
||||
doClear() {
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.list = {};
|
||||
this.queryParam = {current: 1, size: 20};
|
||||
this.selection = null;
|
||||
},
|
||||
|
||||
openDialog(actionType) {
|
||||
let me = this;
|
||||
me.dialogFormObj = {};
|
||||
switch (actionType) {
|
||||
case "OUT":
|
||||
if (!me.selection) {
|
||||
me.$message.error('请选择要转出的库存');
|
||||
} else {
|
||||
me.transOutDialogVisible = true;
|
||||
}
|
||||
break;
|
||||
case "IN":
|
||||
me.transInDialogVisible = true;
|
||||
break;
|
||||
case "TRANSFER":
|
||||
if (!me.selection) {
|
||||
me.$message.error('请选择要转移的库存');
|
||||
} else {
|
||||
me.transferDialogVisible = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
cancel() {
|
||||
this.transferDialogVisible = false;
|
||||
},
|
||||
|
||||
transfer() {
|
||||
let me = this;
|
||||
if (!me.dialogFormObj.qty || me.dialogFormObj.qty <= 0) {
|
||||
return me.$message.error("转移数量必须大于0");
|
||||
} else {
|
||||
let selection = me.selection;
|
||||
let param = {
|
||||
type: selection.type,
|
||||
qty: me.dialogFormObj.qty,
|
||||
customer: isBlank(me.dialogFormObj.customer) ? selection.customer : me.dialogFormObj.customer,
|
||||
material: selection.material,
|
||||
remarks: me.dialogFormObj.remarks,
|
||||
};
|
||||
showLoading();
|
||||
transfer(param).then(res => {
|
||||
hideLoading();
|
||||
me.transferDialogVisible = false;
|
||||
me.doRetrieve();
|
||||
return me.$message.success("转移成功");
|
||||
}).catch(e => hideLoading());
|
||||
}
|
||||
},
|
||||
|
||||
handleSelectionChange(row) {
|
||||
this.selection = row;
|
||||
},
|
||||
|
||||
handleSizeChange(val) {
|
||||
this.queryParam.size = val;
|
||||
this.doRetrieve();
|
||||
},
|
||||
handleCurrentChange(val) {
|
||||
this.queryParam.current = val;
|
||||
this.doRetrieve();
|
||||
},
|
||||
|
||||
transIn() {
|
||||
let me = this;
|
||||
let param = {
|
||||
type: me.dialogFormObj.type,
|
||||
customer: me.dialogFormObj.customer,
|
||||
material: me.dialogFormObj.material,
|
||||
qty: me.dialogFormObj.qty,
|
||||
remarks: me.dialogFormObj.remarks,
|
||||
};
|
||||
if (isBlank(param.type)) {
|
||||
return me.$message.error("请选择类型");
|
||||
} else if (isBlank(param.customer) && param.type !== 'MAT_SERVICE') {
|
||||
return me.$message.error("客户不能为空");
|
||||
} else if (isBlank(param.material)) {
|
||||
return me.$message.error("物料不能为空");
|
||||
} else if (isBlank(param.qty)) {
|
||||
return me.$message.error("数量不能为空");
|
||||
} else {
|
||||
showLoading();
|
||||
transIn(param).then(res => {
|
||||
hideLoading();
|
||||
me.transInDialogVisible = false;
|
||||
me.doRetrieve();
|
||||
return me.$message.success("转入成功");
|
||||
}).catch(e => hideLoading());
|
||||
}
|
||||
},
|
||||
|
||||
transOut() {
|
||||
let me = this;
|
||||
let selection = me.selection;
|
||||
let param = {
|
||||
type: selection.type,
|
||||
customer: selection.customer,
|
||||
material: selection.material,
|
||||
qty: me.dialogFormObj.qty,
|
||||
remarks: me.dialogFormObj.remarks,
|
||||
};
|
||||
if (isBlank(param.qty)) {
|
||||
return me.$message.error("数量不能为空");
|
||||
} else {
|
||||
showLoading();
|
||||
transOut(param).then(res => {
|
||||
hideLoading();
|
||||
me.transOutDialogVisible = false;
|
||||
me.doRetrieve();
|
||||
return me.$message.success("转出成功");
|
||||
}).catch(e => hideLoading());
|
||||
}
|
||||
},
|
||||
|
||||
doExport() {
|
||||
let me = this;
|
||||
let param = {
|
||||
type: me.formObj.type,
|
||||
material: me.formObj.material,
|
||||
customer: me.formObj.customer,
|
||||
};
|
||||
this.downBlobFile("/wms/false-warehoursing/export2", param, "备件维修仓导出.xlsx");
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.inputRequired ::v-deep .el-form-item__label::before {
|
||||
content: "*";
|
||||
width: 10px;
|
||||
height: 20px;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
line-height: 26px;
|
||||
font-size: large;
|
||||
color: #f00;
|
||||
}
|
||||
</style>
|
||||
249
src/views/wms/false-warehoursing/index.vue
Normal file
249
src/views/wms/false-warehoursing/index.vue
Normal file
@ -0,0 +1,249 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<basic-container>
|
||||
<el-form ref="formObj" :model="formObj" label-width="auto">
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户编码:" prop="customer">
|
||||
<el-input v-model="formObj.customer"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="外仓:" prop="externalWarehouse">
|
||||
<el-input v-model="formObj.externalWarehouse"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="物料:" prop="material">
|
||||
<el-input v-model="formObj.material"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="类型:" prop="type">
|
||||
<el-select v-model="formObj.type" style="width: 100%">
|
||||
<el-option value="EXTERNAL_WAREHOUSE" label="外仓"/>
|
||||
<el-option value="CONSIGN_FOR_SALE" label="寄售"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="doRetrieve">查询</el-button>
|
||||
<el-button type="primary" @click="doExport">导出</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-table :data="list.records" border @current-change="handleSelectionChange" highlight-current-row>
|
||||
<el-table-column label="序号" align="center" width="50">
|
||||
<template slot-scope="scope">
|
||||
{{scope.$index+1}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="类型" prop="type" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{formatterConst[scope.column.property][scope.row[scope.column.property]]}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="客户编码" prop="customer" align="center"></el-table-column>
|
||||
<el-table-column label="外仓编号" prop="externalWarehouse" align="center"></el-table-column>
|
||||
<el-table-column label="物料" prop="material" align="center"></el-table-column>
|
||||
<el-table-column label="数量" prop="qty" align="center"></el-table-column>
|
||||
<el-table-column label="单位" prop="unit" align="center"></el-table-column>
|
||||
</el-table>
|
||||
<el-pagination
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="list.total"
|
||||
:page-size="list.size"
|
||||
@size-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange">
|
||||
</el-pagination>
|
||||
<div style="margin-top: 10px;">
|
||||
<el-button type="primary" @click="doTransfer">转移</el-button>
|
||||
<el-button type="warning" @click="doClear">清除</el-button>
|
||||
</div>
|
||||
|
||||
<el-dialog :visible.sync="confirmDialogVisible" center width="20%">
|
||||
<el-form :model="formObj" label-width="auto">
|
||||
<el-form-item label="转移数量:" class="inputRequired">
|
||||
<el-input v-model="formObj.qty" type="number"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="外仓:" v-if="selection && selection.type === 'CONSIGN_FOR_SALE'">
|
||||
<el-input v-model="formObj.transferNo"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注:">
|
||||
<el-input v-model="formObj.remarks"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="confirm">确认</el-button>
|
||||
<el-button type="primary" @click="cancel">返回</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {fetchList, transfer} from '@/api/wms/false-warehoursing';
|
||||
import {isBlank} from "@/util/string";
|
||||
import {getStore} from '@/util/store';
|
||||
import {hideLoading, showLoading} from '@/const/loading';
|
||||
import {listByActivityId} from "@/api/admin/activity-option";
|
||||
import {mapGetters} from 'vuex';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
lableWidth: {
|
||||
'width': '150px'
|
||||
},
|
||||
site: getStore({name: 'tenantId'}),
|
||||
formObj: {},
|
||||
initData: {},
|
||||
list: {
|
||||
records: [],
|
||||
total: 0,
|
||||
size: 0
|
||||
},
|
||||
selection: null,
|
||||
confirmDialogVisible: false,
|
||||
queryParam: {current: 1, size: 20},
|
||||
formatterConst: {
|
||||
type: {
|
||||
"EXTERNAL_WAREHOUSE": "外仓",
|
||||
"CONSIGN_FOR_SALE": "寄售仓",
|
||||
},
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.doClear();
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapGetters(["permissions"]),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
||||
doRetrieve() {
|
||||
let me = this;
|
||||
let param = Object.assign({
|
||||
type: me.formObj.type,
|
||||
material: me.formObj.material,
|
||||
externalWarehouse: me.formObj.externalWarehouse,
|
||||
customer: me.formObj.customer,
|
||||
}, me.queryParam);
|
||||
|
||||
showLoading();
|
||||
fetchList(param).then(respData => {
|
||||
hideLoading();
|
||||
this.list = respData.data.data;
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
},
|
||||
|
||||
//清除页面信息
|
||||
doClear() {
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.list = {};
|
||||
this.queryParam = {current: 1, size: 20};
|
||||
this.selection = null;
|
||||
},
|
||||
|
||||
doTransfer() {
|
||||
let me = this;
|
||||
let selection = me.selection;
|
||||
if (!selection) {
|
||||
me.$message.error('请选择要转移的外仓/寄售仓');
|
||||
} else {
|
||||
me.$set(me.formObj, "qty", 0);
|
||||
me.$set(me.formObj, "remarks", "");
|
||||
me.$set(me.formObj, "transferNo", "");
|
||||
me.confirmDialogVisible = true;
|
||||
}
|
||||
},
|
||||
|
||||
cancel() {
|
||||
this.confirmDialogVisible = false;
|
||||
},
|
||||
|
||||
confirm() {
|
||||
let me = this;
|
||||
if (!me.formObj.qty || me.formObj.qty <= 0) {
|
||||
return me.$message.error("转移数量必须大于0");
|
||||
} else {
|
||||
let selection = me.selection;
|
||||
let param = selection.type === "CONSIGN_FOR_SALE" ? {
|
||||
consignForSaleNo: selection.externalWarehouse,
|
||||
externalWarehouse: me.formObj.transferNo,
|
||||
type: selection.type,
|
||||
qty: me.formObj.qty,
|
||||
remarks: me.formObj.remarks,
|
||||
customer: selection.customer,
|
||||
material: selection.material,
|
||||
} : {
|
||||
externalWarehouse: selection.externalWarehouse,
|
||||
type: selection.type,
|
||||
customer: selection.customer,
|
||||
material: selection.material,
|
||||
qty: me.formObj.qty,
|
||||
remarks: me.formObj.remarks,
|
||||
};
|
||||
showLoading();
|
||||
transfer(param).then(res => {
|
||||
hideLoading();
|
||||
me.confirmDialogVisible = false;
|
||||
me.doRetrieve();
|
||||
return me.$message.success("转移成功");
|
||||
}).catch(e => hideLoading());
|
||||
}
|
||||
},
|
||||
|
||||
handleSelectionChange(row) {
|
||||
this.selection = row;
|
||||
},
|
||||
|
||||
handleSizeChange(val) {
|
||||
this.queryParam.size = val;
|
||||
this.doRetrieve();
|
||||
},
|
||||
handleCurrentChange(val) {
|
||||
this.queryParam.current = val;
|
||||
this.doRetrieve();
|
||||
},
|
||||
doExport() {
|
||||
let me = this;
|
||||
let param = {
|
||||
type: me.formObj.type,
|
||||
material: me.formObj.material,
|
||||
externalWarehouse: me.formObj.externalWarehouse,
|
||||
customer: me.formObj.customer,
|
||||
};
|
||||
this.downBlobFile("/wms/false-warehoursing/export", param, "外仓库存导出.xlsx");
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.inputRequired ::v-deep .el-form-item__label::before {
|
||||
content: "*";
|
||||
width: 10px;
|
||||
height: 20px;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
line-height: 26px;
|
||||
font-size: large;
|
||||
color: #f00;
|
||||
}
|
||||
::v-deep .el-table__body tr.current-row > td {
|
||||
background-color: rgba(79, 169, 255, 0.81) !important; /* 改变为你想要的颜色 */
|
||||
}
|
||||
</style>
|
||||
549
src/views/wms/finished-product-production-return/index.vue
Normal file
549
src/views/wms/finished-product-production-return/index.vue
Normal file
@ -0,0 +1,549 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<input-select-dialog :modal-obj='productionRequisitionDialogObj'
|
||||
:modal-fetch-fun='productionRequisitionDialogFetchFun' :modal-show.sync="productionRequisitionDialogVisible"
|
||||
@inputDialogSelected="productionRequisitionSelect" ref="documentDialog">
|
||||
</input-select-dialog>
|
||||
<input-select-dialog :modal-obj='storageLocationDialogObj' :modal-fetch-fun='storageLocationDialogFetchFun'
|
||||
:modal-show.sync="storageLocationDialogVisible" @inputDialogSelected="storageLocationSelect">
|
||||
</input-select-dialog>
|
||||
<basic-container>
|
||||
<el-form ref="formObj" :model="formObj" label-width="auto">
|
||||
<el-row :gutter="10">
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="站点:" prop="site">
|
||||
<el-input placeHolder="站点" v-model="formObj.site" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item prop="documentNo">
|
||||
<el-input v-model="formObj.documentNo" placeholder="单据号" autofocus
|
||||
@keyup.enter.native="scanProductionRequisitionOrder">
|
||||
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
|
||||
<el-button slot="append" icon="el-icon-search"
|
||||
@click.stop="showProductionRequisitionDialog"></el-button>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table :data="formObj.itemList" border>
|
||||
<el-table-column label="物料" prop="item">
|
||||
</el-table-column>
|
||||
<el-table-column label="物料描述" prop="itemDescription">
|
||||
</el-table-column>
|
||||
<el-table-column label="来源仓" prop="sourceWarehouse">
|
||||
</el-table-column>
|
||||
<el-table-column label="目标仓" prop="targetWarehouse">
|
||||
</el-table-column>
|
||||
<el-table-column label="入库数量" prop="applicationsQuantity">
|
||||
</el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="primary" @click="showItemDialog(scope.$index, scope.row)">入库执行
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态">
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.state === 'CLOSE'" type="warning" disable-transitions>
|
||||
已执行</el-tag>
|
||||
<el-tag v-if="scope.row.state === 'SUBMIT'" disable-transitions>
|
||||
待执行</el-tag>
|
||||
<el-tag v-if="scope.row.state === 'SAVING'" type="success" disable-transitions>
|
||||
已保存</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
|
||||
<div style="margin-top: 10px;">
|
||||
<el-button type="primary" @click="submit">提交</el-button>
|
||||
<el-button type="warning" @click="doClear">清除</el-button>
|
||||
<el-button type="danger" @click="reject">拒收</el-button>
|
||||
</div>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="dialogItemType1FormVisible" center fullscreen>
|
||||
<div style="margin-top: 10px;">
|
||||
<el-form :model="itemForm" label-width="auto">
|
||||
<el-descriptions :column="1" border :labelStyle="lableWidth">
|
||||
<el-descriptions-item label="单据号">
|
||||
{{ itemForm.documentNo }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="物料">
|
||||
{{ itemForm.item }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="物料描述">
|
||||
{{ itemForm.itemDescription }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="来源位置">
|
||||
{{ itemForm.sourceWarehouse }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="目标位置">
|
||||
{{ itemForm.targetWarehouse }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="入库数量">
|
||||
{{ itemForm.applicationsQuantity }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="汇总数量">
|
||||
{{ itemForm.sumQuantity }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="单位">
|
||||
{{ itemForm.unitOfMeasure }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="存储区域">
|
||||
<el-input v-model="itemForm.storageLocation" :disabled="isUse">
|
||||
<i slot="suffix" class="el-input__icon el-icon-search"
|
||||
@click.stop="showStorageLocationDialog"></i>
|
||||
</el-input>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<div style="margin-top: 10px;">
|
||||
<el-form-item prop="code">
|
||||
<el-input v-model="itemForm.code" placeholder="扫描条码" autofocus
|
||||
@keyup.enter.native="scanCode" :disabled="isUse">
|
||||
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-table :data="itemForm.inventoryList" border>
|
||||
<el-table-column label="托条码" prop="inventoryIdOrCarrier">
|
||||
</el-table-column>
|
||||
<el-table-column label="数量" prop="inventoryQty">
|
||||
</el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="primary" @click="delRow(scope.$index, scope.row)"
|
||||
:disabled="scope.row.isScan === 'N'">
|
||||
删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="saveItemType1" :disabled="isUse">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import {
|
||||
fetchList as fetchProductionRequisitionList,
|
||||
getDocumentDetail,
|
||||
submit,
|
||||
getFinishedProductQty,
|
||||
getItemInventory,
|
||||
rejectDocumentByNo
|
||||
} from "@/api/wms/finished-product-production-return";
|
||||
import {
|
||||
fetchList as fetchStorageLocationList,
|
||||
getStorageLocationPageBycode
|
||||
} from '@/api/wms/storage-location';
|
||||
import { isBlank } from "@/util/string";
|
||||
import { getStore } from '@/util/store';
|
||||
import { showLoading, hideLoading } from '@/const/loading'
|
||||
import { getByActivityOption } from "@/api/admin/activity-option";
|
||||
import {
|
||||
mapGetters
|
||||
} from 'vuex'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
lableWidth: {
|
||||
'width': '150px'
|
||||
},
|
||||
isUse: false,
|
||||
//wms_document_save: false,
|
||||
formObj: {},
|
||||
documentNo: "",
|
||||
itemForm: {},
|
||||
submitList: [],
|
||||
codeList: [],
|
||||
storageLocationList: "",
|
||||
dialogItemType1FormVisible: false,
|
||||
productionRequisitionDialogFetchFun: fetchProductionRequisitionList,
|
||||
productionRequisitionDialogVisible: false,
|
||||
productionRequisitionDialogObj: {
|
||||
"condition": "documentNo",
|
||||
tableColumn: [
|
||||
{ prop: "documentNo", label: "单据" },
|
||||
{
|
||||
prop: "state", label: "状态", formatter: (row, column, cellValue, index) => {
|
||||
if (cellValue == "SUBMIT") {
|
||||
return "提交"
|
||||
}
|
||||
if (cellValue == "CLOSE") {
|
||||
return "关闭"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
storageLocationDialogVisible: false,
|
||||
storageLocationDialogFetchFun: fetchStorageLocationList,
|
||||
storageLocationDialogObj: {
|
||||
"condition": "storageLocation",
|
||||
tableColumn: [
|
||||
{ prop: "storageLocation", label: "存储位置", width: "200" },
|
||||
{ prop: "description", label: "描述" }
|
||||
]
|
||||
},
|
||||
initData: {
|
||||
documentNo: "",
|
||||
itemList: [],
|
||||
site: getStore({ name: 'tenantId' })
|
||||
},
|
||||
}
|
||||
},
|
||||
created() {
|
||||
//this.wms_document_save = this.permissions["wms_document_save"];
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.itemForm = Object.assign({}, { "inventoryList": [], "sumQuantity": 0, "code": "", "storageLocation": "" });
|
||||
this.documentNo = "";
|
||||
this.codeList = [];
|
||||
|
||||
let activityId = this.$route.query.ACTIVITY_ID
|
||||
getByActivityOption(activityId, 'STORAGE_LOCATION').then(response => {
|
||||
if (response.data.code != 0) {
|
||||
return this.$message.error(response.data.msg)
|
||||
}
|
||||
this.storageLocationList = response.data.data.optionValue
|
||||
}).catch(e => {
|
||||
console.log(e)
|
||||
})
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(["permissions"]),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
||||
//存储区域弹出框
|
||||
showStorageLocationDialog() {
|
||||
let me = this;
|
||||
me.storageLocationDialogVisible = true;
|
||||
if (this.storageLocationList != "") {
|
||||
this.storageLocationDialogFetchFun = getStorageLocationPageBycode;
|
||||
this.storageLocationDialogObj.queryParam = { "str": this.storageLocationList };
|
||||
} else {
|
||||
this.storageLocationDialogObj.queryParam = { "erpStorageLocation": me.itemForm.targetWarehouse };
|
||||
}
|
||||
|
||||
},
|
||||
storageLocationSelect(row) {
|
||||
let me = this;
|
||||
me.itemForm.storageLocation = row.storageLocation;
|
||||
console.log(me.itemForm);
|
||||
},
|
||||
|
||||
//单据号弹出框
|
||||
showProductionRequisitionDialog() {
|
||||
let me = this;
|
||||
me.productionRequisitionDialogVisible = true;
|
||||
me.$refs.documentDialog.clear();
|
||||
me.productionRequisitionDialogObj.queryParam = { "documentType": "ME_RETURN_SLIP" }
|
||||
},
|
||||
productionRequisitionSelect(row) {
|
||||
let me = this;
|
||||
me.formObj.itemList = [];
|
||||
me.submitList = [];
|
||||
me.formObj.documentNo = row.documentNo;
|
||||
me.documentNo = me.formObj.documentNo;
|
||||
getDocumentDetail(me.formObj.documentNo).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
let obj = Object.assign({}, {
|
||||
"item": res.data.data[i].item,
|
||||
"applicationsQuantity": res.data.data[i].applicationsQuantity,
|
||||
"documentNo": me.documentNo,
|
||||
"isPack": res.data.data[i].isPack,
|
||||
"itemDescription": res.data.data[i].itemDescription,
|
||||
"seq": res.data.data[i].seq,
|
||||
"sourceWarehouse": res.data.data[i].sourceWarehouse,
|
||||
"targetWarehouse": res.data.data[i].targetWarehouse,
|
||||
"unitOfMeasure": res.data.data[i].unitOfMeasure,
|
||||
"itemGroup": res.data.data[i].itemGroup,
|
||||
"state": res.data.data[i].state,
|
||||
"handle": res.data.data[i].handle,
|
||||
"documentType": res.data.data[i].documentType,
|
||||
"storageLocation": res.data.data[i].storageLocation
|
||||
})
|
||||
me.formObj.itemList.push(obj);
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
showItemDialog(index, row) {
|
||||
//判断是物料类型弹出不同的表单
|
||||
let me = this;
|
||||
let sumInventoryQty = 0;
|
||||
|
||||
//判断行项目是否已经关闭,关闭则不可扫描条码和保存
|
||||
if (row.state === "CLOSE") {
|
||||
this.isUse = true;
|
||||
} else {
|
||||
this.isUse = false;
|
||||
}
|
||||
|
||||
//获取汇总数量
|
||||
getItemInventory(row).then(res => {
|
||||
if (res.data.code == 0 && res.data.data.length > 0) {
|
||||
me.itemForm.inventoryList = [];
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
sumInventoryQty += res.data.data[i].inventoryQty;
|
||||
let obj = Object.assign({},
|
||||
{
|
||||
"inventoryIdOrCarrier": res.data.data[i].inventoryIdOrCarrier,
|
||||
"inventoryQty": res.data.data[i].inventoryQty,
|
||||
"isScan": "N"
|
||||
});
|
||||
me.itemForm.inventoryList.push(obj);
|
||||
}
|
||||
me.itemForm.sumQuantity = sumInventoryQty;
|
||||
}
|
||||
})
|
||||
if (me.submitList.length > 0) {
|
||||
console.log(me.submitList);
|
||||
for (let i = 0; i < me.submitList.length; i++) {
|
||||
let obj = Object.assign({}, me.submitList[i]);
|
||||
if (me.submitList[i].seq === row.seq) {
|
||||
me.dialogItemType1FormVisible = true;
|
||||
me.itemForm = obj;
|
||||
return;
|
||||
} else {
|
||||
me.dialogItemType1FormVisible = true;
|
||||
me.itemForm = Object.assign(obj, { "inventoryList": [], "code": "", "sumQuantity": 0, "storageLocation": "" }, row);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
me.dialogItemType1FormVisible = true;
|
||||
me.itemForm = Object.assign(me.itemForm, { "inventoryList": [], "code": "", "sumQuantity": sumInventoryQty, "storageLocation": "" }, row);
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
|
||||
//扫描单据号
|
||||
scanProductionRequisitionOrder() {
|
||||
let me = this;
|
||||
let code = me.formObj.documentNo;
|
||||
if (isBlank(code)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
return;
|
||||
};
|
||||
if (me.documentNo === code) {
|
||||
me.$message.error("不可重复扫描");
|
||||
return;
|
||||
};
|
||||
me.formObj.itemList = [];
|
||||
me.submitList = [];
|
||||
getDocumentDetail(me.formObj.documentNo).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
if (res.data.data[0].documentType != "ME_RETURN_SLIP") {
|
||||
return me.$message.error("单据类型不是成品生产退货");
|
||||
}
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
let obj = Object.assign({}, {
|
||||
"item": res.data.data[i].item,
|
||||
"applicationsQuantity": res.data.data[i].applicationsQuantity,
|
||||
"documentNo": me.formObj.documentNo,
|
||||
"isPack": res.data.data[i].isPack,
|
||||
"itemDescription": res.data.data[i].itemDescription,
|
||||
"seq": res.data.data[i].seq,
|
||||
"sourceWarehouse": res.data.data[i].sourceWarehouse,
|
||||
"targetWarehouse": res.data.data[i].targetWarehouse,
|
||||
"unitOfMeasure": res.data.data[i].unitOfMeasure,
|
||||
"itemGroup": res.data.data[i].itemGroup,
|
||||
"state": res.data.data[i].state,
|
||||
"handle": res.data.data[i].handle,
|
||||
"documentType": res.data.data[i].documentType,
|
||||
"storageLocation": res.data.data[i].storageLocation
|
||||
})
|
||||
me.formObj.itemList.push(obj);
|
||||
me.documentNo = me.formObj.documentNo;
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
getinventoryList() {
|
||||
let me = this;
|
||||
let obj = Object.assign({}, {
|
||||
"documentNo": me.itemForm.documentNo,
|
||||
"item": me.itemForm.item,
|
||||
"sourceWarehouse": me.itemForm.sourceWarehouse,
|
||||
"inventoryIdOrCarrier": me.itemForm.code
|
||||
})
|
||||
getFinishedProductQty(obj).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
//库存总数大于需求数量
|
||||
if (me.accAdd(res.data.data.inventoryQty, me.itemForm.sumQuantity) > me.itemForm.applicationsQuantity) {
|
||||
console.log(res.data.data.inventoryQty + me.itemForm.sumQuantity);
|
||||
me.$message.error("汇总数量大于需求数量");
|
||||
return;
|
||||
}
|
||||
let obj = Object.assign({},
|
||||
{
|
||||
"inventoryIdOrCarrier": res.data.data.inventoryIdOrCarrier,
|
||||
"inventoryQty": res.data.data.inventoryQty,
|
||||
"isScan": "Y"
|
||||
});
|
||||
me.itemForm.sumQuantity = me.accAdd(res.data.data.inventoryQty, me.itemForm.sumQuantity);
|
||||
me.itemForm.inventoryList.push(obj);
|
||||
|
||||
}
|
||||
me.codeList.push({ "code": me.itemForm.code });
|
||||
me.itemForm.code = "";
|
||||
});
|
||||
},
|
||||
|
||||
//扫描条码
|
||||
scanCode() {
|
||||
let me = this;
|
||||
let sum = 0;
|
||||
if (isBlank(me.itemForm.code)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
return;
|
||||
};
|
||||
if (me.itemForm.inventoryList.length > 0) {
|
||||
for (let i = 0; i < me.codeList.length; i++) {
|
||||
if (me.codeList[i].code === me.itemForm.code) {
|
||||
me.$message.error("不可重复扫描");
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.getinventoryList();
|
||||
} else {
|
||||
this.getinventoryList();
|
||||
}
|
||||
},
|
||||
|
||||
submit() {
|
||||
let me = this;
|
||||
if (me.submitList.length > 0) {
|
||||
|
||||
if (me.submitList.length != me.formObj.itemList.length) {
|
||||
me.$message.error("未执行所有行项目");
|
||||
return;
|
||||
}
|
||||
|
||||
for (let i = 0; i < me.submitList.length; i++) {
|
||||
let list = me.submitList[i].inventoryList;
|
||||
for (let j = 0; j < list.length; j++) {
|
||||
if (list[j].isScan === "N") {
|
||||
me.submitList[i].inventoryList.splice(j, 1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
showLoading();
|
||||
submit(me.submitList).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code == 0) {
|
||||
me.$message.success("提交成功");
|
||||
me.doClear();
|
||||
}
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
} else {
|
||||
me.$message.error("没有可提交的行");
|
||||
return;
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
saveItemType1() {
|
||||
let me = this;
|
||||
me.dialogItemType1FormVisible = false;
|
||||
if (me.itemForm.state === "CLOSE") {
|
||||
me.$message.error("此行项目已关闭");
|
||||
return;
|
||||
}
|
||||
|
||||
//保存之后改变行项目状态为已保存
|
||||
//item和seq都相等时候,找到行项目列表改变其状态
|
||||
for (let i = 0; i < me.formObj.itemList.length; i++) {
|
||||
if (me.itemForm.seq == me.formObj.itemList[i].seq && me.itemForm.item == me.formObj.itemList[i].item) {
|
||||
me.formObj.itemList[i].state = "SAVING"
|
||||
}
|
||||
}
|
||||
|
||||
let obj = Object.assign({}, me.itemForm);
|
||||
if (me.submitList.length > 0) {
|
||||
for (let i = 0; i < me.submitList.length; i++) {
|
||||
if (me.submitList[i].seq === obj.seq) {
|
||||
me.submitList[i] = obj;
|
||||
return;
|
||||
}
|
||||
}
|
||||
me.submitList.push(obj);
|
||||
} else {
|
||||
me.submitList.push(obj);
|
||||
}
|
||||
console.log(me.submitList);
|
||||
},
|
||||
|
||||
//拒收
|
||||
reject() {
|
||||
let me = this;
|
||||
if (isBlank(me.formObj.documentNo)) {
|
||||
me.$message.error("请选择单据");
|
||||
return;
|
||||
}
|
||||
console.log(me.formObj.documentNo);
|
||||
rejectDocumentByNo(me.formObj.documentNo).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
me.$message.success("拒收成功");
|
||||
me.doClear();
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
//清除页面信息
|
||||
doClear() {
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.itemForm = Object.assign({}, { "inventoryList": [], "sumQuantity": 0, "code": "" });
|
||||
this.documentNo = "";
|
||||
this.codeList = [];
|
||||
this.submitList = [];
|
||||
},
|
||||
|
||||
//
|
||||
delRow(index, row) {
|
||||
let me = this;
|
||||
let sum = 0;
|
||||
//删除已扫描过条码中集合的信息
|
||||
for (let j = 0; j < me.codeList.length; j++) {
|
||||
if (me.itemForm.inventoryList[index].inventoryIdOrCarrier === me.codeList[j].code) {
|
||||
me.codeList.splice(j, 1);
|
||||
}
|
||||
}
|
||||
me.itemForm.inventoryList.splice(index, 1);
|
||||
for (let i = 0; i < me.itemForm.inventoryList.length; i++) {
|
||||
sum += me.itemForm.inventoryList[i].inventoryQty;
|
||||
}
|
||||
me.itemForm.sumQuantity = sum;
|
||||
},
|
||||
accAdd(arg1, arg2) {
|
||||
var r1, r2, m;
|
||||
try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
|
||||
try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
|
||||
m = Math.pow(10, Math.max(r1, r2))
|
||||
return (arg1 * m + arg2 * m) / m
|
||||
}
|
||||
|
||||
},
|
||||
}
|
||||
|
||||
</script>
|
||||
59
src/views/wms/finished-product-report/index.vue
Normal file
59
src/views/wms/finished-product-report/index.vue
Normal file
@ -0,0 +1,59 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<basic-container>formObj
|
||||
<c-top-bar :offset="50">
|
||||
<el-button type="text" icon="el-icon-document-copy" @click="exportExcel">导出</el-button>
|
||||
<el-divider direction="vertical"></el-divider>
|
||||
<el-button type="text" icon="el-icon-delete" @click="doClear">清除</el-button>
|
||||
<el-divider direction="vertical"></el-divider>
|
||||
<el-button type="text" icon="el-icon-refresh" @click="doSearch">查询</el-button>
|
||||
<el-divider style="margin-top: 0px;"></el-divider>
|
||||
</c-top-bar>
|
||||
<el-form label-width="120px" v-model="formObj">
|
||||
<el-row>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
|
||||
<el-form-item label="站点">
|
||||
<el-input v-model="formObj.site" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
|
||||
<el-form-item label="ERP仓库" :required="true">
|
||||
<el-input ref="barcode" v-model="formObj.erpStorageLocation" placeholder="选择ERP仓库" autofocus
|
||||
@keyup.enter.native="doSearch">
|
||||
<i slot="suffix" class="el-input__icon el-icon-copy-document"
|
||||
@click.stop="openErpStorageLocationDialog"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
|
||||
<el-form-item label="货架">
|
||||
<el-input ref="barcode" v-model="formObj.storageLocation" placeholder="选择仓库"
|
||||
@keyup.enter.native="doSearch">
|
||||
<i slot="suffix" class="el-input__icon el-icon-copy-document"
|
||||
@click.stop="openStorageLocationDialog"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
formObj: {
|
||||
site: '',
|
||||
erpStorageLocation: '',
|
||||
storageLocation: '',
|
||||
storageBin: '',
|
||||
used: '',
|
||||
isDefault: ''
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
</script>
|
||||
554
src/views/wms/finished-products-purchase/index.vue
Normal file
554
src/views/wms/finished-products-purchase/index.vue
Normal file
@ -0,0 +1,554 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<input-select-dialog :modal-obj='productionRequisitionDialogObj'
|
||||
:modal-fetch-fun='productionRequisitionDialogFetchFun' :modal-show.sync="productionRequisitionDialogVisible"
|
||||
@inputDialogSelected="productionRequisitionSelect" ref="documentDialog">
|
||||
</input-select-dialog>
|
||||
<input-select-dialog :modal-obj='storageLocationDialogObj' :modal-fetch-fun='storageLocationDialogFetchFun'
|
||||
:modal-show.sync="storageLocationDialogVisible" @inputDialogSelected="storageLocationSelect">
|
||||
</input-select-dialog>
|
||||
<basic-container>
|
||||
<el-form ref="formObj" :model="formObj" label-width="auto">
|
||||
<el-row :gutter="10">
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="站点:" prop="site">
|
||||
<el-input placeHolder="站点" v-model="formObj.site" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item prop="documentNo">
|
||||
<el-input v-model="formObj.documentNo" placeholder="单据号" autofocus
|
||||
@keyup.enter.native="scanProductionRequisitionOrder">
|
||||
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
|
||||
<el-button slot="append" icon="el-icon-search"
|
||||
@click.stop="showProductionRequisitionDialog"></el-button>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table :data="formObj.itemList" border>
|
||||
<el-table-column label="物料" prop="item">
|
||||
</el-table-column>
|
||||
<el-table-column label="物料描述" prop="itemDescription">
|
||||
</el-table-column>
|
||||
<el-table-column label="目标仓" prop="targetWarehouse">
|
||||
</el-table-column>
|
||||
<el-table-column label="入库数量" prop="applicationsQuantity">
|
||||
</el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="primary" @click="showItemDialog(scope.$index, scope.row)">入库执行
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态">
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.state === 'CLOSE'" type="warning" disable-transitions>
|
||||
已执行</el-tag>
|
||||
<el-tag v-if="scope.row.state === 'SUBMIT'" disable-transitions>
|
||||
待执行</el-tag>
|
||||
<el-tag v-if="scope.row.state === 'SAVING'" type="success" disable-transitions>
|
||||
已保存</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
|
||||
<div style="margin-top: 10px;">
|
||||
<el-button type="primary" @click="submit">提交</el-button>
|
||||
<el-button type="warning" @click="doClear">清除</el-button>
|
||||
</div>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="dialogItemType1FormVisible" center fullscreen>
|
||||
<div style="margin-top: 10px;">
|
||||
<el-form :model="itemForm" label-width="auto">
|
||||
<el-descriptions :column="1" border :labelStyle="lableWidth">
|
||||
<el-descriptions-item label="单据号">
|
||||
{{ itemForm.documentNo }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="物料">
|
||||
{{ itemForm.item }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="物料描述">
|
||||
{{ itemForm.itemDescription }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="目标仓">
|
||||
{{ itemForm.targetWarehouse }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="入库数量">
|
||||
{{ itemForm.applicationsQuantity }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="汇总数量">
|
||||
{{ itemForm.sumQuantity }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="单位">
|
||||
{{ itemForm.unitOfMeasure }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="存储区域">
|
||||
<el-input v-model="itemForm.storageLocation" :disabled="isUse">
|
||||
<i slot="suffix" class="el-input__icon el-icon-search"
|
||||
@click.stop="showStorageLocationDialog"></i>
|
||||
</el-input>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<div style="margin-top: 10px;">
|
||||
<el-form-item prop="code">
|
||||
<el-input v-model="itemForm.code" placeholder="扫描条码" autofocus
|
||||
@keyup.enter.native="scanCode" :disabled="isUse">
|
||||
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-table :data="itemForm.inventoryList" border>
|
||||
<el-table-column label="条码" prop="inventoryIdOrCarrier">
|
||||
</el-table-column>
|
||||
<el-table-column label="数量" prop="inventoryQty">
|
||||
</el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="primary" @click="delRow(scope.$index, scope.row)"
|
||||
:disabled="scope.row.isScan === 'N'">
|
||||
删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="saveItemType1" :disabled="isUse">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import {
|
||||
fetchList as fetchProductionRequisitionList,
|
||||
getDocumentDetail,
|
||||
submit,
|
||||
getFinishedProductsPurchaseQty,
|
||||
getItemInventory
|
||||
} from "@/api/wms/finished-products-purchase";
|
||||
import {
|
||||
fetchList as fetchStorageLocationList,
|
||||
getStorageLocationPageBycode
|
||||
} from '@/api/wms/storage-location';
|
||||
import { isBlank } from "@/util/string";
|
||||
import { getStore } from '@/util/store';
|
||||
import {hideLoading, showLoading} from '@/const/loading';
|
||||
import { getByActivityOption } from "@/api/admin/activity-option";
|
||||
import {
|
||||
mapGetters
|
||||
} from 'vuex'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
lableWidth: {
|
||||
'width': '150px'
|
||||
},
|
||||
isUse: false,
|
||||
wms_document_save: false,
|
||||
formObj: {},
|
||||
documentNo: "",
|
||||
itemForm: {},
|
||||
submitList: [],
|
||||
codeList: [],
|
||||
storageLocationList: "",
|
||||
dialogItemType1FormVisible: false,
|
||||
productionRequisitionDialogFetchFun: fetchProductionRequisitionList,
|
||||
productionRequisitionDialogVisible: false,
|
||||
productionRequisitionDialogObj: {
|
||||
"condition": "documentNo",
|
||||
tableColumn: [
|
||||
{ prop: "documentNo", label: "单据" },
|
||||
{ prop: "externalDocumentNo", label: "ERP单据号" },
|
||||
{
|
||||
prop: "state", label: "状态", formatter: (row, column, cellValue, index) => {
|
||||
if (cellValue == "SUBMIT") {
|
||||
return "提交"
|
||||
}
|
||||
if (cellValue == "CLOSE") {
|
||||
return "关闭"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
storageLocationDialogVisible: false,
|
||||
storageLocationDialogFetchFun: fetchStorageLocationList,
|
||||
storageLocationDialogObj: {
|
||||
"condition": "storageLocation",
|
||||
tableColumn: [
|
||||
{ prop: "storageLocation", label: "存储位置", width: "200" },
|
||||
{ prop: "description", label: "描述" }
|
||||
]
|
||||
},
|
||||
initData: {
|
||||
documentNo: "",
|
||||
itemList: [],
|
||||
site: getStore({ name: 'tenantId' })
|
||||
},
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.wms_document_save = this.permissions["wms_document_save"];
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.itemForm = Object.assign({}, { "inventoryList": [], "sumQuantity": 0, "code": "", "storageLocation": "" });
|
||||
this.documentNo = "";
|
||||
this.codeList = [];
|
||||
|
||||
let activityId = this.$route.query.ACTIVITY_ID
|
||||
getByActivityOption(activityId, 'STORAGE_LOCATION').then(response => {
|
||||
if (response.data.code != 0) {
|
||||
return this.$message.error(response.data.msg)
|
||||
}
|
||||
this.storageLocationList = response.data.data.optionValue
|
||||
}).catch(e => {
|
||||
console.log(e)
|
||||
})
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(["permissions"]),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
||||
//存储区域弹出框
|
||||
showStorageLocationDialog() {
|
||||
let me = this;
|
||||
me.storageLocationDialogVisible = true;
|
||||
if (this.storageLocationList != "") {
|
||||
this.storageLocationDialogFetchFun = getStorageLocationPageBycode;
|
||||
this.storageLocationDialogObj.queryParam = { "str": this.storageLocationList };
|
||||
} else {
|
||||
this.storageLocationDialogObj.queryParam = { "erpStorageLocation": me.itemForm.targetWarehouse };
|
||||
}
|
||||
|
||||
},
|
||||
storageLocationSelect(row) {
|
||||
let me = this;
|
||||
me.itemForm.storageLocation = row.storageLocation;
|
||||
console.log(me.itemForm);
|
||||
},
|
||||
|
||||
//单据号弹出框
|
||||
showProductionRequisitionDialog() {
|
||||
let me = this;
|
||||
me.productionRequisitionDialogVisible = true;
|
||||
me.$refs.documentDialog.clear();
|
||||
me.productionRequisitionDialogObj.queryParam = { "documentType": "PROCUREMENT_STORAGE" }
|
||||
},
|
||||
productionRequisitionSelect(row) {
|
||||
let me = this;
|
||||
me.formObj.itemList = [];
|
||||
me.submitList = [];
|
||||
me.formObj.documentNo = row.documentNo;
|
||||
me.documentNo = me.formObj.documentNo;
|
||||
getDocumentDetail(me.formObj.documentNo).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
let obj = Object.assign({}, {
|
||||
"item": res.data.data[i].item,
|
||||
"applicationsQuantity": res.data.data[i].applicationsQuantity,
|
||||
//"documentNo": me.documentNo,
|
||||
"documentNo": res.data.data[i].documentNo,
|
||||
"isPack": res.data.data[i].isPack,
|
||||
"itemDescription": res.data.data[i].itemDescription,
|
||||
"seq": res.data.data[i].seq,
|
||||
"sourceWarehouse": res.data.data[i].sourceWarehouse,
|
||||
"targetWarehouse": res.data.data[i].targetWarehouse,
|
||||
"unitOfMeasure": res.data.data[i].unitOfMeasure,
|
||||
"itemGroup": res.data.data[i].itemGroup,
|
||||
"state": res.data.data[i].state,
|
||||
"handle": res.data.data[i].handle,
|
||||
"documentType": res.data.data[i].documentType,
|
||||
"batch": res.data.data[i].batch,
|
||||
"storageLocation": res.data.data[i].storageLocation
|
||||
})
|
||||
me.formObj.itemList.push(obj);
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
showItemDialog(index, row) {
|
||||
//判断是物料类型弹出不同的表单
|
||||
let me = this;
|
||||
let sumInventoryQty = 0;
|
||||
|
||||
//判断行项目是否已经关闭,关闭则不可扫描条码和保存
|
||||
if (row.state === "CLOSE") {
|
||||
this.isUse = true;
|
||||
} else {
|
||||
this.isUse = false;
|
||||
}
|
||||
|
||||
|
||||
//获取汇总数量
|
||||
getItemInventory(row).then(res => {
|
||||
if (res.data.code == 0 && res.data.data.length > 0) {
|
||||
me.itemForm.inventoryList = [];
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
sumInventoryQty += res.data.data[i].inventoryQty;
|
||||
let obj = Object.assign({},
|
||||
{
|
||||
"inventoryIdOrCarrier": res.data.data[i].inventoryIdOrCarrier,
|
||||
"inventoryQty": res.data.data[i].inventoryQty,
|
||||
"isScan": "N"
|
||||
});
|
||||
me.itemForm.inventoryList.push(obj);
|
||||
}
|
||||
me.itemForm.sumQuantity = sumInventoryQty;
|
||||
}
|
||||
})
|
||||
if (me.submitList.length > 0) {
|
||||
console.log(me.submitList);
|
||||
for (let i = 0; i < me.submitList.length; i++) {
|
||||
let obj = Object.assign({}, me.submitList[i]);
|
||||
if (me.submitList[i].seq === row.seq) {
|
||||
me.dialogItemType1FormVisible = true;
|
||||
me.itemForm = obj;
|
||||
return;
|
||||
} else {
|
||||
me.dialogItemType1FormVisible = true;
|
||||
me.itemForm = Object.assign(obj, { "inventoryList": [], "code": "", "sumQuantity": 0, "storageLocation": "" }, row);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
me.dialogItemType1FormVisible = true;
|
||||
me.itemForm = Object.assign(me.itemForm, { "inventoryList": [], "code": "", "sumQuantity": sumInventoryQty, "storageLocation": "" }, row);
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
|
||||
//扫描单据号
|
||||
scanProductionRequisitionOrder() {
|
||||
let me = this;
|
||||
let code = me.formObj.documentNo;
|
||||
if (isBlank(code)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
return;
|
||||
};
|
||||
if (me.documentNo === code) {
|
||||
me.$message.error("不可重复扫描");
|
||||
return;
|
||||
};
|
||||
me.formObj.itemList = [];
|
||||
me.submitList = [];
|
||||
getDocumentDetail(me.formObj.documentNo).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
if (res.data.data[0].documentType != "PROCUREMENT_STORAGE") {
|
||||
return me.$message.error("单据类型不是采购单据");
|
||||
}
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
let obj = Object.assign({}, {
|
||||
"item": res.data.data[i].item,
|
||||
"applicationsQuantity": res.data.data[i].applicationsQuantity,
|
||||
//"documentNo": me.formObj.documentNo,
|
||||
"documentNo": res.data.data[i].documentNo,
|
||||
"isPack": res.data.data[i].isPack,
|
||||
"itemDescription": res.data.data[i].itemDescription,
|
||||
"seq": res.data.data[i].seq,
|
||||
"sourceWarehouse": res.data.data[i].sourceWarehouse,
|
||||
"targetWarehouse": res.data.data[i].targetWarehouse,
|
||||
"unitOfMeasure": res.data.data[i].unitOfMeasure,
|
||||
"itemGroup": res.data.data[i].itemGroup,
|
||||
"state": res.data.data[i].state,
|
||||
"handle": res.data.data[i].handle,
|
||||
"documentType": res.data.data[i].documentType,
|
||||
"batch": res.data.data[i].batch,
|
||||
"storageLocation": res.data.data[i].storageLocation
|
||||
})
|
||||
me.formObj.itemList.push(obj);
|
||||
me.documentNo = me.formObj.documentNo;
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
getinventoryList() {
|
||||
let me = this;
|
||||
console.log(me.itemForm);
|
||||
let obj = Object.assign({}, {
|
||||
"item": me.itemForm.item,
|
||||
"sourceWarehouse": me.itemForm.sourceWarehouse,
|
||||
"inventoryIdOrCarrier": me.itemForm.code,
|
||||
"seq": me.itemForm.seq,
|
||||
"batch": me.itemForm.batch
|
||||
})
|
||||
getFinishedProductsPurchaseQty(obj).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
//库存总数大于需求数量
|
||||
if (res.data.data.inventoryQty + me.itemForm.sumQuantity > me.itemForm.applicationsQuantity) {
|
||||
me.$message.error("汇总数量大于需求数量");
|
||||
return;
|
||||
}
|
||||
let obj = Object.assign({},
|
||||
{
|
||||
"inventoryIdOrCarrier": res.data.data.inventoryIdOrCarrier,
|
||||
"inventoryQty": res.data.data.inventoryQty,
|
||||
"isScan": "Y"
|
||||
});
|
||||
me.itemForm.sumQuantity += res.data.data.inventoryQty;
|
||||
me.itemForm.inventoryList.push(obj);
|
||||
|
||||
}
|
||||
me.codeList.push({ "code": me.itemForm.code });
|
||||
me.itemForm.code = "";
|
||||
});
|
||||
},
|
||||
|
||||
//扫描条码
|
||||
scanCode() {
|
||||
let me = this;
|
||||
let sum = 0;
|
||||
if (isBlank(me.itemForm.code)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
return;
|
||||
};
|
||||
if (me.itemForm.inventoryList.length > 0) {
|
||||
for (let i = 0; i < me.codeList.length; i++) {
|
||||
if (me.codeList[i].code === me.itemForm.code) {
|
||||
me.$message.error("不可重复扫描");
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.getinventoryList();
|
||||
} else {
|
||||
this.getinventoryList();
|
||||
}
|
||||
},
|
||||
|
||||
submit() {
|
||||
let me = this;
|
||||
console.log("以下为提交的数据");
|
||||
console.log(me.submitList);
|
||||
if (me.submitList.length > 0) {
|
||||
for (let i = 0; i < me.submitList.length; i++) {
|
||||
let list = me.submitList[i].inventoryList;
|
||||
for (let j = 0; j < list.length; j++) {
|
||||
if (list[j].isScan === "N") {
|
||||
me.submitList[i].inventoryList.splice(j, 1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
showLoading();
|
||||
submit(me.submitList).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code == 0) {
|
||||
me.$message.success("提交成功");
|
||||
me.doClear();
|
||||
}
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
} else {
|
||||
me.$message.error("没有可提交的行");
|
||||
return;
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
saveItemType1() {
|
||||
let me = this;
|
||||
me.dialogItemType1FormVisible = false;
|
||||
if (me.itemForm.state === "CLOSE") {
|
||||
me.$message.error("此行项目已关闭");
|
||||
return;
|
||||
}
|
||||
let obj = Object.assign({}, me.itemForm);
|
||||
if (me.submitList.length > 0) {
|
||||
for (let i = 0; i < me.submitList.length; i++) {
|
||||
if (me.submitList[i].seq === obj.seq) {
|
||||
me.submitList[i] = obj;
|
||||
return;
|
||||
}
|
||||
}
|
||||
me.submitList.push(obj);
|
||||
} else {
|
||||
me.submitList.push(obj);
|
||||
}
|
||||
|
||||
//保存之后改变行项目状态为已保存
|
||||
//item和seq都相等时候,找到行项目列表改变其状态
|
||||
for (let i = 0; i < me.formObj.itemList.length; i++) {
|
||||
if (me.itemForm.seq == me.formObj.itemList[i].seq && me.itemForm.item == me.formObj.itemList[i].item) {
|
||||
me.formObj.itemList[i].state = "SAVING"
|
||||
}
|
||||
}
|
||||
|
||||
console.log(me.submitList);
|
||||
},
|
||||
|
||||
saveItemType2() {
|
||||
let me = this;
|
||||
me.itemForm.inventoryList = [];
|
||||
me.dialogItemType2FormVisible = false;
|
||||
let obj1 = Object.assign({}, {
|
||||
"inventoryQty": me.itemForm.sumQuantity
|
||||
});
|
||||
me.itemForm.inventoryList.push(obj1);
|
||||
let obj = Object.assign({}, me.itemForm);
|
||||
if (me.submitList.length > 0) {
|
||||
for (let i = 0; i < me.submitList.length; i++) {
|
||||
if (me.submitList[i].seq === obj.seq) {
|
||||
me.submitList[i] = obj;
|
||||
return;
|
||||
}
|
||||
}
|
||||
me.submitList.push(obj);
|
||||
} else {
|
||||
me.submitList.push(obj);
|
||||
}
|
||||
|
||||
//保存之后改变行项目状态为已保存
|
||||
//item和seq都相等时候,找到行项目列表改变其状态
|
||||
for (let i = 0; i < me.formObj.itemList.length; i++) {
|
||||
if (me.itemForm.seq == me.formObj.itemList[i].seq && me.itemForm.item == me.formObj.itemList[i].item) {
|
||||
me.formObj.itemList[i].state = "SAVING"
|
||||
}
|
||||
}
|
||||
|
||||
console.log(me.submitList);
|
||||
},
|
||||
|
||||
//清除页面信息
|
||||
doClear() {
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.itemForm = Object.assign({}, { "inventoryList": [], "sumQuantity": 0, "code": "" });
|
||||
this.documentNo = "";
|
||||
this.codeList = [];
|
||||
this.submitList = [];
|
||||
},
|
||||
|
||||
//
|
||||
delRow(index, row) {
|
||||
let me = this;
|
||||
let sum = 0;
|
||||
//删除已扫描过条码中集合的信息
|
||||
for (let j = 0; j < me.codeList.length; j++) {
|
||||
if (me.itemForm.inventoryList[index].inventoryIdOrCarrier === me.codeList[j].code) {
|
||||
me.codeList.splice(j, 1);
|
||||
}
|
||||
}
|
||||
me.itemForm.inventoryList.splice(index, 1);
|
||||
for (let i = 0; i < me.itemForm.inventoryList.length; i++) {
|
||||
sum += me.itemForm.inventoryList[i].inventoryQty;
|
||||
}
|
||||
me.itemForm.sumQuantity = sum;
|
||||
}
|
||||
|
||||
},
|
||||
}
|
||||
|
||||
</script>
|
||||
304
src/views/wms/initial-data-import/index.vue
Normal file
304
src/views/wms/initial-data-import/index.vue
Normal file
@ -0,0 +1,304 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<basic-container>
|
||||
<c-top-bar :offset="50">
|
||||
<el-button type="text" @click="doClear" icon="el-icon-circle-close">清除</el-button>
|
||||
<el-divider direction="vertical"></el-divider>
|
||||
<el-button type="text" @click="doSubmit" icon="el-icon-upload2">导入</el-button>
|
||||
<el-divider direction="vertical"></el-divider>
|
||||
<el-button type="text" @click="exportDocumentTemplate" icon="el-icon-document-copy">模板下载</el-button>
|
||||
<el-divider style="margin-top: 0px;"></el-divider>
|
||||
</c-top-bar>
|
||||
<el-form label-width="120px" style="width: 40%">
|
||||
<el-form-item label="站点">
|
||||
<el-input v-model="site" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="导入类型" :required="true">
|
||||
<el-select v-model="importType" style="width: 100%" placeholder="请选择导入类型" :disabled="importTypeDisabled">
|
||||
<el-option v-for="(item,index) in importTypes" :key="index" :label="item.label"
|
||||
:value="item.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="文件选择" :required="true">
|
||||
<el-upload ref="upload" class="upload-demo" :http-request="doUpload" action="/" :on-change="handleSelectFile"
|
||||
:before-upload="beforeUpload" :auto-upload="false" :limit="2" accept=".xls,.xlsx">
|
||||
<el-button type="primary" size="small">浏览文件...</el-button>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-button type="text">导入结果</el-button>
|
||||
<el-input type="textarea" rows="10" v-model="resultMessage"></el-input>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getStore} from '@/util/store';
|
||||
import {showLoading, hideLoading} from '@/const/loading';
|
||||
import {stringFormat, isBlank} from "@/util/string";
|
||||
import {listByActivityId} from "@/api/admin/activity-option";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
site: '*',
|
||||
importType: '',
|
||||
importTypes: [],
|
||||
defaultTypes: [
|
||||
{label: '原材料/包材库存导入', value: '1'},
|
||||
{label: '五金备件库存导入', value: '2'},
|
||||
//{label: '半成品库存导入', value: '3'},
|
||||
{label: '成品库存导入', value: '4'},
|
||||
/*{label: '更新库存生产日期', value: '5'},
|
||||
{label: '临时半成品库存导入', value: '6'},*/
|
||||
{label: '载具主数据导入', value: '7'},
|
||||
{label: '货格主数据导入', value: '8'},
|
||||
/*{label: '采购成品导入', value: '9'},
|
||||
{label: '销售退货导入', value: '10'},*/
|
||||
{label: '存储位置导入', value: '11'},
|
||||
{label: '库存说明导入', value: '12'},
|
||||
{label: '库存&质检数据导入', value: '20'},
|
||||
{label: '物料安全库存导入', value: '21'},
|
||||
],
|
||||
routerTypes: [
|
||||
{label: '角色区域绑定信息', value: '13'},
|
||||
{label: '原材料/包材盘盈导入', value: '14'},
|
||||
{label: '原材料/包材盘亏导入', value: '15'},
|
||||
{label: '五金备件盘盈导入', value: '16'},
|
||||
{label: '五金备件盘亏导入', value: '17'},
|
||||
{label: '成品盘盈导入', value: '18'},
|
||||
{label: '成品盘亏导入', value: '19'},
|
||||
{label: '成本中心领料单导入', value: '22'},
|
||||
],
|
||||
importTypeDisabled: false,
|
||||
resultMessage: '',
|
||||
ACTIVITY_OPTIONS: []
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.site = getStore({name: 'tenantId'});
|
||||
},
|
||||
|
||||
beforeRouteUpdate(to, from, next) {
|
||||
this.loadData(to.query);
|
||||
next();
|
||||
},
|
||||
|
||||
beforeRouteEnter(to, from, next) {
|
||||
next(vm => {
|
||||
try {
|
||||
//获取作业规则
|
||||
vm.loadData.call(vm, vm.$route.query);
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
loadData(urlParam) {
|
||||
let me = this;
|
||||
let activityId = urlParam.ACTIVITY_ID;
|
||||
let visibleType = urlParam.visibleType;
|
||||
me.$refs.upload.clearFiles();
|
||||
me.resultMessage = "";
|
||||
if (activityId) {
|
||||
listByActivityId(activityId).then(response => {
|
||||
if (response.data.code != 0) {
|
||||
return me.$message.error(response.data.msg);
|
||||
}
|
||||
me.ACTIVITY_OPTIONS = response.data.data;
|
||||
}).catch(e => {
|
||||
console.log(e);
|
||||
});
|
||||
}
|
||||
if (visibleType) {
|
||||
let array = visibleType.split(",")
|
||||
me.importTypes = me.routerTypes.filter(o => array.includes(o.value));
|
||||
if (array.length === 1) {
|
||||
me.importType = visibleType;
|
||||
me.importTypeDisabled = true;
|
||||
} else {
|
||||
me.importTypeDisabled = false;
|
||||
}
|
||||
} else {
|
||||
me.importTypes = me.defaultTypes;
|
||||
me.importType = '';
|
||||
me.importTypeDisabled = false;
|
||||
}
|
||||
},
|
||||
handleSelectFile(file, fileList) {
|
||||
if (fileList.length > 1) {
|
||||
fileList.shift();
|
||||
}
|
||||
},
|
||||
beforeUpload(file) {
|
||||
let fileTypes = ['xls', 'xlsx'];
|
||||
if (fileTypes.indexOf(file.name.split('.')[1]) > -1) {
|
||||
return true;
|
||||
} else {
|
||||
this.$message.warning('请上传xls或xlsx文件;暂不支持其他类型文件导入');
|
||||
return false;
|
||||
}
|
||||
},
|
||||
doUpload(params) {
|
||||
let me = this;
|
||||
let file = params.file;
|
||||
let formData = new FormData();
|
||||
formData.append("file", file);
|
||||
formData.append("importType", me.importType);
|
||||
|
||||
let optionName, optionValue = '';
|
||||
if (me.importType == '1') {
|
||||
optionName = 'ROH_IMPORT_ST';
|
||||
} else if (me.importType == '2') {
|
||||
optionName = 'VERP_IMPORT_ST';
|
||||
} else if (me.importType == '3') {
|
||||
optionName = 'HALB_IMPORT_ST';
|
||||
} else if (me.importType == '4') {
|
||||
optionName = 'FERT_IMPORT_ST';
|
||||
}
|
||||
|
||||
if (!isBlank(optionName)) {
|
||||
for (let i = 0; i < me.ACTIVITY_OPTIONS.length; i++) {
|
||||
if (optionName === me.ACTIVITY_OPTIONS[i].optionName) {
|
||||
optionValue = me.ACTIVITY_OPTIONS[i].optionValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
formData.append("optionValue", optionValue);
|
||||
|
||||
showLoading();
|
||||
axios.post('/wms/initial-data/import-document', formData).then(function (response) {
|
||||
hideLoading();
|
||||
me.$refs.upload.clearFiles();
|
||||
let message = response.data.data;
|
||||
if (isBlank(message)) {
|
||||
me.resultMessage = '导入成功';
|
||||
return me.$message.success('导入成功');
|
||||
} else if (message.startsWith("S")) {
|
||||
me.resultMessage = message.substring(1, message.length);
|
||||
return me.$message.success('导入成功');
|
||||
} else {
|
||||
me.resultMessage = message;
|
||||
return me.$message.error('导入失败');
|
||||
}
|
||||
}).catch(function (error) {
|
||||
hideLoading();
|
||||
console.log(error);
|
||||
});
|
||||
|
||||
},
|
||||
exportDocumentTemplate() {
|
||||
let me = this;
|
||||
if (isBlank(me.site)) {
|
||||
me.$message.warning('站点丢失请刷新界面');
|
||||
return false;
|
||||
}
|
||||
if (isBlank(me.importType)) {
|
||||
me.$message.warning('请选择导入类型');
|
||||
return false;
|
||||
}
|
||||
let fileName = '';
|
||||
switch (me.importType) {
|
||||
case '1':
|
||||
fileName = '原材料/包材库存导入';
|
||||
break;
|
||||
case '2':
|
||||
fileName = '五金备件库存导入';
|
||||
break;
|
||||
/*case '3':
|
||||
fileName = '半成品库存导入';
|
||||
break;*/
|
||||
/* case '4':
|
||||
fileName = '成品库存导入';
|
||||
break;
|
||||
case '5':
|
||||
fileName = '更新库存生产日期';
|
||||
break;*/
|
||||
case '6':
|
||||
fileName = '临时半成品库存导入';
|
||||
break;
|
||||
case '7':
|
||||
fileName = '载具主数据导入';
|
||||
break;
|
||||
case '8':
|
||||
fileName = '货格主数据导入';
|
||||
break;
|
||||
/* case '9':
|
||||
fileName = '采购成品导入';
|
||||
break;
|
||||
case '10':
|
||||
fileName = '销售退货(期初前)导入';
|
||||
break;*/
|
||||
case '11':
|
||||
fileName = '存储位置导入';
|
||||
break;
|
||||
case '12':
|
||||
fileName = '库存说明导入';
|
||||
break;
|
||||
case '13':
|
||||
fileName = '角色区域绑定信息导入';
|
||||
break;
|
||||
case '14':
|
||||
fileName = '原材料/包材盘盈导入';
|
||||
break;
|
||||
case '15':
|
||||
fileName = '原材料/包材盘亏导入';
|
||||
break;
|
||||
case '16':
|
||||
fileName = '五金备件盘盈导入';
|
||||
break;
|
||||
case '17':
|
||||
fileName = '五金备件盘亏导入';
|
||||
break;
|
||||
case '18':
|
||||
fileName = '成品盘盈导入';
|
||||
break;
|
||||
case '19':
|
||||
fileName = '成品盘亏导入';
|
||||
break;
|
||||
case '20':
|
||||
fileName = '库存&质检数据导入';
|
||||
break;
|
||||
case '21':
|
||||
fileName = '物料安全库存导入';
|
||||
break;
|
||||
case '22':
|
||||
fileName = '成本中心领料单导入';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
this.downBlobFile("/wms/initial-data/export-document-template", {importType: me.importType}, fileName + '模板.xlsx');
|
||||
},
|
||||
doSubmit() {
|
||||
let me = this;
|
||||
if (isBlank(me.site)) {
|
||||
me.$message.warning('站点丢失请刷新界面');
|
||||
return false;
|
||||
}
|
||||
if (isBlank(me.importType)) {
|
||||
me.$message.warning('请选择导入类型');
|
||||
return false;
|
||||
}
|
||||
let params = me.$refs.upload.uploadFiles;
|
||||
if (params == null || params == undefined || params.length < 1) {
|
||||
me.$message.warning('请选择文件');
|
||||
return false;
|
||||
} else {
|
||||
me.$refs.upload.submit();
|
||||
}
|
||||
},
|
||||
doClear() {
|
||||
this.importType = '';
|
||||
this.resultMessage = '';
|
||||
this.$refs.upload.clearFiles();
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
242
src/views/wms/inventory-adjustment/index.vue
Normal file
242
src/views/wms/inventory-adjustment/index.vue
Normal file
@ -0,0 +1,242 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<input-select-dialog :modal-obj="inventoryIdDialogObj" :modal-fetch-fun='inventoryIdDialogFetchFun' :modal-show.sync="inventoryIdDialogVisible" @inputDialogSelected="inventoryIdSelected"></input-select-dialog>
|
||||
<basic-container style="margin-top: -20px">
|
||||
<el-form ref="formObj" :rules="rules" :model="formObj" label-width="100px">
|
||||
<el-row :gutter="10">
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="站点:" prop="site">
|
||||
<el-input placeHolder="站点" v-model="formObj.site" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="1">
|
||||
<el-form-item label="条码:" prop="inventoryId">
|
||||
<el-input v-model="formObj.inventoryId" placeHolder="条码" autofocus
|
||||
@keyup.enter.native="doSearch(formObj.inventoryId)">
|
||||
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
|
||||
<el-button slot="append" icon="el-icon-search"
|
||||
@click.stop="showInventoryIdDialog()"></el-button>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table :data="formObj.inventoryList" border>
|
||||
<el-table-column prop="inventoryId" label="条码">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.inventoryId}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="qty" label="库存数量">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.qty}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="qtyOnHand" label="调整数量为">
|
||||
<template slot-scope="scope">
|
||||
<input v-model="scope.row.qtyOnHand" :disabled="scope.row.isUpdate === 'true' ? true : false"></input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="adjustmentReason" label="调整原因">
|
||||
<template slot-scope="scope">
|
||||
<el-select placeHolder="请选择" v-model="scope.row.adjustmentReason" :disabled="scope.row.isUpdate === 'true' ? true : false">
|
||||
<el-option label="盘点" value="盘点"/>
|
||||
<el-option label="线下处理" value="线下处理"/>
|
||||
<el-option label="误产出" value="误产出"/>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="操作" width="60">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="danger" @click="removeInventoryList(scope.row,scope.$index)" :disabled="scope.row.isUpdate === 'true' ? true : false">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div v-if="this.formObj.inventoryList.length != 0" style="width: 100%;display: flex;flex-direction: column;align-items: center;justify-content: center;">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="10">
|
||||
<el-button size="medium" type="primary" @click="doUpdate('formObj')">提交</el-button>
|
||||
</el-col>
|
||||
<el-col :span="10">
|
||||
<el-button size="medium" type="primary" @click="doClear('formObj')">清除</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-form>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {fetchList, getByCode, putObj} from '@/api/wms/inventory'
|
||||
import {hideLoading} from '@/const/loading'
|
||||
import {isBlank} from "@/util/string"
|
||||
import {mapGetters} from 'vuex'
|
||||
import {getStore} from "@/util/store";
|
||||
|
||||
export default {
|
||||
name: "inventory_adjustment",
|
||||
data(){
|
||||
return {
|
||||
formObj: {},
|
||||
inventoryIdDialogVisible : false,
|
||||
initData: {
|
||||
handle: "",
|
||||
site: getStore({ name: 'tenantId' }),
|
||||
inventoryId: "",
|
||||
inventoryList: [],
|
||||
},
|
||||
rules: {
|
||||
inventoryId: [
|
||||
{ required: true, message: '请输入库存标识' }
|
||||
],
|
||||
},
|
||||
inventoryIdDialogFetchFun: fetchList,
|
||||
inventoryIdDialogObj: {
|
||||
condition: "searchText",
|
||||
tableColumn: [
|
||||
{prop: "inventoryId", label: "库存标识"},
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.formObj = Object.assign({}, this.initData)
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['permissions']),
|
||||
permissionList() {
|
||||
return {
|
||||
|
||||
};
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
//显示操作弹窗框
|
||||
showInventoryIdDialog() {
|
||||
this.inventoryIdDialogVisible = true
|
||||
},
|
||||
inventoryIdSelected(row) {
|
||||
let me = this
|
||||
me.formObj.inventoryId = row.inventoryId
|
||||
if(me.formObj.inventoryList && me.formObj.inventoryList.length > 0) {
|
||||
for (let i = 0; i < me.formObj.inventoryList.length; i++) {
|
||||
if (me.formObj.inventoryList[i].inventoryId == me.formObj.inventoryId){
|
||||
me.formObj.inventoryId = ""
|
||||
me.$message.error("不可重复扫描同一条码")
|
||||
me.formObj.inventoryId = ""
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
getByCode(me.formObj.inventoryId).then(res => {
|
||||
if (!me.formObj.inventoryList) {
|
||||
me.formObj.inventoryList = []
|
||||
}
|
||||
if (res.data.code == 0) {
|
||||
let obj = Object.assign({}, {
|
||||
"handle": res.data.data.handle,
|
||||
"inventoryId": res.data.data.inventoryId,
|
||||
"qty": res.data.data.qtyOnHand,
|
||||
"qtyOnHand": "",
|
||||
"adjustmentReason": "",
|
||||
"isUpdate": "",
|
||||
})
|
||||
me.formObj.inventoryList.unshift(obj);
|
||||
me.formObj.inventoryId = ""
|
||||
}
|
||||
})
|
||||
},
|
||||
doSearch(){
|
||||
let me = this
|
||||
let code = me.formObj.inventoryId;
|
||||
if (isBlank(code)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
return;
|
||||
};
|
||||
if(me.formObj.inventoryList && me.formObj.inventoryList.length > 0) {
|
||||
for (let i = 0; i < me.formObj.inventoryList.length; i++) {
|
||||
if (me.formObj.inventoryList[i].inventoryId == me.formObj.inventoryId){
|
||||
me.formObj.inventoryId = ""
|
||||
me.$message.error("不可重复扫描同一条码")
|
||||
me.formObj.inventoryId = ""
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
getByCode(code).then(res => {
|
||||
if(!res.data.data.inventoryId || res.data.data.inventoryId == ""){
|
||||
return me.$message.error("未检索到此条码")
|
||||
}
|
||||
if (!me.formObj.inventoryList) {
|
||||
me.formObj.inventoryList = []
|
||||
}
|
||||
if (res.data.code == 0) {
|
||||
let obj = Object.assign({}, {
|
||||
"handle": res.data.data.handle,
|
||||
"inventoryId": res.data.data.inventoryId,
|
||||
"qty": res.data.data.qtyOnHand,
|
||||
"qtyOnHand": "",
|
||||
"adjustmentReason": "",
|
||||
"isUpdate": "",
|
||||
})
|
||||
me.formObj.inventoryList.unshift(obj);
|
||||
me.formObj.inventoryId = ""
|
||||
}
|
||||
})
|
||||
},
|
||||
doUpdate(formName){
|
||||
let me = this
|
||||
for (let i = 0; i < me.formObj.inventoryList.length; i++) {
|
||||
if (me.formObj.inventoryList[i].qtyOnHand == ""){
|
||||
setTimeout(() => {
|
||||
this.$message.error('条码'+ me.formObj.inventoryList[i].inventoryId +'的调整数量为空')
|
||||
}, 500);
|
||||
continue
|
||||
}
|
||||
if (me.formObj.inventoryList[i].adjustmentReason == ""){
|
||||
setTimeout(() => {
|
||||
this.$message.error('条码'+ me.formObj.inventoryList[i].inventoryId +'的调整原因为空')
|
||||
}, 500);
|
||||
continue
|
||||
}
|
||||
if (me.formObj.inventoryList[i].qtyOnHand == me.formObj.inventoryList[i].qty){
|
||||
setTimeout(() => {
|
||||
this.$message.error('条码'+ me.formObj.inventoryList[i].inventoryId +'的调整数量不能等于库存数量')
|
||||
}, 500);
|
||||
continue
|
||||
}
|
||||
if(me.formObj.inventoryList[i].isUpdate == "true")
|
||||
{
|
||||
continue
|
||||
}
|
||||
putObj(me.formObj.inventoryList[i]).then(respData => {
|
||||
hideLoading()
|
||||
me.formObj.inventoryList[i].isUpdate = "true"
|
||||
this.$message.success('条码'+ me.formObj.inventoryList[i].inventoryId +'提交成功')
|
||||
}).catch(error => {
|
||||
hideLoading()
|
||||
});
|
||||
this.$forceUpdate()
|
||||
}
|
||||
},
|
||||
doClear(retainData) {
|
||||
let me = this
|
||||
me.formObj = retainData ? Object.assign({}, this.initData, retainData) : Object.assign({}, this.initData)
|
||||
},
|
||||
removeInventoryList(row, index) {
|
||||
this.formObj.inventoryList.splice(index, 1)
|
||||
},
|
||||
doClear(){
|
||||
let me = this
|
||||
me.formObj.handle = ""
|
||||
me.formObj.site = getStore({ name: 'tenantId' })
|
||||
me.formObj.inventoryId = ""
|
||||
me.formObj.inventoryList = []
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
715
src/views/wms/inventory-allocation/index.vue
Normal file
715
src/views/wms/inventory-allocation/index.vue
Normal file
@ -0,0 +1,715 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<input-select-dialog :modal-obj='productionRequisitionDialogObj'
|
||||
:modal-fetch-fun='productionRequisitionDialogFetchFun'
|
||||
:modal-show.sync="productionRequisitionDialogVisible"
|
||||
@inputDialogSelected="productionRequisitionSelect" ref="documentDialog">
|
||||
</input-select-dialog>
|
||||
<input-select-dialog :modal-obj='storageLocationDialogObj' :modal-fetch-fun='storageLocationDialogFetchFun'
|
||||
:modal-show.sync="storageLocationDialogVisible" @inputDialogSelected="storageLocationSelect">
|
||||
</input-select-dialog>
|
||||
<basic-container>
|
||||
<el-form ref="formObj" :model="formObj" label-width="auto">
|
||||
<el-row :gutter="10">
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="站点:" prop="site">
|
||||
<el-input placeHolder="站点" v-model="formObj.site" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item prop="documentNo">
|
||||
<el-input v-model="formObj.documentNo" placeholder="单据号" autofocus
|
||||
@keyup.enter.native="scanProductionRequisitionOrder">
|
||||
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
|
||||
<el-button slot="append" icon="el-icon-search"
|
||||
@click.stop="showProductionRequisitionDialog"></el-button>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table :data="formObj.itemList" border>
|
||||
<el-table-column label="物料" prop="item">
|
||||
</el-table-column>
|
||||
<el-table-column label="物料描述" prop="itemDescription">
|
||||
</el-table-column>
|
||||
<el-table-column label="来源仓" prop="sourceWarehouse">
|
||||
</el-table-column>
|
||||
<el-table-column label="目标仓" prop="targetWarehouse">
|
||||
</el-table-column>
|
||||
<el-table-column label="需求数量" prop="applicationsQuantity">
|
||||
</el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="primary" @click="showItemDialog(scope.$index, scope.row)">出库执行
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态">
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.state === 'CLOSE'" type="warning" disable-transitions>
|
||||
已执行
|
||||
</el-tag>
|
||||
<el-tag v-if="scope.row.state === 'SUBMIT'" disable-transitions>
|
||||
待执行
|
||||
</el-tag>
|
||||
<el-tag v-if="scope.row.state === 'SAVING'" type="success" disable-transitions>
|
||||
已保存
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
|
||||
<div style="margin-top: 10px;">
|
||||
<el-button type="primary" @click="submit">提交</el-button>
|
||||
<el-button type="warning" @click="doClear">清除</el-button>
|
||||
</div>
|
||||
|
||||
<el-dialog :visible.sync="dialogItemType1FormVisible" center fullscreen @close="backUpCodeList">
|
||||
<div style="margin-top: 10px;">
|
||||
<el-form :model="itemForm" label-width="auto">
|
||||
<el-descriptions :column="1" border :labelStyle="lableWidth">
|
||||
<el-descriptions-item label="单据号">
|
||||
{{ itemForm.documentNo }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="物料">
|
||||
{{ itemForm.item }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="物料描述">
|
||||
{{ itemForm.itemDescription }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="到货批次">
|
||||
{{ itemForm.batch }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="来源仓">
|
||||
{{ itemForm.sourceWarehouse }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="目标仓">
|
||||
{{ itemForm.targetWarehouse }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="需求数量">
|
||||
{{ itemForm.applicationsQuantity }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="汇总数量">
|
||||
{{ itemForm.sumQuantity }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="单位">
|
||||
{{ itemForm.unitOfMeasure }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="批次">
|
||||
{{ itemForm.batch }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<div style="margin-top: 10px;">
|
||||
<el-form-item prop="code">
|
||||
<el-input v-model="itemForm.code" placeholder="扫描条码" autofocus
|
||||
@keyup.enter.native="scanCode" :disabled="isUse">
|
||||
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-table :data="itemForm.inventoryList" border>
|
||||
<el-table-column label="序号" prop="seq"></el-table-column>
|
||||
<el-table-column label="条码" prop="inventoryIdOrCarrier"></el-table-column>
|
||||
<el-table-column label="数量" prop="inventoryQty"></el-table-column>
|
||||
<el-table-column label="载具类型" prop="type" v-if="itemForm.itemType === 'FERT'"></el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="primary" @click="delRow(scope.$index, scope.row)"
|
||||
:disabled="scope.row.isScan === 'N'">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="saveItemType1" :disabled="isUse">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="dialogItemType2FormVisible" center fullscreen>
|
||||
<div style="margin-top: 10px;">
|
||||
<el-form :model="itemForm" label-width="auto">
|
||||
<el-descriptions :column="1" border :labelStyle="lableWidth">
|
||||
<el-descriptions-item label="单据号">
|
||||
{{ itemForm.documentNo }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="物料">
|
||||
{{ itemForm.item }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="物料描述">
|
||||
{{ itemForm.itemDescription }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="来源仓">
|
||||
{{ itemForm.sourceWarehouse }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="目标仓">
|
||||
{{ itemForm.targetWarehouse }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="调拨数量">
|
||||
<el-input type="number" v-model="itemForm.sumQuantity" :disabled="isUse"></el-input>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="单位">
|
||||
{{ itemForm.unitOfMeasure }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="来源存储区域">
|
||||
<el-input v-model="itemForm.sourceLocation" :disabled="isUse">
|
||||
<i slot="suffix" class="el-input__icon el-icon-search"
|
||||
@click.stop="showStorageLocationDialog"></i>
|
||||
</el-input>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="saveItemType2" :disabled="isUse">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import {
|
||||
fetchList as fetchProductionRequisitionList,
|
||||
getDocumentDetail,
|
||||
submit,
|
||||
getInventoryQty,
|
||||
getItemInventory
|
||||
} from "@/api/wms/inventory-allocation";
|
||||
import {fetchList as fetchStorageLocationList, getStorageLocationPageBycode} from '@/api/wms/storage-location';
|
||||
import {getInventoryQtyNew} from "@/api/wms/production-out-inventory";
|
||||
import {isBlank} from "@/util/string";
|
||||
import {hideLoading, showLoading} from '@/const/loading';
|
||||
import {getStore} from '@/util/store';
|
||||
import {add} from '@/util/bigNumber';
|
||||
import {listByActivityId} from "@/api/admin/activity-option";
|
||||
import {
|
||||
mapGetters
|
||||
} from 'vuex';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
lableWidth: {
|
||||
'width': '150px'
|
||||
},
|
||||
isUse: false,
|
||||
formObj: {},
|
||||
documentNo: "",
|
||||
itemForm: {},
|
||||
submitList: [],
|
||||
codeList: [],
|
||||
storageLocationList: "",
|
||||
verifyDefaultStorageBin: "",
|
||||
dialogItemType1FormVisible: false,
|
||||
dialogItemType2FormVisible: false,
|
||||
productionRequisitionDialogFetchFun: fetchProductionRequisitionList,
|
||||
productionRequisitionDialogVisible: false,
|
||||
productionRequisitionDialogObj: {
|
||||
"condition": "documentNo",
|
||||
tableColumn: [
|
||||
{prop: "documentNo", label: "单据"},
|
||||
{
|
||||
prop: "state", label: "状态", formatter: (row, column, cellValue, index) => {
|
||||
if (cellValue == "SUBMIT") {
|
||||
return "提交";
|
||||
}
|
||||
if (cellValue == "CLOSE") {
|
||||
return "关闭";
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
storageLocationDialogVisible: false,
|
||||
storageLocationDialogFetchFun: fetchStorageLocationList,
|
||||
storageLocationDialogObj: {
|
||||
"condition": "storageLocation",
|
||||
tableColumn: [
|
||||
{prop: "storageLocation", label: "存储位置", width: "200"},
|
||||
{prop: "description", label: "描述"}
|
||||
]
|
||||
},
|
||||
initData: {
|
||||
documentNo: "",
|
||||
itemList: [],
|
||||
site: getStore({name: 'tenantId'})
|
||||
},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.wms_document_save = this.permissions["wms_document_save"];
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.itemForm = Object.assign({}, {"inventoryList": [], "sumQuantity": 0, "code": "", "sourceLocation": ""});
|
||||
this.documentNo = "";
|
||||
this.codeList = [];
|
||||
},
|
||||
|
||||
beforeRouteEnter(to, from, next) {
|
||||
next(vm => {
|
||||
try {
|
||||
//获取作业规则
|
||||
let me = vm;
|
||||
let activityId = me.$route.query.ACTIVITY_ID;
|
||||
listByActivityId(activityId).then(response => {
|
||||
|
||||
if (response.data.code != 0) {
|
||||
return me.$message.error(response.data.msg);
|
||||
}
|
||||
let data = response.data.data;
|
||||
|
||||
if (data && data.length > 0) {
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() === "IS_DOWN") {
|
||||
me.verifyDefaultStorageBin = isBlank(data[i].optionValue) ? true : data[i].optionValue === "Y";
|
||||
}
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() === "STORAGE_LOCATION") {
|
||||
me.storageLocationList = data[i].optionValue;
|
||||
}
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() === "FINISH_QTY_CONTROL") {
|
||||
me.finishQtyControl = data[i].optionValue;
|
||||
}
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() === "ALLOW_ONE_SUBMIT") {
|
||||
me.allowOneSubmit = data[i].optionValue === "Y";
|
||||
}
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() === "STATUS_NOT_STUCK") {
|
||||
me.statusNotStuck = data[i].optionValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}).catch(e => {
|
||||
console.log(e);
|
||||
});
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapGetters(["permissions"]),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
||||
//存储区域弹出框
|
||||
showStorageLocationDialog() {
|
||||
let me = this;
|
||||
me.storageLocationDialogVisible = true;
|
||||
if (this.storageLocationList != "") {
|
||||
this.storageLocationDialogFetchFun = getStorageLocationPageBycode;
|
||||
this.storageLocationDialogObj.queryParam = {"str": this.storageLocationList};
|
||||
} else {
|
||||
me.storageLocationDialogObj.queryParam = {"erpStorageLocation": this.itemForm.sourceWarehouse};
|
||||
}
|
||||
|
||||
},
|
||||
storageLocationSelect(row) {
|
||||
let me = this;
|
||||
me.itemForm.sourceLocation = row.storageLocation;
|
||||
console.log(me.itemForm);
|
||||
},
|
||||
//单据号弹出框
|
||||
showProductionRequisitionDialog() {
|
||||
let me = this;
|
||||
me.productionRequisitionDialogVisible = true;
|
||||
me.$refs.documentDialog.clear();
|
||||
me.productionRequisitionDialogObj.queryParam = {"documentType": "LOCAL_TRANSFER"};
|
||||
},
|
||||
|
||||
productionRequisitionSelect(row) {
|
||||
let me = this;
|
||||
me.formObj.itemList = [];
|
||||
me.submitList = [];
|
||||
me.formObj.documentNo = row.documentNo;
|
||||
me.documentNo = me.formObj.documentNo;
|
||||
getDocumentDetail(me.formObj.documentNo).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
let obj = Object.assign({}, {
|
||||
"item": res.data.data[i].item,
|
||||
"applicationsQuantity": res.data.data[i].applicationsQuantity,
|
||||
"documentNo": me.documentNo,
|
||||
"isPack": res.data.data[i].isPack,
|
||||
"itemDescription": res.data.data[i].itemDescription,
|
||||
"seq": res.data.data[i].seq,
|
||||
"sourceWarehouse": res.data.data[i].sourceWarehouse,
|
||||
"targetWarehouse": res.data.data[i].targetWarehouse,
|
||||
"unitOfMeasure": res.data.data[i].unitOfMeasure,
|
||||
"itemGroup": res.data.data[i].itemGroup,
|
||||
"state": res.data.data[i].state,
|
||||
"handle": res.data.data[i].handle,
|
||||
"documentType": res.data.data[i].documentType,
|
||||
"batch": res.data.data[i].batch,
|
||||
"sourceLocation": res.data.data[i].storageLocation,
|
||||
"itemType": res.data.data[i].itemType,
|
||||
"batch": res.data.data[i].batch,
|
||||
});
|
||||
me.formObj.itemList.push(obj);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
//扫描单据号
|
||||
scanProductionRequisitionOrder() {
|
||||
let me = this;
|
||||
let code = me.formObj.documentNo;
|
||||
if (isBlank(code)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
return;
|
||||
}
|
||||
if (me.documentNo === code) {
|
||||
me.$message.error("不可重复扫描");
|
||||
return;
|
||||
}
|
||||
me.formObj.itemList = [];
|
||||
me.submitList = [];
|
||||
getDocumentDetail(me.formObj.documentNo).then(res => {
|
||||
if (res.data.code == 0) {
|
||||
if (res.data.data[0].documentType != "LOCAL_TRANSFER") {
|
||||
return me.$message.error("单据类型不是库存调拨");
|
||||
}
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
let obj = Object.assign({}, {
|
||||
"item": res.data.data[i].item,
|
||||
"applicationsQuantity": res.data.data[i].applicationsQuantity,
|
||||
"documentNo": me.formObj.documentNo,
|
||||
"isPack": res.data.data[i].isPack,
|
||||
"itemDescription": res.data.data[i].itemDescription,
|
||||
"seq": res.data.data[i].seq,
|
||||
"sourceWarehouse": res.data.data[i].sourceWarehouse,
|
||||
"targetWarehouse": res.data.data[i].targetWarehouse,
|
||||
"unitOfMeasure": res.data.data[i].unitOfMeasure,
|
||||
"itemGroup": res.data.data[i].itemGroup,
|
||||
"state": res.data.data[i].state,
|
||||
"handle": res.data.data[i].handle,
|
||||
"documentType": res.data.data[i].documentType,
|
||||
"sourceLocation": res.data.data[i].storageLocation,
|
||||
"itemType": res.data.data[i].itemType,
|
||||
"batch": res.data.data[i].batch,
|
||||
});
|
||||
me.formObj.itemList.push(obj);
|
||||
me.documentNo = me.formObj.documentNo;
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
showItemDialog(index, row) {
|
||||
//判断是物料类型弹出不同的表单
|
||||
let me = this;
|
||||
|
||||
//判断行项目是否已经关闭,关闭则不可扫描条码和保存
|
||||
this.isUse = row.state === "CLOSE";
|
||||
|
||||
if (row.itemType === 'ROH' || row.itemType === 'VERP' || row.itemType === 'FERT') {
|
||||
//获取汇总数量
|
||||
let obj = Object.assign({
|
||||
"inventoryList": [],
|
||||
"code": "",
|
||||
"sumQuantity": 0,
|
||||
"storageLocation": ""
|
||||
}, row);
|
||||
if (me.submitList.length > 0) {
|
||||
let saveObj = me.submitList.find(o => o.seq === row.seq);
|
||||
if (saveObj) {
|
||||
obj = Object.assign({}, saveObj);
|
||||
obj.inventoryList = saveObj.inventoryList.slice();
|
||||
}
|
||||
}
|
||||
me.itemForm = obj;
|
||||
me.dialogItemType1FormVisible = true;
|
||||
me.loadSaveData(row);
|
||||
} else if (row.itemType === 'KMAT') {
|
||||
//获取汇总数量
|
||||
let obj = Object.assign({
|
||||
"inventoryList": [],
|
||||
"sumQuantity": row.applicationsQuantity,
|
||||
"storageLocation": ""
|
||||
}, row);
|
||||
if (me.submitList.length > 0) {
|
||||
let saveObj = me.submitList.find(o => o.seq === row.seq);
|
||||
if (saveObj) {
|
||||
obj = Object.assign({}, saveObj);
|
||||
obj.inventoryList = saveObj.inventoryList.slice();
|
||||
}
|
||||
}
|
||||
me.itemForm = obj;
|
||||
me.dialogItemType2FormVisible = true;
|
||||
me.loadMatSaveData(row);
|
||||
}
|
||||
},
|
||||
|
||||
loadMatSaveData(row) {
|
||||
let me = this;
|
||||
getItemInventory(row).then(res => {
|
||||
let sumInventoryQty = 0;
|
||||
if (res.data.code === 0 && res.data.data.length > 0) {
|
||||
me.itemForm.inventoryList = [];
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
sumInventoryQty = add(sumInventoryQty, res.data.data[i].inventoryQty);
|
||||
}
|
||||
me.$set(me.itemForm, "sumQuantity", sumInventoryQty);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
loadSaveData(row) {
|
||||
let me = this;
|
||||
getItemInventory(row).then(res => {
|
||||
let sumInventoryQty = 0;
|
||||
if (res.data.code === 0 && res.data.data.length > 0) {
|
||||
let array = [], length = res.data.data.length;
|
||||
for (let data of res.data.data) {
|
||||
sumInventoryQty = add(sumInventoryQty, data.inventoryQty);
|
||||
array.push({
|
||||
"inventoryIdOrCarrier": data.inventoryIdOrCarrier,
|
||||
"inventoryQty": data.inventoryQty,
|
||||
"isScan": "N",
|
||||
"seq": length--
|
||||
});
|
||||
}
|
||||
me.$set(me.itemForm, "inventoryList", array);
|
||||
me.$set(me.itemForm, "sumQuantity", sumInventoryQty);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
getInventoryList() {
|
||||
let me = this;
|
||||
let obj = Object.assign({}, {
|
||||
"item": me.itemForm.item,
|
||||
"sourceWarehouse": me.itemForm.sourceWarehouse,
|
||||
"inventoryIdOrCarrier": me.itemForm.code,
|
||||
"batch": me.itemForm.batch,
|
||||
"verifyDefaultStorageBin": me.verifyDefaultStorageBin,
|
||||
"checkStatus": isBlank(me.statusNotStuck) || me.statusNotStuck.indexOf(me.itemForm.itemType) < 0,
|
||||
"documentType": me.itemForm.documentType,
|
||||
});
|
||||
showLoading();
|
||||
getInventoryQtyNew(obj).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code === 0) {
|
||||
//库存总数大于需求数量
|
||||
let data = res.data.data;
|
||||
let qty = 0, rowArray = [], codeArray = [];
|
||||
let length = me.itemForm.inventoryList.length;
|
||||
if (length > 0) {
|
||||
data = data.filter(o => {
|
||||
for (let code of me.codeList) {
|
||||
if (code === o.inventoryIdOrCarrier || code === o.carrier) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
if (data.length === 0) {
|
||||
me.$message.error("不可重复扫描");
|
||||
} else {
|
||||
for (let row of data) {
|
||||
let inventoryQty = row.inventoryQty;
|
||||
qty = add(qty, inventoryQty);
|
||||
rowArray.push({
|
||||
"inventoryIdOrCarrier": row.inventoryIdOrCarrier,
|
||||
"inventoryQty": row.inventoryQty,
|
||||
"group": row.group,
|
||||
"carrier": row.carrier,
|
||||
"isScan": "Y",
|
||||
"type": row.type,
|
||||
"seq": ++length,
|
||||
});
|
||||
codeArray.push(row.inventoryIdOrCarrier);
|
||||
}
|
||||
if (!isBlank(data[0].carrier) && data[0].inventoryIdOrCarrier !== data[0].carrier) {
|
||||
codeArray.push(data[0].carrier);
|
||||
}
|
||||
if ((add(qty, me.itemForm.sumQuantity) > me.itemForm.applicationsQuantity) && me.finishQtyControl !== "2") {
|
||||
me.$message.error("汇总数量大于需求数量");
|
||||
} else {
|
||||
rowArray.reverse();
|
||||
me.itemForm.sumQuantity = add(me.itemForm.sumQuantity, qty);
|
||||
me.itemForm.inventoryList = rowArray.concat(me.itemForm.inventoryList);
|
||||
me.codeList = me.codeList.concat(codeArray);
|
||||
me.itemForm.code = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}).catch(e => hideLoading());
|
||||
},
|
||||
|
||||
//扫描条码
|
||||
scanCode() {
|
||||
let me = this;
|
||||
if (isBlank(me.itemForm.code)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
return;
|
||||
}
|
||||
if (me.itemForm.inventoryList.length > 0) {
|
||||
if (me.codeList.includes(me.itemForm.code)) {
|
||||
me.$message.error("不可重复扫描");
|
||||
return;
|
||||
}
|
||||
this.getInventoryList();
|
||||
} else {
|
||||
this.getInventoryList();
|
||||
}
|
||||
},
|
||||
|
||||
submit() {
|
||||
let me = this;
|
||||
if (me.submitList.length > 0) {
|
||||
if (!me.allowOneSubmit) {
|
||||
for (let row of me.formObj.itemList) {
|
||||
if (row.state !== "SAVING") {
|
||||
if (row.state === "CLOSE") {
|
||||
me.$message.error("行项目" + row.seq + "已关闭,不可以提交,请修改作业规则");
|
||||
} else {
|
||||
me.$message.error("行项目" + row.seq + "无保存信息可以提交,请确认");
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < me.submitList.length; i++) {
|
||||
let list = me.submitList[i].inventoryList;
|
||||
for (let j = 0; j < list.length; j++) {
|
||||
if (list[j].isScan === "N") {
|
||||
me.submitList[i].inventoryList.splice(j, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
showLoading();
|
||||
submit(me.submitList).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code === 0) {
|
||||
me.$message.success("提交成功");
|
||||
me.doClear();
|
||||
}
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
} else {
|
||||
me.$message.error("无已保存的行项目可以提交,请确认");
|
||||
}
|
||||
},
|
||||
|
||||
saveItemType1() {
|
||||
let me = this;
|
||||
if (me.itemForm.state === "CLOSE") {
|
||||
me.$message.error("此行项目已关闭");
|
||||
} else if (me.itemForm.inventoryList.length === 0) {
|
||||
me.$message.error("无信息可以保存,请点击返回按钮");
|
||||
} else if (me.itemForm.sumQuantity !== me.itemForm.applicationsQuantity && isBlank(me.finishQtyControl)) {
|
||||
me.$message.error("汇总数量不等于需求数量,请确认");
|
||||
} else {
|
||||
me.backUpList = [];
|
||||
let fun = () => {
|
||||
let obj = me.itemForm;
|
||||
obj.state = "SAVING";
|
||||
if (me.submitList.length > 0) {
|
||||
let index = me.submitList.findIndex(o => o.seq === obj.seq);
|
||||
if (index >= 0) {
|
||||
me.submitList.splice(index, 1, obj);
|
||||
} else {
|
||||
me.submitList.push(obj);
|
||||
}
|
||||
} else {
|
||||
me.submitList.push(obj);
|
||||
}
|
||||
me.$set(me.formObj.itemList.find(o => o.seq === obj.seq), "state", obj.state);
|
||||
me.dialogItemType1FormVisible = false;
|
||||
};
|
||||
fun();
|
||||
}
|
||||
},
|
||||
|
||||
saveItemType2() {
|
||||
let me = this;
|
||||
if (me.itemForm.state === "CLOSE") {
|
||||
me.$message.error("此行项目已关闭");
|
||||
} else if (isBlank(me.itemForm.sourceLocation)) {
|
||||
me.$message.error("无信息可以保存,请点击返回按钮");
|
||||
} else {
|
||||
me.itemForm.inventoryList = [{
|
||||
"inventoryQty": me.itemForm.sumQuantity
|
||||
}];
|
||||
let obj = me.itemForm;
|
||||
obj.state = "SAVING";
|
||||
if (me.submitList.length > 0) {
|
||||
let index = me.submitList.findIndex(o => o.seq === obj.seq);
|
||||
if (index >= 0) {
|
||||
me.submitList.splice(index, 1, obj);
|
||||
} else {
|
||||
me.submitList.push(obj);
|
||||
}
|
||||
} else {
|
||||
me.submitList.push(obj);
|
||||
}
|
||||
me.$set(me.formObj.itemList.find(o => o.seq === obj.seq), "state", obj.state);
|
||||
me.dialogItemType2FormVisible = false;
|
||||
}
|
||||
},
|
||||
|
||||
//清除页面信息
|
||||
doClear() {
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.itemForm = Object.assign({}, {"inventoryList": [], "sumQuantity": 0, "code": ""});
|
||||
this.documentNo = "";
|
||||
this.codeList = [];
|
||||
this.submitList = [];
|
||||
},
|
||||
|
||||
delRow(index, row) {
|
||||
let me = this;
|
||||
//删除已扫描过条码中集合的信息
|
||||
let inventoryList = me.itemForm.inventoryList, delList = [], delQty = 0;
|
||||
let groupOrCarrier = isBlank(row.group) ? row.carrier : row.group;
|
||||
if (!isBlank(groupOrCarrier)) {
|
||||
let startIndex = -1, endIndex = -1;
|
||||
for (let i = 0; i < inventoryList.length; i++) {
|
||||
if (startIndex < 0 && (inventoryList[i].group === groupOrCarrier || inventoryList[i].carrier === groupOrCarrier)) {
|
||||
startIndex = i;
|
||||
}
|
||||
if (startIndex >= 0 && (inventoryList[i].group === groupOrCarrier || inventoryList[i].carrier === groupOrCarrier)) {
|
||||
endIndex = i + 1;
|
||||
}
|
||||
}
|
||||
for (let delRow of me.itemForm.inventoryList.splice(startIndex, endIndex === -1 ? 1 : endIndex)) {
|
||||
delQty = add(delQty, row.inventoryQty);
|
||||
delList.push(delRow.inventoryIdOrCarrier);
|
||||
}
|
||||
if (!isBlank(row.carrier) && row.inventoryIdOrCarrier !== row.carrier) {
|
||||
delList.push(groupOrCarrier);
|
||||
}
|
||||
} else {
|
||||
delQty = row.inventoryQty;
|
||||
delList = me.itemForm.inventoryList.splice(index, 1).map(o => o.inventoryIdOrCarrier);
|
||||
}
|
||||
for (let i = 0; i < me.itemForm.inventoryList.length; i++) {
|
||||
me.itemForm.inventoryList[i].seq = me.itemForm.inventoryList.length - i;
|
||||
}
|
||||
me.codeList = me.codeList.filter(o => !delList.includes(o));
|
||||
if (me.itemForm.state === "SAVING") {
|
||||
me.backUpList = me.backUpList.concat(delList.filter(o => !me.backUpList.includes(o)));
|
||||
}
|
||||
me.itemForm.sumQuantity -= delQty;
|
||||
},
|
||||
|
||||
backUpCodeList() {
|
||||
let me = this;
|
||||
if (me.backUpList.length > 0) {
|
||||
me.codeList = me.codeList.concat(me.backUpList.filter(o => !me.codeList.includes(o)));
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
</script>
|
||||
430
src/views/wms/inventory-check-summary/index.vue
Normal file
430
src/views/wms/inventory-check-summary/index.vue
Normal file
@ -0,0 +1,430 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<input-select-dialog :modal-obj="inventoryCheckDialogObj" :modal-fetch-fun='inventoryCheckDialogFetchFun'
|
||||
:modal-show.sync="inventoryCheckDialogVisible"
|
||||
@inputDialogSelected="inventoryCheckSelected"></input-select-dialog>
|
||||
<input-select-dialog :modal-obj="erpStorageLocationDialogObj" :modal-fetch-fun='erpStorageLocationDialogFetchFun'
|
||||
:modal-show.sync="erpStorageLocationDialogVisible"
|
||||
@inputDialogSelected="erpStorageLocationSelected"></input-select-dialog>
|
||||
<input-select-dialog :modal-obj="itemDialogObj" :modal-fetch-fun='itemDialogFetchFun'
|
||||
:modal-show.sync="itemDialogVisible" @inputDialogSelected="itemSelected"></input-select-dialog>
|
||||
<basic-container style="margin-top: -20px">
|
||||
<c-top-bar :offset="50">
|
||||
<el-button v-if="inventory_check_summary" type="text" icon="el-icon-search" @click="doRetrive('formObj')">检索
|
||||
</el-button>
|
||||
<el-divider v-if="inventory_check_summary" direction="vertical"></el-divider>
|
||||
<el-button type="text" icon="el-icon-circle-close" @click="doClear()">清除</el-button>
|
||||
<el-divider direction="vertical"></el-divider>
|
||||
<el-button type="text" icon="el-icon-document" @click="doExport">导出</el-button>
|
||||
</c-top-bar>
|
||||
<el-form ref="formObj" :rules="rules" :model="formObj" label-width="100px">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="站点:" prop="site">
|
||||
<el-input placeHolder="站点" v-model="formObj.site" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="仓库:" prop="erpStorageLocation">
|
||||
<el-input placeHolder="仓库" v-model="formObj.erpStorageLocation"><i slot="suffix"
|
||||
class="el-input__icon el-icon-search"
|
||||
@click.stop="showErpStorageLocationDialog()"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="物料:" prop="item">
|
||||
<el-input placeHolder="物料" v-model="formObj.item" @blur="clickOutSide"><i slot="suffix"
|
||||
class="el-input__icon el-icon-search"
|
||||
@click.stop="showItemDialog()"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="物料描述:" prop="itemDesc">
|
||||
<el-input placeHolder="物料描述" v-model="formObj.itemDesc" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="盘点单号:" prop="checkNo">
|
||||
<el-input placeHolder="盘点单号" v-model="formObj.checkNo"><i slot="suffix"
|
||||
class="el-input__icon el-icon-search"
|
||||
@click.stop="showCheckNoDialog()"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="差异状态:" prop="profitAndLoss">
|
||||
<el-select placeHolder="请选择" v-model="formObj.profitAndLoss">
|
||||
<el-option label="全部" value="全部"/>
|
||||
<el-option label="盘盈" value="盘盈"/>
|
||||
<el-option label="相同" value="相同"/>
|
||||
<el-option label="盘亏" value="盘亏"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-tabs v-model="tabActiveName">
|
||||
<el-tab-pane label="盘点信息" name="wmsInventoryCheckDetailTab">
|
||||
<el-table size="mini" height="400" :data="formObj.inventoryCheckDetailList"
|
||||
@selection-change="handleSelectionChange" border style="width: 100%" highlight-current-row :cell-style="cellStyle">
|
||||
<el-table-column align="center" prop="sequence" label="顺序" width="50">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.sequence}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="storageLocation" label="货架号">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.storageLocation}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="storageLocationDesc" label="货架描述">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.storageLocationDesc}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="storageBin" label="货格号">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.storageBin}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="carrier1" label="托条码">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.carrier1}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="carrier1New" label="调整后托条码" >
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.carrier1New}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="carrier2Number" label="调整前箱数" width="90" v-if="formObj.checkNoMode === '1'"></el-table-column>
|
||||
<el-table-column align="center" prop="carrier2NumberNew" label="调整后箱数" width="90" v-if="formObj.checkNoMode === '1'"></el-table-column>
|
||||
<el-table-column align="center" prop="carrier2" label="箱条码" v-if="formObj.checkNoMode !== '1'"></el-table-column>
|
||||
<el-table-column align="center" prop="inventoryNumber" label="调整前卷数" width="90" v-if="formObj.checkNoMode === '1'"></el-table-column>
|
||||
<el-table-column align="center" prop="inventoryNumberNew" label="调整后卷数" width="90" v-if="formObj.checkNoMode === '1'"></el-table-column>
|
||||
<el-table-column align="center" prop="inventoryId" label="库存条码" v-if="formObj.checkNoMode === 'inventoryId'"></el-table-column>
|
||||
<el-table-column align="center" prop="item" label="物料">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.item}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="itemDesc" label="物料描述">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.itemDesc}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="qtyOnHand" label="盘点前数量" width="90">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.qtyOnHand}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="realQty" label="实际数量">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.realQty}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="diffQty" label="差异数量">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.diffQty}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="profitAndLoss" label="差异状态" filter-placement="bottom-end">
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.profitAndLoss === '相同'" :type="'primary'" disable-transitions>
|
||||
{{scope.row.profitAndLoss}}
|
||||
</el-tag>
|
||||
<el-tag v-if="scope.row.profitAndLoss === '盘亏'" :type="'danger'" disable-transitions>
|
||||
{{scope.row.profitAndLoss}}
|
||||
</el-tag>
|
||||
<el-tag v-if="scope.row.profitAndLoss === '盘盈'" :type="'success'" disable-transitions>
|
||||
{{scope.row.profitAndLoss}}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="unitOfMeasure" label="单位">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.unitOfMeasure}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="checkNoCreator" label="盘点用户">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.checkNoCreator}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="checkNoCreateTime" label="盘点时间">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.checkNoCreateTime}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="snapshotCreator" label="快照创建人">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.snapshotCreator}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="snapshotCreateTime" label="快照创建时间">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.snapshotCreateTime}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div style="width: 100%;display: flex;flex-direction: column;align-items: center;justify-content: center;">
|
||||
<el-pagination @current-change="handleCurrentChange"
|
||||
@size-change="handleSizeChange"
|
||||
:current-page.sync="page.current"
|
||||
:page-sizes="[10, 20, 50, 100, 200]"
|
||||
:page-size="page.size"
|
||||
layout="total, sizes, prev, pager, next, jumper" :total="page.total">
|
||||
</el-pagination>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-form>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {fetchErpStorageLocationList, fetchList, selectCheckNoSummary} from '@/api/wms/wms-inventory-check';
|
||||
import {fetchList as fetchItemList} from '@/api/mes/prd/item';
|
||||
import {hideLoading, showLoading} from '@/const/loading';
|
||||
import {isBlank} from "@/util/string";
|
||||
import {mapGetters} from 'vuex';
|
||||
import {getStore} from "@/util/store";
|
||||
import {trimHandle} from "@/util/handle";
|
||||
|
||||
export default {
|
||||
name: "wms-inventory-check_maintain",
|
||||
data() {
|
||||
return {
|
||||
tabActiveName: "wmsInventoryCheckDetailTab",
|
||||
formObj: {},
|
||||
inventory_check_summary: false,
|
||||
inventoryCheckDialogVisible: false,
|
||||
erpStorageLocationDialogVisible: false,
|
||||
itemDialogVisible: false,
|
||||
initData: {
|
||||
handle: "",
|
||||
site: getStore({name: 'tenantId'}),
|
||||
checkNo: "",
|
||||
erpStorageLocation: "",
|
||||
item: "",
|
||||
itemDesc: "",
|
||||
itemBo: "",
|
||||
profitAndLoss: "全部",
|
||||
inventoryCheckDetailList: [],
|
||||
},
|
||||
page: {
|
||||
total: 0,
|
||||
current: 1,
|
||||
size: 10
|
||||
},
|
||||
rules: {
|
||||
checkNo: [
|
||||
{required: true, message: '请输入盘点单号'}
|
||||
],
|
||||
},
|
||||
inventoryCheckDialogFetchFun: fetchList,
|
||||
erpStorageLocationDialogFetchFun: fetchErpStorageLocationList,
|
||||
itemDialogFetchFun: fetchItemList,
|
||||
inventoryCheckDialogObj: {
|
||||
condition: "searchText",
|
||||
tableColumn: [
|
||||
{prop: "checkNo", label: "盘点单号"},
|
||||
{prop: "checkNoStatus", label: "盘点单状态"},
|
||||
]
|
||||
},
|
||||
erpStorageLocationDialogObj: {
|
||||
condition: "searchText",
|
||||
tableColumn: [
|
||||
{prop: "erpStorageLocation", label: "ERP仓库编号"},
|
||||
]
|
||||
},
|
||||
itemDialogObj: {
|
||||
condition: "searchText",
|
||||
tableColumn: [
|
||||
{prop: "item", label: "物料"},
|
||||
{prop: "description", label: "描述"},
|
||||
]
|
||||
},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.inventory_check_summary = this.permissions['inventory_check_summary'];
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['permissions']),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleSelectionChange(val) {
|
||||
this.interfaceLog = val;
|
||||
},
|
||||
handleSizeChange(val) {
|
||||
this.page.size = val;
|
||||
this.page.current = 1;
|
||||
this.doRetrive('formObj');
|
||||
},
|
||||
//页面切换
|
||||
handleCurrentChange(val) {
|
||||
this.page.current = val;
|
||||
this.doRetrive('formObj');
|
||||
},
|
||||
//显示操作弹窗框
|
||||
showCheckNoDialog() {
|
||||
if (isBlank(this.formObj.erpStorageLocation)) {
|
||||
this.$message.warning('请先选择ERP仓库');
|
||||
return false;
|
||||
}
|
||||
this.inventoryCheckDialogObj.queryParam = {'erpStorageLocation': this.formObj.erpStorageLocation};
|
||||
this.inventoryCheckDialogVisible = true;
|
||||
},
|
||||
showErpStorageLocationDialog() {
|
||||
this.erpStorageLocationDialogVisible = true;
|
||||
},
|
||||
showItemDialog() {
|
||||
this.itemDialogVisible = true;
|
||||
},
|
||||
inventoryCheckSelected(row) {
|
||||
let me = this;
|
||||
me.formObj.checkNo = row.checkNo;
|
||||
me.formObj.checkNoStatus = row.checkNoStatus;
|
||||
},
|
||||
erpStorageLocationSelected(row) {
|
||||
let me = this;
|
||||
me.formObj.erpStorageLocation = row.erpStorageLocation;
|
||||
me.formObj.checkNo = "";
|
||||
},
|
||||
itemSelected(row) {
|
||||
let me = this;
|
||||
me.formObj.item = row.item;
|
||||
me.formObj.itemDesc = row.description;
|
||||
},
|
||||
doRetrive(formName) {
|
||||
let me = this;
|
||||
me.$refs[formName].validateField(['checkNo'], (errorMessage) => {
|
||||
if (errorMessage) {
|
||||
return false;
|
||||
} else {
|
||||
showLoading();
|
||||
let list = {
|
||||
"checkNo": me.formObj.checkNo,
|
||||
"erpStorageLocation": me.formObj.erpStorageLocation,
|
||||
"item": me.formObj.item,
|
||||
"profitAndLoss": me.formObj.profitAndLoss
|
||||
};
|
||||
selectCheckNoSummary(list, me.page).then(response => {
|
||||
hideLoading();
|
||||
if (response.data.data.length === 0) {
|
||||
return me.$message.error('检索无数据');
|
||||
}
|
||||
// me.formObj = Object.assign({}, response.data.data)
|
||||
let seq = 1;
|
||||
for (let i = 0; i < response.data.data.records.length; i++) {
|
||||
if (response.data.data.records[i].itemBo != "") {
|
||||
response.data.data.records[i].item = trimHandle(response.data.data.records[i].itemBo);
|
||||
}
|
||||
if (response.data.data.records[i].storageLocationBo != "") {
|
||||
response.data.data.records[i].storageLocation = trimHandle(response.data.data.records[i].storageLocationBo);
|
||||
}
|
||||
if (response.data.data.records[i].storageBinBo != "") {
|
||||
response.data.data.records[i].storageBin = trimHandle(response.data.data.records[i].storageBinBo);
|
||||
}
|
||||
if (response.data.data.records[i].carrier1Bo != "") {
|
||||
response.data.data.records[i].carrier1 = trimHandle(response.data.data.records[i].carrier1Bo);
|
||||
}
|
||||
if (response.data.data.records[i].carrier2Bo != "") {
|
||||
response.data.data.records[i].carrier2 = trimHandle(response.data.data.records[i].carrier2Bo);
|
||||
}
|
||||
if (response.data.data.records[i].inventoryIdBo != "") {
|
||||
response.data.data.records[i].inventoryId = trimHandle(response.data.data.records[i].inventoryIdBo);
|
||||
}
|
||||
response.data.data.records[i].sequence = seq;
|
||||
seq++;
|
||||
|
||||
}
|
||||
me.formObj.inventoryCheckDetailList = response.data.data.records;
|
||||
me.formObj.checkNoMode = me.formObj.inventoryCheckDetailList[0].checkNoMode;
|
||||
me.page.total = response.data.data.total;
|
||||
me.page.current = response.data.data.current;
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
doClear(retainData) {
|
||||
let me = this;
|
||||
me.formObj = retainData ? Object.assign({}, this.initData, retainData) : Object.assign({}, this.initData);
|
||||
me.page.total = 0;
|
||||
me.page.current = 1;
|
||||
},
|
||||
doExport() {
|
||||
let me = this;
|
||||
let search = {
|
||||
"checkNo": me.formObj.checkNo,
|
||||
"erpStorageLocation": me.formObj.erpStorageLocation,
|
||||
"item": me.formObj.item,
|
||||
"profitAndLoss": me.formObj.profitAndLoss
|
||||
};
|
||||
this.downBlobFile("/wms/wms-inventory-check/checkNoSummaryExport", search, "盘点汇总.xlsx");
|
||||
},
|
||||
clickOutSide() {
|
||||
let me = this;
|
||||
me.formObj.itemDesc = "";
|
||||
if (me.formObj.item != "") {
|
||||
let params = {
|
||||
"site": getStore({name: 'tenantId'}),
|
||||
"item": me.formObj.item,
|
||||
"currentRevision": "Y"
|
||||
};
|
||||
let isExistence = false;
|
||||
fetchItemList(Object.assign({}, params, this.searchForm)).then(response => {
|
||||
if (!response.data.data.records || response.data.data.records.length == 0) {
|
||||
return me.$message.error("此物料不存在");
|
||||
}
|
||||
response.data.data.records.forEach(r => {
|
||||
if (me.formObj.item == r.item) {
|
||||
me.formObj.itemDesc = r.description;
|
||||
isExistence = true;
|
||||
}
|
||||
});
|
||||
if (isExistence == false) {
|
||||
return me.$message.error("此物料不存在");
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
cellStyle({row, column, rowIndex, columnIndex}){
|
||||
if (column.property === "carrier2NumberNew") {
|
||||
if (row.carrier2Number !== row.carrier2NumberNew) {
|
||||
return {backgroundColor: "#00f916"};
|
||||
}
|
||||
}
|
||||
if (column.property === "carrier1New") {
|
||||
if (isBlank(row.carrier1New)) {
|
||||
return {backgroundColor: "#fff"};
|
||||
}
|
||||
if (row.carrier1 !== row.carrier1New ) {
|
||||
return {backgroundColor: "#00f916"};
|
||||
}
|
||||
}
|
||||
if (column.property === "inventoryNumberNew") {
|
||||
if (row.inventoryNumber !== row.inventoryNumberNew) {
|
||||
return {backgroundColor: "#00f916"};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
438
src/views/wms/inventory-check-work/index.vue
Normal file
438
src/views/wms/inventory-check-work/index.vue
Normal file
@ -0,0 +1,438 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<input-select-dialog :modal-obj="inventoryCheckDialogObj" :modal-fetch-fun='inventoryCheckDialogFetchFun'
|
||||
:modal-show.sync="inventoryCheckDialogVisible"
|
||||
@inputDialogSelected="inventoryCheckSelected"></input-select-dialog>
|
||||
<input-select-dialog :modal-obj="erpStorageLocationDialogObj" :modal-fetch-fun='erpStorageLocationDialogFetchFun'
|
||||
:modal-show.sync="erpStorageLocationDialogVisible"
|
||||
@inputDialogSelected="erpStorageLocationSelected"></input-select-dialog>
|
||||
<basic-container style="margin-top: -20px">
|
||||
<el-form ref="formObj" :rules="rules" :model="formObj" label-width="auto">
|
||||
<el-row :gutter="10">
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="站点:" prop="site">
|
||||
<el-input placeHolder="站点" v-model="formObj.site" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="仓库:" prop="erpStorageLocation">
|
||||
<el-input placeHolder="仓库" v-model="formObj.erpStorageLocation" :readonly="true">
|
||||
<i slot="suffix" class="el-input__icon el-icon-search" @click.stop="showErpStorageLocationDialog()"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="盘点单号:" prop="checkNo" :readonly="true">
|
||||
<el-input placeHolder="盘点单号" v-model="formObj.checkNo">
|
||||
<i slot="suffix" class="el-input__icon el-icon-search" @click.stop="showCheckNoDialog()"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="盘点方式:" prop="checkNoMode">
|
||||
<el-input placeHolder="盘点方式" v-model="formObj.checkNoMode" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
||||
<hr class="el-hr"/>
|
||||
</el-col>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-tabs v-model="tabActiveName">
|
||||
<el-tab-pane label="执行信息" name="inventoryCheckDetailTab">
|
||||
<!-- <el-row :gutter="10">-->
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="条码:" prop="barCode">
|
||||
<el-input placeHolder="手动输入或者扫码" v-model="formObj.barCode" autofocus
|
||||
@keyup.enter.native="doSearch(formObj.barCode)" clearable>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<!-- </el-row>-->
|
||||
<el-table size="mini" height="250" :data="formObj.inventoryCheckList" v-if="formObj.checkNoMode === '托'"
|
||||
border style="width: 100%" highlight-current-row>
|
||||
<el-table-column prop="carrier1" label="条码">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.carrier1}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="carrier2NumberNew" label="箱数">
|
||||
<template slot-scope="scope">
|
||||
<el-input placeHolder="箱数" v-model="scope.row.carrier2NumberNew"
|
||||
:disabled="scope.row.isUpdate === 'true'"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="inventoryNumberNew" label="卷数">
|
||||
<template slot-scope="scope">
|
||||
<el-input placeHolder="卷数" v-model="scope.row.inventoryNumberNew"
|
||||
:disabled="scope.row.isUpdate === 'true'"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="qtyOnHand" label="库存数量">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.qtyOnHand}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="realQty" label="盘点数量">
|
||||
<template slot-scope="scope">
|
||||
<el-input placeHolder="盘点数量" v-model="scope.row.realQty"
|
||||
:disabled="scope.row.isUpdate === 'true' ? true : false"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="操作" width="60">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="danger" :disabled="scope.row.isUpdate === 'true' ? true : false"
|
||||
@click="removeInventoryCheckDetailDetail(scope.row,scope.$index)">删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-table size="mini" height="250" :data="formObj.inventoryCheckList" v-if="formObj.checkNoMode === '箱'"
|
||||
border style="width: 100%" highlight-current-row>
|
||||
<el-table-column prop="carrier2" label="条码">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.carrier2}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="carrier2NumberNew" label="箱数">
|
||||
<template slot-scope="scope">
|
||||
<el-input placeHolder="箱数" v-model="scope.row.carrier2NumberNew"
|
||||
:disabled="scope.row.isUpdate === 'true'"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="inventoryNumberNew" label="卷数">
|
||||
<template slot-scope="scope">
|
||||
<el-input placeHolder="卷数" v-model="scope.row.inventoryNumberNew"
|
||||
:disabled="scope.row.isUpdate === 'true'"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="carrier1New" label="托条码">
|
||||
<template slot-scope="scope">
|
||||
<el-input placeHolder="托条码" v-model="scope.row.carrier1New"
|
||||
:disabled="scope.row.isUpdate === 'true'"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="qtyOnHand" label="库存数量">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.qtyOnHand}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="realQty" label="盘点数量">
|
||||
<template slot-scope="scope">
|
||||
<el-input placeHolder="盘点数量" v-model="scope.row.realQty"
|
||||
:disabled="scope.row.isUpdate === 'true' ? true : false"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="操作" width="60">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="danger" @click="removeInventoryCheckDetailDetail(scope.row,scope.$index)"
|
||||
:disabled="scope.row.isUpdate === 'true' ? true : false">删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-table size="mini" height="250" :data="formObj.inventoryCheckList" v-if="formObj.checkNoMode === '库存条码'"
|
||||
border style="width: 100%" highlight-current-row>
|
||||
<el-table-column prop="inventoryId" label="条码">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.inventoryId}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="qtyOnHand" label="库存数量">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.qtyOnHand}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="realQty" label="盘点数量">
|
||||
<template slot-scope="scope">
|
||||
<el-input placeHolder="盘点数量" v-model="scope.row.realQty"
|
||||
:disabled="scope.row.isUpdate === 'true' ? true : false"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="操作" width="60">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="danger" @click="removeInventoryCheckDetailDetail(scope.row,scope.$index)"
|
||||
:disabled="scope.row.isUpdate === 'true' ? true : false">删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div style="width: 100%;display: flex;flex-direction: column;align-items: center;justify-content: center;">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="10">
|
||||
<el-button size="medium" type="primary" @click="doUpdate('formObj')">提交</el-button>
|
||||
</el-col>
|
||||
<el-col :span="10">
|
||||
<el-button size="medium" type="primary" @click="doClear('formObj')">清除</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-form>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {fetchErpStorageLocationList, fetchList, putObj, selectIdCode} from '@/api/wms/wms-inventory-check';
|
||||
import {hideLoading, showLoading} from '@/const/loading';
|
||||
import {isBlank} from "@/util/string";
|
||||
import {mapGetters} from 'vuex';
|
||||
import {getStore} from "@/util/store";
|
||||
import {trimHandle} from "@/util/handle";
|
||||
|
||||
export default {
|
||||
name: "wms-inventory-check_maintain",
|
||||
data() {
|
||||
return {
|
||||
tabActiveName: "inventoryCheckDetailTab",
|
||||
formObj: {},
|
||||
inventoryCheckDialogVisible: false,
|
||||
erpStorageLocationDialogVisible: false,
|
||||
barCodeDialogVisible: false,
|
||||
initData: {
|
||||
site: getStore({name: 'tenantId'}),
|
||||
checkNo: "",
|
||||
erpStorageLocation: "",
|
||||
checkNoMode: "",
|
||||
item: "",
|
||||
itemDesc: "",
|
||||
storageLocation: "",
|
||||
barCode: "",
|
||||
inventoryCheckList: [],
|
||||
},
|
||||
rules: {
|
||||
checkNo: [
|
||||
{required: true, message: '请输入盘点单号'}
|
||||
],
|
||||
erpStorageLocation: [
|
||||
{required: true, message: '请输入仓库'}
|
||||
],
|
||||
},
|
||||
inventoryCheckDialogFetchFun: fetchList,
|
||||
erpStorageLocationDialogFetchFun: fetchErpStorageLocationList,
|
||||
inventoryCheckDialogObj: {
|
||||
condition: "searchText",
|
||||
tableColumn: [
|
||||
{prop: "checkNo", label: "盘点单号"},
|
||||
{prop: "checkNoStatus", label: "盘点单状态"},
|
||||
{prop: "checkCondition", label: "盘点条件"},
|
||||
]
|
||||
},
|
||||
erpStorageLocationDialogObj: {
|
||||
condition: "searchText",
|
||||
tableColumn: [
|
||||
{prop: "erpStorageLocation", label: "ERP仓库编号"},
|
||||
]
|
||||
},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['permissions']),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
//显示操作弹窗框
|
||||
showCheckNoDialog() {
|
||||
if (isBlank(this.formObj.erpStorageLocation)) {
|
||||
this.$message.warning('请先选择ERP仓库');
|
||||
return false;
|
||||
}
|
||||
this.inventoryCheckDialogObj.queryParam = {
|
||||
'erpStorageLocation': this.formObj.erpStorageLocation,
|
||||
'checkNoStatus': "待执行"
|
||||
};
|
||||
this.inventoryCheckDialogVisible = true;
|
||||
},
|
||||
showErpStorageLocationDialog() {
|
||||
this.erpStorageLocationDialogVisible = true;
|
||||
},
|
||||
inventoryCheckSelected(row) {
|
||||
let me = this;
|
||||
me.formObj.checkNo = row.checkNo;
|
||||
me.formObj.checkNoMode = row.checkNoMode;
|
||||
me.formObj.checkNoStatus = row.checkNoStatus;
|
||||
if (me.formObj.checkNoStatus == "已完成") {
|
||||
me.formObj.checkNo = "";
|
||||
return me.$message.error("该版本已盘点完成");
|
||||
}
|
||||
me.formObj.barCode = "";
|
||||
me.formObj.inventoryCheckList = [];
|
||||
},
|
||||
erpStorageLocationSelected(row) {
|
||||
let me = this;
|
||||
me.formObj.erpStorageLocation = row.erpStorageLocation;
|
||||
me.formObj.checkNo = "";
|
||||
me.formObj.barCode = "";
|
||||
me.formObj.inventoryCheckList = [];
|
||||
},
|
||||
doSearch() {
|
||||
let me = this;
|
||||
let checkNo = me.formObj.checkNo;
|
||||
let erpStorageLocation = me.formObj.erpStorageLocation;
|
||||
let carrier1 = "";
|
||||
let carrier2 = "";
|
||||
let inventoryId = "";
|
||||
let qtyOnHand = "";
|
||||
let carrier1New = "";
|
||||
let handle = "";
|
||||
let carrier2Number = "";
|
||||
let inventoryNumber = "";
|
||||
if (me.formObj.checkNoMode == "托") {
|
||||
carrier1 = me.formObj.barCode;
|
||||
if (me.formObj.inventoryCheckList && me.formObj.inventoryCheckList.length > 0) {
|
||||
for (let i = 0; i < me.formObj.inventoryCheckList.length; i++) {
|
||||
if (me.formObj.inventoryCheckList[i].carrier1 == carrier1) {
|
||||
me.formObj.barCode = "";
|
||||
return me.$message.error("不可重复扫描同一条码");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (me.formObj.checkNoMode == "箱") {
|
||||
carrier2 = me.formObj.barCode;
|
||||
if (me.formObj.inventoryCheckList && me.formObj.inventoryCheckList.length > 0) {
|
||||
for (let i = 0; i < me.formObj.inventoryCheckList.length; i++) {
|
||||
if (me.formObj.inventoryCheckList[i].carrier2 == carrier2) {
|
||||
me.formObj.barCode = "";
|
||||
return me.$message.error("不可重复扫描同一条码");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (me.formObj.checkNoMode == "库存条码") {
|
||||
inventoryId = me.formObj.barCode;
|
||||
if (me.formObj.inventoryCheckList && me.formObj.inventoryCheckList.length > 0) {
|
||||
for (let i = 0; i < me.formObj.inventoryCheckList.length; i++) {
|
||||
if (me.formObj.inventoryCheckList[i].inventoryId == inventoryId) {
|
||||
me.formObj.barCode = "";
|
||||
return me.$message.error("不可重复扫描同一条码");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isBlank(this.formObj.checkNo)) {
|
||||
this.$message.warning('请先选择盘点单号');
|
||||
return false;
|
||||
}
|
||||
if (carrier1 == "" && carrier2 == "" && inventoryId == "") {
|
||||
return me.$message.error("条码不可为空");
|
||||
}
|
||||
selectIdCode(checkNo, erpStorageLocation, carrier1, carrier2, inventoryId).then(res => {
|
||||
if (!me.formObj.inventoryCheckList) {
|
||||
me.formObj.inventoryCheckList = [];
|
||||
}
|
||||
let record = res.data.data;
|
||||
if (!record.inventoryCheckDetailList || record.inventoryCheckDetailList.length === 0) {
|
||||
me.formObj.barCode = "";
|
||||
return me.$message.error("未检索到此条码");
|
||||
}
|
||||
if (record.inventoryCheckDetailList && record.inventoryCheckDetailList.length > 0) {
|
||||
for (let i = 0; i < record.inventoryCheckDetailList.length; i++) {
|
||||
if (record.inventoryCheckDetailList[i].realQty != null) {
|
||||
me.$message.error('条码' + me.formObj.barCode + '已盘点');
|
||||
me.formObj.barCode = "";
|
||||
return;
|
||||
}
|
||||
qtyOnHand = record.inventoryCheckDetailList[i].qtyOnHand;
|
||||
handle = record.inventoryCheckDetailList[i].handle;
|
||||
carrier1New = trimHandle(record.inventoryCheckDetailList[i].carrier1Bo);
|
||||
carrier2Number = record.inventoryCheckDetailList[i].carrier2Number;
|
||||
inventoryNumber = record.inventoryCheckDetailList[i].inventoryNumber;
|
||||
me.formObj.item = record.inventoryCheckDetailList[i].item;
|
||||
me.formObj.itemDesc = record.inventoryCheckDetailList[i].itemDesc;
|
||||
me.formObj.storageLocation = record.inventoryCheckDetailList[i].storageLocation;
|
||||
}
|
||||
let obj = Object.assign({}, {
|
||||
"carrier1": carrier1,
|
||||
"carrier2": carrier2,
|
||||
"carrier1New":carrier1New,
|
||||
"inventoryId": inventoryId,
|
||||
"qtyOnHand": qtyOnHand,
|
||||
"carrier2Number": carrier2Number,
|
||||
"inventoryNumber": inventoryNumber,
|
||||
"carrier2NumberNew": carrier2Number,
|
||||
"inventoryNumberNew": inventoryNumber,
|
||||
"handle": handle,
|
||||
"realQty": qtyOnHand,
|
||||
"isUpdate": "",
|
||||
});
|
||||
me.formObj.inventoryCheckList.unshift(obj);
|
||||
me.formObj.barCode = "";
|
||||
}
|
||||
});
|
||||
},
|
||||
doUpdate(formName) {
|
||||
debugger
|
||||
let me = this;
|
||||
let list = [];
|
||||
let reg = /^\d+(?=\.{0,1}\d+$|$)/;
|
||||
for (let i = 0; i < me.formObj.inventoryCheckList.length; i++) {
|
||||
if (me.formObj.inventoryCheckList[i].realQty == "" || me.formObj.inventoryCheckList[i].isUpdate == "true") {
|
||||
continue;
|
||||
}
|
||||
if (reg.test(me.formObj.inventoryCheckList[i].realQty) || me.formObj.inventoryCheckList[i].realQty == 0) {
|
||||
list.push(me.formObj.inventoryCheckList[i]);
|
||||
me.formObj.inventoryCheckList[i].isUpdate = "true";
|
||||
} else {
|
||||
if (me.formObj.checkNoMode == "托") {
|
||||
setTimeout(() => {
|
||||
me.$message.error("条码" + me.formObj.inventoryCheckList[i].carrier1 + "的盘点数量应为大于0的数字");
|
||||
}, 500);
|
||||
}
|
||||
if (me.formObj.checkNoMode == "箱") {
|
||||
setTimeout(() => {
|
||||
me.$message.error("条码" + me.formObj.inventoryCheckList[i].carrier2 + "的盘点数量应为大于0的数字");
|
||||
}, 500);
|
||||
}
|
||||
if (me.formObj.checkNoMode == "库存条码") {
|
||||
setTimeout(() => {
|
||||
me.$message.error("条码" + me.formObj.inventoryCheckList[i].inventoryId + "的盘点数量应为大于0的数字");
|
||||
}, 500);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
me.formObj.inventoryCheckDetailList = list;
|
||||
if (!me.formObj.inventoryCheckDetailList || me.formObj.inventoryCheckDetailList.length === 0) {
|
||||
setTimeout(() => {
|
||||
return me.$message.error("没有可提交的条码");
|
||||
}, 500);
|
||||
}
|
||||
me.$refs[formName].validate((valid) => {
|
||||
if (valid) {
|
||||
showLoading();
|
||||
putObj(me.formObj).then(respData => {
|
||||
hideLoading();
|
||||
this.$message.success('提交成功');
|
||||
}).catch(error => {
|
||||
hideLoading();
|
||||
});
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
},
|
||||
removeInventoryCheckDetailDetail(row, index) {
|
||||
this.formObj.inventoryCheckList.splice(index, 1);
|
||||
},
|
||||
doClear() {
|
||||
let me = this;
|
||||
me.formObj.site = getStore({name: 'tenantId'});
|
||||
me.formObj.checkNo = "";
|
||||
me.formObj.erpStorageLocation = "";
|
||||
me.formObj.checkNoMode = "";
|
||||
me.formObj.item = "";
|
||||
me.formObj.itemDesc = "";
|
||||
me.f.storageLocation = "";
|
||||
me.formObj.barCode = "";
|
||||
me.formObj.inventoryCheckList = [];
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
234
src/views/wms/inventory-group-bind/index.vue
Normal file
234
src/views/wms/inventory-group-bind/index.vue
Normal file
@ -0,0 +1,234 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<basic-container>
|
||||
<el-form ref="formObj" :model="formObj" label-width="auto">
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="站点:" prop="site">
|
||||
<el-input placeHolder="站点" v-model="site" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="条码扫描:" prop="code" class="inputRequired">
|
||||
<el-input v-model="formObj.code" placeholder="条码扫描" autofocus
|
||||
@keyup.enter.native="scanCode">
|
||||
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组条码:" prop="group" class="inputRequired">
|
||||
<el-input placeHolder="组条码" v-model="formObj.groupId" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="物料号:" prop="item" class="inputRequired">
|
||||
<el-input placeHolder="物料号" v-model="formObj.item" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="货格号:" prop="storageBin" class="inputRequired">
|
||||
<el-input placeHolder="货格号" v-model="formObj.storageBin" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="已绑数量:" prop="bindQty" class="inputRequired">
|
||||
<el-input placeHolder="已绑数量" v-model="formObj.bindQty" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="已扫数量:" prop="scanQty" class="inputRequired">
|
||||
<el-input placeHolder="已扫数量" v-model="formObj.scanQty" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-table :data="inventoryList" border :row-style="tableRowClassName">
|
||||
<el-table-column label="序号" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{scope.$index+1}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存条码" prop="inventoryId"></el-table-column>
|
||||
</el-table>
|
||||
<div style="margin-top: 10px;">
|
||||
<el-button type="primary" @click="bind">合组</el-button>
|
||||
<el-button type="warning" @click="doClear">清除</el-button>
|
||||
</div>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {scanCode, bindGroup} from '@/api/wms/inventory-group';
|
||||
import {isBlank} from "@/util/string";
|
||||
import {getStore} from '@/util/store';
|
||||
import {add} from '@/util/bigNumber';
|
||||
import {showLoading, hideLoading} from '@/const/loading';
|
||||
import {listByActivityId} from "@/api/admin/activity-option";
|
||||
import {
|
||||
mapGetters
|
||||
} from 'vuex';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
lableWidth: {
|
||||
'width': '150px'
|
||||
},
|
||||
site: getStore({name: 'tenantId'}),
|
||||
formObj: {},
|
||||
initData: {
|
||||
bindQty: 0,
|
||||
scanQty: 0
|
||||
},
|
||||
inventoryList: []
|
||||
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.doClear();
|
||||
},
|
||||
|
||||
beforeRouteEnter(to, from, next) {
|
||||
next(vm => {
|
||||
try {
|
||||
//获取作业规则
|
||||
let me = vm;
|
||||
let activityId = me.$route.query.ACTIVITY_ID;
|
||||
listByActivityId(activityId).then(response => {
|
||||
|
||||
if (response.data.code != 0) {
|
||||
return me.$message.error(response.data.msg);
|
||||
}
|
||||
let data = response.data.data;
|
||||
|
||||
if (data && data.length > 0) {
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() === "PRINTER_X") {
|
||||
me.printer = data[i].optionValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}).catch(e => {
|
||||
console.log(e);
|
||||
});
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapGetters(["permissions"]),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
||||
//清除页面信息
|
||||
doClear() {
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.inventoryList = [];
|
||||
},
|
||||
|
||||
scanCode() {
|
||||
let me = this;
|
||||
let code = me.formObj.code;
|
||||
if (isBlank(code)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
return;
|
||||
} else if (me.inventoryList.findIndex(o => o.inventoryId === code) >= 0) {
|
||||
me.formObj.code = '';
|
||||
return me.$message.error('条码已扫描');
|
||||
} else {
|
||||
showLoading();
|
||||
scanCode({
|
||||
code: code
|
||||
}).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code !== 0) {
|
||||
return me.$message.error(res.data.msg);
|
||||
}
|
||||
me.formObj.code = '';
|
||||
let data = res.data.data;
|
||||
let firstData = data[0];
|
||||
|
||||
if (firstData.groupId) {
|
||||
if (me.formObj.groupId) {
|
||||
return me.$message.error('已存在组号,请拆组后再进行合组');
|
||||
} else {
|
||||
me.formObj.groupId = firstData.groupId;
|
||||
}
|
||||
}
|
||||
if (!(isBlank(me.formObj.item) || isBlank(me.formObj.storageBin)) && (me.formObj.item !== firstData.item || me.formObj.storageBin !== firstData.storageBin)) {
|
||||
if (firstData.scanType === 'GROUP') {
|
||||
return me.$message.error('组条码' + code + '的物料或货格与界面信息不符');
|
||||
} else {
|
||||
return me.$message.error('库存条码' + code + '的物料或货格与界面信息不符');
|
||||
}
|
||||
}
|
||||
if (me.inventoryList.length > 0 && !me.inventoryList.some(o => o.status === firstData.status)) {
|
||||
return me.$message.error('库存条码' + code + '状态与已有条码不同');
|
||||
}
|
||||
me.formObj.item = firstData.item;
|
||||
me.formObj.storageBin = firstData.storageBin;
|
||||
me.formObj.bindQty = data.length;
|
||||
me.formObj.scanQty = add(me.formObj.scanQty, isBlank(firstData.groupId) ? 1 : 0);
|
||||
me.inventoryList = me.inventoryList.concat(data);
|
||||
}).catch(e => hideLoading());
|
||||
}
|
||||
},
|
||||
|
||||
bind() {
|
||||
let me = this;
|
||||
let bindList = me.inventoryList.filter(o => isBlank(o.groupId));
|
||||
if (bindList.length <= 0) {
|
||||
return me.$message.error('无需合组的信息,请确认');
|
||||
} else {
|
||||
showLoading();
|
||||
bindGroup({
|
||||
printer: me.printer,
|
||||
groupId: me.formObj.groupId,
|
||||
list: bindList
|
||||
}).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code !== 0) {
|
||||
return me.$message.error(res.data.msg);
|
||||
}
|
||||
me.doClear();
|
||||
return me.$message.success("合组成功");
|
||||
}).catch(e => hideLoading());
|
||||
}
|
||||
},
|
||||
|
||||
tableRowClassName({row, rowIndex}) {
|
||||
if (isBlank(row.groupId)) {
|
||||
return {backgroundColor: "#00f916"};
|
||||
}
|
||||
return '';
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.inputRequired ::v-deep .el-form-item__label::before {
|
||||
content: "*";
|
||||
width: 10px;
|
||||
height: 20px;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
line-height: 26px;
|
||||
font-size: large;
|
||||
color: #f00;
|
||||
}
|
||||
|
||||
// 去掉hover效果
|
||||
::v-deep .el-table tbody tr:hover > td {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
</style>
|
||||
209
src/views/wms/inventory-group-unBind/index.vue
Normal file
209
src/views/wms/inventory-group-unBind/index.vue
Normal file
@ -0,0 +1,209 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<basic-container>
|
||||
<el-form ref="formObj" :model="formObj" label-width="auto">
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="站点:" prop="site">
|
||||
<el-input placeHolder="站点" v-model="site" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="条码扫描:" prop="code" class="inputRequired">
|
||||
<el-input v-model="formObj.code" placeholder="条码扫描" autofocus
|
||||
@keyup.enter.native="scanCode">
|
||||
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组条码:" prop="group" class="inputRequired">
|
||||
<el-input placeHolder="组条码" v-model="formObj.groupId" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="物料号:" prop="item" class="inputRequired">
|
||||
<el-input placeHolder="物料号" v-model="formObj.item" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="货格号:" prop="storageBin" class="inputRequired">
|
||||
<el-input placeHolder="货格号" v-model="formObj.storageBin" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="已绑数量:" prop="bindQty" class="inputRequired">
|
||||
<el-input placeHolder="已绑数量" v-model="formObj.bindQty" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="已扫数量:" prop="scanQty" class="inputRequired">
|
||||
<el-input placeHolder="已扫数量" v-model="formObj.scanQty" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-table :data="inventoryList" border :row-style="tableRowClassName">
|
||||
<el-table-column label="序号" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{scope.$index+1}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存条码" prop="inventoryId"></el-table-column>
|
||||
</el-table>
|
||||
<div style="margin-top: 10px;">
|
||||
<el-button type="primary" @click="unBind">拆组</el-button>
|
||||
<el-button type="primary" @click="unBindAll" :disabled="inventoryList.length === 0">全选</el-button>
|
||||
<el-button type="warning" @click="doClear">清除</el-button>
|
||||
</div>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {scanCode, unBindGroup} from '@/api/wms/inventory-group';
|
||||
import {isBlank} from "@/util/string";
|
||||
import {getStore} from '@/util/store';
|
||||
import {showLoading, hideLoading} from '@/const/loading';
|
||||
import {listByActivityId} from "@/api/admin/activity-option";
|
||||
import {
|
||||
mapGetters
|
||||
} from 'vuex';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
lableWidth: {
|
||||
'width': '150px'
|
||||
},
|
||||
site: getStore({name: 'tenantId'}),
|
||||
formObj: {},
|
||||
initData: {
|
||||
bindQty: 0,
|
||||
scanQty: 0
|
||||
},
|
||||
inventoryList: []
|
||||
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.doClear();
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapGetters(["permissions"]),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
||||
//清除页面信息
|
||||
doClear() {
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.inventoryList = [];
|
||||
},
|
||||
|
||||
scanCode() {
|
||||
let me = this;
|
||||
let code = me.formObj.code;
|
||||
if (isBlank(code)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
return;
|
||||
} else if (me.inventoryList.findIndex(o =>o.inventoryId === code && isBlank(o.groupId)) >= 0) {
|
||||
me.formObj.code = '';
|
||||
return me.$message.error('条码已扫描');
|
||||
} else {
|
||||
showLoading();
|
||||
scanCode({
|
||||
code: code
|
||||
}).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code !== 0) {
|
||||
return me.$message.error(res.data.msg);
|
||||
} else {
|
||||
me.formObj.code = '';
|
||||
let data = res.data.data;
|
||||
let firstData = data[0];
|
||||
if (firstData.groupId) {
|
||||
if (me.formObj.groupId) {
|
||||
if (firstData.scanType === 'GROUP') {
|
||||
return me.$message.error('已存在待拆组的信息,请确认');
|
||||
}
|
||||
} else {
|
||||
me.formObj.groupId = firstData.groupId;
|
||||
me.formObj.bindQty = data.length;
|
||||
me.formObj.item = firstData.item;
|
||||
me.formObj.storageBin = firstData.storageBin;
|
||||
me.inventoryList = data;
|
||||
}
|
||||
if (firstData.scanType !== 'GROUP') {
|
||||
let row = me.inventoryList.find(o => o.inventoryId === code);
|
||||
if (row) {
|
||||
me.$set(row, "groupId", "");
|
||||
me.formObj.scanQty += 1;
|
||||
} else {
|
||||
return me.$message.error('库存条码' + code + '不属于组' + me.formObj.groupId + ',不允许拆组');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return me.$message.error('库存条码' + firstData.inventoryId + '无组,不允许拆批');
|
||||
}
|
||||
}
|
||||
}).catch(e => hideLoading());
|
||||
}
|
||||
},
|
||||
|
||||
unBind() {
|
||||
let me = this;
|
||||
let unBindList = me.inventoryList.filter(o => isBlank(o.groupId)).map(o => o.inventoryId);
|
||||
if (unBindList.length <= 0) {
|
||||
return me.$message.error('无需拆组的信息,请确认');
|
||||
} else {
|
||||
showLoading();
|
||||
unBindGroup(unBindList).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code !== 0) {
|
||||
return me.$message.error(res.data.msg);
|
||||
}
|
||||
me.doClear();
|
||||
return me.$message.success("拆组成功");
|
||||
}).catch(e => hideLoading());
|
||||
}
|
||||
},
|
||||
|
||||
unBindAll() {
|
||||
let me = this;
|
||||
me.inventoryList.forEach(o => o.groupId = '');
|
||||
me.formObj.scanQty = me.inventoryList.length;
|
||||
},
|
||||
|
||||
tableRowClassName({row, rowIndex}) {
|
||||
if (isBlank(row.groupId)) {
|
||||
return {backgroundColor: "#eb0030"};
|
||||
}
|
||||
return null;
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.inputRequired ::v-deep .el-form-item__label::before {
|
||||
content: "*";
|
||||
width: 10px;
|
||||
height: 20px;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
line-height: 26px;
|
||||
font-size: large;
|
||||
color: #f00;
|
||||
}
|
||||
|
||||
// 去掉hover效果
|
||||
::v-deep .el-table tbody tr:hover > td {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
</style>
|
||||
267
src/views/wms/inventory-lock/index.vue
Normal file
267
src/views/wms/inventory-lock/index.vue
Normal file
@ -0,0 +1,267 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<input-select-dialog :modal-obj='inventoryDialogObj' :modal-fetch-fun='inventoryDialogFetchFun'
|
||||
:modal-show.sync="inventoryDialogVisible" @inputDialogSelected="inventorySelect">
|
||||
</input-select-dialog>
|
||||
|
||||
<basic-container>
|
||||
<el-form ref="formObj" :rules="rules" :model="formObj" label-width="auto">
|
||||
<el-row :gutter="10">
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="站点:" prop="site">
|
||||
<el-input placeHolder="站点" v-model="formObj.site" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
|
||||
<el-form-item label="条码:" prop="carrier">
|
||||
<el-input placeHolder="选择条码" v-model="formObj.carrier"
|
||||
@keyup.enter.native="doSearch(formObj.carrier)" :clearable="true">
|
||||
<i slot="suffix" class="el-input__icon el-icon-search"
|
||||
@click.stop="showInventoryDialog"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table :data="formObj.itemList">
|
||||
<el-table-column label="库存条码" prop="inventoryId">
|
||||
</el-table-column>
|
||||
<el-table-column label="物料号" prop="item">
|
||||
</el-table-column>
|
||||
<el-table-column label="库存数量" prop="qtyOnHand">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="danger" @click="rowDelete(scope.$index, scope.row)">删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
</el-form>
|
||||
<div style="margin-top: 10px;">
|
||||
<el-button v-if="wms_inventory_save" type="warning" @click="lock('formObj')">冻结</el-button>
|
||||
<el-button v-if="wms_inventory_save" type="primary" @click="unLock('formObj')">解冻</el-button>
|
||||
<el-button type="primary" @click="doClear">清除</el-button>
|
||||
</div>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {fetchList as fetchinventoryList} from "@/api/wms/inventory";
|
||||
import {getInventoryList, freeze, unfreeze} from "@/api/wms/inventory-lock";
|
||||
import {hideLoading, showLoading} from '@/const/loading';
|
||||
import {getStore} from '@/util/store';
|
||||
import {
|
||||
mapGetters
|
||||
} from 'vuex';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
formObj: {},
|
||||
codeList: [],
|
||||
invList: [],
|
||||
wms_inventory_save: false,
|
||||
rules: {
|
||||
carrier: [
|
||||
{required: true, message: '条码不可为空'}
|
||||
],
|
||||
},
|
||||
initData: {
|
||||
site: getStore({name: 'tenantId'}),
|
||||
carrier: "",
|
||||
itemList: [],
|
||||
},
|
||||
inventoryDialogVisible: false,
|
||||
inventoryDialogFetchFun: fetchinventoryList,
|
||||
inventoryDialogObj: {
|
||||
"condition": "inventory",
|
||||
tableColumn: [
|
||||
{prop: "inventoryId", label: "库存ID"},
|
||||
{prop: "qtyOnHand", label: "数量"},
|
||||
{
|
||||
prop: "status", label: "状态", formatter: (row, column, cellValue, index) => {
|
||||
|
||||
if (cellValue == "1001") {
|
||||
return "可用";
|
||||
}
|
||||
if (cellValue == "1002") {
|
||||
return "保留";
|
||||
}
|
||||
if (cellValue == "1003") {
|
||||
return "隔离";
|
||||
}
|
||||
if (cellValue == "1004") {
|
||||
return "待检";
|
||||
}
|
||||
if (cellValue == "1005") {
|
||||
return "冻结";
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.wms_inventory_save = this.permissions['wms_inventory_save'];
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.invList = [];
|
||||
this.codeList = [];
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapGetters(['permissions']),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
FormatInventoryStatus(row, column, cellValue, index) {
|
||||
return "test";
|
||||
},
|
||||
|
||||
//展示库存
|
||||
showInventoryDialog() {
|
||||
let me = this;
|
||||
me.inventoryDialogVisible = true;
|
||||
},
|
||||
inventorySelect(row) {
|
||||
let me = this;
|
||||
me.formObj.carrier = row.inventoryId;
|
||||
me.getInventoryList();
|
||||
|
||||
},
|
||||
|
||||
//扫描托条码
|
||||
doSearch() {
|
||||
let me = this;
|
||||
if (me.formObj.itemList.length > 0) {
|
||||
for (let i = 0; i < me.codeList.length; i++) {
|
||||
if (me.codeList[i].code === me.formObj.carrier) {
|
||||
me.$message.error("不可重复扫描");
|
||||
return;
|
||||
}
|
||||
}
|
||||
me.getInventoryList();
|
||||
} else {
|
||||
me.getInventoryList();
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
//冻结
|
||||
lock() {
|
||||
let me = this;
|
||||
if (me.formObj.itemList.length > 0) {
|
||||
me.$prompt('请输入冻结原因', '冻结', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
}).then(({value}) => {
|
||||
let objList = [];
|
||||
for (let i = 0; i < me.formObj.itemList.length; i++) {
|
||||
objList.push({
|
||||
"inventoryId": me.formObj.itemList[i].inventoryId,
|
||||
"comments": value
|
||||
});
|
||||
}
|
||||
showLoading();
|
||||
freeze(objList).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code == 0) {
|
||||
me.$message.success("冻结成功");
|
||||
me.doClear();
|
||||
}
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
} else {
|
||||
me.$message.error("没有需要冻结的库存");
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
//解冻
|
||||
unLock() {
|
||||
let me = this;
|
||||
if (me.formObj.itemList.length > 0) {
|
||||
me.$prompt('请输入解冻原因', '解冻', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
}).then(({value}) => {
|
||||
let objList = [];
|
||||
for (let i = 0; i < me.formObj.itemList.length; i++) {
|
||||
objList.push({
|
||||
"inventoryId": me.formObj.itemList[i].inventoryId,
|
||||
"comments": value
|
||||
});
|
||||
}
|
||||
showLoading();
|
||||
unfreeze(objList).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code == 0) {
|
||||
me.$message.success("解冻成功");
|
||||
me.doClear();
|
||||
}
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
});
|
||||
|
||||
|
||||
} else {
|
||||
me.$message.error("没有需要解冻的库存");
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
|
||||
getInventoryList() {
|
||||
let me = this;
|
||||
me.$refs['formObj'].validateField(["carrier"], (valid) => {
|
||||
if (valid) {
|
||||
return false;
|
||||
} else {
|
||||
getInventoryList(me.formObj.carrier).then(res => {
|
||||
for (let i = 0; i < res.data.data.length; i++) {
|
||||
for (let j = 0; j < me.formObj.itemList.length; j++) {
|
||||
if (me.formObj.itemList[j].inventoryId === res.data.data[i].inventoryId) {
|
||||
res.data.data.splice(res.data.data[i], 1);
|
||||
}
|
||||
}
|
||||
let obj = Object.assign({},
|
||||
{
|
||||
"inventoryId": res.data.data[i].inventoryId,
|
||||
"item": res.data.data[i].item,
|
||||
"qtyOnHand": res.data.data[i].qtyOnHand
|
||||
});
|
||||
me.formObj.itemList.push(obj);
|
||||
}
|
||||
me.codeList.push({"code": me.formObj.carrier});
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
rowDelete(index, row) {
|
||||
let me = this;
|
||||
me.formObj.itemList.splice(index, 1);
|
||||
},
|
||||
|
||||
doClear() {
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.formObj.itemList = [];
|
||||
this.$refs['formObj'].resetFields();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
</script>
|
||||
196
src/views/wms/inventory-merge/index.vue
Normal file
196
src/views/wms/inventory-merge/index.vue
Normal file
@ -0,0 +1,196 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<basic-container>
|
||||
<el-form ref="formObj" :model="formObj" label-width="auto">
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="站点:" prop="site">
|
||||
<el-input placeHolder="站点" v-model="site" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="条码扫描:" prop="code" class="inputRequired">
|
||||
<el-input v-model="formObj.code" autofocus
|
||||
@keyup.enter.native="scanCode" :disabled="codeDisabled">
|
||||
<i slot="suffix" class="el-input__icon el-icon-full-screen"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="合批后条码:" prop="inventoryId">
|
||||
<el-input v-model="formObj.inventoryId" :disabled="!codeDisabled" :readonly="codeDisabled"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="汇总数量:" prop="qty">
|
||||
<el-input type="number" v-model="formObj.qty" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-table :data="inventoryList" border>
|
||||
<el-table-column label="序号" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{scope.$index+1}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="条码" prop="inventoryId"></el-table-column>
|
||||
<el-table-column label="数量" prop="qtyOnHand"></el-table-column>
|
||||
</el-table>
|
||||
<div style="margin-top: 10px;">
|
||||
<el-button type="primary" @click="doMerge">合批执行</el-button>
|
||||
<el-button type="warning" @click="doClear">清除</el-button>
|
||||
</div>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {selectForSplit, mergeInventory} from '@/api/wms/inventory';
|
||||
import {isBlank} from "@/util/string";
|
||||
import {add, mul} from "@/util/number";
|
||||
import {getStore} from '@/util/store';
|
||||
import {showLoading, hideLoading} from '@/const/loading';
|
||||
import {listByActivityId} from "@/api/admin/activity-option";
|
||||
import {
|
||||
mapGetters
|
||||
} from 'vuex';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
lableWidth: {
|
||||
'width': '150px'
|
||||
},
|
||||
site: getStore({name: 'tenantId'}),
|
||||
formObj: {},
|
||||
initData: {
|
||||
qty: 0,
|
||||
},
|
||||
inventoryList: [],
|
||||
codeDisabled: false
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.doClear();
|
||||
},
|
||||
|
||||
beforeRouteEnter(to, from, next) {
|
||||
next(vm => {
|
||||
try {
|
||||
//获取作业规则
|
||||
let me = vm;
|
||||
let activityId = me.$route.query.ACTIVITY_ID;
|
||||
listByActivityId(activityId).then(response => {
|
||||
|
||||
if (response.data.code != 0) {
|
||||
return me.$message.error(response.data.msg);
|
||||
}
|
||||
let data = response.data.data;
|
||||
|
||||
if (data && data.length > 0) {
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
if (data[i].optionName && data[i].optionName.toUpperCase() === "PRINTER_D") {
|
||||
me.printer = data[i].optionValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}).catch(e => {
|
||||
console.log(e);
|
||||
});
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
computed: {
|
||||
...mapGetters(["permissions"]),
|
||||
permissionList() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
||||
//清除页面信息
|
||||
doClear() {
|
||||
this.formObj = Object.assign({}, this.initData);
|
||||
this.inventoryList = [];
|
||||
this.codeDisabled = false;
|
||||
},
|
||||
|
||||
scanCode() {
|
||||
let me = this;
|
||||
let code = me.formObj.code;
|
||||
me.formObj.inventoryId = "";
|
||||
if (isBlank(code)) {
|
||||
me.$message.error("不可扫描空条码");
|
||||
} else if (me.inventoryList.findIndex(o => o.inventoryId === code) >= 0) {
|
||||
me.formObj.code = '';
|
||||
me.$message.error('条码已扫描');
|
||||
} else {
|
||||
showLoading();
|
||||
selectForSplit({
|
||||
inventoryId: code
|
||||
}).then(res => {
|
||||
hideLoading();
|
||||
me.formObj.code = '';
|
||||
let data = res.data.data;
|
||||
if (me.inventoryList.length > 0) {
|
||||
let firstData = me.inventoryList[0];
|
||||
if (data.item !== firstData.item) {
|
||||
return me.$message.error("物料不一致,请确认");
|
||||
} else if (data.batchNo !== firstData.batchNo) {
|
||||
return me.$message.error("批次不一致,请确认");
|
||||
} else if (data.status !== firstData.status) {
|
||||
return me.$message.error("状态不一致,请确认");
|
||||
} else if (data.storageBinBo !== firstData.storageBinBo) {
|
||||
return me.$message.error("存储区域不一致,请确认");
|
||||
} else if (data.delayTime !== firstData.delayTime) {
|
||||
return me.$message.error("推迟日期不一致,请确认");
|
||||
} else if (data.qmsSpecialMarking !== firstData.qmsSpecialMarking) {
|
||||
return me.$message.error("检验特殊标记不一致,请确认");
|
||||
}
|
||||
}
|
||||
me.formObj.qty = add(me.formObj.qty, data.qtyOnHand);
|
||||
me.inventoryList.push(data);
|
||||
}).catch(e => hideLoading());
|
||||
}
|
||||
},
|
||||
|
||||
doMerge() {
|
||||
let me = this;
|
||||
if (me.inventoryList.length > 1) {
|
||||
showLoading();
|
||||
mergeInventory({
|
||||
printer: me.printer,
|
||||
inventoryIdList: me.inventoryList.map(o => o.inventoryId)
|
||||
}).then(res => {
|
||||
hideLoading();
|
||||
let data = res.data.data;
|
||||
me.codeDisabled = true;
|
||||
me.$set(me.formObj, "inventoryId", data);
|
||||
me.$message.success("合批成功");
|
||||
}).catch(e => hideLoading());
|
||||
} else {
|
||||
me.$message.error("合批条码个数不足");
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.inputRequired ::v-deep .el-form-item__label::before {
|
||||
content: "*";
|
||||
width: 10px;
|
||||
height: 20px;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
line-height: 26px;
|
||||
font-size: large;
|
||||
color: #f00;
|
||||
}
|
||||
</style>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user