明树Git Lab
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
J
jt_front
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
jt_front
Commits
0dcbdc2c
Commit
0dcbdc2c
authored
May 15, 2026
by
zhanghan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
需求处理完毕
parent
bf1aa83c
Pipeline
#111393
passed with stage
in 23 seconds
Changes
6
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
153 additions
and
89 deletions
+153
-89
ProcessFlowChart.vue
src/components/common/ProcessFlowChart.vue
+6
-1
routerBack.vue
src/components/common/routerBack.vue
+69
-32
addProject.vue
src/views/projectManage/addProject.vue
+64
-30
LixiangApproval.vue
...s/projectManage/addProject/components/LixiangApproval.vue
+2
-5
LixiangBasicInfo.vue
.../projectManage/addProject/components/LixiangBasicInfo.vue
+2
-5
projectSetUp.vue
src/views/projectManage/projectSetUp.vue
+10
-16
No files found.
src/components/common/ProcessFlowChart.vue
View file @
0dcbdc2c
...
...
@@ -127,6 +127,12 @@ const simpleLevelMap = {
3
:
3
,
4
:
3
,
5
:
4
,
7
:
2
,
8
:
3
,
9
:
4
,
13
:
4
,
14
:
4
,
15
:
4
,
};
const
activeNodes
=
computed
(()
=>
{
...
...
@@ -150,7 +156,6 @@ const highlightLevel = computed(() => {
});
const
flowTitle
=
computed
(()
=>
{
if
(
props
.
flowType
===
"simple"
)
return
"立项审批流程"
;
return
props
.
currentState
>=
7
?
"决策审批流程"
:
"立项审批流程"
;
});
...
...
src/components/common/routerBack.vue
View file @
0dcbdc2c
...
...
@@ -53,8 +53,10 @@
<div
class=
"process-project-name"
v-if=
"processInfo.projectName"
>
项目名称:
<span
class=
"name"
>
{{
processInfo
.
projectName
}}
</span>
</div>
<div
class=
"process-section"
v-if=
"lxProcessData.length"
>
<div
class=
"process-section-title"
>
立项审批
</div>
<el-table
:data=
"p
rocessData"
:data=
"lxP
rocessData"
border
style=
"width: 100%"
class=
"process-table"
...
...
@@ -71,19 +73,37 @@
<el-table-column
label=
"操作人"
min-width=
"100"
>
<template
#
default=
"
{ row }">
{{
row
.
creator
?.
name
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"actionName"
label=
"项目步骤"
min-width=
"120"
/>
<el-table-column
prop=
"approvalMessage"
label=
"审核意见"
min-width=
"120"
/>
<el-table-column
prop=
"actionName"
label=
"项目步骤"
min-width=
"120"
/>
<el-table-column
prop=
"approvalMessage"
label=
"审核意见"
min-width=
"120"
/>
<el-table-column
prop=
"createdAt"
label=
"时间"
min-width=
"160"
/>
</el-table>
</div>
<div
class=
"process-section"
v-if=
"jcProcessData.length"
>
<div
class=
"process-section-title"
>
决策审批
</div>
<el-table
:data=
"jcProcessData"
border
style=
"width: 100%"
class=
"process-table"
:header-cell-style=
"{
background: '#f5f7fa',
color: '#333',
textAlign: 'center',
fontWeight: 600,
}"
:cell-style=
"{ textAlign: 'center' }"
>
<el-table-column
type=
"index"
label=
"序号"
width=
"60"
/>
<el-table-column
prop=
"actionName"
label=
"操作"
min-width=
"120"
/>
<el-table-column
label=
"操作人"
min-width=
"100"
>
<
template
#
default=
"{ row }"
>
{{
row
.
creator
?.
name
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"actionName"
label=
"项目步骤"
min-width=
"120"
/>
<el-table-column
prop=
"approvalMessage"
label=
"审核意见"
min-width=
"120"
/>
<el-table-column
prop=
"createdAt"
label=
"时间"
min-width=
"160"
/>
</el-table>
</div>
</div>
<div
class=
"process-right"
>
<ProcessFlowChart
:flow-type=
"effectiveFlowType"
...
...
@@ -135,7 +155,11 @@ const props = defineProps({
type
:
Object
,
default
:
()
=>
({}),
},
processData
:
{
lxProcessData
:
{
type
:
Array
,
default
:
()
=>
[],
},
jcProcessData
:
{
type
:
Array
,
default
:
()
=>
[],
},
...
...
@@ -154,7 +178,7 @@ const emit = defineEmits(["save", "back", "export", "process"]);
const
route
=
useRoute
();
const
router
=
useRouter
();
const
effectiveFlowType
=
computed
(()
=>
{
const
firstRecord
=
props
.
p
rocessData
[
0
];
const
firstRecord
=
props
.
lxP
rocessData
[
0
];
console
.
log
(
'[FlowType] 发起人记录:'
,
firstRecord
?
JSON
.
stringify
({
actionName
:
firstRecord
.
actionName
,
creator
:
firstRecord
.
creator
?.
name
,
...
...
@@ -250,4 +274,17 @@ const handleProcess = () => {
font-weight
:
700
;
}
}
.process-section
{
margin-bottom
:
20px
;
}
.process-section-title
{
font-size
:
15px
;
font-weight
:
600
;
color
:
#333
;
margin-bottom
:
10px
;
padding-left
:
8px
;
border-left
:
3px
solid
#409eff
;
}
</
style
>
src/views/projectManage/addProject.vue
View file @
0dcbdc2c
...
...
@@ -2,16 +2,12 @@
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
:show-save=
"
!loading &&
!isPreview &&
(!formData.projectLzType ||
['1', '5', '7'].includes(formData.projectLzType.toString()))
"
:show-save=
"!loading && showSave"
:loading=
"loading"
:show-process=
"!!projectId"
:process-info=
"processInfo"
:process-data=
"processTableData"
:lx-process-data=
"lxProcessData"
:jc-process-data=
"jcProcessData"
:flow-type=
"flowType"
:current-state=
"currentFlowState"
@
save=
"() => saveClick('save')"
...
...
@@ -35,9 +31,7 @@
<el-tab-pane
label=
"决策信息填报"
name=
"决策信息填报"
v-if=
"
formData.projectLzType == '5' || formData.projectLzType == '7'
"
v-if=
"Number(lxType) >= 5"
:lazy=
"true"
>
<el-tabs
v-model=
"jcTabActiveName"
>
...
...
@@ -63,52 +57,41 @@
<template
v-if=
"!loading && !isPreview"
>
<el-button
type=
"primary"
v-if=
"
formData.projectLzType == '1' &&
formData.projectCreator == userInfo?.id
"
v-if=
"showSubmitLixiang"
@
click=
"saveClick('submit')"
>
发起立项填报
</el-button
>
<el-button
type=
"primary"
v-if=
"
jcFormData.projectLzType == '7'
"
v-if=
"
showSubmitJuece
"
@
click=
"saveClick('submit')"
>
发起决策信息填报
</el-button
>
</
template
>
<el-button
type=
"primary"
@
click=
"saveClick('save')"
<el-button
type=
"primary"
v-if=
"showSave"
@
click=
"saveClick('save')"
>
保存
</el-button
>
<el-button
v-if=
"formData.projectLzType == '3'"
type=
"primary"
v-if=
"showFirstAudit"
@
click=
"auditDialogVisible = true"
>
初审
</el-button
>
<el-button
v-if=
"
formData?.daibanUsers?.includes(userInfo?.id) &&
hasApproveRole &&
formData.projectLzType == '4'
"
type=
"primary"
v-if=
"showAuditLixiang"
@
click=
"auditDialogVisible = true"
>
审核
</el-button
>
<el-button
v-if=
"isPreview && jcFormData.projectLzType == '8'"
type=
"primary"
v-if=
"showAuditJuece"
@
click=
"auditDialogVisible = true"
>
审核
</el-button
>
<el-button
v-if=
"
formData?.daibanUsers?.includes(userInfo?.id) &&
hasApproveRole &&
formData?.projectLzType == '2'
"
type=
"primary"
v-if=
"showApprove"
@
click=
"approveDialogVisible = true"
>
核准
</el-button
>
...
...
@@ -302,6 +285,49 @@ let loading = ref(false);
let
isPreview
=
!!
(
route
.
query
.
isPreview
||
route
.
query
.
isProjectView
);
let
projectId
=
route
.
query
.
projectId
;
const
lxType
=
computed
(()
=>
formData
.
projectLzType
?.
toString
());
const
jcType
=
computed
(()
=>
jcFormData
.
projectLzType
?.
toString
());
const
isDaibanUser
=
computed
(()
=>
formData
?.
daibanUsers
?.
includes
(
userInfo
?.
id
),
);
// 表单禁用状态:基于流程节点 + 待办人判断
const
lxFormDisabled
=
computed
(()
=>
{
if
(
isPreview
)
return
true
;
if
(
!
lxType
.
value
)
return
false
;
if
(
lxType
.
value
===
"1"
)
return
formData
.
projectCreator
!==
userInfo
?.
id
;
if
([
"2"
,
"3"
,
"4"
,
"5"
].
includes
(
lxType
.
value
))
return
!
isDaibanUser
.
value
;
return
true
;
});
const
jcFormDisabled
=
computed
(()
=>
{
if
(
isPreview
)
return
true
;
if
([
"5"
,
"7"
,
"8"
].
includes
(
jcType
.
value
))
return
!
isDaibanUser
.
value
;
return
true
;
});
const
showSave
=
computed
(
()
=>
!
isPreview
&&
(
!
formData
.
id
||
formData
.
projectCreator
===
userInfo
?.
id
),
);
const
showSubmitLixiang
=
computed
(
()
=>
lxType
.
value
===
"1"
&&
formData
.
projectCreator
===
userInfo
?.
id
,
);
const
showSubmitJuece
=
computed
(
()
=>
jcType
.
value
===
"7"
&&
formData
.
projectCreator
===
userInfo
?.
id
,
);
const
showFirstAudit
=
computed
(
()
=>
isDaibanUser
.
value
&&
lxType
.
value
===
"3"
,
);
const
showAuditLixiang
=
computed
(
()
=>
isDaibanUser
.
value
&&
hasApproveRole
&&
lxType
.
value
===
"4"
,
);
const
showAuditJuece
=
computed
(
()
=>
isDaibanUser
.
value
&&
jcType
.
value
===
"8"
,
);
const
showApprove
=
computed
(
()
=>
isDaibanUser
.
value
&&
hasApproveRole
&&
lxType
.
value
===
"2"
,
);
// 下载文件
const
downloadFile
=
(
data
)
=>
{
let
a
=
document
.
createElement
(
"a"
);
...
...
@@ -367,6 +393,7 @@ const getObjSums = (obj, objkey) => {
provide
(
"lxShared"
,
{
formData
,
isPreview
,
formDisabled
:
lxFormDisabled
,
activeCollapse
,
...
lixiang
,
downloadFile
,
...
...
@@ -381,6 +408,7 @@ provide("jcShared", {
jcFormData
,
formData
,
isPreview
,
formDisabled
:
jcFormDisabled
,
activeCollapse
,
...
juece
,
...
finance
,
...
...
@@ -448,7 +476,7 @@ const getProjectInfo = () => {
}
// 决策
let
jcData
=
res
.
juece
||
res
.
lixiang
||
{};
let
jcData
=
res
.
juece
||
{};
Object
.
assign
(
jcFormData
,
jcData
);
if
(
res
.
juece
)
{
Object
.
assign
(
juece
.
jcSwlzbData
,
jcData
.
projectJsgms
);
...
...
@@ -518,7 +546,7 @@ const backClick = () => {
// 保存数据
const
saveClick
=
(
type
)
=>
{
if
(
!
formData
.
projectLzType
||
formData
.
projectLzType
.
toString
()
===
"1"
)
{
if
(
!
formData
.
projectLzType
||
Number
(
formData
.
projectLzType
)
<=
4
)
{
let
url
=
formData
.
id
?
type
===
"submit"
?
"startLixiang"
...
...
@@ -606,6 +634,12 @@ const processInfo = computed(() => ({
projectName
:
formData
.
projectName
,
}));
const
processTableData
=
ref
([]);
const
lxProcessData
=
computed
(()
=>
processTableData
.
value
.
filter
((
r
)
=>
!
r
.
actionName
?.
includes
(
"决策"
))
);
const
jcProcessData
=
computed
(()
=>
processTableData
.
value
.
filter
((
r
)
=>
r
.
actionName
?.
includes
(
"决策"
))
);
const
getProcessData
=
()
=>
{
proxy
.
$post
({
url
:
"/api/project/getProFlowRecord"
,
...
...
src/views/projectManage/addProject/components/LixiangApproval.vue
View file @
0dcbdc2c
...
...
@@ -4,11 +4,7 @@
<el-form
:model=
"formData"
:label-width=
"150"
:disabled=
"
isPreview ||
(Number(formData.projectLzType)
<
=
5
&&
Number
(
formData
.
projectLzType
)
!=
1
)
"
:disabled=
"isPreview || Number(formData.projectLzType) >= 5"
>
<el-collapse
v-model=
"activeCollapse"
>
<el-collapse-item
...
...
@@ -262,6 +258,7 @@ import FileUploader from "@/components/FileUploader/index.vue";
const
{
formData
,
isPreview
,
formDisabled
,
activeCollapse
,
tzzeqkjData
,
cwpjzbData
,
...
...
src/views/projectManage/addProject/components/LixiangBasicInfo.vue
View file @
0dcbdc2c
...
...
@@ -4,11 +4,7 @@
<el-form
:model=
"formData"
label-width=
"200px"
:disabled=
"
isPreview ||
(Number(formData.projectLzType)
<
=
5
&&
Number
(
formData
.
projectLzType
)
!=
1
)
"
:disabled=
"isPreview || Number(formData.projectLzType) >= 5"
>
<el-collapse
v-model=
"activeCollapse"
>
<el-collapse-item
title=
"项目基本信息"
name=
"项目基本信息"
>
...
...
@@ -637,6 +633,7 @@ import FileUploader from "@/components/FileUploader/index.vue";
const
{
formData
,
isPreview
,
formDisabled
,
activeCollapse
,
swlzbData
,
gdxxData
,
...
...
src/views/projectManage/projectSetUp.vue
View file @
0dcbdc2c
...
...
@@ -24,6 +24,13 @@
@
current-page-change=
"handleCurrentPageChange"
>
<template
#
operations=
"
{ row, index }">
<el-button
link
type=
"primary"
size=
"small"
@
click=
"fillDecision(row)"
>
编辑
</el-button
>
<!-- 已立项 -->
<el-button
link
...
...
@@ -33,6 +40,7 @@
@
click=
"fillDecision(row)"
>
决策填报
</el-button
>
<!-- 立项审批中 -->
<el-button
link
...
...
@@ -43,13 +51,6 @@
@
click=
"viewDecision(row)"
>
{{
canAudit
?
"审批"
:
"查看"
}}
</el-button
>
<el-button
link
type=
"primary"
size=
"small"
@
click=
"editProject(row)"
>
编辑
</el-button
>
</
template
>
</common-table>
</div>
...
...
@@ -64,14 +65,7 @@ import { ElMessage, ElMessageBox } from "element-plus";
import
{
useUserStore
}
from
"@/stores/user.js"
;
import
CommonTable
from
"@/components/common/commonTable.vue"
;
import
SearchForm
from
"@/components/common/SearchForm.vue"
;
const
editProject
=
(
item
)
=>
{
router
.
push
({
name
:
"addProject"
,
query
:
{
projectId
:
item
.
id
,
},
});
};
const
handleSearch
=
(
formData
)
=>
{
currentPage
.
value
=
1
;
getProjectData
(
formData
);
...
...
@@ -123,7 +117,7 @@ let tableColumns = ref([
{
prop
:
"operations"
,
label
:
"操作"
,
width
:
1
2
0
,
width
:
1
6
0
,
slot
:
"operations"
,
fixed
:
"right"
,
align
:
"center"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment