<add>[important]电子标签基本完成

This commit is contained in:
葛林强 2024-05-30 15:34:46 +08:00
parent c540e530de
commit aa43b29533
7 changed files with 571 additions and 0 deletions

12
src/axios/el.tag.js Normal file
View File

@ -0,0 +1,12 @@
import axios from '@/axios/base/base.axios';
export default {
// 分页查询电子标签任务
getElTagTaskWithPage(request) {
return axios.post('/api/wcs/elTag/queryTaskWithPage', request);
},
// 更新电子标签任务 ---- 暂时只支持更新状态,需要改后端
updateElTagTask(request) {
return axios.post('/api/wcs/elTag/editTaskInfo', request);
},
}

View File

@ -0,0 +1,40 @@
// 电子标签任务状态
export const elTagTaskStatusEnum = {
creat: {
value: 0,
label: '新创建',
color: 'info'
},
queue: {
value: 1,
label: '正在点亮',
color: 'success'
},
running: {
value: 2,
label: '已确认',
color: 'primary'
},
error: {
value: 9,
label: '异常',
color: 'danger'
}
}
export function formatterElTagTaskStatusEnum(value) {
switch (parseInt(value)){
case elTagTaskStatusEnum.creat.value:
return {label: elTagTaskStatusEnum.creat.label, color: elTagTaskStatusEnum.creat.color};
case elTagTaskStatusEnum.queue.value:
return {label: elTagTaskStatusEnum.queue.label, color: elTagTaskStatusEnum.queue.color};
case elTagTaskStatusEnum.running.value:
return {label: elTagTaskStatusEnum.running.label, color: elTagTaskStatusEnum.running.color};
case elTagTaskStatusEnum.error.value:
return {label: elTagTaskStatusEnum.error.label, color: elTagTaskStatusEnum.error.color};
default:
return {label: `未知类型:${value}`, color: 'danger'};
}
}

View File

