les功能提交

This commit is contained in:
2025-12-19 16:40:25 +08:00
parent 54ec472bd4
commit 23da00a8f0
14 changed files with 814 additions and 165 deletions

View File

@@ -0,0 +1,26 @@
import request from '@/utils/request'
/**
* 备料绑定
* @param {Object} data
* @return
*/
export function bind(data) {
return request({
url: '/les/location/bind',
method: 'put',
data: data,
})
}
/**
* 备料解绑
* @param {code}
* @return
*/
export function unBind(code) {
return request({
url: '/les/location/unbind/' + code,
method: 'put',
})
}

View File

@@ -0,0 +1,26 @@
import request from '@/utils/request'
/**
* 新增任务
* @param {Object} data
* @return
*/
export function addDeliveryTask(data) {
return request({
url: '/les/deliveryTask',
method: 'post',
data: data,
})
}
/**
*
* @param {code}
* @return
*/
export function findPreparation(code) {
return request({
url: '/les/location/findPreparation/' + code,
method: 'get',
})
}

View File

@@ -0,0 +1,24 @@
import request from '@/utils/request'
export function listData() {
return request({
url: '/les/deliveryTask/list',
method: 'get'
})
}
export function delivery(data) {
return request({
url: '/les/deliveryTask/handleDelivery',
method: 'post',
data: data
})
}
export function cancel(data) {
return request({
url: '/les/deliveryTask/handleCancel',
method: 'post',
data: data
})
}

View File

@@ -0,0 +1,21 @@
import request from '@/utils/request'
/**
* 新增任务
* @param {Object} data
* @return
*/
export function addDeliveryTask(data) {
return request({
url: '/les/deliveryTask',
method: 'post',
data: data,
})
}
export function getLastPalletRecyclingDest() {
return request({
url: '/les/deliveryTask/lastPalletRecyclingDest',
method: 'get',
})
}

View File

