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-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> </el-radio-group>
@ -65,16 +66,17 @@
</div> </div>
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'--> <!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" :tableKey="this.$options.name"/> <crudOperation :permission="permission" :tableKey="this.$options.name"/>
<!-- 顶升 --> <!-- 到达 -->
<el-dialog title="顶升" :visible.sync="agvTaskCallbackStatus" width="400px"> <el-dialog title="节点到达" :visible.sync="agvTaskArrivedDialog" width="400px">
<el-form ref="form1" :model="form1" :rules="rules" size="small" label-width="80px"> <el-form ref="agvTaskArrivedForm" :model="agvTaskArrivedForm" :rules="agvTaskArrivedRules" size="small"
<el-form-item label="容器号" prop="boxCode"> label-width="80px">
<el-input v-model="form1.boxCode" style="width: 200px;"/> <el-form-item label="当前节点" prop="currentPositionCode">
<el-input v-model="agvTaskArrivedForm.currentPositionCode" style="width: 200px;"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button @click="agvTaskCallbackStatus = false"> </el-button> <el-button @click="agvTaskArrivedDialog = false"> </el-button>
<el-button type="primary" @click="agvTaskCallbackMethod()"> </el-button> <el-button type="primary" @click="toAgvTaskArrivedContainer()"> </el-button>
</span> </span>
</el-dialog> </el-dialog>
<!--表单组件--> <!--表单组件-->
@ -132,9 +134,9 @@
> >
<el-table-column type="selection" width="55"/> <el-table-column type="selection" width="55"/>
<el-table-column prop="id" label="任务序号 "/> <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="startSlotCode" label="起点位置" width="130"/> <el-table-column prop="endSlotCode" label="多节点" width="130" sortable :formatter="formatter"/>
<el-table-column prop="endSlotCode" label="终点位置" width="130" sortable :formatter="formatter"/> <el-table-column prop="slotCode" label="当前节点" width="130" />
<el-table-column <el-table-column
prop="status" prop="status"
label="任务状态" label="任务状态"
@ -143,6 +145,7 @@
{ text: '待执行', value: 'OPEN' }, { text: '待执行', value: 'OPEN' },
{ text: '执行中', value: 'ATCALL' }, { text: '执行中', value: 'ATCALL' },
{ text: '顶升', value: 'UP_CONTAINER' }, { text: '顶升', value: 'UP_CONTAINER' },
{ text: '到达', value: 'ARRIVED' },
{ text: '已完成', value: 'FINISH' }, { text: '已完成', value: 'FINISH' },
{ text: '任务取消', value: 'CANCEL' } { text: '任务取消', value: 'CANCEL' }
]" ]"
@ -172,17 +175,24 @@
<el-table-column <el-table-column
fixed="right" fixed="right"
label="操作" label="操作"
width="200" width="260"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="warning" :disabled="scope.row.status!='ATCALL' && scope.row.status!='OPEN' " <el-button type="warning" :disabled="scope.row.status!='ATCALL' && scope.row.status!='OPEN' "
align="center" size="mini" align="center" size="mini"
@click="popUpBox(scope.row)" @click="toAgvTaskUp(scope.row)"
> >
顶升 顶升
</el-button> </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" <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" align="center"
size="mini" size="mini"
@click="toAgvTaskFinish(scope.row)" @click="toAgvTaskFinish(scope.row)"
@ -190,7 +200,7 @@
完成 完成
</el-button> </el-button>
<el-button type="danger" <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" align="center"
size="mini" size="mini"
@click="toAgvTaskCANCELED(scope.row)" @click="toAgvTaskCANCELED(scope.row)"
@ -212,7 +222,7 @@
<script> <script>
import crudAgvTask from '@/api/agvTask' import crudAgvTask from '@/api/agvTask'
import crudKmres from '@/api/kmres' import crudKmres from '@/api/kmres'
import CRUD, { presenter, header, form, crud } from '@crud/crud' import CRUD, {presenter, header, form, crud} from '@crud/crud'
import rrOperation from '@crud/RR.operation' import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation' import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation' import udOperation from '@crud/UD.operation'
@ -242,7 +252,7 @@ const defaultForm = {
} }
export default { export default {
name: 'AgvTask', name: 'AgvTask',
components: { DateRangePicker, pagination, crudOperation, rrOperation, udOperation }, components: {DateRangePicker, pagination, crudOperation, rrOperation, udOperation},
mixins: [presenter(), header(), form(defaultForm), crud()], mixins: [presenter(), header(), form(defaultForm), crud()],
dicts: ['base_staus', 'task_status', 'task_type'], dicts: ['base_staus', 'task_status', 'task_type'],
cruds() { cruds() {
@ -251,7 +261,7 @@ export default {
url: 'api/agvTask', url: 'api/agvTask',
idField: 'id', idField: 'id',
sort: 'id,desc', sort: 'id,desc',
crudMethod: { ...crudAgvTask }, crudMethod: {...crudAgvTask},
optShow: { optShow: {
add: false, add: false,
edit: false, edit: false,
@ -267,6 +277,11 @@ export default {
data() { data() {
return { return {
radio3: '执行中', radio3: '执行中',
agvTaskArrivedDialog: false,
agvTaskArrivedForm: {
currentPositionCode: null,
missionCode: null
},
permission: { permission: {
add: ['admin', 'agvTask:add'], add: ['admin', 'agvTask:add'],
edit: ['admin', 'agvTask:edit'], edit: ['admin', 'agvTask:edit'],
@ -274,46 +289,48 @@ export default {
}, },
rules: { rules: {
stockCode: [ stockCode: [
{ required: true, message: '容器码不能为空', trigger: 'blur' } {required: true, message: '容器码不能为空', trigger: 'blur'}
], ],
stockTypeCode: [ stockTypeCode: [
{ required: true, message: '容器类型不能为空', trigger: 'blur' } {required: true, message: '容器类型不能为空', trigger: 'blur'}
], ],
startSlotCode: [ startSlotCode: [
{ required: true, message: '起点位置不能为空', trigger: 'blur' } {required: true, message: '起点位置不能为空', trigger: 'blur'}
], ],
endSlotCode: [ endSlotCode: [
{ required: true, message: '终点位置不能为空', trigger: 'blur' } {required: true, message: '终点位置不能为空', trigger: 'blur'}
], ],
slotCode: [ slotCode: [
{ required: true, message: '容器当前位置不能为空', trigger: 'blur' } {required: true, message: '容器当前位置不能为空', trigger: 'blur'}
], ],
status: [ status: [
{ required: true, message: '任务状态不能为空', trigger: 'blur' } {required: true, message: '任务状态不能为空', trigger: 'blur'}
], ],
jobType: [ jobType: [
{ required: true, message: '工作类型不能为空', trigger: 'blur' } {required: true, message: '工作类型不能为空', trigger: 'blur'}
], ],
boxCode: [ boxCode: [
{ required: true, message: '容器号不能为空', trigger: 'blur' } {required: true, message: '容器号不能为空', trigger: 'blur'}
]
},
agvTaskArrivedRules: {
currentPositionCode: [
{required: true, message: '当前位置不能为空', trigger: 'blur'}
] ]
}, },
queryTypeOptions: [ queryTypeOptions: [
{ key: 'dstStockCode', display_name: '终点位置' }, {key: 'dstStockCode', display_name: '终点位置'},
{ key: 'srcLocCode', display_name: '起点位置' }, {key: 'srcLocCode', display_name: '起点位置'},
{ key: 'stockCode', display_name: '容器码' }, {key: 'stockCode', display_name: '容器码'},
{ key: 'stockTypeCode', display_name: '容器类型' }, {key: 'stockTypeCode', display_name: '容器类型'},
{ key: 'startSlotCode', display_name: '起点位置' }, {key: 'startSlotCode', display_name: '起点位置'},
{ key: 'endSlotCode', display_name: '终点位置' }, {key: 'endSlotCode', display_name: '终点位置'},
{ key: 'slotCode', display_name: '容器当前位置' }, {key: 'slotCode', display_name: '容器当前位置'},
{ key: 'status', display_name: '任务状态' }, {key: 'status', display_name: '任务状态'},
{ key: 'type', display_name: '任务类型' }, {key: 'type', display_name: '任务类型'},
{ key: 'jobId', display_name: '下游任务号' }, {key: 'jobId', display_name: '下游任务号'},
{ key: 'jobMessage', display_name: '返回报文' } {key: 'jobMessage', display_name: '返回报文'}
], ],
// boxCode
agvTaskCallbackStatus: false,
form1: { boxCode: null, missionCode: null }
} }
}, },
methods: { methods: {
@ -325,9 +342,6 @@ export default {
return row.endSlotCode return row.endSlotCode
}, },
toAgvTaskFinish(data) { toAgvTaskFinish(data) {
if (data.status != 'UP_CONTAINER') {
return this.crud.notify('容器未顶升,需顶升之后在做操作!', CRUD.NOTIFICATION_TYPE.ERROR)
}
crudKmres.missionStateCallback({ crudKmres.missionStateCallback({
missionCode: data.id, missionCode: data.id,
containerCode: data.stockCode, containerCode: data.stockCode,
@ -357,31 +371,51 @@ export default {
}).catch(() => { }).catch(() => {
}) })
}, },
agvTaskCallbackMethod() {// toAgvTaskUp(data) {//
this.$refs['form1'].validate((valid) => {
if (valid) {
crudKmres.missionStateCallback({ crudKmres.missionStateCallback({
missionCode: this.form1.missionCode, missionCode: data.id,
containerCode: this.form1.boxCode, containerCode: data.stockCode,
missionStatus: 'UP_CONTAINER' missionStatus: 'UP_CONTAINER'
}).then(res => { }).then(res => {
this.agvTaskCallbackStatus = false if (res.status == 200) {
this.crud.notify('顶升成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) this.crud.notify('顶升成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.crud.toQuery() this.crud.toQuery()
this.form1 = { boxCode: null, missionCode: null } } else {
this.crud.notify(res.message, CRUD.NOTIFICATION_TYPE.ERROR)
}
}).catch(e => { }).catch(e => {
this.crud.notify('顶升失败!', CRUD.NOTIFICATION_TYPE.ERROR) 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 { } else {
return false return false
} }
}) })
}, },
popUpBox(data) {//
this.form1.missionCode = data.id
this.form1.boxCode = data.stockCode
this.agvTaskCallbackStatus = true
},
resetQuery() { resetQuery() {
this.radio3 = '执行中' this.radio3 = '执行中'
this.query.status = 'ATCALL' this.query.status = 'ATCALL'
@ -400,6 +434,9 @@ export default {
} else if (lab === '顶升') { } else if (lab === '顶升') {
this.query.status = 'UP_CONTAINER' this.query.status = 'UP_CONTAINER'
this.crud.toQuery() this.crud.toQuery()
} else if (lab === '到达') {
this.query.status = 'ARRIVED'
this.crud.toQuery()
} else if (lab === '已完成') { } else if (lab === '已完成') {
this.query.status = 'FINISH' this.query.status = 'FINISH'
this.crud.toQuery() this.crud.toQuery()
@ -413,8 +450,9 @@ export default {
case '待执行': case '待执行':
return 'info' return 'info'
case '执行中': case '执行中':
return 'warning'
case '顶升': case '顶升':
return 'warning'
case '到达':
return 'primary' return 'primary'
case '已完成': case '已完成':
return 'success' 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 name = defaultSettings.title // 网址标题
const port = 8081 // 端口配置 const port = 8080 // 端口配置
// All configuration explanations can be find in https://cli.vuejs.org/config/ // All configuration explanations can be find in https://cli.vuejs.org/config/
module.exports = { module.exports = {