明树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
d9d21c69
Commit
d9d21c69
authored
Jan 22, 2026
by
zhanghan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
投后管理开发完毕
parent
30abc7bb
Changes
13
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
1243 additions
and
372 deletions
+1243
-372
index.vue
src/components/FileUploader/index.vue
+0
-1
index.vue
src/components/FormDynamicTable/index.vue
+537
-0
routes.js
src/router/routes.js
+12
-0
verticalManages.css
src/styles/verticalManages.css
+18
-1
verticalManages.less
src/styles/verticalManages.less
+27
-1
evaluate.vue
src/views/castbehind/evaluate.vue
+1
-1
evaluateAdd.vue
src/views/castbehind/evaluateAdd.vue
+117
-159
runningPeriod.vue
src/views/castbehind/runningPeriod.vue
+0
-2
runningPeriodAdd.vue
src/views/castbehind/runningPeriodAdd.vue
+85
-194
turnover.vue
src/views/castbehind/turnover.vue
+190
-0
turnoverAdd.vue
src/views/castbehind/turnoverAdd.vue
+245
-0
construction.vue
src/views/investingManage/construction.vue
+0
-2
vite.config.js
vite.config.js
+11
-11
No files found.
src/components/FileUploader/index.vue
View file @
d9d21c69
...
@@ -47,7 +47,6 @@
...
@@ -47,7 +47,6 @@
<el-button
<el-button
link
link
type=
"danger"
type=
"danger"
size=
"small"
@
click=
"handleDelete($index)"
@
click=
"handleDelete($index)"
:disabled=
"disabled"
:disabled=
"disabled"
class=
"delete-btn"
class=
"delete-btn"
...
...
src/components/FormDynamicTable/index.vue
0 → 100644
View file @
d9d21c69
This diff is collapsed.
Click to expand it.
src/router/routes.js
View file @
d9d21c69
...
@@ -173,6 +173,18 @@ const routes = [
...
@@ -173,6 +173,18 @@ const routes = [
title
:
"投资后评价"
,
title
:
"投资后评价"
,
component
:
()
=>
import
(
"@/views/castbehind/evaluateAdd.vue"
),
component
:
()
=>
import
(
"@/views/castbehind/evaluateAdd.vue"
),
},
},
{
path
:
"/turnover"
,
name
:
"turnover"
,
title
:
"移交管理"
,
component
:
()
=>
import
(
"@/views/castbehind/turnover.vue"
),
},
{
path
:
"/turnoverAdd"
,
name
:
"turnoverAdd"
,
title
:
"移交管理"
,
component
:
()
=>
import
(
"@/views/castbehind/turnoverAdd.vue"
),
},
],
],
},
},
{
{
...
...
src/styles/verticalManages.css
View file @
d9d21c69
...
@@ -137,7 +137,7 @@
...
@@ -137,7 +137,7 @@
text-align
:
center
;
text-align
:
center
;
}
}
::v-deep
.add-project-content
.tab-content
.tab-handle
{
::v-deep
.add-project-content
.tab-content
.tab-handle
{
margin
:
10px
0
;
margin
-bottom
:
16px
;
display
:
flex
;
display
:
flex
;
justify-content
:
flex-end
;
justify-content
:
flex-end
;
align-items
:
center
;
align-items
:
center
;
...
@@ -274,3 +274,20 @@
...
@@ -274,3 +274,20 @@
font-weight
:
bold
;
font-weight
:
bold
;
background-color
:
#f5f7fa
;
background-color
:
#f5f7fa
;
}
}
.add-project-header
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
margin-bottom
:
24px
;
}
::v-deep
.el-collapse-item__title
{
flex
:
auto
;
text-align
:
left
;
}
:deep
(
.el-table
)
{
--el-table-border-color
:
#ebeef5
;
width
:
100%
;
}
:deep
(
.el-upload
)
{
width
:
100%
;
}
src/styles/verticalManages.less
View file @
d9d21c69
...
@@ -139,7 +139,7 @@
...
@@ -139,7 +139,7 @@
text-align: center;
text-align: center;
}
}
.tab-handle{
.tab-handle{
margin
: 10px 0
;
margin
-bottom: 16px;
;
display: flex;
display: flex;
justify-content: flex-end;
justify-content: flex-end;
align-items: center;
align-items: center;
...
@@ -292,3 +292,29 @@
...
@@ -292,3 +292,29 @@
background-color: #f5f7fa;
background-color: #f5f7fa;
}
}
}
}
.add-project-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 24px;
}
// 动态表格样式适配
:deep(.el-collapse-item__content) {
// padding: 16px;
}
::v-deep .el-collapse-item__title{
flex: auto;
text-align: left;
}
:deep(.el-table) {
--el-table-border-color: #ebeef5;
width: 100%;
}
:deep(.el-upload) {
width: 100%;
}
\ No newline at end of file
src/views/castbehind/evaluate.vue
View file @
d9d21c69
...
@@ -178,5 +178,5 @@ onMounted(() => {
...
@@ -178,5 +178,5 @@ onMounted(() => {
</
script
>
</
script
>
<
style
scoped
lang=
"less"
>
<
style
scoped
lang=
"less"
>
@import "@/styles/
manage
.less";
@import "@/styles/
verticalManages
.less";
</
style
>
</
style
>
src/views/castbehind/evaluateAdd.vue
View file @
d9d21c69
This diff is collapsed.
Click to expand it.
src/views/castbehind/runningPeriod.vue
View file @
d9d21c69
...
@@ -92,8 +92,6 @@ const getStatementData = () => {
...
@@ -92,8 +92,6 @@ const getStatementData = () => {
pagesize
:
pageSize
.
value
,
pagesize
:
pageSize
.
value
,
},
},
callback
:
(
data
)
=>
{
callback
:
(
data
)
=>
{
console
.
log
(
data
,
"data"
);
tableData
.
value
=
data
.
rows
;
tableData
.
value
=
data
.
rows
;
total
.
value
=
data
.
count
;
total
.
value
=
data
.
count
;
loading
.
value
=
false
;
loading
.
value
=
false
;
...
...
src/views/castbehind/runningPeriodAdd.vue
View file @
d9d21c69
This diff is collapsed.
Click to expand it.
src/views/castbehind/turnover.vue
0 → 100644
View file @
d9d21c69
<
template
>
<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=
"turnoverAdd"
>
新增
</el-button>
</div>
</div>
<div
class=
"manage-content"
v-loading=
"loading"
>
<common-table
:autoHeight=
"true"
:maxRows=
"10"
:data=
"tableData"
:columns=
"tableColumns"
:total=
"total"
:current-page=
"currentPage"
:page-size=
"pageSize"
:index=
"true"
:indexLabel=
"'序号'"
title=
""
:border=
"true"
@
size-change=
"handleSizeChange"
@
current-page-change=
"handleCurrentPageChange"
>
<template
#
operations=
"
{ row, index }">
<el-button
link
type=
"primary"
size=
"small"
@
click=
"previewStatement(row)"
>
查看
</el-button
>
<el-button
link
type=
"primary"
size=
"small"
@
click=
"editStatement(row)"
>
编辑
</el-button
>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteStatement(row)"
>
删除
</el-button
>
</
template
>
</common-table>
</div>
</div>
</div>
</template>
<
script
setup
>
import
{
ref
,
onMounted
,
getCurrentInstance
}
from
"vue"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
CommonTable
from
"@/components/common/commonTable.vue"
;
const
router
=
useRouter
();
const
{
proxy
}
=
getCurrentInstance
();
let
tableData
=
ref
([]);
let
tableColumns
=
ref
([
{
prop
:
"projectName"
,
label
:
"项目信息"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"zbyzyjLen"
,
label
:
"资本处置移交"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"qzlyzzyjLen"
,
label
:
"期中履约终止移交"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"qmyjLen"
,
label
:
"期满移交"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"operations"
,
label
:
"操作"
,
width
:
170
,
slot
:
"operations"
,
fixed
:
"right"
,
align
:
"center"
,
},
]);
let
loading
=
ref
(
false
);
let
total
=
ref
(
0
);
let
currentPage
=
ref
(
1
);
let
pageSize
=
ref
(
10
);
// 获取列表数据
const
getStatementData
=
()
=>
{
loading
.
value
=
true
;
proxy
.
$post
({
url
:
"/api/project/getYjglList"
,
data
:
{
page
:
currentPage
.
value
,
pagesize
:
pageSize
.
value
,
},
callback
:
(
data
)
=>
{
const
countValidRows
=
(
arr
)
=>
{
if
(
!
Array
.
isArray
(
arr
))
return
0
;
return
arr
.
reduce
((
count
,
item
)
=>
{
if
(
Array
.
isArray
(
item
?.
fj
)
&&
item
.
fj
.
length
>
0
)
{
count
++
;
}
return
count
;
},
0
);
};
tableData
.
value
=
data
.
rows
.
map
((
it
)
=>
{
return
{
...
it
,
qmyjLen
:
`
${
countValidRows
(
it
.
qmyj
)}
行`
,
qzlyzzyjLen
:
`
${
countValidRows
(
it
.
qzlyzzyj
)}
行`
,
zbyzyjLen
:
`
${
countValidRows
(
it
.
zbyzyj
)}
行`
,
};
});
total
.
value
=
data
.
count
;
loading
.
value
=
false
;
},
});
};
// 分页
const
handleSizeChange
=
(
size
)
=>
{
pageSize
.
value
=
size
;
currentPage
.
value
=
1
;
getStatementData
();
};
const
handleCurrentPageChange
=
(
page
)
=>
{
currentPage
.
value
=
page
;
getStatementData
();
};
const
turnoverAdd
=
()
=>
{
router
.
push
(
"/turnoverAdd"
);
};
const
editStatement
=
(
item
)
=>
{
router
.
push
({
name
:
"turnoverAdd"
,
query
:
{
id
:
item
.
id
,
},
});
};
const
previewStatement
=
(
item
)
=>
{
router
.
push
({
name
:
"turnoverAdd"
,
query
:
{
isPreview
:
true
,
id
:
item
.
id
,
},
});
};
const
deleteStatement
=
(
item
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
"确认"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
})
.
then
(()
=>
{
proxy
.
$post
({
url
:
"/api/project/deleteYjgl"
,
data
:
{
id
:
item
.
id
,
},
callback
:
(
data
)
=>
{
ElMessage
.
success
(
"删除成功"
);
getStatementData
();
},
});
})
.
catch
(()
=>
{});
};
onMounted
(()
=>
{
getStatementData
();
});
</
script
>
<
style
scoped
lang=
"less"
>
@import "@/styles/manage.less";
</
style
>
src/views/castbehind/turnoverAdd.vue
0 → 100644
View file @
d9d21c69
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
>
<el-button
type=
"default"
@
click=
"backClick"
>
返回
</el-button>
<template
v-if=
"!loading && !isPreview"
>
<el-button
type=
"primary"
@
click=
"saveClick"
>
保存
</el-button>
</
template
>
</div>
</div>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<el-form
:model=
"formData"
:label-width=
"200"
:disabled=
"isPreview"
>
<el-collapse
v-model=
"activeCollapse"
>
<!-- 项目信息 -->
<el-collapse-item
title=
"项目信息"
name=
"项目信息"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目信息"
required
>
<el-select
v-model=
"formData.projectId"
placeholder=
"请选择项目信息"
no-data-text=
"暂无数据"
@
change=
"changeProject"
>
<el-option
v-for=
"item in projectList"
:key=
"item.key"
:label=
"item.projectName"
:value=
"item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<!-- 资本处置移交 -->
<el-collapse-item
title=
"资本处置移交"
name=
"资本处置移交"
>
<DynamicTable
:showAddButton=
"false"
v-model=
"zbyzyj"
:show-delete-button=
"false"
:columns=
"transferColumns"
:default-row=
"transferDefaultRow"
:disabled=
"isPreview"
/>
</el-collapse-item>
<!-- 期中履约终止移交 -->
<el-collapse-item
title=
"期中履约终止移交"
name=
"期中履约终止移交"
>
<DynamicTable
:showAddButton=
"false"
v-model=
"qzlyzzyj"
:show-delete-button=
"false"
:columns=
"transferColumns"
:default-row=
"transferDefaultRow"
:disabled=
"isPreview"
/>
</el-collapse-item>
<!-- 期满移交 -->
<el-collapse-item
title=
"期满移交"
name=
"期满移交"
>
<DynamicTable
:showAddButton=
"false"
v-model=
"qmyj"
:show-delete-button=
"false"
:columns=
"transferColumns"
:default-row=
"transferDefaultRow"
:disabled=
"isPreview"
/>
</el-collapse-item>
</el-collapse>
</el-form>
</div>
</div>
</div>
</div>
</div>
</template>
<
script
setup
>
import
{
reactive
,
ref
,
onMounted
,
getCurrentInstance
}
from
"vue"
;
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
import
{
ElMessage
}
from
"element-plus"
;
import
DynamicTable
from
"@/components/FormDynamicTable/index.vue"
;
// 路由与全局实例
const
router
=
useRouter
();
const
route
=
useRoute
();
const
{
proxy
}
=
getCurrentInstance
();
// 折叠面板默认展开项
const
activeCollapse
=
ref
([
"项目信息"
,
"资本处置移交"
,
"期中履约终止移交"
,
"期满移交"
,
]);
// 移交类表格列配置
const
transferColumns
=
ref
([
{
prop
:
"mc"
,
label
:
"名称"
,
type
:
"input"
,
placeholder
:
"请填写文件名称"
},
{
prop
:
"fj"
,
label
:
"附件"
,
type
:
"upload"
,
placeholder
:
""
},
{
prop
:
"bz"
,
label
:
"备注"
,
type
:
"textarea"
,
rows
:
2
,
placeholder
:
"请输入备注信息"
,
},
]);
// 移交类默认行数据
const
transferDefaultRow
=
ref
({
mc
:
""
,
fj
:
[],
bz
:
""
});
// 表单核心数据
const
formData
=
reactive
({
projectName
:
""
,
projectId
:
""
,
del
:
0
,
createdAt
:
""
,
updatedAt
:
""
,
});
// 状态管理
const
loading
=
ref
(
false
);
const
isPreview
=
ref
(
!!
route
.
query
.
isPreview
);
const
projectList
=
ref
([]);
const
rcCgqyglId
=
ref
(
route
.
query
.
id
||
""
);
let
options
=
ref
();
// 初始化移交列表数据
const
zbyzyj
=
ref
([
{
mc
:
"股权转让协议"
,
fj
:
[],
bz
:
""
},
{
mc
:
"移交工作方案"
,
fj
:
[],
bz
:
""
},
{
mc
:
"资产移交清单"
,
fj
:
[],
bz
:
""
},
{
mc
:
"运营交接验收报告"
,
fj
:
[],
bz
:
""
},
]);
const
qzlyzzyj
=
ref
([
{
mc
:
"终止协议"
,
fj
:
[],
bz
:
""
},
{
mc
:
"移交工作方案"
,
fj
:
[],
bz
:
""
},
{
mc
:
"资产移交清单"
,
fj
:
[],
bz
:
""
},
{
mc
:
"运营交接验收报告"
,
fj
:
[],
bz
:
""
},
]);
const
qmyj
=
ref
([
{
mc
:
"移交工作方案"
,
fj
:
[],
bz
:
""
},
{
mc
:
"资产移交清单"
,
fj
:
[],
bz
:
""
},
{
mc
:
"运营交接验收报告"
,
fj
:
[],
bz
:
""
},
]);
// 可新增的期中履约终止移交列表
const
yyqtzjcZxjcsList
=
ref
([]);
// 获取项目列表数据
const
getProjectData
=
()
=>
{
proxy
.
$post
({
url
:
"/api/project/listProject"
,
data
:
{
page
:
1
,
pagesize
:
1000
,
attributes
:
[],
menuType
:
"xmjc"
},
callback
:
(
data
)
=>
{
projectList
.
value
=
data
.
rows
||
[];
},
});
};
// 选择项目同步名称
const
changeProject
=
(
val
)
=>
{
const
selectItem
=
projectList
.
value
.
find
((
item
)
=>
item
.
id
===
val
);
if
(
selectItem
)
formData
.
projectName
=
selectItem
.
projectName
;
};
// 获取单条记录详情(编辑/预览)
const
getJsqtzjcDetail
=
()
=>
{
if
(
!
rcCgqyglId
.
value
)
return
;
loading
.
value
=
true
;
proxy
.
$post
({
url
:
"/api/project/getYjglInfo"
,
data
:
{
id
:
rcCgqyglId
.
value
},
callback
:
(
data
)
=>
{
loading
.
value
=
false
;
Object
.
assign
(
formData
,
data
);
zbyzyj
.
value
=
data
.
zbyzyj
||
zbyzyj
.
value
;
qzlyzzyj
.
value
=
data
.
qzlyzzyj
||
qzlyzzyj
.
value
;
qmyj
.
value
=
data
.
qmyj
||
qmyj
.
value
;
yyqtzjcZxjcsList
.
value
=
data
.
yyqtzjcZxjcs
||
[];
},
});
};
// 返回上一页
const
backClick
=
()
=>
{
router
.
back
(
-
1
);
};
// 保存/提交表单
const
saveClick
=
()
=>
{
if
(
!
formData
.
projectId
)
{
ElMessage
.
warning
(
"请选择项目信息"
);
return
;
}
loading
.
value
=
true
;
const
url
=
rcCgqyglId
.
value
?
"/api/project/updateYjgl"
:
"/api/project/createYjgl"
;
const
submitData
=
{
...
formData
,
projectId
:
formData
.
projectId
+
""
,
zbyzyj
:
zbyzyj
.
value
,
qzlyzzyj
:
qzlyzzyj
.
value
,
qmyj
:
qmyj
.
value
,
yyqtzjcZxjcs
:
yyqtzjcZxjcsList
.
value
,
};
proxy
.
$post
({
url
:
url
,
data
:
submitData
,
callback
:
()
=>
{
loading
.
value
=
false
;
ElMessage
.
success
(
rcCgqyglId
.
value
?
"编辑成功"
:
"新增成功"
);
router
.
back
(
-
1
);
},
});
};
// 页面初始化
onMounted
(()
=>
{
getProjectData
();
options
.
value
=
JSON
.
parse
(
sessionStorage
.
getItem
(
"resourceData"
));
if
(
rcCgqyglId
.
value
)
getJsqtzjcDetail
();
});
</
script
>
<
style
scoped
lang=
"less"
>
@import "@/styles/verticalManages.less";
</
style
>
src/views/investingManage/construction.vue
View file @
d9d21c69
...
@@ -92,8 +92,6 @@ const getStatementData = () => {
...
@@ -92,8 +92,6 @@ const getStatementData = () => {
pagesize
:
pageSize
.
value
,
pagesize
:
pageSize
.
value
,
},
},
callback
:
(
data
)
=>
{
callback
:
(
data
)
=>
{
console
.
log
(
data
,
"data"
);
tableData
.
value
=
data
.
rows
;
tableData
.
value
=
data
.
rows
;
total
.
value
=
data
.
count
;
total
.
value
=
data
.
count
;
loading
.
value
=
false
;
loading
.
value
=
false
;
...
...
vite.config.js
View file @
d9d21c69
import
{
defineConfig
}
from
'vite'
import
{
defineConfig
}
from
"vite"
;
import
vue
from
'@vitejs/plugin-vue'
import
vue
from
"@vitejs/plugin-vue"
;
import
path
from
'path'
import
path
from
"path"
;
// https://vite.dev/config/
// https://vite.dev/config/
export
default
defineConfig
({
export
default
defineConfig
({
plugins
:
[
vue
()],
plugins
:
[
vue
()],
resolve
:
{
resolve
:
{
alias
:
{
alias
:
{
'@'
:
path
.
resolve
(
__dirname
,
'./src'
)
"@"
:
path
.
resolve
(
__dirname
,
"./src"
),
}
}
,
},
},
css
:
{
css
:
{
preprocessorOptions
:
{
preprocessorOptions
:
{
less
:
{
less
:
{
javascriptEnabled
:
true
,
javascriptEnabled
:
true
,
additionalData
:
'@import "./src/styles/utils.less";'
,
additionalData
:
'@import "./src/styles/utils.less";'
,
}
}
},
},
})
},
},
});
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