build / build (push) Successful in 1m55s
NOTIFY(2026-09-23):编辑器抄送卡片+抽屉+画布 bpmn:ServiceTask 映射、工作台「抄送我的」页签、轨迹 kind=CC 行、示意图青框卡片 CONDITION(2026-09-24):ConditionBox 互斥分支容器(分支列出口名就地编辑、无 JOIN 语义分支尾隐式汇合)、ConditionDrawer 判断服务下拉(flw_router)、convert 双向序列化(CONDITION+命名出边、uid+c 尾缀往返收敛)、validate 镜像后端口径、画布 bpmn:ExclusiveGateway 映射、轨迹「系统判断→出口」行(失败挂起提示)、示意图紫菱形(SVG 与服务端 PNG 同配色)、管理面 flw_router 维护页(/admin/routers)与办件记录「重跑路由」入口 convert 往返 54 项全过、npm run build 通过
79 lines
4.0 KiB
Vue
79 lines
4.0 KiB
Vue
<script setup lang="ts">
|
||
// 办件记录(管理端):全校办件查询;CONDITION 判断失败挂起的办件在此"重跑路由"恢复
|
||
import { ref } from "vue";
|
||
import { useRouter } from "vue-router";
|
||
import { Message } from "view-ui-plus";
|
||
import MyConfirm from "@/components/MyConfirm";
|
||
import { OperatorEnum } from "@/types";
|
||
import TablePageAlovaNew from "@/components/TablePageAlovaNew.vue";
|
||
import { flowApi, INSTANCE_STATUS, INSTANCE_STATUS_COLOR } from "@/api/module/flow";
|
||
import Utils from "@/utils";
|
||
|
||
const router = useRouter();
|
||
const tableRef = ref<InstanceType<typeof TablePageAlovaNew> | null>(null);
|
||
const tableHeight = ref(Utils.useTableHeight({ isSearch: true, isPage: true }));
|
||
const dataParams = ref<{ status?: number; keyword?: string }>({ status: undefined, keyword: "" });
|
||
|
||
const columns = [
|
||
{ title: "序号", type: "index", width: 70, align: "center" },
|
||
{ title: "办件标题", key: "bizTitle", minWidth: 220 },
|
||
{ title: "业务", width: 170, render: (h: any, p: any) => h("span", `${p.row.bizType || "-"}/${p.row.bizId || "-"}`) },
|
||
{ title: "状态", width: 100, align: "center", render: (h: any, p: any) =>
|
||
h("Tag", { color: INSTANCE_STATUS_COLOR[p.row.status] || "gray" }, () => INSTANCE_STATUS[p.row.status] || p.row.status) },
|
||
{ title: "提交人", key: "submitterName", width: 100 },
|
||
{ title: "提交时间", width: 160, render: (h: any, p: any) => h("span", (p.row.submitTime || "").replace("T", " ")) },
|
||
{ title: "操作", width: 170, align: "center", fixed: "right", render: (h: any, p: any) => [
|
||
Utils.operatingHandle(h, "详情", "icon-browse", () => router.push(`/instance/${p.row.id}?pid=102`)),
|
||
h("span", { style: "display:inline-block;width:10px" }),
|
||
// 仅审批中的办件可能挂在条件分支节点(重跑入口对非挂起办件会得到业务错提示)
|
||
p.row.status === 10
|
||
? Utils.operatingHandle(h, "重跑路由", "icon-play", () => onReroute(p.row))
|
||
: h("span"),
|
||
] },
|
||
];
|
||
|
||
/** 重跑路由(2026-09-24 §4.4):重新调判断服务,成功即按出口续走;仍失败回业务错(办件继续挂起) */
|
||
function onReroute(row: any) {
|
||
MyConfirm({
|
||
title: "重跑路由",
|
||
msg: `确定对办件「${row.bizTitle || row.id}」重跑条件路由判断吗?`,
|
||
info: "仅对挂在条件分支节点的挂起办件生效(未挂起的会提示无需重跑)",
|
||
async onOk() {
|
||
await flowApi.instanceReroute(row.id).send();
|
||
Message.success("路由已重跑,流程按新判断结果继续");
|
||
tableRef.value?.reloadData(OperatorEnum.edit);
|
||
},
|
||
});
|
||
}
|
||
|
||
// dataApi 返回 Method(alova usePagination 负责发送与解包),不能调 .send()
|
||
const tableApi = (p: { pageIndex: number; pageSize: number }) => {
|
||
const params: any = { page: p.pageIndex, size: p.pageSize };
|
||
if (dataParams.value.status) params.status = dataParams.value.status;
|
||
if (dataParams.value.keyword) params.keyword = dataParams.value.keyword.trim();
|
||
return flowApi.adminInstances(params);
|
||
};
|
||
|
||
function onSearch() {
|
||
tableRef.value?.refreshData();
|
||
}
|
||
</script>
|
||
|
||
<template>
|
||
<div class="page-wrapper">
|
||
<div class="main-container">
|
||
<div class="search-wrap fix">
|
||
<Select v-model="dataParams.status" class="search-wrap_sel" clearable placeholder="状态" @on-change="onSearch">
|
||
<Option :value="10" label="审批中" />
|
||
<Option :value="20" label="已完成" />
|
||
<Option :value="30" label="已拒绝" />
|
||
<Option :value="40" label="已撤回" />
|
||
</Select>
|
||
<Input class="fr" v-model="dataParams.keyword" placeholder="标题关键字" search suffix="ios-search"
|
||
style="width: 200px" @on-search="onSearch" @on-clear="onSearch" />
|
||
</div>
|
||
<TablePageAlovaNew ref="tableRef" :dataApi="tableApi" :columns="columns" :tableHeight="tableHeight" />
|
||
</div>
|
||
</div>
|
||
</template>
|