This commit is contained in:
朱文强 2024-05-24 15:59:49 +08:00
parent cf2a5a7861
commit dcba6962f2
19 changed files with 1508 additions and 286 deletions

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-04-16 16:22:00 * @LastEditTime: 2024-05-24 09:57:14
* @Description: * @Description:
*/ */
import request from '@/utils/request' import request from '@/utils/request'
@ -14,6 +14,14 @@ export function createDelivery(data) {
data: data data: data
}) })
} }
// 创建点对点出库单
export function createDeliveryList(data) {
return request({
url: '/asrs/delivery/createList',
method: 'post',
data: data
})
}
// 更新出库单 // 更新出库单
export function updateDelivery(data) { export function updateDelivery(data) {
@ -82,7 +90,7 @@ export function cancelDelivery(data) {
}) })
} }
// 获得出库单分页 // 获得出库单历史分页
export function getDeliveryHisPage(query) { export function getDeliveryHisPage(query) {
return request({ return request({
url: '/asrs/delivery-history/page', url: '/asrs/delivery-history/page',
@ -91,6 +99,15 @@ export function getDeliveryHisPage(query) {
}) })
} }
// 获得出库单历史和膜卷关系
export function getDeliveryHisProPage(query) {
return request({
url: '/asrs/delivery-history-product/page',
method: 'get',
params: query
})
}
// 获得code // 获得code
export function getCode() { export function getCode() {
return request({ return request({
@ -98,3 +115,13 @@ export function getCode() {
method: 'post' method: 'post'
}) })
} }
// 导出历史 Excel
export function exportDeliveryHisExcel(query) {
return request({
url: '/asrs/delivery-history/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}

View File

@ -85,13 +85,15 @@ export default {
}; };
}, },
created() { created() {
this.startFun();
axios axios
.post('http://172.22.22.190/wcs-njlm/business/wcsTask/isonline') .post('http://172.22.22.190/wcs-njlm/business/wcsTask/isonline')
.then((res) => { .then((res) => {
if (res.code === 500) { console.log(res);
if (res.data.code == 500) {
this.$notify({ this.$notify({
title: '设备异常', title: '设备异常',
message: res.msg, message: res.data.msg,
type: 'warning', type: 'warning',
duration: 0, duration: 0,
}); });
@ -113,6 +115,41 @@ export default {
handleClickOutside() { handleClickOutside() {
this.$store.dispatch('app/closeSideBar', { withoutAnimation: false }); this.$store.dispatch('app/closeSideBar', { withoutAnimation: false });
}, },
startFun() {
setInterval(() => {
this.getRealAlarm();
}, 10000);
},
getRealAlarm() {
axios
.post('http://172.22.22.190/wcs-njlm/business/wcsTask/isAlarm')
.then((res) => {
res.data.forEach((item, index) => {
if (index < 4) {
if (item.code !== 0) {
this.$notify({
title: '异常',
message: item.msg,
type: 'warning',
duration: 8000,
});
}
} else {
if (item.code > 30) {
this.$notify({
title: '异常',
message: item.msg,
type: 'warning',
duration: 9000,
});
}
}
});
})
.catch((error) => {
console.error('There was an error!', error);
});
},
}, },
}; };
</script> </script>

View File

@ -2,126 +2,349 @@
* @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-09 09:33:08 * @LastEditTime: 2024-05-22 10:09:16
* @Description: * @Description:
--> -->
<template> <template>
<el-form <div>
:model="dataForm" <el-form
:rules="dataRule" :model="dataForm"
ref="dataForm" :rules="dataRule"
@keyup.enter.native="dataFormSubmit()" ref="dataForm"
label-width="100px"> @keyup.enter.native="dataFormSubmit()"
<el-form-item label="出库单号" prop="deliveryCode"> label-width="100px">
<el-input <el-row :gutter="15">
v-model="dataForm.deliveryCode" <el-col :span="12">
clearable <el-form-item label="出库单号" prop="deliveryCode">
placeholder="请输入出库单号" /> <el-input
</el-form-item> v-model="dataForm.deliveryCode"
<el-form-item label="货物名称" prop="productName"> clearable
<el-select placeholder="请输入出库单号" />
v-model="dataForm.productName" </el-form-item>
filterable </el-col>
style="display: inline-block" <el-col :span="12" v-if="dataForm.deliveryType !== 3">
@change="setShowTrayType" <el-form-item label="货物名称" prop="productName">
placeholder="请选择货物名称" <el-select
remote v-model="dataForm.productName"
:remote-method="remoteMethod" filterable
value-key="id" style="display: inline-block; width: 100%"
:loading="loading"> @change="setShowTrayType"
<el-option placeholder="请选择货物名称"
v-for="item in productArr" remote
:key="item.id" :remote-method="remoteMethod"
:label="item.goodSpecificationName" value-key="id"
:value="item.goodSpecificationName"></el-option> :loading="loading">
</el-select> <el-option
<div style="display: inline-block;margin-left: 10px;"> v-for="item in productArr"
<el-tag size="mini" type="warning"> :key="item.id"
<i class="el-icon-question" /> :label="item.goodSpecificationName"
出空托盘请选择无产品 :value="item.goodSpecificationName"></el-option>
</el-tag> </el-select>
</div> <div style="display: inline-block; margin-left: 10px">
</el-form-item> <el-tag size="mini" type="warning">
<el-form-item label="出库类型" prop="deliveryType"> <i class="el-icon-question" />
<el-radio-group 出空托盘请选择无产品
v-model="dataForm.deliveryType" </el-tag>
@input="setNeedTrayNumber"> </div>
<el-radio :label="1">单托盘出库</el-radio> </el-form-item>
<el-radio :label="2">多托盘出库</el-radio> </el-col>
</el-radio-group> <el-col :span="12">
</el-form-item> <el-form-item label="出库类型" prop="deliveryType">
<el-form-item label="所需托盘数" prop="needTrayNumber"> <el-radio-group
<el-input-number v-model="dataForm.deliveryType"
v-model="dataForm.needTrayNumber" @input="setNeedTrayNumber">
:min="dataForm.deliveryType === 2 ? 2 : 1" <el-radio :label="1">单托盘出库</el-radio>
:disabled="dataForm.deliveryType === 1" /> <el-radio :label="2">多托盘出库</el-radio>
</el-form-item> <el-radio :label="3">点对点出库</el-radio>
<el-form-item label="已补托盘数" prop="alreadyOutNumber"> </el-radio-group>
<el-input-number v-model="dataForm.alreadyOutNumber" disabled /> </el-form-item>
</el-form-item> </el-col>
<el-form-item <div v-if="dataForm.deliveryType !== 3" style="">
label="发货位置" <el-col :span="12">
prop="lineEdgeLibraryCode" <el-form-item label="所需托盘数" prop="needTrayNumber">
key="lineEdgeLibraryCode" <el-input-number
v-if="dataForm.deliveryType === 1"> style="width: 100%"
<el-select v-model="dataForm.needTrayNumber"
v-model="dataForm.lineEdgeLibraryCode" :min="dataForm.deliveryType === 2 ? 2 : 1"
filterable :disabled="dataForm.deliveryType === 1" />
placeholder="请选择"> </el-form-item>
<el-option </el-col>
v-for="item in potArr" <el-col :span="12">
:key="item.id" <el-form-item label="已补托盘数" prop="alreadyOutNumber">
:label="item.lineEdgeLibraryCode" <el-input-number
:value="item.lineEdgeLibraryCode"></el-option> style="width: 100%"
</el-select> v-model="dataForm.alreadyOutNumber"
</el-form-item> disabled />
<el-form-item </el-form-item>
label="发货区域" </el-col>
prop="region" <el-col :span="12" v-if="dataForm.deliveryType === 1">
key="region" <el-form-item
v-if="dataForm.deliveryType === 2"> label="发货位置"
<el-select v-model="dataForm.region" placeholder="请选择"> prop="lineEdgeLibraryCode"
<el-option key="lineEdgeLibraryCode">
v-for="item in regionArr" <el-select
:key="item.id" v-model="dataForm.lineEdgeLibraryCode"
:label="item.name" filterable
:value="item.id"></el-option> style="width: 100%"
</el-select> placeholder="请选择">
</el-form-item> <el-option
<el-form-item v-for="item in potArr"
label="货物品质" :key="item.id"
prop="productQuality" :label="item.lineEdgeLibraryCode"
key="productQuality" :value="item.lineEdgeLibraryCode"></el-option>
v-if="!showTrayType"> </el-select>
<el-input </el-form-item>
v-model="dataForm.productQuality" </el-col>
clearable <el-col :span="12" v-if="dataForm.deliveryType === 2">
placeholder="请输入货物品质" /> <el-form-item label="发货区域" prop="region" key="region">
</el-form-item> <el-select
<el-form-item style="width: 100%"
label="膜卷号" v-model="dataForm.region"
prop="rollCode" placeholder="请选择">
key="rollCode" <el-option
v-if="dataForm.deliveryType === 1 && !showTrayType"> v-for="item in regionArr"
<el-input :key="item.id"
v-model="dataForm.rollCode" :label="item.name"
clearable :value="item.id"></el-option>
placeholder="请输入膜卷号" /> </el-select>
</el-form-item> </el-form-item>
<el-form-item </el-col>
label="托盘类型" <el-col :span="12" v-if="!showTrayType">
key="trayType" <el-form-item
prop="trayType" label="货物品质"
v-if="showTrayType"> prop="productQuality"
<el-select v-model="dataForm.trayType" placeholder="请选择"> key="productQuality">
<el-option <el-input
v-for="item in trayTypeArr" v-model="dataForm.productQuality"
:key="item.id" clearable
:label="item.name" placeholder="请输入货物品质" />
:value="item.id"></el-option> </el-form-item>
</el-select> </el-col>
</el-form-item> <el-col
</el-form> :span="12"
v-if="dataForm.deliveryType === 1 && !showTrayType">
<el-form-item label="膜卷号" prop="rollCode" key="rollCode">
<el-input
v-model="dataForm.rollCode"
clearable
placeholder="请输入膜卷号" />
</el-form-item>
</el-col>
<el-col :span="12" v-if="showTrayType">
<el-form-item label="托盘类型" key="trayType" prop="trayType">
<el-select
style="width: 100%"
v-model="dataForm.trayType"
placeholder="请选择">
<el-option
v-for="item in trayTypeArr"
:key="item.id"
:label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工单" prop="workOrder">
<el-input
v-model="dataForm.workOrder"
clearable
placeholder="请输入工单" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工序" prop="process">
<el-input
v-model="dataForm.process"
clearable
placeholder="请输入工序" />
</el-form-item>
</el-col>
</div>
<el-col :span="12">
<el-form-item label="部门" prop="department">
<el-input
v-model="dataForm.department"
clearable
placeholder="请输入部门" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="申请人" prop="applicant">
<el-input
v-model="dataForm.applicant"
clearable
placeholder="请输入申请人" />
</el-form-item>
</el-col>
<div v-if="dataForm.deliveryType === 3">
<el-table
:data="tableData"
:header-cell-style="{
background: '#F2F4F9',
color: '#606266',
}"
border
empty-text="暂无数据"
style="width: 100%"
ref="dataList">
<el-table-column
type="index"
fixed="left"
label="#"
align="center" />
<el-table-column prop="lineEdgeLibraryCode" label="目的码头">
<template slot-scope="scope">
<el-select
v-model="scope.row.lineEdgeLibraryCode"
filterable
@change="(val) => setEdgeInfo(val, scope.$index)"
style="width: 100%"
placeholder="请选择">
<el-option
v-for="item in potArr"
:key="item.id"
:label="item.lineEdgeLibraryCode"
:value="item.lineEdgeLibraryCode"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="agvGroundCode" label="码头编码" width="80" />
<el-table-column prop="region" label="区域名称" width="150">
<template slot-scope="scope">
<span>
{{
scope.row.region ? regionArr[scope.row.region - 1].name : ''
}}
</span>
</template>
</el-table-column>
<el-table-column prop="trayCode" label="托盘编码">
<template slot-scope="scope">
<el-input v-model="scope.row.trayCode" readonly>
<el-button
slot="append"
icon="el-icon-search"
@click="showTray(scope.$index)" />
</el-input>
</template>
</el-table-column>
<el-table-column prop="productName" label="物料名称" />
<el-table-column prop="productCode" label="物料编码" width="120" />
<el-table-column prop="productQuality" label="货物品质" />
<el-table-column fixed="right" label="操作" width="50">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
@click="handleClick(scope.$index)">
<span
class="iconfont icon-delete delete-color"
style="color: #f56c6c"></span>
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 表格底部加号 -->
<el-button class="addButton" icon="el-icon-plus" @click="addNew">
新增
</el-button>
</div>
</el-row>
</el-form>
<el-dialog
width="80%"
title="选择库存托盘"
:visible.sync="innerVisible"
append-to-body>
<el-form
:model="listQuery"
ref="queryForm"
size="small"
:inline="true"
label-width="68px">
<el-form-item label="托盘编码" prop="trayCode">
<el-input
v-model="listQuery.trayCode"
placeholder="请输入托盘编码"
clearable />
</el-form-item>
<el-form-item label="工序" prop="process">
<el-input
v-model="listQuery.process"
placeholder="请输入工序"
clearable />
</el-form-item>
<el-form-item label="膜卷号" prop="rollCode">
<el-input
v-model="listQuery.rollCode"
placeholder="请输入膜卷号"
clearable />
</el-form-item>
<el-form-item label="产品名" prop="productName">
<el-input
v-model="listQuery.productName"
placeholder="请输入产品名"
clearable />
</el-form-item>
<el-form-item label="品质" prop="grade">
<el-input
v-model="listQuery.grade"
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"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">
搜索
</el-button>
</el-form-item>
</el-form>
<el-table
:data="gridData"
border
v-loading="loadingGrid"
element-loading-text="拼命加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)">
<el-table-column type="index" fixed="left" label="#" align="center" />
<el-table-column label="" width="40">
<template slot-scope="scope">
<i
class="el-icon-plus"
@click="setTray(scope.row)"
style="color: #409eff; cursor: pointer; font-weight: bolder" />
</template>
</el-table-column>
<el-table-column property="trayCode" label="托盘编码" width="80" />
<el-table-column property="productCode" label="物料编码" width="120" />
<el-table-column property="description" label="物料名称" />
<el-table-column property="grade" label="货物品质" width="80" />
<el-table-column property="inventory" label="膜卷号" />
<el-table-column property="process" label="工序" width="80" />
<el-table-column property="createTime" label="入库时间" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
</el-table>
<pagination
:limit.sync="listQuery.pageSize"
:page.sync="listQuery.pageNo"
:total="listQuery.total"
@pagination="getGridList" />
</el-dialog>
</div>
</template> </template>
<script> <script>
@ -131,7 +354,9 @@ import {
updateDelivery, updateDelivery,
getDelivery, getDelivery,
getCode, getCode,
createDeliveryList,
} from '@/api/oth/delivery'; } from '@/api/oth/delivery';
import { getPage } from '@/api/oth/rollMessage';
import { getLineList } from '@/api/asrs/warehouseStorehouse'; import { getLineList } from '@/api/asrs/warehouseStorehouse';
import { getGoodSpecificationPage } from '@/api/asrs/goodSpecification'; import { getGoodSpecificationPage } from '@/api/asrs/goodSpecification';
@ -173,11 +398,31 @@ export default {
productQuality: null, productQuality: null,
rollCode: null, rollCode: null,
trayType: null, trayType: null,
workOrder: null,
department: null,
applicant: null,
process: null,
}, },
listQuery: {
warehouseId: '1696803324030865409',
trayCode: null,
process: null,
rollCode: null,
productName: null,
grade: null,
pageSize: 10,
pageNo: 1,
total: 1,
},
tableData: [{}],
regionArr, regionArr,
potArr: [], potArr: [],
productArr: [], productArr: [],
gridData: [],
innerVisible: false,
loadingGrid: false,
showTrayType: false, showTrayType: false,
trayIndex: null,
trayTypeArr: [ trayTypeArr: [
{ id: 1, name: '6臂' }, { id: 1, name: '6臂' },
{ id: 2, name: '12臂' }, { id: 2, name: '12臂' },
@ -202,6 +447,12 @@ export default {
trayType: [ trayType: [
{ required: true, message: '托盘类型不能为空', trigger: 'change' }, { required: true, message: '托盘类型不能为空', trigger: 'change' },
], ],
department: [
{ required: true, message: '部门不能为空', trigger: 'blur' },
],
applicant: [
{ required: true, message: '申请人不能为空', trigger: 'blur' },
],
}, },
}; };
}, },
@ -231,6 +482,11 @@ export default {
this.productArr = []; this.productArr = [];
} }
}, },
setEdgeInfo(val, index) {
const info = this.potArr.find((item) => item.lineEdgeLibraryCode === val);
this.tableData[index].agvGroundCode = info.agvGroundCode;
this.tableData[index].region = info.region;
},
setNeedTrayNumber(val) { setNeedTrayNumber(val) {
if (val === 1) { if (val === 1) {
this.dataForm.needTrayNumber = 1; this.dataForm.needTrayNumber = 1;
@ -240,10 +496,12 @@ export default {
} else { } else {
this.showTrayType = true; this.showTrayType = true;
} }
} else { } else if (val === 2) {
this.dataForm.needTrayNumber = 2; this.dataForm.needTrayNumber = 2;
this.dataForm.lineEdgeLibraryCode = null; this.dataForm.lineEdgeLibraryCode = null;
this.showTrayType = true; this.showTrayType = true;
} else if (val === 3) {
this.tableData = [{}];
} }
}, },
setShowTrayType(val) { setShowTrayType(val) {
@ -253,6 +511,135 @@ export default {
this.showTrayType = false; this.showTrayType = false;
} }
}, },
showTray(index) {
this.trayIndex = index;
this.innerVisible = true;
this.listQuery = {
warehouseId: '1696803324030865409',
pageSize: 10,
pageNo: 1,
total: 1,
};
this.getGridList();
},
getGridList() {
this.loadingGrid = true;
getPage(this.listQuery).then((response) => {
this.loadingGrid = false;
this.gridData = response.data.list;
this.listQuery.total = response.data.total;
});
},
setTray(val) {
this.innerVisible = false;
this.$set(this.tableData[this.trayIndex], 'trayCode', val.trayCode);
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);
},
//dialog
handleQuery() {
this.listQuery.pageNo = 1;
this.listQuery.pageSize = 10;
this.listQuery.trayCode = this.listQuery.trayCode || null;
this.listQuery.process = this.listQuery.process || null;
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]
: null;
this.listQuery.endTime = this.listQuery.searchTime
? this.listQuery.searchTime[1]
: null;
this.getGridList();
},
//
sizeChangeHandle(val) {
this.listQuery.pageSize = val;
this.listQuery.pageNo = 1;
this.getGridList();
},
//
currentChangeHandle(val) {
this.listQuery.pageNo = val;
this.getGridList();
},
addNew() {
const obj = {};
this.tableData.push(obj);
},
handleClick(index) {
this.tableData.splice(index, 1);
},
//
dataFormSubmit() {
this.$refs['dataForm'].validate((valid) => {
if (!valid) {
return false;
}
//
if (this.dataForm.deliveryType === 3) {
let cancel = false;
this.tableData.forEach((item) => {
item.deliveryCode = this.dataForm.deliveryCode;
item.department = this.dataForm.department;
item.applicant = this.dataForm.applicant;
item.warehouseId = this.aId;
item.deliveryType = 3;
item.needTrayNumber = 1;
if (!item.lineEdgeLibraryCode || !item.trayCode) {
cancel = true;
this.$modal.msgWarning('目的码头或托盘编码不能为空!');
}
});
if (cancel) return;
createDeliveryList(this.tableData).then((response) => {
if (response.data === -1) {
this.$modal.msgWarning('排、列、层不能重复');
} else if (response.data === 0) {
this.$modal.msgWarning('名称或编码不能重复');
} else {
this.$modal.msgSuccess('新增成功');
this.visible = false;
this.$emit('refreshDataList');
}
});
return;
}
//
this.urlOptions.createURL(this.dataForm).then((response) => {
if (response.data === -1) {
this.$modal.msgWarning('排、列、层不能重复');
} else if (response.data === 0) {
this.$modal.msgWarning('名称或编码不能重复');
} else {
this.$modal.msgSuccess('新增成功');
this.visible = false;
this.$emit('refreshDataList');
}
});
});
},
}, },
}; };
</script> </script>
<style scoped>
.addButton {
width: 100%;
height: 35px;
border-top: none;
color: #0b58ff;
border-color: #ebeef5;
border-radius: 0;
}
.addButton:hover {
color: #0b58ff;
border-color: #ebeef5;
background-color: #fff;
}
.addButton:focus {
border-color: #ebeef5;
background-color: #fff;
}
</style>

