Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
zrch-risk-39
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Administrator
zrch-risk-39
Commits
2ffff3e0
提交
2ffff3e0
authored
3月 12, 2026
作者:
liuluyu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新计划流程
上级
1ccf9919
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
93 行增加
和
53 行删除
+93
-53
StPlanManList.vue
zrch-risk-client-39/src/views/project/plan/StPlanManList.vue
+93
-53
没有找到文件。
zrch-risk-client-39/src/views/project/plan/StPlanManList.vue
浏览文件 @
2ffff3e0
...
...
@@ -100,7 +100,7 @@
</template>
<
script
lang=
"ts"
name=
"project-plan-stPlanManList"
setup
>
import
{
reactive
,
ref
,
toRaw
,
unref
}
from
'vue'
;
import
{
nextTick
,
reactive
,
ref
,
toRaw
,
unref
}
from
'vue'
;
import
{
batchDelete
,
deleteOne
,
getExportUrl
,
getImportUrl
,
handlePlan
,
list
}
from
'./StPlanMan.api'
;
import
{
columns
,
searchFormSchema
}
from
'./StPlanMan.data'
;
import
StPlanManModal
from
'./components/StPlanManModal.vue'
;
...
...
@@ -110,16 +110,18 @@
import
{
BasicTable
,
TableAction
}
from
'/@/components/Table'
;
import
{
useListPage
}
from
'/@/hooks/system/useListPage'
;
import
{
downloadFile
}
from
'/@/utils/common/renderUtils'
;
import
{
useUserStoreWithOut
}
from
'/@/store/modules/user'
;
import
{
message
}
from
'ant-design-vue'
;
import
{
definitionStartByDeployId
}
from
'/@/components/Process/api/definition'
;
import
{
useRoute
}
from
'vue-router'
;
// 引入待办任务组件
import
TodoIndex
from
'../../flowable/task/todo/components/TodoIndex.vue'
;
import
{
flowTaskInfo
}
from
'/@/components/Process/api/process
'
;
import
{
todoList
}
from
'/@/components/Process/api/todo
'
;
const
refTodoIndex
=
ref
();
const
isShowDrawer
=
ref
(
false
);
const
startUser
=
ref
<
string
>
(
''
);
const
taskName
=
ref
<
string
>
(
''
);
const
showUpBtn
=
ref
(
false
);
const
taskCache
=
new
Map
<
string
,
any
>
();
const
checkedKeys
=
ref
<
Array
<
string
|
number
>>
([]);
//注册model
...
...
@@ -226,52 +228,105 @@
});
}
const
user
=
useUserStoreWithOut
();
const
url
=
ref
(
`
${
import
.
meta
.
env
.
VITE_APP_JFLOW_CORE_ADDR
}
/#/WF/MyFlow?FlowNo=095&RouteFrom=MyFlow&visible=false&No=087&Name=计划审核流程&IsBatchStart=0&Icon=icon-plane&FK_FlowSort=101&FK_FlowSortText=流程基础&DomainExt=&MobileColorType=0&IsStartInMobile=1&Idx=3&WorkModel=0&SortIdx=0&FlowMark=&Btns=流程列表&Token=
${
user
.
getJflowToken
}
`
);
const
formData
=
ref
<
any
>
({});
// 填写的表单数据
//const refStPlanManFlow = ref()
function
handleFLow
(
record
:
Recordable
)
{
formData
.
value
.
dataId
=
record
.
id
;
formData
.
value
.
dataName
=
'id'
;
definitionStartByDeployId
(
record
.
deployId
,
formData
).
then
((
res
)
=>
{
console
.
log
(
"计划启动----------- res"
,
res
);
handleSuccess
();
});
async
function
findTodoTaskByProcInsId
(
procInsId
:
string
)
{
// 启动流程后,待办任务可能存在短暂延迟,做一个轻量重试
for
(
let
i
=
0
;
i
<
3
;
i
++
)
{
const
ret
=
await
todoList
({
pageNum
:
1
,
pageSize
:
10
,
procInsId
});
const
records
=
ret
?.
records
||
[];
const
hit
=
records
.
find
((
r
)
=>
r
?.
procInsId
===
procInsId
)
||
records
[
0
];
if
(
hit
)
return
hit
;
await
new
Promise
((
resolve
)
=>
setTimeout
(
resolve
,
300
));
}
return
undefined
;
}
//console.log("----------- record",record);
//window.open(url.value+"&kjzlid="+record.id, '_blank');
// refStPlanManFlow.value.iniPage(record);
function
pickStartResult
(
res
:
any
)
{
// defHttp 返回形态在不同后端/拦截器下可能是 data/result/直接对象,这里做一次兜底
const
base
=
res
?.
data
??
res
?.
result
??
res
;
return
base
||
{};
}
// 待办任务
// 待办任务:点击后若流程未启动则先启动,再在抽屉中完成流程操作
async
function
handleTodo
(
record
:
Recordable
)
{
isShowDrawer
.
value
=
true
;
console
.
log
(
'record'
,
record
);
if
(
record
.
taskId
||
record
.
procInsId
||
record
.
deployId
)
{
refTodoIndex
.
value
?.
iniData
?.(
record
);
const
dataId
=
record
.
id
||
record
.
dataId
||
record
.
businessId
;
if
(
!
dataId
)
{
message
.
error
(
'未找到业务数据标识'
);
return
;
}
// 优先使用本地缓存(用于刚启动后列表未回写 taskId/procInsId 的场景)
const
cached
=
taskCache
.
get
(
String
(
dataId
));
if
(
cached
&&
!
record
.
taskId
)
{
record
=
Object
.
assign
({},
record
,
cached
);
}
// 流程未启动时,先启动流程
const
needStartFlow
=
!
record
.
taskId
&&
!
record
.
procInsId
&&
(
record
[
'bpmStatus'
]
==
null
||
record
[
'bpmStatus'
]
==
''
||
record
[
'bpmStatus'
]
==
'1'
);
if
(
needStartFlow
&&
record
.
deployId
)
{
try
{
const
dataId
=
record
.
id
||
record
.
dataId
||
record
.
businessId
;
if
(
!
dataId
)
{
throw
new
Error
(
'未找到业务数据标识 (id)'
);
const
formData
=
{
dataId
,
dataName
:
'id'
};
const
startResRaw
=
await
definitionStartByDeployId
(
record
.
deployId
,
formData
);
const
startRes
=
pickStartResult
(
startResRaw
);
let
payload
:
any
=
Object
.
assign
({},
record
,
startRes
);
// 若启动接口未返回 taskId,则尝试通过 procInsId 从待办列表反查
if
(
!
payload
.
taskId
&&
payload
.
procInsId
)
{
const
todoRow
=
await
findTodoTaskByProcInsId
(
payload
.
procInsId
);
if
(
todoRow
?.
taskId
)
{
payload
=
Object
.
assign
({},
record
,
startRes
,
todoRow
);
}
const
info
=
await
flowTaskInfo
({
dataId
});
console
.
log
(
'获取到的流程任务信息:'
,
info
);
if
(
info
&&
(
info
.
taskId
||
info
.
procInsId
||
info
.
deployId
))
{
const
payload
=
Object
.
assign
({},
record
,
info
);
}
if
(
!
payload
.
taskId
)
{
message
.
error
(
'流程已启动,但未获取到待办任务'
);
return
;
}
taskCache
.
set
(
String
(
dataId
),
payload
);
startUser
.
value
=
payload
.
startUserName
||
payload
.
startUser
||
''
;
taskName
.
value
=
payload
.
taskName
||
payload
.
currentTaskName
||
''
;
isShowDrawer
.
value
=
true
;
await
nextTick
();
refTodoIndex
.
value
?.
iniData
?.(
payload
);
}
else
{
throw
new
Error
(
'未能从后端获取任务信息'
);
}
catch
(
e
)
{
console
.
error
(
'启动流程或获取任务失败:'
,
e
);
message
.
error
(
'操作失败,请重试'
);
}
return
;
}
// 流程已启动:优先使用 record.taskId,否则尝试用 procInsId 从待办列表反查
try
{
let
payload
:
any
=
{
...
record
};
if
(
!
payload
.
taskId
&&
payload
.
procInsId
)
{
const
todoRow
=
await
findTodoTaskByProcInsId
(
payload
.
procInsId
);
if
(
todoRow
?.
taskId
)
{
payload
=
Object
.
assign
({},
record
,
todoRow
);
}
}
if
(
!
payload
.
taskId
)
{
message
.
error
(
'未获取到待办任务(缺少 taskId),请确认列表是否返回 procInsId 或从【待办任务】菜单进入处理'
);
return
;
}
taskCache
.
set
(
String
(
dataId
),
payload
);
startUser
.
value
=
payload
.
startUserName
||
payload
.
startUser
||
''
;
taskName
.
value
=
payload
.
taskName
||
payload
.
currentTaskName
||
''
;
isShowDrawer
.
value
=
true
;
await
nextTick
();
refTodoIndex
.
value
?.
iniData
?.(
payload
);
}
catch
(
e
)
{
console
.
error
(
'获取流程任务信息失败:'
,
e
);
message
.
error
(
'获取任务信息失败'
);
}
}
async
function
handleSubmit
(
record
)
{
...
...
@@ -307,23 +362,8 @@
return
[
{
label
:
'修改'
,
// disabled: record['planFlag'] != '0' && record['planFlag'] != '2',
onClick
:
handleEdit
.
bind
(
null
,
record
),
},
{
label
:
'下一步'
,
onClick
:
handleFLow
.
bind
(
null
,
record
),
ifShow
:
()
=>
{
if
(
record
[
'bpmStatus'
]
==
null
||
record
[
'bpmStatus'
]
==
''
||
record
[
'bpmStatus'
]
==
'1'
)
return
true
;
else
return
false
;
},
//onClick: handleFLow.bind(null, record),
// disabled: record['planFlag'] != '0' && record['planFlag'] != '2',
// popConfirm: {
// title: '是否确认提交',
// confirm: handleSubmit.bind(null, record),
// },
},
{
label
:
'待办'
,
onClick
:
handleTodo
.
bind
(
null
,
record
),
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论