Este commit está contenido en:
朱文强 2024-03-14 15:19:53 +08:00
padre f2e8952030
commit 23a733e178
Se han modificado 27 ficheros con 1590 adiciones y 99 borrados

Ver fichero

@ -2,7 +2,7 @@
# @Author: zwq
# @Date: 2023-08-17 15:10:53
# @LastEditors: zwq
# @LastEditTime: 2023-11-02 10:02:06
# @LastEditTime: 2024-02-26 08:44:27
# @Description:
###
# 开发环境配置
@ -12,7 +12,7 @@ ENV = 'development'
VUE_APP_TITLE = 南京锂膜管理系统
# 南京锂膜管理系统/开发环境
# VUE_APP_BASE_API = 'http://192.168.1.23:48080'
# VUE_APP_BASE_API = 'http://192.168.1.118:48080'
VUE_APP_BASE_API = 'http://192.168.0.31:48081'
# VUE_APP_BASE_API = 'http://192.168.1.26:48080'

Ver fichero

@ -2,7 +2,7 @@
# @Author: zwq
# @Date: 2023-08-17 15:10:53
# @LastEditors: zwq
# @LastEditTime: 2024-01-15 14:08:52
# @LastEditTime: 2024-03-13 15:10:27
# @Description:
###
# 生产环境配置