View File

@ -1,23 +1,24 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<search-bar <search-bar
:formConfigs="formConfig" :isFold="true"
ref="searchBarForm" :formConfigs="formConfig"
@headBtnClick="buttonClick" /> ref="searchBarForm"
<base-table @headBtnClick="buttonClick" />
v-loading="dataListLoading" <base-table
:table-props="tableProps" v-loading="dataListLoading"
:page="listQuery.pageNo" :table-props="tableProps"
:limit="listQuery.pageSize" :page="listQuery.pageNo"
:table-data="tableData"> :limit="listQuery.pageSize"
<method-btn :table-data="tableData">
v-if="tableBtn.length" <method-btn
slot="handleBtn" v-if="tableBtn.length"
:width="200" slot="handleBtn"
label="操作" :width="200"
:method-list="tableBtn" label="操作"
@clickBtn="handleClick" /> :method-list="tableBtn"
</base-table> @clickBtn="handleClick" />
</base-table>
<pagination <pagination
:limit.sync="listQuery.pageSize" :limit.sync="listQuery.pageSize"
:page.sync="listQuery.pageNo" :page.sync="listQuery.pageNo"
@ -61,6 +62,10 @@ const tableProps = [
prop: 'productName', prop: 'productName',
label: '货物名称', label: '货物名称',
}, },
{
prop: 'trayCode',
label: '托盘编码',
},
{ {
prop: 'needTrayNumber', prop: 'needTrayNumber',
label: '所需托盘数', label: '所需托盘数',
@ -106,6 +111,22 @@ const tableProps = [
filter: codeFilter('trayType'), filter: codeFilter('trayType'),
width: 80, width: 80,
}, },
{
prop: 'workOrder',
label: '工单',
},
{
prop: 'department',
label: '部门',
},
{
prop: 'applicant',
label: '申请人',
},
{
prop: 'process',
label: '工序',
},
{ {
prop: 'updateTime', prop: 'updateTime',
label: '更新时间', label: '更新时间',
@ -214,6 +235,30 @@ export default {
defaultSelect: '', defaultSelect: '',
filterable: true, filterable: true,
}, },
{
type: 'input',
label: '膜卷号',
placeholder: '膜卷号',
param: 'rollCode',
},
{
type: 'input',
label: '工单',
placeholder: '工单',
param: 'workOrder',
},
{
type: 'input',
label: '工序',
placeholder: '工序',
param: 'process',
},
{
type: 'input',
label: '托盘编码',
placeholder: '托盘编码',
param: 'trayCode',
},
{ {
type: 'input', type: 'input',
label: '货物品质', label: '货物品质',
@ -262,9 +307,13 @@ export default {
this.listQuery.pageNo = 1; this.listQuery.pageNo = 1;
this.listQuery.pageSize = 10; this.listQuery.pageSize = 10;
this.listQuery.productName = val.productName; this.listQuery.productName = val.productName;
this.listQuery.lineEdgeLibraryCode = val.lineEdgeLibraryCode || null; this.listQuery.lineEdgeLibraryCode = val.lineEdgeLibraryCode || null;
this.listQuery.region = val.region || null; this.listQuery.region = val.region || null;
this.listQuery.productQuality = val.quality || 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.getDataList(); this.getDataList();
break; break;
case 'add': case 'add':

View File

@ -1,15 +1,77 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<search-bar <search-bar
:isFold="true"
:formConfigs="formConfig" :formConfigs="formConfig"
ref="searchBarForm" ref="searchBarForm"
@headBtnClick="buttonClick" /> @headBtnClick="buttonClick" />
<base-table <el-table
:data="tableData"
:header-cell-style="{
background: '#F2F4F9',
color: '#606266',
}"
border
v-loading="dataListLoading" v-loading="dataListLoading"
:table-props="tableProps" style="width: 100%"
:page="listQuery.pageNo" ref="dataList">
:limit="listQuery.pageSize" <el-table-column type="expand">
:table-data="tableData"></base-table> <template slot-scope="scope">
<product :delivery-history-id="scope.row.id"></product>
</template>
</el-table-column>
<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" />
<el-table-column prop="alreadyOutNumber" label="已补托盘数" width="90" />
<el-table-column prop="status" label="出库单状态" width="90">
<template slot-scope="scope">
<span>
{{ scope.row.status >= 0 ? status[scope.row.status] : '' }}
</span>
</template>
</el-table-column>
<el-table-column prop="deliveryType" label="出库类型" width="95">
<template slot-scope="scope">
<span>
{{
scope.row.deliveryType >= 0
? deliveryType[scope.row.deliveryType]
: ''
}}
</span>
</template>
</el-table-column>
<el-table-column prop="lineEdgeLibraryCode" label="码头位置" />
<el-table-column prop="region" label="发货区域" width="95">
<template slot-scope="scope">
<span>
{{
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="rollCode" label="膜卷号" />
<el-table-column prop="trayType" label="托盘类型" width="75">
<template slot-scope="scope">
<span>
{{ scope.row.trayType >= 0 ? trayType[scope.row.trayType] : '' }}
</span>
</template>
</el-table-column>
<el-table-column prop="workOrder" label="工单" />
<el-table-column prop="department" label="部门" />
<el-table-column prop="applicant" label="申请人" />
<el-table-column prop="process" label="工序" />
<el-table-column prop="createTime" label="创建时间" width="150">
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
</el-table>
<pagination <pagination
:limit.sync="listQuery.pageSize" :limit.sync="listQuery.pageSize"
:page.sync="listQuery.pageNo" :page.sync="listQuery.pageNo"
@ -19,74 +81,12 @@
</template> </template>
<script> <script>
import product from './product-mini';
import basicPage from '../mixins/basic-page'; import basicPage from '../mixins/basic-page';
import { parseTime } from '../mixins/code-filter'; import { getDeliveryHisPage,exportDeliveryHisExcel } from '@/api/oth/delivery';
import { getDeliveryHisPage } from '@/api/oth/delivery';
import codeFilter from '../mixins/code-filter';
import { getLineList } from '@/api/asrs/warehouseStorehouse'; import { getLineList } from '@/api/asrs/warehouseStorehouse';
import { getGoodSpecificationPage } from '@/api/asrs/goodSpecification'; import { getGoodSpecificationPage } from '@/api/asrs/goodSpecification';
const tableProps = [
{
prop: 'deliveryCode',
label: '出库单号',
},
{
prop: 'productName',
label: '货物名称',
},
{
prop: 'needTrayNumber',
label: '所需托盘数',
width: 90
},
{
prop: 'alreadyOutNumber',
label: '已补托盘数',
width: 90
},
{
prop: 'status',
label: '出库单状态',
filter: codeFilter('status'),
width: 90
},
{
prop: 'deliveryType',
label: '出库类型',
filter: codeFilter('deliveryType'),
width: 95
},
{
prop: 'lineEdgeLibraryCode',
label: '码头位置',
},
{
prop: 'region',
label: '发货区域',
filter: codeFilter('region'),
},
{
prop: 'productQuality',
label: '货物品质',
},
{
prop: 'rollCode',
label: '膜卷号',
},
{
prop: 'trayType',
label: '托盘类型',
filter: codeFilter('trayType'),
width: 80
},
{
prop: 'createTime',
label: '创建时间',
filter: parseTime,
width: 150,
},
];
const regionArr = [ const regionArr = [
{ name: '一次分切区域1线', id: 1 }, { name: '一次分切区域1线', id: 1 },
{ name: '一次分拣区域', id: 2 }, { name: '一次分拣区域', id: 2 },
@ -100,14 +100,35 @@ const regionArr = [
{ name: '一次分切区域3线', id: 10 }, { name: '一次分切区域3线', id: 10 },
{ name: '一次分切区域4线', id: 11 }, { name: '一次分切区域4线', id: 11 },
]; ];
const region = [
'',
'一次分切区域1线',
'一次分拣区域',
'二次分切区域',
'二次分拣区域',
'手动包装区域',
'涂覆区域',
'其他',
'自动包装区域',
'一次分切区域2线',
'一次分切区域3线',
'一次分切区域4线',
];
const status = ['', '优先执行', '正常运行', '暂停', '完成', '取消'];
const deliveryType = ['', '单托盘出库', '多托盘出库', '点对点出库'];
const trayType = ['无要求', '6臂', '12臂'];
export default { export default {
mixins: [basicPage], mixins: [basicPage],
data() { data() {
return { return {
urlOptions: { urlOptions: {
getDataListURL: getDeliveryHisPage, getDataListURL: getDeliveryHisPage,
exportURL: exportDeliveryHisExcel,
}, },
tableProps, status,
deliveryType,
trayType,
region,
tableData: [], tableData: [],
formConfig: [ formConfig: [
{ {
@ -138,6 +159,30 @@ export default {
defaultSelect: '', defaultSelect: '',
filterable: true, filterable: true,
}, },
{
type: 'input',
label: '膜卷号',
placeholder: '膜卷号',
param: 'rollCode',
},
{
type: 'input',
label: '工单',
placeholder: '工单',
param: 'workOrder',
},
{
type: 'input',
label: '工序',
placeholder: '工序',
param: 'process',
},
{
type: 'input',
label: '托盘编码',
placeholder: '托盘编码',
param: 'trayCode',
},
{ {
type: 'input', type: 'input',
label: '货物品质', label: '货物品质',
@ -150,10 +195,19 @@ export default {
name: 'search', name: 'search',
color: 'primary', color: 'primary',
}, },
{
type: 'button',
btnName: '导出',
name: 'export',
color: 'primary',
plain: true,
},
], ],
}; };
}, },
components: {}, components: {
product,
},
created() { created() {
const params = { const params = {
pageSize: 100, pageSize: 100,
@ -176,11 +230,28 @@ export default {
this.listQuery.pageNo = 1; this.listQuery.pageNo = 1;
this.listQuery.pageSize = 10; this.listQuery.pageSize = 10;
this.listQuery.productName = val.productName; this.listQuery.productName = val.productName;
this.listQuery.lineEdgeLibraryCode = val.lineEdgeLibraryCode || null; this.listQuery.lineEdgeLibraryCode = val.lineEdgeLibraryCode || null;
this.listQuery.region = val.region || null; this.listQuery.region = val.region || null;
this.listQuery.productQuality = val.quality || 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.getDataList(); this.getDataList();
break; 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, '历史出库单导出');
break;
default: default:
console.log(val); console.log(val);
} }
@ -188,3 +259,16 @@ export default {
}, },
}; };
</script> </script>
<style>
.app-container .el-table .el-table__cell {
padding: 0;
height: 35px;
}
.el-table .warning-row {
background: oldlace;
}
.el-table .success-row {
background: #f0f9eb;
}
</style>

View File

@ -0,0 +1,118 @@
<!--
* @Author: zwq
* @Date: 2023-08-24 14:47:58
* @LastEditors: zwq
* @LastEditTime: 2024-05-22 16:42:40
* @Description:
-->
<template>
<div>
<!-- <div class="app-container"> -->
<base-table
v-loading="dataListLoading"
:table-props="tableProps"
max-height="200"
:table-data="tableData" />
</div>
</template>
<script>
import basicPage from '../mixins/basic-page';
import { parseTime } from '../mixins/code-filter';
import { getDeliveryHisProPage } from '@/api/oth/delivery';
const tableProps = [
{
prop: 'deliveryCode',
label: '出库单号',
},
{
prop: 'subContainerCode',
label: '悬臂号',
},
{
prop: 'trayCode',
label: '托盘编码',
},
{
prop: 'inventory',
label: '膜卷号',
width: 167,
},
{
prop: 'productCode',
label: '物料编码',
width: 120,
},
{
prop: 'productName',
label: '物料名称',
},
{
prop: 'grade',
label: '品质',
},
{
prop: 'planQty',
label: '数量',
},
{
prop: 'orderFrom',
label: '产出工单',
width: 100,
},
{
prop: 'applicant',
label: '申请人',
},
{
prop: 'region',
label: '目标区域',
},
{
prop: 'lineEdgeLibraryCode',
label: '目标位置',
},
{
prop: 'lineId',
label: '行号',
},
{
prop: 'createTime',
label: '创建时间',
filter: parseTime,
width: 150,
},
];
export default {
mixins: [basicPage],
props: {
deliveryHistoryId: {
type: String,
default: '',
},
},
data() {
return {
urlOptions: {
getDataListURL: getDeliveryHisProPage,
},
tableProps,
tableData: [],
listQuery: {
deliveryHistoryId: this.deliveryHistoryId,
pageSize: 100,
pageNo: 1,
total: 1,
},
};
},
components: {
},
created() {
},
methods: {
},
};
</script>

View File

@ -0,0 +1,169 @@
<!--
* @Author: zwq
* @Date: 2024-05-15 16:18:19
* @LastEditors: zwq
* @LastEditTime: 2024-05-16 09:57:13
* @Description:
-->
<template>
<div class="app-container">
<el-table
:data="tableData"
:header-cell-style="{
background: '#F2F4F9',
color: '#606266',
}"
border
:cell-style="cellStyle"
:span-method="objectSpanMethod"
empty-text="暂无数据"
style="width: 100%"
ref="dataList">
<el-table-column type="index" fixed="left" label="#" align="center" />
<el-table-column prop="name" label="仓库名"></el-table-column>
<el-table-column prop="code" label="仓库编码"></el-table-column>
<el-table-column
v-for="item in columns"
:key="item.label"
align="center"
:label="item.label">
<el-table-column
v-for="it in item.children"
:key="it.prop"
:prop="it.prop"
align="center"
header-align="left"
:label="it.label">
<template slot-scope="scope">
{{ scope.row[it.prop] }}
</template>
</el-table-column>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
data() {
return {
tableData: [
{
name: 1,
code: '1',
prop1: '1',
prop2: '2',
prop3: '3',
prop4: '4',
prop5: '5',
prop6: '6',
span: [2, 4],
},
{
name: 2,
code: '2',
prop1: '7',
prop2: '8',
prop3: '9',
prop4: '10',
prop5: '11',
prop6: '12',
span: [1, 5],
},
],
columns: [
{
label: '2023/1',
children: [
{
label: '1',
prop: 'prop1',
},
{
label: '15',
prop: 'prop2',
},
{
label: '30',
prop: 'prop3',
},
],
},
{
label: '2023/2',
children: [
{
label: '1',
prop: 'prop4',
},
{
label: '15',
prop: 'prop5',
},
{
label: '30',
prop: 'prop6',
},
],
},
],
color: [
'#5470c6',
'#91cc75',
'#fac858',
'#ee6666',
'#73c0de',
'#3ba272',
'#fc8452',
'#9a60b4',
'#ea7ccc',
],
};
},
components: {},
created() {},
methods: {
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
let i = 0;
if (columnIndex === 3) {
return [1, row.span[0]];
} else if (columnIndex === 3 + row.span[i]) {
i += 1;
return [1, row.span[i]];
} else if (columnIndex > 3) {
return [0, 0];
}
},
cellStyle({ row, column, rowIndex, columnIndex }) {
let i = 0;
if (columnIndex === 3) {
return {
color: 'white',
borderRadius: '15px',
background: this.color[0],
};
} else if (columnIndex === 3 + row.span[i]) {
i += 1;
return {
color: 'white',
borderRadius: '15px',
background: i < 9 ? this.color[i] : 'none',
};
}
},
},
};
</script>
<style>
.app-container .el-table .el-table__cell {
padding: 0;
height: 35px;
}
.el-table .warning-row {
background: oldlace;
}
.el-table .success-row {
background: #f0f9eb;
}
</style>

View File

@ -24,7 +24,7 @@
import basicPage from '../mixins/basic-page'; import basicPage from '../mixins/basic-page';
import { parseTime } from '../mixins/code-filter'; import { parseTime } from '../mixins/code-filter';
import codeFilter from '../mixins/code-filter'; import codeFilter from '../mixins/code-filter';
import { getMainTaskHistoryPage } from '@/api/oth/mainTaskHistory'; import { getMainTaskHistoryPage,exportMainTaskHistoryExcel } from '@/api/oth/mainTaskHistory';
import point from './point'; import point from './point';
const tableProps = [ const tableProps = [
@ -195,6 +195,7 @@ export default {
return { return {
urlOptions: { urlOptions: {
getDataListURL: getMainTaskHistoryPage, getDataListURL: getMainTaskHistoryPage,
exportURL: exportMainTaskHistoryExcel,
}, },
tableProps, tableProps,
tableData: [], tableData: [],
@ -265,6 +266,13 @@ export default {
btnName: '重置', btnName: '重置',
name: 'reset', name: 'reset',
}, },
{
type: 'button',
btnName: '导出',
name: 'export',
color: 'primary',
plain: true,
},
], ],
}; };
}, },
@ -311,6 +319,21 @@ export default {
}; };
this.getDataList(); this.getDataList();
break; break;
case 'export':
this.listQuery.pageNo = undefined;
this.listQuery.pageSize = undefined;
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.handleExport(this.listQuery, '历史任务导出');
break;
default: default:
console.log(val); console.log(val);
} }

View File

@ -24,7 +24,7 @@
import basicPage from '../mixins/basic-page'; import basicPage from '../mixins/basic-page';
import { parseTime } from '../mixins/code-filter'; import { parseTime } from '../mixins/code-filter';
import codeFilter from '../mixins/code-filter'; import codeFilter from '../mixins/code-filter';
import { getMainTaskHistoryPage } from '@/api/oth/mainTaskHistory'; import { getMainTaskHistoryPage,exportMainTaskHistoryExcel } from '@/api/oth/mainTaskHistory';
import point from './point'; import point from './point';
const tableProps = [ const tableProps = [
@ -195,6 +195,7 @@ export default {
return { return {
urlOptions: { urlOptions: {
getDataListURL: getMainTaskHistoryPage, getDataListURL: getMainTaskHistoryPage,
exportURL: exportMainTaskHistoryExcel,
}, },
tableProps, tableProps,
tableData: [], tableData: [],
@ -265,6 +266,13 @@ export default {
btnName: '重置', btnName: '重置',
name: 'reset', name: 'reset',
}, },
{
type: 'button',
btnName: '导出',
name: 'export',
color: 'primary',
plain: true,
},
], ],
}; };
}, },
@ -312,6 +320,21 @@ export default {
}; };
this.getDataList(); this.getDataList();
break; break;
case 'export':
this.listQuery.pageNo = undefined;
this.listQuery.pageSize = undefined;
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.handleExport(this.listQuery, '历史任务导出');
break;
default: default:
console.log(val); console.log(val);
} }

