no message

main
huojin\hj 2025-08-06 17:57:21 +08:00
parent ce175865fa
commit a146e3721d
4 changed files with 250 additions and 60 deletions

27
src/api/les.js 100644
View File

@ -0,0 +1,27 @@
import request from '@/utils/request'
export function add(data) {
return request({
url: 'api/les',
method: 'post',
data
})
}
export function del(ids) {
return request({
url: 'api/les/',
method: 'delete',
data: ids
})
}
export function edit(data) {
return request({
url: 'api/les',
method: 'put',
data
})
}
export default { add, edit, del }

View File

@ -57,6 +57,7 @@
<el-radio-button label="待执行">待执行</el-radio-button>
<el-radio-button label="执行中">执行中</el-radio-button>
<el-radio-button label="顶升">顶升</el-radio-button>
<el-radio-button label="到达">到达</el-radio-button>
<el-radio-button label="已完成">已完成</el-radio-button>
<el-radio-button label="任务取消">任务取消</el-radio-button>
</el-radio-group>
@ -65,16 +66,17 @@
</div>
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" :tableKey="this.$options.name"/>
<!-- 顶升 -->
<el-dialog title="顶升" :visible.sync="agvTaskCallbackStatus" width="400px">
<el-form ref="form1" :model="form1" :rules="rules" size="small" label-width="80px">
<el-form-item label="容器号" prop="boxCode">
<el-input v-model="form1.boxCode" style="width: 200px;"/>
<!-- 到达 -->
<el-dialog title="节点到达" :visible.sync="agvTaskArrivedDialog" width="400px">
<el-form ref="agvTaskArrivedForm" :model="agvTaskArrivedForm" :rules="agvTaskArrivedRules" size="small"
label-width="80px">
<el-form-item label="当前节点" prop="currentPositionCode">
<el-input v-model="agvTaskArrivedForm.currentPositionCode" style="width: 200px;"/>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="agvTaskCallbackStatus = false"> </el-button>
<el-button type="primary" @click="agvTaskCallbackMethod()"> </el-button>
<el-button @click="agvTaskArrivedDialog = false"> </el-button>
<el-button type="primary" @click="toAgvTaskArrivedContainer()"> </el-button>
</span>
</el-dialog>
<!--表单组件-->
@ -132,9 +134,9 @@
>
<el-table-column type="selection" width="55"/>
<el-table-column prop="id" label="任务序号 "/>
<el-table-column prop="stockCode" width="170" label="容器码"/>
<el-table-column prop="startSlotCode" label="起点位置" width="130"/>
<el-table-column prop="endSlotCode" label="终点位置" width="130" sortable :formatter="formatter"/>
<el-table-column prop="startSlotCode" label="起点" width="130"/>
<el-table-column prop="endSlotCode" label="多节点" width="130" sortable :formatter="formatter"/>
<el-table-column prop="slotCode" label="当前节点" width="130" />
<el-table-column
prop="status"
label="任务状态"
@ -143,6 +145,7 @@
{ text: '待执行', value: 'OPEN' },
{ text: '执行中', value: 'ATCALL' },
{ text: '顶升', value: 'UP_CONTAINER' },
{ text: '到达', value: 'ARRIVED' },
{ text: '已完成', value: 'FINISH' },
{ text: '任务取消', value: 'CANCEL' }
]"
@ -172,17 +175,24 @@
<el-table-column
fixed="right"
label="操作"
width="200"
width="260"
>
<template slot-scope="scope">
<el-button type="warning" :disabled="scope.row.status!='ATCALL' && scope.row.status!='OPEN' "
align="center" size="mini"
@click="popUpBox(scope.row)"
@click="toAgvTaskUp(scope.row)"
>
顶升
</el-button>
<el-button type="primary" :disabled="scope.row.status!='UP_CONTAINER' && scope.row.status!='ARRIVED' "
align="center" size="mini"
@click="toAgvTaskArrived(scope.row)"
>
到达
</el-button>
<el-button type="success"
:disabled="scope.row.status!='ATCALL' && scope.row.status!='UP_CONTAINER' && scope.row.status!='OPEN' "
:disabled="scope.row.status!='ARRIVED' && scope.row.status!='OPEN' "
align="center"
size="mini"
@click="toAgvTaskFinish(scope.row)"
@ -190,7 +200,7 @@
完成
</el-button>
<el-button type="danger"
:disabled="scope.row.status!='ATCALL' && scope.row.status!='UP_CONTAINER' && scope.row.status!='OPEN' "
:disabled="scope.row.status!='ATCALL' && scope.row.status!='UP_CONTAINER' && scope.row.status!='OPEN'&& scope.row.status!='ARRIVED' "
align="center"
size="mini"
@click="toAgvTaskCANCELED(scope.row)"
@ -267,6 +277,11 @@ export default {
data() {
return {
radio3: '执行中',
agvTaskArrivedDialog: false,
agvTaskArrivedForm: {
currentPositionCode: null,
missionCode: null
},
permission: {
add: ['admin', 'agvTask:add'],
edit: ['admin', 'agvTask:edit'],
@ -298,6 +313,11 @@ export default {
{required: true, message: '容器号不能为空', trigger: 'blur'}
]
},
agvTaskArrivedRules: {
currentPositionCode: [
{required: true, message: '当前位置不能为空', trigger: 'blur'}
]
},
queryTypeOptions: [
{key: 'dstStockCode', display_name: '终点位置'},
{key: 'srcLocCode', display_name: '起点位置'},
@ -311,9 +331,6 @@ export default {
{key: 'jobId', display_name: '下游任务号'},
{key: 'jobMessage', display_name: '返回报文'}
],
// boxCode
agvTaskCallbackStatus: false,
form1: { boxCode: null, missionCode: null }
}
},
methods: {
@ -325,9 +342,6 @@ export default {
return row.endSlotCode
},
toAgvTaskFinish(data) {
if (data.status != 'UP_CONTAINER') {
return this.crud.notify('容器未顶升,需顶升之后在做操作!', CRUD.NOTIFICATION_TYPE.ERROR)
}
crudKmres.missionStateCallback({
missionCode: data.id,
containerCode: data.stockCode,
@ -357,31 +371,51 @@ export default {
}).catch(() => {
})
},
agvTaskCallbackMethod() {//
this.$refs['form1'].validate((valid) => {
if (valid) {
toAgvTaskUp(data) {//
crudKmres.missionStateCallback({
missionCode: this.form1.missionCode,
containerCode: this.form1.boxCode,
missionCode: data.id,
containerCode: data.stockCode,
missionStatus: 'UP_CONTAINER'
}).then(res => {
this.agvTaskCallbackStatus = false
if (res.status == 200) {
this.crud.notify('顶升成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.crud.toQuery()
this.form1 = { boxCode: null, missionCode: null }
} else {
this.crud.notify(res.message, CRUD.NOTIFICATION_TYPE.ERROR)
}
}).catch(e => {
this.crud.notify('顶升失败!', CRUD.NOTIFICATION_TYPE.ERROR)
})
},
toAgvTaskArrived(data) {
//
this.agvTaskArrivedForm.missionCode = data.id
this.agvTaskArrivedDialog = true
},
toAgvTaskArrivedContainer() {
//
this.$refs['agvTaskArrivedForm'].validate((valid) => {
if (valid) {
crudKmres.missionStateCallback({
missionCode: this.agvTaskArrivedForm.missionCode,
missionStatus: 'ARRIVED',
currentPosition: this.agvTaskArrivedForm.currentPositionCode
}).then(res => {
if (res.status == 200) {
this.agvTaskArrivedDialog = false
this.crud.notify('到达成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.crud.toQuery()
this.agvTaskArrivedForm = {currentPositionCode: null, missionCode: null}
} else {
this.crud.notify(res.message, CRUD.NOTIFICATION_TYPE.ERROR)
}
})
} else {
return false
}
})
},
popUpBox(data) {//
this.form1.missionCode = data.id
this.form1.boxCode = data.stockCode
this.agvTaskCallbackStatus = true
},
resetQuery() {
this.radio3 = '执行中'
this.query.status = 'ATCALL'
@ -400,6 +434,9 @@ export default {
} else if (lab === '顶升') {
this.query.status = 'UP_CONTAINER'
this.crud.toQuery()
} else if (lab === '到达') {
this.query.status = 'ARRIVED'
this.crud.toQuery()
} else if (lab === '已完成') {
this.query.status = 'FINISH'
this.crud.toQuery()
@ -413,8 +450,9 @@ export default {
case '待执行':
return 'info'
case '执行中':
return 'warning'
case '顶升':
return 'warning'
case '到达':
return 'primary'
case '已完成':
return 'success'

View File

@ -0,0 +1,125 @@
<template>
<div class="app-container">
<!--工具栏-->
<div class="head-container">
<div v-if="crud.props.searchToggle">
<!-- 搜索 -->
<label class="el-form-item-label">任务号</label>
<el-input v-model="query.taskCode" clearable placeholder="任务号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<label class="el-form-item-label">物料号</label>
<el-input v-model="query.materialCode" clearable placeholder="物料号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<rrOperation :crud="crud" />
</div>
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" :tableKey="this.$options.name">
</crudOperation>
</div>
<!--表格渲染-->
<el-table ref="table" height="68vh" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;"
@selection-change="this.selectionChangeHandler" @row-click="this.clickRow"
>
<el-table-column type="selection" width="55"/>
<el-table-column prop="xh" type="index" :index="indexMethod" label="序号"/>
<el-table-column prop="taskCode" label="任务号"/>
<el-table-column prop="onlineNo" label="上线单号"/>
<el-table-column prop="materialCode" label="物料号"/>
<el-table-column prop="boxNo" label="料箱号"/>
<el-table-column prop="routeCode" label="编组/线路"/>
<el-table-column prop="srcPositionCode" label="起点"/>
<el-table-column prop="dstPositionCode" label="终点"/>
<el-table-column prop="taskType" label="任务类型"/>
<el-table-column prop="createBy" label="创建人"/>
<el-table-column prop="createTime" label="日期"/>
</el-table>
<!--分页组件-->
<div style="float: right;">
<pagination/>
</div>
</div>
</template>
<script>
import crudLes from '@/api/les'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
import Treeselect from '@riophae/vue-treeselect'
import Search from '@/views/monitor/log/search.vue'
import DateRangePicker from '@/components/DateRangePicker/index.vue'
import { getToken } from '@/utils/auth'
const defaultForm = {
id: null,
taskCode: null,
taskType: null,
materialCode: null,
routeCode: null,
boxNo: null,
onlineNo: null,
srcPositionCode: null,
dstPositionCode: null,
createBy: null,
updateBy: null,
createTime: null,
updateTime: null
}
export default {
name: 'LES',
components: { DateRangePicker, Search, Treeselect, pagination, crudOperation, rrOperation, udOperation },
mixins: [presenter(), header(), form(defaultForm), crud()],
cruds() {
return CRUD({
title: 'les任务', url: 'api/les', idField: 'id', sort: 'id,desc', crudMethod: { ...crudLes },
optShow: {
add: false,
edit: false,
del: false,
reset: true,
download: false
}
})
},
data() {
return {
headers: {'Authorization': getToken()},
permission: {
add: ['admin', 'les:add'],
edit: ['admin', 'les:edit'],
del: ['admin', 'les:del']
}
}
},
mounted() {
},
methods: {
indexMethod(index) {
return index * 1 + 1
},
clickRow(row) {
this.crud.getTable().clearSelection()
this.crud.getTable().toggleRowSelection(row, true)
this.selectSingleClick_()
},
selectionChangeHandler(val) {
this.crud.selections = val
this.selectSingleClick_()
},
resetQuery() {
this.crud.resetQuery()
}
}
}
</script>
<style scoped>
</style>

View File

@ -8,7 +8,7 @@ function resolve(dir) {
}
const name = defaultSettings.title // 网址标题
const port = 8081 // 端口配置
const port = 8080 // 端口配置
// All configuration explanations can be find in https://cli.vuejs.org/config/
module.exports = {