提交 1d300a9f authored 作者: thy's avatar thy

Merge branch 'ningbo' into 'thy'

# Conflicts: # src/services/server.js
......@@ -10,6 +10,7 @@ const IP = 'http://120.55.57.35'; // 刘杰
// 请求目标服务器域名配置
const DOMAIN_NAME = {
URL_CNODEJS: IP + ':12345', // 网关 服务端口
assessma: IP + ':8078', // 网关 服务端口
};
export default DOMAIN_NAME;
......@@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title>XXX工作台</title>
<title>工作台</title>
</head>
<body>
<noscript>
......
......@@ -119,7 +119,7 @@ export default {
item.createDate = item.createDate === '' ? '暂无' : this.time(item.createDate);
}
}).catch(err => {
console.log(err);
console.log(err.message);
})
},
// 搜索栏
......
......@@ -2,17 +2,17 @@
<div class="headerAll" v-if=" $route.name == 'assessmentReport'?false:$route.name == 'reportAssess'?false:true">
<div class="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 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">当前时间:&nbsp;&nbsp;{{this.time}}</span>
</span>
<span class="right">
<span class="tohome">
<img src="./img/toHome.png">
<span class="font">综合展现</span>
</span>
<!-- <span class="tohome">-->
<!-- <img src="./img/toHome.png">-->
<!-- <span class="font">综合展现</span>-->
<!-- </span>-->
<span class="user" v-if="this.$store.getters.getUserData.name !== undefined">
<span class="admin">
<img src="./img/admin.png">
......
......@@ -42,10 +42,14 @@
<img src="./img/PG.png">
<span>评估报告管理</span>
</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">
<span>评测报告管理</span>
</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">
<img src="./img/WD.png">
<span>我的项目</span>
......@@ -97,9 +101,12 @@ export default {
},
mounted(){
if ($('.menu')[0].innerText !== '') {
this.init(1);
this.init(2);
this.init(3);
}
},
methods: {
// 页面布局
......@@ -172,4 +179,7 @@ export default {
justify-content: space-between;
margin-bottom: 88px;
}
.firstHome .bottom{
margin-bottom: 0px;
}
</style>
<template>
<div class="otherPdf">
<span class="toPdf" @click="getPdf('pdfDom')">下载pdf</span>
<span class="toPdf" @click="download">下载pdf</span>
<div id="pdfDom">
<div class="pageOther">
<p class="other">附件2</p>
<p class="title">{{title}}</p>
<p class="title">{{systemName}}</p>
<p class="title">{{reportName}}</p>
<div>
<table border="1" cellspacing="0" style="width: 100%">
<table border="1" cellspacing="0" style="width: 100%;margin-top: 90px;">
<tr>
<td style="width: 12px; text-align: center;padding: 0;">序号</td>
<td style="width: 80px; text-align: center;padding: 0;">概要信息</td>
......@@ -27,6 +28,7 @@
</div>
<div class="content">
<div class="page">
<p class="other">附件3</p>
<p class="title">{{title}}</p>
<p class="title">{{systemName}}</p>
<p class="title">{{reportName}}</p>
......@@ -42,48 +44,47 @@
<div class="page">
<p class="list">目录</p>
<div class="listContent">
<p class="child">目录....................................................I</p>
<p class="child">1. 评估报告声明.........................................3</p>
<p class="child">1.1. 报告组成........................................3</p>
<p class="child">1.2. 报告作用........................................4</p>
<p class="child">1.3. 其他注意事项....................................4</p>
<p class="child">2. 评估标准和方法.......................................6</p>
<p class="child">2.1. 参照标准........................................6</p>
<p class="child">2.1.1. “912工程”相关政策法规....................6</p>
<p class="child">2.1.2. “912工程”相关国家标准与规范..............6</p>
<p class="child">2.1.3. “L77软件工程”国家分类标准................6</p>
<p class="child">2.1.4. 其他编制依据...............................6</p>
<p class="child">2.2. 评估流程与方法.................................11</p>
<p class="child">2.2.1. 基本评估流程...............................11</p>
<p class="child">2.2.2. 结合国家标准L77类目下的度量说明............12</p>
<p class="child">2.2.3. 递归的精度与误差说明.......................17</p>
<p class="child">3. 原应用系统评估......................................19</p>
<p class="child">3.1. 原应用系统概要.................................19</p>
<p class="child">3.1.1. 基本信息...................................19</p>
<p class="child">3.1.2. 原系统代码规模.............................{{pageList[0]}}</p>
<p class="child">3.2. 关键技术依赖...................................{{pageList[0]}}</p>
<p class="child">3.2.1. 可优化的项.................................{{pageList[1]}}</p>
<p class="child">3.2.2. 必须替换的项...............................{{pageList[2]}}</p>
<p class="child">3.2.3. 需要验证修改的项...........................{{pageList[3]}}</p>
<p class="child">目录<span>I</span></p>
<p class="child">1. 评估报告声明<span>3</span></p>
<p class="child" style="margin-left: 10px;">1.1. 报告组成<span>3</span></p>
<p class="child" style="margin-left: 10px;">1.2. 报告作用<span>4</span></p>
<p class="child" style="margin-left: 10px;">1.3. 其他注意事项<span>4</span></p>
<p class="child">2. 原应用系统评估<span>6</span></p>
<p class="child" style="margin-left: 10px;">2.1. 原应用系统概要<span>6</span></p>
<p class="child" style="margin-left: 20px;">2.1.1. 基本信息<span>6</span></p>
<p class="child" style="margin-left: 20px;">2.1.2. 原系统代码规模<span>{{pageList[0]}}</span></p>
<p class="child" style="margin-left: 10px;">2.2. 关键技术依赖<span>{{pageList[0]}}</span></p>
<p class="child" style="margin-left: 20px;">2.2.1. 可优化的项<span>{{pageList[1]}}</span></p>
<p class="child" style="margin-left: 20px;">2.2.2. 必须替换的项<span>{{pageList[2]}}</span></p>
<p class="child" style="margin-left: 20px;">2.2.3. 需要验证修改的项<span>{{pageList[3]}}</span></p>
<p class="child" style="margin-left: 10px;">2.3. 难度系数和综合系数修正<span>{{pageList[4]}}</span></p>
<p class="child" style="margin-left: 10px;">2.4. 人工月估算<span>{{pageList[4]}}</span></p>
<p class="child" style="margin-left: 10px;">2.5. 额外申请<span>{{pageList[4]}}</span></p>
<p class="child" style="margin-left: 10px;">2.6. 预算建议<span>{{pageList[5]}}</span></p>
<p class="child">3. 评估标准和方法<span>{{pageList[6]}}</span></p>
<p class="child" style="margin-left: 10px;">3.1. 参照标准<span>{{pageList[6]}}</span></p>
<p class="child" style="margin-left: 20px;">3.1.1. “912工程”相关政策法规<span>{{pageList[6]}}</span></p>
<p class="child" style="margin-left: 20px;">3.1.2. “912工程”相关国家标准与规范<span>{{pageList[7]}}</span></p>
<p class="child" style="margin-left: 20px;">3.1.3. “L77软件工程”国家分类标准<span>{{pageList[9]}}</span></p>
<p class="child" style="margin-left: 20px;">3.1.4. 其他编制依据<span>{{pageList[10]}}</span></p>
</div>
<p class="pageIndex">1</p>
</div>
<div class="page">
<div class="listContent">
<p class="child">3.3. 难度系数和综合系数修正.........................{{pageList[4]}}</p>
<p class="child">3.4. 人工月估算.....................................{{pageList[4]}}</p>
<p class="child">3.5. 额外申请.......................................{{pageList[4]}}</p>
<p class="child">3.6. 预算建议.......................................{{pageList[5]}}</p>
<p class="child">4. 评估建议............................................{{pageList[6]}}</p>
<p class="child">4.1. 适配/改造路线选择..............................{{pageList[6]}}</p>
<p class="child">4.2. 关键工作与方法.................................{{pageList[6]}}</p>
<p class="child">4.2.1. 开发框架解决方法...........................{{pageList[6]}}</p>
<p class="child">4.2.2. 浏览器的适配兼容性改造解决方法.............{{pageList[7]}}</p>
<p class="child">4.2.3. 浏览器功能组件的替换和适配解决方法.........{{pageList[7]}}</p>
<p class="child">4.2.4. B/S结构下的重构............................{{pageList[8]}}</p>
<p class="child">4.2.5. C/S结构下的重构............................{{pageList[8]}}</p>
<p class="child">4.2.6. 部署和迁移策略.............................{{pageList[8]}}</p>
<p class="child">5. 附件...............................................{{pageList[11]}}</p>
<p class="child" style="margin-left: 10px;">3.2. 评估流程与方法<span>{{pageList[11]}}</span></p>
<p class="child" style="margin-left: 20px;">3.2.1. 基本评估流程<span>{{pageList[11]}}</span></p>
<p class="child" style="margin-left: 20px;">3.2.2. 结合国家标准L77类目下的度量说明<span>{{pageList[12]}}</span></p>
<p class="child" style="margin-left: 20px;">3.2.3. 递归的精度与误差说明<span>{{pageList[17]}}</span></p>
<p class="child">4. 评估建议<span>{{pageList[19]}}</span></p>
<p class="child" style="margin-left: 10px;">4.1. 适配/改造路线选择<span>{{pageList[19]}}</span></p>
<p class="child" style="margin-left: 10px;">4.2. 关键工作与方法<span>{{pageList[19]}}</span></p>
<p class="child" style="margin-left: 20px;">4.2.1. 开发框架解决方法<span>{{pageList[19]}}</span></p>
<p class="child" style="margin-left: 20px;">4.2.2. 浏览器的适配兼容性改造解决方法<span>{{pageList[20]}}</span></p>
<p class="child" style="margin-left: 20px;">4.2.3. 浏览器功能组件的替换和适配解决方法<span>{{pageList[20]}}</span></p>
<p class="child" style="margin-left: 20px;">4.2.4. B/S结构下的重构<span>{{pageList[21]}}</span></p>
<p class="child" style="margin-left: 20px;">4.2.5. C/S结构下的重构<span>{{pageList[21]}}</span></p>
<p class="child" style="margin-left: 20px;">4.2.6. 部署和迁移策略<span>{{pageList[21]}}</span></p>
</div>
<p class="pageIndex">2</p>
</div>
......@@ -104,104 +105,13 @@
<p class="contentList" v-for="item of reportOther2">{{item}}</p>
<p class="pageIndex">5</p>
</div>
<!-- 2-->
<div class="page">
<p class="title1">2.&nbsp;评估标准和方法</p>
<p class="title2">2.1.&nbsp;参照标准</p>
<p class="title3">2.1.1.&nbsp;“912工程”相关政策法规</p>
<p class="contentList" style="letter-spacing:1px; text-indent:0em;" v-for="item of regulations">{{item}}</p>
<p class="title1">2.&nbsp;原应用系统评估</p>
<p class="title2">2.1.&nbsp;原应用系统概要</p>
<p class="title3">2.1.1.&nbsp;基本信息</p>
<p class="pageIndex">6</p>
</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.&nbsp;“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.&nbsp;“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.&nbsp;其他编制依据</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.&nbsp;评估流程与方法</p>
<p class="title3">2.2.1.&nbsp;基本评估流程</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.&nbsp;结合国家标准L77类目下的度量说明</p>
<p class="contentList" v-for="item of metricDescription">{{item}}</p>
<p class="title4">2.2.2.1.&nbsp;规模测算</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.&nbsp;工作量测算</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.&nbsp;人工月单价测算</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.&nbsp;递归的精度与误差说明</p>
<p class="contentList" v-for="item of recursivePrecision">{{item}}</p>
<p class="title4">2.2.3.1.&nbsp;整体类比法</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.&nbsp;开发时间固定百分比法</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.&nbsp;原应用系统评估</p>
<p class="title2">3.1.&nbsp;原应用系统概要</p>
<p class="title3">3.1.1.&nbsp;基本信息</p>
<p class="pageIndex">19</p>
</div>
<div v-for="(item,itemIndex) of messageList">
<div class="pageOther" v-for="(arr,index) of item.val">
<p class="contentList" style="text-indent:0em;" v-if="index ===0">{{item.name}}</p>
......@@ -210,17 +120,17 @@
<tr v-for="acc of arr">
<td style="width: 10%">{{acc.index}}</td>
<td>{{acc.name}}</td>
<td style="width: 150px;">{{acc.value}}</td>
<td style="width: 200px;">{{acc.value}}</td>
</tr>
</table>
</div>
<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>
</div>
</div>
<div class="page">
<p class="title3">3.1.2.&nbsp;原系统代码规模</p>
<p class="title3">2.1.2.&nbsp;原系统代码规模</p>
<div>
<table border="1" cellspacing="0" style="margin: 0px;width: 100%;">
<tr>
......@@ -245,14 +155,14 @@
</tr>
</table>
</div>
<p class="title2">3.2.&nbsp;关键技术依赖</p>
<p class="title2">2.2.&nbsp;关键技术依赖</p>
<p class="contentList">{{technologyDependence}}</p>
<p class="pageIndex">{{pageList[0]}}</p>
</div>
<div v-for="(item,itemInd) of optimized">
<div v-for="(arr,index) of item.val">
<div class="pageOther" v-if="arr.length !== 0">
<p class="title3" v-if="itemInd === 0 && index === 0">3.2.1.&nbsp;可优化的项</p>
<p class="title3" v-if="itemInd === 0 && index === 0">2.2.1.&nbsp;可优化的项</p>
<p v-if="index === 0" style="display: flex;justify-content: space-between">
<span>关键技术:{{item.name}}</span>
<span>替换策略:
......@@ -276,20 +186,20 @@
</tr>
</table>
<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>
</div>
</div>
</div>
<div class="page" v-if="optimized.length === 0">
<p class="title3">3.2.1.&nbsp;可优化的项</p>
<p class="title3">2.2.1.&nbsp;可优化的项</p>
<p>暂无</p>
<p class="pageIndex">{{pageList[1]}}</p>
</div>
<div v-for="(item,itemInd) of replaced">
<div v-for="(arr,index) of item.val">
<div class="pageOther" v-if="arr.length !== 0">
<p class="title3" v-if="itemInd === 0 && index === 0">3.2.2.&nbsp;必须替换的项</p>
<p class="title3" v-if="itemInd === 0 && index === 0">2.2.2.&nbsp;必须替换的项</p>
<p v-if="index === 0" style="display: flex;justify-content: space-between">
<span>关键技术:{{item.name}}</span>
<span>替换策略:
......@@ -313,21 +223,21 @@
</tr>
</table>
<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">{{20 + item.page + page1 + 1}}</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">{{7 + item.page + page1 + 1}}</span>
</p>
</div>
</div>
</div>
<div class="page" v-if="replaced.length === 0">
<p class="title3">3.2.2.&nbsp;必须替换的项</p>
<p class="title3">2.2.2.&nbsp;必须替换的项</p>
<p>暂无</p>
<p class="pageIndex">{{pageList[2]}}</p>
</div>
<div v-for="(item,itemInd) of verification">
<div v-for="(arr,index) of item.val">
<div class="pageOther" v-if="arr.length !== 0">
<p class="title3" v-if="itemInd === 0 && index === 0">3.2.3.&nbsp;需要验证修改的项</p>
<p class="title3" v-if="itemInd === 0 && index === 0">2.2.3.&nbsp;需要验证修改的项</p>
<p v-if="index === 0" style="display: flex;justify-content: space-between">
<span>关键技术:{{item.name}}</span>
<span>替换策略:
......@@ -351,21 +261,21 @@
</tr>
</table>
<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">{{20 + 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">{{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 + page2 + 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">{{7 + 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 + 2}}</span>
</p>
</div>
</div>
</div>
<div class="page" v-if="verification.length === 0">
<p class="title3">3.2.3.&nbsp;需要验证修改的项</p>
<p class="title3">2.2.3.&nbsp;需要验证修改的项</p>
<p>暂无</p>
<p class="pageIndex">{{pageList[3]}}</p>
</div>
<div class="page">
<p class="title2">3.3.&nbsp;难度系数和综合系数修正</p>
<p class="title2">2.3.&nbsp;难度系数和综合系数修正</p>
<div>
<table border="1" cellspacing="0" style="margin-top: 10px;width: 100%">
<tr>
......@@ -393,7 +303,7 @@
</tr>
</table>
</div>
<p class="title2">3.4.&nbsp;人工月估算</p>
<p class="title2">2.4.&nbsp;人工月估算</p>
<div>
<table border="1" cellspacing="0" style="margin-top: 10px;width: 100%">
<tr>
......@@ -424,7 +334,7 @@
</tr>
</table>
</div>
<p class="title2">3.5.&nbsp;额外申请</p>
<p class="title2">2.5.&nbsp;额外申请</p>
<div>
<table border="1" cellspacing="0" style="margin-top: 10px;width: 100%;">
<tr>
......@@ -440,7 +350,7 @@
<p class="pageIndex">{{pageList[4]}}</p>
</div>
<div class="page">
<p class="title2">3.6.&nbsp;预算建议</p>
<p class="title2">2.6.&nbsp;预算建议</p>
<p class="contentList">
由于不同地区、不同行业甚至不同功能项的软件开发人工月单价存在浮动,请在表格内调节该参数。调整后预算费用: {{newCost.cost.now}} 万元,
难度系数:<span v-if="degreeOfDifficulty">{{degreeOfDifficulty}}</span>
......@@ -450,7 +360,7 @@
<tr>
<td></td>
<td>默认值</td>
<td>操作</td>
<td>人工审核</td>
<td>调整后</td>
</tr>
<tr>
......@@ -481,6 +391,97 @@
</div>
<p class="pageIndex">{{pageList[5]}}</p>
</div>
<!-- 3-->
<div class="page">
<p class="title1">3.&nbsp;评估标准和方法</p>
<p class="title2">3.1.&nbsp;参照标准</p>
<p class="title3">3.1.1.&nbsp;“912工程”相关政策法规</p>
<p class="contentList" style="letter-spacing:1px; text-indent:0em;" v-for="item of regulations">{{item}}</p>
<p class="pageIndex">{{pageList[6]}}</p>
</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.&nbsp;“912工程”相关国家标准与规范</p>
<p class="contentList" style="letter-spacing:1px;text-indent:0em;" v-for="item of nationalNorms">{{item}}</p>
<p class="pageIndex">{{pageList[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">{{pageList[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">3.1.3.&nbsp;“L77软件工程”国家分类标准</p>
<p class="contentList" style="letter-spacing:1px;text-indent:0em;" v-for="item of classificationCriteria">{{item}}</p>
<p class="pageIndex">{{pageList[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">3.1.4.&nbsp;其他编制依据</p>
<p class="contentList" style="letter-spacing:1px;text-indent:0em;" v-for="item of otherEstablishments">{{item}}</p>
<p class="pageIndex">{{pageList[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">3.2.&nbsp;评估流程与方法</p>
<p class="title3">3.2.1.&nbsp;基本评估流程</p>
<p>
<img src="./img/1.png" style="width: 100%">
</p>
<p class="contentList" v-for="item of evaluationProcess">{{item}}</p>
<p class="pageIndex">{{pageList[11]}}</p>
</div>
<div class="page">
<p class="contentList" v-for="item of evaluationProcess2">{{item}}</p>
<p class="title3">3.2.2.&nbsp;结合国家标准L77类目下的度量说明</p>
<p class="contentList" v-for="item of metricDescription">{{item}}</p>
<p class="title4">3.2.2.1.&nbsp;规模测算</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.&nbsp;工作量测算</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.&nbsp;人工月单价测算</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.&nbsp;递归的精度与误差说明</p>
<p class="contentList" v-for="item of recursivePrecision">{{item}}</p>
<p class="title4">3.2.3.1.&nbsp;整体类比法</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.&nbsp;开发时间固定百分比法</p>
<p class="contentList" v-for="item of fixedDevelopment">{{item}}</p>
<p class="pageIndex">{{pageList[18]}}</p>
</div>
<!-- 4-->
<div class="page">
<p class="title1">4.&nbsp;评估建议</p>
......@@ -490,7 +491,7 @@
<p class="title3">4.2.1.&nbsp;开发框架解决方法</p>
<p class="contentList">J2EE和类似跨平台的开发框架,可通过适配和代码改造,完全移植到国产化环境下。</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 class="page">
<p class="contentList" style="text-indent:0em;">赖Window组件和库的应用系统,需要换框架重构。</p>
......@@ -498,7 +499,7 @@
<p class="contentList" v-for="item of adaptationCompatible">{{item}}</p>
<p class="title3">4.2.3.&nbsp;浏览器功能组件的替换和适配解决方法</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 class="page">
<p class="title3">4.2.4.&nbsp;B/S结构下的重构</p>
......@@ -508,7 +509,7 @@
<p class="contentList">如改造后允许以B/S结构部署,则改造工作量和不可预见问题将大为减少。</p>
<p class="title3">4.2.6.&nbsp;部署和迁移策略</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 class="page">
<p class="contentList" v-for="item of deploymentAndMigration2" style="text-indent:0em;">{{item}}</p>
......@@ -516,21 +517,15 @@
<img src="./img/3.png" style="width: 50%">
</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 class="page">
<p class="contentList" v-for="item of deploymentAndMigration4" style="text-indent:0em;">{{item}}</p>
<p class="contentList">最后要监测解决冲突,及时对异常数据进行处理。由于数据库双向可写,需监控监测冲突,并做好对应的日志记录。当出现异常数据,例如要求插入的数据,数据库中已经存在;或者更新数据,发现数据记录并不存在,需根据预定义的规则进行相应的处理。</p>
<p class="pageIndex">{{pageList[10]}}</p>
<p class="pageIndex">{{pageList[23]}}</p>
</div>
<div class="page">
<p class="title1">5.&nbsp;附件</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>
</template>
......@@ -747,7 +742,7 @@ export default {
'评估工具会自动使用该方法。首先,扫描代码并分析开发工作量测算出理论值A1。不可预见量、难度系数、综合系数叠加运算出理论值A2,A2的加权系数为0.6。再按照使用GB/T36964-2018提供的方程法估算出对比值B1,然后使用GB/T36964-2018提供的类比法和类推法来推算并限制对比值B1,形成对比值B2。B2的加权系数为0.4。',
'如A2/B2在±10%内,取A2值;反之取A2、B2的加权平均值。',
'这种方法的精确度取决于输入调研表数据和代码文件的完整性,其结果误差在本次评估中被限定在+10%以内,对预算影响被限定在+4.5%以内。',
'综上,误差控制和误差范围可接受。本评估报告计算的工作量和'
'综上,误差控制和误差范围可接受。本评估报告计算的工作量和推算的预算建议,将作为宁波市安可办的审核依据和预算约束。'
],
routeSelection:[
'B/S应用系统的浏览器前端部分,主要面临编译结果在不同内核下标准兼容的问题,在安可操作系统上主要针对火狐浏览器(52版本)、360安全浏览器上的兼容性适配,主要工作集中在前端代码的筛查和轻度改造。',
......@@ -827,7 +822,7 @@ export default {
},
other:{
normal: 0,
operating: '同意',
operating: '/',
now: 0
},
cost:{
......@@ -858,25 +853,32 @@ export default {
mounted: function () {
},
methods:{
download() {
window.scrollTo(0,0);
setTimeout(()=>{
this.getPdf('pdfDom');
},500)
},
// 获取页码
getPage() {
for (let i = 1; i <= 12; i++) {
for (let i = 1; i <= 25; i++) {
if (i === 1 || i === 2) {
this.pageList.push(i + this.page1 + 19)
this.pageList.push(i + this.page1 + 6)
} 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) {
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) {
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) {
this.pageList.push(i + this.page1 + 19 + this.page2 + this.page3)
this.pageList.push(i + this.page1 + 6 + this.page2 + this.page3)
}
} 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 () {
......@@ -899,11 +901,14 @@ export default {
}
this.$server.getTechnology(val).then(res => {
// console.log('数据请求结果', res.data)
console.log(this.$route.query.agree)
if (res.data !== 500) {
this.title = res.data.localContact;
this.systemName = res.data.sysName;
this.reportName =res.data.type === 2 ? '适配' : '改造' + '工作评估报告';
this.reportName = '在国产化安全自主可控环境下的' + 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.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;
......@@ -939,13 +944,14 @@ export default {
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.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.degreeOfDifficulty = res.data.manufacturingCost.degreeOfDifficulty.calculation;
this.tableTitle[0].val = this.title; // 单位名称
this.tableTitle[1].val = this.systemName; // 原系统名称
this.tableTitle[2].val = this.newCost.cost.now + '万元'; // 适配预算
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': '-'; // 语言
console.log(res.data.language)
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[5].val = this.sysScale.codeNum; // 代码行
this.tableTitle[6].val = this.sysScale.fileNum + '/' + this.sysScale.modelNum; // 文件/模块
......@@ -1002,7 +1008,7 @@ export default {
init2() {
this.$server.getExcel(this.$route.query.id).then(res =>{
this.messageAll = res.data;
console.log(this.messageAll);
this.tableTitle[2].val = res.data[0].arrayList[8].value + '万元'; // 适配预算
let array = [];
for (let item of this.messageAll) {
if (item.arrayList.length !== 0) {
......@@ -1013,7 +1019,7 @@ export default {
array.push(val); // 新增名称和对应的空数组
let page = 0; // 当前页为0
for (let a = 0; a < item.arrayList.length; a++) { // 遍历内容
if (a % 20 === 0) { // 二十条为一页
if (a % 15 === 0) { // 15条为一页
array[array.length - 1].val.push([]); // 当到了二十条,在对应的位置添加空数组
if (a !== 0) { // a初始为0时,page不加1
page += 1;
......@@ -1126,6 +1132,11 @@ export default {
box-sizing: border-box;
position: relative;
}
.otherPdf .other{
font-size: 28px;
font-family: "黑体";
line-height: 1.5;
}
.otherPdf .title{
text-align: center;
font-size: 26px;
......@@ -1164,7 +1175,14 @@ export default {
white-space:nowrap;
}
.otherPdf .listContent .child{
text-align: right;
position: relative;
}
.otherPdf .listContent .child span{
display: inline-block;
width: 25px;
position: absolute;
right: 15px;
}
.otherPdf .title1{
font-size: 22px;
......@@ -1198,7 +1216,7 @@ export default {
font-size: 12px;
text-align: center;
position: absolute;
bottom: 25px;
bottom: 35px;
left: 297px;
}
.otherPdf .listContent{
......
......@@ -526,7 +526,7 @@ export default {
console.log(err);
})
} else {
this.errorData();
// this.errorData();
this.$message.error('基本信息项不可为空!');
}
},
......
......@@ -23,7 +23,8 @@
<div class="one">
<div class="oneTitle"> <i></i>概要</div>
<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="goBackprev">关闭</span>
<!-- <div ><span @click="goBackprev">返回</span> -->
......@@ -237,7 +238,7 @@
<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] == '优化'">f修改</span>
<span v-else>-</span>
<!--{{ item1.technology === '国产化依赖(支持)' ?-->
<!--replaceSuggest= '忽略' : item1.technology=== '非国产化依赖(不支持)' ?-->
......@@ -763,8 +764,8 @@
<p class="bird">{{this.newWork.des}}</p>
<p class="otherTitle">3、额外依赖服务申请</p>
<p class="bird">额外依赖服务申请费用 <span></span> {{this.newApply.cost === -1 ? '无' : this.newApply.cost}}</p>
<p class="otherTitle">4、适配难度评估</p>
<p class="bird">{{this.newDifficuty.des}}</p>
<p class="otherTitle" v-if=" this.newCost.degreeOfDifficulty">4、适配难度评估</p>
<p class="bird" v-if=" this.newCost.degreeOfDifficulty">难度系数:{{ this.newCost.degreeOfDifficulty.calculation}}</p>
</div>
......@@ -786,6 +787,7 @@
<script>
// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
// 例如:import 《组件名称》 from '《组件路径》';
import $ from 'jquery'
export default {
name: 'reportAssess',
// import引入的组件需要注入到对象中才能使用
......@@ -889,13 +891,55 @@ export default {
},
// 方法集合
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() {
const {href} = this.$router.resolve({
path: 'otherPdf',
query: {
username: this.$route.query.username,
id: this.$route.query.id,
popp: this.popp.basic
popp: this.popp.basic,
agree: this.isAgree
}
});
window.open(href, '_blank');
......@@ -1396,9 +1440,13 @@ export default {
background: #1c45a4;
}
.lineTop>span:first-child {
right: 290px;
right: 435px;
}
.lineTop>span:nth-child(2) {
cursor: pointer;
right: 290px
}
.lineTop>span:nth-child(3) {
cursor: pointer;
right: 145px
}
......
......@@ -7,6 +7,19 @@
<span class="line"></span>
</p>
</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">
<p class="menu">
......@@ -237,6 +250,12 @@ export default {
{
name: '课题攻关'
},
{
name: '评测报告管理'
},
{
name: '实验仿真环境'
},
{
name: '项目管理'
},
......
......@@ -42,7 +42,19 @@ axios.interceptors.response.use(function (response) {
}
}, function (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);
});
......
......@@ -400,6 +400,12 @@ const server = {
return axios( assessma + '/evaluation/in/excel/' + id,{
method:'get'
})
},
getEvaDownload(data){
return axios( assessma + '/evaluation/downloadWps',{
method:'post',
data: data
})
}
}
export default server;
// 导出页面为PDF格式
import Vue from 'vue'
let v = new Vue();
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'
export default {
import {
Message, Loading
} from 'element-ui'
let loading;
export default{
install (Vue, options) {
Vue.prototype.getPdf = function () {
loading = Loading.service({
lock: true,
text: '正在下载pdf...',
background: 'rgba(0,0,0,.5)'
});
let title = this.htmlTitle
v.$message.info('正在生成pdf文件!请稍等')
html2Canvas(document.querySelector('#pdfDom'), {
allowTaint: true
}).then(function (canvas) {
let contentWidth = canvas.width
let contentHeight = canvas.height
console.log(canvas)
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 leftHeight = contentHeight
let position = 0
......@@ -32,6 +43,7 @@ export default {
}
}
}
loading.close();
PDF.save(title + '.pdf')
})
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论