View File

@ -2,7 +2,7 @@
* @Author: zwq * @Author: zwq
* @Date: 2022-08-24 11:19:43 * @Date: 2022-08-24 11:19:43
* @LastEditors: zwq * @LastEditors: zwq
* @LastEditTime: 2023-10-10 15:29:31 * @LastEditTime: 2024-05-24 09:45:34
* @Description: * @Description:
*/ */
export default { export default {
@ -155,16 +155,13 @@ export default {
this.getDataList() this.getDataList()
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport(id) { handleExport(params,name) {
// 处理查询参数 // 处理查询参数
let params = { warehouseId:id };
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有数据项?').then(() => { this.$modal.confirm('是否确认导出所有数据项?').then(() => {
this.exportLoading = true; this.exportLoading = true;
return this.urlOptions.exportURL(params); return this.urlOptions.exportURL(params);
}).then(response => { }).then(response => {
this.$download.excel(response, '导出.xls'); this.$download.excel(response, name+'.xls');
this.exportLoading = false; this.exportLoading = false;
}).catch(() => { }); }).catch(() => { });
} }

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-04-25 16:39:43 * @LastEditTime: 2024-05-21 14:44:43
* @FilePath: \basic-admin\src\filters\basicData\index.js * @FilePath: \basic-admin\src\filters\basicData\index.js
* @Description: * @Description:
*/ */
@ -88,6 +88,7 @@ const table = {
deliveryType: { deliveryType: {
1: '单托盘出库', 1: '单托盘出库',
2: '多托盘出库', 2: '多托盘出库',
3: '点对点出库',
}, },
trayType: { trayType: {
2: '12臂', 2: '12臂',

View File

@ -198,6 +198,17 @@ export default {
placeholder: '入库单号', placeholder: '入库单号',
param: 'workOrderCode', param: 'workOrderCode',
}, },
{
type: 'datePicker',
label: '创建时间',
dateType: 'datetimerange',
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
param: 'searchTime',
},
{ {
type: 'button', type: 'button',
btnName: '搜索', btnName: '搜索',
@ -227,7 +238,9 @@ export default {
this.listQuery.rollCode = val.rollCode.trim() || null; this.listQuery.rollCode = val.rollCode.trim() || null;
this.listQuery.productName = val.productName.trim() || null; this.listQuery.productName = val.productName.trim() || null;
this.listQuery.grade = val.grade.trim() || null; this.listQuery.grade = val.grade.trim() || null;
this.listQuery.workOrderCode = val.workOrderCode.trim() || null this.listQuery.workOrderCode = val.workOrderCode.trim() || null;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime ? val.searchTime[1] : null;
this.getDataList(); this.getDataList();
break; break;
case 'reset': case 'reset':
@ -246,6 +259,8 @@ export default {
this.listQuery.productName = val.productName || null; this.listQuery.productName = val.productName || null;
this.listQuery.grade = val.grade || null; this.listQuery.grade = val.grade || null;
this.listQuery.workOrderCode = val.workOrderCode || null; this.listQuery.workOrderCode = val.workOrderCode || null;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime ? val.searchTime[1] : null;
this.handleExport(); this.handleExport();
break; break;
default: default:

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-04-24 16:58:36 * @LastEditTime: 2024-05-24 11:27:27
* @Description: * @Description:
--> -->
<template> <template>
@ -59,10 +59,10 @@
</el-divider> </el-divider>
<div v-for="i in 7" :key="i + 'F'"> <div v-for="i in 7" :key="i + 'F'">
<el-row style="margin-bottom: 10px" type="flex" class="flex-warp"> <el-row style="margin-bottom: 10px" type="flex" class="flex-warp">
<div <!-- <div
class="dashboard-layout-item" class="dashboard-layout-item"
style="opacity: 0" style="opacity: 0"
v-if="i === 7" /> v-if="i === 7" /> -->
<div <div
class="dashboard-layout-item" class="dashboard-layout-item"
v-for="j in wareData v-for="j in wareData
@ -208,7 +208,7 @@
</el-divider> </el-divider>
<el-row style="margin-bottom: 10px" type="flex" class="flex-warp"> <el-row style="margin-bottom: 10px" type="flex" class="flex-warp">
<div <div
class="dashboard-layout-item" class="dashboard-layout-item interval"
v-for="j in wareData.filter((item) => item.region == 3).reverse()" v-for="j in wareData.filter((item) => item.region == 3).reverse()"
:key="j.id" :key="j.id"
:title="j.lineEdgeLibraryCode"> :title="j.lineEdgeLibraryCode">
@ -233,6 +233,43 @@
</el-popover> </el-popover>
</div> </div>
</el-row> </el-row>
<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
class="dashboard-layout-item"
v-for="j in wareData
.filter(
(item) =>
item.agvGroundCode.substr(1, 2) == i && item.region === 6
)
.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> </div>
</div> </div>
</template> </template>
@ -313,6 +350,24 @@ export default {
margin-right: 30px; margin-right: 30px;
} }
} }
.interval {
&:nth-child(2n) {
margin-right: 30px;
::before {
content: '';
}
::after {
content: '';
position: absolute;
right: -15px;
top: 1px;
z-index: 1;
background-color: black;
width: 1px;
height: 12px;
}
}
}
.hoverDiv { .hoverDiv {
width: 100%; width: 100%;
height: 30px; height: 30px;

View File

@ -99,6 +99,7 @@ import { parseTime } from '../mixins/code-filter';
import { import {
getWarehouseStorehousePage, getWarehouseStorehousePage,
updateWarehouseStorehouse, updateWarehouseStorehouse,
exportWarehouseStorehouseExcel
} from '@/api/asrs/warehouseStorehouse'; } from '@/api/asrs/warehouseStorehouse';
const processArr = [ const processArr = [
@ -143,6 +144,7 @@ export default {
return { return {
urlOptions: { urlOptions: {
getDataListURL: getWarehouseStorehousePage, getDataListURL: getWarehouseStorehousePage,
exportURL: exportWarehouseStorehouseExcel
}, },
tableData: [], tableData: [],
processArr, processArr,
@ -227,15 +229,13 @@ export default {
name: 'search', name: 'search',
color: 'primary', color: 'primary',
}, },
// { {
// type: this.$auth.hasPermi('base:factory:create') ? 'separate' : '', type: 'button',
// }, btnName: '导出',
// { name: 'export',
// type: this.$auth.hasPermi('base:factory:export') ? 'button' : '', color: 'primary',
// btnName: '', plain: true,
// name: 'export', },
// color: 'warning',
// },
], ],
}; };
}, },
@ -302,7 +302,19 @@ export default {
this.addOrUpdateHandle(); this.addOrUpdateHandle();
break; break;
case 'export': case 'export':
this.handleExport(); this.listQuery.pageNo = undefined;
this.listQuery.pageSize = undefined;
this.listQuery.wareRow = val.wareRow;
this.listQuery.wareColumn = val.wareColumn;
this.listQuery.wareLayer = val.wareLayer;
this.listQuery.trayCode = val.code;
this.listQuery.goodName = val.pname;
this.listQuery.grade = val.quality;
this.listQuery.rollCode = val.rollCode;
this.listQuery.process = val.processId;
this.listQuery.warehouseStorehouseState =
val.warehouseStorehouseStateId;
this.handleExport(this.listQuery,'库位产品导出');
break; break;
default: default:
console.log(val); console.log(val);

View File

@ -96,6 +96,7 @@ import { parseTime } from '../mixins/code-filter';
import { import {
getWarehouseStorehousePage, getWarehouseStorehousePage,
updateWarehouseStorehouse, updateWarehouseStorehouse,
exportWarehouseStorehouseExcel
} from '@/api/asrs/warehouseStorehouse'; } from '@/api/asrs/warehouseStorehouse';
const processArr = [ const processArr = [
@ -140,6 +141,7 @@ export default {
return { return {
urlOptions: { urlOptions: {
getDataListURL: getWarehouseStorehousePage, getDataListURL: getWarehouseStorehousePage,
exportURL: exportWarehouseStorehouseExcel
}, },
tableData: [], tableData: [],
processArr, processArr,
@ -225,15 +227,13 @@ export default {
name: 'search', name: 'search',
color: 'primary', color: 'primary',
}, },
// { {
// type: this.$auth.hasPermi('base:factory:create') ? 'separate' : '', type: 'button',
// }, btnName: '导出',
// { name: 'export',
// type: this.$auth.hasPermi('base:factory:export') ? 'button' : '', color: 'primary',
// btnName: '', plain: true,
// name: 'export', },
// color: 'warning',
// },
], ],
}; };
}, },
@ -300,6 +300,19 @@ export default {
this.addOrUpdateHandle(); this.addOrUpdateHandle();
break; break;
case 'export': case 'export':
this.listQuery.pageNo = undefined;
this.listQuery.pageSize = undefined;
this.listQuery.wareRow = val.wareRow;
this.listQuery.wareColumn = val.wareColumn;
this.listQuery.wareLayer = val.wareLayer;
this.listQuery.trayCode = val.code;
this.listQuery.goodName = val.pname;
this.listQuery.grade = val.quality;
this.listQuery.rollCode = val.rollCode;
this.listQuery.process = val.processId;
this.listQuery.warehouseStorehouseState =
val.warehouseStorehouseStateId;
this.handleExport(this.listQuery,'库位产品导出');
this.handleExport(); this.handleExport();
break; break;
default: default:

View File

@ -22,15 +22,15 @@
</el-table-column> </el-table-column>
<el-table-column prop="warehouseName" label="仓库名"></el-table-column> <el-table-column prop="warehouseName" label="仓库名"></el-table-column>
<el-table-column prop="warehouseCode" label="仓库编码"></el-table-column> <el-table-column prop="warehouseCode" label="仓库编码"></el-table-column>
<el-table-column <el-table-column prop="warehouseStorehouseName" label="库位名" />
prop="warehouseStorehouseName"
label="库位名" />
<el-table-column <el-table-column
prop="warehouseStorehouseCode" prop="warehouseStorehouseCode"
label="库位编码"></el-table-column> label="库位编码"></el-table-column>
<el-table-column prop="trayCode" label="托盘编码"></el-table-column> <el-table-column prop="trayCode" label="托盘编码"></el-table-column>
<el-table-column prop="process" label="工序" width="110"> <el-table-column
</el-table-column> prop="process"
label="工序"
width="110"></el-table-column>
<el-table-column prop="createTime" label="出入库时间"> <el-table-column prop="createTime" label="出入库时间">
<template v-slot="scope"> <template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
@ -64,7 +64,10 @@
<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 { getWarehouseStorehouseStoragePage } from '@/api/asrs/warehouseStorehouseStorage'; import {
getWarehouseStorehouseStoragePage,
exportWarehouseStorehouseStorageExcel,
} from '@/api/asrs/warehouseStorehouseStorage';
const warehouseStorehouseStorageState = [ const warehouseStorehouseStorageState = [
{ {
name: '入库', name: '入库',
@ -107,6 +110,7 @@ export default {
return { return {
urlOptions: { urlOptions: {
getDataListURL: getWarehouseStorehouseStoragePage, getDataListURL: getWarehouseStorehouseStoragePage,
exportURL: exportWarehouseStorehouseStorageExcel,
}, },
processArr, processArr,
tableData: [], tableData: [],
@ -155,15 +159,13 @@ export default {
name: 'search', name: 'search',
color: 'primary', color: 'primary',
}, },
// { {
// type: this.$auth.hasPermi('base:factory:create') ? 'separate' : '', type: 'button',
// }, btnName: '导出',
// { name: 'export',
// type: this.$auth.hasPermi('base:factory:export') ? 'button' : '', color: 'primary',
// btnName: '', plain: true,
// name: 'export', },
// color: 'warning',
// },
], ],
}; };
}, },
@ -201,13 +203,21 @@ export default {
this.addOrUpdateHandle(); this.addOrUpdateHandle();
break; break;
case 'export': case 'export':
this.handleExport(); this.listQuery.pageNo = undefined;
this.listQuery.pageSize = undefined;
this.listQuery.warehouseStorehouseName = val.name;
this.listQuery.warehouseStorehouseCode = val.kcode;
this.listQuery.trayCode = val.tcode;
this.listQuery.warehouseStorehouseStorageState = val.state;
this.listQuery.createTime = val.searchTime;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : '';
this.listQuery.endTime = val.searchTime ? val.searchTime[1] : '';
this.handleExport(this.listQuery, '出入库历史信息导出');
break; break;
default: default:
console.log(val); console.log(val);
} }
}, },
}, },
}; };
</script> </script>

