明树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
708e181d
Commit
708e181d
authored
Jan 12, 2026
by
yangyajing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
资源库管理、投资目标责任书
parent
d57c83ce
Pipeline
#105990
passed with stage
in 16 seconds
Changes
16
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
894 additions
and
345 deletions
+894
-345
routes.js
src/router/routes.js
+23
-17
manage.less
src/styles/manage.less
+77
-17
addStatement.vue
src/views/investingManage/addStatement.vue
+384
-107
targetLiabilityStatement.vue
src/views/investingManage/targetLiabilityStatement.vue
+4
-4
addProject.vue
src/views/projectManage/addProject.vue
+0
-0
projectAllPage.vue
src/views/projectManage/projectAllPage.vue
+9
-8
projectArgument.vue
src/views/projectManage/projectArgument.vue
+8
-7
projectDecision.vue
src/views/projectManage/projectDecision.vue
+7
-7
projectDraft.vue
src/views/projectManage/projectDraft.vue
+7
-7
projectSetUp.vue
src/views/projectManage/projectSetUp.vue
+7
-7
templateManage.vue
src/views/projectManage/templateManage.vue
+4
-4
departManage.vue
src/views/systemManage/departManage.vue
+18
-58
menuManage.vue
src/views/systemManage/menuManage.vue
+2
-26
resourceManage.vue
src/views/systemManage/resourceManage.vue
+336
-0
roleManage.vue
src/views/systemManage/roleManage.vue
+5
-29
userManage.vue
src/views/systemManage/userManage.vue
+3
-47
No files found.
src/router/routes.js
View file @
708e181d
...
...
@@ -35,37 +35,37 @@ const routes = [
path
:
'/projectDraft'
,
name
:
'projectDraft'
,
title
:
'项目遴选'
,
component
:
()
=>
import
(
'@/views/
manageP
age/projectDraft.vue'
)
component
:
()
=>
import
(
'@/views/
projectMan
age/projectDraft.vue'
)
},
{
path
:
'/projectSetUp'
,
name
:
'projectSetUp'
,
title
:
'项目立项'
,
component
:
()
=>
import
(
'@/views/
manageP
age/projectSetUp.vue'
)
component
:
()
=>
import
(
'@/views/
projectMan
age/projectSetUp.vue'
)
},
{
path
:
'/projectArgument'
,
name
:
'projectArgument'
,
title
:
'项目论证'
,
component
:
()
=>
import
(
'@/views/
manageP
age/projectArgument.vue'
)
component
:
()
=>
import
(
'@/views/
projectMan
age/projectArgument.vue'
)
},
{
path
:
'/projectDecision'
,
name
:
'projectDecision'
,
title
:
'项目决策'
,
component
:
()
=>
import
(
'@/views/
manageP
age/projectDecision.vue'
)
component
:
()
=>
import
(
'@/views/
projectMan
age/projectDecision.vue'
)
},
{
path
:
'/projectAllPage'
,
name
:
'projectAllPage'
,
title
:
'项目档案库'
,
component
:
()
=>
import
(
'@/views/
manageP
age/projectAllPage.vue'
)
component
:
()
=>
import
(
'@/views/
projectMan
age/projectAllPage.vue'
)
},
{
path
:
'/addProject/:type'
,
name
:
'addProject'
,
title
:
'新增项目'
,
component
:
()
=>
import
(
'@/views/
manageP
age/addProject.vue'
)
component
:
()
=>
import
(
'@/views/
projectMan
age/addProject.vue'
)
}
]
},
...
...
@@ -93,37 +93,43 @@ const routes = [
path
:
'/templateManage'
,
name
:
'templateManage'
,
title
:
'模板管理'
,
component
:
()
=>
import
(
'@/views/
manageP
age/templateManage.vue'
)
component
:
()
=>
import
(
'@/views/
projectMan
age/templateManage.vue'
)
},
{
path
:
'/systemManage'
,
name
:
'
系统管理
'
,
title
:
'
systemManage
'
,
name
:
'
systemManage
'
,
title
:
'
系统管理
'
,
meta
:
{
menuName
:
'系统管理'
},
children
:
[
{
path
:
'departManage'
,
name
:
'
部门管理
'
,
title
:
'
departManage
'
,
name
:
'
departManage
'
,
title
:
'
部门管理
'
,
component
:
()
=>
import
(
'@/views/systemManage/departManage.vue'
)
},
{
path
:
'userManage'
,
name
:
'
用户管理
'
,
title
:
'
userManage
'
,
name
:
'
userManage
'
,
title
:
'
用户管理
'
,
component
:
()
=>
import
(
'@/views/systemManage/userManage.vue'
)
},
{
path
:
'roleManage'
,
name
:
'
角色管理
'
,
title
:
'
roleManage
'
,
name
:
'
roleManage
'
,
title
:
'
角色管理
'
,
component
:
()
=>
import
(
'@/views/systemManage/roleManage.vue'
)
},
{
path
:
'menuManage'
,
name
:
'
菜单管理
'
,
title
:
'
menuManage
'
,
name
:
'
menuManage
'
,
title
:
'
菜单管理
'
,
component
:
()
=>
import
(
'@/views/systemManage/menuManage.vue'
)
},
{
path
:
'resourceManage'
,
name
:
'resourceManage'
,
title
:
'资源库管理'
,
component
:
()
=>
import
(
'@/views/systemManage/resourceManage.vue'
)
}
]
},
...
...
src/styles/manage.less
View file @
708e181d
.manage-container{
.system-manage-container{
padding: 20px;
background: rgba(157, 188, 218, 0.1);
height: 100%;
display: flex;
flex-direction: column;
b
ackground: rgba(157, 188, 218, 0.1)
;
b
ox-sizing: border-box
;
}
.manage-header{
.
system-
manage-header{
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 12px 20px 0;
...
...
@@ -20,6 +23,12 @@
}
}
}
.system-manage-content{
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.manage-content{
flex: 1;
height: 0;
...
...
@@ -39,7 +48,7 @@
}
}
}
.
project-
manage{
.manage{
&-container{
width: 100%;
height: 100%;
...
...
@@ -48,16 +57,16 @@
display: flex;
flex-direction: column;
background: rgba(157, 188, 218, 0.1);
.manage-container{
width: 100%;
height
: 100%;
display: flex
;
flex-direction: column
;
background: rgba(255, 255, 255, 0.9)
;
border-radius: 8px
;
padding: 12
px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1)
;
}
}
&-wrap{
width
: 100%;
height: 100%
;
display: flex
;
flex-direction: column
;
background: rgba(255, 255, 255, 0.9)
;
border-radius: 8
px;
padding: 12px
;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
&-header{
...
...
@@ -111,7 +120,7 @@
flex-direction: column;
.tabs-content{
flex: 1;
max-height: 100%
;
height: 0
;
}
.el-tabs{
height: 100%;
...
...
@@ -121,7 +130,7 @@
.tab-content{
height: 100%;
overflow: auto;
padding: 0
2
0px;
padding: 0
1
0px;
.col-title{
height: 24px;
line-height: 24px;
...
...
@@ -197,4 +206,55 @@
height: 100%;
}
}
}
\ No newline at end of file
}
.add-dialog{
.el-tree{
width: 100%;
}
}
.tree-content {
overflow: auto;
position: relative;
.el-tree {
max-height: 700px;
overflow-y: auto;
// 只有当内容超过700px时才显示滚动条
&:not(:hover) {
scrollbar-width: none;
-ms-overflow-style: none;
&::-webkit-scrollbar {
display: none;
}
}
&:hover {
scrollbar-width: thin;
&::-webkit-scrollbar {
display: block;
width: 6px;
}
&::-webkit-scrollbar-thumb {
background-color: rgba(144, 147, 153, 0.3);
border-radius: 3px;
}
&::-webkit-scrollbar-track {
background-color: transparent;
}
}
}
.custom-tree-node {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
padding-right: 8px;
.node-name{
flex: 1;
width: 0;
-webkit-background-clip: text;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
}
\ No newline at end of file
src/views/investingManage/addStatement.vue
View file @
708e181d
...
...
@@ -14,119 +14,261 @@
<el-tabs
v-model=
"pageActiveName"
type=
"border-card"
>
<el-tab-pane
label=
"全生命周期责任书"
name=
"全生命周期责任书"
>
<div
class=
"project-tab-content"
>
<el-form
:model=
"formData"
:label-width=
"150"
:disabled=
"isPreview"
>
<el-collapse
v-model=
"activeCollapse"
>
<el-collapse-item
title=
"责任书基本信息"
name=
"责任书基本信息"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"8"
>
<el-form-item
label=
"层级"
></el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"责任书类型"
></el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目信息"
></el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"责任书文件"
>
<div
class=
"tab-content"
>
<el-form
:model=
"formData"
:label-width=
"130"
:disabled=
"isPreview"
>
<el-collapse
v-model=
"activeCollapse"
>
<el-collapse-item
title=
"责任书基本信息"
name=
"责任书基本信息"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"8"
>
<el-form-item
label=
"层级"
></el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"责任书类型"
></el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目信息"
>
<el-select
v-model=
"formData.projectId"
placeholder=
"请选择"
no-data-text=
"暂无数据"
@
change=
"changeProject"
>
<el-option
v-for=
"item in projectList"
:key=
"item.id"
:label=
"item.projectName"
:value=
"item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"责任书文件"
>
<el-upload
:action=
"windowConfig.baseUrl + '/api/file/upload'"
:headers=
"{Authorization: token}"
:show-file-list=
"false"
multiple
:on-success=
"addZrsFile"
>
<el-button
type=
"default"
>
上传
</el-button>
</el-upload>
<el-button
type=
"default"
@
click=
"multiDeleteZrs"
:disabled=
"!zrsSelectIds.length"
>
删除选中文件
</el-button>
</el-form-item>
<el-form-item
label=
""
>
<el-table
:data=
"zrsData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
@
selection-change=
"zrsSelectionChange"
>
<el-table-column
type=
"selection"
width=
"55"
/>
<el-table-column
prop=
"originalname"
label=
"文件名"
/>
<el-table-column
prop=
"updatedAt"
label=
"上传时间"
/>
<el-table-column
prop=
"size"
label=
"大小"
/>
<el-table-column
fixed=
"right"
label=
"操作"
width=
"100"
>
<
template
#
default=
"{ row, index }"
>
<!-- 需要在查看表单disabled时保持允许下载 -->
<span
class=
"always-click"
@
click=
"downloadFile(row)"
>
下载
</span>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteZrs(index)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目名称"
>
<el-input
v-model=
"formData.projectName"
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"年份"
>
<el-date-picker
v-model=
"formData.nf"
type=
"year"
placeholder=
"请选择"
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"投资主体"
>
<el-input
v-model=
"formData.tzzt"
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目地点"
>
<el-input
v-model=
"formData.xmdd"
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目开工日期"
>
<el-date-picker
v-model=
"formData.xmkgrq"
type=
"date"
placeholder=
"请选择"
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目实施期限"
>
<el-input-number
v-model=
"formData.xmssqx"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
></el-input-number>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目内容概述"
>
<el-input
v-model=
"formData.xmnrgs"
type=
"textarea"
:autosize=
"{minRows: 2, maxRows: 5}"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目经济指标概述"
>
<el-input
v-model=
"formData.xmjjzbgs"
type=
"textarea"
:autosize=
"{minRows: 2, maxRows: 5}"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"责任书具体指标"
name=
"责任书具体指标"
>
<div
class=
"tab-handle"
>
<el-button
type=
"primary"
size=
"small"
@
click=
"addZrsjtzb"
>
新增
</el-button>
</div>
<el-table
:data=
"zrsjtzbData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
show-summary
:summary-method=
"getSummaries"
>
<el-table-column
type=
"index"
width=
"60"
/>
<el-table-column
prop=
"zbmc"
label=
"指标名称"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.zbmc"
type=
"textarea"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"zbmbz"
label=
"指标目标值"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.zbmbz"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"khjzf"
label=
"考核基准分"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.khjzf"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"sfsy"
label=
"是否适用"
>
<
template
#
default=
"scope"
>
<el-switch
v-model=
"scope.row.sfsy"
inline-prompt
active-value=
"1"
active-text=
"是"
inactive-value=
"2"
inactive-text=
"否"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"khsm"
label=
"考核说明"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.khsm"
type=
"textarea"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"60"
>
<
template
#
default=
"scope"
>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteZrsjtzb(scope.$index)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
</el-collapse-item>
</el-collapse>
</el-form>
</div>
</div>
</el-tab-pane>
<el-tab-pane
label=
"全生命周期管理策划"
name=
"全生命周期管理策划"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"策划文件"
>
<el-upload
:action=
"windowConfig.baseUrl + '/api/file/upload'"
:headers=
"{Authorization: token}"
:show-file-list=
"false"
multiple
:on-success=
"addChwjFile"
>
<el-button
type=
"default"
>
上传
</el-button>
</el-upload>
<el-button
type=
"default"
@
click=
"multiDeleteChwj"
:disabled=
"!chwjSelectIds.length"
>
删除选中文件
</el-button>
</el-form-item>
<el-form-item
label=
""
>
<el-table
:data=
"chwjData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
@
selection-change=
"chwjSelectionChange"
>
<el-table-column
type=
"selection"
width=
"55"
/>
<el-table-column
prop=
"originalname"
label=
"文件名"
/>
<el-table-column
prop=
"updatedAt"
label=
"上传时间"
/>
<el-table-column
prop=
"size"
label=
"大小"
/>
<el-table-column
fixed=
"right"
label=
"操作"
width=
"100"
>
<
template
#
default=
"{ row, index }"
>
<!-- 需要在查看表单disabled时保持允许下载 -->
<span
class=
"always-click"
@
click=
"downloadFile(row)"
>
下载
</span>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteChwj(index)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
</el-form-item>
</el-col>
</el-row>
</div>
</div>
</el-tab-pane>
<el-tab-pane
label=
"年度经营管理责任书"
name=
"年度经营管理责任书"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<div
class=
"tab-handle"
>
<el-button
type=
"primary"
size=
"small"
@
click=
"addJyglzrs"
>
新增
</el-button>
</div>
<el-table
:data=
"jyglzrsData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
>
<el-table-column
type=
"index"
width=
"50"
/>
<el-table-column
prop=
"nd"
label=
"年度"
width=
"260"
>
<
template
#
default=
"scope"
>
<el-date-picker
v-model=
"scope.row.nd"
type=
"year"
placeholder=
"请选择"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"经营管理责任书"
prop=
"jyglzrs"
>
<
template
#
default=
"scope"
>
<el-upload
v-if=
"!scope.row.jyglzrs"
:action=
"windowConfig.baseUrl + '/api/file/upload'"
:headers=
"
{Authorization: token}"
:show-file-list="false"
multiple
:on-success=
"addZrsFile"
:on-success="(res, file) => addJyglzrsFile(res, file, scope.row)"
>
<el-button
type=
"default
"
>
上传
</el-button>
<el-button
link
type=
"primary
"
>
上传
</el-button>
</el-upload>
<el-button
type=
"default"
@
click=
"multiDeleteZrs"
:disabled=
"!zrsSelectIds.length"
>
删除选中文件
</el-button>
</el-form-item>
<el-form-item
label=
""
>
<el-table
:data=
"zrsData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
@
selection-change=
"zrsSelectionChange"
>
<el-table-column
type=
"selection"
width=
"55"
/>
<el-table-column
prop=
"originalname"
label=
"文件名"
/>
<el-table-column
prop=
"updatedAt"
label=
"上传时间"
/>
<el-table-column
prop=
"size"
label=
"大小"
/>
<el-table-column
fixed=
"right"
label=
"操作"
width=
"100"
>
<
template
#
default=
"{ row, index }"
>
<!-- 需要在查看表单disabled时保持允许下载 -->
<span
class=
"always-click"
@
click=
"downloadFile(row)"
>
下载
</span>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteZrs(index)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目名称"
>
<el-input
v-model=
"formData.projectName"
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"年份"
>
<el-date-picker
v-model=
"formData.nf"
type=
"year"
placeholder=
"请选择"
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"投资主体"
>
<el-input
v-model=
"formData.tzzt"
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目地点"
>
<el-input
v-model=
"formData.xmdd"
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目开工日期"
>
<el-date-picker
v-model=
"formData.xmkgrq"
type=
"date"
placeholder=
"请选择"
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目实施期限"
>
<el-input-number
v-model=
"formData.xmssqx"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
></el-input-number>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目内容概述"
>
<el-input
v-model=
"formData.xmnrgs"
type=
"textarea"
:autosize=
"{minRows: 2, maxRows: 5}"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目经济指标概述"
>
<el-input
v-model=
"formData.xmjjzbgs"
type=
"textarea"
:autosize=
"{minRows: 2, maxRows: 5}"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"责任书具体指标"
name=
"责任书具体指标"
>
</el-collapse-item>
</el-collapse>
</el-form>
<div
class=
"upload-file-wrap"
v-else
>
<span
class=
"file-name"
@
click=
"downloadFile(scope.row.jyglzrs)"
>
{{
scope
.
row
.
jyglzrs
.
originalname
}}
</span>
<span
class=
"delete-btn"
@
click=
"deleteRowFile(scope.row, scope.$index)"
>
<el-icon><CloseBold
/></el-icon>
</span>
</div>
</
template
>
</el-table-column>
<el-table-column
label=
"说明"
prop=
"sm"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.sm"
type=
"textarea"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"60"
fixed=
"right"
>
<
template
#
default=
"scope"
>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteJyglzrs(scope.$index)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
</el-col>
</el-row>
</div>
</div>
</el-tab-pane>
<el-tab-pane
label=
"全生命周期管理策划"
name=
"全生命周期管理策划"
>
<div
class=
"project-tab-content"
></div>
</el-tab-pane>
<el-tab-pane
label=
"年度经营管理责任书"
name=
"年度经营管理责任书"
>
<div
class=
"project-tab-content"
></div>
</el-tab-pane>
</el-tabs>
</div>
</div>
...
...
@@ -134,7 +276,7 @@
</template>
<
script
setup
>
import
{
reactive
,
ref
,
onMounted
,
getCurrentInstance
,
computed
}
from
"vue"
;
import
{
reactive
,
ref
,
onMounted
,
getCurrentInstance
,
h
}
from
"vue"
;
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
useUserStore
}
from
"@/stores/user.js"
;
...
...
@@ -152,6 +294,34 @@
let
formData
=
reactive
({});
let
loading
=
ref
(
false
);
let
isPreview
=
!!
route
.
query
.
isPreview
;
// 项目列表
let
projectList
=
ref
([]);
const
getProjectData
=
()
=>
{
proxy
.
$post
({
url
:
"/api/project/listProject"
,
data
:
{
page
:
1
,
pagesize
:
1000
,
attributes
:
[],
menuType
:
"xmjc"
},
callback
:
(
data
)
=>
{
projectList
.
value
=
data
.
rows
;
}
})
};
onMounted
(()
=>
{
getProjectData
();
});
// 选择关联项目,同步相关字段信息
const
changeProject
=
(
val
)
=>
{
let
selectData
=
projectList
.
value
.
filter
(
item
=>
item
.
id
===
val
)[
0
];
if
(
selectData
)
{
formData
.
value
.
projectName
=
selectData
.
projectName
;
formData
.
value
.
tzzt
=
selectData
.
tzzt
;
}
}
// 责任书文件
let
zrsData
=
ref
([]);
const
addZrsFile
=
(
res
,
file
)
=>
{
...
...
@@ -179,11 +349,118 @@
zrsData
.
value
=
zrsData
.
value
.
filter
(
item
=>
!
zrsSelectIds
.
value
.
includes
(
item
.
id
));
}).
catch
(()
=>
{})
};
// 责任书具体指标
let
zrsjtzbData
=
ref
([]);
const
addZrsjtzb
=
()
=>
{
zrsjtzbData
.
value
.
push
({});
};
const
deleteZrsjtzb
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,{
confirmButtonText
:
'确认'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
,
}).
then
(()
=>
{
zrsjtzbData
.
value
.
splice
(
index
,
1
);
}).
catch
(()
=>
{})
}
const
getSummaries
=
(
param
)
=>
{
const
{
columns
,
data
}
=
param
;
let
sums
=
[];
columns
.
forEach
((
column
,
index
)
=>
{
if
(
index
===
0
)
{
sums
[
0
]
=
h
(
"div"
,
"合计"
);
return
}
const
values
=
data
.
map
((
item
)
=>
Number
(
item
[
column
.
property
]))
if
(
!
values
.
every
((
value
)
=>
Number
.
isNaN
(
value
)
||
column
.
property
===
"sfsy"
))
{
sums
[
index
]
=
`
${
values
.
reduce
((
prev
,
curr
)
=>
{
const
value
=
Number
(
curr
);
if
(
!
Number
.
isNaN
(
value
))
{
return
prev
+
curr
}
else
{
return
prev
}
},
0
)}
`
} else {
sums[index] = "";
}
});
return sums;
};
// 策划文件
let chwjData = ref([]);
const addChwjFile = (res, file) => {
chwjData.value.push(res.data);
}
const deleteChwj = (index) => {
ElMessageBox.confirm("确认删除该项?", "提示",{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
chwjData.value.splice(index, 1);
}).catch(() => {})
}
let chwjSelectIds = ref([]);
const chwjSelectionChange = (datas) => {
chwjSelectIds.value = datas.map(item => item.id);
};
const multiDeleteChwj = () => {
ElMessageBox.confirm("确认删除选中数据?", "提示",{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
chwjData.value = chwjData.value.filter(item => !chwjSelectIds.value.includes(item.id));
}).catch(() => {})
};
// 经营管理责任书
let jyglzrsData = ref([]);
const addJyglzrs = () => {
jyglzrsData.value.push({});
}
const deleteJyglzrs = (index) => {
jyglzrsData.value.splice(index, 1);
}
const addJyglzrsFile = (res, file, row) => {
row.jyglzrs = {};
Object.assign(row.jyglzrs, res.data);
};
const deleteRowFile = (row, index) => {
let {jyglzrs, ...data} = row;
jyglzrsData.value[index] = data;
};
// 下载已上传文件
const downloadFile = (data) => {
let a = document.createElement("a");
a.href = `
$
{
proxy
.
windowConfig
.
baseUrl
}
/api/file/download/
${
data
.
id
}
`
;
a
.
download
=
data
.
originalname
;
document
.
body
.
appendChild
(
a
);
a
.
click
();
a
.
remove
();
};
const
backClick
=
()
=>
{
router
.
replace
(
"/targetLiabilityStatement"
);
}
const
saveClick
=
()
=>
{}
const
saveClick
=
()
=>
{
let
url
=
formData
.
id
?
"updateTzmbzrs"
:
"createTzmbzrs"
;
proxy
.
$post
({
url
:
"/api/project/"
+
url
,
data
:
{
...
formData
,
zrswj
:
zrsData
.
value
,
tzmbzrsZbs
:
zrsjtzbData
.
value
,
chwj
:
chwjData
.
value
,
jyglzrs
:
jyglzrsData
.
value
},
callback
:
(
data
)
=>
{
router
.
replace
(
"/targetLiabilityStatement"
);
}
})
}
</
script
>
...
...
src/views/investingManage/targetLiabilityStatement.vue
View file @
708e181d
<
template
>
<div
class=
"
project-
manage-container"
>
<div
class=
"manage-
container
"
>
<div
class=
"
project-
manage-header"
>
<div
class=
"manage-container"
>
<div
class=
"manage-
wrap
"
>
<div
class=
"manage-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
>
<el-button
type=
"primary"
@
click=
"addStatement"
>
新增
</el-button>
</div>
</div>
<div
class=
"
project-
manage-content"
v-loading=
"loading"
>
<div
class=
"manage-content"
v-loading=
"loading"
>
<common-table
:autoHeight=
"true"
:maxRows=
"10"
...
...
src/views/
manageP
age/addProject.vue
→
src/views/
projectMan
age/addProject.vue
View file @
708e181d
File moved
src/views/
manageP
age/projectAllPage.vue
→
src/views/
projectMan
age/projectAllPage.vue
View file @
708e181d
<
template
>
<div
class=
"
project-
manage-container"
>
<div
class=
"manage-
container
"
>
<div
class=
"
project-
manage-header"
>
<div
class=
"manage-container"
>
<div
class=
"manage-
wrap
"
>
<div
class=
"manage-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
>
<el-button
type=
"primary"
@
click=
"showFieldsModal"
>
表头筛选
</el-button>
</div>
</div>
<div
class=
"
project-
manage-content"
v-loading=
"loading"
>
<div
class=
"manage-content"
v-loading=
"loading"
>
<common-table
:autoHeight=
"true"
:maxRows=
"10"
...
...
@@ -161,6 +161,11 @@
}
})
};
onMounted
(()
=>
{
getTableFields
();
getProjectData
();
})
// 分页
const
handleSizeChange
=
(
size
)
=>
{
pageSize
.
value
=
size
;
...
...
@@ -184,10 +189,6 @@
}
})
}
onMounted
(()
=>
{
getTableFields
();
getProjectData
();
})
</
script
>
<
style
scoped
lang=
"less"
>
...
...
src/views/
manageP
age/projectArgument.vue
→
src/views/
projectMan
age/projectArgument.vue
View file @
708e181d
<
template
>
<div
class=
"
project-
manage-container"
>
<div
class=
"manage-
container
"
>
<div
class=
"
project-
manage-header"
>
<div
class=
"manage-container"
>
<div
class=
"manage-
wrap
"
>
<div
class=
"manage-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
></div>
</div>
<div
class=
"
project-
manage-content"
v-loading=
"loading"
>
<div
class=
"manage-content"
v-loading=
"loading"
>
<common-table
:autoHeight=
"true"
:maxRows=
"10"
...
...
@@ -96,6 +96,10 @@
}
})
};
onMounted
(()
=>
{
getProjectData
();
})
// 分页
const
handleSizeChange
=
(
size
)
=>
{
pageSize
.
value
=
size
;
...
...
@@ -130,9 +134,6 @@
}
})
};
onMounted
(()
=>
{
getProjectData
();
})
</
script
>
<
style
scoped
lang=
"less"
>
...
...
src/views/
manageP
age/projectDecision.vue
→
src/views/
projectMan
age/projectDecision.vue
View file @
708e181d
<
template
>
<div
class=
"
project-
manage-container"
>
<div
class=
"manage-
container
"
>
<div
class=
"
project-
manage-header"
>
<div
class=
"manage-container"
>
<div
class=
"manage-
wrap
"
>
<div
class=
"manage-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
></div>
</div>
<div
class=
"
project-
manage-content"
v-loading=
"loading"
>
<div
class=
"manage-content"
v-loading=
"loading"
>
<common-table
:autoHeight=
"true"
:maxRows=
"10"
...
...
@@ -96,6 +96,9 @@
}
})
};
onMounted
(()
=>
{
getProjectData
();
})
// 分页
const
handleSizeChange
=
(
size
)
=>
{
pageSize
.
value
=
size
;
...
...
@@ -119,9 +122,6 @@
}
})
};
onMounted
(()
=>
{
getProjectData
();
})
</
script
>
<
style
scoped
lang=
"less"
>
...
...
src/views/
manageP
age/projectDraft.vue
→
src/views/
projectMan
age/projectDraft.vue
View file @
708e181d
<
template
>
<div
class=
"
project-
manage-container"
>
<div
class=
"manage-
container
"
>
<div
class=
"
project-
manage-header"
>
<div
class=
"manage-container"
>
<div
class=
"manage-
wrap
"
>
<div
class=
"manage-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
>
<el-button
type=
"primary"
@
click=
"addProject"
>
新增
</el-button>
</div>
</div>
<div
class=
"
project-
manage-content"
v-loading=
"loading"
>
<div
class=
"manage-content"
v-loading=
"loading"
>
<common-table
:autoHeight=
"true"
:maxRows=
"10"
...
...
@@ -99,6 +99,9 @@
}
})
};
onMounted
(()
=>
{
getProjectData
();
})
// 分页
const
handleSizeChange
=
(
size
)
=>
{
pageSize
.
value
=
size
;
...
...
@@ -153,9 +156,6 @@
})
}).
catch
(()
=>
{})
}
onMounted
(()
=>
{
getProjectData
();
})
</
script
>
<
style
scoped
lang=
"less"
>
...
...
src/views/
manageP
age/projectSetUp.vue
→
src/views/
projectMan
age/projectSetUp.vue
View file @
708e181d
<
template
>
<div
class=
"
project-
manage-container"
>
<div
class=
"manage-
container
"
>
<div
class=
"
project-
manage-header"
>
<div
class=
"manage-container"
>
<div
class=
"manage-
wrap
"
>
<div
class=
"manage-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
></div>
</div>
<div
class=
"
project-
manage-content"
v-loading=
"loading"
>
<div
class=
"manage-content"
v-loading=
"loading"
>
<common-table
:autoHeight=
"true"
:maxRows=
"10"
...
...
@@ -103,6 +103,9 @@
}
})
};
onMounted
(()
=>
{
getProjectData
();
})
// 分页
const
handleSizeChange
=
(
size
)
=>
{
pageSize
.
value
=
size
;
...
...
@@ -145,9 +148,6 @@
}
});
};
onMounted
(()
=>
{
getProjectData
();
})
</
script
>
<
style
scoped
lang=
"less"
>
...
...
src/views/
manageP
age/templateManage.vue
→
src/views/
projectMan
age/templateManage.vue
View file @
708e181d
<
template
>
<div
class=
"
project-
manage-container"
>
<div
class=
"manage-
container
"
>
<div
class=
"
project-
manage-header"
>
<div
class=
"manage-container"
>
<div
class=
"manage-
wrap
"
>
<div
class=
"manage-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
>
<el-button
type=
"primary"
@
click=
"addItem"
>
新增
</el-button>
<el-button
type=
"primary"
@
click=
"exportData"
>
导出
</el-button>
</div>
</div>
<div
class=
"
project-
manage-content"
>
<div
class=
"manage-content"
>
<el-table
:data=
"tableData"
style=
"width: 100%; height: 100%;"
empty-text=
"暂无数据"
border
>
<el-table-column
type=
"index"
width=
"50"
/>
<el-table-column
v-for=
"column in tableColumns"
:key=
"column.prop"
...
...
src/views/systemManage/departManage.vue
View file @
708e181d
...
...
@@ -152,19 +152,23 @@ const handleDelete = (data) => {
const
saveDepartForm
=
()
=>
{
let
url
=
departFormData
.
value
.
id
?
"updateDepart"
:
"createDepart"
proxy
.
$post
({
url
:
"/api/user/depart/"
+
url
,
data
:
departFormData
.
value
,
callback
:
(
data
)
=>
{
ElMessage
.
success
(
dialogTitle
.
value
+
"成功"
);
cancelDepartForm
();
loadTreeData
();
},
error
:
(
err
)
=>
{
ElMessage
.
error
(
"组织添加失败:"
,
err
);
},
});
departForm
.
value
.
validate
(
valid
=>
{
if
(
valid
)
{
let
url
=
departFormData
.
value
.
id
?
"updateDepart"
:
"createDepart"
proxy
.
$post
({
url
:
"/api/user/depart/"
+
url
,
data
:
departFormData
.
value
,
callback
:
(
data
)
=>
{
ElMessage
.
success
(
dialogTitle
.
value
+
"成功"
);
cancelDepartForm
();
loadTreeData
();
},
error
:
(
err
)
=>
{
ElMessage
.
error
(
"组织添加失败:"
,
err
);
},
});
}
})
};
const
cancelDepartForm
=
()
=>
{
departForm
.
value
.
resetFields
();
...
...
@@ -300,6 +304,7 @@ onMounted(() => {
</
script
>
<
style
scoped
lang=
"less"
>
@import "@/styles/manage.less";
.depart-manage {
padding: 20px;
background: rgba(157, 188, 218, 0.1);
...
...
@@ -324,53 +329,8 @@ onMounted(() => {
.tree-content {
flex: 1;
height: 0;
overflow: auto;
margin-top: 20px;
position: relative;
.el-tree {
max-height: 700px;
overflow-y: auto;
// 只有当内容超过700px时才显示滚动条
&:not(:hover) {
scrollbar-width: none;
-ms-overflow-style: none;
&::-webkit-scrollbar {
display: none;
}
}
&:hover {
scrollbar-width: thin;
&::-webkit-scrollbar {
display: block;
width: 6px;
}
&::-webkit-scrollbar-thumb {
background-color: rgba(144, 147, 153, 0.3);
border-radius: 3px;
}
&::-webkit-scrollbar-track {
background-color: transparent;
}
}
}
.custom-tree-node {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
padding-right: 8px;
.node-name{
flex: 1;
width: 0;
-webkit-background-clip: text;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
}
.user-content {
flex: 1;
width: 0;
...
...
src/views/systemManage/menuManage.vue
View file @
708e181d
<
template
>
<div
class=
"manage-container menu-manage"
v-loading=
"loading"
>
<div
class=
"
manage-content table-container
"
>
<div
class=
"
system-
manage-container menu-manage"
v-loading=
"loading"
>
<div
class=
"
system-manage-content manage-content
"
>
<common-table
:data=
"tableData"
:columns=
"tableColumns"
...
...
@@ -186,28 +186,4 @@ onMounted(() => {
<
style
scoped
lang=
"less"
>
@import "@/styles/manage.less";
.menu-manage {
padding: 20px;
background: rgba(157, 188, 218, 0.1);
height: 100%;
display: flex;
flex-direction: column;
box-sizing: border-box;
.search-form {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 20px;
margin-bottom: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
flex-shrink: 0;
}
.table-container {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
}
</
style
>
src/views/systemManage/resourceManage.vue
0 → 100644
View file @
708e181d
<
template
>
<div
class=
"system-manage-container"
>
<div
class=
"system-manage-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
>
<el-form>
<el-form-item>
<el-button
type=
"primary"
@
click=
"handleAdd"
>
新增
</el-button>
</el-form-item>
</el-form>
</div>
</div>
<div
class=
"system-manage-content manage-content"
>
<common-table
:autoHeight=
"true"
:data=
"tableData"
:columns=
"tableColumns"
:total=
"total"
:current-page=
"currentPage"
:page-size=
"pageSize"
title=
""
:index=
"true"
:border=
"true"
@
size-change=
"handleSizeChange"
@
current-page-change=
"handleCurrentPageChange"
>
<template
#
operations=
"
{ row, index }">
<el-button
link
type=
"primary"
size=
"small"
@
click=
"handleEdit(row, index)"
>
编辑
</el-button>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"handleDelete(row, index)"
>
删除
</el-button>
</
template
>
</common-table>
</div>
<el-dialog
class=
"add-dialog"
v-model=
"dialogVisible"
:title=
"dialogTitle"
width=
"600px"
@
close=
"cancelResourceForm"
>
<el-form
:model=
"resourceFormData"
ref=
"resourceForm"
:rules=
"resourceRules"
label-width=
"100"
>
<el-form-item
label=
"名称"
prop=
"name"
>
<el-input
v-model=
"resourceFormData.name"
placeholder=
"请输入资源库名称"
/>
</el-form-item>
<el-form-item
label=
"唯一标识"
prop=
"key"
>
<el-input
v-model=
"resourceFormData.key"
placeholder=
"请输入唯一标识"
/>
</el-form-item>
<el-form-item
label=
"类型"
prop=
"type"
>
<el-select
v-model=
"resourceFormData.type"
placeholder=
"请选择数据类型"
>
<el-option
label=
"平级数据"
value=
"1"
></el-option>
<el-option
label=
"树形数据"
value=
"2"
></el-option>
</el-select>
</el-form-item>
<el-button
type=
"primary"
@
click=
"addNode"
>
添加节点
</el-button>
<el-form-item
label=
"资源库数据"
>
<div
class=
"tree-content"
>
<el-tree
ref=
"treeRef"
:data=
"treeData"
node-key=
"key"
default-expand-all
:props=
"{label: 'name'}"
>
<
template
#
default=
"{ node, data }"
>
<div
class=
"custom-tree-node"
>
<span
class=
"node-name"
>
{{
node
.
label
}}
</span>
<el-dropdown>
<span
class=
"el-dropdown-link"
>
<i
class=
"iconfont icon-gengduo"
></i>
</span>
<template
#
dropdown
>
<el-dropdown-menu>
<el-dropdown-item
@
click=
"nodeAddChild(data)"
v-if=
"resourceFormData.type == 2"
>
<i
class=
"iconfont icon-tianjia"
></i>
添加子部门
</el-dropdown-item>
<el-dropdown-item
@
click=
"nodeEdit(data)"
>
<i
class=
"iconfont icon-bianji"
></i>
编辑
</el-dropdown-item>
<el-dropdown-item
@
click=
"nodeDelete(data)"
>
<i
class=
"iconfont icon-shanchu"
></i>
删除
</el-dropdown-item>
</el-dropdown-menu>
</
template
>
</el-dropdown>
</div>
</template>
</el-tree>
</div>
</el-form-item>
</el-form>
<
template
#
footer
>
<div
class=
"dialog-footer"
>
<el-button
@
click=
"cancelResourceForm"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"saveResourceForm"
>
保存
</el-button>
</div>
</
template
>
</el-dialog>
<el-dialog
v-model=
"listDialogVisible"
:title=
"listDialogTitle"
width=
"600px"
@
close=
"cancelListForm"
>
<el-form
:model=
"listFormData"
ref=
"listForm"
:rules=
"listRules"
label-width=
"100"
>
<el-form-item
label=
"名称"
prop=
"name"
>
<el-input
v-model=
"listFormData.name"
placeholder=
"请输入资源库名称"
/>
</el-form-item>
<el-form-item
label=
"唯一标识"
prop=
"key"
>
<el-input
v-model=
"listFormData.key"
placeholder=
"请输入唯一标识"
/>
</el-form-item>
</el-form>
<
template
#
footer
>
<div
class=
"dialog-footer"
>
<el-button
@
click=
"cancelListForm"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"saveListForm"
>
确定
</el-button>
</div>
</
template
>
</el-dialog>
</div>
</template>
<
script
setup
>
import
{
ref
,
reactive
,
onMounted
,
getCurrentInstance
,
computed
}
from
"vue"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
CommonTable
from
"@/components/common/commonTable.vue"
;
const
{
proxy
}
=
getCurrentInstance
();
const
loading
=
ref
(
false
);
const
tableData
=
ref
([]);
const
total
=
ref
(
0
);
const
currentPage
=
ref
(
1
);
const
pageSize
=
ref
(
10
);
// 表格列配置
const
tableColumns
=
[
{
prop
:
"name"
,
label
:
"资源库名称"
,
minWidth
:
100
,
showOverflowTooltip
:
true
,
},
{
prop
:
"operations"
,
label
:
"操作"
,
width
:
120
,
slot
:
"operations"
,
fixed
:
"right"
,
align
:
"center"
,
}
];
const
getResourceData
=
()
=>
{
loading
.
value
=
true
;
proxy
.
$post
({
url
:
"/api/resource/listResource"
,
data
:
{
page
:
currentPage
.
value
,
pagesize
:
pageSize
.
value
},
callback
:
(
data
)
=>
{
tableData
.
value
=
data
.
rows
;
total
.
value
=
data
.
count
;
loading
.
value
=
false
;
}
})
};
onMounted
(()
=>
{
getResourceData
();
});
// 分页
const
handleSizeChange
=
(
size
)
=>
{
pageSize
.
value
=
size
;
currentPage
.
value
=
1
;
getResourceData
();
}
const
handleCurrentPageChange
=
(
page
)
=>
{
currentPage
.
value
=
page
;
getResourceData
();
}
const
dialogVisible
=
ref
(
false
);
const
dialogTitle
=
ref
(
"新增资源库"
);
const
resourceForm
=
ref
();
const
resourceFormData
=
ref
({});
const
resourceRules
=
{
name
:
[
{
required
:
true
,
message
:
"请输入名称"
,
trigger
:
"blur"
}
],
key
:
[
{
required
:
true
,
message
:
"请输入唯一标识"
,
trigger
:
"blur"
}
]
};
let
treeData
=
ref
([]);
const
treeRef
=
ref
();
const
handleAdd
=
()
=>
{
dialogTitle
.
value
=
"新增资源库"
;
dialogVisible
.
value
=
true
;
};
const
listDialogVisible
=
ref
(
false
);
const
listDialogTitle
=
ref
(
"添加节点"
);
const
listForm
=
ref
();
const
listFormData
=
ref
({});
const
listRules
=
{
name
:
[
{
required
:
true
,
message
:
"请输入名称"
,
trigger
:
"blur"
}
],
key
:
[
{
required
:
true
,
message
:
"请输入唯一标识"
,
trigger
:
"blur"
}
]
};
const
addNode
=
()
=>
{
listDialogVisible
.
value
=
true
;
listDialogTitle
.
value
=
"添加节点"
;
};
const
nodeData
=
ref
(
null
);
const
cancelListForm
=
()
=>
{
nodeData
.
value
=
null
;
listFormData
.
value
=
{};
listForm
.
value
.
resetFields
();
listDialogVisible
.
value
=
false
;
};
// 添加子节点
const
nodeAddChild
=
(
data
)
=>
{
nodeData
.
value
=
data
;
addNode
();
}
// 添加节点数据
const
saveListForm
=
()
=>
{
let
data
=
{
name
:
listFormData
.
value
.
name
,
key
:
listFormData
.
value
.
key
};
if
(
nodeData
.
value
)
{
treeRef
.
value
.
append
(
data
,
nodeData
.
value
);
}
else
{
treeRef
.
value
.
append
(
data
);
}
cancelListForm
();
};
const
nodeEdit
=
(
data
)
=>
{
listFormData
.
value
=
{
...
data
};
dialogVisible
.
value
=
false
;
listDialogVisible
.
value
=
true
;
listDialogTitle
.
value
=
"编辑节点"
;
};
// 删除节点
const
nodeDelete
=
(
data
)
=>
{
ElMessageBox
.
confirm
(
`确定删除节点
${
data
.
name
}
?`
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
}).
then
(()
=>
{
treeRef
.
value
.
remove
(
data
);
});
};
// 添加资源库
const
saveResourceForm
=
()
=>
{
resourceForm
.
value
.
validate
(
valid
=>
{
if
(
valid
)
{
let
url
=
resourceFormData
.
value
.
id
?
""
:
"createResource"
proxy
.
$post
({
url
:
"/api/resource/"
+
url
,
data
:
{
key
:
resourceFormData
.
value
.
key
,
name
:
resourceFormData
.
value
.
name
,
type
:
resourceFormData
.
value
.
type
||
"1"
,
resourceInfos
:
treeData
.
value
},
callback
:
(
data
)
=>
{
ElMessage
.
success
(
dialogTitle
.
value
+
"成功"
);
cancelResourceForm
();
getResourceData
();
},
error
:
(
err
)
=>
{
ElMessage
.
error
(
dialogTitle
.
value
+
"失败:"
,
err
);
}
})
}
})
}
const
cancelResourceForm
=
()
=>
{
resourceFormData
.
value
=
{};
treeData
.
value
=
[];
resourceForm
.
value
.
resetFields
();
dialogVisible
.
value
=
false
;
};
const
handleEdit
=
(
row
,
index
)
=>
{
proxy
.
$post
({
url
:
"/api/resource/getResource"
,
data
:
{
id
:
row
.
id
},
callback
:
(
data
)
=>
{
resourceFormData
.
value
=
{
...
data
};
treeData
.
value
=
data
.
resourceInfos
||
[];
}
})
}
// 删除资源库
const
handleDelete
=
async
(
row
,
index
)
=>
{
try
{
await
ElMessageBox
.
confirm
(
`确定要删除"
${
row
.
name
}
"吗?`
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
});
proxy
.
$post
({
url
:
"/api/resource/deleteResource"
,
data
:
{
id
:
row
.
id
},
callback
:
(
data
)
=>
{
getResourceData
();
ElMessage
.
success
(
"删除成功"
);
},
error
:
(
err
)
=>
{
ElMessage
.
error
(
"删除失败:"
,
err
);
}
});
}
catch
{}
};
</
script
>
<
style
lang=
"less"
>
@import "@/styles/manage.less";
.tree-content{
width: 100%;
height: 150px;
}
</
style
>
\ No newline at end of file
src/views/systemManage/roleManage.vue
View file @
708e181d
<
template
>
<div
class=
"manage-container role-manage"
v-loading=
"loading"
>
<div
class=
"manage-header"
>
<div
class=
"
system-
manage-container role-manage"
v-loading=
"loading"
>
<div
class=
"
system-
manage-header"
>
<div
class=
"header-left"
>
<el-form
:inline=
"true"
:model=
"searchForm"
>
<el-form-item
label=
"名称查询"
>
...
...
@@ -19,7 +19,7 @@
</el-form>
</div>
</div>
<div
class=
"
manage-content table-container
"
>
<div
class=
"
system-manage-content manage-content
"
>
<common-table
:autoHeight=
"true"
:maxRows=
"10"
...
...
@@ -47,7 +47,7 @@
</common-table>
</div>
<el-dialog
<el-dialog
class=
"add-dialog"
v-model=
"dialogVisible"
:title=
"dialogTitle"
width=
"400px"
...
...
@@ -260,7 +260,7 @@ const saveRoleForm = () => {
},
error
:
(
err
)
=>
{
ElMessage
.
error
(
dialogTitle
.
value
+
"失败:"
,
err
);
}
,
}
});
}
})
...
...
@@ -338,30 +338,6 @@ onMounted(() => {
<
style
scoped
lang=
"less"
>
@import "@/styles/manage.less";
.role-manage {
padding: 20px;
background: rgba(157, 188, 218, 0.1);
height: 100%;
display: flex;
flex-direction: column;
box-sizing: border-box;
.search-form {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 20px;
margin-bottom: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
flex-shrink: 0;
}
.table-container {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
}
.el-tree {
max-height: 500px;
overflow-y: auto;
...
...
src/views/systemManage/userManage.vue
View file @
708e181d
<
template
>
<div
class=
"manage-container user-manage"
v-loading=
"loading"
>
<div
class=
"manage-header"
>
<div
class=
"
system-
manage-container user-manage"
v-loading=
"loading"
>
<div
class=
"
system-
manage-header"
>
<div
class=
"header-left"
>
<el-form
:inline=
"true"
:model=
"searchForm"
>
<el-form-item
label=
"关键字查询"
>
...
...
@@ -19,7 +19,7 @@
</el-form>
</div>
</div>
<div
class=
"
manage-content table-container
"
>
<div
class=
"
system-manage-content manage-content
"
>
<common-table
:autoHeight=
"true"
:data=
"tableData"
...
...
@@ -198,14 +198,11 @@ const tableColumns = [
// 对话框相关
const
dialogVisible
=
ref
(
false
);
const
dialogTitle
=
ref
(
"新增用户"
);
const
isEdit
=
ref
(
false
);
const
editIndex
=
ref
(
-
1
);
// 用户表单数据
const
userForm
=
ref
();
const
userFormData
=
ref
({});
const
departmentData
=
ref
([]);
const
positionsData
=
ref
([]);
const
rolesData
=
ref
([]);
const
loadDepartmentData
=
()
=>
{
...
...
@@ -219,18 +216,6 @@ const loadDepartmentData = () => {
});
};
// 岗位下拉数据
const
loadPositionsData
=
()
=>
{
proxy
.
$post
({
url
:
"/api/user/position/listPosition"
,
data
:
{},
callback
:
(
data
)
=>
{
positionsData
.
value
=
data
.
rows
;
},
error
:
(
err
)
=>
{},
});
};
// 角色下拉数据
const
loadRolesData
=
()
=>
{
proxy
.
$post
({
...
...
@@ -274,15 +259,12 @@ const handleCurrentPageChange = (page) => {
// 新增用户
const
handleAdd
=
()
=>
{
isEdit
.
value
=
false
;
dialogTitle
.
value
=
"新增用户"
;
dialogVisible
.
value
=
true
;
};
// 编辑
const
handleEdit
=
(
row
,
index
)
=>
{
isEdit
.
value
=
true
;
dialogTitle
.
value
=
"编辑用户"
;
editIndex
.
value
=
index
;
proxy
.
$post
({
url
:
"/api/user/manage/getUserInfo"
,
data
:
{
id
:
row
.
id
},
...
...
@@ -399,30 +381,4 @@ onMounted(() => {
<
style
scoped
lang=
"less"
>
@import "@/styles/manage.less";
.user-manage {
padding: 8px 8px 20px 8px;
background: rgba(157, 188, 218, 0.1);
height: 100%;
display: flex;
flex-direction: column;
box-sizing: border-box;
.search-form {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 20px;
margin-bottom: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
flex-shrink: 0;
}
.table-container {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
padding-left: 0px;
padding-top: 2px;
}
}
</
style
>
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