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
80b51af7
Commit
80b51af7
authored
Mar 11, 2025
by
高滢
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
c8fb4184
96ba0acc
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
1269 additions
and
461 deletions
+1269
-461
approvalConfiguration.js
src/api/approvalConfiguration/approvalConfiguration.js
+10
-0
index.vue
src/views/approvalConfiguration/index.vue
+173
-0
apply.vue
src/views/costManage/projectCostReimbursement/apply.vue
+221
-0
detail.vue
src/views/costManage/projectCostReimbursement/detail.vue
+133
-3
index.vue
src/views/costManage/projectCostReimbursement/index.vue
+71
-50
add.vue
src/views/costManage/projectCostRequest/add.vue
+129
-163
detail.vue
src/views/costManage/projectCostRequest/detail.vue
+166
-57
index.vue
src/views/costManage/projectCostRequest/index.vue
+171
-136
add.vue
src/views/project/add.vue
+13
-9
index.vue
src/views/project/index.vue
+182
-43
No files found.
src/api/approvalConfiguration/approvalConfiguration.js
0 → 100644
View file @
80b51af7
import
request
from
'@/utils/request'
// 查询项目费用申请列表
export
function
getList
(
query
)
{
return
request
({
url
:
'/approvalConfiguration/getList'
,
method
:
'get'
,
params
:
query
})
}
src/views/approvalConfiguration/index.vue
0 → 100644
View file @
80b51af7
<
template
>
<div
class=
"app-container"
>
<div
class=
"formSearch"
>
<el-form
:model=
"queryParams"
ref=
"queryRef"
:inline=
"true"
label-width=
"120px"
>
<!-- 默认显示的查询条件 -->
<el-form-item
label=
"审批流程名称"
prop=
"projectName"
>
<el-input
v-model=
"queryParams.projectName"
placeholder=
"请输入项目名称"
clearable
style=
"width: 220px"
/>
</el-form-item>
<el-form-item
label=
"审批类型"
prop=
"projectManagerId"
>
<el-select
v-model=
"queryParams.projectManagerId"
placeholder=
"请选择项目经理"
style=
"width: 220px"
clearable
>
</el-select>
</el-form-item>
<el-form-item
label=
"创建人"
prop=
"projectStatus"
>
<el-select
v-model=
"queryParams.projectStatus"
placeholder=
"请选择项目状态"
style=
"width: 220px"
clearable
>
</el-select>
</el-form-item>
<!-- 操作按钮 -->
<el-form-item
style=
"padding-left: 5.4%"
>
<el-button
@
click=
"resetQuery"
class=
"el-button-defalut"
>
<template
#
icon
>
<img
src=
"../../assets/icons/common/reset.png"
height=
"25"
width=
"24"
/>
</
template
>
重置
</el-button>
<el-button
type=
"primary"
@
click=
"handleQuery"
class=
"el-button-primary"
>
<
template
#
icon
>
<img
src=
"../../assets/icons/common/search.png"
height=
"24"
width=
"24"
/>
</
template
>
查询
</el-button>
</el-form-item>
</el-form>
</div>
<div
class=
"contentTable"
>
<div
style=
""
class=
"topDiv"
>
<span
class=
"bold-text1"
style=
""
>
审批配置
</span>
<span
style=
"padding-left: 80%"
>
<el-button
class=
"el-button-primary-pain"
plain
icon=
"Plus"
@
click=
"handleAdd"
style=
"width: auto;"
>
新增审批节点
</el-button>
</span>
</div>
<el-table
v-loading=
"loading"
:data=
"tableDataList.value"
border
>
<el-table-column
label=
"序号"
align=
"center"
type=
"index"
width=
"90"
/>
<el-table-column
label=
"审批流程名称"
align=
"center"
prop=
"approvalName"
/>
<el-table-column
label=
"审批编号"
align=
"center"
prop=
"approvalNumber"
/>
<el-table-column
label=
"审批类型"
align=
"center"
prop=
"approveType"
>
<
template
#
default=
"scope"
>
<dict-tag
:options=
"approve_type"
:value=
"scope.row.approveType"
/></
template
>
</el-table-column>
<el-table-column
label=
"创建人"
align=
"center"
prop=
"createBy"
>
<!-- <template #default="scope">-->
<!-- <dict-tag :options="project_type" :value="scope.row.projectType"/>-->
<!-- </template>-->
</el-table-column>
<el-table-column
label=
"创建人角色"
align=
"center"
prop=
"createRoleName"
width=
"150"
>
</el-table-column>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
width=
"200"
>
</el-table-column>
<el-table-column
label=
"最后更改时间"
align=
"center"
prop=
"updateTime"
width=
"200"
>
</el-table-column>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
fixed=
"right"
min-width=
"100"
>
<
template
#
default=
"scope"
>
<el-tooltip
content=
"编辑"
placement=
"top"
>
<el-button
link
type=
"text"
@
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']"
>
<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']"
>
<img
src=
"../../assets/icons/common/delete.png"
height=
"32"
width=
"32"
/>
</el-button>
</el-tooltip>
</
template
>
</el-table-column>
</el-table>
<div
class=
"pagination-containerA"
>
</div>
</div>
</div>
</template>
<
script
setup
>
import
{
ref
,
onMounted
}
from
'vue'
import
{
getList
}
from
"../../api/approvalConfiguration/approvalConfiguration.js"
;
const
{
proxy
}
=
getCurrentInstance
();
const
{
approve_type
}
=
proxy
.
useDict
(
'approve_type'
);
//变量定义
const
loading
=
ref
(
false
)
const
tableDataList
=
reactive
([])
const
queryParams
=
reactive
({
userName
:
''
,
projectName
:
null
,
status
:
null
})
//方法定义
const
getTableDataList
=
()
=>
{
getList
().
then
(
res
=>
{
tableDataList
.
value
=
res
.
data
console
.
log
(
"res"
,
tableDataList
.
value
)
})
}
onMounted
(()
=>
{
getTableDataList
()
})
</
script
>
<
style
scoped
lang=
"scss"
>
.topDiv
{
margin-bottom
:
30px
;
padding-left
:
8px
;
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
}
.bold-text1
{
border-bottom
:
4px
solid
#0062FF
;
padding-bottom
:
25px
;
height
:
15px
;
font-family
:
PingFangSC-Medium
;
font-weight
:
900
;
font-size
:
18px
;
color
:
#0D162A
;
letter-spacing
:
0
;
line-height
:
15px
;
}
</
style
>
src/views/costManage/projectCostReimbursement/apply.vue
0 → 100644
View file @
80b51af7
<
script
setup
>
</
script
>
<
template
class=
"app-container"
>
<!-- 标题-->
<div
class=
"top"
>
<div
class=
"top_text"
>
申请报销
</div>
<div
class=
"top_line"
></div>
</div>
<div
style=
"display: flex;"
>
<div
class=
"card_box"
>
<div
class=
"card-header"
>
<span>
费用类型:
</span>
<span
style=
"color: #616161;font-weight: normal"
>
办公费-宽带费
</span>
</div>
<div
class=
"detail"
>
<el-row>
<el-col
:span=
"6"
>
<span>
项目名称:
</span></el-col>
<el-col
:span=
"18"
><div>
餐饮项目
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
项目类型:
</span></el-col>
<el-col
:span=
"18"
><div>
RL-人力
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
事业部负责人:
</span></el-col>
<el-col
:span=
"18"
><div>
ry
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
项目状态:
</span></el-col>
<el-col
:span=
"18"
><div>
进行中
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
物品描述:
</span></el-col>
<el-col
:span=
"18"
><div>
描述描述描述
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
单价:
</span></el-col>
<el-col
:span=
"18"
><div>
5
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
数量:
</span></el-col>
<el-col
:span=
"18"
><div>
1
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
申请金额(元):
</span></el-col>
<el-col
:span=
"18"
><div>
5
</div></el-col>
</el-row>
</div>
<div
class=
"card-bottom"
>
<div>
费用发生时间:2025-3-6
</div>
<div
style=
"margin-left: 80px"
><el-button
type=
"primary"
>
申请报销
</el-button></div>
</div>
</div>
<div
class=
"card_box"
>
<div
class=
"card-header"
>
<span>
费用类型:
</span>
<span
style=
"color: #616161;font-weight: normal"
>
办公费-宽带费
</span>
</div>
<div
class=
"detail"
>
<el-row>
<el-col
:span=
"6"
>
<span>
项目名称:
</span></el-col>
<el-col
:span=
"18"
><div>
餐饮项目
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
项目类型:
</span></el-col>
<el-col
:span=
"18"
><div>
RL-人力
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
事业部负责人:
</span></el-col>
<el-col
:span=
"18"
><div>
ry
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
项目状态:
</span></el-col>
<el-col
:span=
"18"
><div>
进行中
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
物品描述:
</span></el-col>
<el-col
:span=
"18"
><div>
描述描述描述
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
单价:
</span></el-col>
<el-col
:span=
"18"
><div>
5
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
数量:
</span></el-col>
<el-col
:span=
"18"
><div>
1
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
申请金额(元):
</span></el-col>
<el-col
:span=
"18"
><div>
5
</div></el-col>
</el-row>
</div>
<div
class=
"card-bottom"
>
<div>
费用发生时间:2025-3-6
</div>
<div
style=
"margin-left: 80px"
><el-button
type=
"primary"
>
申请报销
</el-button></div>
</div>
</div>
<div
class=
"card_box"
>
<div
class=
"card-header"
>
<span>
费用类型:
</span>
<span
style=
"color: #616161;font-weight: normal"
>
办公费-宽带费
</span>
</div>
<div
class=
"detail"
>
<el-row>
<el-col
:span=
"6"
>
<span>
项目名称:
</span></el-col>
<el-col
:span=
"18"
><div>
餐饮项目
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
项目类型:
</span></el-col>
<el-col
:span=
"18"
><div>
RL-人力
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
事业部负责人:
</span></el-col>
<el-col
:span=
"18"
><div>
ry
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
项目状态:
</span></el-col>
<el-col
:span=
"18"
><div>
进行中
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
物品描述:
</span></el-col>
<el-col
:span=
"18"
><div>
描述描述描述
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
单价:
</span></el-col>
<el-col
:span=
"18"
><div>
5
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
数量:
</span></el-col>
<el-col
:span=
"18"
><div>
1
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"6"
>
<span>
申请金额(元):
</span></el-col>
<el-col
:span=
"18"
><div>
5
</div></el-col>
</el-row>
</div>
<div
class=
"card-bottom"
>
<div>
费用发生时间:2025-3-6
</div>
<div
style=
"margin-left: 80px"
><el-button
type=
"primary"
>
申请报销
</el-button></div>
</div>
</div>
</div>
</
template
>
<
style
scoped
lang=
"scss"
>
.detail
{
margin-left
:
30px
;
span
{
color
:
#969696
;
}
div
{
margin-top
:
5px
;
color
:
#65676C
;
}
.detail_beizhu
{
width
:
480px
;
height
:
130px
;
border
:
1px
solid
#dddddd
;
background-color
:
#FAFAFA
;
}
}
.card_box
{
width
:
400px
;
border
:
1px
solid
#eaeaea
;
margin-top
:
20px
;
margin-left
:
50px
;
box-shadow
:
0
2px
2px
0
#b3b3b3
80
;
.card-header
{
color
:
#3B66FF
;
background-color
:
#F9F9FA
;
border-bottom
:
1px
solid
#eaeaea
;
padding
:
10px
;
font-size
:
16px
;
font-weight
:
bold
;
}
.detail
{
border-bottom
:
1px
solid
#eaeaea
;
padding
:
5px
;
}
.card-bottom
{
width
:
100%
;
padding
:
10px
;
display
:
flex
;
}
}
.top
{
display
:
flex
;
flex-direction
:
column
;
width
:
75px
;
margin-left
:
40px
;
.top_text
{
cursor
:
default
;
font-weight
:
550
;
font-size
:
18px
;
color
:
#0d162a
;
font-family
:
'Microsoft YaHei'
,
sans-serif
;
}
.top_line
{
border
:
solid
1px
#0062ff
;
margin-top
:
5px
;
height
:
4px
;
background-color
:
#0062ff
;
}
}
</
style
>
src/views/costManage/projectCostReimbursement/detail.vue
View file @
80b51af7
<
template
>
<div
class=
"app-container"
>
<div
class=
"content"
>
<div
class=
"top"
>
<div
class=
"top_text"
>
申请报销
</div>
<div
class=
"top_line"
></div>
</div>
<div
class=
"detail"
>
<el-row>
<el-col
:span=
"2"
>
<span>
流水号:
</span></el-col>
<el-col
:span=
"22"
><div>
XS656433
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"2"
>
<span>
项目名称:
</span></el-col>
<el-col
:span=
"22"
><div>
餐饮项目
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"2"
>
<span>
项目编号:
</span></el-col>
<el-col
:span=
"22"
><div>
20250228RL001
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"2"
>
<span>
项目类型:
</span></el-col>
<el-col
:span=
"22"
><div>
RL-人力
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"2"
>
<span>
事业部负责人:
</span></el-col>
<el-col
:span=
"22"
><div>
ry
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"2"
>
<span>
项目状态:
</span></el-col>
<el-col
:span=
"22"
><div>
进行中
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"2"
>
<span>
费用类型:
</span></el-col>
<el-col
:span=
"22"
><div>
办公费-宽带费
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"2"
>
<span>
物品描述:
</span></el-col>
<el-col
:span=
"22"
><div>
描述描述描述
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"2"
>
<span>
费用发生时间:
</span></el-col>
<el-col
:span=
"22"
><div>
2025-03-06 15:00:00
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"2"
>
<span>
单价:
</span></el-col>
<el-col
:span=
"22"
><div>
5
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"2"
>
<span>
数量:
</span></el-col>
<el-col
:span=
"22"
><div>
1
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"2"
>
<span>
申请金额(元):
</span></el-col>
<el-col
:span=
"22"
><div>
5
</div></el-col>
</el-row>
<el-row>
<el-col
:span=
"2"
>
<span>
备注:
</span></el-col>
<el-col
:span=
"22"
>
<div
class=
"detail_beizhu"
>
备注备注备注备注备注备注备注备注
</div>
</el-col>
</el-row>
</div>
<!-- 取消、提交按钮-->
<div
class=
"button"
>
<div><el-button
@
click=
"goBackReimburseIndex"
class=
"button_size"
>
返回
</el-button></div>
<div><el-button
class=
"button_size"
type=
"primary"
>
确认申请报销
</el-button></div>
</div>
</div>
</div>
</
template
>
<
script
setup
>
<
script
setup
>
import
{
useRouter
}
from
"vue-router"
;
const
router
=
useRouter
()
const
goBackReimburseIndex
=
()
=>
{
router
.
push
({
path
:
'/costManage/projectCostReimbursement'
})
}
</
script
>
</
script
>
<
template
>
新增报销
</
template
>
<
style
scoped
lang=
"scss"
>
<
style
scoped
lang=
"scss"
>
.detail
{
margin-top
:
20px
;
margin-left
:
30px
;
span
{
color
:
#969696
;
}
div
{
margin-top
:
5px
;
color
:
#65676C
;
}
.detail_beizhu
{
width
:
480px
;
height
:
130px
;
border
:
1px
solid
#dddddd
;
background-color
:
#FAFAFA
;
}
}
.top
{
display
:
flex
;
flex-direction
:
column
;
width
:
75px
;
margin-left
:
40px
;
.top_text
{
cursor
:
default
;
font-weight
:
550
;
font-size
:
18px
;
color
:
#0d162a
;
font-family
:
'Microsoft YaHei'
,
sans-serif
;
}
.top_line
{
border
:
solid
1px
#0062ff
;
margin-top
:
5px
;
height
:
4px
;
background-color
:
#0062ff
;
}
}
.button
{
display
:
flex
;
margin-left
:
70%
;
margin-top
:
10px
;
.button_size
{
width
:
116px
;
height
:
40px
;
margin
:
20px
;
}
}
</
style
>
</
style
>
src/views/costManage/projectCostReimbursement/index.vue
View file @
80b51af7
<
template
>
<
template
>
<div
class=
"app-container"
>
<div
class=
"app-container"
>
<div>
<!-- 搜索表单-->
<el-form
class=
"formSearch"
ref=
"formRef"
:inline=
"true"
:model=
"formInline"
>
<div
class=
"formSearch"
>
<el-form-item
label=
"项目名称"
>
<el-form
ref=
"formRef"
:inline=
"true"
:model=
"formInline"
>
<el-input
<el-form-item
style=
"margin-right: 60px"
label=
"项目名称"
>
<el-input
style=
"width: 220px"
v-model=
"queryParams.projectName"
v-model=
"queryParams.projectName"
placeholder=
"请输入项目名称"
placeholder=
"请输入项目名称"
clearable
/>
clearable
/>
</el-form-item>
</el-form-item>
<!--
<el-form-item
label=
"项目编号"
>
-->
<el-form-item
style=
"margin-right: 60px"
label=
"项目负责人"
>
<!--
<el-input-->
<el-input
style=
"width: 220px"
<!-- v-model="queryParams.projectNumber"-->
<!-- placeholder="请输入项目编号"-->
<!-- clearable/>-->
<!--
</el-form-item>
-->
<el-form-item
label=
"项目负责人"
>
<el-input
v-model=
"queryParams.userName"
v-model=
"queryParams.userName"
placeholder=
"请输入项目负责人"
placeholder=
"请输入项目负责人"
clearable
/>
clearable
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"项目类型"
>
<el-form-item
style=
"margin-right: 60px"
label=
"项目类型"
>
<el-select
v-model=
"queryParams.projectType"
placeholder=
"请选择项目类型"
clearable
>
<el-select
style=
"width: 220px"
v-model=
"queryParams.projectType"
placeholder=
"请选择项目类型"
clearable
>
<el-option
<el-option
v-for=
"dict in project_type"
v-for=
"dict in project_type"
:key=
"dict.value"
:key=
"dict.value"
...
@@ -30,27 +25,51 @@
...
@@ -30,27 +25,51 @@
:value=
"dict.value"
/>
:value=
"dict.value"
/>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item>
<el-form-item>
<el-button
type=
"primary"
class=
"el-button-primary"
icon=
"Search"
@
click=
"onSearch"
>
搜索
</el-button>
<div
style=
"margin-left: 50px"
>
<el-button
type=
"default"
class=
"el-button-defalut"
icon=
"Refresh"
@
click=
"reset"
>
重置
</el-button>
<el-button
type=
"default"
class=
"el-button-defalut"
icon=
"Refresh"
@
click=
"reset"
>
重置
</el-button>
<el-button
type=
"primary"
class=
"el-button-primary"
icon=
"Search"
@
click=
"onSearch"
>
搜索
</el-button>
<el-button
size=
"large"
type=
"text"
@
click=
"toggleSearch"
>
{{
isExpanded
?
' 收起'
:
' 展开'
}}
<el-icon
class=
"el-icon--right"
>
<arrow-down
/>
</el-icon>
</el-button>
</div>
</el-form-item>
</el-form-item>
<!-- 可折叠的查询条件 -->
<transition>
<div
v-if=
"isExpanded"
>
<el-form-item
label=
"审批状态"
>
<el-select
style=
"width: 220px"
v-model=
"queryParams.projectType"
placeholder=
"请选择审批状态"
clearable
>
<el-option
v-for=
"dict in project_cost_request_status"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
</div>
</transition>
</el-form>
</el-form>
</div>
</div>
<!-- 导航、按钮-->
<!-- 导航、按钮-->
<div
class=
"shadow_box_bottom_add"
>
<div
class=
"shadow_box_bottom_add"
>
<div
class=
"left"
>
<div
class=
"left"
>
<div
class=
"left_text"
>
项目费用
报销列表
</div>
<div
class=
"left_text"
>
报销列表
</div>
<div
class=
"left_line"
></div>
<div
class=
"left_line"
></div>
</div>
</div>
<div
class=
"right"
>
<div>
<el-button
<el-button
class=
"el-button-primary-pain"
plain
icon=
"Plus"
@
click=
"goToApplyPage"
>
报销申请
</el-button>
type=
"primary"
<el-button
type=
"text"
plain
><img
src=
"@/assets/icons/common/rightone.png"
height=
"38"
width=
"38"
/></el-button>
plain
<el-button
type=
"text"
plain
><img
src=
"@/assets/icons/common/print.png"
height=
"38"
width=
"38"
/></el-button>
icon=
"Plus"
</div>
@
click=
"goToAddPage"
>
报销申请
</el-button>
</div>
</div>
</div>
<!-- 步骤条-->
<!-- 步骤条-->
...
@@ -60,17 +79,7 @@
...
@@ -60,17 +79,7 @@
<text>
项目编号
</text>
<text>
项目编号
</text>
<text>
{{}}
</text>
<text>
{{}}
</text>
</div>
</div>
<div
class=
"step"
>
<FlowChart
:dataList=
"list"
:widthDontai=
"'70%'"
:activeIndex=
"1"
/>
<el-steps
:active=
"2"
align-center
>
<el-step
title=
"个人"
/>
<el-step
title=
"PM"
/>
<el-step
title=
"核心领导"
/>
<el-step
title=
"HR"
/>
<el-step
title=
"总经理"
/>
<el-step
title=
"财务"
/>
<el-step
title=
"完成"
/>
</el-steps>
</div>
</div>
</div>
<!-- 列表-->
<!-- 列表-->
...
@@ -165,6 +174,7 @@
...
@@ -165,6 +174,7 @@
<
script
setup
>
<
script
setup
>
import
FlowChart
from
'@/components/FlowChart/index.vue'
import
{
reactive
,
ref
}
from
'vue'
import
{
reactive
,
ref
}
from
'vue'
const
{
proxy
}
=
getCurrentInstance
();
const
{
proxy
}
=
getCurrentInstance
();
const
{
project_status
,
project_cost_type
,
project_cost_request_status
,
project_type
}
=
proxy
.
useDict
(
'project_status'
,
'project_cost_type'
,
'project_cost_request_status'
,
'project_type'
);
const
{
project_status
,
project_cost_type
,
project_cost_request_status
,
project_type
}
=
proxy
.
useDict
(
'project_status'
,
'project_cost_type'
,
'project_cost_request_status'
,
'project_type'
);
...
@@ -177,17 +187,26 @@ const queryParams = reactive({
...
@@ -177,17 +187,26 @@ const queryParams = reactive({
userName
:
null
,
userName
:
null
,
projectType
:
null
projectType
:
null
})
})
// 定义是否展开的状态
// 列表
const
isExpanded
=
ref
(
false
);
const
projectCostRequestList
=
ref
([]);
// 切换展开/折叠状态
const
getList
=
()
=>
{
const
toggleSearch
=
()
=>
{
getCostRequestList
(
queryParams
).
then
(
response
=>
{
isExpanded
.
value
=
!
isExpanded
.
value
;
console
.
log
(
"列表"
,
response
.
rows
)
total
.
value
=
response
.
total
projectCostRequestList
.
value
=
response
.
rows
});
}
}
getList
()
// 流程图内容
const
list
=
[
'个人'
,
'PM'
,
'事业部负责人'
,
'财务'
,
'领导'
,
'完成'
]
// // 列表
// const projectCostRequestList = ref([]);
// const getList=()=> {
// getCostRequestList(queryParams).then(response => {
// console.log("列表",response.rows)
// total.value = response.total
// projectCostRequestList.value = response.rows
// });
// }
// getList()
// 重置表单
// 重置表单
const
reset
=
()
=>
{
const
reset
=
()
=>
{
...
@@ -207,12 +226,14 @@ const onSearch = () => {
...
@@ -207,12 +226,14 @@ const onSearch = () => {
//新增按钮
//新增按钮
import
{
useRouter
}
from
'vue-router'
import
{
useRouter
}
from
'vue-router'
import
{
getCostRequestDetail
,
getCostRequestList
}
from
"../../../api/projectCostRequest/projectCostRequest.js"
;
import
{
getCostRequestDetail
,
getCostRequestList
}
from
"../../../api/projectCostRequest/projectCostRequest.js"
;
import
{
ArrowDown
}
from
"@element-plus/icons-vue"
;
const
router
=
useRouter
()
const
router
=
useRouter
()
const
goToA
dd
Page
=
()
=>
{
const
goToA
pply
Page
=
()
=>
{
router
.
push
({
path
:
'/costManage/projectCostRe
quest/add
'
,
query
:{
type
:
"新增"
}})
router
.
push
({
path
:
'/costManage/projectCostRe
imbursement/apply
'
,
query
:{
type
:
"新增"
}})
}
}
//查看详情
//查看详情
const
handleView
=
({
id
})
=>
{
const
handleView
=
({
id
})
=>
{
console
.
log
(
"详情"
+
id
)
console
.
log
(
"详情"
+
id
)
...
@@ -246,7 +267,7 @@ const handleUpdate=({id})=>{
...
@@ -246,7 +267,7 @@ const handleUpdate=({id})=>{
.left
{
.left
{
display
:
flex
;
display
:
flex
;
flex-direction
:
column
;
flex-direction
:
column
;
width
:
150
px
;
width
:
73
px
;
margin-left
:
40px
;
margin-left
:
40px
;
.left_text
{
.left_text
{
cursor
:
default
;
cursor
:
default
;
...
@@ -275,7 +296,7 @@ const handleUpdate=({id})=>{
...
@@ -275,7 +296,7 @@ const handleUpdate=({id})=>{
width
:
98%
;
width
:
98%
;
justify-content
:
space-evenly
;
justify-content
:
space-evenly
;
align-items
:
center
;
align-items
:
center
;
background-color
:
#
f3f3f3
;
background-color
:
#
F9F9FA
;
.text1
{
.text1
{
font-size
:
18px
;
font-size
:
18px
;
font-weight
:
550
;
font-weight
:
550
;
...
...
src/views/costManage/projectCostRequest/add.vue
View file @
80b51af7
This diff is collapsed.
Click to expand it.
src/views/costManage/projectCostRequest/detail.vue
View file @
80b51af7
This diff is collapsed.
Click to expand it.
src/views/costManage/projectCostRequest/index.vue
View file @
80b51af7
This diff is collapsed.
Click to expand it.
src/views/project/add.vue
View file @
80b51af7
...
@@ -91,6 +91,7 @@
...
@@ -91,6 +91,7 @@
size=
"large"
size=
"large"
multiple
multiple
filterable
filterable
v-hasPermi=
"['project-manager']"
style=
"width: 100%;"
style=
"width: 100%;"
>
>
<el-option
<el-option
...
@@ -114,19 +115,19 @@
...
@@ -114,19 +115,19 @@
<el-form-item
label=
"项目附件"
>
<el-form-item
label=
"项目附件"
>
<el-upload
<el-upload
list-type=
"text"
list-type=
"text"
v-model:file-list=
"form.
file
List"
v-model:file-list=
"form.
projectAnnex
List"
action=
"https://jsonplaceholder.typicode.com/posts/"
action=
"https://jsonplaceholder.typicode.com/posts/"
:on-preview=
"handlePreview"
:on-preview=
"handlePreview"
:on-remove=
"handleRemove"
:on-remove=
"handleRemove"
:before-remove=
"beforeRemove"
:before-remove=
"beforeRemove"
:file-list=
"form.
file
List"
:file-list=
"form.
projectAnnex
List"
:on-exceed=
"handleExceed"
:on-exceed=
"handleExceed"
:auto-upload=
"false"
:auto-upload=
"false"
:on-success=
"handleSuccess"
:on-success=
"handleSuccess"
>
>
<el-button
size=
"large"
type=
"text"
>
<el-button
size=
"large"
type=
"text"
>
<img
src=
"../../assets/icons/common/upl.png"
height=
"16"
width=
"16"
alt=
"上传"
/>
<img
src=
"../../assets/icons/common/upl.png"
height=
"16"
width=
"16"
alt=
"上传"
/>
点击上传
点击上传
附件
</el-button>
</el-button>
</el-upload>
</el-upload>
</el-form-item>
</el-form-item>
...
@@ -138,6 +139,7 @@
...
@@ -138,6 +139,7 @@
placeholder=
"请选择项目回款笔数"
placeholder=
"请选择项目回款笔数"
@
change=
"updateRepaymentInputs"
@
change=
"updateRepaymentInputs"
size=
"large"
size=
"large"
clearable
>
>
<el-option
<el-option
v-for=
"num in 10"
v-for=
"num in 10"
...
@@ -147,13 +149,13 @@
...
@@ -147,13 +149,13 @@
></el-option>
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form
:model=
"form"
:rules=
"rules"
label-width=
"1
40
px"
>
<el-form
:model=
"form"
:rules=
"rules"
label-width=
"1
58
px"
>
<div
v-for=
"(item, index) in form.repaymentDetails"
:key=
"index"
>
<div
v-for=
"(item, index) in form.repaymentDetails"
:key=
"index"
>
<!-- 回款比例 -->
<!-- 回款比例 -->
<el-form-item
:label=
"'第 ' + (index + 1) + ' 笔'"
>
<el-form-item
:label=
"'第 ' + (index + 1) + ' 笔
回款百分比
'"
>
<el-input
<el-input
v-model=
"item.repaymentPercentage"
v-model=
"item.repaymentPercentage"
placeholder=
"请输入回款
比例
"
placeholder=
"请输入回款
百分比
"
@
blur=
"checkPercentage(item.repaymentPercentage, index)"
@
blur=
"checkPercentage(item.repaymentPercentage, index)"
>
>
<template
#
suffix
>
<template
#
suffix
>
...
@@ -162,7 +164,7 @@
...
@@ -162,7 +164,7 @@
</el-input>
</el-input>
</el-form-item>
</el-form-item>
<!-- 回款条件 -->
<!-- 回款条件 -->
<el-form-item
label=
"回款前置条件
"
>
<el-form-item
:label=
"'第 ' + (index + 1) + ' 笔回款前置条件'
"
>
<el-input
<el-input
type=
"textarea"
type=
"textarea"
:autosize=
"{ minRows: 3, maxRows: 20 }"
:autosize=
"{ minRows: 3, maxRows: 20 }"
...
@@ -208,7 +210,7 @@ const form = reactive({
...
@@ -208,7 +210,7 @@ const form = reactive({
projectCost
:
''
,
projectCost
:
''
,
projectDescribe
:
''
,
projectDescribe
:
''
,
projectStatus
:
''
,
projectStatus
:
''
,
file
List
:
[],
projectAnnex
List
:
[],
repaymentCount
:
null
,
repaymentCount
:
null
,
repaymentDetails
:
[],
repaymentDetails
:
[],
draft
:
''
,
draft
:
''
,
...
@@ -244,6 +246,8 @@ const rules = ref({
...
@@ -244,6 +246,8 @@ const rules = ref({
],
],
})
})
// 获取用户列表
const
getUserList
=
()
=>
{
const
getUserList
=
()
=>
{
listUser
().
then
(
response
=>
{
listUser
().
then
(
response
=>
{
headOptions
.
value
=
response
.
rows
.
map
(
item
=>
{
headOptions
.
value
=
response
.
rows
.
map
(
item
=>
{
...
@@ -318,7 +322,7 @@ const resetForm = () => {
...
@@ -318,7 +322,7 @@ const resetForm = () => {
form
.
projectCost
=
''
form
.
projectCost
=
''
form
.
projectDescribe
=
''
form
.
projectDescribe
=
''
form
.
projectStatus
=
''
form
.
projectStatus
=
''
form
.
file
List
=
[]
form
.
projectAnnex
List
=
[]
form
.
repaymentCount
=
''
form
.
repaymentCount
=
''
form
.
repaymentDetails
=
[]
form
.
repaymentDetails
=
[]
form
.
draft
=
''
form
.
draft
=
''
...
...
src/views/project/index.vue
View file @
80b51af7
This diff is collapsed.
Click to expand it.
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