View File

@ -29,8 +29,7 @@
prop="warehouseStorehouseCode" prop="warehouseStorehouseCode"
label="库位编码"></el-table-column> label="库位编码"></el-table-column>
<el-table-column prop="trayCode" label="托盘编码"></el-table-column> <el-table-column prop="trayCode" label="托盘编码"></el-table-column>
<el-table-column prop="process" label="工序"> <el-table-column prop="process" label="工序"></el-table-column>
</el-table-column>
<el-table-column prop="createTime" label="出入库时间"> <el-table-column prop="createTime" label="出入库时间">
<template v-slot="scope"> <template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
@ -63,7 +62,10 @@
<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 { getWarehouseStorehouseStoragePage, } from "@/api/asrs/warehouseStorehouseStorage"; import {
getWarehouseStorehouseStoragePage,
exportWarehouseStorehouseStorageExcel,
} from '@/api/asrs/warehouseStorehouseStorage';
const warehouseStorehouseStorageState = [ const warehouseStorehouseStorageState = [
{ {
name: '入库', name: '入库',
@ -106,6 +108,7 @@ export default {
return { return {
urlOptions: { urlOptions: {
getDataListURL: getWarehouseStorehouseStoragePage, getDataListURL: getWarehouseStorehouseStoragePage,
exportURL: exportWarehouseStorehouseStorageExcel,
}, },
processArr, processArr,
tableData: [], tableData: [],
@ -154,15 +157,13 @@ export default {
name: 'search', name: 'search',
color: 'primary', color: 'primary',
}, },
// { {
// type: this.$auth.hasPermi('base:factory:create') ? 'separate' : '', type: 'button',
// }, btnName: '导出',
// { name: 'export',
// type: this.$auth.hasPermi('base:factory:export') ? 'button' : '', color: 'primary',
// btnName: '', plain: true,
// name: 'export', },
// color: 'warning',
// },
], ],
}; };
}, },
@ -171,7 +172,7 @@ export default {
}, },
created() { created() {
this.listQuery.warehouseId = this.bId; this.listQuery.warehouseId = this.bId;
}, },
methods: { methods: {
buttonClick(val) { buttonClick(val) {
switch (val.btnName) { switch (val.btnName) {
@ -181,7 +182,7 @@ export default {
this.listQuery.warehouseStorehouseName = val.name; this.listQuery.warehouseStorehouseName = val.name;
this.listQuery.warehouseStorehouseCode = val.kcode; this.listQuery.warehouseStorehouseCode = val.kcode;
this.listQuery.trayCode = val.tcode; this.listQuery.trayCode = val.tcode;
this.listQuery.warehouseStorehouseStorageState =val.state; this.listQuery.warehouseStorehouseStorageState = val.state;
this.listQuery.createTime = val.searchTime; this.listQuery.createTime = val.searchTime;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : ''; this.listQuery.startTime = val.searchTime ? val.searchTime[0] : '';
this.listQuery.endTime = val.searchTime ? val.searchTime[1] : ''; this.listQuery.endTime = val.searchTime ? val.searchTime[1] : '';
@ -202,7 +203,16 @@ export default {
this.addOrUpdateHandle(); this.addOrUpdateHandle();
break; break;
case 'export': case 'export':
this.handleExport(); this.listQuery.pageNo = undefined;
this.listQuery.pageSize = undefined;
this.listQuery.warehouseStorehouseName = val.name;
this.listQuery.warehouseStorehouseCode = val.kcode;
this.listQuery.trayCode = val.tcode;
this.listQuery.warehouseStorehouseStorageState = val.state;
this.listQuery.createTime = val.searchTime;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : '';
this.listQuery.endTime = val.searchTime ? val.searchTime[1] : '';
this.handleExport(this.listQuery, '出入库历史信息导出');
break; break;
default: default:
console.log(val); console.log(val);

View File

@ -326,6 +326,10 @@ export default {
}, },
created() { created() {
this.getList(); this.getList();
//
getTenantPackageList().then((response) => {
this.packageList = response.data;
});
}, },
methods: { methods: {
/** 查询列表 */ /** 查询列表 */
@ -371,10 +375,6 @@ export default {
/** 新增按钮操作 */ /** 新增按钮操作 */
handleAdd() { handleAdd() {
this.reset(); this.reset();
//
getTenantPackageList().then((response) => {
this.packageList = response.data;
});
this.$nextTick(() => { this.$nextTick(() => {
this.open = true; this.open = true;
this.title = '添加租户'; this.title = '添加租户';

192
src/views/wcsAlarm/real.vue Normal file
View File

@ -0,0 +1,192 @@
<!--
* @Author: zwq
* @Date: 2024-05-21 14:25:27
* @LastEditors: zwq
* @LastEditTime: 2024-05-21 16:44:47
* @Description:
-->
<template>
<div class="main-body">
<el-divider content-position="left">堆垛机报警信息</el-divider>
<el-row :gutter="20">
<el-col v-for="i in 4" :key="i + 'ddj'" :span="6">
<el-card class="box-card" style="min-width: 240px">
<div slot="header" class="header-card">
堆垛机:
<div class="info">
{{ Info[i - 1].name }}
</div>
</div>
<div>
报警信息:
<div class="info">
{{ Info[i - 1].msg }}
</div>
</div>
<div>
报警编码:
<div class="info">
{{ Info[i - 1].code }}
</div>
</div>
<div class="blinking-warning" v-if="Info[i - 1].code !== 0" />
</el-card>
</el-col>
</el-row>
<el-divider content-position="left">1-2巷道输送线报警信息</el-divider>
<el-row :gutter="20" v-for="l in 2" :key="l + 'line1'">
<el-col v-for="i in 6" :key="i + 'ssx1'" :span="4">
<el-card class="box-card" style="min-width: 240px">
<div slot="header" class="header-card">
输送线:
<div class="info">
{{ Info[i - 1 + 4 + (l - 1) * 6].name }}
</div>
</div>
<div>
报警信息:
<div class="info">{{ Info[i - 1 + 4 + (l - 1) * 6].msg }}</div>
</div>
<div>
报警编码:
<div class="info">{{ Info[i - 1 + 4 + (l - 1) * 6].code }}</div>
</div>
<div
class="blinking-warning"
v-if="Info[i - 1 + 4 + (l - 1) * 6].code > 30" />
</el-card>
</el-col>
</el-row>
<el-divider content-position="left">3-4巷道输送线报警信息</el-divider>
<el-row :gutter="20" v-for="l in 2" :key="l + 'line2'">
<el-col v-for="i in 6" :key="i + 'ssx2'" :span="4">
<el-card class="box-card" style="min-width: 240px">
<div slot="header" class="header-card">
输送线:
<div class="info">
{{ Info[i - 1 + 4 + (l + 1) * 6].name }}
</div>
</div>
<div>
报警信息:
<div class="info">{{ Info[i - 1 + 4 + (l + 1) * 6].msg }}</div>
</div>
<div>
报警编码:
<div class="info">{{ Info[i - 1 + 4 + (l + 1) * 6].code }}</div>
</div>
<div
class="blinking-warning"
v-if="Info[i - 1 + 4 + (l + 1) * 6].code > 30" />
</el-card>
</el-col>
</el-row>
<el-divider content-position="left">检尺门报警信息</el-divider>
<el-row :gutter="20">
<el-col v-for="i in 4" :key="i + 'jcm'" :span="6">
<el-card class="box-card" style="min-width: 240px">
<div slot="header" class="header-card">
检尺门:
<div class="info">
{{ Info[i - 1 + 4 + 24].name }}
</div>
</div>
<div>
报警信息:
<div class="info">
{{ Info[i - 1 + 4 + 24].msg }}
</div>
</div>
<div>
报警编码:
<div class="info">
{{ Info[i - 1 + 4 + 24].code }}
</div>
</div>
<div class="blinking-warning" v-if="Info[i - 1 + 4 + 24].code > 30" />
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
Info: [],
};
},
created() {
this.getInfo();
this.startFun();
},
methods: {
startFun() {
const timer = setInterval(() => {
this.getInfo();
}, 10000);
this.$once('hook:beforeDestroy', () => {
clearInterval(timer);
});
},
getInfo() {
axios
.post('http://172.22.22.190/wcs-njlm/business/wcsTask/isAlarm')
.then((res) => {
console.log('实时报警')
console.log(res.data)
this.Info = res.data
})
.catch((error) => {
console.error('There was an error!', error);
});
},
},
};
</script>
<style lang="scss" scoped>
.main-body {
::v-deep .el-card__header {
padding: 5px 20px;
min-height: 25px;
}
::v-deep .el-card__body {
padding: 10px 20px;
}
.box-card {
font-size: 15px;
position: relative;
.header-card {
font-size: 17px;
}
.info {
color: #409eff;
float: right;
}
}
}
.blinking-warning {
position: absolute;
top: 0;
left: 0;
background-color: #ff0000; /* 红色背景 */
animation: blinkWarning 1s infinite; /* 动画名称和持续时间 */
width: 100%;
height: 100%;
}
@keyframes blinkWarning {
0% {
opacity: 0.7; /* 开始状态:不透明 */
}
50% {
opacity: 0; /* 中间状态:完全透明 */
}
100% {
opacity: 0.7; /* 结束状态:不透明 */
}
}
</style>