Commit a5b80ac0 authored by tianhongyang's avatar tianhongyang

merge

parent 61c79e19
......@@ -173,13 +173,12 @@ export function projectVolume(data) {
}
//措施费-获取实际成本月份列表
export function actualMonths(params) {
return request({
url: '/cb/cost/measures/actual/months',
method: 'GET',
params
});
}
export const getActualMonthsApi = (params = {}) => request({
url: '/cb/cost/measures/actual/months',
method: 'get',
params
});
// 工料汇总
......
......@@ -69,17 +69,15 @@ export default {
watch: {
projectDetailInfo: {
handler(newValue) {
this.comProjectDetailInfo = newValue ? newValue : {};
this.comProjectDetailInfo = newValue ? cloneDeep(newValue) : {};
this.init(this.comProjectDetailInfo);
},
deep: true,
immediate: true
},
projectId: {
handler(newValue) {
this.comProjectId = newValue;
},
immediate: true
}
}
},
components: {
......@@ -94,8 +92,8 @@ export default {
nodeName: "name",
nodeValue: "name",
},
comProjectDetailInfo: {},
comProjectId: "",
comProjectDetailInfo: this.projectDetailInfo ? cloneDeep(this.projectDetailInfo) : {},
comProjectId: this.projectId,
menuTreeList: [],
// 加载数据列表
tableLoading: false,
......@@ -122,7 +120,7 @@ export default {
},
//可访问data属性
created() {
this.init(this.comProjectDetailInfo);
},
//计算集
computed: {
......
......@@ -2,7 +2,8 @@
<div class="feed-summary-container">
<div class="feed-summary-inner">
<div class="left-side-menu">
<project-side-menu ref="profitloss" :menuTree="menuTreeList" :menuOptions="menuOptions" :unique-opened="false" :default-active="defaultActive" @select="select">
<project-side-menu ref="profitloss" :menuTree="menuTreeList" :menuOptions="menuOptions" :unique-opened="false" :default-active="defaultActive"
@select="select">
<template slot="措施费-1">
<img src="@/assets/images/projectCostLedger/icon_cost_detail_4.svg" alt="">
<div class="project-sub-menu-title-text">措施费</div>
......@@ -12,34 +13,22 @@
<div class="profitloss">
<div class="search">
<!--<el-date-picker size="small" style="width: 140px"-->
<!--v-model="expenseDate"-->
<!--type="month"-->
<!--placeholder="选择月" @change="changetime"-->
<!--value-format="yyyy-MM"-->
<!--:picker-options="pickerOptions">-->
<!--v-model="expenseDate"-->
<!--type="month"-->
<!--placeholder="选择月" @change="changetime"-->
<!--value-format="yyyy-MM"-->
<!--:picker-options="pickerOptions">-->
<!--</el-date-picker>-->
<el-select v-model="expenseDate">
<el-option
v-for="item in dateoptions"
:key="item.value"
:label="item.label"
:value="item.value">
<el-option v-for="item in dateoptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<el-button v-if="!isall" type="primary" size="small" @click="addcost">添加实际成本</el-button>
</div>
<!--汇总-->
<div class="table-item" v-if="isall">
<el-table
element-loading-text="Loading"
:data="tableData"
row-key="id"
v-horizontal-scroll="'hover'"
default-expand-all
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
border
highlight-current-row
>
<el-table element-loading-text="Loading" :data="tableData" row-key="id" v-horizontal-scroll="'hover'" default-expand-all
:tree-props="{children: 'children', hasChildren: 'hasChildren'}" border highlight-current-row>
<el-table-column label="序号" width="60" align="left" type="index"></el-table-column>
<el-table-column label="名称" width="220" prop="expenseName">
<template slot-scope="scope">{{scope.row.expenseName || '--'}}</template>
......@@ -57,16 +46,8 @@
</div>
<!--单条-->
<div class="table-item" v-else>
<el-table
element-loading-text="Loading"
:data="tableData"
row-key="id"
v-horizontal-scroll="'hover'"
default-expand-all
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
border
highlight-current-row
>
<el-table element-loading-text="Loading" :data="tableData" row-key="id" v-horizontal-scroll="'hover'" default-expand-all
:tree-props="{children: 'children', hasChildren: 'hasChildren'}" border highlight-current-row>
<el-table-column label="序号" width="60" align="left" type="index" fixed="left"></el-table-column>
<el-table-column label="清单内容" width="130" prop="itemContent" fixed="left">
<template slot-scope="scope">{{scope.row.itemContent || '--'}}</template>
......@@ -114,7 +95,6 @@
<template slot-scope="scope">{{scope.row.taxType || '--'}}</template>
</el-table-column>
<el-table-column label="本月发生成本比例" width="150" prop="monthCostRate">
<template slot-scope="scope">{{scope.row.monthCostRate || '--'}}</template>
</el-table-column>
......@@ -131,7 +111,6 @@
<template slot-scope="scope">{{scope.row.submitProjectVolume || '--'}}</template>
</el-table-column>
<el-table-column label="备注" width="130" prop="remarks">
<template slot-scope="scope">{{scope.row.remarks || '--'}}</template>
</el-table-column>
......@@ -140,7 +119,7 @@
</el-table-column>
<el-table-column label="操作" width="130" fixed="right">
<template slot-scope="scope">
<span class="wordprimary" @click="pushwork(scope.row)">推送工程量</span>
<span class="wordprimary" @click="pushwork(scope.row)">推送工程量</span>
</template>
</el-table-column>
</el-table>
......@@ -148,10 +127,7 @@
</div>
<!--推送工程量-->
<el-dialog
class="pro-news"
:visible.sync="dialogVisible"
width="480px">
<el-dialog class="pro-news" :visible.sync="dialogVisible" width="480px">
<div class="poptitle">
<span>推送工程量</span>
</div>
......@@ -164,7 +140,9 @@
</el-form-item>
<el-form-item label="需推送工程量" class="row">
<el-input type="text" placeholder="请输入需推送工程量" v-model="queryParam.submitProjectVolume"></el-input>
<span class="msgs" v-if="queryParam.submitProjectVolume>queryParam.currentProjectVolume"><font color="#FF3C3C">注:推送工程量不得大于实际产生的总工程量</font></span>
<span class="msgs" v-if="queryParam.submitProjectVolume>queryParam.currentProjectVolume">
<font color="#FF3C3C">注:推送工程量不得大于实际产生的总工程量</font>
</span>
</el-form-item>
<el-form-item label="IPM项目编码" class="row">
<el-input type="text" placeholder="请输入IPM项目编码" v-model="queryParam.ipmProjectCode"></el-input>
......@@ -175,7 +153,7 @@
<el-form-item label="IPM作业编码" class="row">
<el-input type="text" placeholder="请输入IPM作业编码" v-model="queryParam.ipmBizCode"></el-input>
</el-form-item>
</el-form >
</el-form>
<div class="popbot">
<div class="btn btn_cancel h32" @click="dialogVisible = false">取消</div>
<div class="btn btn_primary h32" @click="savepro">确定推送</div>
......@@ -186,371 +164,370 @@
</div>
</template>
<script>
import ProjectSideMenu from '@/views/projectCostLedger/detail/components/ProjectSideMenu'
import {
getCostMeasureslist,
getMeasureslist,
getSummarydata,
projectVolume,
pushProjectvolume,actualMonths
} from '@/api/projectCostLedger'
import ProjectSideMenu from '@/views/projectCostLedger/detail/components/ProjectSideMenu';
import {
getCostMeasureslist,
getMeasureslist,
getSummarydata,
projectVolume,
pushProjectvolume,
getActualMonthsApi
} from '@/api/projectCostLedger';
import { cloneDeep } from "lodash-es";
export default {
name: "MeasureItems",
props: {
// 项目ID
projectId: {
type: String,
required: true,
default: ""
export default {
name: "MeasureItems",
props: {
// 项目ID
projectId: {
type: String,
required: true,
default: ""
},
// 详情信息
projectDetailInfo: {
type: Object,
default: () => ({})
}
},
watch: {
projectDetailInfo: {
handler(newValue) {
this.comProjectDetailInfo = newValue ? cloneDeep(newValue) : {};
this.init(newValue.projectId);
},
// 详情信息
projectDetailInfo: {
type: Object,
default: () => ({})
}
deep: true
},
watch: {
projectDetailInfo: {
handler(newValue) {
this.comProjectDetailInfo = newValue ? newValue : {};
this.init(this.projectId);
projectId: {
handler(newValue) {
this.comProjectId = newValue;
}
}
},
components: {
ProjectSideMenu
},
data() {
return {
pickerOptions: {
disabledDate(time) {
let istrue = true;
let month = new Date().getMonth() + 1;
let year = new Date().getFullYear();
let times = (year + 5) + '-' + month + '-01 ' + '00:00:00';
istrue = new Date().getTime() < time.getTime() && time.getTime() < new Date(times).getTime();
return !istrue;
},
deep: true,
immediate: true
},
projectId: {
handler(newValue) {
this.comProjectId = newValue;
},
immediate: true
menuOptions: {
nodeName: "itemContent",
nodeValue: "id",
},
comProjectDetailInfo: this.projectDetailInfo ? cloneDeep(this.projectDetailInfo) : {},
comProjectId: this.projectId,
defaultActive: "",
menuTreeList: [
],
id: 0,
expenseDate: '',
tableData: [],
isall: true,//是否汇总
dialogVisible: false,
queryParam: {},//推送工程量数据
dateoptions: [],
};
},
//可访问data属性
created() {
// let month = new Date().getMonth() +1
// let year = new Date().getFullYear()
// this.expenseDate = year + (month>= 9? month:'0'+ month)
this.init(this.comProjectId);
},
//计算集
computed: {
},
//方法集
methods: {
async getactualMonths() {
try {
const formData = new FormData();
formData.append("projectId", this.comProjectId);
formData.append("id", this.id);
let data = await getActualMonthsApi(formData);
data.forEach(item => {
item.value = item;
item.label = item.substring(1, 4) + '-' + item.substring(5, 6);
});
if (data && data.length > 0) {
this.expenseDate = data[0].value;
}
} catch (error) {
console.log(error);
}
},
components: {
ProjectSideMenu
},
data() {
return {
pickerOptions: {
disabledDate(time) {
let istrue = true
let month = new Date().getMonth()+1
let year = new Date().getFullYear()
let times = (year+5)+'-'+ month + '-01 ' + '00:00:00'
istrue = new Date().getTime() < time.getTime() && time.getTime() < new Date(times).getTime()
return !istrue
},
},
menuOptions: {
nodeName: "itemContent",
nodeValue: "id",
},
comProjectDetailInfo: {},
comProjectId: "",
defaultActive: "",
menuTreeList: [
],
id: 0,
expenseDate:'',
tableData:[],
isall:true,//是否汇总
dialogVisible:false,
queryParam:{},//推送工程量数据
dateoptions:[],
async select(menuPath) {
this.id = menuPath;
// let month = this.expenseDate.replace('-', "");
let param = {
projectId: this.projectId,
id: this.id,
month: this.expenseDate
};
if (menuPath == 0) {//费用汇总
this.isall = true;
const formData = new FormData();
formData.append("projectId", this.projectId);
const res = await getSummarydata(formData);
this.tableData = res.data;
} else {//各个子项
this.isall = false;
const res = await getCostMeasureslist(param);
this.tableData = res.data;
}
this.getactualMonths();
},
//可访问data属性
created() {
// let month = new Date().getMonth() +1
// let year = new Date().getFullYear()
// this.expenseDate = year + (month>= 9? month:'0'+ month)
this.getactualMonths()
},
//计算集
computed: {
async init(detail = '') {
try {
const projectId = detail;
if (!projectId) return;
await this.getFeedSummaryMenuTree(projectId);
} catch (error) {
}
},
//方法集
methods: {
getactualMonths(){
const formDatas = new FormData();
formDatas.append("projectId", this.projectId);
formDatas.append("id", this.id);
console.log(formDatas.get('projectId'))
console.log(formDatas.get('id'))
actualMonths(formDatas).then(res=>{
let data = res.data
data.forEach(item=>{
item.value = item
item.label = item.substring(1,4)+'-'+item.substring(5,6)
})
if(data&&data.length>0)
this.expenseDate = data[0].value
})
},
select(menuPath){
this.id = menuPath
// let month = this.expenseDate.replace('-', "");
let param = {
projectId:this.projectId,
id:this.id,
month:this.expenseDate
}
if(menuPath == 0){//费用汇总
this.isall = true
const formData = new FormData();
formData.append("projectId", this.projectId);
getSummarydata(formData).then(res=>{
this.tableData = res.data
})
} else {//各个子项
this.isall = false
getCostMeasureslist(param).then(res => {
this.tableData = res.data
})
async getFeedSummaryMenuTree(params) {
try {
const result = await getMeasureslist(params);
if (result.code == 200) {
let arr = {};
arr.itemContent = '措施费';
arr.id = 0;
let child = result.data;
let li = {};
li.itemContent = '费用汇总';
li.id = 0;
child.unshift(li);
arr.children = child;
const _tempArray = [arr];
this.menuTreeList = _tempArray;
await this.$nextTick();
this.$refs['profitloss'].$refs['customElMenu'].open(_tempArray[0].id);
this.defaultActive = child[0].id;
this.select(child[0].id);
}
this.getactualMonths()
},
async init(detail = '') {
try {
const projectId = detail;
if (!projectId) return;
await this.getFeedSummaryMenuTree(projectId);
} catch (error) {
}
},
async getFeedSummaryMenuTree(params) {
try {
const result = await getMeasureslist(params);
if (result.code == 200) {
let arr = {}
arr.itemContent = '措施费'
arr.id = 0
let child = result.data
let li = {}
li.itemContent = '费用汇总'
li.id = 0
child.unshift(li)
arr.children = child
const _tempArray = [arr];
this.menuTreeList = _tempArray;
await this.$nextTick()
this.$refs['profitloss'].$refs['customElMenu'].open(_tempArray[0].id)
this.defaultActive = child[0].id
this.select(child[0].id)
}
} catch (error) {
console.log(error)
} catch (error) {
console.log(error);
}
},
changetime(val) {
this.select(this.id);
},
//推送工作量
pushwork(row) {
this.queryParam = {
id: row.id,
projectName: '',
submitProjectVolume: '',
ipmProjectCode: '',
ipmContractCode: '',
ipmBizCode: '',
};
projectVolume(row.id).then(res => {
if (res.data) {
let datas = res.data;
this.queryParam.currentProjectVolume = datas.currentProjectVolume;
this.queryParam.ipmProjectCode = datas.ipmProjectCode;
this.queryParam.ipmContractCode = datas.ipmContractCode;
this.queryParam.ipmBizCode = datas.ipmBizCode;
}
},
changetime(val){
this.select(this.id)
},
//推送工作量
pushwork(row){
this.queryParam = {
id:row.id,
projectName:'',
submitProjectVolume:'',
ipmProjectCode:'',
ipmContractCode:'',
ipmBizCode:'',
});
this.dialogVisible = true;
},
//确认推送
savepro() {
pushProjectvolume(this.queryParam).then(res => {
if (res.code == 200) {
this.$message.success(res.msg);
this.dialogVisible = false;
this.select(this.id);
} else {
this.$message.error(res.msg);
}
projectVolume(row.id).then(res=>{
if(res.data){
let datas = res.data
this.queryParam.currentProjectVolume = datas.currentProjectVolume
this.queryParam.ipmProjectCode = datas.ipmProjectCode
this.queryParam.ipmContractCode = datas.ipmContractCode
this.queryParam.ipmBizCode = datas.ipmBizCode
}
})
this.dialogVisible = true
},
//确认推送
savepro(){
pushProjectvolume(this.queryParam).then(res=>{
if(res.code == 200){
this.$message.success(res.msg)
this.dialogVisible = false
this.select(this.id)
}else{
this.$message.error(res.msg)
}
})
});
},
addcost(){
},
addcost() {
},
},
}
},
}
</script>
<style lang="scss" scoped>
.feed-summary-container {
.feed-summary-container {
width: 100%;
height: 100%;
.feed-summary-inner {
width: 100%;
height: 100%;
display: flex;
align-items: center;
.feed-summary-inner {
width: 100%;
.left-side-menu {
width: 220px;
min-width: 220px;
height: 100%;
display: flex;
align-items: center;
.left-side-menu {
width: 220px;
min-width: 220px;
height: 100%;
}
.profitloss{
width: calc(100% - 220px);
height: 100%;
background: #fff;
padding: 16px;
.table-item{
margin-top: 16px;
}
}
}
.search{
display: flex;
justify-content: space-between;
}
::v-deep .pro-news {
.el-dialog__body {
padding: 24px 0 0;
.profitloss {
width: calc(100% - 220px);
height: 100%;
background: #fff;
padding: 16px;
.table-item {
margin-top: 16px;
}
}
}
.search {
display: flex;
justify-content: space-between;
}
::v-deep .pro-news {
.el-dialog__body {
padding: 24px 0 0;
}
.el-dialog__headerbtn {
top: 20px;
right: 20px;
z-index: 3;
}
.el-dialog__headerbtn {
top: 20px;
right: 20px;
z-index: 3;
}
.poptitle {
line-height: 56px;
border-bottom: 1px solid #eee;
height: 56px;
position: absolute;
top: 0;
left: 0;
width: 100%;
.poptitle {
line-height: 56px;
border-bottom: 1px solid #eee;
height: 56px;
position: absolute;
top: 0;
left: 0;
width: 100%;
> span {
padding-left: 20px;
font-weight: bold;
font-size: 16px;
color: #232323;
font-family: Microsoft YaHei-Bold, Microsoft YaHei;
width: 385px;
display: block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
> span {
padding-left: 20px;
font-weight: bold;
font-size: 16px;
color: #232323;
font-family: Microsoft YaHei-Bold, Microsoft YaHei;
width: 385px;
display: block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
.popform {
padding: 24px 20px 0;
.row {
margin-bottom: 16px;
position: relative;
.checkcb{
position: absolute;
left: -100px;
}
.el-form-item__label {
font-weight: 400;
opacity: 0.8;
padding: 0;
font-size: 14px;
color: #232323;
padding-right: 16px;
}
.popform {
padding: 24px 20px 0;
.el-input,
.el-textarea,
.el-select {
display: inline-block;
width: 320px;
.row {
margin-bottom: 16px;
position: relative;
.checkcb {
position: absolute;
left: -100px;
}
.el-form-item__label {
font-weight: 400;
opacity: 0.8;
padding: 0;
font-size: 14px;
color: #232323;
padding-right: 16px;
}
.el-input__inner,
.el-textarea__inner {
width: 100%;
height: 32px;
border-radius: 0px;
.el-input,
.el-textarea,
.el-select {
display: inline-block;
width: 320px;
&:hover {
border-color: #0081ff;
}
}
.el-input__inner,
.el-textarea__inner {
width: 100%;
height: 32px;
border-radius: 0px;
.el-textarea__inner {
height: 90px;
font-family: inherit;
color: #000;
&:hover {
border-color: #0081ff;
}
}
.el-input__suffix {
height: 32px;
}
.el-textarea__inner {
height: 90px;
font-family: inherit;
color: #000;
}
.el-input__icon {
line-height: 32px;
}
.el-input__suffix {
height: 32px;
}
.el-form-item__error {
padding-top: 2px;
.el-input__icon {
line-height: 32px;
}
}
.el-input-group--append{
position: relative;
.el-input-group__append{
position: absolute;
right: 0;
width: 76px;
top: 0;
border: 0;
background: none;
&:hover{
background: none !important;
}
.pro-getbtn{
border-left: 1px solid #DCDFE6;
height: 32px;
color: #0081FF;
line-height: 32px;
text-align: center;
}
.el-form-item__error {
padding-top: 2px;
}
}
.el-input-group--append {
position: relative;
.el-input-group__append {
position: absolute;
right: 0;
width: 76px;
top: 0;
border: 0;
background: none;
&:hover {
background: none !important;
}
.pro-getbtn {
border-left: 1px solid #dcdfe6;
height: 32px;
color: #0081ff;
line-height: 32px;
text-align: center;
}
}
}
}
.popbot {
border-top: 1px solid #EEEEEE;
text-align: right;
margin-top: 24px;
padding: 16px 20px;
.popbot {
border-top: 1px solid #eeeeee;
text-align: right;
margin-top: 24px;
padding: 16px 20px;
.btn {
border-radius: 2px;
margin-left: 12px;
padding: 0 24px;
&.btn_disabled{
background: #8BD1FF;
}
.btn {
border-radius: 2px;
margin-left: 12px;
padding: 0 24px;
&.btn_disabled {
background: #8bd1ff;
}
}
.msgs{
font-size: 12px;
line-height: 17px;
height: 17px;
display: block;
margin: 0 0 -4px;
}
}
.msgs {
font-size: 12px;
line-height: 17px;
height: 17px;
display: block;
margin: 0 0 -4px;
}
}
}
</style>
......@@ -15,16 +15,16 @@
<direct-cost v-if="current == 'directCost'"></direct-cost>
<!-- 工料汇总 -->
<feed-summary v-if="current == 'feedSummary'" :project-id="projectID" :project-detail-info="detailInfo"></feed-summary>
<feed-summary v-if="current == 'feedSummary'" :project-id="projectId" :project-detail-info="detailInfo"></feed-summary>
<!--措施项目-->
<measure-items v-if="current == 'measureItem'" :project-id="projectID" :project-detail-info="detailInfo"></measure-items>
<measure-items v-if="current == 'measureItem'" :project-id="projectId" :project-detail-info="detailInfo"></measure-items>
<!-- 其他项目 -->
<other-projects v-if="current == 'otherItems'"></other-projects>
<!-- 盈亏分析对比 -->
<profit-Loss v-if="current == 'profitAndLoss'" :project-id="projectID" :project-detail-info="detailInfo"></profit-Loss>
<profit-Loss v-if="current == 'profitAndLoss'" :project-id="projectId" :project-detail-info="detailInfo"></profit-Loss>
</div>
</div>
......@@ -62,13 +62,13 @@ export default {
},
data() {
return {
projectID: "",
projectId: "",
current: "",
// 详情信息变量
detailInfo: {
projectId: "1754425038355890177",
cbStage: 0,
cbType:1
cbType: 1
},
toggleTabs: [
{
......@@ -162,20 +162,21 @@ export default {
async getProjectQuery() {
try {
const { query } = this.$route;
// if (!query.projectID) return this.$message.error("缺少项目id");
this.projectID = query.projectID;
// if (!query.projectId) return this.$message.error("缺少项目id");
this.projectId = query.projectId;
// 获取详情 保证详情获取完毕 再执行tab命中 进行生命周期
await this.getProjectDetail(query.projectId);
if (query.current) {
this.current = query.current;
} else {
// 默认命中工程项目信息
this.current = "basicEngineeringInformation";
};
await this.getProjectDetail(query.projectID);
} catch (error) {
console.log(error);
}
},
async getProjectDetail(projectID) {
async getProjectDetail(projectId) {
try {
} catch (error) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment