Commit 610010ea 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 bbe323ec 4ebe0436
package com.dsk.cscec.domain; package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
...@@ -48,6 +49,7 @@ public class CbSummaryActual implements Serializable { ...@@ -48,6 +49,7 @@ public class CbSummaryActual implements Serializable {
/** /**
* 删除状态(0:否、2:是) * 删除状态(0:否、2:是)
*/ */
@TableLogic
private Integer delFlag; private Integer delFlag;
} }
...@@ -49,15 +49,17 @@ public class CbSummaryCostAccountImportListener extends AnalysisEventListener<Cb ...@@ -49,15 +49,17 @@ public class CbSummaryCostAccountImportListener extends AnalysisEventListener<Cb
int count = StringUtil.count(importVo.getNumber(), "-"); int count = StringUtil.count(importVo.getNumber(), "-");
importVo.setLevel(count + 1); importVo.setLevel(count + 1);
} else { } else {
failureNum++; // failureNum++;
failureMsg.append("<br/>").append("第" + sort + "条数据序号为空"); // failureMsg.append("<br/>").append("第" + sort + "条数据序号为空");
return; // return;
throw new ServiceException("表格中存在'序号'列为空数据!");
} }
//成本科目不能为空 //成本科目不能为空
if (StringUtil.isBlank(importVo.getCbName())) { if (StringUtil.isBlank(importVo.getCbName())) {
failureNum++; // failureNum++;
failureMsg.append("<br/>").append("第" + sort + "条数据成本科目为空"); // failureMsg.append("<br/>").append("第" + sort + "条数据成本科目为空");
return; // return;
throw new ServiceException("表格中存在'成本科目'列为空数据!");
} }
//父级数据处理 //父级数据处理
......
...@@ -45,9 +45,10 @@ public class CbSummaryProjectImportListener extends AnalysisEventListener<CbSumm ...@@ -45,9 +45,10 @@ public class CbSummaryProjectImportListener extends AnalysisEventListener<CbSumm
public void invoke(CbSummaryProjectImportVo importVo, AnalysisContext context) { public void invoke(CbSummaryProjectImportVo importVo, AnalysisContext context) {
//名称不能为空 //名称不能为空
if (StringUtil.isBlank(importVo.getCbName())) { if (StringUtil.isBlank(importVo.getCbName())) {
failureNum++; // failureNum++;
failureMsg.append("<br/>").append("第" + sort + "条数据名称为空"); // failureMsg.append("<br/>").append("第" + sort + "条数据名称为空");
return; // return;
throw new ServiceException("表格中存在'名称'列为空数据!");
} }
//添加父级数据 //添加父级数据
if (sort == 0) { if (sort == 0) {
...@@ -70,9 +71,10 @@ public class CbSummaryProjectImportListener extends AnalysisEventListener<CbSumm ...@@ -70,9 +71,10 @@ public class CbSummaryProjectImportListener extends AnalysisEventListener<CbSumm
.filter(vo -> StringUtil.isNotBlank(vo.getNumber())).limit(1).map(CbSummaryProjectImportVo::getLevel).toArray(); .filter(vo -> StringUtil.isNotBlank(vo.getNumber())).limit(1).map(CbSummaryProjectImportVo::getLevel).toArray();
//数据序号错误 //数据序号错误
if (ObjectUtil.isEmpty(objects)) { if (ObjectUtil.isEmpty(objects)) {
failureNum++; // failureNum++;
failureMsg.append("<br/>").append("第" + sort + "条数据序号错误"); // failureMsg.append("<br/>").append("第" + sort + "条数据序号错误");
return; // return;
throw new ServiceException("'序号'列数据错误,无法匹配层级!");
} }
Integer lastLevel = (Integer) objects[0]; Integer lastLevel = (Integer) objects[0];
......
...@@ -71,16 +71,16 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary ...@@ -71,16 +71,16 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary
@Override @Override
public void importCbSummary(Long projectId) { public void importCbSummary(Long projectId) {
//获取待解析和待删除文件信息 //获取待解析和解析失败文件信息
List<CbProjectFile> cbProjectFiles = cbProjectFileMapper.selectAnalysisList(projectId, CbProjectConstants.CB_TYPE_SUMMARY, null); List<CbProjectFile> cbProjectFiles = cbProjectFileMapper.selectAnalysisList(projectId, CbProjectConstants.CB_TYPE_SUMMARY, null);
//解析数据 //解析数据
cbProjectFiles.forEach(cbProjectFile -> { cbProjectFiles.forEach(cbProjectFile -> {
if (cbProjectFile.getDelFlag() == 1) { // if (cbProjectFile.getDelFlag() == 1) {
//根据fileId删除相关基础数据,并删除文件 // //根据fileId删除相关基础数据,并删除文件
baseMapper.delete(new LambdaQueryWrapper<CbSummary>().eq(CbSummary::getCbProjectFileId, cbProjectFile.getId())); // baseMapper.delete(new LambdaQueryWrapper<CbSummary>().eq(CbSummary::getCbProjectFileId, cbProjectFile.getId()));
cbProjectFileMapper.removeById(cbProjectFile.getId()); // cbProjectFileMapper.removeById(cbProjectFile.getId());
} else { // } else {
try { try {
if (cbProjectFile.getFileName().contains("项目")) { if (cbProjectFile.getFileName().contains("项目")) {
saveCbSummaryProject(projectId, cbProjectFile); saveCbSummaryProject(projectId, cbProjectFile);
...@@ -96,7 +96,7 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary ...@@ -96,7 +96,7 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary
cbProjectFile.setFailRemark("失败原因:" + e.getMessage()); cbProjectFile.setFailRemark("失败原因:" + e.getMessage());
cbProjectFileMapper.updateById(cbProjectFile); cbProjectFileMapper.updateById(cbProjectFile);
} }
} // }
}); });
...@@ -152,6 +152,9 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary ...@@ -152,6 +152,9 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary
CbSummary parent = cbSummaryList.stream().filter(summary -> summary.getSort() < cbSummary.getSort() && summary.getLevel() == parentLevel) CbSummary parent = cbSummaryList.stream().filter(summary -> summary.getSort() < cbSummary.getSort() && summary.getLevel() == parentLevel)
.max(Comparator.comparing(CbSummary::getSort)).get(); .max(Comparator.comparing(CbSummary::getSort)).get();
if(ObjectUtil.isNull(parent)){
throw new ServiceException("'序号'列数据错误,无法匹配层级!");
}
cbSummary.setParentId(parent.getId()); cbSummary.setParentId(parent.getId());
} }
...@@ -224,7 +227,9 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary ...@@ -224,7 +227,9 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary
Integer parentLevel = cbSummary.getLevel() - 1; Integer parentLevel = cbSummary.getLevel() - 1;
CbSummary parent = cbSummaryList.stream().filter(summary -> summary.getSort() < cbSummary.getSort() && summary.getLevel() == parentLevel) CbSummary parent = cbSummaryList.stream().filter(summary -> summary.getSort() < cbSummary.getSort() && summary.getLevel() == parentLevel)
.max(Comparator.comparing(CbSummary::getSort)).get(); .max(Comparator.comparing(CbSummary::getSort)).get();
if(ObjectUtil.isNull(parent)){
throw new ServiceException("'序号'列数据错误,无法匹配层级!");
}
cbSummary.setParentId(parent.getId()); cbSummary.setParentId(parent.getId());
} }
...@@ -290,6 +295,11 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary ...@@ -290,6 +295,11 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary
children.setTaxExclusiveExpenseTotal(total.get("taxExclusiveExpenseTotal")); children.setTaxExclusiveExpenseTotal(total.get("taxExclusiveExpenseTotal"));
children.setTaxInclusiveExpenseTotal(total.get("taxInclusiveExpenseTotal")); children.setTaxInclusiveExpenseTotal(total.get("taxInclusiveExpenseTotal"));
}); });
if (CollectionUtil.isNotEmpty(childrenList)) {
cbSummaryActualListVo.setHasChildren(1);
} else {
cbSummaryActualListVo.setHasChildren(0);
}
if (0 == cbSummaryActualListVo.getLevel() && 1 == bo.getCbType()) { if (0 == cbSummaryActualListVo.getLevel() && 1 == bo.getCbType()) {
//项目汇总一级列表 //项目汇总一级列表
......
...@@ -2,13 +2,24 @@ import request from '@/utils/request'; ...@@ -2,13 +2,24 @@ import request from '@/utils/request';
/** /**
* 获取咨询机构合作列表 * 获取咨询机构合作列表
* @param {*} data * @param {*} params
* @returns * @returns
*/ */
export const getConsultingAgencyCooperationListApi = (data) => request({ export const getConsultingAgencyCooperationListApi = (params) => request({
url: "/customerInfo/advisoryList", url: "/customerInfo/advisoryList",
method: "get", method: "get",
data params
});
/**
* 获取咨询机构合作工程类型
* @param {*} params
* @returns
*/
export const getConsultingAgencyCooperationTypesApi = (params) => request({
url: "/dProjectType/getAll",
method: "get",
params
}); });
/** /**
......
...@@ -37,7 +37,7 @@ export function editProjectInfo(data) { ...@@ -37,7 +37,7 @@ export function editProjectInfo(data) {
//删除项目 //删除项目
export function batchDeleteProject(ids) { export function batchDeleteProject(ids) {
return request({ return request({
url: '/cbProjectRecord/batchDeleteProject/'+ids, url: '/cbProjectRecord/batchDeleteProject/' + ids,
method: 'Delete', method: 'Delete',
}); });
} }
...@@ -103,7 +103,7 @@ export function getProjectList(data) { ...@@ -103,7 +103,7 @@ export function getProjectList(data) {
return request({ return request({
url: '/cbProjectRecord/getProjectList', url: '/cbProjectRecord/getProjectList',
method: 'get', method: 'get',
params:data params: data
}); });
} }
...@@ -112,7 +112,7 @@ export function getProjectHistoryInfo(data) { ...@@ -112,7 +112,7 @@ export function getProjectHistoryInfo(data) {
return request({ return request({
url: '/cbProjectRecord/getProjectHistoryInfo', url: '/cbProjectRecord/getProjectHistoryInfo',
method: 'get', method: 'get',
params:data params: data
}); });
} }
...@@ -121,19 +121,20 @@ export const getProfitLossMenuTreeApi = (params = {}) => request({ ...@@ -121,19 +121,20 @@ export const getProfitLossMenuTreeApi = (params = {}) => request({
url: "/cbSummary/cbNameList", url: "/cbSummary/cbNameList",
method: "get", method: "get",
params params
}) });
//盈亏分析对比 数据列表 //盈亏分析对比 数据列表
export function getAnalysislist(data) { export function getAnalysislist(data) {
return request({ return request({
url: '/cb/gain/loss/analysis/list', url: '/cb/gain/loss/analysis/list',
method: 'get', method: 'get',
params:data params: data
}); });
} }
// 措施项目 左侧菜单 // 措施项目 左侧菜单
export function getMeasureslist(projectId) { export function getMeasureslist(projectId) {
return request({ return request({
url: '/cb/cost/measures/type/'+projectId, url: '/cb/cost/measures/type/' + projectId,
method: 'get', method: 'get',
}); });
} }
...@@ -142,7 +143,7 @@ export function getCostMeasureslist(data) { ...@@ -142,7 +143,7 @@ export function getCostMeasureslist(data) {
return request({ return request({
url: '/cb/cost/measures/list', url: '/cb/cost/measures/list',
method: 'get', method: 'get',
params:data params: data
}); });
} }
...@@ -151,7 +152,7 @@ export function getSummarydata(data) { ...@@ -151,7 +152,7 @@ export function getSummarydata(data) {
return request({ return request({
url: '/cb/cost/measures/summary/data', url: '/cb/cost/measures/summary/data',
method: 'post', method: 'post',
data:data data: data
}); });
} }
//措施费推送工程量 //措施费推送工程量
...@@ -175,7 +176,7 @@ export function projectVolume(data) { ...@@ -175,7 +176,7 @@ export function projectVolume(data) {
// 工料汇总 // 工料汇总
/** /**
* 获取料汇总左侧菜单 * 获取料汇总左侧菜单
* @param {*} params * @param {*} params
* @returns * @returns
*/ */
...@@ -183,7 +184,23 @@ export const getFeedSummaryMenuTreeApi = (params = {}) => request({ ...@@ -183,7 +184,23 @@ export const getFeedSummaryMenuTreeApi = (params = {}) => request({
url: "/cb/quantity/summary/subjectTree", url: "/cb/quantity/summary/subjectTree",
method: "get", method: "get",
params params
}) });
/**
* 获取科目月份列表
* @param {{
* cbSubjectName : string;
* recordDate : string;
* projectId : number;
* cbStage : number
* }} params
* @returns
*/
export const getFeedSummaryListApi = (params = {}) => request({
url: "/cb/quantity/summary/subjectList",
method: "get",
params
});
// 其他项目 // 其他项目
...@@ -191,10 +208,10 @@ export const getFeedSummaryMenuTreeApi = (params = {}) => request({ ...@@ -191,10 +208,10 @@ export const getFeedSummaryMenuTreeApi = (params = {}) => request({
export const getProjectOtherMenuTreeApi = (relatedId) => request({ export const getProjectOtherMenuTreeApi = (relatedId) => request({
url: '/cb/projectOther/type/' + relatedId, url: '/cb/projectOther/type/' + relatedId,
method: "get", method: "get",
}) });
//其他费用-费用汇总 //其他费用-费用汇总
export const getProjectOtherStatistics = (relatedId) => request({ export const getProjectOtherStatistics = (relatedId) => request({
url: '/cb/projectOther/statistics/' + relatedId, url: '/cb/projectOther/statistics/' + relatedId,
method: "get", method: "get",
}) });
<template> <template>
<div class="dsk-table-header-setting" @click="showHeaderSetting"> <div class="dsk-table-header-setting">
<div class="event-target-container" @click="showHeaderSetting">
<svg-icons :icon-class="'table-header-setting-icon'" :class-name="'table-header-setting-icon'"></svg-icons> <svg-icons :icon-class="'table-header-setting-icon'" :class-name="'table-header-setting-icon'"></svg-icons>
<div class="table-header-setting-text">表头设置</div> <div class="table-header-setting-text">表头设置</div>
</div>
<transition appear name="head" mode="out-in"> <transition appear name="head" mode="out-in">
<setting-bar v-if="showHeaderSettingStatus" :settingList="settingList" @settingChange="settingChange" <setting-bar v-if="showHeaderSettingStatus" :settingList="settingList" @settingChange="settingChange"
@settingClose="showHeaderSettingStatus = false"></setting-bar> @settingClose="showHeaderSettingStatus = false"></setting-bar>
...@@ -39,6 +41,10 @@ export default { ...@@ -39,6 +41,10 @@ export default {
//方法集 //方法集
methods: { methods: {
showHeaderSetting() { showHeaderSetting() {
if (this.showHeaderSettingStatus) {
this.showHeaderSettingStatus = false;
return;
};
this.showHeaderSettingStatus = true; this.showHeaderSettingStatus = true;
}, },
settingChange(use) { settingChange(use) {
...@@ -62,6 +68,11 @@ export default { ...@@ -62,6 +68,11 @@ export default {
} }
} }
.event-target-container {
display: flex;
align-items: center;
}
.table-header-setting-icon { .table-header-setting-icon {
cursor: pointer; cursor: pointer;
} }
......
...@@ -139,7 +139,7 @@ export default { ...@@ -139,7 +139,7 @@ export default {
}, },
toCooperateDetail(row) { toCooperateDetail(row) {
if (!row.advisoryBodyCid) return this.$message.warning("缺少咨询机构id"); if (!row.advisoryBodyCid) return this.$message.warning("缺少咨询机构id");
this.$tab.openPage(`${row.advisoryBodyName}合作明细`, `/enterprise/${encodeStr(row.advisoryBodyCid)}?path=cooperationRecord&companyName=${replaceDomTags(row.advisoryBodyName)}`); this.$tab.openPage(`${row.advisoryBodyName}合作明细`, `/enterprise/${encodeStr(row.advisoryBodyCid)}?path=consultingAgencyCooperation&companyName=${replaceDomTags(row.advisoryBodyName)}`);
}, },
// 跳转到企业详情 // 跳转到企业详情
viewEnterprise(row) { viewEnterprise(row) {
......
<template>
<div class="consulting-agency-container">
<el-form :model="comProjectDetailInfo" :rules="rules" :show-message="false" class="basic-engineering-information-inner"
ref="comProjectDetailForm">
<!-- 基础信息 -->
<div class="project-basic-information project-detault-module">
<div class="info-module-title"><span>基础信息</span></div>
<table>
<!-- <colgroup>
<col>
<col :style="{width : tableKeyWidth}">
<col>
<col :style="{width : tableKeyWidth}">
</colgroup> -->
<tr>
<td class="table-key">咨询机构名称</td>
<td :class="[comIsModify ? 'td-none-padding' : '']">
<div class="normal-value" v-if="!comIsModify">
{{comProjectDetailInfo.advisoryBody && comProjectDetailInfo.advisoryBody.advisoryBodyName ? comProjectDetailInfo.advisoryBody.advisoryBodyName : "-"}}
</div>
<el-form-item label="" v-if="comIsModify" prop="advisoryBody.advisoryBodyName">
<el-input v-model="comProjectDetailInfo.advisoryBody.advisoryBodyName" clearable v-focus placeholder="请输入完整咨询机构名称"
@input="searchConsulting"></el-input>
</el-form-item>
</td>
<td class="table-key">法人代表</td>
<td>
{{comProjectDetailInfo.corporatePerson ? comProjectDetailInfo.corporatePerson : "-"}}
</td>
</tr>
<tr>
<!-- <td class="table-key">法人联系电话</td>
<td>
{{comProjectDetailInfo.corporatePerson ? comProjectDetailInfo.corporatePerson : "-"}}
</td> -->
<td class="table-key">注册地址</td>
<td colspan="3">
{{comProjectDetailInfo.regAddress ? comProjectDetailInfo.regAddress : "-"}}
</td>
</tr>
</table>
</div>
<!-- 项目联系人 -->
<div class="project-contact project-detault-module">
<div class="info-module-title"><span>项目联系人</span></div>
<table>
<!-- <colgroup>
<col>
<col :style="{width : tableKeyWidth}">
<col>
<col :style="{width : tableKeyWidth}">
</colgroup> -->
<tr>
<td class="table-key">项目负责人</td>
<td :class="[comIsModify ? 'td-none-padding' : '']">
<div class="normal-value" v-if="!comIsModify">
{{comProjectDetailInfo.advisoryBodyProject && comProjectDetailInfo.advisoryBodyProject.projectLeader ? comProjectDetailInfo.advisoryBodyProject.projectLeader : "-"}}
</div>
<el-form-item label="" v-if="comIsModify" prop="advisoryBodyProject.projectLeader">
<el-input v-model="comProjectDetailInfo.advisoryBodyProject.projectLeader" clearable placeholder="请输入项目负责人"></el-input>
</el-form-item>
</td>
<td class="table-key">项目负责人专业</td>
<td :class="[comIsModify ? 'td-none-padding' : '']">
<div class="normal-value" v-if="!comIsModify">
{{comProjectDetailInfo.advisoryBodyProject && comProjectDetailInfo.advisoryBodyProject.projectLeaderMajor ? comProjectDetailInfo.advisoryBodyProject.projectLeaderMajor : "-"}}
</div>
<el-form-item label="" v-if="comIsModify" prop="advisoryBodyProject.projectLeaderMajor">
<el-input v-model="comProjectDetailInfo.advisoryBodyProject.projectLeaderMajor" clearable placeholder="请输入项目负责人专业"></el-input>
</el-form-item>
</td>
</tr>
<tr>
<td class="table-key">联系电话</td>
<td colspan="3" :class="[comIsModify ? 'td-none-padding' : '']">
<div class="normal-value" v-if="!comIsModify">
{{comProjectDetailInfo.advisoryBodyProject && comProjectDetailInfo.advisoryBodyProject.projectLeaderPhone ? comProjectDetailInfo.advisoryBodyProject.projectLeaderPhone : "-"}}
</div>
<el-form-item label="" v-if="comIsModify" prop="advisoryBodyProject.projectLeaderPhone">
<el-input v-model="comProjectDetailInfo.advisoryBodyProject.projectLeaderPhone" clearable placeholder="请输入项目负责人联系电话"></el-input>
</el-form-item>
</td>
</tr>
</table>
</div>
<!-- 项目结算信息 -->
<div class="project-settlement-information project-detault-module">
<div class="info-module-title"><span>项目结算信息</span></div>
<table>
<!-- <colgroup>
<col>
<col :style="{width : tableKeyWidth}">
<col>
<col :style="{width : tableKeyWidth}">
</colgroup> -->
<tr>
<td class="table-key">结算开始时间</td>
<td :class="[comIsModify ? 'td-none-padding' : '']">
<div class="normal-value" v-if="!comIsModify">
{{comProjectDetailInfo.advisoryBodyProject && comProjectDetailInfo.advisoryBodyProject.settleStartTime ? comProjectDetailInfo.advisoryBodyProject.settleStartTime : "-"}}
</div>
<el-form-item label="" v-if="comIsModify" prop="advisoryBodyProject.settleStartTime">
<el-date-picker v-model="comProjectDetailInfo.advisoryBodyProject.settleStartTime" type="datetime" placeholder="选择结算开始时间"
:value-format="'yyyy-MM-dd HH:mm:ss'">
</el-date-picker>
</el-form-item>
</td>
<td class="table-key">结算完成时间</td>
<td :class="[comIsModify ? 'td-none-padding' : '']">
<div class="normal-value" v-if="!comIsModify">
{{comProjectDetailInfo.advisoryBodyProject && comProjectDetailInfo.advisoryBodyProject.settleFinishTime ? comProjectDetailInfo.advisoryBodyProject.settleFinishTime : "-"}}
</div>
<el-form-item label="" v-if="comIsModify" prop="advisoryBodyProject.settleFinishTime">
<el-date-picker v-model="comProjectDetailInfo.advisoryBodyProject.settleFinishTime" type="datetime" placeholder="选择结算完成时间"
:value-format="'yyyy-MM-dd HH:mm:ss'">
</el-date-picker>
</el-form-item>
</td>
</tr>
<tr>
<td class="table-key">是否为终审单位</td>
<td colspan="3">
<div class="normal-value" v-if="!comIsModify">
{{comProjectDetailInfo.advisoryBodyProject && statusCheck(comProjectDetailInfo.advisoryBodyProject.isFinalJudgeUnit) ? statusCheck(comProjectDetailInfo.advisoryBodyProject.isFinalJudgeUnit) : "-"}}
</div>
<el-form-item label="" v-if="comIsModify" prop="advisoryBodyProject.isFinalJudgeUnit">
<el-radio-group v-model="comProjectDetailInfo.advisoryBodyProject.isFinalJudgeUnit">
<el-radio :label="'0'"></el-radio>
<el-radio :label="'1'"></el-radio>
</el-radio-group>
</el-form-item>
</td>
</tr>
</table>
</div>
<!-- 自定义表单部分 -->
<el-form :model="form" class="custom-design-form-template" ref="customDesignFormTemplate" v-if="form.subfieldModuleList.length">
<div class="custom-design-form-module" v-for="(item,index) of form.subfieldModuleList" :key="item.uid">
<div class="info-module-title"><span>{{item.subfieldModuleName}}</span></div>
<div class="custom-module-content">
<!-- 生成行 -->
<div class="custom-module-row" v-for="(row,rowIndex) of item.childrentGroup" :key="rowIndex">
<div class="custom-module-item" v-for="(column,columnIndex) of row" :key="column.uid" :style="itemStyles(column,rowIndex,columnIndex)">
<div class="custom-item-key">
<div class="custom-item-key-inner" :class="{'is-required-key' : column.formAttribute.required}">
{{column.formAttribute.label}}
</div>
</div>
<!-- 组件容器 -->
<div class="custom-item-com-box">
<dsk-custom-item-render :custom-item="column" :custom-module-index="index" :custom-row-index="rowIndex"
:custom-item-index="columnIndex" :isModify="comIsModify"></dsk-custom-item-render>
</div>
</div>
</div>
</div>
</div>
</el-form>
</el-form>
</div>
</template>
<script>
import { searchConsultingApi, getCustomFormDetailApi, getCustomFormDataByProjectKeyApi } from "@/api/consultingOrgManagement";
import { elementMessageSingleton, jsonStrToObject, groupArray } from "@/utils";
import { cloneDeep } from "lodash-es";
import DskTextOverFlowTip from "@/components/DskTextOverFlowTip";
import DskCustomItemRender from "@/components/DskCustomItemRender";
export default {
name: "consultingAgency",
components: {
DskCustomItemRender,
DskTextOverFlowTip
},
props: {
projectDetailInfo: Object,
isModify: {
type: Boolean,
default: false
},
projectKey: {
type: String,
default: ""
}
},
directives: {
focus: {
inserted(el) {
el.querySelector(".el-input__inner").focus();
}
}
},
watch: {
projectDetailInfo: {
handler(newValue, oldValue) {
this.setInitData(this.comProjectDetailInfo, JSON.parse(JSON.stringify(newValue)), "comProjectDetailInfo");
this.setInitData(this.oldComProjectDetailInfo, JSON.parse(JSON.stringify(oldValue)), "oldComProjectDetailInfo");
},
deep: true
},
isModify: {
handler(newValue) {
this.comIsModify = newValue;
}
}
},
data() {
const phoneValidator = (rule, value, callback) => {
const phoneReg = /^1[3-9]\d{9}$/;
// if (!value && !value?.toString()?.trim()) {
// return callback(new Error(`请输入项目负责人联系电话`));
// }
if (value && !phoneReg.test(value)) {
return callback(new Error(`请输入正确的联系电话`));
}
return callback();
};
return {
comIsModify: this.isModify,
comProjectDetailInfo: {},
oldComProjectDetailInfo: {},
rules: {
"advisoryBody.advisoryBodyName": [{ required: true, trigger: ["blur", "change"], message: "咨询机构名称不能为空" }],
"advisoryBodyProject.projectLeaderPhone": [{ required: true, trigger: ["blur", "change"], validator: phoneValidator }],
},
tableKeyWidth: 0,
searchTimer: null,
loading: false,
formTemplate: {},
formTemplateData: {},
form: {
subfieldModuleList: []
},
oldSubfieldModuleList: []
};
},
//可访问data属性
created() {
this.setInitData(this.comProjectDetailInfo, JSON.parse(JSON.stringify(this.projectDetailInfo)), "comProjectDetailInfo");
this.setInitData(this.oldComProjectDetailInfo, JSON.parse(JSON.stringify(this.projectDetailInfo)), "oldComProjectDetailInfo");
this.setTableKeyWidth();
this.formTemplateInit();
},
//计算集
computed: {
},
//方法集
methods: {
itemStyles(item, index, selfIndex) {
const styles = {
width: `${item.formAttribute.width}%`
};
if (index > 0) {
styles["border-top"] = "unset";
}
if (selfIndex > 0) {
styles["border-left"] = "unset";
}
return styles;
},
setInitData(originData, mergeData, mergeKey) {
if (!mergeData.advisoryBody) mergeData.advisoryBody = {};
if (!mergeData.advisoryBodyProject) mergeData.advisoryBodyProject = {};
// 响应更新
this.$set(this, mergeKey, { ...this[mergeKey], ...mergeData });
},
statusCheck(status) {
if (status == "0") {
return "是";
}
if (status == "1") {
return "否";
}
return "";
},
async formTemplateInit() {
try {
this.loading = true;
this.$emit("searchLoadingChange", this.loading);
const _formTemplate = await this.getCustomFormDetail();
this.formTemplate = cloneDeep(_formTemplate);
let _formTemplateData = await this.getCustomFormDataByProjectKey(this.projectKey);
_formTemplateData ? this.formTemplateData = cloneDeep(_formTemplateData) : null;
await this.customFormRender(_formTemplate, _formTemplateData);
} catch (error) {
} finally {
this.loading = false;
this.$emit("searchLoadingChange", this.loading);
}
},
async customFormRender(formTemplate, formData) {
try {
// 缺失模板不渲染
if (!formTemplate || !formTemplate.jsonData) return;
const template = jsonStrToObject(formTemplate.jsonData);
const templateFormData = formData && formData.jsonData ? JSON.parse(formData.jsonData) : null;
if (template) {
// 模板
let subfieldModuleListTemplate = template.subfieldModuleList;
// 有表单数据先处理数据
if (templateFormData) {
subfieldModuleListTemplate = this.hasCustomFormDataHandle(subfieldModuleListTemplate, templateFormData);
}
// 渲染模板
this.renderTemplate(subfieldModuleListTemplate);
}
} catch (error) {
this.$message.error(`解析模板失败,${error.message}`);
console.log(error);
}
},
hasCustomFormDataHandle(formTemplate, formData) {
// console.log(formTemplate);
// console.log(formData);
formData.forEach(item => {
this.interComTemplateParent(formTemplate, item);
});
return cloneDeep(formTemplate);
},
interComTemplateParent(formTemplate, comItem) {
const module = formTemplate.find(item => item.uid === comItem.pid);
if (module) {
const index = module.children.findIndex(child => child.uid === comItem.uid);
// 找到模板 插入数据
if (index > -1) {
module.children[index].componentAttribute.value = comItem.componentAttribute.value;
}
}
},
renderTemplate(template) {
const table = this.createTemplateTable(template);
this.oldSubfieldModuleList = cloneDeep(table);
this.$set(this.form, "subfieldModuleList", table);
},
// 创建渲染table展示格式
createTemplateTable(list) {
/**
* @type {Array<any>}
*/
const tableList = list;
for (const iterator of tableList) {
const len = iterator?.children?.length;
if (len) {
const _childrentGroup = groupArray(iterator?.children, 100, "formAttribute.width");
// 分组过后的值
iterator["childrentGroup"] = cloneDeep(_childrentGroup);
}
}
return tableList;
},
async getCustomFormDataByProjectKey(projectKey) {
try {
const result = await getCustomFormDataByProjectKeyApi(projectKey);
if (result.code == 200 && result.data) {
return result.data;
}
return null;
} catch (error) {
}
},
async getCustomFormDetail() {
try {
const result = await getCustomFormDetailApi();
if (result.code == 200) {
return result.data ? result.data : {};
}
} catch (error) {
}
},
async setTableKeyWidth() {
try {
await this.$nextTick();
/**
* @type {HTMLDivElement}
*/
// const inner = this.$el.querySelector(".basic-engineering-information-inner");
// if (inner) {
// const td = parseInt((inner.offsetWidth - 140 * 2) / 2);
// this.tableKeyWidth = `${parseInt(parseFloat(td / inner.offsetWidth) * 100)}%`;
// }
this.tableKeyWidth = "180px";
} catch (error) {
}
},
cancelModify() {
this.comProjectDetailInfo = JSON.parse(JSON.stringify(this.oldComProjectDetailInfo));
this.$set(this.form, "subfieldModuleList", cloneDeep(this.oldSubfieldModuleList));
},
async searchConsulting(keywords) {
try {
if ((keywords || keywords == "0") && keywords?.toString()?.trim() && keywords?.toString()?.trim()?.length >= 1) {
this.clearSearchTimer();
this.loading = true;
this.$emit("searchLoadingChange", this.loading);
await new Promise((resolve, reject) => {
this.searchTimer = setTimeout(async () => {
try {
const result = await this.searchConsultingHandle(keywords.toString().trim());
if (result) {
this.updateTemplate(result);
}
resolve();
} catch (error) {
reject(error);
}
}, 1000);
});
}
} catch (error) {
console.log(error);
} finally {
this.loading = false;
this.$emit("searchLoadingChange", this.loading);
}
},
async searchConsultingHandle(keywords) {
try {
const searchResult = await searchConsultingApi(keywords);
if (searchResult.code == 200 && searchResult.data) {
return searchResult.data;
}
} catch (error) {
console.log(error);
}
},
updateTemplate(data) {
const updateMap = new Map([
["advisoryBody.advisoryBodyName", "advisoryBodyName"],
["advisoryBody.advisoryBodyCid", "advisoryBodyCid"],
["advisoryBody.businessScope", "businessScope"],
["isNewAdvisoryBody", "isNewAdvisoryBody"],
["corporatePerson", "corporatePerson"],
["regAddress", "regAddress"],
]);
this.setTemplateData(updateMap, data);
console.log(this.comProjectDetailInfo);
},
setTemplateData(mapData, data) {
/**
* @type {Map<string,string>}
*/
const _mapTemp = mapData;
// 寻找对应的赋值对象
for (const [key, value] of _mapTemp) {
const keys = key.split(".");
const len = keys.length;
if (len == 1) {
this.$set(this.comProjectDetailInfo, key, data[value]);
continue;
}
const currentObjectKey = keys[len - 2];
const currentKey = keys[len - 1];
const currentObject = this.findCurrent(this.comProjectDetailInfo, currentObjectKey);
this.$set(currentObject, currentKey, data[value]);
}
},
findCurrent(originData, key) {
for (const _key in originData) {
if (_key == key) {
return originData[_key];
}
if (Object.prototype.toString.call(originData[_key]) == "[object Object]") {
return this.findCurrent(originData[_key], key);
}
}
},
clearSearchTimer() {
clearTimeout(this.searchTimer);
this.searchTimer = null;
},
async updateConsultingDetail() {
try {
const flag = await this.$refs["comProjectDetailForm"].validate();
const customFormFlag = await this.$refs["customDesignFormTemplate"].validate();
if (flag && customFormFlag) {
// 通过验证校验咨询机构是否存在
const result = await this.searchConsultingHandle(this.comProjectDetailInfo.advisoryBody.advisoryBodyName);
if (result.advisoryBodyCid) {
const _temp = JSON.parse(JSON.stringify(this.comProjectDetailInfo));
const paramsData = {
isNewAdvisoryBody: _temp.isNewAdvisoryBody ? _temp.isNewAdvisoryBody : result.isNewAdvisoryBody,
projectKey: this.projectKey,
advisoryBodyCid: _temp.advisoryBody.advisoryBodyCid,
advisoryBodyName: _temp.advisoryBody.advisoryBodyName ?? "",
businessScope: _temp.advisoryBody.businessScope ?? "",
projectLeader: _temp.advisoryBodyProject.projectLeader ?? "",
projectLeaderMajor: _temp.advisoryBodyProject.projectLeaderMajor ?? "",
projectLeaderPhone: _temp.advisoryBodyProject.projectLeaderPhone ?? "",
projectLeaderPhone: _temp.advisoryBodyProject.projectLeaderPhone ?? "",
settleStartTime: _temp.advisoryBodyProject.settleStartTime ?? "",
settleFinishTime: _temp.advisoryBodyProject.settleFinishTime ?? "",
isFinalJudgeUnit: _temp.advisoryBodyProject.isFinalJudgeUnit ?? "",
};
const customFormData = this.saveCutomFormData();
const customFormParamsData = {
projectKey: this.projectKey,
templateId: this.formTemplate.templateId,
jsonData: JSON.stringify(customFormData)
};
// 处理自定义表单数据
this.$emit("editComProjectDetailSuccess", paramsData, customFormParamsData);
}
}
} catch (error) {
if (error) {
for (const key in error) {
const _temp = error[key];
_temp instanceof Array ? elementMessageSingleton("error", `${_temp[0].message}`) : null;
break;
}
}
}
},
saveCutomFormData() {
/**
* @type {Array<any>}
*/
let _array = cloneDeep(this.form.subfieldModuleList);
function flatCustomForm(arr) {
const _temp = [];
function flagArray(array) {
array.forEach(item => {
if (item?.length) {
flagArray(item);
} else {
_temp.push(item);
}
});
}
arr.forEach(item => {
flagArray(item.childrentGroup);
});
return _temp;
}
const _result = flatCustomForm(_array);
return _result;
}
},
}
</script>
<style lang="scss" scoped>
.consulting-agency-container {
width: 100%;
height: 100%;
background: #fff;
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
padding: 16px;
box-sizing: border-box;
overflow: auto;
::v-deep .basic-engineering-information-inner {
width: 100%;
.project-detault-module,
.custom-design-form-module {
.info-module-title {
line-height: 24px;
color: #232323;
font-weight: bold;
font-size: 16px;
margin-bottom: 16px;
display: flex;
align-items: center;
& > span {
display: inline-block;
position: relative;
padding-left: 8px;
box-sizing: border-box;
&::before {
content: "";
position: absolute;
left: 0px;
top: 50%;
transform: translateY(-50%);
background: rgba(35, 35, 35, 0.8);
width: 2px;
height: 14px;
}
}
}
.el-form-item {
position: relative;
left: 0px;
top: 0px;
width: 100%;
height: 100%;
margin-bottom: 0px;
z-index: 9;
&.is-error {
.el-form-item__content {
.el-input {
.el-input__inner {
border-color: #ff4949;
}
}
}
}
.el-form-item__content {
height: 100%;
font-size: 12px;
line-height: unset;
.el-input {
height: 100%;
font-size: 12px;
}
.el-input__inner {
height: 40px;
line-height: 40px;
border-radius: unset;
border-color: transparent;
color: #232323;
font-size: 12px;
font-weight: 400;
padding-left: 12px;
outline: unset;
box-sizing: border-box;
&:focus {
border: 1px solid #0081ff;
}
}
.el-date-editor {
width: 100%;
.el-input__prefix {
display: none;
}
}
.el-radio-group {
display: flex;
height: 100%;
align-items: center;
padding-left: 12px;
box-sizing: border-box;
.el-radio__input.is-checked .el-radio__inner {
border-color: #0081ff;
background: #0081ff;
}
.el-radio__input.is-checked + .el-radio__label {
color: #0081ff;
}
.el-radio__inner:hover {
border-color: #0081ff;
}
}
.el-textarea {
.el-textarea__inner {
resize: unset;
padding-left: 12px;
min-height: 76px !important;
border-radius: unset;
border-color: transparent;
color: #232323;
&:focus {
border: 1px solid #0081ff;
}
&::placeholder {
font-family: Arial, Helvetica, sans-serif !important;
font-size: 12px;
}
}
}
.el-select {
width: 100%;
}
}
}
table {
width: 100%;
border-spacing: 0;
border-collapse: collapse;
table-layout: fixed;
&,
th,
td {
border: 1px solid #e6eaf1;
box-sizing: border-box;
}
td {
padding: 9px 12px;
line-height: 22px;
color: #232323;
font-size: 12px;
position: relative;
.normal-value {
vertical-align: middle;
line-height: 22px;
}
}
.table-key {
background: #f0f3fa;
color: rgba(35, 35, 35, 0.8);
width: 180px;
&.lot {
height: 62px;
}
}
.td-none-padding {
padding: 0px;
}
.data-td {
width: calc(100% - 180px);
}
}
}
.project-contact,
.project-settlement-information {
margin-top: 24px;
}
.custom-design-form-template {
width: 100%;
.custom-design-form-module {
margin-top: 24px;
.custom-module-content {
display: flex;
flex-direction: column;
width: 100%;
/* border: 1px solid #e6eaf1; */
box-sizing: border-box;
.custom-module-row {
display: flex;
align-items: center;
}
.custom-module-item {
display: flex;
border: 1px solid #e6eaf1;
box-sizing: border-box;
.custom-item-key {
width: 180px;
min-height: 40px;
font-size: 12px;
background: #f0f3fa;
color: rgba(35, 35, 35, 0.8);
padding: 9px 12px;
border-right: 1px solid #e6eaf1;
box-sizing: border-box;
display: flex;
align-items: center;
.custom-item-key-inner {
width: 100%;
// white-space: nowrap;
// overflow: hidden;
// text-overflow: ellipsis;
&.is-required-key {
&::before {
content: "*";
color: #f56c6c;
margin-right: 4px;
}
}
}
}
.custom-item-com-box {
width: calc(100% - 180px);
min-height: 40px;
display: flex;
align-items: center;
}
}
}
}
}
}
}
</style>
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div class="head-form-new" :class="headerFixed ? 'headerFixed':''"> <div class="head-form-new" :class="headerFixed ? 'headerFixed':''">
<div class="common-title" v-if="title && title !='集团招标'">{{ title }}</div> <div class="common-title" v-if="title && title !='集团招标'">{{ title }}</div>
<div class="flex-box query-box"> <div class="flex-box query-box">
<div class="flex-box query-params"> <div class="flex-box query-params" v-if="comFormData && comFormData.length">
<div class="headForm-from"> <div class="headForm-from">
<div class="from-item" :key="i" v-for="(form, i) in comFormData"> <div class="from-item" :key="i" v-for="(form, i) in comFormData">
<!-- 单选 --> <!-- 单选 -->
......
...@@ -550,6 +550,14 @@ export default { ...@@ -550,6 +550,14 @@ export default {
margin-top: -5px; margin-top: -5px;
} }
} }
/* 禁用时 不需要选中文字颜色 */
::v-deep .el-menu-item {
&.is-disabled {
&:focus {
color: unset !important;
}
}
}
.is-disabled:hover { .is-disabled:hover {
color: rgba(35, 35, 35, 0.8) !important; color: rgba(35, 35, 35, 0.8) !important;
&:before { &:before {
......
...@@ -224,7 +224,7 @@ export default { ...@@ -224,7 +224,7 @@ export default {
} }
.el-table { .el-table {
.cell { .cell {
font-size: 14px; font-size: 12px;
} }
.el-table__header-wrapper { .el-table__header-wrapper {
min-height: 40px; min-height: 40px;
......
...@@ -64,7 +64,12 @@ ...@@ -64,7 +64,12 @@
<!-- 2、准入情况 --> <!-- 2、准入情况 -->
<access-condition v-if="currentPath.pathName=='accessCondition'" :company-id="companyId" :companyInfo="companyInfo"></access-condition> <access-condition v-if="currentPath.pathName=='accessCondition'" :company-id="companyId" :companyInfo="companyInfo"></access-condition>
<!-- 3、供应商合作记录 --> <!-- 3、供应商合作记录 -->
<cooperation-record v-if="currentPath.pathName=='cooperationRecord'" :company-id="companyId" :company-name="companyName"></cooperation-record> <cooperation-record v-if="currentPath.pathName=='cooperationRecord'" :company-id="companyId"
:company-name="companyName"></cooperation-record>
<!-- 4、施工业绩 -->
<construction-performance v-if="currentPath.pathName=='constructionPerformance'" :company-id="companyId"></construction-performance>
<!-- 5、在施工程情况 -->
<construction-situation v-if="currentPath.pathName=='constructionSituation'" :company-id="companyId"></construction-situation>
</template> </template>
<template v-if="customerId && isCustomer"> <template v-if="customerId && isCustomer">
<!-- 商务信息 --> <!-- 商务信息 -->
...@@ -138,6 +143,8 @@ import Gjjl from "../../project/projectList/component/gjjl"; //跟进记录 ...@@ -138,6 +143,8 @@ import Gjjl from "../../project/projectList/component/gjjl"; //跟进记录
import ConsultingAgencyCooperation from "@/views/detail/party-a/internalCooperation/consultingAgencyCooperation"; //内部合作 咨询机构合作 import ConsultingAgencyCooperation from "@/views/detail/party-a/internalCooperation/consultingAgencyCooperation"; //内部合作 咨询机构合作
import AccessCondition from "@/views/detail/party-a/internalCooperation/accessCondition"; //内部合作 准入情况 import AccessCondition from "@/views/detail/party-a/internalCooperation/accessCondition"; //内部合作 准入情况
import CooperationRecord from "@/views/detail/party-a/internalCooperation/cooperationRecord"; //内部合作 准入情况 import CooperationRecord from "@/views/detail/party-a/internalCooperation/cooperationRecord"; //内部合作 准入情况
import ConstructionPerformance from "@/views/detail/party-a/internalCooperation/constructionPerformance"; //内部合作 施工业绩
import ConstructionSituation from "@/views/detail/party-a/internalCooperation/constructionSituation"; //内部合作 在施工程情况
import { import {
urbanInvestmentPage, urbanInvestmentPage,
} from '@/api/detail/party-a/urbanLnvestment'; } from '@/api/detail/party-a/urbanLnvestment';
...@@ -189,7 +196,9 @@ export default { ...@@ -189,7 +196,9 @@ export default {
AccessCondition, AccessCondition,
CooperationRecord, CooperationRecord,
CooperativeConstructionUnit, CooperativeConstructionUnit,
CooperativeGroup CooperativeGroup,
ConstructionPerformance,
ConstructionSituation
}, },
data() { data() {
return { return {
......
<template>
<div class="construction-performance-container">
<head-form-new title="施工业绩" :query-params="queryParams" :total="tableDataTotal" :isExcel="false" @handle-search="handleSearch"
ref="searchFormNew" />
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<tables v-if="!isSkeleton" :indexFixed="true" :tableData="tableData" :forData="forData" :tableDataTotal="tableDataTotal"
:queryParams="queryParams" @handle-current-change="handleCurrentChange">
</tables>
</div>
</template>
<script>
import skeleton from '../component/skeleton';
import mixin from '@/views/detail/party-a/mixins/mixin';
import { } from "@/api/internalCooperation";
import { } from "@/api/common";
export default {
name: "constructionPerformance",
mixins: [mixin],
components: {
skeleton
},
props: ['companyId'],
data() {
return {
queryParams: {
advisoryBodyCid: this.companyId,
pageNum: 1,
pageSize: 10,
},
forData: [
{ label: '标志性工程', prop: 'bzxgc', width: '245', showOverflowTooltip: true },
{ label: '年度', prop: 'nd', width: '122' },
{ label: '所在区域', prop: 'szqy', width: '101' },
{ label: '所属省份', prop: 'sssf', width: '101' },
{ label: '施工面积(㎡)', prop: 'sgmj', width: '109' },
{ label: '年施工产值(亿)', prop: 'nsgcz', width: '121' },
{ label: '所获荣誉', prop: 'shry', width: '73' },
{ label: '备注说明', prop: 'bzsm', minWidth: '121' },
{ label: '考察项目', prop: 'kcxm', minWidth: '245', showOverflowTooltip: true },
{ label: '考察公司', prop: 'kcgs', minWidth: '192', showOverflowTooltip: true },
],
//列表
tableLoading: false,
tableData: [
{
bzxgc: "黄阁水厂二期扩建工程设计咨询服务项目",
nd: "2023年",
szqy: "华北地区",
sssf: "河北省",
sgmj: "231.25",
nsgcz: "12",
shry: "优质工程",
bzsm: "",
kcxm : "黄阁水厂二期扩建工程设计咨询服务项目",
kcgs : "中国建筑一局第二建筑有限公司"
},
{
bzxgc: "黄阁水厂二期扩建工程设计咨询服务项目",
nd: "2023年",
szqy: "华北地区",
sssf: "河北省",
sgmj: "231.25",
nsgcz: "23",
shry: "优质工程",
bzsm: "",
kcxm : "黄阁水厂二期扩建工程设计咨询服务项目",
kcgs : "中国建筑一局第二建筑有限公司"
},
],
tableDataTotal: 2,
isSkeleton: true,
};
},
//可访问data属性
created() {
this.initDetail();
},
//计算集
computed: {
},
//方法集
methods: {
async initDetail() {
try {
await this.handleQuery();
} catch (error) {
}
},
async handleQuery(params) {
try {
// let data = params ? params : this.queryParams;
// this.isSkeleton = true;
// const res = await getConsultingAgencyCooperationListApi(data);
// this.tableData = res.rows ? res.rows : [];
// this.tableDataTotal = res.total ? res.total : 0;
} catch (error) {
console.log(error);
} finally {
this.isSkeleton = false;
}
},
async handleSearch() {
try {
} catch (error) {
}
}
},
}
</script>
<style lang="scss" scoped>
.construction-performance-container {
background: #ffffff;
border-radius: 4px;
padding: 16px;
input {
border: 1px solid #efefef;
}
::v-deep .el-form-item {
margin-right: 8px !important;
}
.query-box {
margin: 10px 0 20px;
}
.cell-span {
display: inline-block;
position: relative;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 4;
cursor: pointer;
> span {
display: inline-block;
width: 37px;
position: absolute;
right: 0;
bottom: 0;
background-color: #fff;
z-index: 1;
}
}
@import "@/assets/styles/search-common.scss";
}
</style>
<template>
<div class="construction-situation-container">
<head-form-new title="在施工程情况" :query-params="queryParams" :total="tableDataTotal" :isExcel="false" @handle-search="handleSearch"
ref="searchFormNew" />
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<tables v-if="!isSkeleton" :indexFixed="true" :tableData="tableData" :forData="forData" :tableDataTotal="tableDataTotal"
:queryParams="queryParams" @handle-current-change="handleCurrentChange">
</tables>
</div>
</template>
<script>
import skeleton from '../component/skeleton';
import mixin from '@/views/detail/party-a/mixins/mixin';
import { } from "@/api/internalCooperation";
import { } from "@/api/common";
export default {
name: "constructionSituation",
mixins: [mixin],
components: {
skeleton
},
props: ['companyId'],
data() {
return {
queryParams: {
advisoryBodyCid: this.companyId,
pageNum: 1,
pageSize: 10,
},
forData: [
{ label: '工程名称', prop: 'gcmc', width: '245', showOverflowTooltip: true },
{ label: '施工承包范围', prop: 'sgcbfw', width: '101' },
{ label: '建筑平面(㎡)', prop: 'szqy', width: '109' },
{ label: '队长名称', prop: 'dzmc', width: '73' },
{ label: '管理人员数量(人)', prop: 'glrysl', width: '130' },
{ label: '施工人员数量(人)', prop: 'sgrysl', width: '130' },
{ label: '质量目标', prop: 'zlmb', width: '121' },
{ label: '考察项目', prop: 'kcxm', minWidth: '245', showOverflowTooltip: true },
{ label: '考察公司', prop: 'kcgs', minWidth: '192', showOverflowTooltip: true },
],
//列表
tableLoading: false,
tableData: [
{
gcmc: "黄阁水厂二期扩建工程设计咨询服务项目",
sgcbfw: "2023年",
szqy: "233.33",
dzmc: "张林",
glrysl: "32",
sgrysl: "21233",
zlmb: "优质工程",
kcxm: "黄阁水厂二期扩建工程设计咨询服务项目",
kcgs: "中国建筑一局第二建筑有限公司"
},
{
gcmc: "黄阁水厂二期扩建工程设计咨询服务项目",
sgcbfw: "2023年",
szqy: "233.33",
dzmc: "张林",
glrysl: "32",
sgrysl: "21233",
zlmb: "优质工程",
kcxm: "黄阁水厂二期扩建工程设计咨询服务项目",
kcgs: "中国建筑一局第二建筑有限公司"
},
],
tableDataTotal: 2,
isSkeleton: true,
};
},
//可访问data属性
created() {
this.initDetail();
},
//计算集
computed: {
},
//方法集
methods: {
async initDetail() {
try {
await this.handleQuery();
} catch (error) {
}
},
async handleQuery(params) {
try {
// let data = params ? params : this.queryParams;
// this.isSkeleton = true;
// const res = await getConsultingAgencyCooperationListApi(data);
// this.tableData = res.rows ? res.rows : [];
// this.tableDataTotal = res.total ? res.total : 0;
} catch (error) {
console.log(error);
} finally {
this.isSkeleton = false;
}
},
async handleSearch() {
try {
} catch (error) {
}
}
},
}
</script>
<style lang="scss" scoped>
.construction-situation-container {
background: #ffffff;
border-radius: 4px;
padding: 16px;
input {
border: 1px solid #efefef;
}
::v-deep .el-form-item {
margin-right: 8px !important;
}
.query-box {
margin: 10px 0 20px;
}
.cell-span {
display: inline-block;
position: relative;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 4;
cursor: pointer;
> span {
display: inline-block;
width: 37px;
position: absolute;
right: 0;
bottom: 0;
background-color: #fff;
z-index: 1;
}
}
@import "@/assets/styles/search-common.scss";
}
</style>
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
<script> <script>
import skeleton from '../component/skeleton'; import skeleton from '../component/skeleton';
import mixin from '@/views/detail/party-a/mixins/mixin'; import mixin from '@/views/detail/party-a/mixins/mixin';
import { getConsultingAgencyCooperationListApi, exportRecordOfCooperationExcelApi } from "@/api/internalCooperation"; import { getConsultingAgencyCooperationListApi, getConsultingAgencyCooperationTypesApi, exportRecordOfCooperationExcelApi } from "@/api/internalCooperation";
import { getAllAreaApi } from "@/api/common"; import { getAllAreaApi } from "@/api/common";
import { getTreeSelectAreaList } from "@/utils"; import { getTreeSelectAreaList } from "@/utils";
export default { export default {
...@@ -73,15 +73,15 @@ export default { ...@@ -73,15 +73,15 @@ export default {
], ],
formData: [ formData: [
{ {
type: 7, fieldName: 'businessTypes', value: '', placeholder: '项目省市', uid: this.getUid(), options: [], props: { type: 7, fieldName: 'projectProvince', value: '', placeholder: '项目省市', uid: this.getUid(), options: [], props: {
multiple: true, multiple: true,
value: "value", value: "value",
label: "value", label: "value",
// checkStrictly: true // checkStrictly: true
} }
}, },
{ type: 4, fieldName: 'causeAction', value: '', placeholder: '项目承接类型', options: [], uid: this.getUid() }, { type: 4, fieldName: 'projectUndertakingType', value: '', placeholder: '项目承接类型', options: [], uid: this.getUid() },
{ type: 4, fieldName: 'causeAction', value: '', placeholder: '工程类别明细', options: [], uid: this.getUid() }, { type: 4, fieldName: 'detailOfWorksCategory', value: '', placeholder: '工程类别明细', options: [], uid: this.getUid() },
{ type: 3, fieldName: 'advisoryBodyName', value: '', placeholder: '请输入', uid: this.getUid() }, { type: 3, fieldName: 'advisoryBodyName', value: '', placeholder: '请输入', uid: this.getUid() },
], ],
//列表 //列表
...@@ -106,6 +106,7 @@ export default { ...@@ -106,6 +106,7 @@ export default {
try { try {
await this.handleQuery(); await this.handleQuery();
await this.getAllArea(); await this.getAllArea();
await this.getConsultingAgencyCooperationTypes();
} catch (error) { } catch (error) {
} }
...@@ -122,6 +123,23 @@ export default { ...@@ -122,6 +123,23 @@ export default {
} }
}, },
async getConsultingAgencyCooperationTypes(projectTypeId) {
try {
const params = {};
if (projectTypeId) params["projectTypeId"] = projectTypeId;
const types = await getConsultingAgencyCooperationTypesApi(params);
// if (types.code == 200 && types.data instanceof Array) {
// const _temp = types.data.map(item => {
// item.name = item.projectTypeName;
// item.value = item.projectTypeId;
// return item;
// });
// this.$set(this.formData[1], "options", _temp);
// }
} catch (error) {
}
},
async handleQuery(params) { async handleQuery(params) {
try { try {
let data = params ? params : this.queryParams; let data = params ? params : this.queryParams;
...@@ -135,14 +153,11 @@ export default { ...@@ -135,14 +153,11 @@ export default {
this.isSkeleton = false; this.isSkeleton = false;
} }
}, },
async handleSearch() { async handleSearch(params) {
try { try {
console.log(params);
const areaSearchList = this.$refs["searchFormNew"].$refs["cascader"][0].getCheckedNodes(); const areaSearchList = this.$refs["searchFormNew"].$refs["cascader"][0].getCheckedNodes();
if (areaSearchList?.length) { console.log(areaSearchList);
const valueList = areaSearchList.map(item => item.value);
const result = getTreeSelectAreaList(valueList, this.areaList, "value");
console.log(result);
}
} catch (error) { } catch (error) {
} }
......
...@@ -52,7 +52,7 @@ export default { ...@@ -52,7 +52,7 @@ export default {
return { return {
queryParams: { queryParams: {
customerId: this.companyId, customerId: this.companyId,
companyName: this.companyName, customerName: this.companyName,
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
}, },
...@@ -134,7 +134,6 @@ export default { ...@@ -134,7 +134,6 @@ export default {
if (area.code == 200) { if (area.code == 200) {
this.areaList = area.data; this.areaList = area.data;
this.$set(this.formData[0], "options", this.areaList); this.$set(this.formData[0], "options", this.areaList);
console.log();
} }
} catch (error) { } catch (error) {
......
...@@ -2,7 +2,8 @@ ...@@ -2,7 +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="defaultActive"> <project-side-menu :menuTree="menuTreeList" :menuOptions="menuOptions" :unique-opened="false" :default-active="defaultActive"
@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>
...@@ -13,12 +14,31 @@ ...@@ -13,12 +14,31 @@
</template> </template>
</project-side-menu> </project-side-menu>
</div> </div>
<div class="right-table-list-container">
<div class="project-table-list-header">
<div class="project-table-list-haeder-left">
<el-date-picker v-model="recordDate" type="month" placeholder="选择月" format="yyyy年MM月" value-format="yyyy-MM"
class="project-record-date" @change="timeChange"></el-date-picker>
</div>
<div class="project-table-list-haeder-right">
<!-- 实体工程材料单位换算 -->
<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>
<!-- 表头设置组件 -->
<dsk-table-header-setting :settingList="formColum" @settingChange="settingChange"></dsk-table-header-setting>
</div>
</div>
</div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import ProjectSideMenu from "@/views/projectCostLedger/detail/components/ProjectSideMenu"; import ProjectSideMenu from "@/views/projectCostLedger/detail/components/ProjectSideMenu";
import { getFeedSummaryMenuTreeApi } from "@/api/projectCostLedger"; import { getFeedSummaryMenuTreeApi, getFeedSummaryListApi } from "@/api/projectCostLedger";
import DskTableHeaderSetting from "@/components/DskTableHeaderSetting";
import TableListCom from "@/components/TableListCom";
import { v4 } from 'uuid';
export default { export default {
name: "feedSummary", name: "feedSummary",
props: { props: {
...@@ -51,7 +71,9 @@ export default { ...@@ -51,7 +71,9 @@ export default {
} }
}, },
components: { components: {
ProjectSideMenu ProjectSideMenu,
DskTableHeaderSetting,
TableListCom
}, },
data() { data() {
return { return {
...@@ -62,7 +84,15 @@ export default { ...@@ -62,7 +84,15 @@ export default {
comProjectDetailInfo: {}, comProjectDetailInfo: {},
comProjectId: "", comProjectId: "",
defaultActive: "", defaultActive: "",
menuTreeList: [] menuTreeList: [],
// 列表表头
formColum: [
{ label: '序号', prop: "staticSerialNumber", type: "index", lock: true, fixed: false, uid: v4() },
],
// 当前查询的数据月份
recordDate: "",
// 当前选中子菜单的父类名称
currentParentName: ""
}; };
}, },
//可访问data属性 //可访问data属性
...@@ -97,8 +127,42 @@ export default { ...@@ -97,8 +127,42 @@ export default {
} catch (error) { } catch (error) {
} }
},
async getFeedSummaryList(params = {}) {
try {
const list = await getFeedSummaryListApi(params);
if (list.code == 200 && list.data instanceof Array) {
}
} catch (error) {
}
},
menuSelect(currentId, currentTemp) {
const parentName = currentTemp.parent ? this.getCurrentType(currentTemp.parent) : currentId;
if (parentName) this.currentParentName = parentName;
},
getCurrentType(parent) {
if (parent.level == 2) {
return parent.nodeName;
}
if (parent.parent) {
return this.getCurrentType(parent.parent);
} }
}, },
// 时间选择变化
timeChange(time) {
console.log(time);
},
// 表头设置变化
async settingChange(use) {
try {
this.formColum = use;
} catch (error) {
}
},
},
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -117,6 +181,69 @@ export default { ...@@ -117,6 +181,69 @@ export default {
min-width: 220px; min-width: 220px;
height: 100%; height: 100%;
} }
.right-table-list-container {
width: calc(100% - 220px);
height: 100%;
box-sizing: border-box;
background: #fff;
padding: 16px;
::v-deep .project-table-list-header {
margin-bottom: 16px;
display: flex;
align-items: center;
justify-content: space-between;
.project-table-list-haeder-left {
display: flex;
align-items: center;
.project-record-date {
width: 140px;
.el-input__inner {
height: 32px;
line-height: 32px;
padding: 0px 12px;
border-radius: 2px;
border-color: #dcdfe6;
font-size: 14px;
color: #232323;
font-weight: 350;
}
.el-input__suffix {
right: 12px;
.el-input__icon {
line-height: 32px;
width: auto;
}
}
.el-input__prefix {
display: none;
}
}
}
.project-table-list-haeder-right {
display: flex;
align-items: center;
.actual-cost-btn,
.unit-conversion-btn {
height: 32px;
display: flex;
align-items: center;
justify-content: center;
padding: 0px 12px;
background-color: #0081ff;
border-color: #0081ff;
border-radius: 4px;
color: #fff;
font-size: 14px;
font-weight: 350;
margin-right: 16px;
}
}
}
}
} }
} }
</style> </style>
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
<div>{{scope.row.number || '--'}}</div> <div>{{scope.row.number || '--'}}</div>
</template> </template>
<template slot="proportion" slot-scope="scope"> <template slot="proportion" slot-scope="scope">
<div>{{scope.row.proportion || '--'}}{{scope.row.proportion ? '%':''}}</div> <div>{{scope.row.proportion || '--'}}</div>
</template> </template>
</tables> </tables>
</div> </div>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<template> <template>
<!-- 有下级菜单 --> <!-- 有下级菜单 -->
<template v-if="checkHasChidren"> <template v-if="checkHasChidren">
<el-submenu :index="menuItem.nodeValue" ref="projectSubMenuItem" class="project-sub-menu-item" <el-submenu :index="createMenuIndex(menuItem.nodeValue)" ref="projectSubMenuItem" class="project-sub-menu-item"
:class="`project-sub-menu-item-level-${menuItem.level}`" :disabled="menuItem.originData && menuItem.originData.disabled"> :class="`project-sub-menu-item-level-${menuItem.level}`" :disabled="menuItem.originData && menuItem.originData.disabled">
<template slot="title"> <template slot="title">
<!-- 预留插槽 --> <!-- 预留插槽 -->
...@@ -20,8 +20,8 @@ ...@@ -20,8 +20,8 @@
</template> </template>
<!-- 无子集菜单 --> <!-- 无子集菜单 -->
<template v-else> <template v-else>
<el-menu-item :index="menuItem.nodeValue" class="project-only-menu-item" :class="`project-only-menu-item-level-${menuItem.level}`" <el-menu-item :index="createMenuIndex(menuItem.nodeValue)" class="project-only-menu-item"
:disabled="menuItem.originData && menuItem.originData.disabled"> :class="`project-only-menu-item-level-${menuItem.level}`" :disabled="menuItem.originData && menuItem.originData.disabled">
<template slot="title"> <template slot="title">
<div class="project-only-menu-title-container"> <div class="project-only-menu-title-container">
<!-- 预留插槽 --> <!-- 预留插槽 -->
...@@ -79,6 +79,11 @@ export default { ...@@ -79,6 +79,11 @@ export default {
} }
styles["padding-left"] = `${paddingLeft}px`; styles["padding-left"] = `${paddingLeft}px`;
return styles; return styles;
},
createMenuIndex(index) {
if (index || index == "0") {
return index.toString();
}
} }
}, },
} }
......
<template> <template>
<div class="project-side-menu-container"> <div class="project-side-menu-container">
<el-menu mode="vertical" class="project-side-menu-instance" :unique-opened="uniqueOpened" :default-active="comDefaultActive" @select="menuSelect" <el-menu mode="vertical" class="project-side-menu-instance" :unique-opened="uniqueOpened" :default-active="createMenuIndex(comDefaultActive)"
@open="subMenuOpen" @close="subMenuClose" ref="customElMenu"> @select="menuSelect" @open="subMenuOpen" @close="subMenuClose" ref="customElMenu">
<template v-for="(item,index) of tempMenuTree"> <template v-for="(item,index) of tempMenuTree">
<project-menu-item :menuItem="item" :key="item.nodeValue"> <project-menu-item :menuItem="item" :key="item.nodeValue">
<template :slot="`${item.nodeName}-${item.level}`" slot-scope="scope"> <template :slot="`${item.nodeName}-${item.level}`" slot-scope="scope">
...@@ -101,6 +101,11 @@ export default { ...@@ -101,6 +101,11 @@ export default {
const result = this.getCurrentData(menuPath); const result = this.getCurrentData(menuPath);
this.$emit("select", menuPath, result); this.$emit("select", menuPath, result);
}, },
createMenuIndex(index) {
if (index || index == "0") {
return index.toString();
}
},
getCurrentData(only) { getCurrentData(only) {
const _tempTree = JSON.parse(JSON.stringify(this.tempMenuTree)); const _tempTree = JSON.parse(JSON.stringify(this.tempMenuTree));
if (_tempTree) { if (_tempTree) {
...@@ -299,6 +304,13 @@ export default { ...@@ -299,6 +304,13 @@ export default {
} }
} }
/* 禁用状态不触发 焦点 */
&.is-disabled {
&:focus {
color: unset !important;
}
}
.project-only-menu-title-container { .project-only-menu-title-container {
height: 32px; height: 32px;
line-height: unset; line-height: unset;
......
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