Browse Source

Merge remote-tracking branch 'origin/master'

master
yuliang 6 months ago
parent
commit
191cc35c09
  1. 2
      src/editor/widgets/task/TaskMeta.ts
  2. 212
      src/editor/widgets/task/TaskView2.vue

2
src/editor/widgets/task/TaskMeta.ts

@ -1,6 +1,6 @@
import { defineWidget } from '@/runtime/DefineWidget.ts' import { defineWidget } from '@/runtime/DefineWidget.ts'
import { renderIcon } from '@/utils/webutils.ts' import { renderIcon } from '@/utils/webutils.ts'
import TaskView from './TaskView.vue' import TaskView from './TaskView2.vue'
export default defineWidget({ export default defineWidget({
name: 'task', name: 'task',

212
src/editor/widgets/task/TaskView2.vue

@ -0,0 +1,212 @@
<script setup lang="ts">
import { onMounted, reactive } from "vue";
import { AgGridVue } from "ag-grid-vue3";
import { localeText as localeTextCn } from "@/components/yvTable/yv-aggrid-cn.locale";
import { Request } from "@ease-forge/shared";
import type { GridOptions } from "ag-grid-enterprise";
import type { GridApi, GridReadyEvent } from "ag-grid-community";
defineOptions({
name: 'TaskView',
});
// Props
interface TaskViewProps {
}
// props
const props = withDefaults(defineProps<TaskViewProps>(), {});
// State
interface TaskViewState {
loading: boolean;
grid1Data: Array<any>;
}
// state
const state = reactive<TaskViewState>({
loading: false,
grid1Data: [],
});
// Data
interface TaskViewData {
gridSetting: Partial<GridOptions>;
api?: GridApi;
}
//
const data: TaskViewData = {
gridSetting: {
localeText: localeTextCn,
// suppressNoRowsOverlay: true,
// suppressLoadingOverlay: true,
//
rowSelection: "single",
// rowModelType: "",
columnDefs: [
{ field: 'id', headerName: 'id', editable: false, hide: true },
{ field: 'envId', headerName: '环境ID', hide: true },
{ field: 'type', headerName: '类型', width: 120 },
{ field: 'status', headerName: '状态', width: 120 },
{ field: 'err', headerName: '异常' },
{ field: 'payload', headerName: '任务负载', width: 600 },
{ field: 'priority', headerName: '优先级', width: 120 },
{ field: 'info', headerName: '任务明细', width: 800 },
{ field: '_raw.createAt', headerName: '创建时间', editable: false },
{ field: '_raw.createBy', headerName: '创建人', editable: false },
{ field: '_raw.updateAt', headerName: '最后更新时间', editable: false },
{ field: '_raw.updateBy', headerName: '更新人', editable: false },
],
treeData: true,
getDataPath: data => data.path,
autoGroupColumnDef: {
headerName: '任务',
field: 'title',
width: 300,
},
groupDefaultExpanded: -1,
onGridReady(event: GridReadyEvent) {
data.api = event.api;
},
},
};
onMounted(reload);
async function reload() {
state.loading = true;
const data = await Request.request.get("/api/workbench/LccTask@allRcsTask").finally(() => state.loading = false);
state.grid1Data = toTreeData(data);
}
function toTreeData(data: Array<any>) {
if (!data) return [];
const BizTaskType = {
MOVE: "移动任务",
CHARGE: "充电任务",
CARRY: "搬运任务",
LOAD: "装载任务",
UNLOAD: "卸载任务",
};
const PlanTaskType = {
MOVE: "移动任务",
MOVE_BACKWARD: "移动任务",
ROTATION: "旋转任务",
LOAD: "取货任务",
UNLOAD: "装载任务",
CHARGE: "充电任务",
FINISH: "完成任务",
};
const BizTaskStatus = {
WAITING_FOR_DISPATCH: "待调度",
DEVICE_EXECUTING: "设备执行中",
PAUSED: "暂停执行",
DISPATCH_ERROR: "调度异常",
PLANNING_ERROR: "规划异常",
DEVICE_ERROR: "设备执行异常",
};
const PlanTaskStatus = {
PENDING: "等待执行",
EXECUTING: "执行中",
FINISHED: "执行成功",
ERROR: "执行失败",
};
const tree: Array<any> = [];
for (let biz of data) {
const bizNode: any = {
_raw: biz,
path: [biz.bizTaskId],
id: biz.bizTaskId,
envId: biz.envId,
type: BizTaskType[biz.bizType],
title: biz.bizTaskDescription,
status: BizTaskStatus[biz.bizTaskStatus],
// status: biz.bizTaskStatus,
err: biz.bizTaskErrorInfo,
payload: biz.bizTaskPayload,
priority: biz.priority,
info: `托盘ID: ${biz.lpn}, 任务起始点: ${biz.taskFrom}, 任务目标点: ${biz.taskTo}, 执行器ID: ${biz.allocatedExecutorId}`,
children: [],
};
const taskPlans: Array<any> = biz.taskPlans;
for (let plan of taskPlans) {
const planNode: any = {
_raw: plan,
path: [biz.bizTaskId, plan.planTaskId],
id: plan.planTaskId,
envId: plan.envId,
type: PlanTaskType[plan.planType],
title: plan.planTaskDescription,
status: PlanTaskStatus[plan.planTaskStatus],
err: plan.planTaskErrorInfo,
payload: plan.planTaskPayload,
priority: plan.seq,
info: `背负托盘ID: ${plan.loadLpn}, 目标点ID: ${plan.targetId},目标点货架列: ${plan.targetBay}, 目标点货架层: ${plan.targetLevel}, 目标点货架格: ${plan.targetCell}, 目标点旋转角度: ${plan.targetRotation}, 执行器ID: ${plan.executorId}`,
children: [],
};
const taskDevices: Array<any> = plan.taskDevices;
for (let device of taskDevices) {
const deviceNode: any = {
_raw: device,
path: [biz.bizTaskId, plan.planTaskId, device.deviceTaskId],
id: device.deviceTaskId,
envId: device.envId,
type: device.deviceType,
title: device.deviceTaskDescription,
status: device.deviceTaskStatus,
err: device.deviceTaskErrorInfo,
payload: device.deviceTaskPayload,
priority: device.seq,
info: `报文类型: ${device.packetType}, 报文目标点: ${device.packetEndPoint}, 报文内容: ${device.packetPayload}, 执行器ID: ${device.deviceItemId}`,
children: [],
};
// planNode.children.push(deviceNode);
tree.push(deviceNode);
}
// bizNode.children.push(planNode);
tree.push(planNode);
}
tree.push(bizNode);
}
return tree;
}
interface TaskViewExpose {
state: TaskViewState;
data: TaskViewData;
}
const expose: TaskViewExpose = {
state,
data,
};
//
defineExpose(expose);
export type {
TaskViewProps,
TaskViewState,
}
</script>
<template>
<div class="task-view">
<AgGridVue
ref="gridRef"
:class="['ag-theme-alpine', 'yv-table', 'hi-light-selected-row','allow-vertical-line', 'grid1']"
v-bind="{...data.gridSetting}"
:modelValue="state.grid1Data"
>
</AgGridVue>
</div>
</template>
<style scoped>
.task-view {
height: 100%;
}
.task-view > .grid1 {
height: 100%;
}
</style>
Loading…
Cancel
Save