|
@@ -19,10 +19,11 @@
|
|
<el-menu-item index="1-1"><p @click="ssl(0)">项目报表</p></el-menu-item>
|
|
<el-menu-item index="1-1"><p @click="ssl(0)">项目报表</p></el-menu-item>
|
|
<el-menu-item index="1-2" v-if="permissions.reportTask"><p @click="ssl(1)">项目任务报表</p></el-menu-item>
|
|
<el-menu-item index="1-2" v-if="permissions.reportTask"><p @click="ssl(1)">项目任务报表</p></el-menu-item>
|
|
<el-menu-item index="1-3" v-if="permissions.reportCostOf"><p @click="ssl(2)">项目成本报表</p></el-menu-item>
|
|
<el-menu-item index="1-3" v-if="permissions.reportCostOf"><p @click="ssl(2)">项目成本报表</p></el-menu-item>
|
|
- <el-menu-item index="1-4" v-if="permissions.reportBalance"><p @click="ssl(3)">项目收支平衡表</p></el-menu-item>
|
|
|
|
- <el-menu-item index="1-5" v-if="user.company.packageCustomer == 1 && permissions.reportProfits"><p @click="ssl(4)">客户项目利润表</p></el-menu-item>
|
|
|
|
- <el-menu-item index="1-6" v-if="permissions.reportPhase"><p @click="ssl(5)">项目阶段工时表</p></el-menu-item>
|
|
|
|
- <el-menu-item index="1-7" v-if="permissions.reportOvertime"><p @click="ssl(6)">加班情况统计表</p></el-menu-item>
|
|
|
|
|
|
+ <el-menu-item index="1-4" v-if="permissions.reportCostWarning"><p @click="ssl(7)">工时成本预警表</p></el-menu-item>
|
|
|
|
+ <el-menu-item index="1-5" v-if="permissions.reportBalance"><p @click="ssl(3)">项目收支平衡表</p></el-menu-item>
|
|
|
|
+ <el-menu-item index="1-6" v-if="user.company.packageCustomer == 1 && permissions.reportProfits"><p @click="ssl(4)">客户项目利润表</p></el-menu-item>
|
|
|
|
+ <el-menu-item index="1-7" v-if="permissions.reportPhase"><p @click="ssl(5)">项目阶段工时表</p></el-menu-item>
|
|
|
|
+ <el-menu-item index="1-8" v-if="permissions.reportOvertime"><p @click="ssl(6)">加班情况统计表</p></el-menu-item>
|
|
</el-submenu>
|
|
</el-submenu>
|
|
</el-menu>
|
|
</el-menu>
|
|
</el-col>
|
|
</el-col>
|
|
@@ -158,6 +159,7 @@
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
</el-table>
|
|
</el-table>
|
|
|
|
+
|
|
<!--项目收支平衡表 -->
|
|
<!--项目收支平衡表 -->
|
|
<el-table v-if="ins == 3" :key="ins" border :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
|
|
<el-table v-if="ins == 3" :key="ins" border :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
|
|
<el-table-column prop="projectCode" label="项目编号" width="120"></el-table-column>
|
|
<el-table-column prop="projectCode" label="项目编号" width="120"></el-table-column>
|
|
@@ -308,6 +310,44 @@
|
|
</el-table-column>
|
|
</el-table-column>
|
|
</el-table>
|
|
</el-table>
|
|
</div>
|
|
</div>
|
|
|
|
+
|
|
|
|
+ <!-- 工时成本预警表 -->
|
|
|
|
+ <el-table v-if="ins == 7" :key="ins" border :data="baseCostList" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
|
|
|
|
+ <!-- 当前总预算,已发生工时成本,xxx成本预算,xxx已发生成本,xxx已发生占比, yyy成本预算,yyy已发生成本,yyy已发生占比。 -->
|
|
|
|
+ <el-table-column prop="projectCode" label="项目编号" width="120"></el-table-column>
|
|
|
|
+ <el-table-column prop="projectName" label="项目名称" width="200"></el-table-column>
|
|
|
|
+ <el-table-column prop="baseCurcost" label="当前总预算" width="100" align="right">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ <span>¥{{scope.row.baseCurcost | numberToCurrency}}</span>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <el-table-column prop="feeMan" label="已发生工时成本" width="100" align="right">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ <span :class="scope.row.baseCurcost * 0.9 < scope.row.feeMan ? 'warntext' : ''">¥{{scope.row.feeMan | numberToCurrency}}</span>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <template v-for="item in baseCostColumns">
|
|
|
|
+ <el-table-column :label="item.name + '成本预算'" width="100" align="right">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ <span>¥{{budgetFilter(scope.row.curcostList,item.id) | numberToCurrency}}</span>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <el-table-column :label="item.name + '已发生成本'" width="100" align="right">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ <span :class="percentageFilter(scope.row,item.id) > 90 ? 'warntext' : ''"
|
|
|
|
+ >¥{{AlreadyFilter(scope.row.realcostList,item.id) | numberToCurrency}}</span>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <el-table-column :label="item.name + '已发生占比'" width="100" align="right">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ <span :class="percentageFilter(scope.row,item.id) > 90 ? 'warntext' : ''"
|
|
|
|
+ >{{percentageFilter(scope.row,item.id) == 'NaN' ? '-' : percentageFilter(scope.row,item.id) + '%'}}</span>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ </template>
|
|
|
|
+
|
|
|
|
+ </el-table>
|
|
|
|
+
|
|
<!--工具条-->
|
|
<!--工具条-->
|
|
<el-col :span="24" class="toolbar" v-if="ins != 6">
|
|
<el-col :span="24" class="toolbar" v-if="ins != 6">
|
|
<el-pagination
|
|
<el-pagination
|
|
@@ -473,7 +513,7 @@ export default {
|
|
z : null,
|
|
z : null,
|
|
value: null,
|
|
value: null,
|
|
dialog: false, // 单据查看展示
|
|
dialog: false, // 单据查看展示
|
|
- shuz: ["项目报表","项目任务报表","项目成本报表","项目收支平衡表(利润表)","客户项目利润报表","项目阶段工时表","加班情况统计表"],
|
|
|
|
|
|
+ shuz: ["项目报表","项目任务报表","项目成本报表","项目收支平衡表(利润表)","客户项目利润报表","项目阶段工时表","加班情况统计表","工时成本预警表"],
|
|
ins: 0,
|
|
ins: 0,
|
|
user: JSON.parse(sessionStorage.user),
|
|
user: JSON.parse(sessionStorage.user),
|
|
overTimeList: [], // 项目加班情况统计列表
|
|
overTimeList: [], // 项目加班情况统计列表
|
|
@@ -484,7 +524,9 @@ export default {
|
|
userId: '',
|
|
userId: '',
|
|
userList: [],
|
|
userList: [],
|
|
dialogVisibleDetails: false,
|
|
dialogVisibleDetails: false,
|
|
- detailsList: []
|
|
|
|
|
|
+ detailsList: [],
|
|
|
|
+ baseCostList: [],
|
|
|
|
+ baseCostColumns: []
|
|
};
|
|
};
|
|
},
|
|
},
|
|
computed: {},
|
|
computed: {},
|
|
@@ -631,6 +673,8 @@ export default {
|
|
this.getProjectStages();
|
|
this.getProjectStages();
|
|
} else if (this.ins == 6) {
|
|
} else if (this.ins == 6) {
|
|
this.overTime()
|
|
this.overTime()
|
|
|
|
+ } else if (this.ins == 7) {
|
|
|
|
+ this.getBaseCost()
|
|
}
|
|
}
|
|
},
|
|
},
|
|
exportExcel() {
|
|
exportExcel() {
|
|
@@ -661,6 +705,9 @@ export default {
|
|
sl.startDate = this.rangeDatas[0]
|
|
sl.startDate = this.rangeDatas[0]
|
|
sl.endDate = this.rangeDatas[1]
|
|
sl.endDate = this.rangeDatas[1]
|
|
sl.projectId = this.proJuctId
|
|
sl.projectId = this.proJuctId
|
|
|
|
+ } else if (this.ins == 7) {
|
|
|
|
+ fName = "工时成本预警表.xls";
|
|
|
|
+ url += "/exportBaseCostAndRealCost";
|
|
}
|
|
}
|
|
this.http.post(url, sl,
|
|
this.http.post(url, sl,
|
|
res => {
|
|
res => {
|
|
@@ -854,6 +901,59 @@ export default {
|
|
});
|
|
});
|
|
});
|
|
});
|
|
},
|
|
},
|
|
|
|
+ getBaseCost(){
|
|
|
|
+ this.listLoading = true
|
|
|
|
+ this.http.post('/project/getBaseCostAndRealCost',{
|
|
|
|
+ pageIndex: this.page,
|
|
|
|
+ pageSize: this.size
|
|
|
|
+ },res => {
|
|
|
|
+ if(res.code == 'ok'){
|
|
|
|
+ this.baseCostList = res.data.records
|
|
|
|
+ this.baseCostColumns = res.data.columns
|
|
|
|
+ this.total = res.data.total
|
|
|
|
+ this.listLoading = false
|
|
|
|
+ }else {
|
|
|
|
+ this.listLoading = false
|
|
|
|
+ this.$message({
|
|
|
|
+ message: res.msg,
|
|
|
|
+ type: 'error'
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ },err => {
|
|
|
|
+ this.listLoading = false
|
|
|
|
+ this.$message({
|
|
|
|
+ message: err,
|
|
|
|
+ type: 'error'
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ budgetFilter(emList,eId){
|
|
|
|
+ let emItem = emList.filter((em)=>{
|
|
|
|
+ return em.baseId == eId
|
|
|
|
+ })
|
|
|
|
+ if(emItem.length == 0){
|
|
|
|
+ return 0
|
|
|
|
+ }else{
|
|
|
|
+ return emItem[0].baseAmount
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ AlreadyFilter(emList,eId){
|
|
|
|
+ let emItem = emList.filter((em)=>{
|
|
|
|
+ return em.basecostId == eId
|
|
|
|
+ })
|
|
|
|
+ if(emItem.length == 0){
|
|
|
|
+ return 0
|
|
|
|
+ }else{
|
|
|
|
+ return emItem[0].cost
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ percentageFilter(row,eid){
|
|
|
|
+ let budget = this.budgetFilter(row.curcostList,eid)
|
|
|
|
+ let already = this.AlreadyFilter(row.realcostList,eid)
|
|
|
|
+ let ret = (already / budget)*100
|
|
|
|
+ return ret.toFixed(0)
|
|
|
|
+ },
|
|
|
|
|
|
|
|
|
|
getProjectList() {
|
|
getProjectList() {
|
|
@@ -1124,5 +1224,8 @@ export default {
|
|
display: inline-block;
|
|
display: inline-block;
|
|
margin-right: 20px;
|
|
margin-right: 20px;
|
|
}
|
|
}
|
|
|
|
+.warntext{
|
|
|
|
+ color:red;
|
|
|
|
+}
|
|
|
|
|
|
</style>
|
|
</style>
|