Files
shanghaiganxiangtuzhuangwor…/pages/materialManagement/MaterialRequisition/MaterialRequisition.vue
2024-05-17 11:42:02 +08:00

495 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view>
<u-subsection :list="list" :current="current" @change="sectionChange" mode="subsection" fontSize="1.5rem"></u-subsection>
<view v-if="current == 0" :key="0">
<view>
<u-row>
<u-col span="6">
<u-button @click="timeshow = true">选择日期</u-button>
<u-datetime-picker :show="timeshow" v-model="queryParams.workerorder_time" mode="date" @confirm="confirm" @cancel="timeshow = false"></u-datetime-picker>
</u-col>
<u-col span="6">
<view style="font-size: 1.2rem">{{ queryParams.workerorder_time | formatDate }}</view>
</u-col>
</u-row>
<u-gap height="10" bgColor="#bbb"></u-gap>
<u-row>
<u-col span="2">任务编号</u-col>
<u-col span="2">任务站点</u-col>
<u-col span="3">任务详情</u-col>
<u-col span="2" offset="2">操作</u-col>
</u-row>
<view class="area">
<u-list>
<u-list-item v-for="(item, index) in taskList" :key="index">
<view class="cartoon-list-item">
<u-row>
<u-col span="2">{{ item.id }}</u-col>
<u-col span="1"><u-tag :text="item.agvPosition" size="mini" type="primary"></u-tag></u-col>
<u-col span="3" offset="1"><u-icon name="arrow-right-double" color="#2979ff" size="50" @click="detail_item(item.taskId)"></u-icon></u-col>
<u-col span="2"><u-button type="success" text="开始" size="mini" @click="confirm_startpoint(item.agvPosition)"></u-button></u-col>
<u-col span="2"><u-button type="error" text="上线" size="mini" @click="final_task(item.taskId)"></u-button></u-col>
</u-row>
</view>
</u-list-item>
</u-list>
</view>
<u-loading-page :loading="loading"></u-loading-page>
<u-modal :show="show_popup" :title="title" @confirm="show_popup = false">
<view style="width: 100%; height: 150px; overflow: hidden; overflow-y: scroll">
<u-row>
<u-col span="4">工单号</u-col>
<u-col span="4">毛坯号</u-col>
<u-col span="2">计划数</u-col>
<u-col span="2">已配数</u-col>
</u-row>
<u-list>
<u-list-item v-for="(item, index) in taskList_son" :key="index">
<view class="cartoon-list-item">
<u-row>
<u-col span="4">{{ item.workorder }}</u-col>
<u-col span="4">{{ item.blanknumber }}</u-col>
<u-col span="2">{{ item.previousNumber }}</u-col>
<u-col span="2">{{ item.previousNumbered }}</u-col>
</u-row>
</view>
</u-list-item>
</u-list>
</view>
</u-modal>
<view class="tip-box">
<!-- <view>
<u-row>
<u-col span="2">小车1</u-col>
<u-col span="1">
<view class="tip-icon-small"></view>
</u-col>
<u-col span="2" offset="1">小车2</u-col>
<u-col span="1">
<view class="tip-icon-small"></view>
</u-col>
</u-row>
</view> -->
<!-- <u-divider text="agv状态"></u-divider> -->
<u-row>
<u-col span="1">起点</u-col>
<u-col span="2">
<u--input border="surround" v-model="start_point" @change="get_fab_go_points"></u--input>
</u-col>
<u-col span="1" offset="0.5">终点</u-col>
<u-col span="3">
<uni-data-select v-model="end_point" :localdata="fab_go_points"></uni-data-select>
</u-col>
<u-col span="1" offset="0.5">agv</u-col>
<u-col span="3">
<uni-data-select v-model="agv_num" :localdata="agv_num_list"></uni-data-select>
</u-col>
</u-row>
<u-row>
<u-col span="3" offset="2">
<view class="tip-icon" @click="start_agv"><span>启动</span></view>
</u-col>
<u-col span="3" offset="3">
<view class="tip-icon2" @click="stop_agv"><span style="font-size: 0.5rem">紧急终止</span></view>
</u-col>
</u-row>
</view>
</view>
</view>
<view v-if="current == 1" :key="1">
<view class="tip-box">
<u-row :gutter="20">
<u-col span="1">
<u-text text="起点" size="32"></u-text>
</u-col>
<u-col span="3">
<uni-data-select v-model="start_point" :localdata="startOptions"></uni-data-select>
</u-col>
<u-col span="1">
<u-text text="终点" size="32"></u-text>
</u-col>
<u-col span="3">
<uni-data-select v-model="end_point" :localdata="endOptions"></uni-data-select>
</u-col>
<u-col span="1" offset="0.5">agv</u-col>
<u-col span="3">
<uni-data-select v-model="agv_num" :localdata="agv_num_list"></uni-data-select>
</u-col>
</u-row>
<u-gap height="20"></u-gap>
<u-row>
<u-col span="6" align="center">
<view class="tip-icon" @click="start_agv"><span>启动</span></view>
</u-col>
<u-col span="6" align="center">
<view class="tip-icon2" @click="stop_agv"><span style="font-size: 0.5rem">紧急终止</span></view>
</u-col>
</u-row>
</view>
</view>
<u-toast ref="uToast"></u-toast>
</view>
</template>
<script>
import {
getIngredientTask,
getIngredientTask_son,
getfabgopoints,
go_workshop,
emergency_stop_agv,
getStartOptions,
getEndOptions,
FinisBatchingTask
} from '@/api/materialManagement/MaterialRequsition.js';
import { debounce } from '@/utils/common.js';
export default {
data() {
return {
list: ['车间叫料', '空箱返程'],
current: 0,
queryParams: {
workerorder_time: Number(new Date()),
pageNum: 1,
pageSize: 10,
sort: undefined,
sortType: undefined,
totalNum: 0
},
timeshow: false,
taskList: [],
show_popup: false,
title: '',
taskList_son: [],
loading: false,
start_point: '',
end_point: '',
fab_go_points: [],
reqCode: '',
// 空车返程
startOptions: [],
endOptions: [],
agv_num_list: [
{ value: '1743', text: '1号' },
{ value: '1744', text: '2号' }
],
agv_num: ''
};
},
watch: {},
filters: {
formatDate: function (value) {
// 创建一个 Date 对象,并使用时间戳初始化
const date = new Date(value);
// 提取年、月、日信息
const year = date.getFullYear();
const month = date.getMonth() + 1; // 月份从 0 开始,所以要加 1
const day = date.getDate();
return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`;
}
},
mounted() {
this.getInitList();
this.getSelectOptions();
},
methods: {
// todo 分页查询
getInitList() {
let now = new Date(this.queryParams.workerorder_time);
var date = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0, 0); // 设置时间为当天的凌晨
// 获取上海时区的时间偏移量(以分钟为单位)
let offset = 8 * 60; // 上海时区为 UTC+8
// 计算上海时区的时间
let shanghaiTime = new Date(date.getTime() + offset * 60 * 1000);
let queryTask = {
...this.queryParams
};
queryTask.datetimespan = shanghaiTime;
delete queryTask.workerorder_time;
getIngredientTask(queryTask).then((res) => {
if (res.code == 200) {
res.data.forEach((item, index) => {
item.id = index;
});
this.taskList = res.data;
}
});
},
getSelectOptions() {
getStartOptions().then((res) => {
if (res.code === 200) {
let _list = [];
res.data.forEach((item) => {
_list.push({
value: item,
text: item
});
});
this.startOptions = _list;
}
});
getEndOptions().then((res) => {
if (res.code === 200) {
let _list = [];
res.data.forEach((item) => {
_list.push({
value: item,
text: item
});
});
this.endOptions = _list;
}
});
this.get_fab_go_points();
},
sectionChange(index) {
this.current = index;
this.start_point = '';
this.end_point = '';
},
// scrolltolower() {
// this.loadmore();
// },
// loadmore() {
// for (let i = 0; i < 30; i++) {
// this.indexList.push({
// url: this.urls[uni.$u.random(0, this.urls.length - 1)]
// });
// }
// },
//todo 选择时间
confirm() {
this.timeshow = false;
this.$nextTick(() => {
this.getInitList();
});
},
//todo 查看详细信息
detail_item(taskId) {
const query = {
taskId: taskId
};
this.loading = true;
getIngredientTask_son(query).then((res) => {
if (res.code == 200) {
this.loading = false;
this.taskList_son = res.data;
this.show_popup = true;
this.title = '任务号:' + taskId;
}
});
},
//todo 确认起点
confirm_startpoint(point) {
this.start_point = point;
},
//todo获取车间点
get_fab_go_points() {
getfabgopoints().then((res) => {
if (res.code == 200) {
let array = [];
res.data.forEach((item) => {
array.push({
value: item,
text: item
});
});
this.fab_go_points = array;
}
});
},
//todo 开始agv
start_agv() {
uni.$u.throttle(() => {
if (this.start_point == '' || this.end_point == '') {
this.$refs.uToast.show({
type: 'error',
message: '起点或者终点不能为空'
});
return;
}
const query = {
start_point: this.start_point,
end_point: this.end_point,
agvCode: this.agv_num
};
go_workshop(query).then((res) => {
if (res.code == 200) {
try {
let json = JSON.parse(res.data);
this.reqCode = json.data;
this.$refs.uToast.show({
type: 'success',
message: 'agv起动成功' + this.reqCode
});
} catch (e) {
this.$refs.uToast.show({
type: 'error',
message: 'agv起动失败' + this.reqCode
});
}
}
});
}, 5000);
},
//todo 紧急终止agv
stop_agv() {
if (this.reqCode === '' || this.reqCode === null || this.reqCode === undefined) {
this.$refs.uToast.show({
type: 'error',
message: '无任务编号'
});
return;
}
// const query = {
// reqCode: this.reqCode
// };
const query = {
reqCode: this.reqCode
};
emergency_stop_agv(query).then((res) => {
if (res.code == 200) {
this.$refs.uToast.show({
type: 'success',
message: '成功取消' + res.data
});
}
});
},
//todo 完成任务
final_task(taskid) {
uni.showModal({
title: '提示',
content: '是否确定完成任务?',
showCancel: true,
cancelText: '取消',
confirmText: '确定',
success: (res) => {
if (res.confirm) {
let query = {
start_point: this.start_point,
end_point: this.end_point,
taskId: taskid
};
FinisBatchingTask(query).then((res) => {
if (res.code == 200) {
this.getInitList();
}
});
}
}
});
}
}
};
</script>
<style scoped>
.area {
height: 350px;
background-color: white;
overflow: hidden;
/* 隐藏超出部分 */
overflow-y: scroll;
/* 添加垂直滚动条 */
}
.cartoon-list-item {
background-color: #c8d3db;
/* 设置蓝色背景 */
padding: 10px;
/* 设置内边距 */
border-radius: 10px;
/* 设置圆角边框 */
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
/* 添加阴影效果 */
margin-bottom: 10px;
/* 设置底部外边距 */
font-family: 'Comic Sans MS', cursive;
/* 设置卡通化字体 */
color: white;
/* 设置文字颜色为白色 */
}
.cartoon-list-item:hover {
transform: scale(1.05);
/* 鼠标悬停时放大 */
}
.tip-box {
width: 100%;
margin-top: 5px;
background-color: #fff;
/* 白色背景 */
padding: 20px;
border-radius: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
/* 添加阴影 */
}
.tip-icon-small {
width: 20px;
height: 20px;
background-color: #00ff00;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
font-size: 12px;
color: #fff;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
/* 添加阴影 */
}
.tip-icon {
margin-top: 5px;
width: 50px;
height: 50px;
background-color: #00ff00;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
font-size: 24px;
color: #fff;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
/* 添加阴影 */
}
.tip-icon2 {
margin-top: 5px;
width: 50px;
height: 50px;
background-color: red;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
font-size: 24px;
color: #fff;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
/* 添加阴影 */
}
.tip-text {
margin-top: 10px;
font-size: 16px;
color: #333;
}
</style>