Ver fichero

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-22 15:31:37
* @LastEditors: zwq
* @LastEditTime: 2024-01-29 16:59:17
* @LastEditTime: 2024-03-13 15:04:28
* @Description:
*/
import request from '@/utils/request'
@ -109,6 +109,14 @@ export function getLineList(query) {
params: query
})
}
// 码头移库
export function moveLine(query) {
return request({
url: '/asrs/line-edge-library/move',
method: 'get',
params: query
})
}
// 导出立库库位 Excel
export function exportWarehouseStorehouseExcel(query) {
return request({

Ver fichero

@ -52,3 +52,11 @@ export function exportMainTaskExcel(query) {
responseType: 'blob'
})
}
// 重补空托盘
export function Radd(id) {
return request({
url: '/asrs/job-main-task/reoutemptytray?id=' + id,
method: 'get'
})
}

Ver fichero

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-09-07 14:01:29
* @LastEditors: zwq
* @LastEditTime: 2023-09-07 14:17:19
* @LastEditTime: 2024-03-13 14:57:37
* @Description:
*/
import request from '@/utils/request'

Ver fichero

@ -113,6 +113,13 @@ export default {
data: nameArr,
axisLabel: {
color: '#979797',
interval:0,
formatter: function (value) {
let valueTxt = ''; if (value.length > 4) { valueTxt = value.substring(0, 4) + '...'; } else {
valueTxt = value;
}
return valueTxt;
}
},
axisLine: {
lineStyle: {

Ver fichero

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-06-01 10:47:42
* @LastEditors: zwq
* @LastEditTime: 2023-10-12 16:32:00
* @LastEditTime: 2024-02-23 16:56:33
* @Description:
-->
<template>
@ -48,7 +48,7 @@ export default {
this.chart = null;
},
methods: {
initChart(occupancyData) {
initChart(occupancyData,val) {
this.chart = echarts.init(this.$el, 'macarons');
this.chart.setOption({
@ -165,7 +165,7 @@ export default {
offsetCenter: [0, '20%'],
valueAnimation: true,
formatter: function (value) {
return '{side| }{value|' + value + '%}{side1| }';
return '{side| }{value|' + value + '%}{side1| }'+'\n\n{val|已使用库位数量:'+val+'}';
},
rich: {
value: {
@ -173,6 +173,10 @@ export default {
color: '#0B58FF',
padding: [0, 20, 0, 20],
},
val: {
fontSize: 18,
color: '#0B58FF',
},
side: {
width: 35,
height: 5,

Ver fichero

@ -0,0 +1,183 @@
<!--
* @Author: zwq
* @Date: 2024-02-27 14:43:14
* @LastEditors: zwq
* @LastEditTime: 2024-03-13 15:08:49
* @Description:
-->
<template>
<div class="app-container">
<div class="box-card">
<div class="tip">码头起点</div>
<el-form :inline="true" :model="startData" label-width="100px">
<el-form-item label="选择区域" class="drawer" prop="region">
<el-select
v-model="startData.region"
style="width: 100%"
@change="getSArr"
:popper-append-to-body="false"
placeholder="请选择区域">
<el-option
v-for="item in regionArr"
:key="item.id"
:label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="选择位置" class="drawer" prop="targetId">
<el-select
v-model="startData.targetId"
:disabled="SDisable"
style="width: 100%"
:popper-append-to-body="false"
placeholder="请选择位置">
<el-option
v-for="item in potArr"
:key="item.id"
:label="item.lineEdgeLibraryCode"
:value="item.id" />
</el-select>
</el-form-item>
</el-form>
<el-divider style="margin-bottom: 36px">
<i class="el-icon-bottom"></i>
</el-divider>
<div class="tipe">码头终点</div>
<el-form :inline="true" :model="endData" label-width="100px">
<el-form-item label="选择区域" class="drawer" prop="region">
<el-select
v-model="endData.region"
style="width: 100%"
@change="getEArr"
:popper-append-to-body="false"
placeholder="请选择区域">
<el-option
v-for="item in regionArr"
:key="item.id"
:label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="选择位置" class="drawer" prop="targetId">
<el-select
v-model="endData.targetId"
:disabled="EDisable"
style="width: 100%"
:popper-append-to-body="false"
placeholder="请选择位置">
<el-option
v-for="item in potArr"
:key="item.id"
:label="item.lineEdgeLibraryCode"
:value="item.id" />
</el-select>
</el-form-item>
</el-form>
<el-button type="primary" style="float: left" @click="move()">
转移
</el-button>
</div>
</div>
</template>
<script>
import { getLineList, moveLine } from '@/api/asrs/warehouseStorehouse';
const regionArr = [
{ name: '一次分切区域', id: 1 },
{ name: '一次分拣区域', id: 2 },
{ name: '二次分切区域', id: 3 },
{ name: '二次分拣区域', id: 4 },
{ name: '包装区域', id: 5 },
{ name: '涂覆区域', id: 6 },
{ name: '其他', id: 7 },
];
export default {
data() {
return {
startData: {
targetId: undefined,
region: undefined,
},
endData: {
targetId: undefined,
region: undefined,
},
potArr: [],
regionArr,
SDisable: true,
EDisable: true,
warehouseId: '1696803324030865409',
};
},
components: {},
created() {
this.init();
},
methods: {
init() {
this.SDisable = true;
this.EDisable = true;
},
getSArr(val) {
getLineList({ region: val, warehouseId: this.warehouseId }).then(
(response) => {
this.potArr = response.data;
this.SDisable = false;
}
);
},
getEArr(val) {
getLineList({ region: val, warehouseId: this.warehouseId }).then(
(response) => {
this.potArr = response.data;
this.EDisable = false;
}
);
},
move() {
if (this.startData.targetId && this.endData.targetId) {
moveLine({
sourceId: this.startData.targetId,
targetId: this.endData.targetId,
}).then((response) => {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
});
});
} else {
this.$message({
message: '请选择起终点!',
type: 'warning',
});
}
},
},
};
</script>
<style lang="scss" scoped>
.box-card {
padding: 50px;
margin: 20px;
text-align: center;
box-shadow: 0px 0px 5px 2px gray;
position: relative;
}
.tip {
position: absolute;
top: 20px;
left: 100px;
color: #409eff;
}
.tipe {
position: absolute;
top: 150px;
left: 100px;
color: #409eff;
}
.el-divider--horizontal {
margin-bottom: 48px;
}
</style>

Ver fichero

@ -0,0 +1,193 @@
<!--
* @Author: zwq
* @Date: 2024-02-27 14:43:14
* @LastEditors: zwq
* @LastEditTime: 2024-03-13 15:09:44
* @Description:
-->
<template>
<div class="app-container">
<div class="box-card">
<div class="tip">
码头起点
</div>
<el-form :inline="true" :model="startData" label-width="100px">
<el-form-item
label="选择区域"
class="drawer"
prop="region">
<el-select
v-model="startData.region"
style="width: 100%"
@change="getSArr"
:popper-append-to-body="false"
placeholder="请选择区域">
<el-option
v-for="item in regionArr"
:key="item.id"
:label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item
label="选择位置"
class="drawer"
prop="targetId">
<el-select
v-model="startData.targetId"
:disabled="SDisable"
style="width: 100%"
:popper-append-to-body="false"
placeholder="请选择位置">
<el-option
v-for="item in potArr"
:key="item.id"
:label="item.lineEdgeLibraryCode"
:value="item.id" />
</el-select>
</el-form-item>
</el-form>
<el-divider style="margin-bottom:36px"><i class="el-icon-bottom"></i></el-divider>
<div class="tipe">
码头终点
</div>
<el-form :inline="true" :model="endData" label-width="100px">
<el-form-item
label="选择区域"
class="drawer"
prop="region">
<el-select
v-model="endData.region"
style="width: 100%"
@change="getEArr"
:popper-append-to-body="false"
placeholder="请选择区域">
<el-option
v-for="item in regionArr"
:key="item.id"
:label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item
label="选择位置"
class="drawer"
prop="targetId">
<el-select
v-model="endData.targetId"
:disabled="EDisable"
style="width: 100%"
:popper-append-to-body="false"
placeholder="请选择位置">
<el-option
v-for="item in potArr"
:key="item.id"
:label="item.lineEdgeLibraryCode"
:value="item.id" />
</el-select>
</el-form-item>
</el-form>
<el-button type="primary" style="float: left" @click="move()">
转移
</el-button>
</div>
</div>
</template>
<script>
import { getLineList, moveLine } from '@/api/asrs/warehouseStorehouse';
const regionArr = [
{ name: '一次分切区域', id: 1 },
{ name: '一次分拣区域', id: 2 },
{ name: '二次分切区域', id: 3 },
{ name: '二次分拣区域', id: 4 },
{ name: '包装区域', id: 5 },
{ name: '涂覆区域', id: 6 },
{ name: '其他', id: 7 },
];
export default {
data() {
return {
startData: {
targetId: undefined,
region: undefined,
},
endData: {
targetId: undefined,
region: undefined,
},
potArr: [],
regionArr,
SDisable: true,
EDisable: true,
warehouseId: '1698950657556340737',
};
},
components: {},
created() {
this.init();
},
methods: {
init() {
this.SDisable = true;
this.EDisable = true;
},
getSArr(val) {
getLineList({ region: val,'warehouseId':this.warehouseId }).then((response) => {
this.potArr = response.data;
this.SDisable = false;
});
},
getEArr(val) {
getLineList({ region: val,'warehouseId':this.warehouseId }).then((response) => {
this.potArr = response.data;
this.EDisable = false;
});
},
move() {
if (this.startData.targetId && this.endData.targetId) {
moveLine({
sourceId: this.startData.targetId,
targetId: this.endData.targetId,
}).then((response) => {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
});
});
} else {
this.$message({
message: '请选择起终点!',
type: 'warning',
});
}
},
},
};
</script>
<style lang="scss" scoped>
.box-card {
padding: 50px;
margin: 20px;
text-align: center;
box-shadow: 0px 0px 5px 2px gray;
position: relative;
}
.tip{
position:absolute;
top: 20px;
left: 100px;
color: #409EFF;
}
.tipe{
position:absolute;
top: 150px;
left: 100px;
color: #409EFF;
}
.el-divider--horizontal {
margin-bottom: 48px;
}
</style>

Ver fichero

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-22 15:01:54
* @LastEditors: zwq
* @LastEditTime: 2023-10-31 11:20:46
* @LastEditTime: 2024-02-23 16:41:15
* @Description:
-->
<template>
@ -58,10 +58,10 @@ export default {
//
getDataList() {
this.urlOptions.occupancyURL(this.aId).then((response) => {
this.occupancyData = response.data.toFixed(2);
this.occupancyData = response.data[0].toFixed(2);
const num = mul(this.occupancyData, 100);
this.$nextTick(() => {
this.$refs.gaugeChart.initChart(num);
this.$refs.gaugeChart.initChart(num,response.data[1]);
});
});
this.urlOptions.allURL(this.aId).then((response) => {

Ver fichero

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-22 15:01:54
* @LastEditors: zwq
* @LastEditTime: 2023-10-31 11:22:35
* @LastEditTime: 2024-02-23 16:41:40
* @Description:
-->
<template>
@ -60,10 +60,10 @@ export default {
//
getDataList() {
this.urlOptions.occupancyURL(this.bId).then((response) => {
this.occupancyData = response.data.toFixed(2);
this.occupancyData = response.data[0].toFixed(2);
const num = mul(this.occupancyData, 100);
this.$nextTick(() => {
this.$refs.gaugeChart.initChart(num);
this.$refs.gaugeChart.initChart(num,response.data[1]);
});
});
this.urlOptions.allURL(this.bId).then((response) => {

Ver fichero

@ -67,15 +67,17 @@ const tableProps = [
label: 'agv',
},
{
prop: 'agvPoint',
label: 'AGV起终点',
subcomponent: point,
prop: 'agvStartPoint',
label: 'AGV起点',
},
{
prop: 'agvEndPoint',
label: 'AGV终点',
},
{
prop: 'mainTaskState',
label: '状态',
filter: codeFilter('mainTaskState'),
width:110
subcomponent: point
},
{
prop: 'taskSource',
@ -104,9 +106,33 @@ const mainTaskType = [
id: 3,
},
{
name: '出库移库',
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 = [
{
@ -141,6 +167,10 @@ const mainTaskState = [
name: '传输线运行中',
id: 7,
},
{
name: '暂时无空托盘',
id: 8,
},
];
export default {
mixins: [basicPage],
@ -257,6 +287,7 @@ export default {
case 'reset':
this.$refs.searchBarForm.resetForm();
this.listQuery = {
warehouseId: '1696803324030865409',
pageSize: 10,
pageNo: 1,
total: 1,

Ver fichero

@ -0,0 +1,324 @@
<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" />
</div>
</template>
<script>
import basicPage from '../mixins/basic-page';
import { parseTime } from '../mixins/code-filter';
import codeFilter from '../mixins/code-filter';
import { getMainTaskPage, deleteMainTask } from '@/api/oth/mainTask';
import point from './point';
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: '状态',
subcomponent: point
},
{
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: getMainTaskPage,
deleteURL: deleteMainTask,
},
listQuery: {
pageSize: 10,
pageNo: 1,
total: 1,
},
tableProps,
tableBtn: [
// {
// type: 'canlce',
// btnName: '',
// },
],
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: {},
created() {
this.setFormConfig();
this.listQuery.warehouseId = this.bId;
},
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: '1698950657556340737',
pageSize: 10,
pageNo: 1,
total: 1,
};
this.getDataList();
break;
default:
console.log(val);
}
},
otherMethods(val){
this.$confirm(`确定对${'[任务编码=' + val.data.mainTaskCode + ']'}进行取消操作?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.urlOptions.deleteURL(val.data.id).then(({ data }) => {
this.$message({
message: "操作成功",
type: "success",
duration: 1500,
onClose: () => {
this.getDataList();
},
});
});
})
.catch(() => { });
},
},
};
</script>

Ver fichero

@ -1,32 +1,54 @@
<!--
* @Author: zwq
* @Date: 2023-09-22 15:36:40
* @Date: 2024-01-17 15:16:28
* @LastEditors: zwq
* @LastEditTime: 2023-09-26 15:59:57
* @LastEditTime: 2024-03-13 15:02:49
* @Description:
-->
<template>
<div>
{{ injectData.mainTaskType===1? injectData.agvStartPoint:injectData.agvEndPoint}}
</div>
<div>
{{ mainTaskState[injectData.mainTaskState] }}
<el-button v-if="injectData.mainTaskState===8" type="text" size="mini" @click="Radd()">重补</el-button>
</div>
</template>
<script>
import { Radd } from '@/api/oth/mainTask';
const mainTaskState = {
0: '开始',
1: '已发送agv',
2: 'agv运行中',
3: '已发送堆垛机',
4: '堆垛机运行中',
5: '完成',
6: '已发送传输线',
7: '传输线运行中',
8: '暂时无空托盘',
};
export default {
name: "point",
props: {
injectData: {
type: Object,
default: () => ({}),
},
},
data() {
return {
list: this.injectData,
};
},
methods: {
},
name: 'point',
props: {
injectData: {
type: Object,
default: () => ({}),
},
},
data() {
return {
list: this.injectData,
mainTaskState,
};
},
methods: {
Radd() {
Radd(this.injectData.id).then((response) => {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
});
});
},
},
};
</script>
<style scoped>
</style>
<style scoped></style>

Ver fichero

@ -60,15 +60,17 @@ const tableProps = [
label: 'agv',
},
{
prop: 'agvPoint',
label: 'AGV起终点',
subcomponent: point,
prop: 'agvStartPoint',
label: 'AGV起点',
},
{
prop: 'agvEndPoint',
label: 'AGV终点',
},
{
prop: 'mainTaskState',
label: '状态',
filter: codeFilter('mainTaskState'),
width:110
subcomponent: point
},
{
prop: 'taskSource',
@ -103,9 +105,33 @@ const mainTaskType = [
id: 3,
},
{
name: '出库移库',
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 = [
{
@ -132,6 +158,18 @@ const mainTaskState = [
name: '完成',
id: 5,
},
{
name: '已发送传输线',
id: 6,
},
{
name: '传输线运行中',
id: 7,
},
{
name: '暂时无空托盘',
id: 8,
},
];
const stackerArr = [
{
@ -265,6 +303,7 @@ export default {
case 'reset':
this.$refs.searchBarForm.resetForm();
this.listQuery = {
warehouseId: '1696803324030865409',
pageSize: 10,
pageNo: 1,
total: 1,

Ver fichero

@ -0,0 +1,321 @@
<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">
</base-table>
<pagination
:limit.sync="listQuery.pageSize"
:page.sync="listQuery.pageNo"
:total="listQuery.total"
@pagination="getDataList" />
</div>
</template>
<script>
import basicPage from '../mixins/basic-page';
import { parseTime } from '../mixins/code-filter';
import codeFilter from '../mixins/code-filter';
import { getMainTaskHistoryPage } from '@/api/oth/mainTaskHistory';
import point from './point';
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: '状态',
subcomponent: point
},
{
prop: 'taskSource',
label: '任务来源',
filter: codeFilter('taskSource'),
width:100
},
{
prop: 'createTime',
label: '创建时间',
filter: parseTime,
width:150
},
{
prop: 'cancellation',
label: '是否取消',
filter: codeFilter('cancellation'),
width:90
},
];
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,
},
];
const stackerArr = [
{
name: '1',
id: 1,
},
{
name: '2',
id: 2,
},
{
name: '3',
id: 3,
},
{
name: '4',
id: 4,
},
];
export default {
mixins: [basicPage],
data() {
return {
urlOptions: {
getDataListURL: getMainTaskHistoryPage,
},
tableProps,
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: '堆垛机',
selectOptions: stackerArr,
param: 'stacker',
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: {},
created() {
this.listQuery.mainTaskState = 5;
this.setFormConfig();
this.listQuery.warehouseId = this.bId;
},
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.mainTaskState = 5;
this.listQuery.stacker = val.stacker;
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: '1698950657556340737',
pageSize: 10,
pageNo: 1,
total: 1,
mainTaskState : 5
};
this.getDataList();
break;
default:
console.log(val);
}
},
},
};
</script>

Ver fichero

@ -1,32 +1,54 @@
<!--
* @Author: zwq
* @Date: 2023-09-22 15:36:40
* @Date: 2024-01-17 15:16:28
* @LastEditors: zwq
* @LastEditTime: 2023-09-26 15:59:57
* @LastEditTime: 2024-03-13 15:03:09
* @Description:
-->
<template>
<div>
{{ injectData.mainTaskType===1? injectData.agvStartPoint:injectData.agvEndPoint}}
</div>
<div>
{{ mainTaskState[injectData.mainTaskState] }}
<el-button v-if="injectData.mainTaskState===8" type="text" size="mini" @click="Radd()">重补</el-button>
</div>
</template>
<script>
import { Radd } from '@/api/oth/mainTask';
const mainTaskState = {
0: '开始',
1: '已发送agv',
2: 'agv运行中',
3: '已发送堆垛机',
4: '堆垛机运行中',
5: '完成',
6: '已发送传输线',
7: '传输线运行中',
8: '暂时无空托盘',
};
export default {
name: "point",
props: {
injectData: {
type: Object,
default: () => ({}),
},
},
data() {
return {
list: this.injectData,
};
},
methods: {
},
name: 'point',
props: {
injectData: {
type: Object,
default: () => ({}),
},
},
data() {
return {
list: this.injectData,
mainTaskState,
};
},
methods: {
Radd() {
Radd(this.injectData.id).then((response) => {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
});
});
},
},
};
</script>
<style scoped>
</style>
<style scoped></style>

Ver fichero

@ -2,7 +2,7 @@
/*
* @Date: 2020-12-29 16:49:28
* @LastEditors: zwq
* @LastEditTime: 2024-01-19 13:50:00
* @LastEditTime: 2024-03-13 14:22:22
* @FilePath: \basic-admin\src\filters\basicData\index.js
* @Description:
*/
@ -29,7 +29,13 @@ const table = {
1: '入库',
2: '出库',
3: '移库',
4: '出库带移库',
4: '出库+移库',
5: '不带agv入库',
6: '不带agv出库',
7: '入库+6臂空托盘出库',
8: '不带agv出库+移库',
9: '入库+12臂空托盘出库',
10: '平库移库',
},
mainTaskState:{
0: '开始',
@ -40,6 +46,7 @@ const table = {
5: '完成',
6: '已发送传输线',
7: '传输线运行中',
8: '暂时无空托盘',
},
taskSource: {
1: 'mes下发',

Ver fichero

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-24 14:47:58
* @LastEditors: zwq
* @LastEditTime: 2023-10-25 14:08:18
* @LastEditTime: 2024-02-22 16:48:44
* @Description:
-->
<template>
@ -37,8 +37,8 @@ const tableProps = [
label: '产品名',
},
{
prop: 'goodSpecificationCode',
label: '产品编码',
prop: 'rollCode',
label: '膜卷编码',
},
{
prop: 'specification',

Ver fichero

@ -0,0 +1,218 @@
<!--
* @Author: zwq
* @Date: 2024-01-17 09:58:41
* @LastEditors: zwq
* @LastEditTime: 2024-03-14 14:53:29
* @Description:
-->
<template>
<div class="app-container">
<search-bar
:formConfigs="formConfig"
ref="searchBarForm"
@headBtnClick="buttonClick" />
<div class="tips">
<el-tag effect="dark" color="#16DC09" style="border: none"></el-tag>
<el-tag effect="dark" color="#d3d3d3" style="border: none"></el-tag>
<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 12" :key="i">
<el-row style="margin-bottom: 10px" type="flex" class="flex-warp">
<div
class="dashboard-layout-item"
style="opacity: 0"
v-if="i === 12" />
<div
class="dashboard-layout-item"
v-for="j in wareData
.filter(
(item) =>
item.agvGroundCode.substr(0, 2) == 13 - 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>
</div>
</el-row>
</div>
<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 == 1).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>
</div>
</el-row>
<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 == 3).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>
</div>
</el-row>
</div>
</div>
</template>
<script>
import basicPage from '../mixins/basic-page';
import { getLineList } from '@/api/asrs/warehouseStorehouse';
export default {
mixins: [basicPage],
data() {
return {
urlOptions: {
getDataListURL: getLineList,
},
listQuery: {},
wareData: [],
bgColor: ['#d3d3d3', '#7362F3', '#16DC09'], //
formConfig: [
{
type: 'button',
btnName: '刷新',
name: 'search',
color: 'primary',
},
],
};
},
components: {},
created() {},
methods: {
buttonClick(val) {
switch (val.btnName) {
case 'search':
this.getDataList();
break;
case 'export':
break;
default:
console.log(val);
}
},
//
getDataList() {
this.dataListLoading = true;
this.urlOptions.getDataListURL(this.listQuery).then((response) => {
this.wareData = response.data;
console.log(this.wareData);
this.dataListLoading = false;
});
},
},
};
</script>
<style lang="scss" scoped>
.mainbody {
display: flex;
flex-direction: column;
justify-content: space-around;
min-width: 80vw;
border-radius: 5px;
}
.flex-warp {
flex-wrap: nowrap;
}
.dashboard-layout-item {
width: 30px;
height: 30px;
background-color: #d3d3d3;
border-radius: 2px;
margin: 0 6px 6px 0;
position: relative;
&:first-child {
margin-left: 40px;
}
&:last-child {
margin-right: 30px;
}
}
.hoverDiv {
width: 100%;
height: 30px;
&:hover {
border: 1px #000000 dashed;
transform: scale(1.3);
}
}
.el-divider--horizontal {
margin-top: 10px;
}
.el-divider {
background-color: black;
}
.tips {
position: absolute;
top: 22px;
right: 120px;
}
.point{
width: 5px;
height: 5px;
border-radius: 50%;
background-color: #409EFF;
float: left;
margin-top: 7px;
margin-right: 5px;
}
</style>

Ver fichero

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-22 15:01:55
* @LastEditors: zwq
* @LastEditTime: 2024-02-22 11:20:04
* @LastEditTime: 2024-02-22 16:47:31
* @Description:
-->
<template>
@ -131,10 +131,6 @@ const tableProps = [
prop: 'goodSpecificationName',
label: '产品名',
},
{
prop: 'goodSpecificationCode',
label: '产品编码',
},
{
prop: 'specification',
label: '产品规格',
@ -145,7 +141,6 @@ const tableProps = [
prop: 'rollCode',
label: '膜卷编码',
subcomponent: inputArea,
width: 100,
},
{
prop: 'number',

Ver fichero

@ -203,6 +203,12 @@ export default {
placeholder: '托盘编码',
param: 'code',
},
{
type: 'input',
label: '膜卷编码',
placeholder: '膜卷编码',
param: 'rollCode',
},
{
type: 'input',
label: '产品名',
@ -293,6 +299,7 @@ export default {
this.listQuery.trayCode = val.code;
this.listQuery.goodName = val.pname;
this.listQuery.quality = val.quality;
this.listQuery.rollCode = val.rollCode;
this.listQuery.process = val.processId;
this.listQuery.warehouseStorehouseState =
val.warehouseStorehouseStateId;

Ver fichero

@ -198,6 +198,12 @@ export default {
placeholder: '托盘编码',
param: 'code',
},
{
type: 'input',
label: '膜卷编码',
placeholder: '膜卷编码',
param: 'rollCode',
},
{
type: 'input',
label: '产品名',
@ -288,6 +294,7 @@ export default {
this.listQuery.wareLayer = val.wareLayer;
this.listQuery.trayCode = val.code;
this.listQuery.goodName = val.pname;
this.listQuery.rollCode = val.rollCode;
this.listQuery.quality = val.quality;
this.listQuery.process = val.processId;
this.listQuery.warehouseStorehouseState = val.warehouseStorehouseStateId;

Ver fichero

@ -34,8 +34,6 @@
placeholder="请输入库位名" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="托盘编码" prop="trayCode">
<el-input
@ -44,11 +42,30 @@
placeholder="请输入托盘编码" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="选择起点区域" prop="region">
<el-select
v-model="dataForm.region"
style="width: 100%"
@change="getPotArr"
:popper-append-to-body="false"
placeholder="请选择区域">
<el-option
v-for="item in regionArr"
:key="item.id"
:label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="选择起点位置" prop="startInfo">
<el-select
v-model="dataForm.startInfo"
style="width: 100%"
:disabled="potDisable"
@change="$forceUpdate()"
placeholder="请选择起点位置">
<el-option
@ -125,7 +142,7 @@
<product-attr-add
v-if="addOrUpdateVisible"
ref="addOrUpdate"
:warehouse-id="dataForm.warehouseId"
:warehouse-id="warehouseId"
@refreshDataList="addList" />
</el-drawer>
</template>
@ -154,10 +171,6 @@ const tableProps = [
prop: 'goodSpecificationName',
label: '产品名',
},
{
prop: 'goodSpecificationCode',
label: '产品编码',
},
{
prop: 'specification',
label: '产品规格',
@ -168,7 +181,6 @@ const tableProps = [
prop: 'rollCode',
label: '膜卷编码',
subcomponent: inputArea,
width: 100,
},
{
prop: 'number',
@ -210,6 +222,15 @@ const processArr = [
id: 4,
},
];
const regionArr = [
{ name: '一次分切区域', id: 1 },
{ name: '一次分拣区域', id: 2 },
{ name: '二次分切区域', id: 3 },
{ name: '二次分拣区域', id: 4 },
{ name: '包装区域', id: 5 },
{ name: '涂覆区域', id: 6 },
{ name: '其他', id: 7 },
];
export default {
components: { productAttrAdd, SmallTitle },
data() {
@ -222,14 +243,18 @@ export default {
addButtonShow: '新增',
processArr,
potArr: [],
regionArr,
potDisable: true,
dataForm: {
id: null,
region: undefined,
warehouseStorehouseName: '',
warehouseStorehouseCode: '',
process: '',
trayCode: '',
startInfo: '',
},
warehouseId: null,
isloading: false,
updata: {},
listQuery: {
@ -261,18 +286,18 @@ export default {
},
init(val) {
this.isloading = false;
this.potDisable = true
this.updata = val;
this.warehouseId = val.warehouseId
this.dataForm.id = val.id;
this.dataForm.warehouseStorehouseName = val.warehouseStorehouseName;
this.dataForm.warehouseStorehouseCode = val.warehouseStorehouseCode;
this.dataForm.process = val.process;
this.dataForm.trayCode = val.trayCode;
this.dataForm.startInfo = '';
this.dataForm.region = null;
this.initData();
this.visible = true;
getLineList().then((response) => {
this.potArr = response.data;
});
this.$nextTick(() => {
this.$refs['dataForm'].resetFields();
@ -283,6 +308,12 @@ export default {
}
});
},
getPotArr(val) {
getLineList({ 'region': val,'warehouseId':this.warehouseId }).then((response) => {
this.potArr = response.data;
this.potDisable = false;
});
},
getList() {
//
@ -382,7 +413,9 @@ export default {
data.productInfo.number = 1;
data.productInfo.quality = data.quality;
for (let i = 0; i < data.number; i++) {
this.productAttributeList.push(JSON.parse(JSON.stringify(data.productInfo)));
this.productAttributeList.push(
JSON.parse(JSON.stringify(data.productInfo))
);
}
},
goback() {

Ver fichero

@ -229,6 +229,12 @@ export default {
placeholder: '托盘编码',
param: 'code',
},
{
type: 'input',
label: '膜卷编码',
placeholder: '膜卷编码',
param: 'rollCode',
},
{
type: 'input',
label: '产品名',
@ -319,6 +325,7 @@ export default {
this.listQuery.wareLayer = val.wareLayer;
this.listQuery.trayCode = val.code;
this.listQuery.goodName = val.pname;
this.listQuery.rollCode = val.rollCode;
this.listQuery.quality = val.quality;
this.listQuery.process = val.processId;
this.listQuery.warehouseStorehouseState =
@ -353,7 +360,7 @@ export default {
this.addOrUpdateVisible = true;
this.addOrEditTitle = '出库';
this.$nextTick(() => {
this.$refs.addOrUpdate.init(val.data.id, 0);
this.$refs.addOrUpdate.init(val.data.id, 0,this.listQuery.warehouseId);
});
} else if (val.type === 'move') {
this.addOrUpdateVisible = true;

Ver fichero

@ -230,6 +230,12 @@ export default {
placeholder: '托盘编码',
param: 'code',
},
{
type: 'input',
label: '膜卷编码',
placeholder: '膜卷编码',
param: 'rollCode',
},
{
type: 'input',
label: '产品名',
@ -321,6 +327,7 @@ export default {
this.listQuery.trayCode = val.code;
this.listQuery.goodName = val.pname;
this.listQuery.quality = val.quality;
this.listQuery.rollCode = val.rollCode;
this.listQuery.process = val.processId;
this.listQuery.warehouseStorehouseState =
val.warehouseStorehouseStateId;
@ -353,7 +360,7 @@ export default {
this.addOrUpdateVisible = true;
this.addOrEditTitle = '出库';
this.$nextTick(() => {
this.$refs.addOrUpdate.init(val.data.id, 0);
this.$refs.addOrUpdate.init(val.data.id, 0,this.listQuery.warehouseId);
});
} else if (val.type === 'move') {
this.addOrUpdateVisible = true;

Ver fichero

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2024-01-16 16:27:06
* @LastEditTime: 2024-02-27 15:22:13
* @Description:
-->
<template>
@ -15,11 +15,33 @@
<el-form-item
v-if="!type"
label-width="150px"
label="选择出库到货位置"
label="选择到货区域"
class="drawer"
prop="region">
<el-select
v-model="dataForm.region"
style="width: 100%"
@change="getOutArr"
:popper-append-to-body="false"
placeholder="请选择区域">
<el-option
v-for="item in regionArr"
:key="item.id"
:label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item
v-if="!type"
label-width="150px"
label="选择到货位置"
class="drawer"
prop="targetId">
<el-select
v-model="dataForm.targetId"
:disabled="outDisable"
style="width: 100%"
:popper-append-to-body="false"
placeholder="请选择位置">
<el-option
v-for="item in potArr"
@ -86,6 +108,15 @@ const potArr3 = [
{ label: '3层', id: 3 },
{ label: '4层', id: 4 },
];
const regionArr = [
{ name: '一次分切区域', id: 1 },
{ name: '一次分拣区域', id: 2 },
{ name: '二次分切区域', id: 3 },
{ name: '二次分拣区域', id: 4 },
{ name: '包装区域', id: 5 },
{ name: '涂覆区域', id: 6 },
{ name: '其他', id: 7 },
];
export default {
mixins: [basicAdd],
data() {
@ -95,6 +126,7 @@ export default {
dataForm: {
sourceId: undefined,
targetId: undefined,
region: undefined,
wareRow: undefined,
wareColumn: undefined,
wareLayer: undefined,
@ -106,11 +138,16 @@ export default {
potArr1: [],
potArr2: [],
potArr3,
regionArr,
type: 0,
isloading: false,
outDisable: true, //
dataRule: {
region: [
{ required: true, message: '区域不能为空', trigger: 'change' },
],
targetId: [
{ required: true, message: '位置不能为空', trigger: 'blur' },
{ required: true, message: '位置不能为空', trigger: 'change' },
],
wareRow: [{ required: true, message: '排不能为空', trigger: 'blur' }],
wareColumn: [
@ -126,7 +163,9 @@ export default {
this.dataForm.sourceId = id || '';
this.warehouseId = wId || null;
this.dataForm.targetId = null;
this.dataForm.region = null
this.type = type;
this.outDisable = true
this.visible = true;
this.$nextTick(() => {
this.$refs['dataForm'].resetFields();
@ -149,9 +188,6 @@ export default {
}
return;
}
getLineList().then((response) => {
this.potArr = response.data;
});
getWarehouseStorehouse(id).then((response) => {
this.wareInfo = response.data;
});
@ -166,6 +202,12 @@ export default {
});
});
},
getOutArr(val){
getLineList({'region':val,'warehouseId':this.warehouseId}).then((response) => {
this.potArr = response.data;
this.outDisable = false
});
},
//
dataFormSubmit() {
if (!this.isloading) {
@ -221,3 +263,9 @@ export default {
},
};
</script>
<style scoped>
.drawer >>> .el-select-dropdown__item {
font-size: 20px;
}
</style>