This commit is contained in:
朱文强 2024-06-11 14:09:05 +08:00
parent dcba6962f2
commit 404c5fe121
14 changed files with 1226 additions and 142 deletions

View File

@ -0,0 +1,59 @@
/*
* @Author: zwq
* @Date: 2023-08-22 14:50:15
* @LastEditors: zwq
* @LastEditTime: 2024-06-07 10:49:13
* @Description:
*/
import request from '@/utils/request'
// 获得盘库分页
export function getWarehousePklbPage(query) {
return request({
url: '/asrs/warehouse-pklb/page',
method: 'get',
params: query
})
}
// 盘货明细表
export function getWarehousePklbDetailPage(query) {
return request({
url: '/asrs/warehouse-pklb-detail/page',
method: 'get',
params: query
})
}
// 检查盘货明细表
export function getWarehousePklbDetailCheck(data) {
return request({
url: '/asrs/warehouse-pklb-detail/check',
method: 'post',
data: data
})
}
// 盘货入库
export function makeWarehouseIn(data) {
return request({
url: '/asrs/warehouse-storehouse/makewarehousein',
method: 'post',
data: data
})
}
// 同步mes出库
export function checkout(data) {
return request({
url: '/asrs/warehouse-pklb-detail/checkout',
method: 'post',
data: data
})
}
// 导出盘库 Excel
export function exportWarehouseExcel(query) {
return request({
url: '/asrs/warehouse-pklb/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-22 15:31:37
* @LastEditors: zwq
* @LastEditTime: 2024-03-13 15:04:28
* @LastEditTime: 2024-06-04 16:14:21
* @Description:
*/
import request from '@/utils/request'
@ -40,6 +40,14 @@ export function outWarehouseStorehouse(data) {
data: data
})
}
// 盘库
export function makeWarehouseStorehouse(data) {
return request({
url: '/asrs/warehouse-storehouse/makewarehouseout',
method: 'post',
data: data
})
}
// 删除立库库位
export function deleteWarehouseStorehouse(id) {
return request({
@ -109,6 +117,21 @@ export function getLineList(query) {
params: query
})
}
// 获得线边库
export function getLine(id) {
return request({
url: '/asrs/line-edge-library/get?id=' + id,
method: 'get'
})
}
// 更新线边库
export function updateLine(data) {
return request({
url: '/asrs/line-edge-library/update',
method: 'put',
data: data
})
}
// 码头移库
export function moveLine(query) {
return request({

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2024-04-16 15:08:37
* @LastEditors: zwq
* @LastEditTime: 2024-05-24 09:57:14
* @LastEditTime: 2024-05-28 14:30:33
* @Description:
*/
import request from '@/utils/request'
@ -119,9 +119,18 @@ export function getCode() {
// 导出历史 Excel
export function exportDeliveryHisExcel(query) {
return request({
url: '/asrs/delivery-history/export-excel',
url: '/asrs/delivery-history-product/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}
// 出库后同步mes信息
export function mesoutsync(data) {
return request({
url: '/asrs/delivery-history/mesoutsync',
method: 'post',
data: data
})
}

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2024-05-22 10:09:16
* @LastEditTime: 2024-06-03 16:50:47
* @Description:
-->
<template>
@ -145,7 +145,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工单" prop="workOrder">
<el-form-item label="产出工单" prop="workOrder">
<el-input
v-model="dataForm.workOrder"
clearable
@ -232,6 +232,7 @@
<el-table-column prop="productName" label="物料名称" />
<el-table-column prop="productCode" label="物料编码" width="120" />
<el-table-column prop="productQuality" label="货物品质" />
<el-table-column prop="process" label="工序" />
<el-table-column fixed="right" label="操作" width="50">
<template slot-scope="scope">
<el-button
@ -266,39 +267,51 @@
<el-form-item label="托盘编码" prop="trayCode">
<el-input
v-model="listQuery.trayCode"
@input="$forceUpdate()"
placeholder="请输入托盘编码"
clearable />
</el-form-item>
<el-form-item label="工序" prop="process">
<el-input
v-model="listQuery.process"
@input="$forceUpdate()"
placeholder="请输入工序"
clearable />
</el-form-item>
<el-form-item label="膜卷号" prop="rollCode">
<el-input
v-model="listQuery.rollCode"
@input="$forceUpdate()"
placeholder="请输入膜卷号"
clearable />
</el-form-item>
<el-form-item label="产品名" prop="productName">
<el-input
v-model="listQuery.productName"
@input="$forceUpdate()"
placeholder="请输入产品名"
clearable />
</el-form-item>
<el-form-item label="品质" prop="grade">
<el-input
v-model="listQuery.grade"
@input="$forceUpdate()"
placeholder="请输入品质"
clearable />
</el-form-item>
<el-form-item label="当日工单" prop="todayOrder">
<el-input
v-model="listQuery.todayOrder"
@input="$forceUpdate()"
placeholder="当日工单"
clearable />
</el-form-item>
<el-form-item label="入库时间" prop="createTime">
<el-date-picker
v-model="listQuery.createTime"
style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss"
type="daterange"
type="datetimerange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
@ -410,6 +423,7 @@ export default {
rollCode: null,
productName: null,
grade: null,
todayOrder: null,
pageSize: 10,
pageNo: 1,
total: 1,
@ -536,6 +550,7 @@ export default {
this.$set(this.tableData[this.trayIndex], 'productName', val.description);
this.$set(this.tableData[this.trayIndex], 'productCode', val.productCode);
this.$set(this.tableData[this.trayIndex], 'productQuality', val.grade);
this.$set(this.tableData[this.trayIndex], 'process', val.process);
},
//dialog
handleQuery() {
@ -546,11 +561,12 @@ export default {
this.listQuery.rollCode = this.listQuery.rollCode || null;
this.listQuery.productName = this.listQuery.productName || null;
this.listQuery.grade = this.listQuery.grade || null;
this.listQuery.startTime = this.listQuery.searchTime
? this.listQuery.searchTime[0]
this.listQuery.todayOrder = this.listQuery.todayOrder || null;
this.listQuery.startTime = this.listQuery.createTime
? this.listQuery.createTime[0]
: null;
this.listQuery.endTime = this.listQuery.searchTime
? this.listQuery.searchTime[1]
this.listQuery.endTime = this.listQuery.createTime
? this.listQuery.createTime[1]
: null;
this.getGridList();
},

View File

@ -113,7 +113,7 @@ const tableProps = [
},
{
prop: 'workOrder',
label: '工单',
label: '产出工单',
},
{
prop: 'department',
@ -243,8 +243,8 @@ export default {
},
{
type: 'input',
label: '工单',
placeholder: '工单',
label: '产出工单',
placeholder: '产出工单',
param: 'workOrder',
},
{

View File

@ -20,7 +20,7 @@
<product :delivery-history-id="scope.row.id"></product>
</template>
</el-table-column>
<el-table-column prop="deliveryCode" label="出库单号" width="155" />
<el-table-column prop="deliveryCode" label="出库单号" width="155" />
<el-table-column prop="productName" label="货物名称" />
<el-table-column prop="trayCode" label="托盘编码" />
<el-table-column prop="needTrayNumber" label="所需托盘数" width="90" />
@ -47,13 +47,11 @@
<el-table-column prop="region" label="发货区域" width="95">
<template slot-scope="scope">
<span>
{{
scope.row.region >= 0 ? region[scope.row.region] : ''
}}
{{ scope.row.region >= 0 ? region[scope.row.region] : '' }}
</span>
</template>
</el-table-column>
<el-table-column prop="productQuality" label="货物品质" width="75" />
<el-table-column prop="productQuality" label="货物品质" width="75" />
<el-table-column prop="rollCode" label="膜卷号" />
<el-table-column prop="trayType" label="托盘类型" width="75">
<template slot-scope="scope">
@ -62,7 +60,7 @@
</span>
</template>
</el-table-column>
<el-table-column prop="workOrder" label="工单" />
<el-table-column prop="workOrder" label="产出工单" />
<el-table-column prop="department" label="部门" />
<el-table-column prop="applicant" label="申请人" />
<el-table-column prop="process" label="工序" />
@ -71,6 +69,17 @@
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="90">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
@click="handleClick({ data: scope.row, type: 'mes' })"
v-hasPermi="['asrs:deliveryHis:mes']">
同步给mes
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
:limit.sync="listQuery.pageSize"
@ -83,7 +92,11 @@
<script>
import product from './product-mini';
import basicPage from '../mixins/basic-page';
import { getDeliveryHisPage,exportDeliveryHisExcel } from '@/api/oth/delivery';
import {
getDeliveryHisPage,
exportDeliveryHisExcel,
mesoutsync,
} from '@/api/oth/delivery';
import { getLineList } from '@/api/asrs/warehouseStorehouse';
import { getGoodSpecificationPage } from '@/api/asrs/goodSpecification';
@ -128,7 +141,7 @@ export default {
status,
deliveryType,
trayType,
region,
region,
tableData: [],
formConfig: [
{
@ -167,8 +180,20 @@ export default {
},
{
type: 'input',
label: '工单',
placeholder: '工单',
label: '复判等级',
placeholder: '复判等级',
param: 'epddj',
},
{
type: 'input',
label: '出库单号',
placeholder: '出库单号',
param: 'deliveryCode',
},
{
type: 'input',
label: '产出工单',
placeholder: '产出工单',
param: 'workOrder',
},
{
@ -196,7 +221,7 @@ export default {
color: 'primary',
},
{
type: 'button',
type: this.$auth.hasPermi('asrs:deliveryHis:export') ? 'button' : '',
btnName: '导出',
name: 'export',
color: 'primary',
@ -236,26 +261,50 @@ export default {
this.listQuery.workOrder = val.workOrder || null;
this.listQuery.process = val.process || null;
this.listQuery.rollCode = val.rollCode || null;
this.listQuery.epddj = val.epddj || null;
this.listQuery.trayCode = val.trayCode || null;
this.listQuery.deliveryCode = val.deliveryCode || null;
this.getDataList();
break;
case 'export':
this.listQuery.pageNo = undefined;
this.listQuery.pageSize = undefined;
this.listQuery.productName = val.productName;
this.listQuery.lineEdgeLibraryCode = val.lineEdgeLibraryCode || null;
this.listQuery.region = val.region || null;
this.listQuery.productQuality = val.quality || null;
this.listQuery.workOrder = val.workOrder || null;
this.listQuery.process = val.process || null;
this.listQuery.rollCode = val.rollCode || null;
this.listQuery.trayCode = val.trayCode || null;
this.handleExport(this.listQuery, '历史出库单导出');
const params = {
inventory: val.rollCode || null,
trayCode: val.trayCode || null,
deliveryCode: val.deliveryCode || null,
};
this.handleExport(params, '历史出库单导出');
break;
default:
console.log(val);
}
},
otherMethods(val) {
mesoutsync({deliveryCode:val.data.deliveryCode}).then(({ data }) => {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
this.getDataList();
},
});
});
},
/** 导出按钮操作 */
handleExport(params, name) {
//
this.$modal
.confirm('是否确认 仅根据(膜卷号、出库单号和托盘编码) 条件导出!!!')
.then(() => {
this.exportLoading = true;
return this.urlOptions.exportURL(params);
})
.then((response) => {
this.$download.excel(response, name + '.xls');
this.exportLoading = false;
})
.catch(() => {});
},
},
};
</script>

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-24 14:47:58
* @LastEditors: zwq
* @LastEditTime: 2024-05-22 16:42:40
* @LastEditTime: 2024-05-31 14:07:27
* @Description:
-->
<template>
@ -12,6 +12,8 @@
v-loading="dataListLoading"
:table-props="tableProps"
max-height="200"
:page="1"
:limit="listQuery.total"
:table-data="tableData" />
</div>
</template>
@ -52,6 +54,10 @@ const tableProps = [
prop: 'grade',
label: '品质',
},
{
prop: 'epddj',
label: '复判等级',
},
{
prop: 'planQty',
label: '数量',

View File

@ -2,7 +2,7 @@
/*
* @Date: 2020-12-29 16:49:28
* @LastEditors: zwq
* @LastEditTime: 2024-05-21 14:44:43
* @LastEditTime: 2024-06-05 11:00:34
* @FilePath: \basic-admin\src\filters\basicData\index.js
* @Description:
*/
@ -25,6 +25,11 @@ const table = {
1: 'B',
0: 'A',
},
statepk: {
2: '有误',
1: '无误',
0: '未盘库',
},
mainTaskType: {
1: '入库',
2: '出库',

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2024-01-17 09:58:41
* @LastEditors: zwq
* @LastEditTime: 2024-05-24 11:27:27
* @LastEditTime: 2024-06-04 15:58:23
* @Description:
-->
<template>
@ -17,84 +17,200 @@
<el-tag effect="dark" color="#7362F3" style="border: none"></el-tag>
</div>
<div class="mainbody">
<el-divider class="divider" content-position="left">
二次分拣区
</el-divider>
<div v-for="i in 5" :key="i + 'G'">
<el-row style="margin-bottom: 10px" type="flex" class="flex-warp">
<div
class="dashboard-layout-item"
v-for="j in wareData
.filter(
(item) =>
item.agvGroundCode.substr(1, 2) == 6 - i && item.region === 4
)
.reverse()"
:key="j.id"
:title="j.lineEdgeLibraryCode">
<el-popover
placement="top-start"
:title="j.lineEdgeLibraryCode"
width="200"
trigger="hover">
<div class="point" />
托盘编码: {{ j.trayCode }}
<br />
<div class="point" />
Agv地码: {{ j.agvGroundCode }}
<el-row :gutter="20">
<el-col :span="12">
<el-divider class="divider" content-position="left">
二次分拣区
</el-divider>
<div v-for="i in 5" :key="i + 'G'">
<el-row style="margin-bottom: 10px" type="flex" class="flex-warp">
<div
slot="reference"
class="hoverDiv"
:style="{
cursor:
j.lineEdgeLibraryState === 1 ? 'not-allowed' : 'pointer',
background: bgColor[j.lineEdgeLibraryState],
}"></div>
</el-popover>
class="dashboard-layout-item"
v-for="j in wareData
.filter(
(item) =>
item.agvGroundCode.substr(1, 2) == 6 - i &&
item.region === 4
)
.reverse()"
:key="j.id"
:title="j.lineEdgeLibraryCode">
<el-popover
placement="top-start"
:title="j.lineEdgeLibraryCode"
width="200"
trigger="hover">
<div class="point" />
托盘编码: {{ j.trayCode }}
<br />
<div class="point" />
Agv地码: {{ j.agvGroundCode }}
<br />
<el-button
@click="lState(j.id)"
v-hasPermi="['asrs:warehouse-line-monitoring:change']"
type="text">
改变库位状态
</el-button>
<div
slot="reference"
class="hoverDiv"
:style="{
cursor:
j.lineEdgeLibraryState === 1
? 'not-allowed'
: 'pointer',
background: bgColor[j.lineEdgeLibraryState],
}"></div>
</el-popover>
</div>
</el-row>
</div>
</el-row>
</div>
<el-divider class="divider" content-position="left">
一次分拣区
</el-divider>
<div v-for="i in 7" :key="i + 'F'">
<el-row style="margin-bottom: 10px" type="flex" class="flex-warp">
<!-- <div
</el-col>
<el-col :span="12">
<el-divider class="divider" content-position="left">
自动包装区
</el-divider>
<el-row style="margin-bottom: 10px" type="flex" class="flex-warp">
<div
class="dashboard-layout-item"
v-for="j in wareData.filter((item) => item.region == 8).reverse()"
:key="j.id"
:title="j.lineEdgeLibraryCode">
<el-popover
placement="top-start"
:title="j.lineEdgeLibraryCode"
width="200"
trigger="hover">
<div class="point" />
托盘编码: {{ j.trayCode }}
<br />
<div class="point" />
Agv地码: {{ j.agvGroundCode }}
<br />
<el-button
@click="lState(j.id)"
v-hasPermi="['asrs:warehouse-line-monitoring:change']"
type="text">
改变库位状态
</el-button>
<div
slot="reference"
class="hoverDiv"
:style="{
cursor:
j.lineEdgeLibraryState === 1 ? 'not-allowed' : 'pointer',
background: bgColor[j.lineEdgeLibraryState],
}"></div>
</el-popover>
</div>
</el-row>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-divider class="divider" content-position="left">
一次分拣区
</el-divider>
<div v-for="i in 7" :key="i + 'F'">
<el-row style="margin-bottom: 10px" type="flex" class="flex-warp">
<!-- <div
class="dashboard-layout-item"
style="opacity: 0"
v-if="i === 7" /> -->
<div
class="dashboard-layout-item"
v-for="j in wareData
.filter(
(item) =>
item.agvGroundCode.substr(1, 2) == 8 - i && item.region === 2
)
.reverse()"
:key="j.id"
:title="j.lineEdgeLibraryCode">
<el-popover
placement="top-start"
:title="j.lineEdgeLibraryCode"
width="200"
trigger="hover">
<div class="point" />
托盘编码: {{ j.trayCode }}
<br />
<div class="point" />
Agv地码: {{ j.agvGroundCode }}
<div
slot="reference"
class="hoverDiv"
:style="{
cursor:
j.lineEdgeLibraryState === 1 ? 'not-allowed' : 'pointer',
background: bgColor[j.lineEdgeLibraryState],
}"></div>
</el-popover>
class="dashboard-layout-item"
v-for="j in wareData
.filter(
(item) =>
item.agvGroundCode.substr(1, 2) == 8 - i &&
item.region === 2
)
.reverse()"
:key="j.id"
:title="j.lineEdgeLibraryCode">
<el-popover
placement="top-start"
:title="j.lineEdgeLibraryCode"
width="200"
trigger="hover">
<div class="point" />
托盘编码: {{ j.trayCode }}
<br />
<div class="point" />
Agv地码: {{ j.agvGroundCode }}
<br />
<el-button
@click="lState(j.id)"
v-hasPermi="['asrs:warehouse-line-monitoring:change']"
type="text">
改变库位状态
</el-button>
<div
slot="reference"
class="hoverDiv"
:style="{
cursor:
j.lineEdgeLibraryState === 1
? 'not-allowed'
: 'pointer',
background: bgColor[j.lineEdgeLibraryState],
}"></div>
</el-popover>
</div>
</el-row>
</div>
</el-row>
</div>
</el-col>
<el-col :span="12">
<el-divider class="divider" content-position="left">
手动包装区
</el-divider>
<div v-for="i in 2" :key="i + 'E'">
<el-row style="margin-bottom: 10px" type="flex" class="flex-warp">
<div
class="dashboard-layout-item"
v-for="j in wareData
.filter(
(item) =>
item.agvGroundCode.substr(1, 2) == i + 1 &&
item.region === 5
)
.reverse()"
:key="j.id"
:title="j.lineEdgeLibraryCode">
<el-popover
placement="top-start"
:title="j.lineEdgeLibraryCode"
width="200"
trigger="hover">
<div class="point" />
托盘编码: {{ j.trayCode }}
<br />
<div class="point" />
Agv地码: {{ j.agvGroundCode }}
<br />
<el-button
@click="lState(j.id)"
v-hasPermi="['asrs:warehouse-line-monitoring:change']"
type="text">
改变库位状态
</el-button>
<div
slot="reference"
class="hoverDiv"
:style="{
cursor:
j.lineEdgeLibraryState === 1
? 'not-allowed'
: 'pointer',
background: bgColor[j.lineEdgeLibraryState],
}"></div>
</el-popover>
</div>
</el-row>
</div>
</el-col>
</el-row>
<el-divider class="divider" content-position="left">
一次分切区
</el-divider>
@ -114,6 +230,13 @@
<br />
<div class="point" />
Agv地码: {{ j.agvGroundCode }}
<br />
<el-button
@click="lState(j.id)"
v-hasPermi="['asrs:warehouse-line-monitoring:change']"
type="text">
改变库位状态
</el-button>
<div
slot="reference"
class="hoverDiv"
@ -222,6 +345,13 @@
<br />
<div class="point" />
Agv地码: {{ j.agvGroundCode }}
<br />
<el-button
@click="lState(j.id)"
v-hasPermi="['asrs:warehouse-line-monitoring:change']"
type="text">
改变库位状态
</el-button>
<div
slot="reference"
class="hoverDiv"
@ -233,9 +363,7 @@
</el-popover>
</div>
</el-row>
<el-divider class="divider" content-position="left">
涂覆区
</el-divider>
<el-divider class="divider" content-position="left">涂覆区</el-divider>
<div v-for="i in 4" :key="i + 'C'">
<el-row style="margin-bottom: 10px" type="flex" class="flex-warp">
<div
@ -258,6 +386,13 @@
<br />
<div class="point" />
Agv地码: {{ j.agvGroundCode }}
<br />
<el-button
@click="lState(j.id)"
v-hasPermi="['asrs:warehouse-line-monitoring:change']"
type="text">
改变库位状态
</el-button>
<div
slot="reference"
class="hoverDiv"
@ -271,12 +406,40 @@
</el-row>
</div>
</div>
<el-dialog title="改变库位状态" :visible.sync="dialogFormVisible">
<el-form :model="form" label-width="80px">
<el-form-item label="库位名称">
<el-input v-model="form.lineEdgeLibraryCode" readonly />
</el-form-item>
<el-form-item label="库位状态">
<el-radio-group v-model="form.lineEdgeLibraryState">
<el-radio :label="0"></el-radio>
<el-radio :label="1"></el-radio>
<el-radio :label="2"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="托盘编码">
<el-input
v-model="form.trayCode"
placeholder="请输入内容"
clearable />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
<el-button type="primary" @click="changeState"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import basicPage from '../mixins/basic-page';
import { getLineList } from '@/api/asrs/warehouseStorehouse';
import {
getLineList,
getLine,
updateLine,
} from '@/api/asrs/warehouseStorehouse';
export default {
mixins: [basicPage],
@ -287,15 +450,23 @@ export default {
},
listQuery: {},
wareData: [],
dialogFormVisible: false,
bgColor: ['#d3d3d3', '#7362F3', '#16DC09'], //
formConfig: [
{
type: 'button',
type: this.$auth.hasPermi('asrs:warehouse-line-monitoring:query')
? 'button'
: '',
btnName: '刷新',
name: 'search',
color: 'primary',
},
],
form: {
id: undefined,
lineEdgeLibraryState: undefined,
trayCode: '',
},
};
},
components: {},
@ -317,10 +488,22 @@ export default {
this.dataListLoading = true;
this.urlOptions.getDataListURL(this.listQuery).then((response) => {
this.wareData = response.data;
console.log(this.wareData);
this.dataListLoading = false;
});
},
lState(id) {
getLine(id).then((response) => {
this.form = response.data;
this.dialogFormVisible = true;
});
},
changeState() {
updateLine(this.form).then((response) => {
this.$modal.msgSuccess('修改成功');
this.dialogFormVisible = false;
this.getDataList();
});
},
},
};
</script>

View File

@ -0,0 +1,65 @@
<!--
* @Author: zwq
* @Date: 2023-08-01 15:27:31
* @LastEditors: zwq
* @LastEditTime: 2023-08-01 16:25:54
* @Description:
-->
<template>
<div :class="[className, { 'p-0': noPadding }]">
<slot />
</div>
</template>
<script>
export default {
props: {
size: {
// : xl lg md sm
type: String,
default: 'de',
validator: function (val) {
return ['xl', 'lg', 'de', 'md', 'sm'].indexOf(val) !== -1;
},
},
noPadding: {
type: Boolean,
default: false,
},
},
computed: {
className: function () {
return `${this.size}-title`;
},
},
};
</script>
<style lang="scss" scoped>
$pxls: (xl, 28px) (lg, 24px) (de, 20px) (md, 18px) (sm, 16px);
$mgr: 8px;
@each $size, $height in $pxls {
.#{$size}-title {
font-size: 18px;
line-height: $height;
color: #000;
font-weight: 500;
font-family: '微软雅黑', 'Microsoft YaHei', Arial, Helvetica, sans-serif;
&::before {
content: '';
display: inline-block;
vertical-align: top;
width: 4px;
height: $height + 2px;
border-radius: 1px;
margin-right: $mgr;
background-color: #0b58ff;
}
}
}
.p-0 {
padding: 0;
}
</style>

View File

@ -0,0 +1,319 @@
<!--
* @Author: zwq
* @Date: 2023-08-22 15:01:55
* @LastEditors: zwq
* @LastEditTime: 2024-06-07 15:50:38
* @Description:
-->
<template>
<el-drawer
:visible.sync="visible"
:show-close="false"
:destroy-on-close="true"
:wrapper-closable="false"
class="drawer"
size="60%">
<small-title slot="title" :no-padding="true">盘货明细表</small-title>
<div class="content">
<div class="visual-part">
<el-form
ref="dataForm"
:model="dataForm"
:rules="dataRule"
label-width="100px"
label-position="top"
@keyup.enter.native="dataFormSubmit">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="托盘编码" prop="containerCode">
<el-input
v-model="dataForm.containerCode"
disabled
placeholder="请输入托盘编码" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="货物规格名称" prop="goodSpecificationName">
<el-input
v-model="dataForm.goodSpecificationName"
disabled
placeholder="请输入货物规格名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="品质" prop="grade">
<el-input
v-model="dataForm.grade"
disabled
placeholder="请输入品质" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="产出工单" prop="orderFrom">
<el-input
v-model="dataForm.orderFrom"
disabled
placeholder="请输入产出工单" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<small-title
style="margin: 16px 0; padding-left: 8px"
:no-padding="true">
膜卷信息
</small-title>
<div class="attr-list">
<base-table
:table-props="tableProps"
:page="1"
:limit="100"
@emitFun="inputChange"
:height="400"
:table-data="productAttributeList"></base-table>
<!-- 表格底部加号 -->
<el-button class="checkButton" type="primary" @click="check" :loading="isloading">
检查
</el-button>
</div>
</div>
</div>
<div style="position: absolute; bottom: 24px; right: 24px">
<el-button style="margin-right: 10px" @click="goback()">返回</el-button>
<span>
<el-button
style="margin-right: 10px"
type="success"
:loading="isloading"
@click="makeIn()">
入库
</el-button>
<el-button type="primary" @click="checkout()" :loading="isloading">
同步mes出库
</el-button>
</span>
</div>
</el-drawer>
</template>
<script>
import {
getWarehousePklbDetailPage,
getWarehousePklbDetailCheck,
makeWarehouseIn,
checkout,
} from '@/api/asrs/warehousePklb';
import inputArea from '../mixins/inputArea';
import SmallTitle from './SmallTitle';
const tableProps = [
{
prop: 'subContainerCode',
label: '悬臂',
},
{
prop: 'inventory',
label: '膜卷号',
},
{
prop: 'inventoryInput',
label: '输入膜卷号',
subcomponent: inputArea,
},
];
export default {
components: { SmallTitle },
data() {
return {
visible: false,
isloading: false,
tableProps,
productAttributeList: [],
dataForm: {
warehouseStorehouseStorageId: '',
orderFrom: '',
containerCode: '',
grade: '',
goodSpecificationName: '',
},
listQuery: {
agvEndPoint: null,
barCode: null,
asrsLineEdgeLibraryId: null,
asrsLineEdgeLibraryName: null,
},
dataRule: {},
};
},
methods: {
initData() {
this.productAttributeList.splice(0);
},
init(data) {
this.isloading = false;
this.dataForm.warehouseStorehouseStorageId = data.warehouseStorehouseStorageId;
this.listQuery = {
agvEndPoint: data.agvEndPoint,
barCode: data.barCode,
asrsLineEdgeLibraryId: data.asrsLineEdgeLibraryId,
asrsLineEdgeLibraryName: data.asrsLineEdgeLibraryName,
};
this.initData();
this.visible = true;
this.$nextTick(() => {
this.$refs['dataForm'].resetFields();
const params = {
pageSize: 100,
pageNo: 1,
warehouseStorehouseStorageId:
this.dataForm.warehouseStorehouseStorageId,
};
getWarehousePklbDetailPage(params).then((response) => {
if (response.data.list.length>0) {
this.dataForm = response.data.list[0];
}
this.productAttributeList = response.data.list;
});
});
},
inputChange(data) {
switch (data.sType) {
case 1:
this.productAttributeList[data._pageIndex - 1][data.prop] =
data[data.prop];
break;
case 2:
this.productAttributeList[data._pageIndex - 1][data.prop] =
data.string ? data.string.split('+')[0] : '';
this.productAttributeList[data._pageIndex - 1][data.prop + 'Name'] =
data.string ? data.string.split('+')[1] : '';
break;
default:
console.log(val);
}
},
//
check() {
this.isloading = true;
let cancel = false;
let strings = [];
this.productAttributeList.forEach((item) => {
if (item.inventoryInput) {
strings.push(item.inventoryInput);
} else {
cancel = true;
this.isloading = false;
this.$modal.msgWarning('膜卷号必须所有都输入才能检查!');
}
});
if (cancel) return;
const data = {
warehouseStorehouseStorageId:this.dataForm.warehouseStorehouseStorageId,
userInputCheckList:strings
}
getWarehousePklbDetailCheck(data).then((response) => {
this.$modal.msgWarning(response);
this.isloading = false;
})
.catch((error) => {
console.error('There was an error!', error);
this.isloading = false;
});
},
// mes
checkout() {
const data = {
warehouseStorehouseStorageId:
this.dataForm.warehouseStorehouseStorageId,
};
this.isloading = true;
checkout(data).then((response) => {
this.$modal.msgSuccess('同步mes出库成功');
this.visible = false;
this.isloading = false;
this.$emit('refreshDataList');
})
.catch((error) => {
console.error('There was an error!', error);
this.isloading = false;
});
},
//
makeIn() {
const data = {
...this.listQuery,
makeoutlist: this.productAttributeList,
};
this.isloading = true;
makeWarehouseIn(data).then((response) => {
this.$modal.msgSuccess('入库成功');
this.visible = false;
this.isloading = false;
this.$emit('refreshDataList');
})
.catch((error) => {
console.error('There was an error!', error);
this.isloading = false;
});
},
goback() {
this.$emit('refreshDataList');
this.visible = false;
this.initData();
},
},
};
</script>
<style scoped>
.drawer >>> .el-drawer {
border-radius: 8px 0 0 8px;
}
.drawer >>> .el-form-item__label {
padding: 0;
}
.drawer >>> .el-form-item {
margin: 0;
}
.drawer >>> .el-drawer__header {
margin: 0;
padding: 32px 32px 24px;
border-bottom: 1px solid #dcdfe6;
margin-bottom: 10px;
}
.drawer >>> .content {
padding: 0 24px 30px;
display: flex;
flex-direction: column;
height: 100%;
}
.drawer >>> .visual-part {
flex: 1 auto;
max-height: 76vh;
overflow: hidden;
overflow-y: scroll;
padding-right: 10px; /* 调整滚动条样式 */
}
.drawer >>> .el-form,
.drawer >>> .attr-list {
padding: 0 16px;
}
.checkButton {
width: 100%;
height: 35px;
border-top: none;
border-radius: 0;
}
</style>

View File

@ -0,0 +1,330 @@
<template>
<div class="app-container">
<search-bar
:isFold="true"
:formConfigs="formConfig"
ref="searchBarForm"
@headBtnClick="buttonClick" />
<base-table
v-loading="dataListLoading"
:table-props="tableProps"
:page="listQuery.pageNo"
:limit="listQuery.pageSize"
:table-data="tableData">
<method-btn
v-if="tableBtn.length"
slot="handleBtn"
:width="80"
label="操作"
:method-list="tableBtn"
@clickBtn="handleClick" />
</base-table>
<pagination
:limit.sync="listQuery.pageSize"
:page.sync="listQuery.pageNo"
:total="listQuery.total"
@pagination="getDataList" />
<add-or-update
v-if="addOrUpdateVisible"
ref="addOrUpdate"
@refreshDataList="getDataList" />
</div>
</template>
<script>
import basicPage from '../mixins/basic-page';
import { parseTime } from '../mixins/code-filter';
import codeFilter from '../mixins/code-filter';
import { getWarehousePklbPage } from '@/api/asrs/warehousePklb';
import AddOrUpdate from './add-or-updata';
const tableProps = [
{
prop: 'mainTaskCode',
label: '任务编码',
},
{
prop: 'inOutWarehouseName',
label: '出入移库库位',
},
{
prop: 'relocationWarehouseName',
label: '移库终点库位',
},
{
prop: 'mainTaskType',
label: '任务类型',
filter: codeFilter('mainTaskType'),
width: 100,
},
{
prop: 'stacker',
label: '堆垛机',
width: 110,
},
{
prop: 'barCode',
label: '托盘编码',
},
{
prop: 'agv',
label: 'agv',
},
{
prop: 'agvStartPoint',
label: 'AGV起点',
},
{
prop: 'agvEndPoint',
label: 'AGV终点',
},
{
prop: 'mainTaskState',
label: '状态',
filter: codeFilter('mainTaskState'),
},
{
prop: 'statepk',
label: '盘库状态',
filter: codeFilter('statepk'),
},
{
prop: 'taskSource',
label: '任务来源',
filter: codeFilter('taskSource'),
width: 100,
},
{
prop: 'createTime',
label: '创建时间',
filter: parseTime,
width: 150,
},
];
const mainTaskType = [
{
name: '入库',
id: 1,
},
{
name: '出库',
id: 2,
},
{
name: '移库',
id: 3,
},
{
name: '出库+移库',
id: 4,
},
{
name: '不带agv入库',
id: 5,
},
{
name: '不带agv出库',
id: 6,
},
{
name: '入库+6臂空托盘出库',
id: 7,
},
{
name: '不带agv出库+移库',
id: 8,
},
{
name: '入库+12臂空托盘出库',
id: 9,
},
{
name: '平库移库',
id: 10,
},
];
const mainTaskState = [
{
name: '开始',
id: 0,
},
{
name: '已发送agv',
id: 1,
},
{
name: 'agv运行中',
id: 2,
},
{
name: '已发送堆垛机',
id: 3,
},
{
name: '堆垛机运行中',
id: 4,
},
{
name: '完成',
id: 5,
},
{
name: '已发送传输线',
id: 6,
},
{
name: '传输线运行中',
id: 7,
},
{
name: '暂时无空托盘',
id: 8,
},
];
export default {
mixins: [basicPage],
data() {
return {
urlOptions: {
getDataListURL: getWarehousePklbPage,
},
listQuery: {
pageSize: 10,
pageNo: 1,
total: 1,
},
tableProps,
tableBtn: [
{
type: 'check',
btnName: '检查',
showParam: {
type: '&',
data: [
{
type: 'equal',
name: 'mainTaskState',
value: 5,
},
],
},
},
],
tableData: [],
formConfig: [
{
type: 'input',
label: '任务编码',
placeholder: '任务编码',
param: 'code',
},
{
type: 'select',
label: '任务类型',
selectOptions: mainTaskType,
param: 'taskType',
defaultSelect: '',
filterable: true,
},
{
type: 'input',
label: '托盘编码',
placeholder: '托盘编码',
param: 'tcode',
},
{
type: 'select',
label: '状态',
selectOptions: mainTaskState,
param: 'status',
defaultSelect: '',
filterable: true,
},
{
type: 'select',
label: 'agv',
selectOptions: [],
param: 'agv',
defaultSelect: '',
filterable: true,
},
{
type: 'datePicker',
label: '选择日期',
dateType: 'daterange',
format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
param: 'searchTime',
},
{
type: 'button',
btnName: '搜索',
name: 'search',
color: 'primary',
},
{
type: 'button',
btnName: '重置',
name: 'reset',
},
],
};
},
components: {
AddOrUpdate,
},
created() {
this.setFormConfig();
},
methods: {
setFormConfig() {
for (let i = 1; i <= 16; i++) {
const obj = {
id: i,
name: i,
};
this.formConfig[4].selectOptions.push(obj);
}
},
buttonClick(val) {
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
this.listQuery.pageSize = 10;
this.listQuery.mainTaskCode = val.code;
this.listQuery.mainTaskType = val.taskType;
this.listQuery.barCode = val.tcode;
this.listQuery.mainTaskState = val.status;
this.listQuery.agv = val.agv;
this.listQuery.createTime = val.searchTime;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : '';
this.listQuery.endTime = val.searchTime ? val.searchTime[1] : '';
this.getDataList();
break;
case 'reset':
this.$refs.searchBarForm.resetForm();
this.listQuery = {
warehouseId: '1696803324030865409',
pageSize: 10,
pageNo: 1,
total: 1,
};
this.getDataList();
break;
default:
console.log(val);
}
},
otherMethods(val) {
this.addOrUpdateVisible = true;
this.addOrEditTitle = '盘货明细表';
this.$nextTick(() => {
this.$refs.addOrUpdate.init(val.data);
});
},
},
};
</script>

View File

@ -51,7 +51,7 @@
</span>
</template>
</el-table-column>
<el-table-column label="操作" width="100">
<el-table-column label="操作" width="120">
<template v-slot="scope">
<span v-if="scope.row.deactivate === 1">
<el-button
@ -70,6 +70,14 @@
v-hasPermi="['asrs:warehouse-storehouse-storage:out']">
出库
</el-button>
<el-button
size="mini"
v-if="scope.row.warehouseStorehouseState === 2"
type="text"
@click="handleClick({ data: scope.row, type: 'make' })"
v-hasPermi="['asrs:warehouse-storehouse-storage:out']">
盘库
</el-button>
<el-button
size="mini"
v-if="scope.row.warehouseStorehouseState === 2"
@ -356,7 +364,13 @@ export default {
this.$nextTick(() => {
this.$refs.drawerRef.init(val.data.id);
});
} else if (val.type === 'restore') {
} else if (val.type === 'make') {
this.addOrUpdateVisible = true;
this.addOrEditTitle = '盘库';
this.$nextTick(() => {
this.$refs.addOrUpdate.init(val.data.id, false,this.listQuery.warehouseId);
});
}else if (val.type === 'restore') {
const dataForm = {
id: val.data.id.id,
deactivate: 1,

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2024-04-25 16:39:52
* @LastEditTime: 2024-06-04 16:17:07
* @Description:
-->
<template>
@ -16,13 +16,13 @@
v-if="!type"
label-width="150px"
label="选择到货区域"
class="drawer"
class="drawer"
prop="region">
<el-select
v-model="dataForm.region"
style="width: 100%"
@change="getOutArr"
:popper-append-to-body="false"
@change="getOutArr"
:popper-append-to-body="false"
placeholder="请选择区域">
<el-option
v-for="item in regionArr"
@ -35,13 +35,13 @@
v-if="!type"
label-width="150px"
label="选择到货位置"
class="drawer"
class="drawer"
prop="targetId">
<el-select
v-model="dataForm.targetId"
:disabled="outDisable"
:disabled="outDisable"
style="width: 100%"
:popper-append-to-body="false"
:popper-append-to-body="false"
placeholder="请选择位置">
<el-option
v-for="item in potArr"
@ -99,6 +99,7 @@ import {
outWarehouseStorehouse,
getLineList,
getWarehouseStorehouse,
makeWarehouseStorehouse,
} from '@/api/asrs/warehouseStorehouse';
import { getWarehouseStorehouseGoodsSpecificationPage } from '@/api/asrs/warehouseStorehouseGoodsSpecification';
@ -130,7 +131,7 @@ export default {
dataForm: {
sourceId: undefined,
targetId: undefined,
region: undefined,
region: undefined,
wareRow: undefined,
wareColumn: undefined,
wareLayer: undefined,
@ -142,10 +143,10 @@ export default {
potArr1: [],
potArr2: [],
potArr3,
regionArr,
regionArr,
type: 0,
isloading: false,
outDisable: true, //
outDisable: true, //
dataRule: {
region: [
{ required: true, message: '区域不能为空', trigger: 'change' },
@ -167,9 +168,9 @@ export default {
this.dataForm.sourceId = id || '';
this.warehouseId = wId || null;
this.dataForm.targetId = null;
this.dataForm.region = null
this.dataForm.region = null;
this.type = type;
this.outDisable = true
this.outDisable = true;
this.visible = true;
this.$nextTick(() => {
this.$refs['dataForm'].resetFields();
@ -206,12 +207,14 @@ export default {
});
});
},
getOutArr(val){
getLineList({'region':val,'warehouseId':this.warehouseId}).then((response) => {
getOutArr(val) {
getLineList({ region: val, warehouseId: this.warehouseId }).then(
(response) => {
this.potArr = response.data;
this.outDisable = false
});
},
this.outDisable = false;
}
);
},
//
dataFormSubmit() {
if (!this.isloading) {
@ -249,13 +252,16 @@ export default {
});
this.wareInfo.agvGroundCode = pos.agvGroundCode;
this.wareInfo.lineEdgeLibraryCode = pos.lineEdgeLibraryCode;
// const data = {
// id: this.dataForm.sourceId,
// agvGroundCode: position.agvGroundCode,
// lineEdgeLibraryCode: position.lineEdgeLibraryCode,
// };
outWarehouseStorehouse(this.wareInfo).then((response) => {
this.$modal.msgSuccess('出库成功');
if (this.type === 0) {
outWarehouseStorehouse(this.wareInfo).then((response) => {
this.$modal.msgSuccess('出库成功');
this.visible = false;
this.$emit('refreshDataList');
});
return;
}
makeWarehouseStorehouse(this.wareInfo).then((response) => {
this.$modal.msgSuccess('盘库成功');
this.visible = false;
this.$emit('refreshDataList');
});
@ -270,6 +276,6 @@ export default {
<style scoped>
.drawer >>> .el-select-dropdown__item {
font-size: 20px;
font-size: 20px;
}
</style>