Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
zrch-risk-39
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Administrator
zrch-risk-39
Commits
e9d3668a
提交
e9d3668a
authored
4月 21, 2026
作者:
liuluyu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化计划管理字段
上级
04a473ce
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
139 行增加
和
212 行删除
+139
-212
Reject.vue
...ent-39/src/views/flowable/task/todo/components/Reject.vue
+54
-58
TodoIndex.vue
...-39/src/views/flowable/task/todo/components/TodoIndex.vue
+82
-44
StPlanMan.data.ts
zrch-risk-client-39/src/views/project/plan/StPlanMan.data.ts
+0
-51
StPlanManList.vue
zrch-risk-client-39/src/views/project/plan/StPlanManList.vue
+3
-32
StPlanManModal.vue
...t-39/src/views/project/plan/components/StPlanManModal.vue
+0
-27
没有找到文件。
zrch-risk-client-39/src/views/flowable/task/todo/components/Reject.vue
浏览文件 @
e9d3668a
...
...
@@ -4,7 +4,7 @@
@
register=
"register"
:centered=
"true"
title=
"驳回"
destroyOnClose
destroyOnClose
width=
"50%"
@
cancel=
"handleCancel"
:helpMessage=
"['帮助']"
...
...
@@ -14,107 +14,103 @@
</BasicModal>
</
template
>
<
script
lang=
"ts"
setup
>
import
{
ref
,
reactive
,
nextTick
}
from
'vue'
import
{
useForm
,
BasicForm
,
FormSchema
}
from
'/@/components/Form'
import
{
BasicModal
,
useModalInner
}
from
'/@/components/Modal'
import
{
rejectTask
,
getNextFlowNode
}
from
"/@/components/Process/api/todo"
import
{
ref
,
reactive
,
nextTick
}
from
'vue'
;
import
{
useForm
,
BasicForm
,
FormSchema
}
from
'/@/components/Form'
;
import
{
BasicModal
,
useModalInner
}
from
'/@/components/Modal'
;
import
{
rejectTask
,
getNextFlowNode
}
from
'/@/components/Process/api/todo'
;
const
checkSendUser
=
ref
()
const
checkType
=
ref
()
const
checkSendRole
=
ref
()
const
multiInstanceVars
=
ref
()
const
checkSendUser
=
ref
()
;
const
checkType
=
ref
()
;
const
checkSendRole
=
ref
()
;
const
multiInstanceVars
=
ref
()
;
const
flowTodoTask
=
ref
({})
const
flowTodoTask
=
ref
({});
const
onSuccess
=
ref
();
const
[
register
,
{
closeModal
,
setModalProps
}]
=
useModalInner
(
async
(
data
)
=>
{
const
params
=
{
taskId
:
data
.
data
.
taskId
}
flowTodoTask
.
value
=
data
.
data
//
alert(JSON.stringify(flowTodoTask.value))
//alert(JSON.stringify(data))
await
setNextNode
(
params
)
const
params
=
{
taskId
:
data
.
data
.
taskId
}
;
flowTodoTask
.
value
=
data
.
data
;
//
保存传入的onSuccess回调
onSuccess
.
value
=
data
.
onSuccess
;
await
setNextNode
(
params
)
;
});
const
formSchemas
:
FormSchema
[]
=
[
{
label
:
'驳回原因'
,
field
:
'comment'
,
component
:
'InputTextArea'
,
required
:
true
,
componentProps
:{
component
:
'InputTextArea'
,
required
:
true
,
componentProps
:
{
allowClear
:
true
,
showCount
:
true
,
autoSize
:{
autoSize
:
{
minRows
:
6
,
maxRows
:
10
maxRows
:
10
,
},
}
}
}
,
}
,
];
const
[
registerForm
,
{
setProps
,
validate
}]
=
useForm
({
schemas
:
formSchemas
,
showActionButtonGroup
:
false
,
});
const
handleCancel
=
()
=>
{
const
handleCancel
=
()
=>
{
closeModal
();
}
}
;
const
handleSetModalProps
=
()
=>
{
const
handleSetModalProps
=
()
=>
{
setModalProps
({
title
:
"流程审批"
})
}
title
:
'流程审批'
,
})
;
}
;
const
setNextNode
=
async
(
params
)
=>
{
getNextFlowNode
(
params
).
then
((
res
)
=>
{
if
(
res
==
null
)
{
if
(
res
==
null
)
{
closeModal
();
}
const
data
=
res
.
data
const
data
=
res
.
data
;
if
(
data
)
{
if
(
data
.
dataType
===
'dynamic'
)
{
if
(
data
.
type
===
'assignee'
)
{
// 指定人员
checkSendUser
.
value
=
true
checkType
.
value
=
'single'
checkSendUser
.
value
=
true
;
checkType
.
value
=
'single'
;
}
else
if
(
data
.
type
===
'candidateUsers'
)
{
// 候选人员(多个)
checkSendUser
.
value
=
true
checkType
.
value
=
'multiple'
checkSendUser
.
value
=
true
;
checkType
.
value
=
'multiple'
;
}
else
if
(
data
.
type
===
'candidateGroups'
)
{
// 指定组(所属角色接收任务)
checkSendRole
.
value
=
true
checkSendRole
.
value
=
true
;
}
else
{
// 会签
// 流程设计指定的 elementVariable 作为会签人员列表
multiInstanceVars
.
value
=
data
.
vars
checkSendUser
.
value
=
true
checkType
.
value
=
'multiple'
multiInstanceVars
.
value
=
data
.
vars
;
checkSendUser
.
value
=
true
;
checkType
.
value
=
'multiple'
;
}
}
}
})
}
});
};
const
saveReject
=
async
()
=>
{
const
formDataTmp
=
await
validate
();
formDataTmp
[
'procInsId'
]
=
flowTodoTask
.
value
.
procInsId
;
formDataTmp
[
'deployId'
]
=
flowTodoTask
.
value
.
deployId
;
formDataTmp
[
'taskId'
]
=
flowTodoTask
.
value
.
taskId
;
const
formDataTmp
=
await
validate
();
// alert(flowTodoTask.value.procInsId)
formDataTmp
[
"procInsId"
]
=
flowTodoTask
.
value
.
procInsId
formDataTmp
[
"deployId"
]
=
flowTodoTask
.
value
.
deployId
formDataTmp
[
"taskId"
]
=
flowTodoTask
.
value
.
taskId
await
rejectTask
(
formDataTmp
).
then
(
res
=>
{
closeModal
()
});
}
await
rejectTask
(
formDataTmp
).
then
((
res
)
=>
{
closeModal
();
// 调用传入的onSuccess回调
if
(
onSuccess
.
value
)
{
onSuccess
.
value
();
}
});
};
</
script
>
<
style
scoped
>
</
style
>
<
style
scoped
></
style
>
zrch-risk-client-39/src/views/flowable/task/todo/components/TodoIndex.vue
浏览文件 @
e9d3668a
...
...
@@ -14,19 +14,15 @@
<div
class=
"action-header"
>
<div
class=
"action-left"
>
<a-space>
<a-button
type=
"primary"
size=
"large"
@
click=
"handleSendTask"
:loading=
"sending"
class=
"action-btn"
>
<template
#
icon
><SendOutlined
/></
template
>
发送
</a-button>
<a-button
type=
"danger"
size=
"large"
@
click=
"handleReject"
:loading=
"rejecting"
class=
"action-btn"
>
<a-button
type=
"primary"
@
click=
"handleReject"
:loading=
"rejecting"
>
<template
#
icon
><CloseCircleOutlined
/></
template
>
驳回
</a-button>
<a-button
type=
"
danger"
size=
"large"
@
click=
"handleAssignTask"
:loading=
"assigning"
class=
"action-btn
"
>
<a-button
type=
"
primary"
@
click=
"handleAssignTask"
:loading=
"assigning
"
>
<
template
#
icon
><CloseCircleOutlined
/></
template
>
转办
</a-button>
<a-button
type=
"
danger"
size=
"large"
@
click=
"handleAssignReadTask"
:loading=
"assiReadgning"
class=
"action-btn
"
>
<a-button
type=
"
primary"
@
click=
"handleAssignReadTask"
:loading=
"assiReadgning
"
>
<
template
#
icon
><CloseCircleOutlined
/></
template
>
转阅
</a-button>
...
...
@@ -76,17 +72,12 @@
<!-- 右侧审批栏 -->
<div
class=
"sidebar-section"
v-if=
"showApprovalUi"
>
<a-card
:title=
"approvalTitle"
:bordered=
"false"
class=
"approval-card"
>
<BasicForm
@
register=
"registerForm"
style=
"width: 100%s"
/>
<!-- <div class="form-tips" v-if="isApproval">
<a-alert
message="提示"
description="请认真填写审批意见,审批完成后将无法修改"
type="info"
show-icon
class="tips-alert"
/>
</div> -->
<BasicForm
@
register=
"registerForm"
style=
"width: 100%"
/>
<div
class=
"form-footer"
>
<a-space
:size=
"12"
>
<a-button
@
click=
"handleSendTask"
type=
"primary"
>
提交
</a-button>
</a-space>
</div>
</a-card>
</div>
</div>
...
...
@@ -201,7 +192,7 @@
</template>
<
script
lang=
"ts"
setup
>
import
{
ref
,
reactive
,
nextTick
,
computed
}
from
'vue'
;
import
{
ref
,
reactive
,
nextTick
,
computed
,
watch
}
from
'vue'
;
import
{
message
}
from
'ant-design-vue'
;
import
{
UserOutlined
,
...
...
@@ -258,7 +249,6 @@
const
res0
=
ref
();
const
res1
=
ref
();
const
res3
=
ref
();
const
taskForm
=
reactive
({
returnTaskShow
:
false
,
...
...
@@ -300,6 +290,34 @@
return
nextNode
.
value
?.
type
||
''
;
});
// // 3. 监听依赖项变化,动态更新 label、ifShow 和 componentProps
// watch(
// [isApproval, userType],
// async () => {
// const isApp = isApproval.value;
// const isNotRole = userType.value !== 'role';
// // 等待 DOM 更新完成后再执行更新
// await nextTick();
// updateSchema({
// field: 'checkSendUser',
// label: isApp ? '接收人' : '审批人',
// ifShow: isNotRole,
// componentProps: {
// allowClear: true,
// rowKey: 'id',
// labelKey: 'realname',
// showButton: false,
// mode: 'multiple',
// modalTitle: isApp ? '选择接收人' : '选择审批人',
// placeholder: isApp ? '请选择接收人' : '请选择审批人',
// },
// });
// },
// { immediate: true }
// ); // immediate: true 保证初始状态也能正确配置
// 表单配置
const
formSchemas
=
[
{
...
...
@@ -326,8 +344,7 @@
label
:
'接收人'
,
field
:
'checkSendUser'
,
component
:
'JSelectUser'
,
required
:
false
,
ifShow
:
computed
(()
=>
userType
.
value
!==
'role'
),
required
:
true
,
componentProps
:
{
allowClear
:
true
,
rowKey
:
'id'
,
...
...
@@ -337,7 +354,40 @@
placeholder
:
'请选择接收人'
,
mode
:
'multiple'
,
},
rules
:
[{
required
:
true
,
message
:
'请选择接收人'
}],
},
// {
// label: '用户',
// field: 'checkSendUser',
// component: 'JSelectUser',
// rules: [
// {
// required: true,
// validator: async (_rule, value) => {
// if (!value || value.length === 0) {
// // 在这里动态获取提示文本
// const errorMsg = isApproval.value ? '请选择接收人' : '请选择审批人';
// throw new Error(errorMsg);
// }
// return Promise.resolve();
// },
// trigger: 'change', // 触发时机:change 或 blur
// },
// ],
// },
{
label
:
'抄送人'
,
field
:
'copyUser'
,
component
:
'JSelectUser'
,
required
:
false
,
componentProps
:
{
allowClear
:
true
,
rowKey
:
'id'
,
labelKey
:
'realname'
,
showButton
:
false
,
modalTitle
:
'选择抄送人'
,
placeholder
:
'请选择抄送人'
,
mode
:
'multiple'
,
},
},
{
label
:
'接收角色'
,
...
...
@@ -357,17 +407,20 @@
},
];
const
[
registerForm
,
{
validate
,
setFieldsValue
,
removeSchemaByFiled
,
resetFields
}]
=
useForm
({
const
[
registerForm
,
{
validate
,
setFieldsValue
,
removeSchemaByFiled
,
resetFields
,
updateSchema
}]
=
useForm
({
schemas
:
formSchemas
as
any
,
showActionButtonGroup
:
false
,
baseColProps
:
{
span
:
24
},
labelWidth
:
100
,
layout
:
'vertical'
,
autoSubmitOnEnter
:
false
,
//不显示重置按钮
showResetButton
:
false
,
//自定义提交按钮文本和图标
submitButtonOptions
:
{
text
:
'提交'
,
preIcon
:
''
},
});
const
emit
=
defineEmits
([
'callback'
,
'success'
,
'error'
]);
// 方法
const
handleTabClick
=
async
(
key
:
string
)
=>
{
if
(
key
===
'1'
&&
!
formLoading
.
value
)
{
...
...
@@ -536,16 +589,14 @@
submitData
.
values
[
'userTaskid'
]
=
nextNodeNameSelevue
.
value
;
}
if
(
!
showApprovalUi
.
value
)
{
const
result
=
await
complete
(
submitData
);
const
result
=
await
complete
(
submitData
);
message
.
success
(
'任务结束成功'
);
emit
(
'success'
,
result
);
emit
(
'callback'
);
return
false
;
}
const
formData
=
await
validate
();
Object
.
assign
(
submitData
,
formData
);
...
...
@@ -566,9 +617,6 @@
submitData
.
values
[
'approval'
]
=
formData
.
checkSendRole
;
submitData
.
values
[
'approvalType'
]
=
'role'
;
}
// }
console
.
log
(
"-----------submitData "
,
submitData
);
// 执行发送
const
result
=
await
complete
(
submitData
);
...
...
@@ -579,7 +627,6 @@
if
(
error
.
errorFields
)
{
message
.
error
(
'请完善表单信息'
);
}
else
{
console
.
error
(
'发送任务失败:'
,
error
);
message
.
error
(
error
.
message
||
'发送任务失败'
);
}
}
finally
{
...
...
@@ -592,6 +639,7 @@
isUpdate
:
false
,
data
:
workFlowData
.
value
,
onSuccess
:
()
=>
{
message
.
error
(
'任务已驳回'
);
emit
(
'callback'
);
},
});
...
...
@@ -661,10 +709,10 @@
isApproval
.
value
=
data
.
nodeisApprove
;
if
(
!
isApproval
.
value
)
{
approvalTitle
.
value
=
'选择
接收人
'
;
approvalTitle
.
value
=
'选择
人员
'
;
removeSchemaByFiled
(
'comment'
);
}
else
{
approvalTitle
.
value
=
'填写
审批意见和接收人
'
;
approvalTitle
.
value
=
'填写
意见
'
;
}
if
(
taskForm
.
taskId
)
{
...
...
@@ -928,16 +976,6 @@
flex
:
1
;
}
.action-btn
{
height
:
40px
;
padding
:
0
24px
;
font-weight
:
500
;
:deep
(
.anticon
)
{
font-size
:
16px
;
}
}
.action-right
{
.next-node-info
{
display
:
flex
;
...
...
zrch-risk-client-39/src/views/project/plan/StPlanMan.data.ts
浏览文件 @
e9d3668a
...
...
@@ -53,20 +53,6 @@ export const columns: BasicColumn[] = [
width
:
120
,
ellipsis
:
true
,
},
{
title
:
'执行部门'
,
align
:
'center'
,
dataIndex
:
'execDepName'
,
width
:
140
,
ellipsis
:
true
,
},
{
title
:
'负责人'
,
align
:
'center'
,
dataIndex
:
'headName'
,
width
:
100
,
ellipsis
:
true
,
},
{
title
:
'优先级'
,
align
:
'center'
,
...
...
@@ -117,13 +103,6 @@ export const columns: BasicColumn[] = [
return
!
text
?
'-'
:
text
.
length
>
10
?
text
.
substr
(
0
,
10
)
:
text
;
},
},
{
title
:
'计划状态'
,
align
:
'center'
,
dataIndex
:
'statusName'
,
width
:
100
,
ellipsis
:
true
,
},
{
title
:
'流程状态'
,
align
:
'center'
,
...
...
@@ -161,16 +140,6 @@ export const searchFormSchema: FormSchema[] = [
placeholder
:
'请选择类型'
,
},
},
{
label
:
'执行部门'
,
field
:
'execDepCode'
,
component
:
'Select'
,
colProps
:
{
span
:
6
},
componentProps
:
{
allowClear
:
true
,
placeholder
:
'请选择执行部门'
,
},
},
{
label
:
'计划状态'
,
field
:
'status'
,
...
...
@@ -241,26 +210,6 @@ export const formSchema: FormSchema[] = [
return
[{
required
:
true
,
message
:
'请选择计划类型!'
}];
},
},
{
label
:
'执行部门'
,
field
:
'execDepCode'
,
component
:
'JSelectDept'
,
colProps
:
{
lg
:
12
},
itemProps
:
{
labelCol
:
{
xs
:
{
span
:
24
},
sm
:
{
span
:
6
}
},
wrapperCol
:
{
xs
:
{
span
:
24
},
sm
:
{
span
:
18
}
}
},
dynamicRules
:
({
model
,
schema
})
=>
{
return
[{
required
:
false
,
message
:
'请选择执行部门!'
}];
},
},
{
label
:
'负责人'
,
field
:
'headId'
,
component
:
'JSearchSelectDuty'
,
colProps
:
{
lg
:
12
},
itemProps
:
{
labelCol
:
{
xs
:
{
span
:
24
},
sm
:
{
span
:
6
}
},
wrapperCol
:
{
xs
:
{
span
:
24
},
sm
:
{
span
:
18
}
}
},
dynamicRules
:
({
model
,
schema
})
=>
{
return
[{
required
:
false
,
message
:
'请选择负责人!'
}];
},
},
{
label
:
'计划开始日期'
,
field
:
'planStartDate'
,
...
...
zrch-risk-client-39/src/views/project/plan/StPlanManList.vue
浏览文件 @
e9d3668a
<
template
>
<div
class=
"plan-management-page"
>
<!-- 页面头部区域 -->
<!--
<div
class=
"page-header"
>
<div
class=
"header-content"
>
<div
class=
"header-left"
>
<h1
class=
"page-title"
>
计划编制管理
</h1>
<p
class=
"page-desc"
>
统一管理和追踪所有业务计划的编制与审批流程
</p>
</div>
<div
class=
"header-stats"
>
<div
class=
"stat-item"
>
<span
class=
"stat-value"
>
--
</span>
<span
class=
"stat-label"
>
计划总数
</span>
</div>
<div
class=
"stat-item warning"
>
<span
class=
"stat-value"
>
--
</span>
<span
class=
"stat-label"
>
待处理
</span>
</div>
<div
class=
"stat-item success"
>
<span
class=
"stat-value"
>
--
</span>
<span
class=
"stat-label"
>
已完成
</span>
</div>
</div>
</div>
</div>
-->
<!-- 主内容区 -->
<div
class=
"main-content"
>
<!-- 搜索区域 -->
...
...
@@ -44,11 +20,6 @@
</a-form-item>
</a-col>
<a-col
:xl=
"5"
:lg=
"8"
:md=
"12"
:sm=
"24"
>
<a-form-item
label=
"执行部门"
>
<JSelectDept
placeholder=
"请选择执行部门"
v-model:value=
"queryParam['execDepCode']"
/>
</a-form-item>
</a-col>
<a-col
:xl=
"4"
:lg=
"8"
:md=
"12"
:sm=
"24"
>
<a-form-item
label=
"计划状态"
>
<a-select
v-model:value=
"queryParam['status']"
...
...
@@ -408,7 +379,7 @@
if
(
needStartFlow
&&
record
.
deployId
)
{
try
{
const
formData
=
{
dataId
,
dataName
:
'id'
,
tasktitle
:
record
.
projectName
};
const
formData
=
{
dataId
,
dataName
:
'id'
,
tasktitle
:
record
.
projectName
};
const
startResRaw
=
await
definitionStartByDeployId
(
record
.
deployId
,
formData
);
const
startRes
=
pickStartResult
(
startResRaw
);
...
...
@@ -545,8 +516,8 @@
{
label
:
'待办'
,
ifShow
:
()
=>
{
console
.
log
(
"-------------record['uid'] "
,
record
[
'uid'
]);
console
.
log
(
"-------------userStore.getUserInfo.id "
,
userStore
.
getUserInfo
.
id
);
console
.
log
(
"-------------record['uid'] "
,
record
[
'uid'
]);
console
.
log
(
'-------------userStore.getUserInfo.id '
,
userStore
.
getUserInfo
.
id
);
if
(
record
[
'bpmStatus'
]
==
'2'
&&
record
[
'uid'
]
==
userStore
.
getUserInfo
.
id
)
return
true
;
else
return
false
;
},
...
...
zrch-risk-client-39/src/views/project/plan/components/StPlanManModal.vue
浏览文件 @
e9d3668a
...
...
@@ -36,19 +36,6 @@
</a-form-item>
</a-col>
</a-row>
<!-- 第二行:执行部门 + 负责人 -->
<a-row
:gutter=
"16"
>
<a-col
:span=
"12"
>
<a-form-item
label=
"执行部门"
name=
"execDepCode"
:label-col=
"
{ span: 6 }" :wrapper-col="{ span: 18 }">
<JSelectDept
v-model:value=
"formModel.execDepCode"
placeholder=
"请选择执行部门"
:disabled=
"isDetail"
/>
</a-form-item>
</a-col>
<a-col
:span=
"12"
>
<a-form-item
label=
"负责人"
name=
"headId"
:label-col=
"
{ span: 6 }" :wrapper-col="{ span: 18 }">
<JSearchSelectDuty
v-model:value=
"formModel.headId"
placeholder=
"请选择负责人"
:disabled=
"isDetail"
/>
</a-form-item>
</a-col>
</a-row>
<!-- 第三行:开始日期 + 结束日期 -->
<a-row
:gutter=
"16"
>
<a-col
:span=
"12"
>
...
...
@@ -256,17 +243,11 @@
const
formModel
=
reactive
({
projectName
:
''
,
projectType
:
''
,
execDepCode
:
''
,
execDepName
:
''
,
headId
:
''
,
headName
:
''
,
priority
:
'2'
,
planRequest
:
''
,
planDeliverable
:
''
,
planStartDate
:
''
,
planEndDate
:
''
,
basisList
:
[],
executeType
:
''
,
projectDesc
:
''
,
fileUploadPath
:
''
,
planBasis
:
''
,
...
...
@@ -275,7 +256,6 @@
exePeriod
:
undefined
,
firstExecDate
:
''
,
completionRate
:
0
,
statusName
:
''
,
id
:
''
,
});
...
...
@@ -283,17 +263,11 @@
Object
.
assign
(
formModel
,
{
projectName
:
''
,
projectType
:
''
,
execDepCode
:
''
,
execDepName
:
''
,
headId
:
''
,
headName
:
''
,
priority
:
'2'
,
planRequest
:
''
,
planDeliverable
:
''
,
planStartDate
:
''
,
planEndDate
:
''
,
basisList
:
[],
executeType
:
''
,
projectDesc
:
''
,
fileUploadPath
:
''
,
planBasis
:
''
,
...
...
@@ -302,7 +276,6 @@
exePeriod
:
undefined
,
firstExecDate
:
''
,
completionRate
:
0
,
statusName
:
''
,
id
:
''
,
});
};
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论