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 * @Author: zwq
* @Date: 2023-08-22 15:31:37 * @Date: 2023-08-22 15:31:37
* @LastEditors: zwq * @LastEditors: zwq
* @LastEditTime: 2024-03-13 15:04:28 * @LastEditTime: 2024-06-04 16:14:21
* @Description: * @Description:
*/ */
import request from '@/utils/request' import request from '@/utils/request'
@ -40,6 +40,14 @@ export function outWarehouseStorehouse(data) {
data: data data: data
}) })
} }
// 盘库
export function makeWarehouseStorehouse(data) {
return request({
url: '/asrs/warehouse-storehouse/makewarehouseout',
method: 'post',
data: data
})
}
// 删除立库库位 // 删除立库库位
export function deleteWarehouseStorehouse(id) { export function deleteWarehouseStorehouse(id) {
return request({ return request({
@ -109,6 +117,21 @@ export function getLineList(query) {
params: 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) { export function moveLine(query) {
return request({ return request({

View File

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

View File

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

View File

@ -47,9 +47,7 @@
<el-table-column prop="region" label="发货区域" width="95"> <el-table-column prop="region" label="发货区域" width="95">
<template slot-scope="scope"> <template slot-scope="scope">
<span> <span>
{{ {{ scope.row.region >= 0 ? region[scope.row.region] : '' }}
scope.row.region >= 0 ? region[scope.row.region] : ''
}}
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
@ -62,7 +60,7 @@
</span> </span>
</template> </template>
</el-table-column> </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="department" label="部门" />
<el-table-column prop="applicant" label="申请人" /> <el-table-column prop="applicant" label="申请人" />
<el-table-column prop="process" label="工序" /> <el-table-column prop="process" label="工序" />
@ -71,6 +69,17 @@
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </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> </el-table>
<pagination <pagination
:limit.sync="listQuery.pageSize" :limit.sync="listQuery.pageSize"
@ -83,7 +92,11 @@
<script> <script>
import product from './product-mini'; import product from './product-mini';
import basicPage from '../mixins/basic-page'; 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 { getLineList } from '@/api/asrs/warehouseStorehouse';
import { getGoodSpecificationPage } from '@/api/asrs/goodSpecification'; import { getGoodSpecificationPage } from '@/api/asrs/goodSpecification';
@ -167,8 +180,20 @@ export default {
}, },
{ {
type: 'input', type: 'input',
label: '工单', label: '复判等级',
placeholder: '工单', placeholder: '复判等级',
param: 'epddj',
},
{
type: 'input',
label: '出库单号',
placeholder: '出库单号',
param: 'deliveryCode',
},
{
type: 'input',
label: '产出工单',
placeholder: '产出工单',
param: 'workOrder', param: 'workOrder',
}, },
{ {
@ -196,7 +221,7 @@ export default {
color: 'primary', color: 'primary',
}, },
{ {
type: 'button', type: this.$auth.hasPermi('asrs:deliveryHis:export') ? 'button' : '',
btnName: '导出', btnName: '导出',
name: 'export', name: 'export',
color: 'primary', color: 'primary',
@ -236,26 +261,50 @@ export default {
this.listQuery.workOrder = val.workOrder || null; this.listQuery.workOrder = val.workOrder || null;
this.listQuery.process = val.process || null; this.listQuery.process = val.process || null;
this.listQuery.rollCode = val.rollCode || null; this.listQuery.rollCode = val.rollCode || null;
this.listQuery.epddj = val.epddj || null;
this.listQuery.trayCode = val.trayCode || null; this.listQuery.trayCode = val.trayCode || null;
this.listQuery.deliveryCode = val.deliveryCode || null;
this.getDataList(); this.getDataList();
break; break;
case 'export': case 'export':
this.listQuery.pageNo = undefined; const params = {
this.listQuery.pageSize = undefined; inventory: val.rollCode || null,
this.listQuery.productName = val.productName; trayCode: val.trayCode || null,
this.listQuery.lineEdgeLibraryCode = val.lineEdgeLibraryCode || null; deliveryCode: val.deliveryCode || null,
this.listQuery.region = val.region || null; };
this.listQuery.productQuality = val.quality || null; this.handleExport(params, '历史出库单导出');
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, '历史出库单导出');
break; break;
default: default:
console.log(val); 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> </script>

View File

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

View File

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

View File

@ -2,7 +2,7 @@
* @Author: zwq * @Author: zwq
* @Date: 2024-01-17 09:58:41 * @Date: 2024-01-17 09:58:41
* @LastEditors: zwq * @LastEditors: zwq
* @LastEditTime: 2024-05-24 11:27:27 * @LastEditTime: 2024-06-04 15:58:23
* @Description: * @Description:
--> -->
<template> <template>
@ -17,6 +17,8 @@
<el-tag effect="dark" color="#7362F3" style="border: none"></el-tag> <el-tag effect="dark" color="#7362F3" style="border: none"></el-tag>
</div> </div>
<div class="mainbody"> <div class="mainbody">
<el-row :gutter="20">
<el-col :span="12">
<el-divider class="divider" content-position="left"> <el-divider class="divider" content-position="left">
二次分拣区 二次分拣区
</el-divider> </el-divider>
@ -27,7 +29,8 @@
v-for="j in wareData v-for="j in wareData
.filter( .filter(
(item) => (item) =>
item.agvGroundCode.substr(1, 2) == 6 - i && item.region === 4 item.agvGroundCode.substr(1, 2) == 6 - i &&
item.region === 4
) )
.reverse()" .reverse()"
:key="j.id" :key="j.id"
@ -42,6 +45,55 @@
<br /> <br />
<div class="point" /> <div class="point" />
Agv地码: {{ j.agvGroundCode }} 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-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 <div
slot="reference" slot="reference"
class="hoverDiv" class="hoverDiv"
@ -53,7 +105,10 @@
</el-popover> </el-popover>
</div> </div>
</el-row> </el-row>
</div> </el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-divider class="divider" content-position="left"> <el-divider class="divider" content-position="left">
一次分拣区 一次分拣区
</el-divider> </el-divider>
@ -68,7 +123,8 @@
v-for="j in wareData v-for="j in wareData
.filter( .filter(
(item) => (item) =>
item.agvGroundCode.substr(1, 2) == 8 - i && item.region === 2 item.agvGroundCode.substr(1, 2) == 8 - i &&
item.region === 2
) )
.reverse()" .reverse()"
:key="j.id" :key="j.id"
@ -83,18 +139,78 @@
<br /> <br />
<div class="point" /> <div class="point" />
Agv地码: {{ j.agvGroundCode }} Agv地码: {{ j.agvGroundCode }}
<br />
<el-button
@click="lState(j.id)"
v-hasPermi="['asrs:warehouse-line-monitoring:change']"
type="text">
改变库位状态
</el-button>
<div <div
slot="reference" slot="reference"
class="hoverDiv" class="hoverDiv"
:style="{ :style="{
cursor: cursor:
j.lineEdgeLibraryState === 1 ? 'not-allowed' : 'pointer', j.lineEdgeLibraryState === 1
? 'not-allowed'
: 'pointer',
background: bgColor[j.lineEdgeLibraryState], background: bgColor[j.lineEdgeLibraryState],
}"></div> }"></div>
</el-popover> </el-popover>
</div> </div>
</el-row> </el-row>
</div> </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 class="divider" content-position="left">
一次分切区 一次分切区
</el-divider> </el-divider>
@ -114,6 +230,13 @@
<br /> <br />
<div class="point" /> <div class="point" />
Agv地码: {{ j.agvGroundCode }} Agv地码: {{ j.agvGroundCode }}
<br />
<el-button
@click="lState(j.id)"
v-hasPermi="['asrs:warehouse-line-monitoring:change']"
type="text">
改变库位状态
</el-button>
<div <div
slot="reference" slot="reference"
class="hoverDiv" class="hoverDiv"
@ -222,6 +345,13 @@
<br /> <br />
<div class="point" /> <div class="point" />
Agv地码: {{ j.agvGroundCode }} Agv地码: {{ j.agvGroundCode }}
<br />
<el-button
@click="lState(j.id)"
v-hasPermi="['asrs:warehouse-line-monitoring:change']"
type="text">
改变库位状态
</el-button>
<div <div
slot="reference" slot="reference"
class="hoverDiv" class="hoverDiv"
@ -233,9 +363,7 @@
</el-popover> </el-popover>
</div> </div>
</el-row> </el-row>
<el-divider class="divider" content-position="left"> <el-divider class="divider" content-position="left">涂覆区</el-divider>
涂覆区
</el-divider>
<div v-for="i in 4" :key="i + 'C'"> <div v-for="i in 4" :key="i + 'C'">
<el-row style="margin-bottom: 10px" type="flex" class="flex-warp"> <el-row style="margin-bottom: 10px" type="flex" class="flex-warp">
<div <div
@ -258,6 +386,13 @@
<br /> <br />
<div class="point" /> <div class="point" />
Agv地码: {{ j.agvGroundCode }} Agv地码: {{ j.agvGroundCode }}
<br />
<el-button
@click="lState(j.id)"
v-hasPermi="['asrs:warehouse-line-monitoring:change']"
type="text">
改变库位状态
</el-button>
<div <div
slot="reference" slot="reference"
class="hoverDiv" class="hoverDiv"
@ -271,12 +406,40 @@
</el-row> </el-row>
</div> </div>
</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> </div>
</template> </template>
<script> <script>
import basicPage from '../mixins/basic-page'; import basicPage from '../mixins/basic-page';
import { getLineList } from '@/api/asrs/warehouseStorehouse'; import {
getLineList,
getLine,
updateLine,
} from '@/api/asrs/warehouseStorehouse';
export default { export default {
mixins: [basicPage], mixins: [basicPage],
@ -287,15 +450,23 @@ export default {
}, },
listQuery: {}, listQuery: {},
wareData: [], wareData: [],
dialogFormVisible: false,
bgColor: ['#d3d3d3', '#7362F3', '#16DC09'], // bgColor: ['#d3d3d3', '#7362F3', '#16DC09'], //
formConfig: [ formConfig: [
{ {
type: 'button', type: this.$auth.hasPermi('asrs:warehouse-line-monitoring:query')
? 'button'
: '',
btnName: '刷新', btnName: '刷新',
name: 'search', name: 'search',
color: 'primary', color: 'primary',
}, },
], ],
form: {
id: undefined,
lineEdgeLibraryState: undefined,
trayCode: '',
},
}; };
}, },
components: {}, components: {},
@ -317,10 +488,22 @@ export default {
this.dataListLoading = true; this.dataListLoading = true;
this.urlOptions.getDataListURL(this.listQuery).then((response) => { this.urlOptions.getDataListURL(this.listQuery).then((response) => {
this.wareData = response.data; this.wareData = response.data;
console.log(this.wareData);
this.dataListLoading = false; 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> </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> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="100"> <el-table-column label="操作" width="120">
<template v-slot="scope"> <template v-slot="scope">
<span v-if="scope.row.deactivate === 1"> <span v-if="scope.row.deactivate === 1">
<el-button <el-button
@ -70,6 +70,14 @@
v-hasPermi="['asrs:warehouse-storehouse-storage:out']"> v-hasPermi="['asrs:warehouse-storehouse-storage:out']">
出库 出库
</el-button> </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 <el-button
size="mini" size="mini"
v-if="scope.row.warehouseStorehouseState === 2" v-if="scope.row.warehouseStorehouseState === 2"
@ -356,7 +364,13 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.drawerRef.init(val.data.id); 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 = { const dataForm = {
id: val.data.id.id, id: val.data.id.id,
deactivate: 1, deactivate: 1,

View File

@ -2,7 +2,7 @@
* @Author: zwq * @Author: zwq
* @Date: 2021-11-18 14:16:25 * @Date: 2021-11-18 14:16:25
* @LastEditors: zwq * @LastEditors: zwq
* @LastEditTime: 2024-04-25 16:39:52 * @LastEditTime: 2024-06-04 16:17:07
* @Description: * @Description:
--> -->
<template> <template>
@ -99,6 +99,7 @@ import {
outWarehouseStorehouse, outWarehouseStorehouse,
getLineList, getLineList,
getWarehouseStorehouse, getWarehouseStorehouse,
makeWarehouseStorehouse,
} from '@/api/asrs/warehouseStorehouse'; } from '@/api/asrs/warehouseStorehouse';
import { getWarehouseStorehouseGoodsSpecificationPage } from '@/api/asrs/warehouseStorehouseGoodsSpecification'; import { getWarehouseStorehouseGoodsSpecificationPage } from '@/api/asrs/warehouseStorehouseGoodsSpecification';
@ -167,9 +168,9 @@ export default {
this.dataForm.sourceId = id || ''; this.dataForm.sourceId = id || '';
this.warehouseId = wId || null; this.warehouseId = wId || null;
this.dataForm.targetId = null; this.dataForm.targetId = null;
this.dataForm.region = null this.dataForm.region = null;
this.type = type; this.type = type;
this.outDisable = true this.outDisable = true;
this.visible = true; this.visible = true;
this.$nextTick(() => { this.$nextTick(() => {
this.$refs['dataForm'].resetFields(); this.$refs['dataForm'].resetFields();
@ -206,11 +207,13 @@ export default {
}); });
}); });
}, },
getOutArr(val){ getOutArr(val) {
getLineList({'region':val,'warehouseId':this.warehouseId}).then((response) => { getLineList({ region: val, warehouseId: this.warehouseId }).then(
(response) => {
this.potArr = response.data; this.potArr = response.data;
this.outDisable = false this.outDisable = false;
}); }
);
}, },
// //
dataFormSubmit() { dataFormSubmit() {
@ -249,16 +252,19 @@ export default {
}); });
this.wareInfo.agvGroundCode = pos.agvGroundCode; this.wareInfo.agvGroundCode = pos.agvGroundCode;
this.wareInfo.lineEdgeLibraryCode = pos.lineEdgeLibraryCode; this.wareInfo.lineEdgeLibraryCode = pos.lineEdgeLibraryCode;
// const data = { if (this.type === 0) {
// id: this.dataForm.sourceId,
// agvGroundCode: position.agvGroundCode,
// lineEdgeLibraryCode: position.lineEdgeLibraryCode,
// };
outWarehouseStorehouse(this.wareInfo).then((response) => { outWarehouseStorehouse(this.wareInfo).then((response) => {
this.$modal.msgSuccess('出库成功'); this.$modal.msgSuccess('出库成功');
this.visible = false; this.visible = false;
this.$emit('refreshDataList'); this.$emit('refreshDataList');
}); });
return;
}
makeWarehouseStorehouse(this.wareInfo).then((response) => {
this.$modal.msgSuccess('盘库成功');
this.visible = false;
this.$emit('refreshDataList');
});
}); });
} else { } else {
this.$modal.msgWarning('请勿重复提交!'); this.$modal.msgWarning('请勿重复提交!');