Commit 60b0ffd3 authored by danfuman's avatar danfuman

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 3aadc20f 20997c17
......@@ -54,5 +54,9 @@ public class DCustomerSearchBo {
* 是否队伍 0:否 1:是
*/
private Integer isTeam;
/**
* 涉诉限用/涉诉禁用
*/
private String badnessState;
}
......@@ -140,9 +140,8 @@ public class CbProjectFileServiceImpl extends ServiceImpl<CbProjectFileMapper, C
Assert.isFalse(fileParseStatus.equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSING),
"文件正在解析中,不允许删除");
//解析成功、解析失败的文件需要删除对应的导入数据和每月成本数据
if (fileParseStatus.equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS) ||
fileParseStatus.equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL)) {
//解析成功的文件需要删除对应的导入数据和每月成本数据
if (fileParseStatus.equals(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS)) {
switch (deleteBo.getCbType()) {
case CbProjectConstants.CB_TYPE_DIRECT_EXPENSE:
//直接费没有每月成本,所以直接删除导入数据即可
......
......@@ -164,6 +164,15 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
* @param cbTypeName 成本类型名称
*/
private List<CbProjectFile> checkCbTypeExistFile(Long projectId, Integer cbType, String cbTypeName) {
//如果当前成本类型下已存在解析成功的文件,则跳过校验
if (!projectFileMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectId)
.eq(CbProjectFile::getCbType, cbType)
//项目文件状态:准备中or解析失败
.eq(CbProjectFile::getFileParseStatus, CbProjectConstants.PROJECT_FILE_STATUS_PARSE_SUCCESS)).isEmpty()) {
return new ArrayList<>();
}
List<CbProjectFile> projectFileList = projectFileMapper.selectList(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectId)
.eq(CbProjectFile::getCbType, cbType)
......
......@@ -387,7 +387,7 @@ public class CbSummaryServiceImpl extends ServiceImpl<CbSummaryMapper, CbSummary
List<CbSummaryActualListVo> list = new ArrayList<>();
//当前父级数据
CbSummaryActualListVo cbSummaryActualListVo = baseMapper.getById(bo.getId(), bo.getExpenseDate());
if (ObjectUtil.isEmpty(cbSummaryActualListVo)) {
if (ObjectUtil.isEmpty(cbSummaryActualListVo) || null == cbSummaryActualListVo.getId()) {
return new ArrayList<>();
}
// //截至本月费用汇总
......
......@@ -77,6 +77,7 @@ public class DCustomerServiceImpl extends ServiceImpl<DCustomerMapper, DCustomer
PageQuery query = new PageQuery();
List<DCustomerListVo> records = baseMapper.allSearchList(query.build(), bo).getRecords();
if (CollectionUtils.isNotEmpty(records)) {
for (int i = 0; i < records.size(); i++) records.get(i).setNum(i);
records.parallelStream().forEach(item -> {
DCustomerListVo vo = subcontractMapper.selectStatisticByCustomerId(item.getCustomerId());
//企业合作数量
......
......@@ -21,9 +21,7 @@ import org.apache.commons.collections4.MapUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* 供应商限制信息表(FSupplierLimited)表服务实现类
......@@ -136,5 +134,7 @@ public class FSupplierLimitedServiceImpl extends ServiceImpl<FSupplierLimitedMap
}
}
return TableDataInfo.build(page);
}
}
......@@ -272,8 +272,10 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject>
return baseMapper.exists(new LambdaQueryWrapper<DProject>()
.eq(DProject::getProjectCode, projectCode));
} else {
//修改项目信息or新增新阶段项目时
CbProjectRecord projectRecord = projectRecordMapper.selectById(projectId);
//未做任何改动时
Assert.isFalse(projectCode.equals(projectRecord.getIpmProjectNo()), "新编码与旧编码相同");
//修改项目信息or新增新阶段项目时
if (projectCode.equals(projectRecord.getIpmProjectNo())
&& projectRecord.getIsGetProjectDetail()) {
return true;
......
......@@ -6,64 +6,66 @@
<select id="allSearchList" resultType="com.dsk.cscec.domain.vo.DCustomerListVo">
select
@row_number:=@row_number + 1 AS num,
customer_key, customer_id, customer_code, customer_name, recommend_org, register_region, register_province, register_city, customer_class, primary_business,
paytax_type, tax_rate, customer_state, leader_name, labor_captain_phone, labor_captain_idcard, service_team_personnum, service_team_speciality,
construct_job_scope, credential, register_capital, contact_person, contact_phone, approve_date2, credit_level, group_specialty
from d_customer , (SELECT @row_number:=0) AS t
where recommend_org_id = 'F17305B4EA4444CBAB12892C7B99E475'
<if test="bo.customerName != null and bo.customerName != '' "> and customer_name like concat('%',#{bo.customerName},'%')</if>
dc.customer_key, dc.customer_id, dc.customer_code, dc.customer_name, dc.recommend_org, dc.register_region, dc.register_province, dc.register_city, dc.customer_class, dc.primary_business,
dc.paytax_type, dc.tax_rate, dc.customer_state, dc.leader_name, dc.labor_captain_phone, dc.labor_captain_idcard, dc.service_team_personnum, dc.service_team_speciality,
dc.construct_job_scope, dc.credential, dc.register_capital, dc.contact_person, dc.contact_phone, dc.approve_date2, dc.credit_level, dc.group_specialty, fsl.fstate badnessState
from d_customer dc
left join f_supplier_limited fsl on (fsl.flaowufbid = dc.customer_id
or fsl.fzhuanyefbid = dc.customer_id or fsl.ffgid = dc.customer_id or fsl.fzlid = dc.customer_id)
where dc.recommend_org_id = 'F17305B4EA4444CBAB12892C7B99E475'
<if test="bo.customerName != null and bo.customerName != '' "> and dc.customer_name like concat('%',#{bo.customerName},'%')</if>
<if test="bo.province != null and bo.province.size > 0 and (bo.city == null or bo.city.size == 0) ">
and register_province in
and dc.register_province in
<foreach collection="bo.province" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="bo.city != null and bo.city.size > 0 and (bo.province == null or bo.province.size == 0) ">
and register_city in
and dc.register_city in
<foreach collection="bo.city" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="bo.province != null and bo.province.size > 0 and bo.city != null and bo.city.size > 0 " >
and ( register_province in
and ( dc.register_province in
<foreach collection="bo.province" item="item" open="(" separator="," close=")">
#{item}
</foreach>
or register_city in
or dc.register_city in
<foreach collection="bo.city" item="item" open="(" separator="," close=")">
#{item}
</foreach>
)
</if>
<if test="bo.customerClass != null and bo.customerClass.size > 0 ">
and customer_class in
and dc.customer_class in
<foreach collection="bo.customerClass" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="bo.customerState != null and bo.customerState.size > 0 ">
and customer_state in
and dc.customer_state in
<foreach collection="bo.customerState" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="bo.creditLevel != null and bo.creditLevel.size > 0 ">
and credit_level in
and dc.credit_level in
<foreach collection="bo.creditLevel" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="bo.credential != null and bo.credential.size > 0 ">
and credential in
and dc.credential in
<foreach collection="bo.credential" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="bo.approveDateBegion != null and bo.approveDateBegion != '' ">and approve_date2 &gt;= #{bo.approveDateBegion}</if>
<if test="bo.approveDateEnd != null and bo.approveDateEnd != '' ">and approve_date2 &lt;= #{bo.approveDateEnd} </if>
<if test="bo.isTeam != null"> and leader_name is <if test="bo.isTeam == 1">not</if> null </if>
order by approve_date2 desc
<if test="bo.approveDateBegion != null and bo.approveDateBegion != '' ">and dc.approve_date2 &gt;= #{bo.approveDateBegion}</if>
<if test="bo.approveDateEnd != null and bo.approveDateEnd != '' ">and dc.approve_date2 &lt;= #{bo.approveDateEnd} </if>
<if test="bo.isTeam != null"> and dc.leader_name is <if test="bo.isTeam == 1">not</if> null </if>
<if test="bo.badnessState != null and bo.badnessState != ''"> and fsl.fstate = #{bo.badnessState} </if>
order by dc.approve_date2 desc
</select>
<sql id="allColumn">
......
<template>
<div class="custom-table-list-com-ins"
:class="{'is-empty-table' : !tableDataTotal,'no-pagination' : !hasQueryParams,'auto-max-height' : maxHeight,'has-y-Scroll' : maxHeight && hasYScroll}"
:class="{'is-empty-table' : !tableDataTotal,'no-pagination' : !hasQueryParams,'auto-max-height' : maxHeight,'has-y-scroll' : maxHeight && hasYScroll,'has-x-scroll' : maxHeight && hasXScroll}"
:style="maxBodyFixedStyle">
<div class="custom-table-item">
<el-table v-if="tableDataTotal>0" class="custom-table" v-loading="comTableLoading" :data="tableData" element-loading-text="加载中"
......@@ -160,6 +160,7 @@ export default {
comMaxBodyHeight: 0,
headerLastBlockHeight: 0,
hasYScroll: false,
hasXScroll: false,
observer: null,
resizeTimer: null,
comTableLoading: this.tableLoading
......@@ -245,27 +246,32 @@ export default {
}
// 列表自适应高度
this.comMaxHeight = containerMaxHeight ? `${containerMaxHeight}px` : null;
// 重新计算表格高度 减去滚动条高度差 16 - 6 有固定列的情况
// 重新计算表格高度 有横向滚动条则需要减去滚动条高度差 16 - 6 有固定列的情况
if (containerMaxHeight) {
/**
* @type {HTMLDivElement}
*/
const tableRightHeader = this.$el.querySelector(".el-table__fixed-header-wrapper");
if (tableRightHeader) {
const headerHeight = parseInt(window.getComputedStyle(tableRightHeader).height);
const tableFixedHeader = this.$el.querySelector(".el-table__fixed-header-wrapper");
if (tableFixedHeader) {
const headerHeight = parseInt(window.getComputedStyle(tableFixedHeader).height);
// 未自适应下 正常表主体
const defaultTableBody = this.$el.querySelector(".el-table__body-wrapper");
// 是否有横向滚动条
const _hasXScroll = defaultTableBody.clientWidth >= defaultTableBody.scrollWidth ? false : true;
//原滚动条高度为6px 差 10px
const bodyMaxHeight = containerMaxHeight - headerHeight - 16;
const bodyMaxHeight = containerMaxHeight - headerHeight - (_hasXScroll ? 16 : 0);
// console.log(bodyMaxHeight, "bodyMaxHeight");
this.comMaxBodyHeight = bodyMaxHeight;
// 表体 判断是否有竖向滚动条 容器 bodyMaxHeight 整体 最大高度大于 内部列表高度 则没有滚动条
// 表体 判断是否有 横竖向滚动条 容器 bodyMaxHeight 整体 最大高度宽度大于 内部列表高度宽度 则没有滚动条
const fixedTableBody = this.$el.querySelector(".el-table__fixed-body-wrapper");
// dom更新后 重新比较 高度
// dom更新后 重新比较 高度
await this.$nextTick();
// 拿到 固定列表体实际高度 包含滚动高度
const fixedBodyHeight = fixedTableBody.scrollHeight;
// console.log(bodyMaxHeight,"bodyMaxHeight");
// console.log(parseFloat(fixedBodyHeight),"fixedBodyHeight");
this.hasYScroll = bodyMaxHeight >= parseFloat(fixedBodyHeight) ? false : true;
this.hasXScroll = _hasXScroll;
} else {
// 没有固定列 正常情况下 计算默认header高度
const defaultHeader = this.$el.querySelector(".el-table__header-wrapper");
......@@ -278,6 +284,9 @@ export default {
} catch (error) {
console.log(error);
}
},
getsSimulateScrollBar() {
},
pagingHandler(hasQueryParams, queryParams, scope) {
// 有分页参数
......@@ -355,10 +364,10 @@ export default {
}
// 自动适配下 减去滚动条高度
.el-table__fixed {
height: calc(100% - 15px) !important;
height: calc(100%) !important;
}
.el-table__fixed-right {
height: calc(100% - 15px) !important;
height: calc(100%) !important;
}
// 重新计算隐藏列表高度 减去滚动条16px高度
......@@ -369,7 +378,7 @@ export default {
}
// 是否存在Y轴滚动条
&.has-y-Scroll {
&.has-y-scroll {
::v-deep .custom-table-item {
.el-table {
/* 右侧fixed列 */
......@@ -382,6 +391,20 @@ export default {
}
}
}
// 是否存在X轴滚动条
&.has-x-scroll {
::v-deep .custom-table-item {
.el-table {
.el-table__fixed {
height: calc(100% - 15px) !important;
}
.el-table__fixed-right {
height: calc(100% - 15px) !important;
}
}
}
}
}
/* 不需要分页 或没有分页参数 */
......@@ -453,6 +476,14 @@ export default {
font-size: 14px;
color: #232323;
.el-table-column--selection {
.cell {
display: flex;
align-items: center;
justify-content: center;
}
}
.cell {
padding-right: 12px;
padding-left: 12px;
......
......@@ -28,10 +28,14 @@
</div>
<!-- 锁定成本 导出excel 编辑成本 -->
<div class="project-table-list-haeder-right">
<div class="lock-cost-btn" :class="{ 'current-month-lock': currentMonthLock }" @click="!currentMonthLock ? lockCostHandler() : ''">锁定成本
<div class="lock-cost-btn" :class="{ 'current-month-lock': currentMonthLock || !hasMenuData }"
@click="!currentMonthLock && hasMenuData ? lockCostHandler() : ''">锁定成本
</div>
<div class="export-excel-btn" @click="exportExcel">导出Excel表</div>
<div class="edit-cost-btn" @click="addActualCostEditStatus ? saveCostModify() : editCost()">{{ addActualCostEditStatus ? "保存成本" : "编辑成本" }}
<div class="export-excel-btn" :class="{'btn-is-disable' : !hasMenuData}" @click="!hasMenuData ? '' : exportExcel()">
导出Excel表</div>
<div class="edit-cost-btn" :class="{'btn-is-disable' : !hasMenuData}"
@click="hasMenuData ? (addActualCostEditStatus ? saveCostModify() : editCost()) : ''">
{{ addActualCostEditStatus ? "保存成本" : "编辑成本" }}
</div>
</div>
</div>
......@@ -167,8 +171,8 @@ export default {
total: 0,
// 列表表头
formColum: [
{ label: '序号', prop: "number", minWidth: "80", uid: v4() },
{ label: '名称', prop: "cbName", width: "303", uid: v4(), showOverflowTooltip: true },
{ label: '序号', prop: "number", minWidth: "80", uid: v4(), fixed: "left" },
{ label: '名称', prop: "cbName", width: "303", uid: v4(), showOverflowTooltip: true, fixed: "left" },
{ label: '不含税成本合价', prop: "taxExclusiveTotal", width: "182", uid: v4() },
{ label: '成本税金合价', prop: "cbTaxesTotal", width: "182", uid: v4() },
{ label: '含税成本合价', prop: "taxInclusiveTotal", width: "182", uid: v4() },
......@@ -232,6 +236,10 @@ export default {
// 查看当前月是否是锁定状态 lock为true 不能锁定 反之可以
currentMonthLock() {
return this.lockMonthList.includes(this.expenseDate);
},
// 是否有科目菜单
hasMenuData() {
return this.menuTreeList.length ? true : false;
}
},
//方法集
......@@ -261,8 +269,18 @@ export default {
this.currentCategory = category;
this.resetEditStatus();
this.tableLoading = true;
this.resetTableData();
this.init(this.comProjectDetailInfo);
},
resetTableData() {
this.$set(this.dataForm, "tableDataList", []);
const data = this.$options.data.call(this);
this.originTableDataList = data.originTableDataList;
this.total = 0;
this.monthList = data.monthList;
this.originMonthList = data.originMonthList;
this.disableMonths = data.disableMonths;
},
async init(detail = {}, resetDate = "", saveReset = false) {
try {
this.resetEditStatus(saveReset);
......@@ -314,9 +332,10 @@ export default {
if (item[targetName] == nodeValue) return item;
if (item.children instanceof Array) {
const result = this.findMenuNode(item.children, nodeValue, targetName);
if (result) return result;
return result;
}
}
return null;
},
// 创建查询条件
createRequestConditions(resetDate = "") {
......@@ -346,7 +365,7 @@ export default {
cbName: this.currentCategory == 1 ? "成本汇总" : "房建类成本科目",
children: _tempArray
};
this.menuTreeList = [_tempMenu];
this.menuTreeList = _tempArray.length ? [_tempMenu] : [];
}
} catch (error) {
......@@ -759,8 +778,8 @@ export default {
// 浅层级
if (hasDifferent) {
tempArray.push({
id: item.id,
cbSummaryId: this.currentNodeValue,
id: item.actualId,
cbSummaryId: item.id,
taxInclusiveExpense: item.taxInclusiveExpense ? item.taxInclusiveExpense : 0,
taxExclusiveExpense: item.taxExclusiveExpense ? item.taxExclusiveExpense : 0,
expenseDate: this.expenseDate
......@@ -928,7 +947,6 @@ export default {
}
.lock-cost-btn {
/* 当前月锁定 */
&.current-month-lock {
cursor: not-allowed;
......@@ -939,6 +957,14 @@ export default {
.edit-cost-btn {
margin-right: 0px;
}
.edit-cost-btn,
.export-excel-btn {
&.btn-is-disable {
cursor: not-allowed;
background: #66b3ff;
}
}
}
}
......
......@@ -13,15 +13,15 @@
<el-input v-model="pushForm.pushQuantities" @input="pushQuantitiesIpt" placeholder="请填写需推送工程量"></el-input>
</el-form-item>
<!-- ipm项目编码 -->
<el-form-item label="IPM项目编码">
<el-form-item label="IPM项目编码" prop="ipmProjectCode">
<el-input v-model="pushForm.ipmProjectCode" placeholder="请输入IPM项目编码"></el-input>
</el-form-item>
<!-- ipm合同编码 -->
<el-form-item label="IPM合同编码">
<el-form-item label="IPM合同编码" prop="ipmContractCode">
<el-input v-model="pushForm.ipmContractCode" placeholder="请输入IPM合同编码"></el-input>
</el-form-item>
<!-- ipm作业编码 -->
<el-form-item label="IPM作业编码">
<el-form-item label="IPM作业编码" prop="ipmBizCode">
<el-input v-model="pushForm.ipmBizCode" placeholder="请输入IPM作业编码"></el-input>
</el-form-item>
</el-form>
......@@ -29,7 +29,7 @@
<!-- 底部按钮 -->
<div class="dialog-footer-content">
<div class="footer-btn cancel-submit" @click="cancelSubmit">取消</div>
<div class="footer-btn ok-submit">确定推送</div>
<div class="footer-btn ok-submit" @click="pushResult">确定推送</div>
</div>
</el-dialog>
</template>
......@@ -87,7 +87,17 @@ export default {
ipmContractCode: "",
ipmBizCode: "",
},
rules: {}
rules: {
ipmProjectCode: [
{ required: true, trigger: ["blur", "change"], message: "请输入IPM项目编码", whitespace: true }
],
ipmContractCode: [
{ required: true, trigger: ["blur", "change"], message: "请输入IPM合同编码", whitespace: true }
],
ipmBizCode: [
{ required: true, trigger: ["blur", "change"], message: "请输入IPM作业编码", whitespace: true }
]
}
};
},
//可访问data属性
......@@ -133,6 +143,21 @@ export default {
},
cancelSubmit() {
this.comPushProjectUseDialog = false;
},
//推送工程量
pushResult() {
this.$refs["pushForm"].validate(flag => {
if (flag) {
const { id, pushQuantities, ipmProjectCode, ipmContractCode, ipmBizCode } = cloneDeep(this.pushForm);
this.$emit("submitPushData", {
id,
pushQuantities,
ipmProjectCode,
ipmContractCode,
ipmBizCode
});
}
});
}
},
}
......
......@@ -73,7 +73,7 @@
<template slot="action-field-bar" slot-scope="scope">
<div class="project-action-field-bar">
<span class="push-project-use" :class="{'is-emty-quantities' : !parseFloat(scope.row.quantities)}"
@click="parseFloat(scope.row.quantities) ? pushProjectUse(scope.row) : ''">推送物资用量</span>
@click="parseFloat(scope.row.quantities) ? pushProjectUse(scope.row) : ''">推送物资</span>
</div>
</template>
</entity-materials-table>
......@@ -87,7 +87,7 @@
<!-- 推送工程量 , 推送物资 -->
<push-project-use-dialog v-model="pushProjectUseDialog" :is-entity-materials="isEntityMaterials" :row-data="pushProjectUseTemp"
@dialogClose="dialogClose"></push-project-use-dialog>
@dialogClose="dialogClose" @submitPushData="submitPushData"></push-project-use-dialog>
<!-- 单位换算弹窗 -->
<unit-conversion v-if="showUnitConversion" :isVisible="showUnitConversion" :dataList="unitConversionList"
......@@ -196,7 +196,7 @@ export default {
// 列表表头
formColum: [
{ 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() },
{ label: '公司编码', prop: "companyNo", width: "137", uid: v4() },
{ label: '集团编码', prop: "orgNo", width: "137", uid: v4() },
{ label: '名称', prop: "cbName", width: "232", uid: v4() },
......@@ -230,8 +230,38 @@ export default {
],
// 实体工程材料表头
entityMaterialsFormColum: [
{ label: '多选', prop: "staticSerialNumber", type: "selection", lock: true, width: "53", fixed: false, uid: v4() },
{ label: '操作', prop: "action-field-bar", width: "99", uid: v4(), fixed: "right" },
{ label: '多选', prop: "staticSerialNumber", type: "selection", lock: true, width: "53", fixed: "left", uid: v4() },
{ label: '序号', prop: "staticIndexNumber", type: "index", lock: true, width: "53", fixed: "left", uid: v4() },
{ label: '成本科目', prop: "cbSubjectName", width: "137", uid: v4() },
{ label: '公司编码', prop: "companyNo", width: "137", uid: v4() },
{ label: '集团编码', prop: "orgNo", width: "137", uid: v4() },
{ label: '名称', prop: "cbName", width: "232", uid: v4() },
{ label: '工作内容', prop: "jobContent", width: "341", uid: v4() },
{ label: '计算规则', prop: "calculationRule", width: "137", uid: v4() },
{ label: '单位', prop: "unit", width: "57", uid: v4() },
{ label: '甲供材料说明', prop: "materialDescription", width: "137", uid: v4() },
{
label: '计划成本', prop: "jhcb", align: "center", uid: v4(), children: [
{ label: '指导价格', prop: "guidePrice", minWidth: "81", uid: v4() },
{ label: '投标选用单价(不含税)', prop: "bidUnitPrice", minWidth: "179", uid: v4() },
{ label: '单价差额', prop: "unitPriceDifference", minWidth: "81", uid: v4() },
{ label: '数量', prop: "quantity", minWidth: "150", uid: v4() },
{ label: '合价(不含税)', prop: "combinedPrice", minWidth: "150", uid: v4() },
{ label: '合价(含税)', prop: "combinedPriceTax", minWidth: "150", uid: v4() },
{ label: '品牌名称', prop: "brandName", minWidth: "81", uid: v4() },
{ label: '投标选用来源', prop: "bidSource", minWidth: "109", uid: v4() },
]
},
{
label: '实际成本', prop: "sjcb", align: "center", uid: v4(), children: [
{ label: '物料验收系统本月总量', prop: "quantities", minWidth: "180", uid: v4(), slot: true },
{ label: '换算后本月总量', prop: "conversionQuantities", minWidth: "160", uid: v4(), slot: true },
{ label: '截至本月总用量', prop: "totalQuantities", minWidth: "160", uid: v4(), slot: true },
{ label: '剩余物料', prop: "sss", minWidth: "160", uid: v4(), slot: true },
{ label: '填写时间', prop: "createTime", minWidth: "160", uid: v4(), slot: true },
]
},
{ label: '操作', prop: "action-field-bar", width: "120", uid: v4(), fixed: "right" },
],
// 已记录月份集合
monthList: [],
......@@ -488,23 +518,10 @@ export default {
if (parentName) this.currentParentName = parentName;
this.resetTableData();
// 实体工程材料
const params = this.createRequestConditions(this.recordDate);
await this.getFeedSummaryList(params);
if (this.isEntityMaterials) {
const { projectId, cbStage } = this.comProjectDetailInfo;
const params = {
projectId,
cbStage
};
params["cbSubjectName"] = this.currentNodeName;
// 判断当月是否存在于server返回month集合中
const _now = this.getNowMonth();
if (this.includeNowMonth(_now)) {
params["recordDate"] = _now;
}
this.getFeedSummaryConversionNotice(params);
} else {
// 非实体工程材料 获取数据
const params = this.createRequestConditions(this.recordDate);
this.getFeedSummaryList(params);
}
},
async getFeedSummaryConversionNotice(params) {
......@@ -674,15 +691,15 @@ export default {
},
// 推送工程用量
pushProjectUse(row) {
if (!row.id) return;
if (!row.actualId) return;
// 打开推送推送弹窗
const _temp = {
...this.pushProjectUseTemp, ...{
id: row.id,
id: row.actualId,
projectName: this.projectDetailInfo.projectName,
totalQuantities: row.totalQuantities,
pushQuantities: "",
ipmProjectCode: "",
ipmProjectCode: this.projectDetailInfo.ipmProjectNo,
ipmContractCode: "",
ipmBizCode: ""
}
......@@ -694,6 +711,14 @@ export default {
dialogClose() {
this.pushProjectUseTemp = this.$options.data.call(this).pushProjectUseTemp;
},
// 确定推送
async submitPushData(pushForm) {
try {
const result = await pushFeedSummaryRowsApi(pushForm);
} catch (error) {
}
},
differentCompare() {
const originData = this.originTableDataList;
/**
......
......@@ -2,8 +2,8 @@
<div class="field-expenses-container">
<div class="field-expenses-inner">
<div class="left-side-menu">
<project-side-menu ref="projectSideMenu" :menuTree="menuTreeList" :menuOptions="menuOptions" :unique-opened="false"
v-model="currentNodeValue" @select="menuSelect">
<project-side-menu ref="projectSideMenu" :menuTree="menuTreeList" :menuOptions="menuOptions" :unique-opened="false" v-model="currentNodeValue"
@select="menuSelect">
<template slot="现场经费-1">
<img src="@/assets/images/projectCostLedger/icon_cost_detail_6.svg" alt="">
<div class="project-sub-menu-title-text">现场经费</div>
......@@ -174,7 +174,10 @@ export default {
},
//计算集
computed: {
// 是否是现场经费
isDefaultSumMenu() {
return this.currentNodeName == "现场经费";
}
},
//方法集
methods: {
......@@ -203,12 +206,13 @@ export default {
try {
await this.$nextTick();
const menus = this.$refs["projectSideMenu"].getResultMenuList();
const defaultCurrent = this.findMenuNode(menus, "现场经费");
const first = this.$refs["projectSideMenu"].getFirstLevelWithDeepId();
const defaultCurrent = this.findMenuNode(menus, "现场经费") ? this.findMenuNode(menus, "现场经费") : this.findMenuNode(menus, first, "nodeValue");
if (defaultCurrent) {
this.currentNodeValue = defaultCurrent.nodeValue;
this.currentNodeName = defaultCurrent.nodeName;
const params = this.createRequestConditions();
await this.getFieldExpensesList(params);
this.isDefaultSumMenu ? await this.getFieldExpensesList(params) : await this.getFieldExpensesOtherList(params);
}
} catch (error) {
console.log(error);
......@@ -223,7 +227,7 @@ export default {
projectId,
cbStage
};
params["cbSubjectName"] = this.currentNodeValue;
params["fileId"] = this.currentNodeValue;
// 判断当月是否存在于server返回month集合中
const _now = this.getNowMonth();
if (this.includeNowMonth(_now)) {
......@@ -243,6 +247,7 @@ export default {
if (result) return result;
}
}
return null;
},
async getFieldExpensesList(params = {}) {
try {
......@@ -354,12 +359,8 @@ export default {
const menuName = currentTemp.nodeName;
this.currentNodeName = menuName;
// 请求数据列表
const isDefault = menuName == "现场经费";
const params = isDefault ? this.createRequestConditions() : {
projectId: this.comProjectDetailInfo.projectId,
fileId: currentId
};
if (isDefault) {
const params = this.createRequestConditions();
if (this.isDefaultSumMenu) {
this.getFieldExpensesList(params);
} else {
this.getFieldExpensesOtherList(params);
......
<template>
<div class="project-side-menu-container">
<el-menu mode="vertical" class="project-side-menu-instance" :unique-opened="uniqueOpened" :default-active="createMenuIndex(comDefaultActive)"
:default-openeds="comDefaultOpeneds" @select="menuSelect" @open="subMenuOpen" @close="subMenuClose" ref="customElMenu">
<template v-for="(item, index) of tempMenuTree">
<project-menu-item :menuItem="item" :key="`${item.nodeValue}-${item.level}`">
<template :slot="`${item.nodeName}-${item.level}`" slot-scope="scope">
<slot :name="`${scope.data.nodeName}-${scope.data.level}`" :data="scope.data"></slot>
</template>
</project-menu-item>
</template>
</el-menu>
<transition name="fade" :appear="true" mode="out-in">
<el-menu v-if="tempMenuTree.length" mode="vertical" class="project-side-menu-instance" :unique-opened="uniqueOpened"
:default-active="createMenuIndex(comDefaultActive)" :default-openeds="comDefaultOpeneds" @select="menuSelect" @open="subMenuOpen"
@close="subMenuClose" ref="customElMenu">
<template v-for="(item, index) of tempMenuTree">
<project-menu-item :menuItem="item" :key="`${item.nodeValue}-${item.level}`">
<template :slot="`${item.nodeName}-${item.level}`" slot-scope="scope">
<slot :name="`${scope.data.nodeName}-${scope.data.level}`" :data="scope.data"></slot>
</template>
</project-menu-item>
</template>
</el-menu>
</transition>
</div>
</template>
<script>
......@@ -201,6 +204,9 @@ export default {
await this.$nextTick();
this.openTargetAllSubMenu(this.comDefaultOpeneds);
}
} else {
this.tempMenuTree = [];
this.tempMenuOptions = this.$options.data.call(this).tempMenuOptions;
}
},
mergeMenuOptions(options) {
......@@ -275,12 +281,14 @@ export default {
position: relative;
width: 100%;
height: 100%;
border-right: 1px solid #eeeeee;
background: #fff;
overflow: auto;
::v-deep .project-side-menu-instance {
width: 100%;
height: 100%;
border-right: 1px solid #eeeeee;
overflow: auto;
border-right: unset;
background: unset;
/* 重置一级二级菜单 高度行高 */
.project-menu-item-container {
......
......@@ -51,7 +51,7 @@
<div class="btn btn_default h32" @click="getcgx">草稿箱 ({{cgxtotal}})</div>
</div>
</div>
<div class="table-item-jf table-item">
<div class="table-item-jf table-item prolegder">
<el-table :data="tableData" :header-cell-style="{ background:'#f0f3fa',color: 'rgba(35,35,35,0.8)'}"
v-sticky-header.always="{offsetTop : '-16px',offsetBottom : '-15px'}" class="table-item1 fixed-table" border highlight-current-row
:header-row-class-name="setHeaderRow" :cell-class-name="setCellClass" :row-class-name="setRowClass" :header-cell-class-name="setCellClass"
......@@ -855,4 +855,9 @@
&.zt2{background: #0CBC6D}
&.zt3{background: #FF3C3C}
}
::v-deep .prolegder{
.fixed-table .el-table__fixed-header-wrapper{
display: none;
}
}
</style>
......@@ -10,11 +10,10 @@
:auto-upload="false"
:on-change="handleFileListChange"
:headers="headers">
</el-upload>
<div class="pro-upload">
<div class="title_wrap i">
<div class="title-small"><span>项目成本台账 <i class="el-icon-arrow-right"></i> </span>导入项目</div>
<div class="title-small"><span style="cursor: pointer" @click="goback">项目成本台账 <i class="el-icon-arrow-right"></i> </span>导入项目</div>
<div class="enterprise_title">
项目信息
</div>
......@@ -62,7 +61,7 @@
</template>
<div class="cz" v-if="item.fileParseStatus != 1">
<div><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div @click="deletefille(item.id,0,true)" v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id,0)" v-if="prodetail == false">删除</div>
</div>
</div>
......@@ -90,7 +89,7 @@
</template>
<div class="cz" v-if="item.fileParseStatus != 1">
<div><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div @click="deletefille(item.id,1,true)" v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id,1)" v-if="prodetail == false">删除</div>
</div>
</div>
......@@ -118,7 +117,7 @@
</template>
<div class="cz" v-if="item.fileParseStatus != 1">
<div><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div @click="deletefille(item.id,2,true)" v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id,2)" v-if="prodetail == false">删除</div>
</div>
</div>
......@@ -146,7 +145,7 @@
</template>
<div class="cz" v-if="item.fileParseStatus != 1">
<div><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div @click="deletefille(item.id,3,true)" v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id,3)" v-if="prodetail == false">删除</div>
</div>
</div>
......@@ -174,7 +173,7 @@
</template>
<div class="cz" v-if="item.fileParseStatus != 1">
<div><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div @click="deletefille(item.id,4,true)" v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id,4)" v-if="prodetail == false">删除</div>
</div>
</div>
......@@ -202,7 +201,7 @@
</template>
<div class="cz" v-if="item.fileParseStatus != 1">
<div><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div @click="deletefille(item.id,5,true)" v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id,5)" v-if="prodetail == false">删除</div>
</div>
</div>
......@@ -357,7 +356,7 @@
this.$refs.uploadpro.$el.querySelector('input').click()
}
},
deletefille(id,type){
deletefille(id,type,isupload){
this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
......@@ -374,6 +373,9 @@
message: '删除成功!'
});
this.getDetail()
if(isupload){
this.uplpro(type)
}
}
})
}).catch(() => {
......
......@@ -71,7 +71,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="涉诉状态">
<el-select multiple placeholder="请选择" :collapse-tags="true" clearable>
<el-select placeholder="请选择" :collapse-tags="true" v-model="formdata.badnessState" clearable>
<el-option v-for="(item,index) in litigationstatus" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>
</el-select>
</el-form-item>
......@@ -190,7 +190,7 @@
</template>
</el-table-column>
<el-table-column label="限用/禁用状态" min-width="120" :resizable="false">
<template slot-scope="scope">--</template>
<template slot-scope="scope">{{scope.row.badnessState||'--'}}</template>
</el-table-column>
<el-table-column label="劳务队长" min-width="120" :resizable="false">
<template slot-scope="scope">
......@@ -333,12 +333,13 @@
</template>
<script>
import { encodeStr } from "@/assets/js/common.js";
import "@/assets/styles/public.scss";
import "@/assets/styles/supplierlist.scss";
import skeleton from '@/views/project/projectList/component/skeleton';
import {customerAll,areaAll,customerExport} from '@/api/supplier/supplier';
import { getDicts } from "@/api/system/dict/data";
import { encodeStr } from '@/assets/js/common.js'
import '@/assets/styles/public.scss'
import '@/assets/styles/supplierlist.scss'
import skeleton from '@/views/project/projectList/component/skeleton'
import { areaAll, customerAll, customerExport } from '@/api/supplier/supplier'
import { getDicts } from '@/api/system/dict/data'
export default {
name: 'ledger',
components:{skeleton},
......
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