Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
psa-web
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
高滢
psa-web
Commits
f583df7a
Commit
f583df7a
authored
Mar 25, 2025
by
wangjiancheng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix:项目管理修改
parent
bd0c790a
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
92 additions
and
64 deletions
+92
-64
add.vue
src/views/project/add.vue
+15
-16
draft.vue
src/views/project/draft.vue
+11
-12
edit.vue
src/views/project/edit.vue
+26
-10
index.vue
src/views/project/index.vue
+36
-18
view.vue
src/views/project/view.vue
+4
-8
No files found.
src/views/project/add.vue
View file @
f583df7a
...
...
@@ -2,7 +2,7 @@
<div
class=
"app-container"
>
<div
class=
"content"
>
<div
style=
"padding-left: 10px"
>
<span
class=
"bold-text"
style=
"border-bottom: 3px solid #0062FF;"
>
项目立项
</span>
<span
class=
"bold-text"
>
项目立项
</span>
</div>
<div
style=
"padding-top: 40px"
>
<el-form
ref=
"formRef"
:model=
"form"
:rules=
"rules"
label-width=
"auto"
>
...
...
@@ -123,7 +123,7 @@
:auto-upload=
"false"
:on-success=
"handleSuccess"
>
<el-button
size=
"large"
type=
"
text"
>
<el-button
size=
"large"
type=
"
primary"
link
>
<img
src=
"../../assets/icons/common/upl.png"
height=
"16"
width=
"16"
alt=
"上传"
style=
"margin-right: 10px"
/>
点击上传附件
...
...
@@ -344,8 +344,9 @@ const reset = () => {
proxy
.
$router
.
push
({
path
:
'/project'
})
resetForm
()
}
// 更新回款输入框数量
const
updateRepaymentInputs
=
()
=>
{
// 根据用户输入的回款笔数
更新百分比
输入框的数量
// 根据用户输入的回款笔数
-新增
输入框的数量
if
(
form
.
repaymentCount
>
0
)
{
form
.
repaymentDetails
=
Array
.
from
({
length
:
form
.
repaymentCount
},
()
=>
({
repaymentPercentage
:
null
,
// 回款百分比
...
...
@@ -355,7 +356,7 @@ const updateRepaymentInputs = () => {
form
.
repaymentDetails
=
[];
}
}
//
检查
回款百分比
//
校验
回款百分比
const
checkPercentage
=
(
value
,
index
)
=>
{
let
newValue
=
parseFloat
(
value
);
// 确保值是浮点数
if
(
isNaN
(
newValue
))
{
...
...
@@ -369,8 +370,8 @@ const checkPercentage = (value, index) => {
}
};
// 删除附件相关事件
const
handleRemove
=
(
file
,
fileList
)
=>
{
console
.
log
(
file
,
fileList
)
const
handleRemove
=
(
file
)
=>
{
return
this
.
$confirm
(
`确定移除
${
file
.
name
}
?`
);
}
// 预览附件相关事件
...
...
@@ -381,13 +382,14 @@ const handlePreview = (file) => {
const
handleExceed
=
(
files
,
fileList
)
=>
{
this
.
$message
.
warning
(
`当前限制选择 3 个文件,本次选择了
${
files
.
length
}
个文件,共选择了
${
files
.
length
+
fileList
.
length
}
个文件`
);
}
// 上传附件删除相关事件
const
beforeRemove
=
(
file
,
fileList
)
=>
{
return
this
.
$confirm
(
`确定移除
${
file
.
name
}
?`
);
}
// 上传附件成功相关事件
const
handleSuccess
=
(
response
,
file
,
fileList
)
=>
{
form
.
projectAnnexList
=
fileList
.
map
(
item
=>
{
return
{
fileName
:
item
.
fileName
,
fileUrl
:
item
.
fileUrl
}
})
console
.
log
(
response
,
file
,
fileList
)
}
...
...
@@ -396,13 +398,10 @@ getUserList()
<
style
scoped
lang=
"scss"
>
.bold-text
{
width
:
72px
;
height
:
15px
;
font-family
:
PingFangSC-Medium
;
font-weight
:
900
;
font-size
:
1
8
px
;
font-size
:
1
9
px
;
color
:
#0D162A
;
letter-spacing
:
0
;
line-height
:
15px
;
border-bottom
:
4px
solid
#0062FF
;
}
</
style
>
src/views/project/draft.vue
View file @
f583df7a
...
...
@@ -59,7 +59,8 @@
<el-button
size=
"large"
icon=
"ArrowDown"
type=
"text"
type=
"primary"
link
v-show=
"!isExpanded"
@
click=
"toggleSearch"
>
...
...
@@ -67,7 +68,8 @@
</el-button>
<el-button
size=
"large"
type=
"text"
type=
"primary"
link
icon=
"ArrowUp"
v-show=
"isExpanded"
@
click=
"toggleSearch"
...
...
@@ -114,8 +116,8 @@
</div>
<div
class=
"contentTable"
>
<div
style=
"padding-left: 8px ;padding-bottom: 25px"
>
<span
class=
"bold-text"
style=
"border-bottom: 3px solid #0062FF;"
>
项目草稿箱
</span>
<span
style=
"padding-left: 8
5
%"
>
<span
class=
"bold-text"
>
项目草稿箱
</span>
<span
style=
"padding-left: 8
6
%"
>
<el-button
icon=
"ArrowLeft"
class=
"el-button-primary-pain"
...
...
@@ -155,7 +157,7 @@
<
template
#
default
=
"scope"
>
<
el
-
popover
placement
=
"right"
:
width
=
"400"
trigger
=
"click"
>
<
template
#
reference
>
<
el
-
button
type
=
"
text"
>
查看详情
<
/el-button
>
<
el
-
button
type
=
"
primary"
link
>
查看详情
<
/el-button
>
<
/template
>
<
el
-
table
:
data
=
"scope.row.repaymentDetails"
border
style
=
"width: 100%"
>
<
el
-
table
-
column
label
=
"回款百分比"
align
=
"center"
prop
=
"repaymentPercentage"
>
...
...
@@ -185,12 +187,12 @@
<
el
-
table
-
column
label
=
"操作"
align
=
"center"
class
-
name
=
"small-padding fixed-width"
fixed
=
"right"
width
=
"150"
>
<
template
#
default
=
"scope"
>
<
el
-
tooltip
content
=
"编辑"
placement
=
"top"
>
<
el
-
button
link
type
=
"text"
@
click
=
"handleUpdate(scope.row)"
v
-
hasPermi
=
"['system:project:edit']"
>
<
el
-
button
link
@
click
=
"handleUpdate(scope.row)"
v
-
hasPermi
=
"['system:project:edit']"
>
<
img
src
=
"../../assets/icons/common/edit.png"
height
=
"32"
width
=
"32"
/>
<
/el-button
>
<
/el-tooltip
>
<
el
-
tooltip
content
=
"删除"
placement
=
"top"
>
<
el
-
button
link
type
=
"text"
@
click
=
"handleDelete(scope.row)"
v
-
hasPermi
=
"['system:project:logicRemove']"
>
<
el
-
button
link
@
click
=
"handleDelete(scope.row)"
v
-
hasPermi
=
"['system:project:logicRemove']"
>
<
img
src
=
"../../assets/icons/common/delete.png"
height
=
"32"
width
=
"32"
/>
<
/el-button
>
<
/el-tooltip
>
...
...
@@ -314,14 +316,11 @@ getList();
<
style
scoped
lang
=
"scss"
>
.
bold
-
text
{
width
:
72
px
;
height
:
15
px
;
font
-
family
:
PingFangSC
-
Medium
;
font
-
weight
:
900
;
font
-
size
:
1
8
px
;
font
-
size
:
1
9
px
;
color
:
#
0
D162A
;
letter
-
spacing
:
0
;
line
-
height
:
15
px
;
border
-
bottom
:
4
px
solid
#
0062
FF
;
}
.
pagination
-
containerA
{
...
...
src/views/project/edit.vue
View file @
f583df7a
...
...
@@ -2,7 +2,7 @@
<div
class=
"app-container"
>
<div
class=
"content"
>
<div
style=
"padding-left: 10px"
>
<span
class=
"bold-text"
style=
"border-bottom: 3px solid #0062FF;"
>
项目编辑
</span>
<span
class=
"bold-text"
>
项目编辑
</span>
</div>
<div
style=
"padding-top: 40px"
>
<el-form
ref=
"formRef"
:model=
"form"
:rules=
"rules"
label-width=
"auto"
>
...
...
@@ -110,7 +110,7 @@
</el-select>
</el-form-item>
<el-form-item
label=
"项目成员"
prop=
"projectMemberIds"
>
<div
v-for=
"(
member,
index) in form.projectMemberIds"
:key=
"index"
class=
"member-select"
>
<div
v-for=
"(index) in form.projectMemberIds"
:key=
"index"
class=
"member-select"
>
<el-select
v-model=
"form.projectMemberIds[index]"
:placeholder=
"'成员' + (index + 1)"
...
...
@@ -151,7 +151,7 @@
:on-exceed=
"handleExceed"
:auto-upload=
"false"
:on-success=
"handleSuccess"
>
<el-button
size=
"large"
type=
"
text"
>
<el-button
size=
"large"
type=
"
primary"
link
>
<img
src=
"../../assets/icons/common/upl.png"
height=
"16"
width=
"16"
style=
"margin-right: 10px"
/>
点击上传附件
</el-button>
...
...
@@ -203,7 +203,7 @@
</el-form>
</el-col>
<el-col
:span=
"10"
>
<el-button
type=
"
text"
@
click=
"addMember"
style=
"margin-top: 492px;margin-left: 0"
>
+ 添加成员
</el-button>
<el-button
type=
"
primary"
link
@
click=
"addMember"
style=
"margin-top: 492px;margin-left: 0"
>
+ 添加成员
</el-button>
</el-col>
</el-row>
<el-form-item
style=
"padding-left: 82%"
>
...
...
@@ -258,7 +258,20 @@ const rules = ref({
{
required
:
true
,
message
:
'预计开始时间不能为空'
,
trigger
:
'blur'
}
],
endDate
:
[
{
required
:
true
,
message
:
'预计结束时间不能为空'
,
trigger
:
'blur'
}
{
required
:
true
,
message
:
'预计结束时间不能为空'
,
trigger
:
'blur'
},
// 预计结束时间必须大于预计开始时间
{
validator
:
(
rule
,
value
,
callback
)
=>
{
if
(
value
===
''
)
{
callback
(
new
Error
(
'请选择预计结束时间'
));
}
else
if
(
value
<=
form
.
startDate
)
{
callback
(
new
Error
(
'预计结束时间必须大于预计开始时间'
));
}
else
{
callback
();
}
},
trigger
:
'blur'
}
],
departmentLeadId
:
[
{
required
:
true
,
message
:
'事业部负责人不能为空'
,
trigger
:
'blur'
}
...
...
@@ -388,6 +401,12 @@ const handleRemove = (file, fileList) => {
// 上传成功
const
handleSuccess
=
(
response
,
file
,
fileList
)
=>
{
form
.
value
.
projectAnnexList
=
fileList
.
map
(
item
=>
{
return
{
fileName
:
item
.
fileName
,
fileUrl
:
item
.
fileUrl
}
})
console
.
log
(
response
,
file
,
fileList
)
}
// 上传后预览
...
...
@@ -412,14 +431,11 @@ getUserList()
<
style
scoped
lang=
"scss"
>
.bold-text
{
width
:
72px
;
height
:
15px
;
font-family
:
PingFangSC-Medium
;
font-weight
:
900
;
font-size
:
1
8
px
;
font-size
:
1
9
px
;
color
:
#0D162A
;
letter-spacing
:
0
;
line-height
:
15px
;
border-bottom
:
4px
solid
#0062FF
;
}
.member-select
{
...
...
src/views/project/index.vue
View file @
f583df7a
...
...
@@ -3,6 +3,8 @@
<div
class=
"formSearch"
>
<el-form
:model=
"queryParams"
ref=
"queryRef"
:inline=
"true"
label-width=
"120px"
>
<!-- 默认显示的查询条件 -->
<el-row
:gutter=
"25"
>
<el-col
:span=
"6"
>
<el-form-item
label=
"项目名称"
prop=
"projectName"
>
<el-select
v-model=
"queryParams.id"
...
...
@@ -19,6 +21,8 @@
/>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"项目经理"
prop=
"projectManagerId"
>
<el-select
v-model=
"queryParams.projectManagerId"
...
...
@@ -35,6 +39,8 @@
/>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"项目状态"
prop=
"projectStatus"
>
<el-select
v-model=
"queryParams.projectStatus"
...
...
@@ -50,8 +56,10 @@
/>
</el-select>
</el-form-item>
</el-col>
<!-- 操作按钮 -->
<el-form-item
style=
"padding-left: 5.4%"
>
<el-col
:span=
"6"
>
<el-form-item
style=
"margin-left: 30px"
>
<el-button
@
click=
"resetQuery"
class=
"el-button-defalut"
>
<template
#
icon
>
<img
src=
"../../assets/icons/common/reset.png"
height=
"25"
width=
"24"
/>
...
...
@@ -67,7 +75,8 @@
<el-button
size=
"large"
icon=
"ArrowDown"
type=
"text"
link
type=
"primary"
v-show=
"!isExpanded"
@
click=
"toggleSearch"
>
...
...
@@ -75,7 +84,8 @@
</el-button>
<el-button
size=
"large"
type=
"text"
type=
"primary"
link
icon=
"ArrowUp"
v-show=
"isExpanded"
@
click=
"toggleSearch"
...
...
@@ -83,17 +93,15 @@
收起
</el-button>
</el-form-item>
</el-col>
</el-row>
<!-- 可折叠的查询条件 -->
<transition>
<div
v-if=
"isExpanded"
>
<el-row
:gutter=
"25"
>
<el-col
:span=
"6"
>
<el-form-item
label=
"事业部负责人"
prop=
"departmentLeaderId"
>
<!-- <el-input
v-model="queryParams.departmentLeaderId"
placeholder="请输入事业部负责人"
clearable
@keyup.enter="handleQuery"
style="width: 220px"
/>-->
<el-select
v-model=
"queryParams.departmentLeaderId"
filterable
...
...
@@ -109,6 +117,8 @@
/>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"项目类型"
prop=
"projectType"
>
<el-select
v-model=
"queryParams.projectType"
...
...
@@ -124,13 +134,15 @@
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</div>
</transition>
</el-form>
</div>
<div
class=
"contentTable"
>
<div
class=
"title"
>
<div
style=
"display: flex; align-items: center; justify-content: space-between;
"
>
<div
class=
"contentBt
"
>
<span
class=
"bold-text"
>
项目列表
</span>
<div
style=
"display: flex; gap: 10px; align-items: center;"
>
<el-button
...
...
@@ -210,7 +222,7 @@
<
template
#
default
=
"scope"
>
<
el
-
popover
placement
=
"right"
:
width
=
"400"
trigger
=
"click"
>
<
template
#
reference
>
<
el
-
button
type
=
"text
"
>
查看详情
<
/el-button
>
<
el
-
button
link
type
=
"primary
"
>
查看详情
<
/el-button
>
<
/template
>
<
el
-
table
:
data
=
"scope.row.repaymentDetails"
border
style
=
"width: 100%"
>
<!--
项目回款笔数
-->
...
...
@@ -248,17 +260,17 @@
min
-
width
=
"200"
>
<
template
#
default
=
"scope"
>
<
el
-
tooltip
content
=
"编辑"
placement
=
"top"
>
<
el
-
button
link
type
=
"text"
@
click
=
"handleUpdate(scope.row)"
v
-
hasPermi
=
"['system:project:edit']"
>
<
el
-
button
link
@
click
=
"handleUpdate(scope.row)"
v
-
hasPermi
=
"['system:project:edit']"
>
<
img
src
=
"../../assets/icons/common/edit.png"
height
=
"32"
width
=
"32"
/>
<
/el-button
>
<
/el-tooltip
>
<
el
-
tooltip
content
=
"详情"
placement
=
"top"
>
<
el
-
button
link
type
=
"text"
@
click
=
"handleView(scope.row)"
v
-
hasPermi
=
"['system:project:view']"
>
<
el
-
button
link
@
click
=
"handleView(scope.row)"
v
-
hasPermi
=
"['system:project:view']"
>
<
img
src
=
"../../assets/icons/common/check.png"
height
=
"32"
width
=
"32"
/>
<
/el-button
>
<
/el-tooltip
>
<
el
-
tooltip
content
=
"删除"
placement
=
"top"
>
<
el
-
button
link
type
=
"text"
@
click
=
"handleDelete(scope.row)"
v
-
hasPermi
=
"['system:project:logicRemove']"
>
<
el
-
button
link
@
click
=
"handleDelete(scope.row)"
v
-
hasPermi
=
"['system:project:logicRemove']"
>
<
img
src
=
"../../assets/icons/common/delete.png"
height
=
"32"
width
=
"32"
/>
<
/el-button
>
<
/el-tooltip
>
...
...
@@ -443,7 +455,7 @@ getUserList()
.
bold
-
text
{
font
-
family
:
PingFangSC
-
Medium
;
font
-
weight
:
900
;
font
-
size
:
20
px
;
font
-
size
:
19
px
;
color
:
#
0
D162A
;
border
-
bottom
:
4
px
solid
#
0062
FF
;
}
...
...
@@ -454,6 +466,12 @@ getUserList()
position
:
relative
;
}
.
contentBt
{
display
:
flex
;
align
-
items
:
center
;
justify
-
content
:
space
-
between
;
}
// 表格的标头
:
deep
(.
el
-
table
th
.
el
-
table__cell
)
{
line
-
height
:
35
px
;
...
...
@@ -470,12 +488,12 @@ getUserList()
}
.
el
-
alert
{
margin
:
23
px
0
23
px
;
//margin: 23px 0 23px;
margin
-
bottom
:
23
px
;
}
.
custom
-
blue
-
bg
{
background
-
color
:
#
E6F7FF
!
important
;
/* 可能还需要调整文字颜色以便于阅读 */
color
:
#
1890
FF
!
important
;
}
...
...
src/views/project/view.vue
View file @
f583df7a
...
...
@@ -2,7 +2,7 @@
<div
class=
"app-container"
>
<div
class=
"content"
style=
"position: relative"
>
<div
style=
"padding-left: 15px ;padding-top: 15px"
>
<span
class=
"bold-text"
style=
"border-bottom: 3px solid blue;"
>
项目详情
</span>
<span
class=
"bold-text"
>
项目详情
</span>
</div>
<div
style=
"padding-top: 28px ;padding-left: 10px; "
>
<el-form
:model=
"form"
label-width=
"auto"
>
...
...
@@ -126,7 +126,7 @@
</el-col>
<el-col
:span=
"2"
>
<span
v-for=
"(file, index) in form.projectAnnexList"
:key=
"index"
class=
"file-item"
>
<el-link
:href=
"file.fileUrl"
target=
"_blank"
>
{{ file.fileName }}
</el-link>
<el-link
:href=
"file.fileUrl"
t
ype=
"primary"
t
arget=
"_blank"
>
{{ file.fileName }}
</el-link>
</span>
</el-col>
</el-row>
...
...
@@ -208,7 +208,6 @@ const form = ref({
repaymentDetails
:
[],
draft
:
''
,
})
const
headOptions
=
ref
([])
const
managerOptions
=
ref
([])
const
getUserList
=
()
=>
{
...
...
@@ -259,14 +258,11 @@ getUserList()
<
style
scoped
lang=
"scss"
>
.bold-text
{
width
:
72px
;
height
:
15px
;
font-family
:
PingFangSC-Medium
;
font-weight
:
900
;
font-size
:
1
8
px
;
font-size
:
1
9
px
;
color
:
#0D162A
;
letter-spacing
:
0
;
line-height
:
15px
;
border-bottom
:
4px
solid
#0062FF
;
}
.label-title
{
...
...
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