This commit is contained in:
朱文强 2024-08-20 16:55:49 +08:00
parent 30ed83a8c2
commit 072757fada
19 changed files with 497 additions and 154 deletions

View File

@ -16,6 +16,22 @@ export function inventoryOverview(id) {
method: 'get'
})
}
// 熟化时间提醒
export function rollTimeRemind(day) {
return request({
url: '/asrs/warehouse-storehouse-goods-specification/xday?xDays=' + day,
method: 'get'
})
}
// 导出熟化时间提醒 Excel
export function exportgetoverfinishtimeExcel(day) {
return request({
url: '/asrs/warehouse-storehouse-goods-specification/exportgetoverfinishtime?xDays=' + day,
method: 'get',
responseType: 'blob'
})
}
// 更新立体仓库货物规格关联
export function updateWarehouseStorehouseGoodsSpecification(data) {
return request({

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2024-04-16 15:08:37
* @LastEditors: zwq
* @LastEditTime: 2024-05-28 14:30:33
* @LastEditTime: 2024-07-15 13:42:39
* @Description:
*/
import request from '@/utils/request'
@ -131,6 +131,7 @@ export function mesoutsync(data) {
return request({
url: '/asrs/delivery-history/mesoutsync',
method: 'post',
data: data
data: data,
timeout: 100000,
})
}

View File

@ -1,83 +1,84 @@
<!--
* @Author: zwq
* @Date: 2023-08-17 15:10:53
* @LastEditors: zwq
* @LastEditTime: 2024-08-20 15:30:57
* @Description:
-->
<template>
<div>
<el-popover placement="bottom" width="600" trigger="click">
<!-- icon 展示 -->
<el-badge slot="reference" :is-dot="unreadCount > 0" type="danger">
<svg-icon icon-class="message" @click="getList"/>
</el-badge>
<!-- 弹出列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column width="120" property="templateNickname" label="发送人" />
<el-table-column width="180" property="createTime" label="发送时间">
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="类型" align="center" prop="templateType" width="100">
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_NOTIFY_TEMPLATE_TYPE" :value="scope.row.templateType" />
</template>
</el-table-column>
<el-table-column property="templateContent" label="内容" />
</el-table>
<!-- 更多 -->
<div style="text-align: right; margin-top: 10px">
<el-button type="primary" size="mini" @click="goMyList">查看全部</el-button>
</div>
</el-popover>
</div>
<div title="膜卷熟化时间提醒" >
<svg-icon icon-class="message" @click="refreshPage" />
<!-- icon 展示 -->
<el-badge :value="unreadCount" type="danger" />
</div>
</template>
<script>
import {getUnreadNotifyMessageCount, getUnreadNotifyMessageList} from "@/api/system/notify/message";
import { listData } from '@/api/system/dict/data';
import { rollTimeRemind } from '@/api/asrs/warehouseStorehouseGoodsSpecification';
export default {
name: 'NotifyMessage',
data() {
return {
//
loading: false,
//
list: [],
// ,
unreadCount: 0,
}
},
created() {
//
this.getUnreadCount()
//
setInterval(() => {
this.getUnreadCount()
},1000 * 60 * 2)
},
methods: {
getList: function() {
this.loading = true;
getUnreadNotifyMessageList().then(response => {
this.list = response.data;
this.loading = false;
// unreadCount 0
this.unreadCount = 0
});
},
getUnreadCount: function() {
getUnreadNotifyMessageCount().then(response => {
this.unreadCount = response.data;
})
},
goMyList: function() {
this.$router.push({
name: 'MyNotifyMessage'
});
}
}
}
name: 'NotifyMessage',
data() {
return {
//
loading: false,
//
list: [],
// ,
unreadCount: 0,
xDays: '',
};
},
mounted() {
this.setTimer();
},
created() {
//
this.refreshPage();
//
setInterval(() => {
this.refreshPage();
}, 1000 * 60 * 60);
},
methods: {
setTimer() {
//
const now = new Date();
// 12
const timeToMidnight =
23 * 60 * 60 * 1000 +
59 * 60 * 1000 +
59 * 1000 -
(now.getTime() % (24 * 60 * 60 * 1000));
//
this.timer = setTimeout(this.refreshPage, timeToMidnight);
},
refreshPage() {
this.unreadCount = 0;
const queryParams = {
pageNo: 1,
pageSize: 99,
dictType: 'rollTimeRemind',
};
listData(queryParams).then((response) => {
if (response.data.list.length > 0) {
this.xDays = response.data.list[0].value;
rollTimeRemind(this.xDays).then((response) => {
this.unreadCount = response.length;
console.log(this.unreadCount);
});
}
});
//
this.setTimer();
},
},
};
</script>
<style>
.el-badge__content.is-fixed {
top: 10px; /* 保证徽章的位置 */
top: 10px; /* 保证徽章的位置 */
}
</style>

View File

@ -10,7 +10,7 @@
<!-- <search id="header-search" class="right-menu-item" /> -->
<!-- 站内信 -->
<!-- <notify-message class="right-menu-item hover-effect" /> -->
<notify-message class="right-menu-item hover-effect" />
<!-- <screenfull id="screenfull" class="right-menu-item hover-effect" /> -->

View File

@ -1,3 +1,10 @@
/*
* @Author: zwq
* @Date: 2023-10-13 16:08:51
* @LastEditors: zwq
* @LastEditTime: 2024-05-31 14:01:29
* @Description:
*/
import router from './router'
import store from './store'
import { Message } from 'element-ui'

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-17 15:10:53
* @LastEditors: zwq
* @LastEditTime: 2023-10-08 15:33:03
* @LastEditTime: 2024-08-19 10:29:41
* @Description:
*/
import Vue from 'vue'
@ -83,6 +83,18 @@ export const constantRoutes = [
}
]
},
{
path: '/dict',
component: Layout,
hidden: true,
children: [{
path: 'type/data/:dictId(\\d+)',
component: (resolve) => require(['@/views/system/dict/data'], resolve),
name: 'SystemDictData',
meta: { title: '字典数据', icon: '', activeMenu: '/system/dict' }
}
]
},
{
path: '/user',
component: Layout,

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zwq
* @LastEditTime: 2024-06-03 16:50:47
* @LastEditTime: 2024-08-19 09:42:47
* @Description:
-->
<template>
@ -53,9 +53,9 @@
<el-radio-group
v-model="dataForm.deliveryType"
@input="setNeedTrayNumber">
<el-radio :label="1">单托盘出库</el-radio>
<el-radio :label="2">多托盘出库</el-radio>
<el-radio :label="3">点对点出库</el-radio>
<el-radio :label="1">单托盘出库(空托盘)</el-radio>
<el-radio :label="2">多托盘出库(自动包装线)</el-radio>
<el-radio :label="3">点对点出库(工单出库)</el-radio>
</el-radio-group>
</el-form-item>
</el-col>

View File

@ -30,7 +30,7 @@
@cancel="handleCancel"
@confirm="handleConfirm"
:before-close="handleCancel"
width="50%">
width="70%">
<add-or-update ref="addOrUpdate" @refreshDataList="successSubmit" />
</base-dialog>
</div>

View File

@ -71,13 +71,13 @@
</el-table-column>
<el-table-column label="操作" width="90">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
@click="handleClick({ data: scope.row, type: 'mes' })"
v-hasPermi="['asrs:deliveryHis:mes']">
同步给mes
</el-button>
<el-button
size="mini"
type="text"
@click="handleClick({ data: scope.row, type: 'mes' })"
v-hasPermi="['asrs:deliveryHis:mes']">
同步给mes
</el-button>
</template>
</el-table-column>
</el-table>
@ -221,7 +221,7 @@ export default {
color: 'primary',
},
{
type: this.$auth.hasPermi('asrs:deliveryHis:export') ? 'button' : '',
type: this.$auth.hasPermi('asrs:deliveryHis:export') ? 'button' : '',
btnName: '导出',
name: 'export',
color: 'primary',
@ -279,7 +279,10 @@ export default {
}
},
otherMethods(val) {
mesoutsync({deliveryCode:val.data.deliveryCode}).then(({ data }) => {
mesoutsync({
deliveryCode: val.data.deliveryCode,
trayCode: val.data.trayCode,
}).then(({ data }) => {
this.$message({
message: '操作成功',
type: 'success',

View File

@ -133,6 +133,18 @@ const mainTaskType = [
name: '平库移库',
id: 10,
},
{
name: '盘库出库',
id: 11,
},
{
name: '盘库入库',
id: 12,
},
{
name: '盘库出库+移库',
id: 13,
},
];
const mainTaskState = [
{

View File

@ -133,6 +133,18 @@ const mainTaskType = [
name: '平库移库',
id: 10,
},
{
name: '盘库出库',
id: 11,
},
{
name: '盘库入库',
id: 12,
},
{
name: '盘库出库+移库',
id: 13,
},
];
const mainTaskState = [
{

View File

@ -132,6 +132,18 @@ const mainTaskType = [
name: '平库移库',
id: 10,
},
{
name: '盘库出库',
id: 11,
},
{
name: '盘库入库',
id: 12,
},
{
name: '盘库出库+移库',
id: 13,
},
];
const mainTaskState = [
{

View File

@ -2,7 +2,7 @@
/*
* @Date: 2020-12-29 16:49:28
* @LastEditors: zwq
* @LastEditTime: 2024-06-05 11:00:34
* @LastEditTime: 2024-06-21 15:00:05
* @FilePath: \basic-admin\src\filters\basicData\index.js
* @Description:
*/
@ -41,6 +41,9 @@ const table = {
8: '不带agv出库+移库',
9: '入库+12臂空托盘出库',
10: '平库移库',
11: '盘库出库',
12: '盘库入库',
13: '盘库出库+移库',
},
mainTaskState: {
0: '开始',
@ -52,6 +55,7 @@ const table = {
6: '已发送传输线',
7: '传输线运行中',
8: '暂时无空托盘',
9: '已处理',
},
taskSource: {
1: 'mes下发',

View File

@ -0,0 +1,165 @@
<!--
* @Author: zwq
* @Date: 2024-02-27 14:43:14
* @LastEditors: zwq
* @LastEditTime: 2024-08-20 16:17:36
* @Description:
-->
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<search-bar
:formConfigs="formConfig"
ref="searchBarForm"
@headBtnClick="buttonClick" />
<div v-if="containerCodeArr.length > 0">
<el-descriptions title="膜卷熟化时间信息" size="mini" border>
<el-descriptions-item label="当前设置天数">
{{ this.xDays.value }}
</el-descriptions-item>
<el-descriptions-item label="提醒数量">
{{ containerCodeArr.length }}
</el-descriptions-item>
<el-descriptions-item label="每页数量">
<el-input-number
v-model="pageSize"
:step="50"
:min="100"
size="small"
step-strictly />
</el-descriptions-item>
</el-descriptions>
<el-divider content-position="left">
以下每页上限 {{ pageSize }} 条数据
</el-divider>
<el-tabs v-model="activeName">
<el-tab-pane
v-for="i in Math.ceil(containerCodeArr.length / pageSize)"
:key="i"
:label="'第' + i + '页'"
:name="i + '页'">
<el-tag
style="margin: 5px; border: 1px solid #67c23a"
v-for="(item, index) in containerCodeArr.slice(
(i - 1) * pageSize,
i * pageSize
)"
:key="index"
effect="plain"
size="small">
{{ item.containerCode }}
</el-tag>
</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<script>
import { listData, updateData } from '@/api/system/dict/data';
import {
rollTimeRemind,
exportgetoverfinishtimeExcel,
} from '@/api/asrs/warehouseStorehouseGoodsSpecification';
export default {
data() {
return {
warehouseId: '1696803324030865409',
xDays: {},
containerCodeArr: [],
activeName: '1页',
pageSize: 200,
formConfig: [
{
type: 'input',
label: '设置天数',
placeholder: '设置天数',
param: 'day',
},
{
type: 'button',
btnName: '设置',
name: 'search',
color: 'primary',
},
{
type: 'button',
btnName: '导出',
name: 'export',
color: 'primary',
plain: true,
},
],
};
},
components: {},
created() {
this.init();
const queryParams = {
pageNo: 1,
pageSize: 99,
dictType: 'rollTimeRemind',
};
listData(queryParams).then((response) => {
this.formConfig[0].selectOptions = response.data.list;
if (response.data.list.length > 0) {
this.formConfig[0].placeholder = response.data.list[0].value;
this.xDays = response.data.list[0];
this.setDay();
}
});
},
methods: {
init() {},
setDay() {
this.containerCodeArr = [];
rollTimeRemind(this.xDays.value).then((response) => {
this.containerCodeArr = response;
});
},
buttonClick(val) {
switch (val.btnName) {
case 'search':
const regex = /^[1-9]\d*$/;
if (regex.test(val.day)) {
this.xDays.value = val.day;
this.setDay();
this.setDict(); //
} else {
this.$message({
message: '请输入正整数天数!',
type: 'warning',
});
}
break;
case 'export':
this.handleExport('膜卷熟化时间信息',val.day);
break;
default:
console.log(val);
}
},
/** 修改字典天数设置 */
setDict: function () {
updateData(this.xDays).then((response) => {});
},
/** 导出按钮操作 */
handleExport(name,day) {
//
this.$modal
.confirm('是否确认导出膜卷熟化时间信息')
.then(() => {
this.exportLoading = true;
return exportgetoverfinishtimeExcel(day);
})
.then((response) => {
this.$download.excel(response, name + '.xls');
this.exportLoading = false;
})
.catch(() => {});
},
},
};
</script>
<style lang="scss" scoped></style>

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-22 15:01:55
* @LastEditors: zwq
* @LastEditTime: 2024-06-07 15:50:38
* @LastEditTime: 2024-06-21 15:18:01
* @Description:
-->
<template>
@ -75,7 +75,12 @@
:height="400"
:table-data="productAttributeList"></base-table>
<!-- 表格底部加号 -->
<el-button class="checkButton" type="primary" @click="check" :loading="isloading">
<el-button
v-if="!isDetail"
class="checkButton"
type="primary"
@click="check"
:loading="isloading">
检查
</el-button>
</div>
@ -84,7 +89,7 @@
<div style="position: absolute; bottom: 24px; right: 24px">
<el-button style="margin-right: 10px" @click="goback()">返回</el-button>
<span>
<span v-if="!isDetail">
<el-button
style="margin-right: 10px"
type="success"
@ -107,7 +112,7 @@ import {
makeWarehouseIn,
checkout,
} from '@/api/asrs/warehousePklb';
import inputArea from '../mixins/inputArea';
import inputArea from './inputArea';
import SmallTitle from './SmallTitle';
const tableProps = [
@ -148,15 +153,18 @@ export default {
asrsLineEdgeLibraryName: null,
},
dataRule: {},
isDetail: false,
};
},
methods: {
initData() {
this.productAttributeList.splice(0);
},
init(data) {
init(data, isDetail) {
this.isloading = false;
this.dataForm.warehouseStorehouseStorageId = data.warehouseStorehouseStorageId;
this.isDetail = isDetail;
this.dataForm.warehouseStorehouseStorageId =
data.warehouseStorehouseStorageId;
this.listQuery = {
agvEndPoint: data.agvEndPoint,
barCode: data.barCode,
@ -175,10 +183,16 @@ export default {
this.dataForm.warehouseStorehouseStorageId,
};
getWarehousePklbDetailPage(params).then((response) => {
if (response.data.list.length>0) {
if (response.data.list.length > 0) {
this.dataForm = response.data.list[0];
}
this.productAttributeList = response.data.list;
this.productAttributeList.forEach((item) => {
item.isDisabled = this.isDetail;
if (this.isDetail) {
item.inventoryInput = item.rollCodeCheck;
}
});
});
});
},
@ -214,18 +228,20 @@ export default {
}
});
if (cancel) return;
const data = {
warehouseStorehouseStorageId:this.dataForm.warehouseStorehouseStorageId,
userInputCheckList:strings
}
getWarehousePklbDetailCheck(data).then((response) => {
this.$modal.msgWarning(response);
this.isloading = false;
})
.catch((error) => {
console.error('There was an error!', error);
this.isloading = false;
});
const data = {
warehouseStorehouseStorageId:
this.dataForm.warehouseStorehouseStorageId,
userInputCheckList: strings,
};
getWarehousePklbDetailCheck(data)
.then((response) => {
this.$modal.msgWarning(response);
this.isloading = false;
})
.catch((error) => {
console.error('There was an error!', error);
this.isloading = false;
});
},
// mes
checkout() {
@ -234,16 +250,17 @@ export default {
this.dataForm.warehouseStorehouseStorageId,
};
this.isloading = true;
checkout(data).then((response) => {
this.$modal.msgSuccess('同步mes出库成功');
this.visible = false;
this.isloading = false;
this.$emit('refreshDataList');
})
.catch((error) => {
console.error('There was an error!', error);
this.isloading = false;
});
checkout(data)
.then((response) => {
this.$modal.msgSuccess('同步mes出库成功');
this.visible = false;
this.isloading = false;
this.$emit('refreshDataList');
})
.catch((error) => {
console.error('There was an error!', error);
this.isloading = false;
});
},
//
makeIn() {
@ -252,16 +269,17 @@ export default {
makeoutlist: this.productAttributeList,
};
this.isloading = true;
makeWarehouseIn(data).then((response) => {
this.$modal.msgSuccess('入库成功');
this.visible = false;
this.isloading = false;
this.$emit('refreshDataList');
})
.catch((error) => {
console.error('There was an error!', error);
this.isloading = false;
});
makeWarehouseIn(data)
.then((response) => {
this.$modal.msgSuccess('入库成功');
this.visible = false;
this.isloading = false;
this.$emit('refreshDataList');
})
.catch((error) => {
console.error('There was an error!', error);
this.isloading = false;
});
},
goback() {
this.$emit('refreshDataList');

View File

@ -14,7 +14,7 @@
<method-btn
v-if="tableBtn.length"
slot="handleBtn"
:width="80"
:width="90"
label="操作"
:method-list="tableBtn"
@clickBtn="handleClick" />
@ -180,6 +180,10 @@ const mainTaskState = [
name: '暂时无空托盘',
id: 8,
},
{
name: '已处理',
id: 9,
},
];
export default {
mixins: [basicPage],
@ -209,6 +213,20 @@ export default {
],
},
},
{
type: 'detail',
btnName: '详情',
showParam: {
type: '&',
data: [
{
type: 'equal',
name: 'mainTaskState',
value: 9,
},
],
},
},
],
tableData: [],
formConfig: [
@ -319,11 +337,19 @@ export default {
}
},
otherMethods(val) {
this.addOrUpdateVisible = true;
this.addOrEditTitle = '盘货明细表';
this.$nextTick(() => {
this.$refs.addOrUpdate.init(val.data);
});
if (val.type === 'check') {
this.addOrUpdateVisible = true;
this.addOrEditTitle = '盘货明细表';
this.$nextTick(() => {
this.$refs.addOrUpdate.init(val.data, false);
});
} else if (val.type === 'detail') {
this.addOrUpdateVisible = true;
this.addOrEditTitle = '盘货明细表';
this.$nextTick(() => {
this.$refs.addOrUpdate.init(val.data, true);
});
}
},
},
};

View File

@ -0,0 +1,55 @@
<!--
* @Author: zwq
* @Date: 2023-09-22 15:36:40
* @LastEditors: zwq
* @LastEditTime: 2024-06-21 15:07:10
* @Description:
-->
<template>
<div class="tableInner">
<el-input
v-model="list[itemProp]"
:id="'inputFocus'+injectData._pageIndex"
:disabled="injectData.isDisabled"
@blur="changeInput"
@keyup.enter.native="nextInput" />
</div>
</template>
<script>
export default {
name: 'InputArea',
props: {
injectData: {
type: Object,
default: () => ({}),
},
itemProp: {
type: String,
},
},
data() {
return {
list: this.injectData,
};
},
methods: {
changeInput() {
this.list.sType = 1;
this.$emit('emitData', this.list, 1);
},
nextInput(){
this.list.sType = 3;
this.$emit('emitData', this.list, 3);
}
},
};
</script>
<style scoped>
.tableInner >>> .el-input__inner {
color: #409eff;
border: 1px rgb(232, 231, 231) solid;
padding: 0;
text-align: center;
height: 30px;
}
</style>

View File

@ -26,6 +26,7 @@
<el-table-column
prop="warehouseStorehouseCode"
label="库位编码"></el-table-column>
<el-table-column prop="workOrderCode" label="工单编码" />
<el-table-column prop="trayCode" label="托盘编码"></el-table-column>
<el-table-column
prop="process"

View File

@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-21 14:26:23
* @LastEditors: zwq
* @LastEditTime: 2024-02-22 14:23:55
* @LastEditTime: 2024-08-19 09:38:57
* @Description:
-->
<template>
@ -76,29 +76,28 @@ export default {
exportURL: exportFinishProductWarehouseExcel,
},
listQuery: {
wareLayer: 1,
total: 0,
},
wareData: [],
bgColor: ['#d3d3d3', '#16DC09'], //
formConfig: [
{
type: 'select',
label: '选择层',
selectOptions: [
{ id: 1, name: '1' },
{ id: 2, name: '2' },
{ id: 3, name: '3' },
{ id: 4, name: '4' },
],
param: 'value',
filterable: true,
defaultSelect: 1,
clearable: false,
},
// {
// type: 'select',
// label: '',
// selectOptions: [
// { id: 1, name: '1' },
// { id: 2, name: '2' },
// { id: 3, name: '3' },
// { id: 4, name: '4' },
// ],
// param: 'value',
// filterable: true,
// defaultSelect: 1,
// clearable: false,
// },
{
type: 'button',
btnName: '搜索',
btnName: '刷新',
name: 'search',
color: 'primary',
},
@ -128,7 +127,6 @@ export default {
buttonClick(val) {
switch (val.btnName) {
case 'search':
this.listQuery.wareLayer = val.value;
this.getDataList();
break;
case 'export':