@ -18,6 +18,7 @@ const routes = [
// 任务管理 // 任务管理
{ path: 'wmsTask', name: 'wmsTask', component:() => import('../view/tab/taskManage/WmsTask.vue') }, // Wms任务管理 { path: 'wmsTask', name: 'wmsTask', component:() => import('../view/tab/taskManage/WmsTask.vue') }, // Wms任务管理
{ path: 'wcsTask', name: 'wcsTask', component:() => import('../view/tab/taskManage/WcsTask.vue') }, // Wcs任务管理 { path: 'wcsTask', name: 'wcsTask', component:() => import('../view/tab/taskManage/WcsTask.vue') }, // Wcs任务管理
{ path: 'elTagTask', name: 'elTagTask', component:() => import('../view/tab/taskManage/ElTagTask.vue') }, // 电子标签任务管理
// 设备管理 // 设备管理
{ path: 'location', name: 'location', component:() => import('@/view/tab/equipmentManage/LocationData.vue') }, // 点位/库位管理 { path: 'location', name: 'location', component:() => import('@/view/tab/equipmentManage/LocationData.vue') }, // 点位/库位管理
{ path: 'stackerData', name: 'stackerData', component:() => import('@/view/tab/equipmentManage/StackerData.vue') }, // 堆垛机管理 { path: 'stackerData', name: 'stackerData', component:() => import('@/view/tab/equipmentManage/StackerData.vue') }, // 堆垛机管理

View File

@ -0,0 +1,156 @@
<template>
<div>
<el-dialog :model-value="modelValue" :show-close="false" title="编辑电子标签任务"
@close="() => $emit('update:modelValue', false)">
<div>
<el-form
label-width="100px"
:model="elTagTaskItem"
>
<el-form-item label="任务号:">
<el-input v-model="elTagTaskItem.taskId" disabled/>
</el-form-item>
<el-form-item label="点位:">
<el-input v-model="elTagTaskItem.location" disabled/>
</el-form-item>
<el-form-item label="订单号:">
<el-input v-model="elTagTaskItem.orderId" disabled/>
</el-form-item>
<el-form-item label="载具号:">
<el-input v-model="elTagTaskItem.vehicleNo" disabled/>
</el-form-item>
<el-form-item label="物料编号:">
<el-input v-model="elTagTaskItem.goodsId" disabled/>
</el-form-item>
<el-form-item label="物料名称:">
<el-input v-model="elTagTaskItem.goodsName" disabled/>
</el-form-item>
<el-form-item label="任务状态:">
<el-select v-model="elTagTaskItem.taskStatus">
<el-option v-for="item in elTagTaskStatusEnum" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
</el-form-item>
<el-form-item label="需求数量:">
<el-input v-model="elTagTaskItem.needNum" disabled/>
</el-form-item>
<el-form-item label="实际数量:">
<el-input v-model="elTagTaskItem.pickNum" disabled/>
</el-form-item>
<el-form-item label="创建人:">
<el-input v-model="elTagTaskItem.createPerson" disabled/>
</el-form-item>
<el-form-item label="备注信息:">
<el-input v-model="elTagTaskItem.remark" disabled/>
</el-form-item>
</el-form>
</div>
<template #footer>
<div>
<el-button type="warning" @click="update">变更信息</el-button>
<el-button type="danger" @click="$emit('update:modelValue', false)">关闭窗口</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script>
// import from ' ';
import {elTagTaskStatusEnum} from "@/enum/elTag/eltag.task.enum";
import {ElLoading, ElMessage, ElMessageBox} from "element-plus";
import elTagApi from "@/axios/el.tag";
export default {
// import 使
components: {},
props: ['modelValue', 'elTagTaskItem'],
emits: ['update:modelValue'],
data() {
//
return {}
},
// data
computed: {
elTagTaskStatusEnum() {
return elTagTaskStatusEnum
}
},
// data
watch: {},
//
methods: {
//
update() {
ElMessageBox.confirm(`确定变更:${this.elTagTaskItem.taskId} d的任务状态`,
'警告',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).catch(() => {})
.then(()=>{
const loading = ElLoading.service({
lock: true,
text: '请稍后...',
})
elTagApi.updateElTagTask({taskId: this.elTagTaskItem.taskId, taskStatus: this.elTagTaskItem.taskStatus}).then((response) => {
const responseData = response.data
if (responseData.code === 0) {
ElMessage({
message: '变更成功',
type: 'success',
})
this.$emit('update:modelValue', false)
} else {
//
ElMessage({
message: '服务器返回失败:' + responseData.msg,
type: 'warning',
})
}
loading.close()
}).catch((ex) => {
//
ElMessage({
message: '请求服务器失败:' + ex,
type: 'error',
})
loading.close()
})
})
}
},
// API
setup() {
},
//
beforeCreate() {
},
// (访 this )
created() {
},
// -
beforeMount() {
},
// - 访 DOM
mounted() {
},
//
beforeUpdate() {
},
//
updated() {
},
//
beforeUnmount() {
},
//
unmounted() {
}
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,145 @@
<template>
<div>
<el-row style="width: calc(100vw - 270px)">
<h5>电子标签任务列表</h5>
<el-table :data="modelValue" border stripe max-height="calc(100vh - 550px)">
<el-table-column fixed prop="taskId" label="任务号" width="230px" align="center" show-overflow-tooltip/>
<el-table-column prop="location" label="点位" width="120px" align="center" show-overflow-tooltip/>
<el-table-column prop="orderId" label="订单号" width="100px" align="center" show-overflow-tooltip/>
<el-table-column prop="vehicleNo" label="载具号" width="100px" align="center" show-overflow-tooltip/>
<el-table-column prop="goodsId" label="物料编号" width="100px" align="center" show-overflow-tooltip/>
<el-table-column prop="goodsName" label="物料名称" width="100px" align="center" show-overflow-tooltip/>
<el-table-column prop="taskStatus" label="任务状态" width="140px" align="center">
<template #default="scope">
<el-tag class="ml-2" :type=formatterElTagTaskStatusEnum(scope.row.taskStatus).color>
{{formatterElTagTaskStatusEnum(scope.row.taskStatus).label }}</el-tag>
</template>
</el-table-column>
<el-table-column prop="needNum" label="需求数量" width="100px" align="center" show-overflow-tooltip/>
<el-table-column prop="pickNum" label="实际数量" width="100px" align="center" show-overflow-tooltip/>
<el-table-column prop="createPerson" label="创建人" width="100px" align="center" show-overflow-tooltip/>
<el-table-column prop="createTime" label="创建时间" :formatter="formatterTime" width="160px" align="center" show-overflow-tooltip/>
<el-table-column prop="lightTime" label="点亮时间" :formatter="formatterTime" width="160px" align="center" show-overflow-tooltip/>
<el-table-column prop="confirmTime" label="确认时间" :formatter="formatterTime" width="160px" align="center" show-overflow-tooltip/>
<el-table-column prop="remark" label="备注" show-overflow-tooltip min-width="80px"/>
<el-table-column fixed="right" label="操作" align="center" width="80">
<template #default="scope">
<el-button-group class="ml-4">
<el-tooltip content="变更状态" placement="top" effect="light">
<el-button type="warning" size="small" @click="changeTaskStatus(scope.row)">
<el-icon><Switch/></el-icon>
</el-button>
</el-tooltip>
</el-button-group>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row style="margin-top: 15px">
<el-pagination
small
v-if="searchParams.page.totalRow > 0"
background
v-model:page-size="searchParams.page.pageSize"
v-model:current-page="searchParams.page.pageIndex"
:page-sizes="[20, 50, 100, 200, 500]"
layout="prev, pager, next, jumper, sizes, total"
:total="searchParams.page.totalRow"
@size-change="searchData"
@current-change="searchData"
/>
</el-row>
<!-- 编辑状态的弹窗-->
<EditElTagTask v-model="showEditForm" v-model:elTagTaskItem="elTagTaskItem"></EditElTagTask>
</div>
</template>
<script>
// import from ' ';
import {Switch} from "@element-plus/icons-vue";
import formatterTime from "@/plugins/formatter/formatter.time";
import {formatterElTagTaskStatusEnum} from "@/enum/elTag/eltag.task.enum";
import EditElTagTask from "@/view/component/elTagTask/EditElTagTask.vue";
export default {
// import 使
components: {EditElTagTask, Switch},
props: ['modelValue', 'searchParams'],
emits: ['update:modelValue','update:searchParams','pageChange'],
data() {
//
return {
formatterTime: formatterTime.formatCellValueTime,
//
showEditForm: false,
//
elTagTaskItem: {}
}
},
// data
computed: {
},
// data
watch: {},
//
methods: {
formatterElTagTaskStatusEnum,
//
changeTaskStatus(row) {
this.elTagTaskItem = {
taskId: row.taskId,
location: row.location,
orderId: row.orderId,
vehicleNo: row.vehicleNo,
goodsId: row.goodsId,
goodsName: row.goodsName,
taskStatus: row.taskStatus,
needNum: row.needNum,
pickNum: row.pickNum,
createPerson: row.createPerson,
createTime: row.createTime,
lightTime: row.lightTime,
confirmTime: row.confirmTime,
remark: row.remark
}
this.showEditForm = true
},
searchData() {
this.$emit('pageChange', this.searchParams)
},
},
// API
setup() {
},
//
beforeCreate() {
},
// (访 this )
created() {
},
// -
beforeMount() {
},
// - 访 DOM
mounted() {
},
//
beforeUpdate() {
},
//
updated() {
},
//
beforeUnmount() {
},
//
unmounted() {
}
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,134 @@
<template>
<div style="border-radius: 5px; border: #2c3e5033 solid 1px; padding: 10px">
<el-row>
<el-form :model="searchParams" label-width="120" label-position="left" >
<el-form-item label="查询关键字:">
<el-input placeholder="输入 点位/任务号/箱号/订单号 查询..." v-model="searchParams.searchStr" clearable></el-input>
</el-form-item>
<el-form-item label="任务状态:">
<el-select v-model="searchParams.elTagTaskStatus" multiple placeholder="请选择需要查询的任务状态">
<el-option v-for="item in elTagTaskStatusEnum" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
</el-form-item>
<el-form-item label="任务创建时间:">
<el-date-picker
v-model="searchParams.timeRange"
type="datetimerange"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DDTHH:mm:ss"
unlink-panels
range-separator="至"
start-placeholder="开始时间"
end-placeholder="截止时间"
/>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-button type="primary" @click="searchBtn">查询/刷新</el-button>
<!-- <el-button type="success" @click="">新增任务</el-button>-->
</el-row>
</div>
</template>
<script>
// import from ' ';
import {elTagTaskStatusEnum} from "@/enum/elTag/eltag.task.enum";
import {ElLoading, ElMessage} from "element-plus";
import elTagApi from "@/axios/el.tag"
export default {
// import 使
components: {},
props: ['modelValue', 'searchParams'],
emits: ['update:modelValue','update:searchParams'],
data() {
//
return {}
},
// data
computed: {
elTagTaskStatusEnum() {
return elTagTaskStatusEnum
}
},
// data
watch: {},
//
methods: {
//
searchBtn() {
this.searchParams.page.pageIndex = 1
this.searchParams.page.pageSize = 50
this.$emit('update:searchParams', this.searchParams)
this.searchData(this.searchParams)
},
searchData(searchParams) {
const loading = ElLoading.service({
lock: true,
text: '加载中...',
})
this.$emit('update:modelValue', [])
elTagApi.getElTagTaskWithPage(searchParams).then((response) => {
const responseData = response.data
if (responseData.code === 0) {
ElMessage({
message: '查询成功',
type: 'success',
})
//
this.searchParams.page.totalRow = parseInt(responseData["tag"])
this.$emit('update:searchParams', this.searchParams)
this.$emit('update:modelValue', Object.freeze(responseData["returnData"]))
} else {
//
ElMessage({
message: '服务器返回失败:' + responseData.msg,
type: 'warning',
})
}
loading.close()
}).catch((ex) => {
//
ElMessage({
message: '请求服务器失败:' + ex,
type: 'error',
})
loading.close()
})
},
},
// API
setup() {
},
//
beforeCreate() {
},
// (访 this )
created() {
},
// -
beforeMount() {
},
// - 访 DOM
mounted() {
},
//
beforeUpdate() {
},
//
updated() {
},
//
beforeUnmount() {
},
//
unmounted() {
}
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,83 @@
<template>
<div>
<el-row>
<SearchForm style="width: 100%" v-model="elTagTaskList" v-model:search-params="searchParams" ref="searchForm"></SearchForm>
</el-row>
<el-row>
<ElTagTaskList v-model="elTagTaskList" v-model:search-params="searchParams" @page-change="pageChange"></ElTagTaskList>
</el-row>
</div>
</template>
<script>
// import from ' ';
import SearchForm from "@/view/component/elTagTask/SearchForm.vue";
import ElTagTaskList from "@/view/component/elTagTask/ElTagTaskList.vue";
export default {
// import 使
components: {ElTagTaskList, SearchForm},
props: [],
emits: [],
data() {
//
return {
//
searchParams: {
searchStr: '',
elTagTaskStatus: [0,1,2,9],
timeRange: [],
page: {
pageIndex: 1,
pageSize: 50,
totalRow: 0
}
},
//
elTagTaskList: []
}
},
// data
computed: {},
// data
watch: {},
//
methods: {
pageChange(searchParams) {
this.$refs.searchForm.searchData(searchParams)
},
},
// API
setup() {
},
//
beforeCreate() {
},
// (访 this )
created() {
},
// -
beforeMount() {
},
// - 访 DOM
mounted() {
},
//
beforeUpdate() {
},
//
updated() {
},
//
beforeUnmount() {
},
//
unmounted() {
}
}
</script>
<style scoped>
</style>