Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
9
912project
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
CRS
912project
Commits
1d300a9f
提交
1d300a9f
authored
4月 18, 2020
作者:
thy
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'ningbo' into 'thy'
# Conflicts: # src/services/server.js
上级
b867ed4f
096c1185
隐藏空白字符变更
内嵌
并排
正在显示
13 个修改的文件
包含
485 行增加
和
359 行删除
+485
-359
config.js
config.js
+1
-0
index.html
public/index.html
+1
-1
evaluationReport.vue
src/components/evaluationReport/evaluationReport.vue
+1
-1
header.vue
src/components/header/header.vue
+6
-6
home.vue
src/components/home/home.vue
+14
-4
HJ.png
src/components/home/img/HJ.png
+0
-0
otherPdf.vue
src/components/otherPdf/otherPdf.vue
+349
-331
projectAdd.vue
src/components/projectManagement/project/projectAdd.vue
+1
-1
reportAssess.vue
src/components/reportAssess/reportAssess.vue
+56
-8
sidebar.vue
src/components/sidebar/sidebar.vue
+19
-0
axios.js
src/services/axios.js
+13
-1
server.js
src/services/server.js
+6
-0
htmlToPdf.js
src/tools/htmlToPdf.js
+18
-6
没有找到文件。
config.js
浏览文件 @
1d300a9f
...
@@ -10,6 +10,7 @@ const IP = 'http://120.55.57.35'; // 刘杰
...
@@ -10,6 +10,7 @@ const IP = 'http://120.55.57.35'; // 刘杰
// 请求目标服务器域名配置
// 请求目标服务器域名配置
const
DOMAIN_NAME
=
{
const
DOMAIN_NAME
=
{
URL_CNODEJS
:
IP
+
':12345'
,
// 网关 服务端口
URL_CNODEJS
:
IP
+
':12345'
,
// 网关 服务端口
assessma
:
IP
+
':8078'
,
// 网关 服务端口
};
};
export
default
DOMAIN_NAME
;
export
default
DOMAIN_NAME
;
public/index.html
浏览文件 @
1d300a9f
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge"
>
<meta
http-equiv=
"X-UA-Compatible"
content=
"IE=edge"
>
<meta
name=
"viewport"
content=
"width=device-width,initial-scale=1.0"
>
<meta
name=
"viewport"
content=
"width=device-width,initial-scale=1.0"
>
<link
rel=
"icon"
href=
"<%= BASE_URL %>favicon.ico"
>
<link
rel=
"icon"
href=
"<%= BASE_URL %>favicon.ico"
>
<title>
XXX
工作台
</title>
<title>
工作台
</title>
</head>
</head>
<body>
<body>
<noscript>
<noscript>
...
...
src/components/evaluationReport/evaluationReport.vue
浏览文件 @
1d300a9f
...
@@ -119,7 +119,7 @@ export default {
...
@@ -119,7 +119,7 @@ export default {
item
.
createDate
=
item
.
createDate
===
''
?
'暂无'
:
this
.
time
(
item
.
createDate
);
item
.
createDate
=
item
.
createDate
===
''
?
'暂无'
:
this
.
time
(
item
.
createDate
);
}
}
}).
catch
(
err
=>
{
}).
catch
(
err
=>
{
console
.
log
(
err
);
console
.
log
(
err
.
message
);
})
})
},
},
// 搜索栏
// 搜索栏
...
...
src/components/header/header.vue
浏览文件 @
1d300a9f
...
@@ -2,17 +2,17 @@
...
@@ -2,17 +2,17 @@
<div
class=
"headerAll"
v-if=
" $route.name == 'assessmentReport'?false:$route.name == 'reportAssess'?false:true"
>
<div
class=
"headerAll"
v-if=
" $route.name == 'assessmentReport'?false:$route.name == 'reportAssess'?false:true"
>
<div
class=
"header"
>
<div
class=
"header"
>
<span
class=
"left-header"
>
<span
class=
"left-header"
>
<p
style=
"text-align: center;font-size: 28px;font-weight: bold;color: #fff;line-height: 98px;"
>
XXX
</p>
<p
style=
"text-align: center;font-size: 28px;font-weight: bold;color: #fff;line-height: 98px;"
>
912
</p>
</span>
</span>
<span
class=
"center"
>
<span
class=
"center"
>
<span
class=
"title"
@
click=
"jump('firstHome')"
style=
"cursor: pointer;"
>
XX
工作台
</span>
<span
class=
"title"
@
click=
"jump('firstHome')"
style=
"cursor: pointer;"
>
工作台
</span>
<span
class=
"time"
>
当前时间:
{{
this
.
time
}}
</span>
<span
class=
"time"
>
当前时间:
{{
this
.
time
}}
</span>
</span>
</span>
<span
class=
"right"
>
<span
class=
"right"
>
<span
class=
"tohome"
>
<!--
<span
class=
"tohome"
>
--
>
<img
src=
"./img/toHome.png"
>
<!--
<img
src=
"./img/toHome.png"
>
--
>
<span
class=
"font"
>
综合展现
</span
>
<!--
<span
class=
"font"
>
综合展现
</span>
--
>
</span
>
<!--
</span>
--
>
<span
class=
"user"
v-if=
"this.$store.getters.getUserData.name !== undefined"
>
<span
class=
"user"
v-if=
"this.$store.getters.getUserData.name !== undefined"
>
<span
class=
"admin"
>
<span
class=
"admin"
>
<img
src=
"./img/admin.png"
>
<img
src=
"./img/admin.png"
>
...
...
src/components/home/home.vue
浏览文件 @
1d300a9f
...
@@ -42,10 +42,14 @@
...
@@ -42,10 +42,14 @@
<img
src=
"./img/PG.png"
>
<img
src=
"./img/PG.png"
>
<span>
评估报告管理
</span>
<span>
评估报告管理
</span>
</p>
</p>
<p
class=
"bg"
@
click=
"otherJump"
v-if=
"this.$store.getters.getUserData.authorityCode.indexOf('0001700') !== -1"
>
<p
class=
"bg"
v-if=
"this.$store.getters.getUserData.authorityCode.indexOf('0001700') !== -1"
>
<img
src=
"./img/PC.png"
>
<img
src=
"./img/PC.png"
>
<span>
评测报告管理
</span>
<span>
评测报告管理
</span>
</p>
</p>
<p
class=
"bg"
v-if=
"this.$store.getters.getUserData.authorityCode.indexOf('0002000') !== -1"
>
<img
src=
"./img/HJ.png"
>
<span>
实验仿真环境
</span>
</p>
<p
class=
"bg"
@
click=
"jump('projectManagement','我的项目')"
v-if=
"this.$store.getters.getUserData.authorityCode.indexOf('0001800') !== -1"
>
<p
class=
"bg"
@
click=
"jump('projectManagement','我的项目')"
v-if=
"this.$store.getters.getUserData.authorityCode.indexOf('0001800') !== -1"
>
<img
src=
"./img/WD.png"
>
<img
src=
"./img/WD.png"
>
<span>
我的项目
</span>
<span>
我的项目
</span>
...
@@ -97,9 +101,12 @@ export default {
...
@@ -97,9 +101,12 @@ export default {
},
},
mounted
(){
mounted
(){
this
.
init
(
1
);
if
(
$
(
'.menu'
)[
0
].
innerText
!==
''
)
{
this
.
init
(
2
);
this
.
init
(
1
);
this
.
init
(
3
);
this
.
init
(
2
);
this
.
init
(
3
);
}
},
},
methods
:
{
methods
:
{
// 页面布局
// 页面布局
...
@@ -172,4 +179,7 @@ export default {
...
@@ -172,4 +179,7 @@ export default {
justify-content
:
space-between
;
justify-content
:
space-between
;
margin-bottom
:
88px
;
margin-bottom
:
88px
;
}
}
.firstHome
.bottom
{
margin-bottom
:
0px
;
}
</
style
>
</
style
>
src/components/home/img/HJ.png
0 → 100644
浏览文件 @
1d300a9f
912 Bytes
src/components/otherPdf/otherPdf.vue
浏览文件 @
1d300a9f
<
template
>
<
template
>
<div
class=
"otherPdf"
>
<div
class=
"otherPdf"
>
<span
class=
"toPdf"
@
click=
"
getPdf('pdfDom')
"
>
下载pdf
</span>
<span
class=
"toPdf"
@
click=
"
download
"
>
下载pdf
</span>
<div
id=
"pdfDom"
>
<div
id=
"pdfDom"
>
<div
class=
"pageOther"
>
<div
class=
"pageOther"
>
<p
class=
"other"
>
附件2
</p>
<p
class=
"title"
>
{{
title
}}
</p>
<p
class=
"title"
>
{{
title
}}
</p>
<p
class=
"title"
>
{{
systemName
}}
</p>
<p
class=
"title"
>
{{
systemName
}}
</p>
<p
class=
"title"
>
{{
reportName
}}
</p>
<p
class=
"title"
>
{{
reportName
}}
</p>
<div>
<div>
<table
border=
"1"
cellspacing=
"0"
style=
"width: 100%"
>
<table
border=
"1"
cellspacing=
"0"
style=
"width: 100%
;margin-top: 90px;
"
>
<tr>
<tr>
<td
style=
"width: 12px; text-align: center;padding: 0;"
>
序号
</td>
<td
style=
"width: 12px; text-align: center;padding: 0;"
>
序号
</td>
<td
style=
"width: 80px; text-align: center;padding: 0;"
>
概要信息
</td>
<td
style=
"width: 80px; text-align: center;padding: 0;"
>
概要信息
</td>
...
@@ -27,6 +28,7 @@
...
@@ -27,6 +28,7 @@
</div>
</div>
<div
class=
"content"
>
<div
class=
"content"
>
<div
class=
"page"
>
<div
class=
"page"
>
<p
class=
"other"
>
附件3
</p>
<p
class=
"title"
>
{{
title
}}
</p>
<p
class=
"title"
>
{{
title
}}
</p>
<p
class=
"title"
>
{{
systemName
}}
</p>
<p
class=
"title"
>
{{
systemName
}}
</p>
<p
class=
"title"
>
{{
reportName
}}
</p>
<p
class=
"title"
>
{{
reportName
}}
</p>
...
@@ -42,48 +44,47 @@
...
@@ -42,48 +44,47 @@
<div
class=
"page"
>
<div
class=
"page"
>
<p
class=
"list"
>
目录
</p>
<p
class=
"list"
>
目录
</p>
<div
class=
"listContent"
>
<div
class=
"listContent"
>
<p
class=
"child"
>
目录
....................................................I
</p>
<p
class=
"child"
>
目录
<span>
I
</span>
</p>
<p
class=
"child"
>
1. 评估报告声明
.........................................3
</p>
<p
class=
"child"
>
1. 评估报告声明
<span>
3
</span>
</p>
<p
class=
"child"
>
1.1. 报告组成........................................3
</p>
<p
class=
"child"
style=
"margin-left: 10px;"
>
1.1. 报告组成
<span>
3
</span>
</p>
<p
class=
"child"
>
1.2. 报告作用........................................4
</p>
<p
class=
"child"
style=
"margin-left: 10px;"
>
1.2. 报告作用
<span>
4
</span>
</p>
<p
class=
"child"
>
1.3. 其他注意事项....................................4
</p>
<p
class=
"child"
style=
"margin-left: 10px;"
>
1.3. 其他注意事项
<span>
4
</span>
</p>
<p
class=
"child"
>
2.
评估标准和方法.......................................6
</p>
<p
class=
"child"
>
2.
原应用系统评估
<span>
6
</span>
</p>
<p
class=
"child"
>
2.1. 参照标准........................................6
</p>
<p
class=
"child"
style=
"margin-left: 10px;"
>
2.1. 原应用系统概要
<span>
6
</span>
</p>
<p
class=
"child"
>
2.1.1. “912工程”相关政策法规....................6
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
2.1.1. 基本信息
<span>
6
</span>
</p>
<p
class=
"child"
>
2.1.2. “912工程”相关国家标准与规范..............6
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
2.1.2. 原系统代码规模
<span>
{{
pageList
[
0
]
}}
</span>
</p>
<p
class=
"child"
>
2.1.3. “L77软件工程”国家分类标准................6
</p>
<p
class=
"child"
style=
"margin-left: 10px;"
>
2.2. 关键技术依赖
<span>
{{
pageList
[
0
]
}}
</span>
</p>
<p
class=
"child"
>
2.1.4. 其他编制依据...............................6
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
2.2.1. 可优化的项
<span>
{{
pageList
[
1
]
}}
</span>
</p>
<p
class=
"child"
>
2.2. 评估流程与方法.................................11
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
2.2.2. 必须替换的项
<span>
{{
pageList
[
2
]
}}
</span>
</p>
<p
class=
"child"
>
2.2.1. 基本评估流程...............................11
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
2.2.3. 需要验证修改的项
<span>
{{
pageList
[
3
]
}}
</span>
</p>
<p
class=
"child"
>
2.2.2. 结合国家标准L77类目下的度量说明............12
</p>
<p
class=
"child"
style=
"margin-left: 10px;"
>
2.3. 难度系数和综合系数修正
<span>
{{
pageList
[
4
]
}}
</span>
</p>
<p
class=
"child"
>
2.2.3. 递归的精度与误差说明.......................17
</p>
<p
class=
"child"
style=
"margin-left: 10px;"
>
2.4. 人工月估算
<span>
{{
pageList
[
4
]
}}
</span>
</p>
<p
class=
"child"
>
3. 原应用系统评估......................................19
</p>
<p
class=
"child"
style=
"margin-left: 10px;"
>
2.5. 额外申请
<span>
{{
pageList
[
4
]
}}
</span>
</p>
<p
class=
"child"
>
3.1. 原应用系统概要.................................19
</p>
<p
class=
"child"
style=
"margin-left: 10px;"
>
2.6. 预算建议
<span>
{{
pageList
[
5
]
}}
</span>
</p>
<p
class=
"child"
>
3.
1.1. 基本信息...................................19
</p>
<p
class=
"child"
>
3.
评估标准和方法
<span>
{{
pageList
[
6
]
}}
</span>
</p>
<p
class=
"child"
>
3.1.2. 原系统代码规模.............................
{{
pageList
[
0
]
}}
</p>
<p
class=
"child"
style=
"margin-left: 10px;"
>
3.1. 参照标准
<span>
{{
pageList
[
6
]
}}
</span>
</p>
<p
class=
"child"
>
3.2. 关键技术依赖...................................
{{
pageList
[
0
]
}}
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
3.1.1. “912工程”相关政策法规
<span>
{{
pageList
[
6
]
}}
</span>
</p>
<p
class=
"child"
>
3.2.1. 可优化的项.................................
{{
pageList
[
1
]
}}
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
3.1.2. “912工程”相关国家标准与规范
<span>
{{
pageList
[
7
]
}}
</span>
</p>
<p
class=
"child"
>
3.2.2. 必须替换的项...............................
{{
pageList
[
2
]
}}
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
3.1.3. “L77软件工程”国家分类标准
<span>
{{
pageList
[
9
]
}}
</span>
</p>
<p
class=
"child"
>
3.2.3. 需要验证修改的项...........................
{{
pageList
[
3
]
}}
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
3.1.4. 其他编制依据
<span>
{{
pageList
[
10
]
}}
</span>
</p>
</div>
</div>
<p
class=
"pageIndex"
>
1
</p>
<p
class=
"pageIndex"
>
1
</p>
</div>
</div>
<div
class=
"page"
>
<div
class=
"page"
>
<div
class=
"listContent"
>
<div
class=
"listContent"
>
<p
class=
"child"
>
3.3. 难度系数和综合系数修正.........................
{{
pageList
[
4
]
}}
</p>
<p
class=
"child"
style=
"margin-left: 10px;"
>
3.2. 评估流程与方法
<span>
{{
pageList
[
11
]
}}
</span></p>
<p
class=
"child"
>
3.4. 人工月估算.....................................
{{
pageList
[
4
]
}}
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
3.2.1. 基本评估流程
<span>
{{
pageList
[
11
]
}}
</span></p>
<p
class=
"child"
>
3.5. 额外申请.......................................
{{
pageList
[
4
]
}}
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
3.2.2. 结合国家标准L77类目下的度量说明
<span>
{{
pageList
[
12
]
}}
</span></p>
<p
class=
"child"
>
3.6. 预算建议.......................................
{{
pageList
[
5
]
}}
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
3.2.3. 递归的精度与误差说明
<span>
{{
pageList
[
17
]
}}
</span></p>
<p
class=
"child"
>
4. 评估建议............................................
{{
pageList
[
6
]
}}
</p>
<p
class=
"child"
>
4. 评估建议
<span>
{{
pageList
[
19
]
}}
</span></p>
<p
class=
"child"
>
4.1. 适配/改造路线选择..............................
{{
pageList
[
6
]
}}
</p>
<p
class=
"child"
style=
"margin-left: 10px;"
>
4.1. 适配/改造路线选择
<span>
{{
pageList
[
19
]
}}
</span></p>
<p
class=
"child"
>
4.2. 关键工作与方法.................................
{{
pageList
[
6
]
}}
</p>
<p
class=
"child"
style=
"margin-left: 10px;"
>
4.2. 关键工作与方法
<span>
{{
pageList
[
19
]
}}
</span></p>
<p
class=
"child"
>
4.2.1. 开发框架解决方法...........................
{{
pageList
[
6
]
}}
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
4.2.1. 开发框架解决方法
<span>
{{
pageList
[
19
]
}}
</span></p>
<p
class=
"child"
>
4.2.2. 浏览器的适配兼容性改造解决方法.............
{{
pageList
[
7
]
}}
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
4.2.2. 浏览器的适配兼容性改造解决方法
<span>
{{
pageList
[
20
]
}}
</span></p>
<p
class=
"child"
>
4.2.3. 浏览器功能组件的替换和适配解决方法.........
{{
pageList
[
7
]
}}
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
4.2.3. 浏览器功能组件的替换和适配解决方法
<span>
{{
pageList
[
20
]
}}
</span></p>
<p
class=
"child"
>
4.2.4. B/S结构下的重构............................
{{
pageList
[
8
]
}}
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
4.2.4. B/S结构下的重构
<span>
{{
pageList
[
21
]
}}
</span></p>
<p
class=
"child"
>
4.2.5. C/S结构下的重构............................
{{
pageList
[
8
]
}}
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
4.2.5. C/S结构下的重构
<span>
{{
pageList
[
21
]
}}
</span></p>
<p
class=
"child"
>
4.2.6. 部署和迁移策略.............................
{{
pageList
[
8
]
}}
</p>
<p
class=
"child"
style=
"margin-left: 20px;"
>
4.2.6. 部署和迁移策略
<span>
{{
pageList
[
21
]
}}
</span></p>
<p
class=
"child"
>
5. 附件...............................................
{{
pageList
[
11
]
}}
</p>
</div>
</div>
<p
class=
"pageIndex"
>
2
</p>
<p
class=
"pageIndex"
>
2
</p>
</div>
</div>
...
@@ -104,104 +105,13 @@
...
@@ -104,104 +105,13 @@
<p
class=
"contentList"
v-for=
"item of reportOther2"
>
{{
item
}}
</p>
<p
class=
"contentList"
v-for=
"item of reportOther2"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
5
</p>
<p
class=
"pageIndex"
>
5
</p>
</div>
</div>
<!-- 2-->
<div
class=
"page"
>
<div
class=
"page"
>
<p
class=
"title1"
>
2.
评估标准和方法
</p>
<p
class=
"title1"
>
2.
原应用系统评估
</p>
<p
class=
"title2"
>
2.1.
参照标准
</p>
<p
class=
"title2"
>
2.1.
原应用系统概要
</p>
<p
class=
"title3"
>
2.1.1.
“912工程”相关政策法规
</p>
<p
class=
"title3"
>
2.1.1.
基本信息
</p>
<p
class=
"contentList"
style=
"letter-spacing:1px; text-indent:0em;"
v-for=
"item of regulations"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
6
</p>
<p
class=
"pageIndex"
>
6
</p>
</div>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of regulations"
>
{{
item
}}
</p>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of supplement"
>
{{
item
}}
</p>
<p
class=
"title3"
>
2.1.2.
“912工程”相关国家标准与规范
</p>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of nationalNorms"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
7
</p>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of nationalNorms2"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
8
</p>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of nationalNorms3"
>
{{
item
}}
</p>
<p
class=
"title3"
>
2.1.3.
“L77软件工程”国家分类标准
</p>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of classificationCriteria"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
9
</p>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of classificationCriteria2"
>
{{
item
}}
</p>
<p
class=
"title3"
>
2.1.4.
其他编制依据
</p>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of otherEstablishments"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
10
</p>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of otherEstablishments2"
>
{{
item
}}
</p>
<p
class=
"title2"
>
2.2.
评估流程与方法
</p>
<p
class=
"title3"
>
2.2.1.
基本评估流程
</p>
<p>
<img
src=
"./img/1.png"
style=
"width: 100%"
>
</p>
<p
class=
"contentList"
v-for=
"item of evaluationProcess"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
11
</p>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
v-for=
"item of evaluationProcess2"
>
{{
item
}}
</p>
<p
class=
"title3"
>
2.2.2.
结合国家标准L77类目下的度量说明
</p>
<p
class=
"contentList"
v-for=
"item of metricDescription"
>
{{
item
}}
</p>
<p
class=
"title4"
>
2.2.2.1.
规模测算
</p>
<p
class=
"contentList"
v-for=
"item of scaleConversion"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
12
</p>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
>
笼统的算法如下式计算:
</p>
<p
class=
"contentList"
style=
"text-align:center;"
>
S = US*CF
</p>
<p
class=
"contentList"
v-for=
"item of scaleConversion2"
>
{{
item
}}
</p>
<p
class=
"title4"
>
2.2.2.2.
工作量测算
</p>
<p
class=
"contentList"
>
根据GB/T 36964-2018的流程,规模测算完成的结果,将指导和约束工作量测算和成本测算。
</p>
<p>
<img
src=
"./img/2.png"
style=
"width: 100%"
>
</p>
<p
class=
"contentList"
>
工作量测算在自动化评估中采用GB/T36964-2018的方程法、类比法、类推法3种方法。包含对未知技术依赖的不确定工作量和测试
</p>
<p
class=
"pageIndex"
>
13
</p>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
style=
"text-indent:0em;"
>
修改的不可预见工作量。
</p>
<p
class=
"contentList"
v-for=
"item of workloadCalculation"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
14
</p>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
v-for=
"item of workloadCalculation2"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
15
</p>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
v-for=
"item of workloadCalculation3"
>
{{
item
}}
</p>
<p
class=
"title4"
>
2.2.2.3.
人工月单价测算
</p>
<p
class=
"contentList"
v-for=
"item of unitPriceCalculation"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
16
</p>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
style=
"text-indent:0em;"
>
1.5万元/人工月,允许委托单位输入时补充额外金额申请。
</p>
<p
class=
"title3"
>
2.2.3.
递归的精度与误差说明
</p>
<p
class=
"contentList"
v-for=
"item of recursivePrecision"
>
{{
item
}}
</p>
<p
class=
"title4"
>
2.2.3.1.
整体类比法
</p>
<p
class=
"contentList"
v-for=
"item of overallAnalogy"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
17
</p>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
style=
"text-indent:0em;"
>
码或文件。功能非相关的和功能不启用的部分,交由委托单位现场确认。确认后删除或保留。如发现完整性严重缺失,委托单位重新提交。
</p>
<p
class=
"contentList"
>
而后二次导入,进行自动化评估。该方法将最大程度筛查和杜绝各种原因造成的调研数据错误、代码文件无关参杂的情况。也是确保评估误差可控的前提。
</p>
<p
class=
"title4"
>
2.2.3.1.
开发时间固定百分比法
</p>
<p
class=
"contentList"
v-for=
"item of fixedDevelopment"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
18
</p>
</div>
<!-- 3-->
<div
class=
"page"
>
<p
class=
"contentList"
style=
"text-indent:0em;"
>
推算的预算建议,将作为宁波市安可办的审核依据和预算约束。
</p>
<p
class=
"title1"
>
3.
原应用系统评估
</p>
<p
class=
"title2"
>
3.1.
原应用系统概要
</p>
<p
class=
"title3"
>
3.1.1.
基本信息
</p>
<p
class=
"pageIndex"
>
19
</p>
</div>
<div
v-for=
"(item,itemIndex) of messageList"
>
<div
v-for=
"(item,itemIndex) of messageList"
>
<div
class=
"pageOther"
v-for=
"(arr,index) of item.val"
>
<div
class=
"pageOther"
v-for=
"(arr,index) of item.val"
>
<p
class=
"contentList"
style=
"text-indent:0em;"
v-if=
"index ===0"
>
{{
item
.
name
}}
:
</p>
<p
class=
"contentList"
style=
"text-indent:0em;"
v-if=
"index ===0"
>
{{
item
.
name
}}
:
</p>
...
@@ -210,17 +120,17 @@
...
@@ -210,17 +120,17 @@
<tr
v-for=
"acc of arr"
>
<tr
v-for=
"acc of arr"
>
<td
style=
"width: 10%"
>
{{
acc
.
index
}}
</td>
<td
style=
"width: 10%"
>
{{
acc
.
index
}}
</td>
<td>
{{
acc
.
name
}}
</td>
<td>
{{
acc
.
name
}}
</td>
<td
style=
"width:
15
0px;"
>
{{
acc
.
value
}}
</td>
<td
style=
"width:
20
0px;"
>
{{
acc
.
value
}}
</td>
</tr>
</tr>
</table>
</table>
</div>
</div>
<p
class=
"pageIndex"
v-for=
"item of messagePage"
>
<p
class=
"pageIndex"
v-for=
"item of messagePage"
>
<span
v-if=
"item.itemIndex === itemIndex && item.arrIndex === index"
>
{{
19
+
item
.
page
}}
</span>
<span
v-if=
"item.itemIndex === itemIndex && item.arrIndex === index"
>
{{
6
+
item
.
page
}}
</span>
</p>
</p>
</div>
</div>
</div>
</div>
<div
class=
"page"
>
<div
class=
"page"
>
<p
class=
"title3"
>
3
.1.2.
原系统代码规模
</p>
<p
class=
"title3"
>
2
.1.2.
原系统代码规模
</p>
<div>
<div>
<table
border=
"1"
cellspacing=
"0"
style=
"margin: 0px;width: 100%;"
>
<table
border=
"1"
cellspacing=
"0"
style=
"margin: 0px;width: 100%;"
>
<tr>
<tr>
...
@@ -245,14 +155,14 @@
...
@@ -245,14 +155,14 @@
</tr>
</tr>
</table>
</table>
</div>
</div>
<p
class=
"title2"
>
3
.2.
关键技术依赖
</p>
<p
class=
"title2"
>
2
.2.
关键技术依赖
</p>
<p
class=
"contentList"
>
{{
technologyDependence
}}
</p>
<p
class=
"contentList"
>
{{
technologyDependence
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
0
]
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
0
]
}}
</p>
</div>
</div>
<div
v-for=
"(item,itemInd) of optimized"
>
<div
v-for=
"(item,itemInd) of optimized"
>
<div
v-for=
"(arr,index) of item.val"
>
<div
v-for=
"(arr,index) of item.val"
>
<div
class=
"pageOther"
v-if=
"arr.length !== 0"
>
<div
class=
"pageOther"
v-if=
"arr.length !== 0"
>
<p
class=
"title3"
v-if=
"itemInd === 0 && index === 0"
>
3
.2.1.
可优化的项
</p>
<p
class=
"title3"
v-if=
"itemInd === 0 && index === 0"
>
2
.2.1.
可优化的项
</p>
<p
v-if=
"index === 0"
style=
"display: flex;justify-content: space-between"
>
<p
v-if=
"index === 0"
style=
"display: flex;justify-content: space-between"
>
<span>
关键技术:
{{
item
.
name
}}
</span>
<span>
关键技术:
{{
item
.
name
}}
</span>
<span>
替换策略:
<span>
替换策略:
...
@@ -276,20 +186,20 @@
...
@@ -276,20 +186,20 @@
</tr>
</tr>
</table>
</table>
<p
class=
"pageIndex"
v-for=
"item of optimizedPage"
>
<p
class=
"pageIndex"
v-for=
"item of optimizedPage"
>
<span
v-if=
"item.itemIndex === itemInd && item.arrIndex === index"
>
{{
20
+
item
.
page
+
page1
}}
</span>
<span
v-if=
"item.itemIndex === itemInd && item.arrIndex === index"
>
{{
7
+
item
.
page
+
page1
}}
</span>
</p>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"page"
v-if=
"optimized.length === 0"
>
<div
class=
"page"
v-if=
"optimized.length === 0"
>
<p
class=
"title3"
>
3
.2.1.
可优化的项
</p>
<p
class=
"title3"
>
2
.2.1.
可优化的项
</p>
<p>
暂无
</p>
<p>
暂无
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
1
]
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
1
]
}}
</p>
</div>
</div>
<div
v-for=
"(item,itemInd) of replaced"
>
<div
v-for=
"(item,itemInd) of replaced"
>
<div
v-for=
"(arr,index) of item.val"
>
<div
v-for=
"(arr,index) of item.val"
>
<div
class=
"pageOther"
v-if=
"arr.length !== 0"
>
<div
class=
"pageOther"
v-if=
"arr.length !== 0"
>
<p
class=
"title3"
v-if=
"itemInd === 0 && index === 0"
>
3
.2.2.
必须替换的项
</p>
<p
class=
"title3"
v-if=
"itemInd === 0 && index === 0"
>
2
.2.2.
必须替换的项
</p>
<p
v-if=
"index === 0"
style=
"display: flex;justify-content: space-between"
>
<p
v-if=
"index === 0"
style=
"display: flex;justify-content: space-between"
>
<span>
关键技术:
{{
item
.
name
}}
</span>
<span>
关键技术:
{{
item
.
name
}}
</span>
<span>
替换策略:
<span>
替换策略:
...
@@ -313,21 +223,21 @@
...
@@ -313,21 +223,21 @@
</tr>
</tr>
</table>
</table>
<p
class=
"pageIndex"
v-for=
"item of replacedPage"
>
<p
class=
"pageIndex"
v-for=
"item of replacedPage"
>
<span
v-if=
"item.itemIndex === itemInd && item.arrIndex === index && optimized.length !== 0"
>
{{
20
+
item
.
page
+
page1
+
page2
}}
</span>
<span
v-if=
"item.itemIndex === itemInd && item.arrIndex === index && optimized.length !== 0"
>
{{
7
+
item
.
page
+
page1
+
page2
}}
</span>
<span
v-if=
"item.itemIndex === itemInd && item.arrIndex === index && optimized.length === 0"
>
{{
20
+
item
.
page
+
page1
+
1
}}
</span>
<span
v-if=
"item.itemIndex === itemInd && item.arrIndex === index && optimized.length === 0"
>
{{
7
+
item
.
page
+
page1
+
1
}}
</span>
</p>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"page"
v-if=
"replaced.length === 0"
>
<div
class=
"page"
v-if=
"replaced.length === 0"
>
<p
class=
"title3"
>
3
.2.2.
必须替换的项
</p>
<p
class=
"title3"
>
2
.2.2.
必须替换的项
</p>
<p>
暂无
</p>
<p>
暂无
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
2
]
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
2
]
}}
</p>
</div>
</div>
<div
v-for=
"(item,itemInd) of verification"
>
<div
v-for=
"(item,itemInd) of verification"
>
<div
v-for=
"(arr,index) of item.val"
>
<div
v-for=
"(arr,index) of item.val"
>
<div
class=
"pageOther"
v-if=
"arr.length !== 0"
>
<div
class=
"pageOther"
v-if=
"arr.length !== 0"
>
<p
class=
"title3"
v-if=
"itemInd === 0 && index === 0"
>
3
.2.3.
需要验证修改的项
</p>
<p
class=
"title3"
v-if=
"itemInd === 0 && index === 0"
>
2
.2.3.
需要验证修改的项
</p>
<p
v-if=
"index === 0"
style=
"display: flex;justify-content: space-between"
>
<p
v-if=
"index === 0"
style=
"display: flex;justify-content: space-between"
>
<span>
关键技术:
{{
item
.
name
}}
</span>
<span>
关键技术:
{{
item
.
name
}}
</span>
<span>
替换策略:
<span>
替换策略:
...
@@ -351,186 +261,271 @@
...
@@ -351,186 +261,271 @@
</tr>
</tr>
</table>
</table>
<p
class=
"pageIndex"
v-for=
"item of verificationPage"
>
<p
class=
"pageIndex"
v-for=
"item of verificationPage"
>
<span
v-if=
"item.itemIndex === itemInd && item.arrIndex === index && optimized.length !== 0 && replaced.length !== 0"
>
{{
20
+
item
.
page
+
page1
+
page2
+
page3
}}
</span>
<span
v-if=
"item.itemIndex === itemInd && item.arrIndex === index && optimized.length !== 0 && replaced.length !== 0"
>
{{
7
+
item
.
page
+
page1
+
page2
+
page3
}}
</span>
<span
v-if=
"item.itemIndex === itemInd && item.arrIndex === index && optimized.length === 0 && replaced.length !== 0"
>
{{
20
+
item
.
page
+
page1
+
1
+
page3
}}
</span>
<span
v-if=
"item.itemIndex === itemInd && item.arrIndex === index && optimized.length === 0 && replaced.length !== 0"
>
{{
7
+
item
.
page
+
page1
+
1
+
page3
}}
</span>
<span
v-if=
"item.itemIndex === itemInd && item.arrIndex === index && optimized.length !== 0 && replaced.length === 0"
>
{{
20
+
item
.
page
+
page1
+
1
+
page2
}}
</span>
<span
v-if=
"item.itemIndex === itemInd && item.arrIndex === index && optimized.length !== 0 && replaced.length === 0"
>
{{
7
+
item
.
page
+
page1
+
1
+
page2
}}
</span>
<span
v-if=
"item.itemIndex === itemInd && item.arrIndex === index && optimized.length === 0 && replaced.length === 0"
>
{{
20
+
item
.
page
+
page1
+
2
}}
</span>
<span
v-if=
"item.itemIndex === itemInd && item.arrIndex === index && optimized.length === 0 && replaced.length === 0"
>
{{
7
+
item
.
page
+
page1
+
2
}}
</span>
</p>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"page"
v-if=
"verification.length === 0"
>
<div
class=
"page"
v-if=
"verification.length === 0"
>
<p
class=
"title3"
>
3.2.3.
需要验证修改的项
</p>
<p
class=
"title3"
>
2.2.3.
需要验证修改的项
</p>
<p>
暂无
</p>
<p>
暂无
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
3
]
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
3
]
}}
</p>
</div>
<div
class=
"page"
>
<p
class=
"title2"
>
3.3.
难度系数和综合系数修正
</p>
<div>
<table
border=
"1"
cellspacing=
"0"
style=
"margin-top: 10px;width: 100%"
>
<tr>
<td></td>
<td>
系统评估
</td>
<td>
用户额外信息
</td>
<td>
综合难度
</td>
<td>
工作量
</td>
</tr>
<tr>
<td>
系统架构部署难度
</td>
<td
v-for=
"item of systemStructure"
>
{{
item
}}
</td>
</tr>
<tr>
<td>
中间件/API/微服务
</td>
<td
v-for=
"item of middleware"
>
{{
item
}}
</td>
</tr>
<tr>
<td>
数据库
</td>
<td
v-for=
"item of dataBase"
>
{{
item
}}
</td>
</tr>
<tr>
<td>
本地程序
</td>
<td
v-for=
"item of localProgram"
>
{{
item
}}
</td>
</tr>
</table>
</div>
</div>
<p
class=
"title2"
>
3.4.
人工月估算
</p>
<div
class=
"page"
>
<div>
<p
class=
"title2"
>
2.3.
难度系数和综合系数修正
</p>
<table
border=
"1"
cellspacing=
"0"
style=
"margin-top: 10px;width: 100%"
>
<div>
<tr>
<table
border=
"1"
cellspacing=
"0"
style=
"margin-top: 10px;width: 100%"
>
<td></td>
<tr>
<td>
开发量
</td>
<td></td>
<td>
修正系数
</td>
<td>
系统评估
</td>
</tr>
<td>
用户额外信息
</td>
<tr>
<td>
综合难度
</td>
<td>
开发
</td>
<td>
工作量
</td>
<td>
{{
monthlyEstimate
.
development
.
developmentVolume
}}
</td>
</tr>
<td>
{{
monthlyEstimate
.
development
.
correctionFactor
}}
</td>
<tr>
</tr>
<td>
系统架构部署难度
</td>
<tr>
<td
v-for=
"item of systemStructure"
>
{{
item
}}
</td>
<td>
测试
</td>
</tr>
<td>
{{
monthlyEstimate
.
test
.
developmentVolume
}}
</td>
<tr>
<td>
{{
monthlyEstimate
.
test
.
correctionFactor
}}
</td>
<td>
中间件/API/微服务
</td>
</tr>
<td
v-for=
"item of middleware"
>
{{
item
}}
</td>
<tr>
</tr>
<td>
部署
</td>
<tr>
<td>
{{
monthlyEstimate
.
deploy
.
developmentVolume
}}
</td>
<td>
数据库
</td>
<td>
{{
monthlyEstimate
.
deploy
.
correctionFactor
}}
</td>
<td
v-for=
"item of dataBase"
>
{{
item
}}
</td>
</tr>
</tr>
<tr>
<tr>
<td>
合计
</td>
<td>
本地程序
</td>
<td>
{{
monthlyEstimate
.
total
.
developmentVolume
}}
</td>
<td
v-for=
"item of localProgram"
>
{{
item
}}
</td>
<td>
{{
this
.
monthlyEstimate
.
total
.
correctionFactor
===
-
1
?
</tr>
this
.
monthlyEstimate
.
total
.
correctionFactor
=
'-'
:
this
.
monthlyEstimate
.
total
.
correctionFactor
}}
</td>
</table>
</tr>
</div>
</table>
<p
class=
"title2"
>
2.4.
人工月估算
</p>
<div>
<table
border=
"1"
cellspacing=
"0"
style=
"margin-top: 10px;width: 100%"
>
<tr>
<td></td>
<td>
开发量
</td>
<td>
修正系数
</td>
</tr>
<tr>
<td>
开发
</td>
<td>
{{
monthlyEstimate
.
development
.
developmentVolume
}}
</td>
<td>
{{
monthlyEstimate
.
development
.
correctionFactor
}}
</td>
</tr>
<tr>
<td>
测试
</td>
<td>
{{
monthlyEstimate
.
test
.
developmentVolume
}}
</td>
<td>
{{
monthlyEstimate
.
test
.
correctionFactor
}}
</td>
</tr>
<tr>
<td>
部署
</td>
<td>
{{
monthlyEstimate
.
deploy
.
developmentVolume
}}
</td>
<td>
{{
monthlyEstimate
.
deploy
.
correctionFactor
}}
</td>
</tr>
<tr>
<td>
合计
</td>
<td>
{{
monthlyEstimate
.
total
.
developmentVolume
}}
</td>
<td>
{{
this
.
monthlyEstimate
.
total
.
correctionFactor
===
-
1
?
this
.
monthlyEstimate
.
total
.
correctionFactor
=
'-'
:
this
.
monthlyEstimate
.
total
.
correctionFactor
}}
</td>
</tr>
</table>
</div>
<p
class=
"title2"
>
2.5.
额外申请
</p>
<div>
<table
border=
"1"
cellspacing=
"0"
style=
"margin-top: 10px;width: 100%;"
>
<tr>
<td>
费用
</td>
<td>
原因
</td>
</tr>
<tr>
<td>
{{
this
.
newApply
.
cost
===
-
1
?
'无'
:
this
.
newApply
.
cost
}}
</td>
<td>
{{
this
.
newApply
.
reason
===
'-1'
?
'无'
:
this
.
newApply
.
reason
}}
</td>
</tr>
</table>
</div>
<p
class=
"pageIndex"
>
{{
pageList
[
4
]
}}
</p>
</div>
</div>
<p
class=
"title2"
>
3.5.
额外申请
</p>
<div
class=
"page"
>
<div>
<p
class=
"title2"
>
2.6.
预算建议
</p>
<table
border=
"1"
cellspacing=
"0"
style=
"margin-top: 10px;width: 100%;"
>
<p
class=
"contentList"
>
<tr>
由于不同地区、不同行业甚至不同功能项的软件开发人工月单价存在浮动,请在表格内调节该参数。调整后预算费用:
{{
newCost
.
cost
.
now
}}
万元,
<td>
费用
</td>
难度系数:
<span
v-if=
"degreeOfDifficulty"
>
{{
degreeOfDifficulty
}}
</span>
<td>
原因
</td>
</p>
</tr>
<div>
<tr>
<table
border=
"1"
cellspacing=
"0"
style=
"margin-top: 10px;width: 100%"
>
<td>
{{
this
.
newApply
.
cost
===
-
1
?
'无'
:
this
.
newApply
.
cost
}}
</td>
<tr>
<td>
{{
this
.
newApply
.
reason
===
'-1'
?
'无'
:
this
.
newApply
.
reason
}}
</td>
<td></td>
</tr>
<td>
默认值
</td>
</table>
<td>
人工审核
</td>
<td>
调整后
</td>
</tr>
<tr>
<td>
人工单价(万元)
</td>
<td>
{{
newCost
.
person
.
normal
}}
</td>
<td>
{{
newCost
.
person
.
operating
}}
</td>
<td>
{{
newCost
.
person
.
now
}}
</td>
</tr>
<tr>
<td>
工作量
</td>
<td>
{{
newCost
.
work
.
normal
}}
</td>
<td>
{{
newCost
.
work
.
operating
}}
</td>
<td>
{{
newCost
.
work
.
now
}}
</td>
</tr>
<tr>
<td>
额外依赖服务申请(万元)
</td>
<td>
{{
newCost
.
other
.
normal
}}
</td>
<td>
{{
newCost
.
other
.
operating
}}
</td>
<td>
{{
newCost
.
other
.
now
}}
</td>
</tr>
<tr>
<td>
预算费用(万元)
</td>
<td>
{{
newCost
.
cost
.
normal
}}
</td>
<td>
{{
newCost
.
cost
.
operating
}}
</td>
<td>
{{
newCost
.
cost
.
now
}}
</td>
</tr>
</table>
</div>
<p
class=
"pageIndex"
>
{{
pageList
[
5
]
}}
</p>
</div>
</div>
<p
class=
"pageIndex"
>
{{
pageList
[
4
]
}}
</p>
<!-- 3-->
</div>
<div
class=
"page"
>
<div
class=
"page"
>
<p
class=
"title1"
>
3.
评估标准和方法
</p>
<p
class=
"title2"
>
3.6.
预算建议
</p>
<p
class=
"title2"
>
3.1.
参照标准
</p>
<p
class=
"contentList"
>
<p
class=
"title3"
>
3.1.1.
“912工程”相关政策法规
</p>
由于不同地区、不同行业甚至不同功能项的软件开发人工月单价存在浮动,请在表格内调节该参数。调整后预算费用:
{{
newCost
.
cost
.
now
}}
万元,
<p
class=
"contentList"
style=
"letter-spacing:1px; text-indent:0em;"
v-for=
"item of regulations"
>
{{
item
}}
</p>
难度系数:
<span
v-if=
"degreeOfDifficulty"
>
{{
degreeOfDifficulty
}}
</span>
<p
class=
"pageIndex"
>
{{
pageList
[
6
]
}}
</p>
</p>
</div>
<div>
<div
class=
"page"
>
<table
border=
"1"
cellspacing=
"0"
style=
"margin-top: 10px;width: 100%"
>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of regulations"
>
{{
item
}}
</p>
<tr>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of supplement"
>
{{
item
}}
</p>
<td></td>
<p
class=
"title3"
>
2.1.2.
“912工程”相关国家标准与规范
</p>
<td>
默认值
</td>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of nationalNorms"
>
{{
item
}}
</p>
<td>
操作
</td>
<p
class=
"pageIndex"
>
{{
pageList
[
7
]
}}
</p>
<td>
调整后
</td>
</div>
</tr>
<div
class=
"page"
>
<tr>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of nationalNorms2"
>
{{
item
}}
</p>
<td>
人工单价(万元)
</td>
<p
class=
"pageIndex"
>
{{
pageList
[
8
]
}}
</p>
<td>
{{
newCost
.
person
.
normal
}}
</td>
</div>
<td>
{{
newCost
.
person
.
operating
}}
</td>
<div
class=
"page"
>
<td>
{{
newCost
.
person
.
now
}}
</td>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of nationalNorms3"
>
{{
item
}}
</p>
</tr>
<p
class=
"title3"
>
3.1.3.
“L77软件工程”国家分类标准
</p>
<tr>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of classificationCriteria"
>
{{
item
}}
</p>
<td>
工作量
</td>
<p
class=
"pageIndex"
>
{{
pageList
[
9
]
}}
</p>
<td>
{{
newCost
.
work
.
normal
}}
</td>
</div>
<td>
{{
newCost
.
work
.
operating
}}
</td>
<div
class=
"page"
>
<td>
{{
newCost
.
work
.
now
}}
</td>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of classificationCriteria2"
>
{{
item
}}
</p>
</tr>
<p
class=
"title3"
>
3.1.4.
其他编制依据
</p>
<tr>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of otherEstablishments"
>
{{
item
}}
</p>
<td>
额外依赖服务申请(万元)
</td>
<p
class=
"pageIndex"
>
{{
pageList
[
10
]
}}
</p>
<td>
{{
newCost
.
other
.
normal
}}
</td>
</div>
<td>
{{
newCost
.
other
.
operating
}}
</td>
<div
class=
"page"
>
<td>
{{
newCost
.
other
.
now
}}
</td>
<p
class=
"contentList"
style=
"letter-spacing:1px;text-indent:0em;"
v-for=
"item of otherEstablishments2"
>
{{
item
}}
</p>
</tr>
<p
class=
"title2"
>
3.2.
评估流程与方法
</p>
<tr>
<p
class=
"title3"
>
3.2.1.
基本评估流程
</p>
<td>
预算费用(万元)
</td>
<p>
<td>
{{
newCost
.
cost
.
normal
}}
</td>
<img
src=
"./img/1.png"
style=
"width: 100%"
>
<td>
{{
newCost
.
cost
.
operating
}}
</td>
</p>
<td>
{{
newCost
.
cost
.
now
}}
</td>
<p
class=
"contentList"
v-for=
"item of evaluationProcess"
>
{{
item
}}
</p>
</tr>
<p
class=
"pageIndex"
>
{{
pageList
[
11
]
}}
</p>
</table>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
v-for=
"item of evaluationProcess2"
>
{{
item
}}
</p>
<p
class=
"title3"
>
3.2.2.
结合国家标准L77类目下的度量说明
</p>
<p
class=
"contentList"
v-for=
"item of metricDescription"
>
{{
item
}}
</p>
<p
class=
"title4"
>
3.2.2.1.
规模测算
</p>
<p
class=
"contentList"
v-for=
"item of scaleConversion"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
12
]
}}
</p>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
>
笼统的算法如下式计算:
</p>
<p
class=
"contentList"
style=
"text-align:center;"
>
S = US*CF
</p>
<p
class=
"contentList"
v-for=
"item of scaleConversion2"
>
{{
item
}}
</p>
<p
class=
"title4"
>
3.2.2.2.
工作量测算
</p>
<p
class=
"contentList"
>
根据GB/T 36964-2018的流程,规模测算完成的结果,将指导和约束工作量测算和成本测算。
</p>
<p>
<img
src=
"./img/2.png"
style=
"width: 100%"
>
</p>
<p
class=
"contentList"
>
工作量测算在自动化评估中采用GB/T36964-2018的方程法、类比法、类推法3种方法。包含对未知技术依赖的不确定工作量和测试
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
13
]
}}
</p>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
style=
"text-indent:0em;"
>
修改的不可预见工作量。
</p>
<p
class=
"contentList"
v-for=
"item of workloadCalculation"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
14
]
}}
</p>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
v-for=
"item of workloadCalculation2"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
15
]
}}
</p>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
v-for=
"item of workloadCalculation3"
>
{{
item
}}
</p>
<p
class=
"title4"
>
3.2.2.3.
人工月单价测算
</p>
<p
class=
"contentList"
v-for=
"item of unitPriceCalculation"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
16
]
}}
</p>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
style=
"text-indent:0em;"
>
1.5万元/人工月,允许委托单位输入时补充额外金额申请。
</p>
<p
class=
"title3"
>
3.2.3.
递归的精度与误差说明
</p>
<p
class=
"contentList"
v-for=
"item of recursivePrecision"
>
{{
item
}}
</p>
<p
class=
"title4"
>
3.2.3.1.
整体类比法
</p>
<p
class=
"contentList"
v-for=
"item of overallAnalogy"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
17
]
}}
</p>
</div>
<div
class=
"page"
>
<p
class=
"contentList"
style=
"text-indent:0em;"
>
码或文件。功能非相关的和功能不启用的部分,交由委托单位现场确认。确认后删除或保留。如发现完整性严重缺失,委托单位重新提交。
</p>
<p
class=
"contentList"
>
而后二次导入,进行自动化评估。该方法将最大程度筛查和杜绝各种原因造成的调研数据错误、代码文件无关参杂的情况。也是确保评估误差可控的前提。
</p>
<p
class=
"title4"
>
3.2.3.2.
开发时间固定百分比法
</p>
<p
class=
"contentList"
v-for=
"item of fixedDevelopment"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
18
]
}}
</p>
</div>
</div>
<p
class=
"pageIndex"
>
{{
pageList
[
5
]
}}
</p>
</div>
<!-- 4-->
<!-- 4-->
<div
class=
"page"
>
<div
class=
"page"
>
<p
class=
"title1"
>
4.
评估建议
</p>
<p
class=
"title1"
>
4.
评估建议
</p>
<p
class=
"title2"
>
4.1.
适配/改造路线选择
</p>
<p
class=
"title2"
>
4.1.
适配/改造路线选择
</p>
<p
class=
"contentList"
v-for=
"item of routeSelection"
>
{{
item
}}
</p>
<p
class=
"contentList"
v-for=
"item of routeSelection"
>
{{
item
}}
</p>
<p
class=
"title2"
>
4.2.
关键工作与方法
</p>
<p
class=
"title2"
>
4.2.
关键工作与方法
</p>
<p
class=
"title3"
>
4.2.1.
开发框架解决方法
</p>
<p
class=
"title3"
>
4.2.1.
开发框架解决方法
</p>
<p
class=
"contentList"
>
J2EE和类似跨平台的开发框架,可通过适配和代码改造,完全移植到国产化环境下。
</p>
<p
class=
"contentList"
>
J2EE和类似跨平台的开发框架,可通过适配和代码改造,完全移植到国产化环境下。
</p>
<p
class=
"contentList"
>
基于.NET体系下使用VB、Delphi、VC、C++、C#等语言,完全依
</p>
<p
class=
"contentList"
>
基于.NET体系下使用VB、Delphi、VC、C++、C#等语言,完全依
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
6
]
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
19
]
}}
</p>
</div>
</div>
<div
class=
"page"
>
<div
class=
"page"
>
<p
class=
"contentList"
style=
"text-indent:0em;"
>
赖Window组件和库的应用系统,需要换框架重构。
</p>
<p
class=
"contentList"
style=
"text-indent:0em;"
>
赖Window组件和库的应用系统,需要换框架重构。
</p>
<p
class=
"title3"
>
4.2.2.
浏览器的适配兼容性改造解决方法
</p>
<p
class=
"title3"
>
4.2.2.
浏览器的适配兼容性改造解决方法
</p>
<p
class=
"contentList"
v-for=
"item of adaptationCompatible"
>
{{
item
}}
</p>
<p
class=
"contentList"
v-for=
"item of adaptationCompatible"
>
{{
item
}}
</p>
<p
class=
"title3"
>
4.2.3.
浏览器功能组件的替换和适配解决方法
</p>
<p
class=
"title3"
>
4.2.3.
浏览器功能组件的替换和适配解决方法
</p>
<p
class=
"contentList"
v-for=
"item of replacementAndAdaptation"
>
{{
item
}}
</p>
<p
class=
"contentList"
v-for=
"item of replacementAndAdaptation"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
7
]
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
20
]
}}
</p>
</div>
</div>
<div
class=
"page"
>
<div
class=
"page"
>
<p
class=
"title3"
>
4.2.4.
B/S结构下的重构
</p>
<p
class=
"title3"
>
4.2.4.
B/S结构下的重构
</p>
<p
class=
"contentList"
>
B/S结构的重构,主要是更换跨平台开发框架。其难度集中在寻找windows本地组件功能的替代品,目前UOS、麒麟OS相同功能的组件和调用方法比较成熟,整体开发风险不高。
</p>
<p
class=
"contentList"
>
B/S结构的重构,主要是更换跨平台开发框架。其难度集中在寻找windows本地组件功能的替代品,目前UOS、麒麟OS相同功能的组件和调用方法比较成熟,整体开发风险不高。
</p>
<p
class=
"title3"
>
4.2.5.
C/S结构下的重构
</p>
<p
class=
"title3"
>
4.2.5.
C/S结构下的重构
</p>
<p
class=
"contentList"
>
如改造后必须维持C/S结构,本地客户端程序可选择QT开发框架实现在Linux内核操作系统和Windows操作系统上的跨平台,也可选择使用JAVA Application方案中JVM、Node JS这类伪C/S本地客户端搭建。后端则建议更改为J2EE体系框架或其他跨平台框架。
</p>
<p
class=
"contentList"
>
如改造后必须维持C/S结构,本地客户端程序可选择QT开发框架实现在Linux内核操作系统和Windows操作系统上的跨平台,也可选择使用JAVA Application方案中JVM、Node JS这类伪C/S本地客户端搭建。后端则建议更改为J2EE体系框架或其他跨平台框架。
</p>
<p
class=
"contentList"
>
如改造后允许以B/S结构部署,则改造工作量和不可预见问题将大为减少。
</p>
<p
class=
"contentList"
>
如改造后允许以B/S结构部署,则改造工作量和不可预见问题将大为减少。
</p>
<p
class=
"title3"
>
4.2.6.
部署和迁移策略
</p>
<p
class=
"title3"
>
4.2.6.
部署和迁移策略
</p>
<p
class=
"contentList"
v-for=
"item of deploymentAndMigration"
>
{{
item
}}
</p>
<p
class=
"contentList"
v-for=
"item of deploymentAndMigration"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
8
]
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
21
]
}}
</p>
</div>
</div>
<div
class=
"page"
>
<div
class=
"page"
>
<p
class=
"contentList"
v-for=
"item of deploymentAndMigration2"
style=
"text-indent:0em;"
>
{{
item
}}
</p>
<p
class=
"contentList"
v-for=
"item of deploymentAndMigration2"
style=
"text-indent:0em;"
>
{{
item
}}
</p>
<p
style=
"text-align: center;"
>
<p
style=
"text-align: center;"
>
<img
src=
"./img/3.png"
style=
"width: 50%"
>
<img
src=
"./img/3.png"
style=
"width: 50%"
>
</p>
</p>
<p
class=
"contentList"
v-for=
"item of deploymentAndMigration3"
>
{{
item
}}
</p>
<p
class=
"contentList"
v-for=
"item of deploymentAndMigration3"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
9
]
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
22
]
}}
</p>
</div>
</div>
<div
class=
"page"
>
<div
class=
"page"
>
<p
class=
"contentList"
v-for=
"item of deploymentAndMigration4"
style=
"text-indent:0em;"
>
{{
item
}}
</p>
<p
class=
"contentList"
v-for=
"item of deploymentAndMigration4"
style=
"text-indent:0em;"
>
{{
item
}}
</p>
<p
class=
"contentList"
>
最后要监测解决冲突,及时对异常数据进行处理。由于数据库双向可写,需监控监测冲突,并做好对应的日志记录。当出现异常数据,例如要求插入的数据,数据库中已经存在;或者更新数据,发现数据记录并不存在,需根据预定义的规则进行相应的处理。
</p>
<p
class=
"contentList"
>
最后要监测解决冲突,及时对异常数据进行处理。由于数据库双向可写,需监控监测冲突,并做好对应的日志记录。当出现异常数据,例如要求插入的数据,数据库中已经存在;或者更新数据,发现数据记录并不存在,需根据预定义的规则进行相应的处理。
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
10
]
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
23
]
}}
</p>
</div>
</div>
<div
class=
"page"
>
<p
class=
"title1"
>
5.
附件
</p>
<p
class=
"contentList"
v-for=
"item of annex"
style=
"text-indent:0em;"
>
{{
item
}}
</p>
<p
class=
"pageIndex"
>
{{
pageList
[
11
]
}}
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</
template
>
</
template
>
...
@@ -747,7 +742,7 @@ export default {
...
@@ -747,7 +742,7 @@ export default {
'评估工具会自动使用该方法。首先,扫描代码并分析开发工作量测算出理论值A1。不可预见量、难度系数、综合系数叠加运算出理论值A2,A2的加权系数为0.6。再按照使用GB/T36964-2018提供的方程法估算出对比值B1,然后使用GB/T36964-2018提供的类比法和类推法来推算并限制对比值B1,形成对比值B2。B2的加权系数为0.4。'
,
'评估工具会自动使用该方法。首先,扫描代码并分析开发工作量测算出理论值A1。不可预见量、难度系数、综合系数叠加运算出理论值A2,A2的加权系数为0.6。再按照使用GB/T36964-2018提供的方程法估算出对比值B1,然后使用GB/T36964-2018提供的类比法和类推法来推算并限制对比值B1,形成对比值B2。B2的加权系数为0.4。'
,
'如A2/B2在±10%内,取A2值;反之取A2、B2的加权平均值。'
,
'如A2/B2在±10%内,取A2值;反之取A2、B2的加权平均值。'
,
'这种方法的精确度取决于输入调研表数据和代码文件的完整性,其结果误差在本次评估中被限定在+10%以内,对预算影响被限定在+4.5%以内。'
,
'这种方法的精确度取决于输入调研表数据和代码文件的完整性,其结果误差在本次评估中被限定在+10%以内,对预算影响被限定在+4.5%以内。'
,
'综上,误差控制和误差范围可接受。本评估报告计算的工作量和'
'综上,误差控制和误差范围可接受。本评估报告计算的工作量和
推算的预算建议,将作为宁波市安可办的审核依据和预算约束。
'
],
],
routeSelection
:[
routeSelection
:[
'B/S应用系统的浏览器前端部分,主要面临编译结果在不同内核下标准兼容的问题,在安可操作系统上主要针对火狐浏览器(52版本)、360安全浏览器上的兼容性适配,主要工作集中在前端代码的筛查和轻度改造。'
,
'B/S应用系统的浏览器前端部分,主要面临编译结果在不同内核下标准兼容的问题,在安可操作系统上主要针对火狐浏览器(52版本)、360安全浏览器上的兼容性适配,主要工作集中在前端代码的筛查和轻度改造。'
,
...
@@ -827,7 +822,7 @@ export default {
...
@@ -827,7 +822,7 @@ export default {
},
},
other
:{
other
:{
normal
:
0
,
normal
:
0
,
operating
:
'
同意
'
,
operating
:
'
/
'
,
now
:
0
now
:
0
},
},
cost
:{
cost
:{
...
@@ -858,25 +853,32 @@ export default {
...
@@ -858,25 +853,32 @@ export default {
mounted
:
function
()
{
mounted
:
function
()
{
},
},
methods
:{
methods
:{
download
()
{
window
.
scrollTo
(
0
,
0
);
setTimeout
(()
=>
{
this
.
getPdf
(
'pdfDom'
);
},
500
)
},
// 获取页码
// 获取页码
getPage
()
{
getPage
()
{
for
(
let
i
=
1
;
i
<=
12
;
i
++
)
{
for
(
let
i
=
1
;
i
<=
25
;
i
++
)
{
if
(
i
===
1
||
i
===
2
)
{
if
(
i
===
1
||
i
===
2
)
{
this
.
pageList
.
push
(
i
+
this
.
page1
+
19
)
this
.
pageList
.
push
(
i
+
this
.
page1
+
6
)
}
else
if
(
i
===
3
)
{
}
else
if
(
i
===
3
)
{
this
.
pageList
.
push
(
i
+
this
.
page1
+
19
+
this
.
page2
)
this
.
pageList
.
push
(
i
+
this
.
page1
+
6
+
this
.
page2
)
}
else
if
(
i
===
4
)
{
}
else
if
(
i
===
4
)
{
if
(
this
.
page2
!==
0
&&
this
.
page3
!==
0
)
{
if
(
this
.
page2
!==
0
&&
this
.
page3
!==
0
)
{
this
.
pageList
.
push
(
i
+
this
.
page1
+
19
+
this
.
page2
+
this
.
page3
-
2
)
this
.
pageList
.
push
(
i
+
this
.
page1
+
6
+
this
.
page2
+
this
.
page3
-
2
)
}
else
if
(
this
.
page2
!==
0
||
this
.
page3
!==
0
)
{
}
else
if
(
this
.
page2
!==
0
||
this
.
page3
!==
0
)
{
this
.
pageList
.
push
(
i
+
this
.
page1
+
19
+
this
.
page2
+
this
.
page3
-
1
)
this
.
pageList
.
push
(
i
+
this
.
page1
+
6
+
this
.
page2
+
this
.
page3
-
1
)
}
else
if
(
this
.
page2
===
0
&&
this
.
page3
===
0
)
{
}
else
if
(
this
.
page2
===
0
&&
this
.
page3
===
0
)
{
this
.
pageList
.
push
(
i
+
this
.
page1
+
19
+
this
.
page2
+
this
.
page3
)
this
.
pageList
.
push
(
i
+
this
.
page1
+
6
+
this
.
page2
+
this
.
page3
)
}
}
}
else
{
}
else
{
this
.
pageList
.
push
(
i
+
this
.
page1
+
19
+
this
.
pageAll
-
this
.
del
)
this
.
pageList
.
push
(
i
+
this
.
page1
+
6
+
this
.
pageAll
-
this
.
del
)
}
}
}
}
console
.
log
(
this
.
pageList
)
},
},
// 获取打印时间
// 获取打印时间
imeDayFilter
()
{
imeDayFilter
()
{
...
@@ -899,11 +901,14 @@ export default {
...
@@ -899,11 +901,14 @@ export default {
}
}
this
.
$server
.
getTechnology
(
val
).
then
(
res
=>
{
this
.
$server
.
getTechnology
(
val
).
then
(
res
=>
{
// console.log('数据请求结果', res.data)
// console.log('数据请求结果', res.data)
console
.
log
(
this
.
$route
.
query
.
agree
)
if
(
res
.
data
!==
500
)
{
if
(
res
.
data
!==
500
)
{
this
.
title
=
res
.
data
.
localContact
;
this
.
systemName
=
res
.
data
.
sysName
;
this
.
systemName
=
res
.
data
.
sysName
;
this
.
reportName
=
res
.
data
.
type
===
2
?
'适配'
:
'改造'
+
'工作评估报告'
;
this
.
reportName
=
res
.
data
.
type
===
2
?
'适配'
:
'改造'
+
'工作评估报告'
;
this
.
reportName
=
'在国产化安全自主可控环境下的'
+
this
.
reportName
;
this
.
reportName
=
'在国产化安全自主可控环境下的'
+
this
.
reportName
;
this
.
htmlTitle
=
this
.
reportName
;
this
.
htmlTitle
=
this
.
reportName
;
console
.
log
(
res
.
data
.
sysScale
)
this
.
sysScale
.
codeNum
=
res
.
data
.
sysScale
.
code
.
num
===
-
1
?
'-'
:
res
.
data
.
sysScale
.
code
.
num
;
this
.
sysScale
.
codeNum
=
res
.
data
.
sysScale
.
code
.
num
===
-
1
?
'-'
:
res
.
data
.
sysScale
.
code
.
num
;
this
.
sysScale
.
modelNum
=
res
.
data
.
sysScale
.
mode
.
num
===
-
1
?
'-'
:
res
.
data
.
sysScale
.
mode
.
num
;
this
.
sysScale
.
modelNum
=
res
.
data
.
sysScale
.
mode
.
num
===
-
1
?
'-'
:
res
.
data
.
sysScale
.
mode
.
num
;
this
.
sysScale
.
fileNum
=
res
.
data
.
sysScale
.
file
.
num
===
-
1
?
'-'
:
res
.
data
.
sysScale
.
file
.
num
;
this
.
sysScale
.
fileNum
=
res
.
data
.
sysScale
.
file
.
num
===
-
1
?
'-'
:
res
.
data
.
sysScale
.
file
.
num
;
...
@@ -939,13 +944,14 @@ export default {
...
@@ -939,13 +944,14 @@ export default {
this
.
newCost
.
work
.
normal
=
res
.
data
.
manufacturingCost
===
''
?
0
:
res
.
data
.
manufacturingCost
.
workLoad
.
calculation
;
this
.
newCost
.
work
.
normal
=
res
.
data
.
manufacturingCost
===
''
?
0
:
res
.
data
.
manufacturingCost
.
workLoad
.
calculation
;
this
.
newCost
.
work
.
now
=
res
.
data
.
manufacturingCost
===
''
?
0
:
res
.
data
.
manufacturingCost
.
workLoad
.
calculation
;
this
.
newCost
.
work
.
now
=
res
.
data
.
manufacturingCost
===
''
?
0
:
res
.
data
.
manufacturingCost
.
workLoad
.
calculation
;
this
.
newCost
.
other
.
normal
=
res
.
data
.
manufacturingCost
===
''
?
0
:
res
.
data
.
manufacturingCost
.
apply
.
calculation
;
this
.
newCost
.
other
.
normal
=
res
.
data
.
manufacturingCost
===
''
?
0
:
res
.
data
.
manufacturingCost
.
apply
.
calculation
;
this
.
newCost
.
other
.
now
=
res
.
data
.
manufacturingCost
===
''
?
0
:
res
.
data
.
manufacturingCost
.
apply
.
calculation
;
this
.
newCost
.
other
.
operating
=
this
.
$route
.
query
.
agree
===
'true'
?
'同意'
:
0
;
this
.
newCost
.
other
.
now
=
this
.
$route
.
query
.
agree
===
'true'
?
res
.
data
.
manufacturingCost
.
apply
.
calculation
:
0
;
this
.
newCost
.
cost
.
now
=
res
.
data
.
manufacturingCost
===
''
?
0
:
(
(
(
Number
(
this
.
newCost
.
person
.
normal
)
+
Number
(
this
.
newCost
.
person
.
operating
))
*
Number
(
this
.
newCost
.
work
.
now
)
)
+
Number
(
this
.
newCost
.
other
.
now
)
).
toFixed
(
3
)
this
.
newCost
.
cost
.
now
=
res
.
data
.
manufacturingCost
===
''
?
0
:
(
(
(
Number
(
this
.
newCost
.
person
.
normal
)
+
Number
(
this
.
newCost
.
person
.
operating
))
*
Number
(
this
.
newCost
.
work
.
now
)
)
+
Number
(
this
.
newCost
.
other
.
now
)
).
toFixed
(
3
)
this
.
degreeOfDifficulty
=
res
.
data
.
manufacturingCost
.
degreeOfDifficulty
.
calculation
;
this
.
degreeOfDifficulty
=
res
.
data
.
manufacturingCost
.
degreeOfDifficulty
.
calculation
;
this
.
tableTitle
[
0
].
val
=
this
.
title
;
// 单位名称
this
.
tableTitle
[
0
].
val
=
this
.
title
;
// 单位名称
this
.
tableTitle
[
1
].
val
=
this
.
systemName
;
// 原系统名称
this
.
tableTitle
[
1
].
val
=
this
.
systemName
;
// 原系统名称
this
.
tableTitle
[
2
].
val
=
this
.
newCost
.
cost
.
now
+
'万元'
;
// 适配预算
console
.
log
(
res
.
data
.
language
)
this
.
tableTitle
[
3
].
val
=
res
.
data
.
language
===
1
?
'java'
:
res
.
data
.
language
===
2
?
'js'
:
res
.
data
.
language
===
3
?
'python'
:
res
.
data
.
language
===
4
?
'asp'
:
res
.
data
.
language
===
6
?
'go'
:
res
.
data
.
language
===
7
?
'html'
:
res
.
data
.
language
===
8
?
'c#'
:
res
.
data
.
language
===
10
?
'unknow'
:
'-'
;
// 语言
this
.
tableTitle
[
3
].
val
=
res
.
data
.
language
===
1
?
'C'
:
res
.
data
.
language
===
2
?
'VB'
:
res
.
data
.
language
===
3
?
'DELPHI'
:
res
.
data
.
language
===
4
?
'PHP'
:
res
.
data
.
language
===
5
?
'JAVA'
:
res
.
data
.
language
===
6
?
'PYTHON'
:
res
.
data
.
language
===
7
?
'GO'
:
res
.
data
.
language
===
8
?
'RUST'
:
res
.
data
.
language
===
9
?
'RUBY'
:
res
.
data
.
language
===
10
?
'PERL'
:
res
.
data
.
language
===
11
?
'MATLAB'
:
res
.
data
.
language
===
12
?
'QITA'
:
res
.
data
.
language
===
13
?
'HTML'
:
'-'
this
.
tableTitle
[
4
].
val
=
res
.
data
.
framework
===
1
?
'前后端分离'
:
res
.
data
.
framework
===
2
?
'混合'
:
res
.
data
.
framework
===
-
1
?
'-'
:
''
;
// 架构
this
.
tableTitle
[
4
].
val
=
res
.
data
.
framework
===
1
?
'前后端分离'
:
res
.
data
.
framework
===
2
?
'混合'
:
res
.
data
.
framework
===
-
1
?
'-'
:
''
;
// 架构
this
.
tableTitle
[
5
].
val
=
this
.
sysScale
.
codeNum
;
// 代码行
this
.
tableTitle
[
5
].
val
=
this
.
sysScale
.
codeNum
;
// 代码行
this
.
tableTitle
[
6
].
val
=
this
.
sysScale
.
fileNum
+
'/'
+
this
.
sysScale
.
modelNum
;
// 文件/模块
this
.
tableTitle
[
6
].
val
=
this
.
sysScale
.
fileNum
+
'/'
+
this
.
sysScale
.
modelNum
;
// 文件/模块
...
@@ -1002,7 +1008,7 @@ export default {
...
@@ -1002,7 +1008,7 @@ export default {
init2
()
{
init2
()
{
this
.
$server
.
getExcel
(
this
.
$route
.
query
.
id
).
then
(
res
=>
{
this
.
$server
.
getExcel
(
this
.
$route
.
query
.
id
).
then
(
res
=>
{
this
.
messageAll
=
res
.
data
;
this
.
messageAll
=
res
.
data
;
console
.
log
(
this
.
messageAll
);
this
.
tableTitle
[
2
].
val
=
res
.
data
[
0
].
arrayList
[
8
].
value
+
'万元'
;
// 适配预算
let
array
=
[];
let
array
=
[];
for
(
let
item
of
this
.
messageAll
)
{
for
(
let
item
of
this
.
messageAll
)
{
if
(
item
.
arrayList
.
length
!==
0
)
{
if
(
item
.
arrayList
.
length
!==
0
)
{
...
@@ -1013,7 +1019,7 @@ export default {
...
@@ -1013,7 +1019,7 @@ export default {
array
.
push
(
val
);
// 新增名称和对应的空数组
array
.
push
(
val
);
// 新增名称和对应的空数组
let
page
=
0
;
// 当前页为0
let
page
=
0
;
// 当前页为0
for
(
let
a
=
0
;
a
<
item
.
arrayList
.
length
;
a
++
)
{
// 遍历内容
for
(
let
a
=
0
;
a
<
item
.
arrayList
.
length
;
a
++
)
{
// 遍历内容
if
(
a
%
20
===
0
)
{
// 二十
条为一页
if
(
a
%
15
===
0
)
{
// 15
条为一页
array
[
array
.
length
-
1
].
val
.
push
([]);
// 当到了二十条,在对应的位置添加空数组
array
[
array
.
length
-
1
].
val
.
push
([]);
// 当到了二十条,在对应的位置添加空数组
if
(
a
!==
0
)
{
// a初始为0时,page不加1
if
(
a
!==
0
)
{
// a初始为0时,page不加1
page
+=
1
;
page
+=
1
;
...
@@ -1126,6 +1132,11 @@ export default {
...
@@ -1126,6 +1132,11 @@ export default {
box-sizing
:
border-box
;
box-sizing
:
border-box
;
position
:
relative
;
position
:
relative
;
}
}
.otherPdf
.other
{
font-size
:
28px
;
font-family
:
"黑体"
;
line-height
:
1.5
;
}
.otherPdf
.title
{
.otherPdf
.title
{
text-align
:
center
;
text-align
:
center
;
font-size
:
26px
;
font-size
:
26px
;
...
@@ -1164,7 +1175,14 @@ export default {
...
@@ -1164,7 +1175,14 @@ export default {
white-space
:
nowrap
;
white-space
:
nowrap
;
}
}
.otherPdf
.listContent
.child
{
.otherPdf
.listContent
.child
{
text-align
:
right
;
position
:
relative
;
}
.otherPdf
.listContent
.child
span
{
display
:
inline-block
;
width
:
25px
;
position
:
absolute
;
right
:
15px
;
}
}
.otherPdf
.title1
{
.otherPdf
.title1
{
font-size
:
22px
;
font-size
:
22px
;
...
@@ -1198,7 +1216,7 @@ export default {
...
@@ -1198,7 +1216,7 @@ export default {
font-size
:
12px
;
font-size
:
12px
;
text-align
:
center
;
text-align
:
center
;
position
:
absolute
;
position
:
absolute
;
bottom
:
2
5px
;
bottom
:
3
5px
;
left
:
297px
;
left
:
297px
;
}
}
.otherPdf
.listContent
{
.otherPdf
.listContent
{
...
...
src/components/projectManagement/project/projectAdd.vue
浏览文件 @
1d300a9f
...
@@ -526,7 +526,7 @@ export default {
...
@@ -526,7 +526,7 @@ export default {
console
.
log
(
err
);
console
.
log
(
err
);
})
})
}
else
{
}
else
{
this
.
errorData
();
//
this.errorData();
this
.
$message
.
error
(
'基本信息项不可为空!'
);
this
.
$message
.
error
(
'基本信息项不可为空!'
);
}
}
},
},
...
...
src/components/reportAssess/reportAssess.vue
浏览文件 @
1d300a9f
...
@@ -23,7 +23,8 @@
...
@@ -23,7 +23,8 @@
<div
class=
"one"
>
<div
class=
"one"
>
<div
class=
"oneTitle"
>
<i></i>
概要
</div>
<div
class=
"oneTitle"
>
<i></i>
概要
</div>
<div
class=
"lineTop"
>
<div
class=
"lineTop"
>
<span
@
click=
"jump"
>
导出PDF格式
</span>
<span
@
click=
"downloadWps"
v-show=
"this.$route.query.authority === 1"
>
导出WPS格式
</span>
<span
@
click=
"jump"
v-show=
"this.$route.query.authority === 1"
>
导出PDF格式
</span>
<span
@
click=
"reback"
>
信息填报
</span>
<span
@
click=
"reback"
>
信息填报
</span>
<span
@
click=
"goBackprev"
>
关闭
</span>
<span
@
click=
"goBackprev"
>
关闭
</span>
<!--
<div
><span
@
click=
"goBackprev"
>
返回
</span>
-->
<!--
<div
><span
@
click=
"goBackprev"
>
返回
</span>
-->
...
@@ -56,7 +57,7 @@
...
@@ -56,7 +57,7 @@
'JAVASCRIPT'
:
this
.
language
===
14
?
'JAVASCRIPT'
:
this
.
language
===
14
?
'HTML'
:
'-'
'HTML'
:
'-'
}}
}}
</span>
</span>
</div>
</div>
</el-col>
</el-col>
...
@@ -237,7 +238,7 @@
...
@@ -237,7 +238,7 @@
<span
v-if=
"opper[index].technology.match( /.*\((.*)\)/)[1] == '支持'"
>
忽略
</span>
<span
v-if=
"opper[index].technology.match( /.*\((.*)\)/)[1] == '支持'"
>
忽略
</span>
<span
v-else-if=
"opper[index].technology.match( /.*\((.*)\)/)[1] == '不支持'"
>
重新开发
</span>
<span
v-else-if=
"opper[index].technology.match( /.*\((.*)\)/)[1] == '不支持'"
>
重新开发
</span>
<span
v-else-if=
"opper[index].technology.match( /.*\((.*)\)/)[1] == '未知'"
>
修改或重新开发
</span>
<span
v-else-if=
"opper[index].technology.match( /.*\((.*)\)/)[1] == '未知'"
>
修改或重新开发
</span>
<span
v-else-if=
"opper[index].technology.match( /.*\((.*)\)/)[1] == '优化'"
>
修改
</span>
<span
v-else-if=
"opper[index].technology.match( /.*\((.*)\)/)[1] == '优化'"
>
f
修改
</span>
<span
v-else
>
-
</span>
<span
v-else
>
-
</span>
<!--
{{
item1
.
technology
===
'国产化依赖(支持)'
?
-->
<!--
{{
item1
.
technology
===
'国产化依赖(支持)'
?
-->
<!--
replaceSuggest
=
'忽略'
:
item1
.
technology
===
'非国产化依赖(不支持)'
?
-->
<!--
replaceSuggest
=
'忽略'
:
item1
.
technology
===
'非国产化依赖(不支持)'
?
-->
...
@@ -763,8 +764,8 @@
...
@@ -763,8 +764,8 @@
<p
class=
"bird"
>
{{
this
.
newWork
.
des
}}
</p>
<p
class=
"bird"
>
{{
this
.
newWork
.
des
}}
</p>
<p
class=
"otherTitle"
>
3、额外依赖服务申请
</p>
<p
class=
"otherTitle"
>
3、额外依赖服务申请
</p>
<p
class=
"bird"
>
额外依赖服务申请费用
<span></span>
{{
this
.
newApply
.
cost
===
-
1
?
'无'
:
this
.
newApply
.
cost
}}
</p>
<p
class=
"bird"
>
额外依赖服务申请费用
<span></span>
{{
this
.
newApply
.
cost
===
-
1
?
'无'
:
this
.
newApply
.
cost
}}
</p>
<p
class=
"otherTitle"
>
4、适配难度评估
</p>
<p
class=
"otherTitle"
v-if=
" this.newCost.degreeOfDifficulty"
>
4、适配难度评估
</p>
<p
class=
"bird"
>
{{
this
.
newDifficuty
.
des
}}
</p>
<p
class=
"bird"
v-if=
" this.newCost.degreeOfDifficulty"
>
难度系数:
{{
this
.
newCost
.
degreeOfDifficulty
.
calculation
}}
</p>
</div>
</div>
...
@@ -786,6 +787,7 @@
...
@@ -786,6 +787,7 @@
<
script
>
<
script
>
// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
// 例如:import 《组件名称》 from '《组件路径》';
// 例如:import 《组件名称》 from '《组件路径》';
import
$
from
'jquery'
export
default
{
export
default
{
name
:
'reportAssess'
,
name
:
'reportAssess'
,
// import引入的组件需要注入到对象中才能使用
// import引入的组件需要注入到对象中才能使用
...
@@ -889,13 +891,55 @@ export default {
...
@@ -889,13 +891,55 @@ export default {
},
},
// 方法集合
// 方法集合
methods
:
{
methods
:
{
// 导出wps
downloadWps
()
{
let
gong
=
'0'
;
if
(
this
.
newCost
.
workLoad
)
{
gong
=
String
(
this
.
newCost
.
workLoad
.
calculation
)
}
let
val
=
{
'id'
:
this
.
$route
.
query
.
id
,
'danjia'
:
String
(
this
.
sumAmount
),
'gong'
:
gong
,
'ewai'
:
this
.
isAgree
===
true
?
String
(
this
.
newCost
.
apply
.
calculation
)
:
'0'
,
'yusuan'
:
String
(
this
.
sumAmount1
),
'agree'
:
this
.
isAgree
===
true
?
'1'
:
'0'
}
this
.
$server
.
getEvaDownload
(
val
).
then
(
res
=>
{
console
.
log
(
res
)
if
(
res
.
status
===
200
)
{
if
(
res
.
data
!==
''
)
{
let
name
=
this
.
type
===
2
?
'适配'
:
'改造'
+
'报告'
;
name
=
this
.
sysName
+
'系统'
+
name
let
x
=
new
XMLHttpRequest
();
x
.
open
(
'GET'
,
res
.
data
,
true
);
x
.
responseType
=
'blob'
;
x
.
onload
=
(
e
)
=>
{
console
.
log
(
e
)
let
url
=
window
.
URL
.
createObjectURL
(
x
.
response
)
let
a
=
document
.
createElement
(
'a'
);
a
.
href
=
url
a
.
download
=
name
a
.
click
()
}
x
.
send
();
}
else
{
this
.
$message
.
error
(
'未能生成wps文件,请联系管理员!'
)
}
}
else
{
this
.
$message
.
error
(
'未能生成wps文件,请联系管理员!'
)
}
})
},
// 转pdf
jump
()
{
jump
()
{
const
{
href
}
=
this
.
$router
.
resolve
({
const
{
href
}
=
this
.
$router
.
resolve
({
path
:
'otherPdf'
,
path
:
'otherPdf'
,
query
:
{
query
:
{
username
:
this
.
$route
.
query
.
username
,
username
:
this
.
$route
.
query
.
username
,
id
:
this
.
$route
.
query
.
id
,
id
:
this
.
$route
.
query
.
id
,
popp
:
this
.
popp
.
basic
popp
:
this
.
popp
.
basic
,
agree
:
this
.
isAgree
}
}
});
});
window
.
open
(
href
,
'_blank'
);
window
.
open
(
href
,
'_blank'
);
...
@@ -1005,7 +1049,7 @@ export default {
...
@@ -1005,7 +1049,7 @@ export default {
// this.type === 1 ? this.type = '改造' : this.type = '适配'
// this.type === 1 ? this.type = '改造' : this.type = '适配'
this
.
framework
=
res
.
data
.
framework
this
.
framework
=
res
.
data
.
framework
this
.
language
=
res
.
data
.
language
this
.
language
=
res
.
data
.
language
this
.
budget
=
res
.
data
.
budget
this
.
budget
=
res
.
data
.
budget
// firstTable
// firstTable
...
@@ -1396,9 +1440,13 @@ export default {
...
@@ -1396,9 +1440,13 @@ export default {
background
:
#1c45a4
;
background
:
#1c45a4
;
}
}
.lineTop
>
span
:first-child
{
.lineTop
>
span
:first-child
{
right
:
290
px
;
right
:
435
px
;
}
}
.lineTop
>
span
:nth-child
(
2
)
{
.lineTop
>
span
:nth-child
(
2
)
{
cursor
:
pointer
;
right
:
290px
}
.lineTop
>
span
:nth-child
(
3
)
{
cursor
:
pointer
;
cursor
:
pointer
;
right
:
145px
right
:
145px
}
}
...
...
src/components/sidebar/sidebar.vue
浏览文件 @
1d300a9f
...
@@ -7,6 +7,19 @@
...
@@ -7,6 +7,19 @@
<span
class=
"line"
></span>
<span
class=
"line"
></span>
</p>
</p>
</div>
</div>
<div
v-if=
"this.$store.getters.getUserData.authorityCode.indexOf('0001700') !== -1"
>
<p
class=
"menu"
>
<span
class=
"font"
>
评测报告管理
</span>
<span
class=
"line"
></span>
</p>
</div>
<div
v-if=
"this.$store.getters.getUserData.authorityCode.indexOf('0002000') !== -1"
>
<p
class=
"menu"
>
<span
class=
"font"
>
实验仿真环境
</span>
<span
class=
"line"
></span>
</p>
</div>
<div
@
click=
"clickMenu('projectManagement','项目管理')"
v-if=
"this.$store.getters.getUserData.authorityCode.indexOf('000900') !== -1"
>
<div
@
click=
"clickMenu('projectManagement','项目管理')"
v-if=
"this.$store.getters.getUserData.authorityCode.indexOf('000900') !== -1"
>
<p
class=
"menu"
>
<p
class=
"menu"
>
...
@@ -237,6 +250,12 @@ export default {
...
@@ -237,6 +250,12 @@ export default {
{
{
name
:
'课题攻关'
name
:
'课题攻关'
},
},
{
name
:
'评测报告管理'
},
{
name
:
'实验仿真环境'
},
{
{
name
:
'项目管理'
name
:
'项目管理'
},
},
...
...
src/services/axios.js
浏览文件 @
1d300a9f
...
@@ -42,7 +42,19 @@ axios.interceptors.response.use(function (response) {
...
@@ -42,7 +42,19 @@ axios.interceptors.response.use(function (response) {
}
}
},
function
(
error
)
{
},
function
(
error
)
{
// 预处理响应错误(error)
// 预处理响应错误(error)
// alert(error);
console
.
log
(
error
.
request
.
status
);
if
(
error
.
request
.
status
===
403
)
{
v
.
$message
.
error
(
'您没有访问权限!'
);
setTimeout
(
function
()
{
router
.
push
({
name
:
'login'
})
},
500
)
}
else
if
(
error
.
request
.
status
===
400
)
{
v
.
$message
.
error
(
'登录已超时,请重新登陆!'
);
setTimeout
(
function
()
{
router
.
push
({
name
:
'login'
})
},
500
)
}
// console.log(error.splice(error.length - 4,error.length - 1))
return
Promise
.
reject
(
error
);
return
Promise
.
reject
(
error
);
});
});
...
...
src/services/server.js
浏览文件 @
1d300a9f
...
@@ -400,6 +400,12 @@ const server = {
...
@@ -400,6 +400,12 @@ const server = {
return
axios
(
assessma
+
'/evaluation/in/excel/'
+
id
,{
return
axios
(
assessma
+
'/evaluation/in/excel/'
+
id
,{
method
:
'get'
method
:
'get'
})
})
},
getEvaDownload
(
data
){
return
axios
(
assessma
+
'/evaluation/downloadWps'
,{
method
:
'post'
,
data
:
data
})
}
}
}
}
export
default
server
;
export
default
server
;
src/tools/htmlToPdf.js
浏览文件 @
1d300a9f
// 导出页面为PDF格式
// 导出页面为PDF格式
import
Vue
from
'vue'
let
v
=
new
Vue
();
import
html2Canvas
from
'html2canvas'
import
html2Canvas
from
'html2canvas'
import
JsPDF
from
'jspdf'
import
JsPDF
from
'jspdf'
export
default
{
import
{
Message
,
Loading
}
from
'element-ui'
let
loading
;
export
default
{
install
(
Vue
,
options
)
{
install
(
Vue
,
options
)
{
Vue
.
prototype
.
getPdf
=
function
()
{
Vue
.
prototype
.
getPdf
=
function
()
{
loading
=
Loading
.
service
({
lock
:
true
,
text
:
'正在下载pdf...'
,
background
:
'rgba(0,0,0,.5)'
});
let
title
=
this
.
htmlTitle
let
title
=
this
.
htmlTitle
v
.
$message
.
info
(
'正在生成pdf文件!请稍等'
)
html2Canvas
(
document
.
querySelector
(
'#pdfDom'
),
{
html2Canvas
(
document
.
querySelector
(
'#pdfDom'
),
{
allowTaint
:
true
allowTaint
:
true
}).
then
(
function
(
canvas
)
{
}).
then
(
function
(
canvas
)
{
let
contentWidth
=
canvas
.
width
console
.
log
(
canvas
)
let
contentHeight
=
canvas
.
height
let
contentWidth
=
canvas
.
width
;
let
contentHeight
=
canvas
.
height
;
if
(
contentWidth
===
''
||
contentWidth
===
undefined
||
contentHeight
===
''
||
contentHeight
===
undefined
)
{
loading
.
close
();
Message
.
error
(
'转换pdf失败,请稍后再试!'
)
}
let
pageHeight
=
contentWidth
/
595
*
842
let
pageHeight
=
contentWidth
/
595
*
842
let
leftHeight
=
contentHeight
let
leftHeight
=
contentHeight
let
position
=
0
let
position
=
0
...
@@ -32,6 +43,7 @@ export default {
...
@@ -32,6 +43,7 @@ export default {
}
}
}
}
}
}
loading
.
close
();
PDF
.
save
(
title
+
'.pdf'
)
PDF
.
save
(
title
+
'.pdf'
)
})
})
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论