Commit 1fa13cdf authored by huangjie's avatar huangjie

Merge branch 'V20231129-中建一局二公司' of http://192.168.60.201/root/dsk-operate-sys...

Merge branch 'V20231129-中建一局二公司' of http://192.168.60.201/root/dsk-operate-sys into V20231129-中建一局二公司
parents bb9713fb 7d5aafc3
...@@ -48,7 +48,7 @@ public class DataAnalysisComponent { ...@@ -48,7 +48,7 @@ public class DataAnalysisComponent {
* 工料汇总数据解析 * 工料汇总数据解析
*/ */
@Async @Async
public void quantitySummaryDataAnalysis(CbProjectBaseBo bo) throws Exception { public void quantitySummaryDataAnalysis(CbProjectBaseBo bo){
//查询工料汇总导入文件 //查询工料汇总导入文件
List<CbProjectFile> fileList = projectFileService.selectAnalysisList(bo.getProjectId(), CbProjectConstants.CB_TYPE_QUANTITY_SUMMARY, bo.getCbStage()); List<CbProjectFile> fileList = projectFileService.selectAnalysisList(bo.getProjectId(), CbProjectConstants.CB_TYPE_QUANTITY_SUMMARY, bo.getCbStage());
...@@ -59,17 +59,13 @@ public class DataAnalysisComponent { ...@@ -59,17 +59,13 @@ public class DataAnalysisComponent {
//文件下载 //文件下载
InputStream inputStream = ossService.downFileIO(file.getFileOssId()); InputStream inputStream = ossService.downFileIO(file.getFileOssId());
if (ObjectUtil.isNull(inputStream)) { if (ObjectUtil.isNull(inputStream)) {
file.setFileParseStatus(3); addFileErrorMsg(file, "文件数据不存在");
file.setFailRemark("文件数据不存在");
projectFileService.updateById(file);
break; break;
} }
//解析数据 //解析数据
List<CbQuantitySummary> importList = new ExcelUtils<>(CbQuantitySummary.class).importExcelAllSheet(inputStream, 1); List<CbQuantitySummary> importList = new ExcelUtils<>(CbQuantitySummary.class).importExcelAllSheet(inputStream, 1);
if (importList.isEmpty()) { if (importList.isEmpty()) {
file.setFileParseStatus(3); addFileErrorMsg(file, "表格中不存在待导入数据");
file.setFailRemark("表格中不存在待导入数据!");
projectFileService.updateById(file);
break; break;
} }
List<CbQuantitySummary> quantitySummaryList = importList.stream().parallel() List<CbQuantitySummary> quantitySummaryList = importList.stream().parallel()
...@@ -80,7 +76,8 @@ public class DataAnalysisComponent { ...@@ -80,7 +76,8 @@ public class DataAnalysisComponent {
item.setCbProjectFileId(file.getId()); item.setCbProjectFileId(file.getId());
}).collect(Collectors.toList()); }).collect(Collectors.toList());
if (quantitySummaryList.isEmpty()) { if (quantitySummaryList.isEmpty()) {
throw new ServiceException("表格中不存在有效数据!"); addFileErrorMsg(file, "表格中不存在有效数据");
break;
} }
transactionTemplate.execute(status -> { transactionTemplate.execute(status -> {
...@@ -114,18 +111,20 @@ public class DataAnalysisComponent { ...@@ -114,18 +111,20 @@ public class DataAnalysisComponent {
} }
} catch (Exception e) { } catch (Exception e) {
status.setRollbackOnly(); status.setRollbackOnly();
file.setFileParseStatus(3); addFileErrorMsg(file, e.getMessage());
file.setFailRemark(e.getMessage());
projectFileService.updateById(file);
} }
return Boolean.TRUE; return Boolean.TRUE;
}); });
} catch (Exception e) { } catch (Exception e) {
file.setFileParseStatus(3); addFileErrorMsg(file, e.getMessage());
file.setFailRemark(e.getMessage());
projectFileService.updateById(file);
} }
} }
} }
private void addFileErrorMsg(CbProjectFile file, String errorMsg) {
file.setFileParseStatus(3);
file.setFailRemark(errorMsg);
projectFileService.updateById(file);
}
} }
...@@ -21,6 +21,11 @@ public class CbProjectHeadInfoVo { ...@@ -21,6 +21,11 @@ public class CbProjectHeadInfoVo {
* IPM项目编码 * IPM项目编码
*/ */
private String ipmProjectNo; private String ipmProjectNo;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
/** /**
* 客商名称(客户名称) * 客商名称(客户名称)
*/ */
......
...@@ -44,10 +44,10 @@ public class CbProjectOtherImportListener extends AnalysisEventListener<CbProjec ...@@ -44,10 +44,10 @@ public class CbProjectOtherImportListener extends AnalysisEventListener<CbProjec
// failureMsg.append("<br/>" + rowIndex + "行 解析失败:清单内容不能为空"); // failureMsg.append("<br/>" + rowIndex + "行 解析失败:清单内容不能为空");
// } // }
String number = importVo.getNumber(); String number = importVo.getNumber();
if (StrUtil.isEmpty(number)) { // if (StrUtil.isEmpty(number)) {
failureNum++; // failureNum++;
failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号不能为空"); // failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号不能为空");
} // }
importVo.setCbProjectFileId(fileId); importVo.setCbProjectFileId(fileId);
Boolean numberMatch = false; Boolean numberMatch = false;
...@@ -57,10 +57,11 @@ public class CbProjectOtherImportListener extends AnalysisEventListener<CbProjec ...@@ -57,10 +57,11 @@ public class CbProjectOtherImportListener extends AnalysisEventListener<CbProjec
if (ReUtil.isMatch(regex, number) || ReUtil.isMatch(pattern, number)||ReUtil.isMatch(pattern3, number)) { if (ReUtil.isMatch(regex, number) || ReUtil.isMatch(pattern, number)||ReUtil.isMatch(pattern3, number)) {
numberMatch = true; numberMatch = true;
} else {
failureNum++;
failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号格式错误");
} }
// else {
// failureNum++;
// failureMsg.append("<br/>" + rowIndex + "行 解析失败:序号格式错误");
// }
if(numberMatch){ if(numberMatch){
if (ReUtil.isMatch(regex, number)){ if (ReUtil.isMatch(regex, number)){
String replace = number.replaceAll("[\\\\((]|[\\\\))]", ""); String replace = number.replaceAll("[\\\\((]|[\\\\))]", "");
...@@ -69,8 +70,8 @@ public class CbProjectOtherImportListener extends AnalysisEventListener<CbProjec ...@@ -69,8 +70,8 @@ public class CbProjectOtherImportListener extends AnalysisEventListener<CbProjec
}else{ }else{
importVo.setDealWithNumber(importVo.getNumber()); importVo.setDealWithNumber(importVo.getNumber());
} }
dataList.add(importVo);
} }
dataList.add(importVo);
} }
@Override @Override
......
...@@ -226,19 +226,19 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -226,19 +226,19 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
String number = importVo.getNumber(); String number = importVo.getNumber();
CbProjectOther cbProjectOther = new CbProjectOther(); CbProjectOther cbProjectOther = new CbProjectOther();
BeanUtil.copyProperties(importVo, cbProjectOther);
//保存一级节点 //保存一级节点
if (ReUtil.isMatch(firstPattern, number) || ReUtil.isMatch(pattern3, number)) { if (ReUtil.isMatch(firstPattern, number) || ReUtil.isMatch(pattern3, number)) {
BeanUtil.copyProperties(importVo, cbProjectOther);
cbProjectOther.setParentId(rootMeasuresId); cbProjectOther.setParentId(rootMeasuresId);
} else if (ReUtil.isMatch(secondPattern, number)) { } else if (ReUtil.isMatch(secondPattern, number)) {
BeanUtil.copyProperties(importVo, cbProjectOther);
// 根据no查询父级节点 // 根据no查询父级节点
CbProjectOther parentCbCostMeasure = getCbProjectOther(rootMeasuresId, number, projectId, cbStage); CbProjectOther parentCbCostMeasure = getCbProjectOther(rootMeasuresId, number, projectId, cbStage);
String[] split = number.split("\\.");
cbProjectOther.setParentId(parentCbCostMeasure.getId()); cbProjectOther.setParentId(parentCbCostMeasure.getId());
} }
String newNo = String.valueOf(rootMeasuresId).concat(".").concat(cbProjectOther.getDealWithNumber()); if (ObjectUtil.isNotEmpty(cbProjectOther.getDealWithNumber())) {
cbProjectOther.setDealWithNumber(newNo); String newNo = String.valueOf(rootMeasuresId).concat(".").concat(cbProjectOther.getDealWithNumber());
cbProjectOther.setDealWithNumber(newNo);
}
cbProjectOther.setProjectId(projectId); cbProjectOther.setProjectId(projectId);
cbProjectOther.setCbStage(cbStage); cbProjectOther.setCbStage(cbStage);
this.save(cbProjectOther); this.save(cbProjectOther);
...@@ -246,6 +246,8 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -246,6 +246,8 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
} }
} }
file.setFileParseStatus(2);
projectFileService.updateById(file);
} }
} }
...@@ -279,6 +281,8 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -279,6 +281,8 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
projectExpenseSummaryService.save(projectExpenseSummary); projectExpenseSummaryService.save(projectExpenseSummary);
} }
} }
file.setFileParseStatus(2);
projectFileService.updateById(file);
} }
/** /**
......
...@@ -5,10 +5,10 @@ import request from '@/utils/request'; ...@@ -5,10 +5,10 @@ import request from '@/utils/request';
* @param {*} params * @param {*} params
* @returns * @returns
*/ */
export const getProjectDetailApi = (params = {}) => request({ export const getProjectDetailApi = (projectId) => request({
url: "", url: `/cbProjectRecord/getCbProjectHeadInfo/${projectId}`,
method: "get", method: "get",
params params: {}
}); });
//校验项目编码是否存在 //校验项目编码是否存在
...@@ -60,7 +60,7 @@ export function getProjectFileUploadDetail(projectId) { ...@@ -60,7 +60,7 @@ export function getProjectFileUploadDetail(projectId) {
//根据项目文件导入数据 //根据项目文件导入数据
export function importData(projectId) { export function importData(projectId) {
return request({ return request({
url: '/cbProjectRecord/importData/'+projectId, url: '/cbProjectRecord/importData/' + projectId,
method: 'post', method: 'post',
}); });
} }
...@@ -70,7 +70,7 @@ export function getDraftDialogList(data) { ...@@ -70,7 +70,7 @@ export function getDraftDialogList(data) {
return request({ return request({
url: '/cbProjectRecord/getDraftDialogList', url: '/cbProjectRecord/getDraftDialogList',
method: 'get', method: 'get',
params:data params: data
}); });
} }
...@@ -193,7 +193,7 @@ export function saveBatch(data) { ...@@ -193,7 +193,7 @@ export function saveBatch(data) {
return request({ return request({
url: '/cb/cost/measures/saveBatch', url: '/cb/cost/measures/saveBatch',
method: 'post', method: 'post',
data:data, data: data,
}); });
} }
...@@ -265,7 +265,7 @@ export function cbDirectExpenseAdd(data) { ...@@ -265,7 +265,7 @@ export function cbDirectExpenseAdd(data) {
return request({ return request({
url: '/cbDirectExpense/addExpense', url: '/cbDirectExpense/addExpense',
method: 'post', method: 'post',
data:data, data: data,
}); });
} }
......
...@@ -92,7 +92,7 @@ export default { ...@@ -92,7 +92,7 @@ export default {
tabChoose(item) { tabChoose(item) {
if (item.value == this.currentValue) return; if (item.value == this.currentValue) return;
this.$emit("currentTabChange", item.value); this.$emit("currentTabChange", item.value);
this.$emit("tabToggle", item.value); this.$emit("tabToggle", item.value, item);
this.initSlidingBar(); this.initSlidingBar();
} }
}, },
......
...@@ -37,13 +37,13 @@ ...@@ -37,13 +37,13 @@
<!-- 有自定义插槽 --> <!-- 有自定义插槽 -->
<slot v-if="item.slot" :name="item.prop" :row="scope.row" :index="scope.$index" :data="item"> <slot v-if="item.slot" :name="item.prop" :row="scope.row" :index="scope.$index" :data="item">
<!-- 默认取值 --> <!-- 默认取值 -->
{{ scope.row[item.prop] || scope.row[item.prop] == '0' ? scope.row[item.prop] : '-' }} {{ scope.row[item.prop] ? scope.row[item.prop] : '-' }}
</slot> </slot>
<!-- 操作栏 不需要设置slot--> <!-- 操作栏 不需要设置slot-->
<slot v-else-if="item.prop == 'action-field-bar'" name="action-field-bar" :row="scope.row" :index="scope.$index" :data="item"></slot> <slot v-else-if="item.prop == 'action-field-bar'" name="action-field-bar" :row="scope.row" :index="scope.$index" :data="item"></slot>
<!-- 没有插槽 --> <!-- 没有插槽 -->
<div v-else> <div v-else>
{{ scope.row[item.prop] || scope.row[item.prop] == '0' ? scope.row[item.prop] : '-' }} {{ scope.row[item.prop] ? scope.row[item.prop] : '-' }}
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
...@@ -87,7 +87,7 @@ export default { ...@@ -87,7 +87,7 @@ export default {
}, },
//可访问data属性 //可访问data属性
created() { created() {
}, },
//计算集 //计算集
computed: { computed: {
......
...@@ -64,7 +64,7 @@ export default { ...@@ -64,7 +64,7 @@ export default {
.cooperation-desk-account-project, .cooperation-desk-account-project,
.cooperation-desk-account-enterprise { .cooperation-desk-account-enterprise {
overflow: hidden; overflow: hidden;
height: calc(100% - 48px); height: calc(100%);
} }
} }
} }
......
...@@ -59,7 +59,7 @@ export default { ...@@ -59,7 +59,7 @@ export default {
.cooperation-desk-account-project, .cooperation-desk-account-project,
.cooperation-desk-account-enterprise { .cooperation-desk-account-enterprise {
overflow: hidden; overflow: hidden;
height: calc(100% - 48px); height: calc(100%);
} }
} }
} }
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
<div class="feed-summary-container"> <div class="feed-summary-container">
<div class="feed-summary-inner"> <div class="feed-summary-inner">
<div class="left-side-menu"> <div class="left-side-menu">
<project-side-menu :menuTree="menuTreeList" :menuOptions="menuOptions" :unique-opened="false" :default-active="currentNodeName" <project-side-menu ref="projectSideMenu" :menuTree="menuTreeList" :menuOptions="menuOptions" :unique-opened="false"
@select="menuSelect"> :default-active="currentNodeName" @select="menuSelect">
<template slot="房建类成本科目-1"> <template slot="房建类成本科目-1">
<img src="@/assets/images/projectCostLedger/icon_cost_detail_2.svg" alt=""> <img src="@/assets/images/projectCostLedger/icon_cost_detail_2.svg" alt="">
<div class="project-sub-menu-title-text">房建类成本科目</div> <div class="project-sub-menu-title-text">房建类成本科目</div>
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
<!-- 实体工程材料单位换算 --> <!-- 实体工程材料单位换算 -->
<el-button type="primary" size="medium" class="unit-conversion-btn" v-if="currentParentName.indexOf('实体工程材料') != -1">单位换算</el-button> <el-button type="primary" size="medium" class="unit-conversion-btn" v-if="currentParentName.indexOf('实体工程材料') != -1">单位换算</el-button>
<!-- 填写实际成本 --> <!-- 填写实际成本 -->
<el-button type="primary" size="medium" class="actual-cost-btn" v-else>填写实际成本</el-button> <el-button type="primary" size="medium" class="actual-cost-btn" v-else @click="fillActualCost">填写实际成本</el-button>
<!-- 表头设置组件 --> <!-- 表头设置组件 -->
<dsk-table-header-setting :settingList="formColum" @settingChange="settingChange"></dsk-table-header-setting> <dsk-table-header-setting :settingList="formColum" @settingChange="settingChange"></dsk-table-header-setting>
</div> </div>
...@@ -39,9 +39,10 @@ ...@@ -39,9 +39,10 @@
<table-list-com :tableData="tableDataList" :formColum="formColum" v-else-if="!tableLoading" :maxHeight="true" :tableDataTotal="total" <table-list-com :tableData="tableDataList" :formColum="formColum" v-else-if="!tableLoading" :maxHeight="true" :tableDataTotal="total"
:paging="false"> :paging="false">
<template slot="action-field-bar" slot-scope="scope"> <template slot="action-field-bar" slot-scope="scope">
<div class="project-action-field-bar"> <div class="project-action-field-bar" v-if="scope.row.id">
<span class="push-project">推送工程量</span> <span class="push-project">推送工程量</span>
</div> </div>
<span v-else>-</span>
</template> </template>
</table-list-com> </table-list-com>
</div> </div>
...@@ -108,7 +109,7 @@ export default { ...@@ -108,7 +109,7 @@ export default {
// 列表表头 // 列表表头
formColum: [ formColum: [
{ label: '序号', prop: "staticSerialNumber", type: "index", lock: true, width: "53", fixed: false, uid: v4() }, { label: '序号', prop: "staticSerialNumber", type: "index", lock: true, width: "53", fixed: false, uid: v4() },
{ label: '成本科目', prop: "cbSubjectName", width: "137", uid: v4(),slot : true }, { label: '成本科目', prop: "cbSubjectName", width: "137", uid: v4(), slot: true },
{ label: '公司编码', prop: "companyNo", width: "137", uid: v4() }, { label: '公司编码', prop: "companyNo", width: "137", uid: v4() },
{ label: '集团编码', prop: "orgNo", width: "137", uid: v4() }, { label: '集团编码', prop: "orgNo", width: "137", uid: v4() },
{ label: '名称', prop: "cbName", width: "232", uid: v4() }, { label: '名称', prop: "cbName", width: "232", uid: v4() },
...@@ -153,7 +154,8 @@ export default { ...@@ -153,7 +154,8 @@ export default {
// 当前选中的成本科目 // 当前选中的成本科目
currentNodeName: "", currentNodeName: "",
// 数据列表 // 数据列表
tableDataList: [] tableDataList: [],
statisticsParentName: ["劳务分包工程", "专业分包工程"]
}; };
}, },
//可访问data属性 //可访问data属性
...@@ -162,7 +164,9 @@ export default { ...@@ -162,7 +164,9 @@ export default {
}, },
//计算集 //计算集
computed: { computed: {
hasTarget() {
return this.statisticsParentName.includes(this.currentParentName);
}
}, },
//方法集 //方法集
methods: { methods: {
...@@ -179,14 +183,20 @@ export default { ...@@ -179,14 +183,20 @@ export default {
await this.initDefaultSetting(); await this.initDefaultSetting();
} catch (error) { } catch (error) {
console.log(error); console.log(error);
} finally {
this.tableLoading = false;
} }
}, },
async initDefaultSetting() { async initDefaultSetting() {
try { try {
const defaultCurrent = this.findMenuNode(this.menuTreeList, "结构劳务分包"); await this.$nextTick();
const menus = this.$refs["projectSideMenu"].getResultMenuList();
const defaultCurrent = this.findMenuNode(menus, "结构劳务分包");
// 默认选中结构劳务分包 // 默认选中结构劳务分包
if (defaultCurrent) { if (defaultCurrent) {
this.currentNodeName = defaultCurrent.name; this.currentNodeName = defaultCurrent.nodeName;
const parentName = defaultCurrent.parent ? this.getCurrentType(defaultCurrent.parent) : defaultCurrent.name;
if (parentName) this.currentParentName = parentName;
const params = this.createRequestConditions(); const params = this.createRequestConditions();
await this.getFeedSummaryList(params); await this.getFeedSummaryList(params);
} }
...@@ -212,11 +222,11 @@ export default { ...@@ -212,11 +222,11 @@ export default {
includeNowMonth(time) { includeNowMonth(time) {
return this.originMonthList.includes(time); return this.originMonthList.includes(time);
}, },
findMenuNode(tree, nodeName) { findMenuNode(tree, nodeName, targetName = "nodeName") {
for (const item of tree) { for (const item of tree) {
if (item.name == nodeName) return item; if (item[targetName] == nodeName) return item;
if (item.children instanceof Array) { if (item.children instanceof Array) {
const result = this.findMenuNode(item.children, nodeName); const result = this.findMenuNode(item.children, nodeName, targetName);
if (result) return result; if (result) return result;
} }
} }
...@@ -226,15 +236,31 @@ export default { ...@@ -226,15 +236,31 @@ export default {
this.tableLoading = true; this.tableLoading = true;
const list = await getFeedSummaryListApi(params); const list = await getFeedSummaryListApi(params);
if (list.code == 200 && list.data instanceof Array) { if (list.code == 200 && list.data instanceof Array) {
this.tableDataList = list.data; const _temp = list.data;
this.total = list.data.length; // 计算总和
if (this.hasTarget) {
const row = this.countRowParams(_temp);
}
this.tableDataList = _temp;
this.total = _temp.length;
} }
} catch (error) { } catch (error) {
console.log(error);
} finally { } finally {
this.tableLoading = false; this.tableLoading = false;
} }
}, },
countRowParams(arraylist = []) {
if (arraylist.length) {
const _template = {};
const _temp = cloneDeep(arraylist[0]);
const keys = Object.keys(_temp);
for (const key of keys) {
_template[key] = "";
}
console.log(_template);
}
},
async getFeedSummaryMenuTree(params) { async getFeedSummaryMenuTree(params) {
try { try {
const result = await getFeedSummaryMenuTreeApi(params); const result = await getFeedSummaryMenuTreeApi(params);
...@@ -317,6 +343,10 @@ export default { ...@@ -317,6 +343,10 @@ export default {
} }
}, },
// 填写或修改新的 成本月份
fillActualCost() {
}
}, },
} }
</script> </script>
......
...@@ -55,12 +55,11 @@ export default { ...@@ -55,12 +55,11 @@ export default {
//方法集 //方法集
methods: { methods: {
init(current) { init(current) {
if (!current) return;
if (this?.comBreadCrumbTree?.length) { if (this?.comBreadCrumbTree?.length) {
const _temp = cloneDeep(this.comBreadCrumbTree); const _temp = cloneDeep(this.comBreadCrumbTree);
// 根节点path 为root // 根节点path 为root
_temp[0].path = "root"; _temp[0].path = "root";
this.currentBreadCurmbList = this.createBreadCrumb(current, _temp); this.currentBreadCurmbList = current ? this.createBreadCrumb(current, _temp) : this.createBreadCrumb("root", _temp);
} }
}, },
createBreadCrumb(current, data) { createBreadCrumb(current, data) {
......
...@@ -3,20 +3,20 @@ ...@@ -3,20 +3,20 @@
<div class="project-cost-ledger-detail-header-inner"> <div class="project-cost-ledger-detail-header-inner">
<project-bread-crumb :current="current" :breadCrumbTree="breadCrumbTree" @breadCrumbTrigger="breadCrumbTrigger"></project-bread-crumb> <project-bread-crumb :current="current" :breadCrumbTree="breadCrumbTree" @breadCrumbTrigger="breadCrumbTrigger"></project-bread-crumb>
<!-- 项目名称 --> <!-- 项目名称 -->
<div class="project-detail-header-name">宝安中学(集团)初中部改扩建工程施工总承包(二次公告)</div> <div class="project-detail-header-name">{{comDetailInfo.projectName ? comDetailInfo.projectName : "-"}}</div>
<!-- 项目信息 --> <!-- 项目信息 -->
<div class="project-detail-plate"> <div class="project-detail-plate">
<div class="detail-plate-item project-code" v-if="isShowProjectCode.includes(current)"> <div class="detail-plate-item project-code" v-if="isShowProjectCode.includes(current)">
<span class="plate-item-name">项目编码:</span> <span class="plate-item-name">项目编码:</span>
<span>AB21131212131</span> <span>{{comDetailInfo.ipmProjectNo ? comDetailInfo.ipmProjectNo : "-"}}</span>
</div> </div>
<div class="detail-plate-item"> <div class="detail-plate-item">
<span class="plate-item-name">客户名称:</span> <span class="plate-item-name">客户名称:</span>
<span>广联达科技股份有限公司天津分公司天津分公司</span> <span>{{comDetailInfo.merchantName ? comDetailInfo.merchantName : "-"}}</span>
</div> </div>
<div class="detail-plate-item"> <div class="detail-plate-item">
<span class="plate-item-name">签订单位:</span> <span class="plate-item-name">签订单位:</span>
<span>中建一局集团第二建筑有限公司</span> <span>{{comDetailInfo.signingUnit ? comDetailInfo.signingUnit : "-"}}</span>
</div> </div>
</div> </div>
</div> </div>
...@@ -28,14 +28,26 @@ export default { ...@@ -28,14 +28,26 @@ export default {
name: "projectDetailHeader", name: "projectDetailHeader",
props: { props: {
current: String, current: String,
breadCrumbTree: Array breadCrumbTree: Array,
detailInfo: {
type: Object,
default: () => ({})
}
}, },
components: { components: {
ProjectBreadCrumb ProjectBreadCrumb
}, },
watch: {
detailInfo: {
handler(newValue) {
this.comDetailInfo = newValue ? newValue : {};
}
}
},
data() { data() {
return { return {
isShowProjectCode: ["basicEngineeringInformation", "directCost", "feedSummary", "cost"], isShowProjectCode: ["basicEngineeringInformation", "directCost", "feedSummary", "cost"],
comDetailInfo: this.detailInfo ? this.detailInfo : {}
}; };
}, },
//可访问data属性 //可访问data属性
......
...@@ -101,6 +101,10 @@ export default { ...@@ -101,6 +101,10 @@ export default {
}, },
//方法集 //方法集
methods: { methods: {
// 获取最终菜单结构
getResultMenuList() {
return this.tempMenuTree;
},
// 展开所有指定层级的菜单 默认二级 // 展开所有指定层级的菜单 默认二级
openTargetAllSubMenu(openeds = [], level = 2) { openTargetAllSubMenu(openeds = [], level = 2) {
// 组件外传入了值 使用传入值,否则默认获取二级菜单打开二级 // 组件外传入了值 使用传入值,否则默认获取二级菜单打开二级
...@@ -111,7 +115,7 @@ export default { ...@@ -111,7 +115,7 @@ export default {
// 递归查找当前二级目录index // 递归查找当前二级目录index
const _tempTree = this.tempMenuTree; const _tempTree = this.tempMenuTree;
const result = this.findTargetLevelIndex(_tempTree, 2, []); const result = this.findTargetLevelIndex(_tempTree, 2, []);
this.comDefaultOpeneds = result; // this.comDefaultOpeneds = result;
} }
}, },
findTargetLevelIndex(data = [], level = level, result = []) { findTargetLevelIndex(data = [], level = level, result = []) {
......
<template> <template>
<div class="project-cost-ledger-detail"> <div class="project-cost-ledger-detail">
<div class="project-cost-ledger-detail-inner"> <div class="project-cost-ledger-detail-inner">
<project-detail-header :current="current" :breadCrumbTree="createProjectBreadCrumbTree"></project-detail-header> <project-detail-header :detail-info="detailInfo" :current="current"
:breadCrumbTree="createProjectBreadCrumbTree(toggleTabs)"></project-detail-header>
<!-- tab切换栏 --> <!-- tab切换栏 -->
<dsk-tab-toggle v-model="current" :tabs="toggleTabs" @tabToggle="tabToggle" :disabled="tabsDisabled"></dsk-tab-toggle> <dsk-tab-toggle v-model="current" :tabs="toggleTabs" @tabToggle="tabToggle" :disabled="tabsDisabled"></dsk-tab-toggle>
<!-- tab切换组件容器 --> <!-- tab切换组件容器 -->
...@@ -65,11 +66,7 @@ export default { ...@@ -65,11 +66,7 @@ export default {
projectId: "", projectId: "",
current: "", current: "",
// 详情信息变量 // 详情信息变量
detailInfo: { detailInfo: {},
projectId: "1754425038355890177",
cbStage: 0,
cbType: 1
},
tabsDisabled: false, tabsDisabled: false,
toggleTabs: [ toggleTabs: [
{ {
...@@ -80,31 +77,37 @@ export default { ...@@ -80,31 +77,37 @@ export default {
{ {
value: "directCost", value: "directCost",
name: "直接费成本", name: "直接费成本",
cbType: 0,
id: v4() id: v4()
}, },
{ {
value: "feedSummary", value: "feedSummary",
name: "工料汇总", name: "工料汇总",
cbType: 1,
id: v4() id: v4()
}, },
{ {
name: "措施项目", name: "措施项目",
value: "measureItem", value: "measureItem",
cbType: 2,
id: v4() id: v4()
}, },
{ {
name: "其他项目", name: "其他项目",
value: "otherItems", value: "otherItems",
cbType: 3,
id: v4() id: v4()
}, },
{ {
name: "现场经费", name: "现场经费",
value: "fieldExpenses", value: "fieldExpenses",
cbType: 4,
id: v4() id: v4()
}, },
{ {
name: "成本汇总", name: "成本汇总",
value: "cost", value: "cost",
cbType: 5,
id: v4() id: v4()
}, },
{ {
...@@ -125,9 +128,22 @@ export default { ...@@ -125,9 +128,22 @@ export default {
}, },
//计算集 //计算集
computed: { computed: {
createProjectBreadCrumbTree() {
},
//方法集
methods: {
async init() {
try { try {
const _tempArray = cloneDeep(this.toggleTabs.map(item => { // 监听组件emit事件订阅 需要刷新数据
this.$on("refreshDetail", this.getProjectDetail);
await this.getProjectQuery();
} catch (error) {
}
},
createProjectBreadCrumbTree(tabs) {
try {
const _tempArray = cloneDeep(tabs.map(item => {
item.path = item.value; item.path = item.value;
item.breadcrumbName = item.name; item.breadcrumbName = item.name;
return item; return item;
...@@ -141,34 +157,21 @@ export default { ...@@ -141,34 +157,21 @@ export default {
triggerHandle: false, triggerHandle: false,
childrenBreadCrumb: _tempArray childrenBreadCrumb: _tempArray
}], }],
}; };
return [_temp]; return [_temp];
} catch (error) { } catch (error) {
console.log(error); console.log(error);
} }
}
},
//方法集
methods: {
async init() {
try {
// 监听组件emit事件订阅 需要刷新数据
this.$on("refreshDetail", this.getProjectDetail);
await this.getProjectQuery();
} catch (error) {
}
}, },
async getProjectQuery() { async getProjectQuery() {
try { try {
this.tabsDisabled = true; this.tabsDisabled = true;
const { query } = this.$route; const { query } = this.$route;
// if (!query.projectId) { if (!query.projectId) {
// this.$message.error("缺少项目id"); this.$message.error("缺少项目id");
// this.tabsDisabled = true; this.tabsDisabled = true;
// return; return;
// }; };
this.projectId = query.projectId; this.projectId = query.projectId;
// 获取详情 保证详情获取完毕 再执行tab命中 进行生命周期 // 获取详情 保证详情获取完毕 再执行tab命中 进行生命周期
await this.getProjectDetail(query.projectId); await this.getProjectDetail(query.projectId);
...@@ -178,6 +181,7 @@ export default { ...@@ -178,6 +181,7 @@ export default {
// 默认命中工程项目信息 // 默认命中工程项目信息
this.current = "basicEngineeringInformation"; this.current = "basicEngineeringInformation";
}; };
this.setCbType(this.current);
this.tabsDisabled = false; this.tabsDisabled = false;
} catch (error) { } catch (error) {
console.log(error); console.log(error);
...@@ -185,14 +189,36 @@ export default { ...@@ -185,14 +189,36 @@ export default {
}, },
async getProjectDetail(projectId) { async getProjectDetail(projectId) {
try { try {
const detail = await getProjectDetailApi(projectId);
if (detail.code == 200 && detail.data) {
if (detail.data.id) detail.data["projectId"] = detail.data.id;
detail.data["projectId"] = "1754425038355890177";
detail.data["cbStage"] = 0;
this.detailInfo = detail.data;
}
} catch (error) { } catch (error) {
console.log(error);
}
},
getCurrentTab(current) {
if (current) {
const result = this.toggleTabs.find(item => item.value == current);
return result;
}
},
setCbType(current) {
if (!current) {
delete this.detailInfo["cbType"];
return;
}
const _temp = this.getCurrentTab(current);
if (_temp && (_temp.cbType ?? false)) {
this.$set(this.detailInfo, "cbType", _temp.cbType);
} }
}, },
// 当前命中的current // 当前命中的current
tabToggle(value) { tabToggle(value, valueCurrentObj) {
this.setCbType(value);
} }
}, },
} }
......
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