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
c06c6cb1
Commit
c06c6cb1
authored
Mar 25, 2025
by
ZhangRunSong
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://gitlab.91isoft.com:90/gaoying/psa-web
parents
e08e9fb6
f46ab241
Changes
18
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
1049 additions
and
155 deletions
+1049
-155
examineAndApprove.js
src/api/examineAndApprove/examineAndApprove.js
+31
-0
add.vue
src/views/costManage/dailyReimburse/add.vue
+1
-0
edit.vue
src/views/costManage/dailyReimburse/edit.vue
+5
-5
index.vue
src/views/costManage/dailyReimburse/index.vue
+1
-14
projectCostReimbursementApprove.vue
...AndApprove/components/projectCostReimbursementApprove.vue
+71
-3
projectCostRequestApprove.vue
...xamineAndApprove/components/projectCostRequestApprove.vue
+216
-24
tripApplicationApprove.vue
...e/examineAndApprove/components/tripApplicationApprove.vue
+104
-25
tripReimburseApprove.vue
...age/examineAndApprove/components/tripReimburseApprove.vue
+70
-4
index.vue
src/views/costManage/examineAndApprove/index.vue
+5
-3
index.vue
src/views/costManage/projectCostRequest/index.vue
+8
-10
index.vue
src/views/materialapply/index.vue
+1
-1
materialBorrowApproval.vue
src/views/materialapply/materialBorrowApproval.vue
+434
-0
view.vue
src/views/materialapply/view.vue
+10
-2
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/api/examineAndApprove/examineAndApprove.js
0 → 100644
View file @
c06c6cb1
import
request
from
"../../utils/request.js"
;
// 1.项目费用申请审批
//获取所有项目名称(查询下拉框)
export
function
getProjectName
()
{
return
request
({
url
:
'/projectCostRequest/projectAllList'
,
method
:
'get'
})
}
//根据id获取审批流程
export
function
getApproveNodeList
(
id
)
{
return
request
({
url
:
'/approvalConfiguration/getNodeList/'
+
id
,
method
:
'get'
})
}
//获取当前用户角色信息
export
function
getRoleId
()
{
return
request
({
url
:
'/expenseApproval/getAllRoleList'
,
method
:
'get'
})
}
src/views/costManage/dailyReimburse/add.vue
View file @
c06c6cb1
...
...
@@ -115,6 +115,7 @@
placeholder=
"选择日期"
style=
"width: 100%"
:disabled-date=
"pickerOptions.disabledDate"
/>
</el-form-item>
<el-form-item
...
...
src/views/costManage/dailyReimburse/edit.vue
View file @
c06c6cb1
...
...
@@ -16,17 +16,17 @@
>
<el-row
:gutter=
"150"
>
<el-col
:span=
"10"
>
<el-form-item
label=
"项目名称"
prop=
"projectName"
>
<el-form-item
label=
"项目名称"
>
<!--
<el-select
v-model=
"ruleForm.projectName"
placeholder=
"请输入项目名称"
clearable
>
-->
<!--
<el-option
label=
"Zone one"
value=
"shanghai"
/>
-->
<!--
<el-option
label=
"Zone two"
value=
"beijing"
/>
-->
<!--
</el-select>
-->
<el-input
v-model=
"ruleForm.projectName"
placeholder=
"请输入项目名称"
/>
<el-input
disabled
v-model=
"ruleForm.projectName"
placeholder=
"请输入项目名称"
/>
</el-form-item>
<el-form-item
label=
"项目编号"
prop=
"projectNumber"
>
<el-form-item
label=
"项目编号"
>
<el-input
v-model=
"ruleForm.projectNumber"
placeholder=
"请输入项目编号"
disabled
/>
</el-form-item>
<el-form-item
label=
"项目经理"
prop=
"userName"
>
<el-form-item
label=
"项目经理"
>
<el-input
v-model=
"ruleForm.userName"
placeholder=
"请选择项目负责人"
disabled
/>
</el-form-item>
<el-form-item
label=
"项目类型"
prop=
"reimbursementType"
>
...
...
@@ -35,7 +35,7 @@
<el-form-item
label=
"事业部负责人"
prop=
"departName"
>
<el-input
v-model=
"ruleForm.departName"
placeholder=
"请输入项目编号"
disabled
/>
</el-form-item>
<el-form-item
label=
"报销月份"
prop=
"reimbursement"
>
<el-form-item
label=
"报销月份"
>
<el-date-picker
disabled
format=
"YYYY-MM"
...
...
src/views/costManage/dailyReimburse/index.vue
View file @
c06c6cb1
...
...
@@ -313,7 +313,7 @@ function getList() {
//获取所有项目
const
getProjectList
=
()
=>
{
projectList
().
then
(
res
=>
{
// console.log("我是666",res.data)
// Object.assign(projectOption, res.data);
projectOption
.
value
=
res
.
data
.
map
(
item
=>
{
return
{
...
...
@@ -321,7 +321,6 @@ const getProjectList = () => {
label
:
item
.
projectName
}
})
// console.log("我是项目数据",projectOption.value)
})
listUser
().
then
(
response
=>
{
headOptions
.
value
=
response
.
rows
.
map
(
item
=>
{
...
...
@@ -346,16 +345,13 @@ const getAllshenpiList = ()=>{
return
item
.
roleName
})
allList
.
value
=
res
.
data
.
nodeList
console
.
log
(
"所有节点"
,
allList
.
value
)
})
}
const
getPassNumber
=
(
item
)
=>
{
console
.
log
(
"item"
,
item
)
let
allNumber
=
0
for
(
let
item2
of
item
){
console
.
log
(
item2
)
if
(
item2
.
status
===
3
){
allNumber
+=
item2
.
totalMoney
}
...
...
@@ -364,11 +360,9 @@ const getPassNumber = (item)=>{
}
const
getNotPassNumber
=
(
item
)
=>
{
console
.
log
(
"item"
,
item
)
let
allNumber
=
0
for
(
let
item2
of
item
){
console
.
log
(
item2
)
if
(
item2
.
status
===
1
){
allNumber
+=
item2
.
totalMoney
}
...
...
@@ -377,11 +371,9 @@ const getNotPassNumber = (item)=>{
}
const
getAllPassNumber
=
(
item
)
=>
{
console
.
log
(
"item"
,
item
)
let
allNumber
=
0
for
(
let
item2
of
item
){
console
.
log
(
item2
)
allNumber
+=
item2
.
totalMoney
}
return
allNumber
...
...
@@ -390,7 +382,6 @@ const getAllPassNumber = (item)=>{
//获取列表第一个顶部信息
const
getTopApproveInfo
=
()
=>
{
let
item2
=
costManageList
.
value
[
0
]
console
.
log
(
"first"
,
item2
)
changProjectNumber
.
value
=
item2
.
projectNumber
let
i
=
allList
.
value
.
findIndex
((
item
)
=>
item
.
nodeId
===
item2
.
currentAuditRoleId
)
stepActive
.
value
=
i
+
1
...
...
@@ -403,8 +394,6 @@ const toggleSearch = () => {
/** 搜索按钮操作 */
function
handleQuery
()
{
console
.
log
(
"我是被选择的项目"
,
queryParams
.
value
.
projectName
)
// console.log("我的是时间哪去了",queryParams.value.reimbursement)
if
(
queryParams
.
value
.
reimbursementType
===
'1'
){
isFoodType
.
value
=
false
;
isTaxiType
.
value
=
true
;
...
...
@@ -428,7 +417,6 @@ function resetQuery() {
/** 删除按钮操作 */
function
handleDelete
(
row
)
{
const
Ids
=
row
.
id
;
console
.
log
(
"删除"
,
Ids
);
proxy
.
$modal
.
confirm
(
'是否确认删除提交日期为"'
+
row
.
registrationTime
+
'"的数据项?'
).
then
(
function
()
{
return
deleteDailyReimburse
(
Ids
);
}).
then
(()
=>
{
...
...
@@ -484,7 +472,6 @@ const handleHover = (row) => {
}
timer
=
setTimeout
(()
=>
{
changProjectNumber
.
value
=
row
.
projectNumber
console
.
log
(
"摇起来"
,
row
)
let
i
=
allList
.
value
.
findIndex
((
item
)
=>
item
.
nodeId
===
row
.
currentAuditRoleId
)
stepActive
.
value
=
i
+
1
},
300
);
...
...
src/views/costManage/examineAndApprove/components/projectCostReimbursementApprove.vue
View file @
c06c6cb1
...
...
@@ -37,11 +37,27 @@
</div
>
<div
class=
"contentTable"
>
<!-- 按钮-->
<div
style=
"margin-bottom: 30px"
>
<!-- 标题、按钮-->
<div
class=
"shadow_box_bottom_add"
>
<div
class=
"topDiv"
>
<span
class=
"bold-text1"
style=
""
>
项目费用报销审批
</span>
</div>
<div>
<el-button
class=
"el-button-defalut"
type=
"default"
@
click=
""
>
一键驳回
</el-button>
<el-button
class=
"el-button-primary"
style=
"margin-left: 20px"
type=
"primary"
@
click=
""
>
一键通过
</el-button>
</div>
</div>
<!-- 步骤条-->
<div
class=
"shadow_box_bottom_step"
>
<text
class=
"text1"
>
审批流程
</text>
<div
class=
"text2"
>
<text>
项目编号
</text>
<text>
{{
changProjectNumber
}}
</text>
</div>
<div
>
<FlowChart
:dataList=
"list"
:itemWidth=
"'130px'"
:activeIndex=
"2"
/>
</div>
</div>
<!-- 列表 -->
<el-table
:data=
"ReimbursementRequestList"
border
>
<el-table-column
type=
"selection"
align=
"center"
></el-table-column>
...
...
@@ -83,6 +99,7 @@
<
script
setup
>
import
{
reactive
,
ref
}
from
"vue"
;
import
FlowChart
from
'@/components/FlowChart/index.vue'
const
ReimbursementRequestList
=
ref
([
{
shenqingren
:
'张三'
,
...
...
@@ -95,7 +112,8 @@ const ReimbursementRequestList = ref([
approvalStatus
:
'进行中'
}
]);
const
list
=
ref
([
'个人'
,
'项目经理'
,
'事业部负责人'
,
'财务'
,
'总经理'
])
// 流程图内容,只有值
const
allList
=
ref
([])
// 流程图内容,值和角色id
const
total
=
ref
(
0
);
const
queryParams
=
reactive
({
pageNum
:
1
,
...
...
@@ -110,5 +128,55 @@ const queryParams = reactive({
<
style
scoped
lang=
"scss"
>
//步骤条
.shadow_box_bottom_step
{
display
:
flex
;
margin-top
:
10px
;
margin-bottom
:
20px
;
padding
:
20px
0px
;
width
:
100%
;
justify-content
:
space-evenly
;
align-items
:
center
;
background-color
:
#F9F9FA
;
.text1
{
font-size
:
18px
;
font-weight
:
550
;
}
.text2
{
display
:
flex
;
flex-direction
:
column
;
font-size
:
18px
;
align-items
:
center
;
}
.step
{
width
:
80%
;
}
}
//导航 、 按钮
.shadow_box_bottom_add
{
display
:
flex
;
width
:
100%
;
justify-content
:
space-between
;
align-items
:
center
;
padding
:
10px
0
;
margin-bottom
:
20px
;
.topDiv
{
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
}
.bold-text1
{
border-bottom
:
4px
solid
#0062FF
;
padding-bottom
:
22px
;
height
:
15px
;
font-family
:
PingFangSC-Medium
;
font-weight
:
900
;
font-size
:
18px
;
color
:
#0D162A
;
letter-spacing
:
0
;
line-height
:
15px
;
}
}
</
style
>
src/views/costManage/examineAndApprove/components/projectCostRequestApprove.vue
View file @
c06c6cb1
...
...
@@ -20,6 +20,7 @@
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<!-- 审批页的审批状态:待审批,已通过,未通过-->
<el-form-item
label=
"审批状态"
>
<el-select
style=
"width: 220px"
v-model=
"queryParams.approveStatus"
placeholder=
"请选择审批状态"
clearable
>
<el-option
...
...
@@ -37,23 +38,53 @@
</div
>
<div
class=
"contentTable"
>
<!-- 按钮-->
<div
style=
"margin-bottom: 30px"
>
<!-- 标题、按钮-->
<div
class=
"shadow_box_bottom_add"
>
<div
class=
"topDiv"
>
<span
class=
"bold-text1"
style=
""
>
项目费用申请审批
</span>
</div>
<div>
<el-button
class=
"el-button-defalut"
type=
"default"
@
click=
""
>
一键驳回
</el-button>
<el-button
class=
"el-button-primary"
style=
"margin-left: 20px"
type=
"primary"
@
click=
""
>
一键通过
</el-button>
</div>
</div>
<!-- 步骤条-->
<div
class=
"shadow_box_bottom_step"
>
<text
class=
"text1"
>
审批流程
</text>
<div
class=
"text2"
>
<text>
项目编号
</text>
<text>
{{
changProjectNumber
}}
</text>
</div>
<div
>
<FlowChart
:dataList=
"list"
:itemWidth=
"'130px'"
:activeIndex=
"stepActive"
/>
</div>
</div>
<!-- 列表 -->
<el-table
:data=
"projectCostRequestList"
border
>
<el-table
@
cell-mouse-enter=
"handleHover"
@
cell-mouse-leave=
"handleLeave"
:data=
"projectCostRequestList"
border
>
<el-table-column
type=
"selection"
align=
"center"
></el-table-column>
<el-table-column
prop=
"
shenqingren
"
label=
"申请人"
align=
"center"
></el-table-column>
<el-table-column
prop=
"
createBy
"
label=
"申请人"
align=
"center"
></el-table-column>
<el-table-column
prop=
"createTime"
label=
"申请时间"
align=
"center"
min-width=
"100px"
>
</el-table-column>
<el-table-column
prop=
"projectName"
label=
"项目名称"
align=
"center"
></el-table-column>
<el-table-column
prop=
"projectType"
label=
"项目类型"
align=
"center"
></el-table-column>
<!--
<el-table-column
prop=
"userName"
label=
"事业部负责人"
align=
"center"
></el-table-column>
-->
<el-table-column
prop=
"expenseType"
label=
"费用类型"
align=
"center"
></el-table-column>
<el-table-column
prop=
"userName"
label=
"事业部负责人"
align=
"center"
></el-table-column>
<el-table-column
prop=
"costType"
label=
"费用类型"
align=
"center"
>
<template
#
default=
"scope"
>
<dict-tag
:options=
"project_cost_type"
:value=
"scope.row.costType"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"timeOfExpense"
label=
"费用发生时间"
align=
"center"
></el-table-column>
<el-table-column
prop=
"sumMoney"
label=
"预计金额(元)"
align=
"center"
></el-table-column>
<el-table-column
prop=
"approvalStatus"
label=
"审批状态"
align=
"center"
></el-table-column>
<el-table-column
prop=
"approvalStatus"
label=
"整体审批状态"
align=
"center"
>
<
template
#
default=
"scope"
>
<dict-tag
:options=
"project_cost_request_status"
:value=
"scope.row.approveStatus"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"approvalStatus"
label=
"当前审批状态"
align=
"center"
>
<
template
#
default=
"scope"
>
<!--
{{
getCurrentApprovalStatus
(
scope
.
row
)
}}
-->
<el-tag
size=
"large"
:type=
"getCurrentApprovalStatus(scope.row) === 0?'primary':getCurrentApprovalStatus(scope.row) > 0?'success':'info'"
>
{{
getCurrentApprovalStatus
(
scope
.
row
)
===
0
?
'待审批'
:
getCurrentApprovalStatus
(
scope
.
row
)
>
0
?
'已通过'
:
'待前审'
}}
</el-tag>
</
template
>
</el-table-column>
<el-table-column
prop=
"detail"
label=
"详情"
align=
"center"
width=
"100px"
>
<el-tooltip
content=
"详情"
placement=
"top"
>
<el-button
link
type=
"text"
@
click=
"handleView(scope.row)"
>
...
...
@@ -85,35 +116,196 @@
</template>
<
script
setup
>
import
{
reactive
,
ref
}
from
"vue"
;
const
projectCostRequestList
=
ref
([
{
shenqingren
:
'张三'
,
createTime
:
'2025-03-18 10:10:34'
,
projectName
:
'餐饮项目'
,
projectType
:
'RL-人力'
,
userName
:
'ry'
,
expenseType
:
'办公费-宽带费'
,
timeOfExpense
:
'2025-02-01'
,
sumMoney
:
'200'
,
approvalStatus
:
'进行中'
}
]);
import
{
reactive
,
ref
,
onMounted
}
from
"vue"
;
const
router
=
useRouter
()
import
{
useRouter
}
from
'vue-router'
const
{
proxy
}
=
getCurrentInstance
();
import
FlowChart
from
'@/components/FlowChart/index.vue'
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'
);
import
{
getProjectName
,
getApproveNodeList
,
getRoleId
}
from
"../../../../api/examineAndApprove/examineAndApprove.js"
;
import
{
getCostRequestList
}
from
"../../../../api/projectCostRequest/projectCostRequest.js"
;
const
list
=
ref
([])
// 流程图内容,只有值
const
allList
=
ref
([])
// 流程图内容,完整的列表
//当前登录用户角色组
const
currentUserRoleInfoList
=
ref
([])
const
changProjectNumber
=
ref
(
''
)
const
stepActive
=
ref
(
1
)
const
total
=
ref
(
0
);
const
queryParams
=
reactive
({
pageNum
:
1
,
pageSize
:
10
,
projectName
:
null
,
projectNumber
:
null
,
userName
:
null
,
projectType
:
null
,
approveStatus
:
null
})
// 表单 获取所有项目名称
const
projectNameList
=
ref
([]);
const
getAllProjectName
=
()
=>
{
getProjectName
(
queryParams
).
then
(
response
=>
{
projectNameList
.
value
=
response
.
data
;
});
}
getAllProjectName
()
// 重置表单
const
reset
=
()
=>
{
queryParams
.
projectName
=
null
queryParams
.
projectType
=
null
queryParams
.
approveStatus
=
null
getList
()
}
//获取当前用户角色信息
const
getRoleInfo
=
()
=>
{
getRoleId
().
then
(
res
=>
{
console
.
log
(
"角色信息"
,
res
)
currentUserRoleInfoList
.
value
=
res
.
data
})
}
const
getCurrentApprovalStatus
=
(
row
)
=>
{
let
res
=
approvalStatusChange
(
row
)
// if(res === 0) return "待审批"
// else if(res > 0) return "已通过"
// else if(res
<
0
)
return
"待前审"
return
res
}
//获取当前审批状态 返回值0表示当前用户可以审核,大于0已经审核过了,小于0表示表示还没到当前用户
const
approvalStatusChange
=
(
row
)
=>
{
let
currentNodeId
=
row
.
currentAuditRoleId
console
.
log
(
"当前审批状态"
,
currentNodeId
)
// 先根据每个节点的激活nodeid查找对应的角色id---也就是可以申请的角色
let
activeRoleId
=
allList
.
value
.
find
(
item
=>
item
.
nodeId
===
currentNodeId
).
roleId
let
lastCurrentRoleId
=
currentUserRoleInfoList
.
value
[
currentUserRoleInfoList
.
value
.
length
-
1
].
roleId
//激活id的下标减去当前登录用户最后一个角色id的在整体审批列表差
//0表示当前用户可以审核,大于0已经审核过了,小于0表示表示还没到当前用户
return
allList
.
value
.
findIndex
(
item
=>
item
.
roleId
===
activeRoleId
)
-
allList
.
value
.
findIndex
(
item
=>
item
.
roleId
===
lastCurrentRoleId
)
}
//获取列表第一个顶部信息
const
getTopApproveInfo
=
()
=>
{
let
item2
=
projectCostRequestList
.
value
[
0
]
changProjectNumber
.
value
=
item2
.
projectNumber
let
i
=
allList
.
value
.
findIndex
((
item
)
=>
item
.
nodeId
===
item2
.
currentAuditRoleId
)
if
(
i
===
-
1
)
stepActive
.
value
=
1
else
stepActive
.
value
=
i
+
1
}
//表格的鼠标进入事件
let
timer
=
null
;
const
handleHover
=
(
row
,
column
,
cell
,
event
)
=>
{
//防抖
if
(
timer
)
{
clearTimeout
(
timer
);
}
timer
=
setTimeout
(()
=>
{
changProjectNumber
.
value
=
row
.
projectNumber
let
i
=
allList
.
value
.
findIndex
((
item
)
=>
item
.
nodeId
===
row
.
currentAuditRoleId
)
if
(
i
===
-
1
)
stepActive
.
value
=
1
else
stepActive
.
value
=
i
+
1
},
300
);
}
const
handleLeave
=
()
=>
{
if
(
timer
)
{
clearTimeout
(
timer
);
}
timer
=
setTimeout
(()
=>
{
getTopApproveInfo
()
},
300
);
}
//获取所有流程列表,根据审批id
const
getNodeList
=
()
=>
{
getApproveNodeList
(
14
).
then
(
res
=>
{
console
.
log
(
"lkoi"
,
res
)
allList
.
value
=
res
.
data
.
nodeList
list
.
value
=
res
.
data
.
nodeList
.
map
(
item
=>
{
return
item
.
roleName
})
})
}
// 列表
const
projectCostRequestList
=
ref
([]);
const
getList
=
()
=>
{
getCostRequestList
(
queryParams
).
then
(
response
=>
{
total
.
value
=
response
.
total
console
.
log
(
"列表"
,
response
)
projectCostRequestList
.
value
=
response
.
rows
;
getTopApproveInfo
()
});
}
onMounted
(()
=>
{
//获取列表
getList
()
//获取所有审批列表
getNodeList
()
//获取当前用户角色信息
getRoleInfo
()
})
</
script
>
<
style
scoped
lang=
"scss"
>
//步骤条
.shadow_box_bottom_step
{
display
:
flex
;
margin-top
:
10px
;
margin-bottom
:
20px
;
padding
:
20px
0px
;
width
:
100%
;
justify-content
:
space-evenly
;
align-items
:
center
;
background-color
:
#F9F9FA
;
.text1
{
font-size
:
18px
;
font-weight
:
550
;
}
.text2
{
display
:
flex
;
flex-direction
:
column
;
font-size
:
18px
;
align-items
:
center
;
}
.step
{
width
:
80%
;
}
}
//导航 、 按钮
.shadow_box_bottom_add
{
display
:
flex
;
width
:
100%
;
justify-content
:
space-between
;
align-items
:
center
;
padding
:
10px
0
;
margin-bottom
:
20px
;
.topDiv
{
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
}
.bold-text1
{
border-bottom
:
4px
solid
#0062FF
;
padding-bottom
:
22px
;
height
:
15px
;
font-family
:
PingFangSC-Medium
;
font-weight
:
900
;
font-size
:
18px
;
color
:
#0D162A
;
letter-spacing
:
0
;
line-height
:
15px
;
}
}
</
style
>
src/views/costManage/examineAndApprove/components/tripApplicationApprove.vue
View file @
c06c6cb1
...
...
@@ -93,10 +93,28 @@
</div>
<div
class=
"contentTable"
>
<!-- 按钮-->
<div
style=
"margin-bottom: 30px"
>
<el-button
class=
"el-button-defalut"
type=
"default"
@
click=
""
>
一键驳回
</el-button>
<el-button
class=
"el-button-primary"
style=
"margin-left: 20px"
type=
"primary"
@
click=
""
>
一键通过
</el-button>
<!-- 标题、按钮-->
<div
class=
"shadow_box_bottom_add"
>
<div
class=
"topDiv"
>
<span
class=
"bold-text1"
style=
""
>
出差申请审批
</span>
</div>
<!-- 按钮-->
<div>
<el-button
class=
"el-button-defalut"
type=
"default"
@
click=
""
>
一键驳回
</el-button>
<el-button
class=
"el-button-primary"
style=
"margin-left: 20px"
type=
"primary"
@
click=
""
>
一键通过
</el-button>
</div>
</div>
<!-- 步骤条-->
<div
class=
"shadow_box_bottom_step"
>
<text
class=
"text1"
>
审批流程
</text>
<div
class=
"text2"
>
<text>
项目编号
</text>
<text>
{{}}
</text>
</div>
<div
>
<FlowChart
:dataList=
"list"
:itemWidth=
"'130px'"
:activeIndex=
"2"
/>
</div>
</div>
<!-- 表格数据 -->
<el-table
:data=
"projectList"
border
style=
"width: 100%"
>
...
...
@@ -113,7 +131,7 @@
<el-table-column
label=
"审批状态"
align=
"center"
prop=
"projectStatus"
></el-table-column>
<el-table-column
prop=
"detail"
label=
"详情"
align=
"center"
width=
"100px"
>
<el-tooltip
content=
"详情"
placement=
"top"
>
<el-button
link
type=
"text"
@
click=
"handleView(
scope.row
)"
>
<el-button
link
type=
"text"
@
click=
"handleView()"
>
<img
src=
"@/assets/icons/common/check.png"
height=
"32"
width=
"32"
/>
</el-button>
</el-tooltip>
...
...
@@ -126,29 +144,29 @@
</
template
>
</el-table-column>
</el-table>
<div
style=
"padding-right: 35%;"
>
<pagination
v-show=
"total > 0"
:total=
"total"
v-model:page=
"queryParams.pageNum"
v-model:limit=
"queryParams.pageSize"
@
pagination=
"getList"
/
>
</div
>
<!-- <div style="padding-right: 35%;">--
>
<!-- <pagination-->
<!-- v-show="total > 0"-->
<!-- :total="total"-->
<!-- v-model:page="queryParams.pageNum"-->
<!-- v-model:limit="queryParams.pageSize"-->
<!-- @pagination="getList"-->
<!-- />--
>
<!-- </div>--
>
</div>
<!-- 驳回弹出框-->
<el-dialog
top=
"200px"
style=
"width: 745px;height: 300px"
v-model=
"dialogFormVisible"
title=
"驳回"
>
<el-dialog
style=
"width: 745px;height: 300px"
v-model=
"dialogFormVisible"
title=
"驳回"
>
<
template
#
header
>
<div
style=
"margin-bottom:30px;color: #0D162AFF;font-family: PingFangSC-Regular;font-weight: 600;font-size: 16px;
"
>
驳回
<el-divider
/></div>
<div
class=
"text_weight
"
>
驳回
<el-divider
/></div>
</
template
>
<div
style=
"padding:
5px"
>
<div
style=
"font-family: PingFangSC-Regular;font-weight: 550;font-size: 16px;color: #0D162A
"
>
驳回原因
</div>
<div
style=
"width:
680px
;margin-top:10px"
>
<el-input
:rows=
"3"
type=
"textarea"
v-model=
"form.name"
placeholder=
"请输入驳回原因"
/></div>
<div
style=
"padding:
5px;display: flex;flex-direction:column;"
>
<div
class=
"text
"
>
驳回原因
</div>
<div
style=
"width:
95%
;margin-top:10px"
>
<el-input
:rows=
"3"
type=
"textarea"
v-model=
"form.name"
placeholder=
"请输入驳回原因"
/></div>
</div>
<
template
#
footer
>
<div
style=
"position: absolute;left:
60
%;display: flex"
>
<div
style=
"position: absolute;left:
35
%;display: flex"
>
<el-button
@
click=
"dialogFormVisible = false"
class=
"btn-B"
>
取消
</el-button>
<el-button
@
click=
"dialogFormVisible"
class=
"btn-A"
type=
"primary"
>
确定
</el-button>
</div>
...
...
@@ -161,13 +179,15 @@
<
script
setup
lang=
"ts"
>
import
{
ArrowDown
}
from
"@element-plus/icons-vue"
;
import
FlowChart
from
'@/components/FlowChart/index.vue'
import
{
ElMessageBox
}
from
"element-plus"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
ref
,
getCurrentInstance
,
reactive
,
toRefs
}
from
"vue"
const
router
=
useRouter
();
const
{
proxy
}
=
getCurrentInstance
();
const
{
project_status
,
project_type
}
=
proxy
.
useDict
(
'project_status'
,
'project_type'
);
const
list
=
ref
([
'个人'
,
'项目经理'
,
'事业部负责人'
,
'财务'
,
'总经理'
])
// 流程图内容,只有值
const
allList
=
ref
([])
// 流程图内容,值和角色id
const
dialogFormVisible
=
ref
(
false
)
const
projectList
=
ref
([
...
...
@@ -213,6 +233,7 @@ const toggleSearch = () => {
isExpanded
.
value
=
!
isExpanded
.
value
;
}
/** 搜索按钮操作 */
function
handleQuery
()
{
...
...
@@ -222,16 +243,74 @@ function handleQuery() {
function
resetQuery
()
{
}
/** 查看详情按钮操作 */
function
handleView
(){
}
</
script
>
<
style
scoped
lang=
"scss"
>
.el-dialog
:not
(
.is-fullscreen
)
{
margin-top
:
10vh
!
important
;
//步骤条
.shadow_box_bottom_step
{
display
:
flex
;
margin-top
:
10px
;
margin-bottom
:
20px
;
padding
:
20px
0px
;
width
:
100%
;
justify-content
:
space-evenly
;
align-items
:
center
;
background-color
:
#F9F9FA
;
.text1
{
font-size
:
18px
;
font-weight
:
550
;
}
.text2
{
display
:
flex
;
flex-direction
:
column
;
font-size
:
18px
;
align-items
:
center
;
}
.step
{
width
:
80%
;
}
}
//导航 、 按钮
.shadow_box_bottom_add
{
display
:
flex
;
width
:
100%
;
justify-content
:
space-between
;
align-items
:
center
;
padding
:
10px
0
;
.topDiv
{
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
}
.bold-text1
{
border-bottom
:
4px
solid
#0062FF
;
padding-bottom
:
22px
;
height
:
15px
;
font-family
:
"PingFangSC-Medium"
,
sans-serif
;
font-weight
:
900
;
font-size
:
18px
;
color
:
#0D162A
;
letter-spacing
:
0
;
line-height
:
15px
;
}
}
.text_weight
{
font-family
:
"PingFangSC-Medium"
,
sans-serif
;
font-weight
:
600
;
font-size
:
16px
;
}
.bohui
{
font-family
:
"PingFangSC-Medium"
,
sans-serif
;
font-weight
:
500
;
font-size
:
16px
;
color
:
#0D162A
;
}
</
style
>
src/views/costManage/examineAndApprove/components/tripReimburseApprove.vue
View file @
c06c6cb1
...
...
@@ -86,11 +86,27 @@
</div>
<div
class=
"contentTable"
>
<!-- 按钮-->
<div
style=
"margin-bottom: 30px;"
>
<!-- 标题、按钮-->
<div
class=
"shadow_box_bottom_add"
>
<div
class=
"topDiv"
>
<span
class=
"bold-text1"
style=
""
>
差旅报销审批
</span>
</div>
<div>
<el-button
class=
"el-button-defalut"
type=
"default"
@
click=
""
>
一键驳回
</el-button>
<el-button
class=
"el-button-primary"
style=
"margin-left: 20px"
type=
"primary"
@
click=
""
>
一键通过
</el-button>
</div>
</div>
<!-- 步骤条-->
<div
class=
"shadow_box_bottom_step"
>
<text
class=
"text1"
>
审批流程
</text>
<div
class=
"text2"
>
<text>
项目编号
</text>
<text>
{{
changProjectNumber
}}
</text>
</div>
<div
>
<FlowChart
:dataList=
"list"
:itemWidth=
"'130px'"
:activeIndex=
"2"
/>
</div>
</div>
<!-- 表格数据 -->
<el-table
v-loading=
"loading"
:data=
"projectList"
border
style=
"width: 100%"
>
<el-table-column
type=
"selection"
width=
"40"
align=
"right"
/>
...
...
@@ -160,8 +176,9 @@
<
script
setup
>
import
{
reactive
,
ref
}
from
"vue"
;
import
{
ArrowDown
}
from
"@element-plus/icons-vue"
;
import
FlowChart
from
'@/components/FlowChart/index.vue'
const
list
=
ref
([
'个人'
,
'项目经理'
,
'事业部负责人'
,
'财务'
,
'总经理'
])
// 流程图内容,只有值
const
allList
=
ref
([])
// 流程图内容,值和角色id
const
dialogFormVisible
=
ref
(
false
)
const
projectList
=
ref
([
{
...
...
@@ -218,5 +235,54 @@ function resetQuery() {
<
style
scoped
lang=
"scss"
>
//步骤条
.shadow_box_bottom_step
{
display
:
flex
;
margin-top
:
10px
;
margin-bottom
:
20px
;
padding
:
20px
0px
;
width
:
100%
;
justify-content
:
space-evenly
;
align-items
:
center
;
background-color
:
#F9F9FA
;
.text1
{
font-size
:
18px
;
font-weight
:
550
;
}
.text2
{
display
:
flex
;
flex-direction
:
column
;
font-size
:
18px
;
align-items
:
center
;
}
.step
{
width
:
80%
;
}
}
//导航 、 按钮
.shadow_box_bottom_add
{
display
:
flex
;
width
:
100%
;
justify-content
:
space-between
;
align-items
:
center
;
padding
:
10px
0
;
margin-bottom
:
10px
;
.topDiv
{
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
}
.bold-text1
{
border-bottom
:
4px
solid
#0062FF
;
padding-bottom
:
22px
;
height
:
15px
;
font-family
:
PingFangSC-Medium
;
font-weight
:
900
;
font-size
:
18px
;
color
:
#0D162A
;
letter-spacing
:
0
;
line-height
:
15px
;
}
}
</
style
>
src/views/costManage/examineAndApprove/index.vue
View file @
c06c6cb1
...
...
@@ -53,7 +53,7 @@ import ProjectCostReimbursementApprove from "./components/projectCostReimburseme
const
activeName
=
ref
(
'first'
);
const
handleClick
=
(
tab
)
=>
{
console
.
log
(
'点击的标签:'
,
toRaw
(
tab
));
//
console.log('点击的标签:', toRaw(tab));
// 更新当前激活的标签名
activeName
.
value
=
tab
.
name
;
}
...
...
@@ -74,12 +74,14 @@ const handleClick = (tab) =>{
.tabs_span_color
{
font-size
:
16px
;
color
:
#5B5B5B
;
font-family
:
"Microsoft YaHei"
,
sans-serif
;
font-weight
:
500
;
font-family
:
"PingFangSC-Medium"
,
sans-serif
;
}
.tabs_span_colorChange
{
font-size
:
16px
;
color
:
#0062FF
;
font-family
:
"Microsoft YaHei"
,
sans-serif
;
font-weight
:
500
;
font-family
:
"PingFangSC-Medium"
,
sans-serif
;
}
</
style
>
src/views/costManage/projectCostRequest/index.vue
View file @
c06c6cb1
...
...
@@ -2,8 +2,8 @@
<div
class=
"app-container"
>
<!-- 搜索表单-->
<div
class=
"formSearch"
>
<el-form
ref=
"formRef"
:inline=
"true"
:model=
"formInline"
>
<el-form-item
style=
"margin-right: 60px"
label=
"项目名称"
>
<el-form
ref=
"formRef"
:inline=
"true"
:model=
"formInline"
label-width=
"120px"
>
<el-form-item
label=
"项目名称"
>
<el-select
style=
"width: 220px"
v-model=
"queryParams.projectName"
placeholder=
"请选择项目名称"
clearable
>
<el-option
v-for=
"item in projectNameList"
...
...
@@ -12,7 +12,7 @@
:value=
"item"
/>
</el-select>
</el-form-item>
<el-form-item
style=
"margin-right: 60px"
label=
"项目类型"
>
<el-form-item
label=
"项目类型"
>
<el-select
style=
"width: 220px"
v-model=
"queryParams.projectType"
placeholder=
"请选择项目类型"
clearable
>
<el-option
v-for=
"dict in project_type"
...
...
@@ -31,7 +31,7 @@
</el-select>
</el-form-item>
<el-form-item>
<div
style=
"
margin-left: 250px
"
>
<div
style=
"
padding-left: 5.4%
"
>
<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>
</div>
...
...
@@ -102,7 +102,7 @@
<span>
{{
row
.
userName
}}
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"
expense
Type"
label=
"费用类型"
align=
"center"
width=
"200px"
>
<el-table-column
prop=
"
cost
Type"
label=
"费用类型"
align=
"center"
width=
"200px"
>
<
template
#
default=
"scope"
>
<dict-tag
:options=
"project_cost_type"
:value=
"scope.row.costType"
/>
</
template
>
...
...
@@ -185,8 +185,7 @@ const queryParams = reactive({
pageNum
:
1
,
pageSize
:
10
,
projectName
:
null
,
projectNumber
:
null
,
userName
:
null
,
projectType
:
null
,
approveStatus
:
null
})
let
ids
=
ref
([])
...
...
@@ -271,9 +270,8 @@ getAllProjectName()
// 重置表单
const
reset
=
()
=>
{
queryParams
.
projectName
=
null
queryParams
.
projectNumber
=
null
queryParams
.
userName
=
null
queryParams
.
approvalStatus
=
null
queryParams
.
projectType
=
null
queryParams
.
approveStatus
=
null
getList
()
}
// 提交搜索表单
...
...
src/views/materialapply/index.vue
View file @
c06c6cb1
...
...
@@ -345,7 +345,7 @@ function handleUpdate(row) {
}
/** 查看详情操作 */
function
handleView
(
row
)
{
proxy
.
$router
.
push
({
path
:
'/materials/apply/applyview'
,
query
:
{
id
:
row
.
id
}
}
);
proxy
.
$router
.
push
({
path
:
'/materials/apply/applyview'
,
query
:
{
id
:
row
.
id
,
type
:
"0"
}
}
);
}
/** 删除按钮操作 */
...
...
src/views/materialapply/materialBorrowApproval.vue
0 → 100644
View file @
c06c6cb1
This diff is collapsed.
Click to expand it.
src/views/materialapply/view.vue
View file @
c06c6cb1
...
...
@@ -116,13 +116,21 @@ const form = ref({
// 返回项目管理页面
const
reset
=
()
=>
{
// 返回项目
if
(
returnType
===
"1"
){
// 返回项目
proxy
.
$router
.
push
({
path
:
'/material/materialBorrowApproval'
}
)
}
else
if
(
returnType
===
"0"
)
{
// 返回项目
proxy
.
$router
.
push
({
path
:
'/material/materialApply'
}
)
}
}
// 条页面来源
let
returnType
=
null
;
/** 根据ID查到的详细信息 */
const
getInfo
=
()
=>
{
returnType
=
proxy
.
$route
.
query
.
type
;
getApply
(
proxy
.
$route
.
query
.
id
).
then
(
response
=>
{
form
.
value
=
response
.
data
;
}
)
}
...
...
src/views/project/add.vue
View file @
c06c6cb1
...
...
@@ -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 @
c06c6cb1
...
...
@@ -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 @
c06c6cb1
...
...
@@ -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 @
c06c6cb1
...
...
@@ -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 @
c06c6cb1
...
...
@@ -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