@@ -2,8 +2,8 @@
"name": "MES",
"appid": "__UNI__66F7FE2",
"description": "",
"versionName" : "3.4.1",
"versionCode" : 341,
"versionName": "3.4.2",
"versionCode": 342,
"transformPx": false,
"sassImplementationName": "node-sass",
"app-plus": {

View File

@@ -110,8 +110,7 @@
}
}, {
"path": "pages/mes/jobReport/start",
"style" :
{
"style": {
"navigationBarTitleText": "工序开工"
}
}, {
@@ -834,6 +833,36 @@
"style": {
"navigationBarTitleText": "采购直接入库"
}
},
{
"path": "pages/les/returnPallet",
"style": {
"navigationBarTitleText": "托盘返空"
}
},
{
"path": "pages/les/bindMaterial",
"style": {
"navigationBarTitleText": "备料绑定"
}
},
{
"path": "pages/les/callMaterial",
"style": {
"navigationBarTitleText": "生产呼料"
}
},
{
"path": "pages/les/chooseTask",
"style": {
"navigationBarTitleText": "选择任务"
}
},
{
"path": "pages/les/deliveryMaterial",
"style": {
"navigationBarTitleText": "生产配送"
}
}
],
"tabBar": {

126
pages/les/bindMaterial.vue Normal file
View File

@@ -0,0 +1,126 @@
<template>
<view>
<uni-forms ref="form" :modelValue="formData" :rules="rules">
<uni-forms-item label="货位号:" name="locationCode">
<uni-easyinput suffixIcon="scan" @iconClick="scanLocationCodeUuid" type="text"
v-model="formData.locationCode" />
</uni-forms-item>
<uni-forms-item label="批次号:" name="batchNo">
<uni-easyinput suffixIcon="scan" @iconClick="scanBatchNoUuid" type="text" v-model="formData.batchNo" />
</uni-forms-item>
</uni-forms>
<uni-row :gutter="10">
<uni-col :span="12">
<u-button type="success" @click="handleBind">绑定</u-button>
</uni-col>
<uni-col :span="12">
<u-button type="primary" @click="handleUnBind">解绑</u-button>
</uni-col>
</uni-row>
</view>
</template>
<script>
import { bind, unBind } from "@/api/les/lesMaterialBind.js";
export default {
data() {
return {
formData: {},
/** 校验规则 */
rules: {
locationCode: {
rules: [{
required: true,
errorMessage: '请输入货位号',
}, ]
},
batchNo: {
rules: [{
required: true,
errorMessage: '请选择批次号',
}, ]
},
},
}
},
methods: {
scanLocationCodeUuid() {
const _this = this;
uni.scanCode({
scanType: ['qrCode', 'barCode'],
success: function(res) {
_this.formData.locationCode = res.result;
}
});
},
scanBatchNoUuid() {
const _this = this;
uni.scanCode({
scanType: ['qrCode', 'barCode'],
success: function(res) {
_this.formData.batchNo = res.result;
}
});
},
handleBind() {
const _this = this;
this.$refs.form.validate().then(res => {
uni.showModal({
title: '提示',
content: '您确定绑定该数据吗?',
success: function(res) {
if (res.confirm) {
if (_this.formData.locationCode && _this.formData.batchNo) {
_this.$modal.loading('绑定中')
bind(_this.formData).then(res => {
_this.$modal.closeLoading();
_this.$modal.msgSuccess("绑定成功!");
setTimeout(() => {
this.$tab.switchTab("/pages/work/index");
}, 500);
})
} else {
_this.$modal.msg("请将信息补充完整")
}
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
})
},
handleUnBind() {
const _this = this;
this.$refs.form.validate().then(res => {
uni.showModal({
title: '提示',
content: '您确定解绑该数据吗?',
success: function(res) {
if (res.confirm) {
if (_this.formData.locationCode) {
_this.$modal.loading('解绑中')
unBind(_this.formData.locationCode).then(res => {
_this.$modal.closeLoading();
_this.$modal.msgSuccess("解绑成功!")
setTimeout(() => {
this.$tab.switchTab("/pages/work/index");
}, 500);
})
} else {
_this.$modal.msg("请将信息补充完整")
}
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
})
},
// reset() {
// this.formData = {};
// }
}
}
</script>

View File

@@ -0,0 +1,96 @@
<template>
<view>
<uni-forms ref="form" :modelValue="formData" :rules="rules">
<uni-forms-item label="发货点位:" :labelWidth='90' name="srcLocationCode">
<uni-easyinput type="text" v-model="formData.srcLocationCode" />
</uni-forms-item>
<uni-forms-item label="目的货位:" :labelWidth='90' name="destLocationCode">
<uni-easyinput suffixIcon="scan" @iconClick="scanDestLocationUuid" type="text" @blur="searchSrcLocation"
v-model="formData.destLocationCode" />
</uni-forms-item>
</uni-forms>
<uni-row :gutter="10">
<uni-col>
<u-button type="success" @click="handleCall">呼叫</u-button>
</uni-col>
</uni-row>
</view>
</template>
<script>
import { addDeliveryTask, findPreparation } from "@/api/les/lesMaterialCall.js";
import LesDeliveryTaskType from "@/utils/enums/LesDeliveryTaskType";
export default {
data() {
return {
formData: {
taskType: LesDeliveryTaskType.PRODUCTION
},
/** 校验规则 */
rules: {
srcLocationCode: {
rules: [{
required: true,
errorMessage: '请输入发货点位',
}, ]
},
destLocationCode: {
rules: [{
required: true,
errorMessage: '请选择目的货位',
}, ]
},
},
}
},
methods: {
searchSrcLocation() {
const _this = this;
if (_this.formData.destLocationCode == '') {
return;
}
findPreparation(_this.formData.destLocationCode).then(res => {
if (res.code == 200) {
this.$set(this.formData, "srcLocationCode", res.data);
} else {
this.$modal.showToast("未找到对应发货点位")
}
})
},
scanDestLocationUuid() {
const _this = this;
uni.scanCode({
scanType: ['qrCode', 'barCode'],
success: function(res) {
_this.formData.destLocationCode = res.result;
_this.searchSrcLocation();
}
});
},
handleCall() {
const _this = this;
this.$refs.form.validate().then(res => {
if (_this.formData.srcLocationCode && _this.formData.destLocationCode) {
_this.$modal.loading('提交中')
addDeliveryTask(_this.formData).then(res => {
_this.$modal.closeLoading();
_this.$modal.msgSuccess("提交成功!");
setTimeout(() => {
_this.$tab.switchTab("/pages/work/index");
}, 500);
})
} else {
_this.$modal.msg("请将信息补充完整")
}
})
},
// reset() {
// const _this = this;
// this.formData.srcLocationCode = '';
// this.formData.destLocationCode = '';
// }
}
}
</script>

49
pages/les/chooseTask.vue Normal file
View File

@@ -0,0 +1,49 @@
<template>
<view class="cu-card article ">
<view class="cu-item shadow borderBottom" v-for="(item,index) in list" :key="index">
<view class="title">
<view class="text-cut">任务类型 : {{item.taskType}}</view>
<view>
<button type="primary" size="mini" @click="choose(item)" style="float: right;">选择任务</button>
</view>
</view>
<view class="content">
<view class="desc">
<view class="text-content">
<view>发货点位 : {{item.srcLocationCode}}</view>
<view>目的点位 : {{item.destLocationCode}}</view>
<view>物料编码 : {{item.material.materialCode}}</view>
<view>物料名称 : {{item.material.materialName}}</view>
<view>呼叫时间 : {{item.callDatetime}}</view>
<view>状态 : {{item.taskStatus}}</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { listData } from "@/api/les/lesMaterialDelivery.js"
export default {
data() {
return {
list: {},
}
},
created() {
this.getList();
},
methods: {
getList() {
listData().then(res => {
this.list = res.rows;
})
},
choose(data) {
this.$tab.navigateTo("/pages/les/deliveryMaterial?formData=" + JSON.stringify(data));
}
}
}
</script>

View File

@@ -0,0 +1,115 @@
<template>
<view>
<uni-forms ref="form" :modelValue="formData" :rules="rules">
<uni-forms-item label="发货点位:" :labelWidth='100' name="srcLocationCode">
<uni-easyinput type="text" v-model="formData.srcLocationCode" />
</uni-forms-item>
<uni-forms-item label="目的点位:" :labelWidth='100' name="destLocationCode">
<uni-easyinput type="text" v-model="formData.destLocationCode" />
</uni-forms-item>
<uni-forms-item label="机器人类型:" :labelWidth='100' name="RobotType">
<uni-data-select placeholder="请选择机器类型" v-model="formData.RobotType" :localdata="RobotData" />
</uni-forms-item>
<uni-forms-item label="容器类型:" :labelWidth='100' name="ctnrTyp" v-if="formData.RobotType == 2">
<uni-easyinput type="text" v-model="formData.ctnrTyp" />
</uni-forms-item>
</uni-forms>
<uni-row :gutter="10">
<uni-col :span="12">
<u-button type="success" @click="handleDelivery">配送</u-button>
</uni-col>
<uni-col :span="12">
<u-button type="primary" @click="handleCancle">取消</u-button>
</uni-col>
</uni-row>
</view>
</template>
<script>
import RobotType from "@/utils/enums/RobotType";
import { delivery, cancel } from "@/api/les/lesMaterialDelivery.js"
export default {
onLoad(option) {
this.formData = JSON.parse(option.formData);
},
data() {
return {
formData: {},
RobotData: [
{ value: RobotType.LATENT_MOBILE_ROBOT, text: "潜伏车" },
{ value: RobotType.LATENT_FORKLIFT_AGV, text: "潜伏叉车" },
],
/** 校验规则 */
rules: {
srcLocationCode: {
rules: [{
required: true,
errorMessage: '请输入发货点位',
}, ]
},
destLocationCode: {
rules: [{
required: true,
errorMessage: '请输入目的货位',
}, ]
},
RobotType: {
rules: [{
required: true,
errorMessage: '请选择机器人类型',
}, ]
},
},
}
},
methods: {
handleDelivery() {
const _this = this;
this.$refs.form.validate().then(res => {
if (_this.formData.srcLocationCode && _this.formData.destLocationCode) {
_this.$modal.loading('提交中')
delivery(_this.formData).then(res => {
_this.$modal.closeLoading();
_this.$modal.msgSuccess("提交成功!");
_this.reset();
setTimeout(() => {
this.$tab.switchTab("/pages/les/chooseTask");
}, 500);
})
} else {
_this.$modal.msg("请将信息补充完整")
}
})
},
handleCancle() {
const _this = this;
const arr = [];
arr.push(_this.formData.id);
this.$refs.form.validate().then(res => {
uni.showModal({
title: '提示',
content: '您确定取消该任务吗?',
success: function(res) {
if (res.confirm) {
_this.$modal.loading('取消中')
cancel(arr).then(res => {
_this.$modal.closeLoading();
_this.$modal.msgSuccess("取消成功!");
_this.reset();
setTimeout(() => {
this.$tab.switchTab("/pages/les/chooseTask");
}, 500);
})
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
})
},
// reset() {
// this.formData = {};
// }
}
}
</script>

View File

@@ -0,0 +1,88 @@
<template>
<view>
<uni-forms ref="form" :modelValue="formData" :rules="rules">
<uni-forms-item label="发货点位:" :labelWidth='90' name="srcLocationCode">
<uni-easyinput type="text" suffixIcon="scan" @iconClick="scanSrcLocationUuid"
v-model="formData.srcLocationCode" />
</uni-forms-item>
<uni-forms-item label="目的点位:" :labelWidth='90' name="destLocationCode">
<uni-easyinput type="text" v-model="formData.destLocationCode" />
</uni-forms-item>
</uni-forms>
<uni-row :gutter="10">
<uni-col>
<u-button type="success" @click="handleCall">呼叫</u-button>
</uni-col>
</uni-row>
</view>
</template>
<script>
import { addDeliveryTask, getLastPalletRecyclingDest } from "@/api/les/lesPalletReturn.js";
import LesDeliveryTaskType from "@/utils/enums/LesDeliveryTaskType";
export default {
data() {
return {
formData: {
taskType: LesDeliveryTaskType.PALLET_RECYCLING
},
/** 校验规则 */
rules: {
srcLocationCode: {
rules: [{
required: true,
errorMessage: '请选择发货点位',
}, ]
},
destLocationCode: {
rules: [{
required: true,
errorMessage: '请选择目的货位',
}, ]
},
},
}
},
created() {
getLastPalletRecyclingDest().then(res => {
if (res.code == 200) {
this.$set(this.formData, "destLocationCode", res.data);
}
})
},
methods: {
scanSrcLocationUuid() {
const _this = this;
uni.scanCode({
scanType: ['qrCode', 'barCode'],
success: function(res) {
_this.formData.destLocationCode = res.result;
}
});
},
handleCall() {
const _this = this;
this.$refs.form.validate().then(res => {
if (_this.formData.srcLocationCode && _this.formData.destLocationCode) {
_this.$modal.loading('提交中')
addDeliveryTask(_this.formData).then(res => {
_this.$modal.closeLoading();
_this.$modal.msgSuccess("提交成功!");
setTimeout(() => {
this.$tab.switchTab("/pages/work/index");
}, 500);
})
} else {
_this.$modal.msg("请将信息补充完整")
}
})
},
// reset() {
// const _this = this;
// this.formData.srcLocationCode = '';
// this.formData.destLocationCode = '';
// }
}
}
</script>

View File

@@ -937,7 +937,7 @@
"navigationBarTitleText": "炉长记录"
}
}, {
"path": "/pages/bom/inspectionRecords",
"path": "/pages/les/inspectionRecords",
"permission": "mes:pwo:query",
"icon": "icon-jianyanjilu",
"color": "linear-gradient(#FEBD5F, #FEAD37)",
@@ -945,7 +945,7 @@
"navigationBarTitleText": "检验记录"
}
}, {
"path": "/pages/bom/cleaningRecords",
"path": "/pages/les/cleaningRecords",
"permission": "mes:pwo:query",
"icon": "icon-a-ziyuan13500",
"color": "linear-gradient(#FEBD5F, #FEAD37)",
@@ -953,7 +953,7 @@
"navigationBarTitleText": "清炉记录"
}
}, {
"path": "/pages/bom/recordQuerys",
"path": "/pages/les/recordQuerys",
"permission": "mes:pwo:query",
"icon": "icon-yonghujiluchaxun",
"color": "linear-gradient(#FEBD5F, #FEAD37)",
@@ -961,5 +961,41 @@
"navigationBarTitleText": "记录查询"
}
}]
},
{
"name": "Les",
"data": [{
"path": "/pages/les/returnPallet",
"permission": "les:deliveryTask:list",
"icon": "icon-luchangfenxibaogao",
"color": "linear-gradient(#FEBD5F, #FEAD37)",
"style": {
"navigationBarTitleText": "托盘返空"
}
}, {
"path": "/pages/les/bindMaterial",
"permission": "les:basic:location:list",
"icon": "icon-jianyanjilu",
"color": "linear-gradient(#FEBD5F, #FEAD37)",
"style": {
"navigationBarTitleText": "备料绑定"
}
}, {
"path": "/pages/les/callMaterial",
"permission": "les:deliveryTask:list",
"icon": "icon-a-ziyuan13500",
"color": "linear-gradient(#FEBD5F, #FEAD37)",
"style": {
"navigationBarTitleText": "生产呼料"
}
}, {
"path": "/pages/les/chooseTask",
"permission": "les:deliveryRecord:list",
"icon": "icon-yonghujiluchaxun",
"color": "linear-gradient(#FEBD5F, #FEAD37)",
"style": {
"navigationBarTitleText": "生产配送"
}
}]
}
]

View File

@@ -0,0 +1,6 @@
const LesDeliveryTaskType = {
PRODUCTION: 1,
PALLET_RECYCLING: 2,
}
export default LesDeliveryTaskType

7
utils/enums/RobotType.js Normal file
View File

@@ -0,0 +1,7 @@
const RobotType = {
LATENT_MOBILE_ROBOT: 1,
LATENT_FORKLIFT_AGV: 2,
}
export default RobotType