Commit 9188fa11 authored by chenyuefang's avatar chenyuefang

Merge remote-tracking branch 'origin/V20231129-中建一局二公司' into V20231129-中建一局二公司

parents 09485835 79e4e022
...@@ -67,6 +67,9 @@ user: ...@@ -67,6 +67,9 @@ user:
spring: spring:
application: application:
name: ${ruoyi.name} name: ${ruoyi.name}
jpa:
open-in-view: false
# 资源信息 # 资源信息
messages: messages:
# 国际化资源文件路径 # 国际化资源文件路径
...@@ -324,14 +327,16 @@ lock4j: ...@@ -324,14 +327,16 @@ lock4j:
management: management:
endpoints: endpoints:
enabled-by-default: false enabled-by-default: false
web:
exposure: # endpoints:
include: '*' # web:
endpoint: # exposure:
health: # include: '*'
show-details: ALWAYS # endpoint:
logfile: # health:
external-file: ./logs/sys-console.log # show-details: ALWAYS
# logfile:
# external-file: ./logs/sys-console.log
gv: gv:
img-path: D:\dsk\dsk-operate-sys\ img-path: D:\dsk\dsk-operate-sys\
......
...@@ -54,8 +54,6 @@ public class DataAnalysisComponent { ...@@ -54,8 +54,6 @@ public class DataAnalysisComponent {
if (ObjectUtils.isEmpty(fileList)) return; if (ObjectUtils.isEmpty(fileList)) return;
//文件处理 //文件处理
for (CbProjectFile file : fileList) { for (CbProjectFile file : fileList) {
// if (file.getDelFlag() == 0) {
//文件下载 //文件下载
InputStream inputStream = ossService.downFileIO(file.getFileOssId()); InputStream inputStream = ossService.downFileIO(file.getFileOssId());
if (ObjectUtil.isNull(inputStream)) { if (ObjectUtil.isNull(inputStream)) {
...@@ -84,24 +82,28 @@ public class DataAnalysisComponent { ...@@ -84,24 +82,28 @@ public class DataAnalysisComponent {
} }
transactionTemplate.execute(status -> { transactionTemplate.execute(status -> {
try { try {
//分批次插入 // //分批次插入
if (quantitySummaryList.size() > 1000) { // if (quantitySummaryList.size() > 1000) {
int index = 0; // int index = 0;
int sum = quantitySummaryList.size(); // int sum = quantitySummaryList.size();
while (index < sum) { // while (index < sum) {
List<CbQuantitySummary> divideList = quantitySummaryList.subList(index, Math.max((index + 1) * 1000, sum)); // List<CbQuantitySummary> divideList = quantitySummaryList.subList(index, Math.min(index + 1000, sum));
boolean b = quantitySummaryService.saveBatch(divideList); // boolean b = quantitySummaryService.saveBatch(divideList);
if (!b) { // if (!b) {
throw new ServiceException("数据插入失败!"); // throw new ServiceException("数据插入失败!");
} // }
index += 1000; // index += 1000;
} // }
} else { // } else {
boolean b = quantitySummaryService.saveBatch(quantitySummaryList); // boolean b = quantitySummaryService.saveBatch(quantitySummaryList);
if (!b) { // if (!b) {
// throw new ServiceException("数据插入失败!");
// }
// }
boolean a = quantitySummaryService.batchInsert(quantitySummaryList);
if (!a) {
throw new ServiceException("数据插入失败!"); throw new ServiceException("数据插入失败!");
} }
}
file.setFileParseStatus(2); file.setFileParseStatus(2);
boolean b = projectFileService.updateById(file); boolean b = projectFileService.updateById(file);
if (!b) { if (!b) {
...@@ -115,10 +117,6 @@ public class DataAnalysisComponent { ...@@ -115,10 +117,6 @@ public class DataAnalysisComponent {
} }
return Boolean.TRUE; return Boolean.TRUE;
}); });
// } else {
// quantitySummaryService.remove(Wrappers.<CbQuantitySummary>lambdaQuery().eq(CbQuantitySummary::getCbProjectFileId, file.getId()));
// projectFileService.removeById(file);
// }
} }
} }
} }
...@@ -61,32 +61,32 @@ public interface CbProjectConstants { ...@@ -61,32 +61,32 @@ public interface CbProjectConstants {
/** /**
* 成本类型:直接费成本 * 成本类型:直接费成本
*/ */
Integer CB_TYPE_DIRECT_EXPENSE = 0; int CB_TYPE_DIRECT_EXPENSE = 0;
String CB_TYPE_DIRECT_EXPENSE_NAME = "直接费成本"; String CB_TYPE_DIRECT_EXPENSE_NAME = "直接费成本";
/** /**
* 成本类型:工料汇总 * 成本类型:工料汇总
*/ */
Integer CB_TYPE_QUANTITY_SUMMARY = 1; int CB_TYPE_QUANTITY_SUMMARY = 1;
String CB_TYPE_QUANTITY_SUMMARY_NAME = "工料汇总"; String CB_TYPE_QUANTITY_SUMMARY_NAME = "工料汇总";
/** /**
* 成本类型:措施项目 * 成本类型:措施项目
*/ */
Integer CB_TYPE_MEASURE_PROJECT = 2; int CB_TYPE_MEASURE_PROJECT = 2;
String CB_TYPE_MEASURE_PROJECT_NAME = "措施项目"; String CB_TYPE_MEASURE_PROJECT_NAME = "措施项目";
/** /**
* 成本类型:其他项目 * 成本类型:其他项目
*/ */
Integer CB_TYPE_OTHER_PROJECT = 3; int CB_TYPE_OTHER_PROJECT = 3;
String CB_TYPE_OTHER_PROJECT_NAME = "其他项目"; String CB_TYPE_OTHER_PROJECT_NAME = "其他项目";
/** /**
* 成本类型:现场经费 * 成本类型:现场经费
*/ */
Integer CB_TYPE_SCENE_EXPENSE = 4; int CB_TYPE_SCENE_EXPENSE = 4;
String CB_TYPE_SCENE_EXPENSE_NAME = "现场经费"; String CB_TYPE_SCENE_EXPENSE_NAME = "现场经费";
/** /**
* 成本类型:成本汇总 * 成本类型:成本汇总
*/ */
Integer CB_TYPE_SUMMARY = 5; int CB_TYPE_SUMMARY = 5;
String CB_TYPE_SUMMARY_NAME = "成本汇总"; String CB_TYPE_SUMMARY_NAME = "成本汇总";
} }
...@@ -3,6 +3,7 @@ package com.dsk.cscec.controller; ...@@ -3,6 +3,7 @@ package com.dsk.cscec.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.dsk.common.annotation.Log; import com.dsk.common.annotation.Log;
...@@ -24,11 +25,13 @@ import com.dsk.cscec.domain.bo.CbCostMeasureActualSaveBo; ...@@ -24,11 +25,13 @@ import com.dsk.cscec.domain.bo.CbCostMeasureActualSaveBo;
import com.dsk.cscec.domain.vo.CbCostMeasureActualVo; import com.dsk.cscec.domain.vo.CbCostMeasureActualVo;
import com.dsk.cscec.domain.vo.CbCostMeasuresImportVo; import com.dsk.cscec.domain.vo.CbCostMeasuresImportVo;
import com.dsk.cscec.domain.vo.CbCostMeasuresItemVo; import com.dsk.cscec.domain.vo.CbCostMeasuresItemVo;
import com.dsk.cscec.domain.vo.CbProjectExpenseSummaryVo;
import com.dsk.cscec.listener.ProjectCostMeasureImportListener; import com.dsk.cscec.listener.ProjectCostMeasureImportListener;
import com.dsk.cscec.service.CbProjectExpenseSummaryService; import com.dsk.cscec.service.CbProjectExpenseSummaryService;
import com.dsk.cscec.service.ICbCostMeasureService; import com.dsk.cscec.service.ICbCostMeasureService;
import com.dsk.system.domain.vo.SysUserImportVo; import com.dsk.system.domain.vo.SysUserImportVo;
import com.dsk.system.listener.SysUserImportListener; import com.dsk.system.listener.SysUserImportListener;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
...@@ -63,6 +66,22 @@ public class CbCostMeasureController { ...@@ -63,6 +66,22 @@ public class CbCostMeasureController {
private CbProjectExpenseSummaryService cbProjectExpenseSummaryService; private CbProjectExpenseSummaryService cbProjectExpenseSummaryService;
/**
* 获取实际月份列表
*
* @param cbCostMeasureBo CB成本衡量范围
* @return {@link R}<{@link List}<{@link String}>>
*/
@SaIgnore
@GetMapping(value = "/actual/months")
public R<List<String>> actualMonths(CbCostMeasureActualBo cbCostMeasureBo) {
List<String> data = cbCostMeasureService.actualMonthList(cbCostMeasureBo);
if (ObjectUtil.isNull(data)) {
data = new ArrayList<>();
}
return R.ok(data);
}
/** /**
* 措施费一级大类 * 措施费一级大类
* 根据项目查询措施费一级大类 * 根据项目查询措施费一级大类
...@@ -91,8 +110,13 @@ public class CbCostMeasureController { ...@@ -91,8 +110,13 @@ public class CbCostMeasureController {
// @SaCheckPermission("cb:costmeasures:list") // @SaCheckPermission("cb:costmeasures:list")
@SaIgnore @SaIgnore
@GetMapping("/list") @GetMapping("/list")
public R<List<CbCostMeasureActualVo>> list(CbCostMeasureActualBo cbCostMeasure) { public R<List> list(CbCostMeasureActualBo cbCostMeasure) {
List<CbCostMeasureActualVo> data= cbCostMeasureService.selectDataList(cbCostMeasure); if(ObjectUtil.isNotEmpty(cbCostMeasure)&&cbCostMeasure.getId()==0){
Integer dataType=2;
List<CbProjectExpenseSummaryVo> dataList = cbCostMeasureService.getSummaryData(cbCostMeasure.getProjectId(),dataType,cbCostMeasure.getMonth());
return R.ok(dataList);
}
List<Tree<Long>> data= cbCostMeasureService.selectDataList(cbCostMeasure);
if (ObjectUtil.isNull(data)) { if (ObjectUtil.isNull(data)) {
data = new ArrayList<>(); data = new ArrayList<>();
} }
...@@ -133,6 +157,24 @@ public class CbCostMeasureController { ...@@ -133,6 +157,24 @@ public class CbCostMeasureController {
/**
* 获取上一次推送工程量
*
* @param measuresId 推送BO
* @return {@link R}<{@link List}<{@link CbCostMeasureActualVo}>>
*/
// @SaCheckPermission("cb:costmeasures:actual:push")
@SaIgnore
@GetMapping("/last/project/volume/{measuresId}")
public R<Object> lastProjectVolume(@PathVariable("measuresId") Long measuresId) {
Assert.notNull(measuresId,"措施费记录id不能为空!");
Object pushJson= cbCostMeasureService.lastProjectVolume(measuresId);
return R.ok("操作成功",pushJson);
}
/** /**
* 获取批量措施费列表 * 获取批量措施费列表
...@@ -200,10 +242,10 @@ public class CbCostMeasureController { ...@@ -200,10 +242,10 @@ public class CbCostMeasureController {
@Log(title = "措施费汇总获取") @Log(title = "措施费汇总获取")
// @SaCheckPermission("system:user:import") // @SaCheckPermission("system:user:import")
@PostMapping(value = "/summary/data") @PostMapping(value = "/summary/data")
public R<List<CbProjectExpenseSummary>> summaryData(Long projectId) throws Exception { public R<List<CbProjectExpenseSummaryVo>> summaryData(Long projectId,String month) throws Exception {
Integer dataType=2; Integer dataType=2;
List<CbProjectExpenseSummary> cbProjectExpenseSummaries = cbProjectExpenseSummaryService.queryCbSceneExpenseSummaryDataByType(projectId, dataType); List<CbProjectExpenseSummaryVo> dataList = cbCostMeasureService.getSummaryData(projectId,dataType,month);
return R.ok(cbProjectExpenseSummaries); return R.ok(dataList);
} }
......
...@@ -8,6 +8,7 @@ import com.dsk.common.core.page.TableDataInfo; ...@@ -8,6 +8,7 @@ import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.CbProjectRecord; import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.bo.*; import com.dsk.cscec.domain.bo.*;
import com.dsk.cscec.domain.vo.CbProjectCbStageNotDraftVo; import com.dsk.cscec.domain.vo.CbProjectCbStageNotDraftVo;
import com.dsk.cscec.domain.vo.CbProjectInfoVo;
import com.dsk.cscec.domain.vo.CbProjectRecordSearchVo; import com.dsk.cscec.domain.vo.CbProjectRecordSearchVo;
import com.dsk.cscec.service.CbProjectRecordService; import com.dsk.cscec.service.CbProjectRecordService;
import com.dsk.cscec.service.IDProjectService; import com.dsk.cscec.service.IDProjectService;
...@@ -76,7 +77,7 @@ public class CbProjectRecordController extends BaseController { ...@@ -76,7 +77,7 @@ public class CbProjectRecordController extends BaseController {
* 获取项目历史阶段信息(懒加载) * 获取项目历史阶段信息(懒加载)
*/ */
@GetMapping("/getProjectHistoryInfo") @GetMapping("/getProjectHistoryInfo")
public R<List<CbProjectRecord>> getProjectHistoryInfo(@RequestBody CbProjectHistorySearchBo searchBo) { public R<List<CbProjectRecord>> getProjectHistoryInfo(CbProjectHistorySearchBo searchBo) {
return R.ok(baseService.getProjectHistoryInfo(searchBo)); return R.ok(baseService.getProjectHistoryInfo(searchBo));
} }
...@@ -136,5 +137,13 @@ public class CbProjectRecordController extends BaseController { ...@@ -136,5 +137,13 @@ public class CbProjectRecordController extends BaseController {
public R<Void> deleteDraft(@NotNull(message = "项目ID不能为空") @PathVariable Long projectId) { public R<Void> deleteDraft(@NotNull(message = "项目ID不能为空") @PathVariable Long projectId) {
return toAjax(baseService.deleteDraft(projectId)); return toAjax(baseService.deleteDraft(projectId));
} }
/**
* 获取工程项目信息
*/
@GetMapping("/getCbProjectInfo/{projectId}")
public R<CbProjectInfoVo> getCbProjectInfo(@NotNull(message = "项目ID不能为空") @PathVariable Long projectId) {
return R.ok(dProjectService.getCbProjectInfo(projectId));
}
} }
...@@ -2,6 +2,7 @@ package com.dsk.cscec.domain; ...@@ -2,6 +2,7 @@ package com.dsk.cscec.domain;
import java.util.Date; import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
...@@ -10,6 +11,7 @@ import java.io.Serializable; ...@@ -10,6 +11,7 @@ import java.io.Serializable;
import com.dsk.common.annotation.Excel; import com.dsk.common.annotation.Excel;
import lombok.Data; import lombok.Data;
import org.springframework.util.ObjectUtils;
/** /**
* 成本-工料汇总基本表(CbQuantitySummary)表实体类 * 成本-工料汇总基本表(CbQuantitySummary)表实体类
...@@ -32,7 +34,6 @@ public class CbQuantitySummary implements Serializable { ...@@ -32,7 +34,6 @@ public class CbQuantitySummary implements Serializable {
/** /**
* 序号 * 序号
*/ */
@Excel(name = "序号")
private Integer number; private Integer number;
/** /**
* 成本阶段(0:标前成本 1:标后成本 2:转固成本) * 成本阶段(0:标前成本 1:标后成本 2:转固成本)
...@@ -141,5 +142,12 @@ public class CbQuantitySummary implements Serializable { ...@@ -141,5 +142,12 @@ public class CbQuantitySummary implements Serializable {
@TableLogic(value = "0", delval = "2") @TableLogic(value = "0", delval = "2")
private Integer delFalg; private Integer delFalg;
@Excel(name = "序号")
@TableField(exist = false)
private String num;
public void setNum(String num) {
this.number = ObjectUtils.isEmpty(num) ? null : Integer.valueOf(num);
}
} }
...@@ -33,7 +33,6 @@ public class DProject implements Serializable { ...@@ -33,7 +33,6 @@ public class DProject implements Serializable {
/** /**
* IPM项目名称 * IPM项目名称
*/ */
private String projectName; private String projectName;
/** /**
...@@ -49,7 +48,6 @@ public class DProject implements Serializable { ...@@ -49,7 +48,6 @@ public class DProject implements Serializable {
/** /**
* 项目简称 * 项目简称
*/ */
private String projectShortName; private String projectShortName;
/** /**
......
...@@ -16,33 +16,33 @@ public class CbCostMeasureActualPushBo { ...@@ -16,33 +16,33 @@ public class CbCostMeasureActualPushBo {
/** /**
* 截止本月工程量 * 本月实际工程量
*/
private BigDecimal costEffective;
/**
* 本月实际工程量
*/ */
@TableField(value = "current_project_volume")
private BigDecimal currentProjectVolume; private BigDecimal currentProjectVolume;
/** /**
* 推送工程量 * 推送工程量
*/ */
@TableField(value = "submit_project_volume")
private BigDecimal submitProjectVolume; private BigDecimal submitProjectVolume;
/** /**
* 年月 * 年月
*/ */
@TableField(value = "`month`")
private String month; private String month;
/** /**
* 推送时间 * 推送时间
*/ */
@TableField(value = "push_time")
private Date pushTime; private Date pushTime;
/** /**
* 推送数据json * 推送数据json
*/ */
@TableField(value = "push_data_json")
private String pushDataJson; private String pushDataJson;
/** /**
......
...@@ -9,6 +9,7 @@ import lombok.Data; ...@@ -9,6 +9,7 @@ import lombok.Data;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List;
@Data @Data
public class CbCostMeasureActualVo { public class CbCostMeasureActualVo {
...@@ -17,6 +18,10 @@ public class CbCostMeasureActualVo { ...@@ -17,6 +18,10 @@ public class CbCostMeasureActualVo {
*/ */
private Long id; private Long id;
private Long parentId;
/** /**
* 序号 * 序号
*/ */
...@@ -138,6 +143,9 @@ public class CbCostMeasureActualVo { ...@@ -138,6 +143,9 @@ public class CbCostMeasureActualVo {
private Date pushTime; private Date pushTime;
private String pushDataJson;
/** /**
* 修改人 * 修改人
*/ */
...@@ -162,6 +170,10 @@ public class CbCostMeasureActualVo { ...@@ -162,6 +170,10 @@ public class CbCostMeasureActualVo {
@TableField(value = "update_time") @TableField(value = "update_time")
private Date updateTime; private Date updateTime;
private List<CbCostMeasureActualVo> childrens;
public static final String COL_ID = "id"; public static final String COL_ID = "id";
public static final String COL_PLAN_MEASURE_ID = "plan_measure_id"; public static final String COL_PLAN_MEASURE_ID = "plan_measure_id";
......
package com.dsk.cscec.domain.vo;
import com.baomidou.mybatisplus.annotation.*;
import com.dsk.common.annotation.Excel;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 项目费用汇总表
*/
@Data
public class CbProjectExpenseSummaryVo {
/**
* 主键ID
*/
private Long id;
/**
* 项目ID
*/
private Long projectId;
/**
* 项目文件ID
*/
private Long projectFileId;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
*/
private Integer cbStage;
/**
* 序号
*/
private String number;
/**
* 数据类型(2:措施项目、3:其他项目、4:现场经费)
*/
private Integer dataType;
/**
* 名称
*/
private String expenseName;
/**
* 数值
*/
private String expenseValue;
/**
* 占比
*/
private String proportion;
/**
* 本月工程量
*/
private BigDecimal monthsProjectQuantity;
}
\ No newline at end of file
package com.dsk.cscec.domain.vo;
import lombok.Data;
import java.util.Date;
/**
* @author sxk
* @date 2024.02.28
* @time 14:24
*/
@Data
public class CbProjectInfoVo {
//项目基本情况↓
/**
* 工程名称
*/
private String projectName;
/**
* 区域名称(工程所在地)
*/
private String areaName;
/**
* 城市名称(工程所在地)
*/
private String cityName;
/**
* 县市(工程所在地)
*/
private String districtName;
/**
* 项目地址(工程详细地址)
*/
private String projectAddress;
//业态
/**
* 工程类型上级名称(工程类型)
*/
private String projectType1;
//计价模式(清单/定额)
//承包形式(EPC/DB/EP/PC)
//合同类型
//建设单位
/**
* 设计单位
*/
private String designOrgName;
//勘察单位
/**
* 监理单位
*/
private String supervisorOrgName;
//代理公司(或工料测量师)
//招标形式
//承包方式
//预计合同额(万元)
/**
* 资金来源名称(资金来源)
*/
private String moneySource;
//分包标准费用项价格库
//材料机械标准费用价格库
//专业类别
//平台项目名称
//核定总人数
//折算收入不含税系数(应纳税率)
//收入清单增值税率
//项目特征信息↓
//地上建筑面积
//地下建筑面积
//坑底面积
//占地面积
//结构类型
//基础类型
//单体个数
/**
* 地上层数
*/
private String noOfOverfloor;
/**
* 地下层数
*/
private String noOfUnderfloor;
/**
* 建筑高度(m)
*/
private String constructHeight;
//地下深度
//首层(m)
//标准层(m)
//其他说明
//项目投标时的要点↓
//建筑工程
//机电工程
//专业工程暂估
//装饰工程
//配套工程
//指定分包
//报价方式/合同形式
//指定供应
//电子标
/**
* 计划开工日期
*/
private Date planStartDate;
/**
* 计划竣工日期
*/
private Date planEndDate;
/**
* 合同总工期(总工期)
*/
private String contractWorkDays;
//缺陷责任
//质量标准
//品牌要求
//质量要求
//报价中需要注意的其他问题/风险
//评标办法↓
//评标程序
//评标原则
//招标控制价(如有)
//专家组成
//定标原则
//报价上限(如有)
//投标各时间节点↓
//标前会议(或者领取投标文件的时间)
//投标人提出疑问的截止时间
//招标人答复疑问的截止时间
//现场踏勤时间
//招标控制价(如有)
//报价上限(如有)
//时间
//开标时的要求
//地点
//投标有效期
}
...@@ -13,4 +13,6 @@ public interface CbCostMeasureActualMapper extends BaseMapper<CbCostMeasureActua ...@@ -13,4 +13,6 @@ public interface CbCostMeasureActualMapper extends BaseMapper<CbCostMeasureActua
int updateByPrimaryKeySelective(CbCostMeasureActual record); int updateByPrimaryKeySelective(CbCostMeasureActual record);
List<CbCostMeasureActualVo> selectDataList(CbCostMeasureActualBo costMeasureActualBo); List<CbCostMeasureActualVo> selectDataList(CbCostMeasureActualBo costMeasureActualBo);
List<CbCostMeasureActualVo> getMonthActualCostList(Long projectId, String month);
} }
\ No newline at end of file
...@@ -7,10 +7,13 @@ import com.dsk.cscec.domain.CbCostMeasure; ...@@ -7,10 +7,13 @@ import com.dsk.cscec.domain.CbCostMeasure;
import com.dsk.cscec.domain.CbQuantitySummary; import com.dsk.cscec.domain.CbQuantitySummary;
import com.dsk.cscec.domain.bo.CbCostMeasureActualBo; import com.dsk.cscec.domain.bo.CbCostMeasureActualBo;
import com.dsk.cscec.domain.vo.CbCostMeasureActualVo; import com.dsk.cscec.domain.vo.CbCostMeasureActualVo;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
public interface CbCostMeasureMapper extends BaseMapper<CbCostMeasure> { public interface CbCostMeasureMapper extends BaseMapper<CbCostMeasure> {
List<CbCostMeasureActualVo> selectListByProjectAndNo(CbCostMeasureActualBo cbCostMeasure); List<CbCostMeasureActualVo> selectListByProjectAndNo(CbCostMeasureActualBo cbCostMeasure);
List<String> actualMonthList(CbCostMeasureActualBo cbCostMeasureBo);
} }
\ No newline at end of file
...@@ -20,6 +20,7 @@ import java.util.Map; ...@@ -20,6 +20,7 @@ import java.util.Map;
*/ */
public interface CbQuantitySummaryMapper extends BaseMapperPlus<CbQuantitySummaryMapper,CbQuantitySummary,CbQuantitySummary> { public interface CbQuantitySummaryMapper extends BaseMapperPlus<CbQuantitySummaryMapper,CbQuantitySummary,CbQuantitySummary> {
int batchInsert(@Param("list") List<CbQuantitySummary> list);
List<Map<String, Object>> selectSubject(CbProjectBaseBo bo); List<Map<String, Object>> selectSubject(CbProjectBaseBo bo);
...@@ -29,5 +30,7 @@ public interface CbQuantitySummaryMapper extends BaseMapperPlus<CbQuantitySummar ...@@ -29,5 +30,7 @@ public interface CbQuantitySummaryMapper extends BaseMapperPlus<CbQuantitySummar
List<CbQuantitySummaryListVo> selectListBySubject(CbQuantitySummaryListBo bo); List<CbQuantitySummaryListVo> selectListBySubject(CbQuantitySummaryListBo bo);
} }
...@@ -19,5 +19,6 @@ import java.util.Map; ...@@ -19,5 +19,6 @@ import java.util.Map;
*/ */
public interface ICbCostMeasureActualService extends IService<CbCostMeasureActual> { public interface ICbCostMeasureActualService extends IService<CbCostMeasureActual> {
List<CbCostMeasureActualVo> getMonthActualCostList(Long projectId, String month);
} }
package com.dsk.cscec.service; package com.dsk.cscec.service;
import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.entity.SysDictData;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.CbCostMeasure; import com.dsk.cscec.domain.CbCostMeasure;
import com.dsk.cscec.domain.CbProjectExpenseSummary;
import com.dsk.cscec.domain.bo.CbCostMeasureActualBo; import com.dsk.cscec.domain.bo.CbCostMeasureActualBo;
import com.dsk.cscec.domain.bo.CbCostMeasureActualPushBo; import com.dsk.cscec.domain.bo.CbCostMeasureActualPushBo;
import com.dsk.cscec.domain.bo.CbCostMeasureActualSaveBo; import com.dsk.cscec.domain.bo.CbCostMeasureActualSaveBo;
import com.dsk.cscec.domain.vo.CbCostMeasureActualVo; import com.dsk.cscec.domain.vo.CbCostMeasureActualVo;
import com.dsk.cscec.domain.vo.CbCostMeasuresItemVo; import com.dsk.cscec.domain.vo.CbProjectExpenseSummaryVo;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream; import java.io.InputStream;
import java.util.List; import java.util.List;
...@@ -29,7 +25,7 @@ public interface ICbCostMeasureService extends IService<CbCostMeasure> { ...@@ -29,7 +25,7 @@ public interface ICbCostMeasureService extends IService<CbCostMeasure> {
List<Map<String, Object>> listByLevel(Long projectId, int i); List<Map<String, Object>> listByLevel(Long projectId, int i);
List<CbCostMeasureActualVo> selectDataList(CbCostMeasureActualBo cbCostMeasure); List<Tree<Long>> selectDataList(CbCostMeasureActualBo cbCostMeasure);
void saveBatchCostMeasureActual(List<CbCostMeasureActualSaveBo> boList); void saveBatchCostMeasureActual(List<CbCostMeasureActualSaveBo> boList);
...@@ -40,5 +36,11 @@ public interface ICbCostMeasureService extends IService<CbCostMeasure> { ...@@ -40,5 +36,11 @@ public interface ICbCostMeasureService extends IService<CbCostMeasure> {
void parseCbCostMeasureFile(Long projectId); void parseCbCostMeasureFile(Long projectId);
boolean reparseCbCostMeasureFile(Long projectId,Long projectFileId); boolean reparseCbCostMeasureFile(Long projectId,Long projectFileId);
String lastProjectVolume(Long measuresId);
List<String> actualMonthList(CbCostMeasureActualBo cbCostMeasureBo);
List<CbProjectExpenseSummaryVo> getSummaryData(Long projectId, Integer dataType,String month);
} }
...@@ -28,5 +28,7 @@ public interface ICbQuantitySummaryService extends IService<CbQuantitySummary> { ...@@ -28,5 +28,7 @@ public interface ICbQuantitySummaryService extends IService<CbQuantitySummary> {
void pushData(CbQuantitySummaryActual bo); void pushData(CbQuantitySummaryActual bo);
boolean batchInsert(List<CbQuantitySummary> list);
} }
...@@ -7,6 +7,7 @@ import com.dsk.cscec.domain.DProject; ...@@ -7,6 +7,7 @@ import com.dsk.cscec.domain.DProject;
import com.dsk.cscec.domain.bo.CooperateProjectDetailSearchBo; import com.dsk.cscec.domain.bo.CooperateProjectDetailSearchBo;
import com.dsk.cscec.domain.bo.ProjectDetailBo; import com.dsk.cscec.domain.bo.ProjectDetailBo;
import com.dsk.cscec.domain.bo.ProjectSearchBo; import com.dsk.cscec.domain.bo.ProjectSearchBo;
import com.dsk.cscec.domain.vo.CbProjectInfoVo;
import com.dsk.cscec.domain.vo.CooperateProjectDetailSearchVo; import com.dsk.cscec.domain.vo.CooperateProjectDetailSearchVo;
import com.dsk.cscec.domain.vo.ProjectDetailVo; import com.dsk.cscec.domain.vo.ProjectDetailVo;
import com.dsk.cscec.domain.vo.ProjectSearchVo; import com.dsk.cscec.domain.vo.ProjectSearchVo;
...@@ -60,5 +61,12 @@ public interface IDProjectService extends IService<DProject> { ...@@ -60,5 +61,12 @@ public interface IDProjectService extends IService<DProject> {
* @return 校验结果 * @return 校验结果
*/ */
Boolean checkProjectCodeExist(String projectCode); Boolean checkProjectCodeExist(String projectCode);
/**
* 获取工程项目信息
* @param projectId 项目ID
* @return 工程项目信息
*/
CbProjectInfoVo getCbProjectInfo(Long projectId);
} }
...@@ -72,6 +72,7 @@ public class CbProjectExpenseSummaryServiceImpl extends ServiceImpl<CbProjectExp ...@@ -72,6 +72,7 @@ public class CbProjectExpenseSummaryServiceImpl extends ServiceImpl<CbProjectExp
InputStream inputStream = ossService.downFileIO(projectFile.getFileOssId()); InputStream inputStream = ossService.downFileIO(projectFile.getFileOssId());
if (ObjectUtil.isNull(inputStream)) { if (ObjectUtil.isNull(inputStream)) {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL); projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
log.error("FileId:" + projectFile.getId() + ",文件数据不存在");
projectFile.setFailRemark("文件数据不存在"); projectFile.setFailRemark("文件数据不存在");
projectFileMapper.updateById(projectFile); projectFileMapper.updateById(projectFile);
continue; continue;
...@@ -80,6 +81,7 @@ public class CbProjectExpenseSummaryServiceImpl extends ServiceImpl<CbProjectExp ...@@ -80,6 +81,7 @@ public class CbProjectExpenseSummaryServiceImpl extends ServiceImpl<CbProjectExp
List<CbProjectExpenseSummary> importList = new ExcelUtils<>(CbProjectExpenseSummary.class).importExcelAllSheet(inputStream, 0); List<CbProjectExpenseSummary> importList = new ExcelUtils<>(CbProjectExpenseSummary.class).importExcelAllSheet(inputStream, 0);
if (importList.isEmpty()) { if (importList.isEmpty()) {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL); projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
log.error("FileId:" + projectFile.getId() + ",表格中不存在待导入数据");
projectFile.setFailRemark("表格中不存在待导入数据!"); projectFile.setFailRemark("表格中不存在待导入数据!");
projectFileMapper.updateById(projectFile); projectFileMapper.updateById(projectFile);
continue; continue;
...@@ -100,7 +102,8 @@ public class CbProjectExpenseSummaryServiceImpl extends ServiceImpl<CbProjectExp ...@@ -100,7 +102,8 @@ public class CbProjectExpenseSummaryServiceImpl extends ServiceImpl<CbProjectExp
.collect(Collectors.toList()); .collect(Collectors.toList());
if (summaryList.size() != importList.size()) { if (summaryList.size() != importList.size()) {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL); projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
projectFile.setFailRemark("表格中存在\"名称\"列为空数据!"); log.error("FileId:" + projectFile.getId() + ",表格中存在\"名称\"列为空数据!");
projectFile.setFailRemark("表格中存在\"名称\"列为空数据");
projectFileMapper.updateById(projectFile); projectFileMapper.updateById(projectFile);
continue; continue;
} }
......
...@@ -181,7 +181,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -181,7 +181,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
file.setFileParseStatus(3); file.setFileParseStatus(3);
file.setFailRemark("文件数据不存在"); file.setFailRemark("文件数据不存在");
projectFileService.updateById(file); projectFileService.updateById(file);
break; continue;
} }
// 文件名称 // 文件名称
...@@ -191,7 +191,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -191,7 +191,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
Long fileId = file.getId(); Long fileId = file.getId();
if ("其他费".equals(name)) { if ("其他费".equals(name)) {
totalDataAnalysis(inputStream, name, file, projectId, cbStage); totalDataAnalysis(inputStream, name, file, projectId, cbStage);
break; continue;
} }
//解析数据 //解析数据
ExcelResult<CbProjectOtherImportVo> importVoExcelResult = ExcelResult<CbProjectOtherImportVo> importVoExcelResult =
...@@ -204,7 +204,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper, ...@@ -204,7 +204,7 @@ public class CbProjectOtherServiceImpl extends ServiceImpl<CbProjectOtherMapper,
file.setFileParseStatus(3); file.setFileParseStatus(3);
file.setFailRemark("表格中不存在待导入数据!"); file.setFailRemark("表格中不存在待导入数据!");
projectFileService.updateById(file); projectFileService.updateById(file);
break; continue;
} }
log.debug(">>>>" + importVoList.size()); log.debug(">>>>" + importVoList.size());
CbProjectOther rootProjectOther = new CbProjectOther(); CbProjectOther rootProjectOther = new CbProjectOther();
......
...@@ -139,5 +139,11 @@ public class CbQuantitySummaryServiceImpl extends ServiceImpl<CbQuantitySummaryM ...@@ -139,5 +139,11 @@ public class CbQuantitySummaryServiceImpl extends ServiceImpl<CbQuantitySummaryM
//TODO 推送数据 //TODO 推送数据
} }
@Override
public boolean batchInsert(List<CbQuantitySummary> list) {
int i = baseMapper.batchInsert(list);
return i == list.size();
}
} }
...@@ -113,6 +113,7 @@ public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpens ...@@ -113,6 +113,7 @@ public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpens
InputStream inputStream = ossService.downFileIO(projectFile.getFileOssId()); InputStream inputStream = ossService.downFileIO(projectFile.getFileOssId());
if (ObjectUtil.isNull(inputStream)) { if (ObjectUtil.isNull(inputStream)) {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL); projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
log.error("FileId:" + projectFile.getId() + ",文件数据不存在");
projectFile.setFailRemark("文件数据不存在"); projectFile.setFailRemark("文件数据不存在");
projectFileMapper.updateById(projectFile); projectFileMapper.updateById(projectFile);
continue; continue;
...@@ -121,6 +122,7 @@ public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpens ...@@ -121,6 +122,7 @@ public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpens
List<CbSceneExpenseChildrenImportBo> importList = new ExcelUtils<>(CbSceneExpenseChildrenImportBo.class).importExcelAllSheet(inputStream, 0); List<CbSceneExpenseChildrenImportBo> importList = new ExcelUtils<>(CbSceneExpenseChildrenImportBo.class).importExcelAllSheet(inputStream, 0);
if (importList.isEmpty()) { if (importList.isEmpty()) {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL); projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
log.error("FileId:" + projectFile.getId() + ",表格中不存在待导入数据");
projectFile.setFailRemark("表格中不存在待导入数据"); projectFile.setFailRemark("表格中不存在待导入数据");
projectFileMapper.updateById(projectFile); projectFileMapper.updateById(projectFile);
continue; continue;
...@@ -154,7 +156,8 @@ public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpens ...@@ -154,7 +156,8 @@ public class CbSceneExpenseChildrenServiceImpl extends ServiceImpl<CbSceneExpens
.collect(Collectors.toList()); .collect(Collectors.toList());
if (summaryList.size() != importList.size()) { if (summaryList.size() != importList.size()) {
projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL); projectFile.setFileParseStatus(CbProjectConstants.PROJECT_FILE_STATUS_PARSE_FAIL);
projectFile.setFailRemark("表格中存在\"名称\"列为空数据!"); log.error("FileId:" + projectFile.getId() + ",表格中存在\"名称\"列为空数据");
projectFile.setFailRemark("表格中存在\"名称\"列为空数据");
projectFileMapper.updateById(projectFile); projectFileMapper.updateById(projectFile);
continue; continue;
} }
......
...@@ -3,11 +3,14 @@ package com.dsk.cscec.service.impl; ...@@ -3,11 +3,14 @@ package com.dsk.cscec.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.cscec.domain.CbCostMeasure; import com.dsk.cscec.domain.CbCostMeasure;
import com.dsk.cscec.domain.CbCostMeasureActual; import com.dsk.cscec.domain.CbCostMeasureActual;
import com.dsk.cscec.domain.vo.CbCostMeasureActualVo;
import com.dsk.cscec.mapper.CbCostMeasureActualMapper; import com.dsk.cscec.mapper.CbCostMeasureActualMapper;
import com.dsk.cscec.mapper.CbCostMeasureMapper; import com.dsk.cscec.mapper.CbCostMeasureMapper;
import com.dsk.cscec.service.ICbCostMeasureActualService; import com.dsk.cscec.service.ICbCostMeasureActualService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
/** /**
* @author tanyang * @author tanyang
* @create 2024-02-07 9:38 * @create 2024-02-07 9:38
...@@ -15,4 +18,8 @@ import org.springframework.stereotype.Service; ...@@ -15,4 +18,8 @@ import org.springframework.stereotype.Service;
@Service @Service
public class ICbCostMeasureActualServiceImpl extends ServiceImpl<CbCostMeasureActualMapper, CbCostMeasureActual> implements ICbCostMeasureActualService { public class ICbCostMeasureActualServiceImpl extends ServiceImpl<CbCostMeasureActualMapper, CbCostMeasureActual> implements ICbCostMeasureActualService {
@Override
public List<CbCostMeasureActualVo> getMonthActualCostList(Long projectId, String month) {
return baseMapper.getMonthActualCostList(projectId,month);
}
} }
...@@ -3,6 +3,7 @@ package com.dsk.cscec.service.impl; ...@@ -3,6 +3,7 @@ package com.dsk.cscec.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
...@@ -15,15 +16,18 @@ import com.dsk.common.utils.StringUtils; ...@@ -15,15 +16,18 @@ import com.dsk.common.utils.StringUtils;
import com.dsk.cscec.constant.AdvisoryBodyManageQueryConstants; import com.dsk.cscec.constant.AdvisoryBodyManageQueryConstants;
import com.dsk.cscec.domain.AdvisoryBody; import com.dsk.cscec.domain.AdvisoryBody;
import com.dsk.cscec.domain.AdvisoryBodyProject; import com.dsk.cscec.domain.AdvisoryBodyProject;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.DProject; import com.dsk.cscec.domain.DProject;
import com.dsk.cscec.domain.bo.CooperateProjectDetailSearchBo; import com.dsk.cscec.domain.bo.CooperateProjectDetailSearchBo;
import com.dsk.cscec.domain.bo.ProjectDetailBo; import com.dsk.cscec.domain.bo.ProjectDetailBo;
import com.dsk.cscec.domain.bo.ProjectSearchBo; import com.dsk.cscec.domain.bo.ProjectSearchBo;
import com.dsk.cscec.domain.vo.CbProjectInfoVo;
import com.dsk.cscec.domain.vo.CooperateProjectDetailSearchVo; import com.dsk.cscec.domain.vo.CooperateProjectDetailSearchVo;
import com.dsk.cscec.domain.vo.ProjectDetailVo; import com.dsk.cscec.domain.vo.ProjectDetailVo;
import com.dsk.cscec.domain.vo.ProjectSearchVo; import com.dsk.cscec.domain.vo.ProjectSearchVo;
import com.dsk.cscec.mapper.AdvisoryBodyMapper; import com.dsk.cscec.mapper.AdvisoryBodyMapper;
import com.dsk.cscec.mapper.AdvisoryBodyProjectMapper; import com.dsk.cscec.mapper.AdvisoryBodyProjectMapper;
import com.dsk.cscec.mapper.CbProjectRecordMapper;
import com.dsk.cscec.mapper.DProjectMapper; import com.dsk.cscec.mapper.DProjectMapper;
import com.dsk.cscec.service.IDProjectService; import com.dsk.cscec.service.IDProjectService;
import com.dsk.jsk.domain.EnterpriseInfoHeaderBody; import com.dsk.jsk.domain.EnterpriseInfoHeaderBody;
...@@ -52,6 +56,8 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject> ...@@ -52,6 +56,8 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject>
private AdvisoryBodyProjectMapper advisoryBodyProjectMapper; private AdvisoryBodyProjectMapper advisoryBodyProjectMapper;
@Resource @Resource
private DskOpenApiUtil dskOpenApiUtil; private DskOpenApiUtil dskOpenApiUtil;
@Resource
private CbProjectRecordMapper projectRecordMapper;
/** /**
* 获取所有项目列表数据 * 获取所有项目列表数据
...@@ -258,5 +264,19 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject> ...@@ -258,5 +264,19 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject>
return baseMapper.exists(new LambdaQueryWrapper<DProject>() return baseMapper.exists(new LambdaQueryWrapper<DProject>()
.eq(DProject::getProjectCode, projectCode)); .eq(DProject::getProjectCode, projectCode));
} }
/**
* 获取工程项目信息
*
* @param projectId 项目ID
* @return 工程项目信息
*/
@Override
public CbProjectInfoVo getCbProjectInfo(Long projectId) {
CbProjectRecord projectRecord = projectRecordMapper.selectById(projectId);
Assert.isTrue(projectRecord.getIsGetProjectDetail(), "请先通过IPM项目编码获取数据,或IPM项目编码无效");
return BeanUtil.toBean(baseMapper.selectOne(new LambdaQueryWrapper<DProject>()
.eq(DProject::getProjectCode, projectRecord.getIpmProjectNo())), CbProjectInfoVo.class);
}
} }
...@@ -174,4 +174,14 @@ ...@@ -174,4 +174,14 @@
AND t.cb_stage=#{cbStage} AND t.cb_stage=#{cbStage}
AND t1.`month`=#{month} AND t1.`month`=#{month}
</select> </select>
<select id="getMonthActualCostList" resultType="com.dsk.cscec.domain.vo.CbCostMeasureActualVo">
SELECT t1.item_content, t.cost_effective
FROM cb_cost_measure_actual t
inner JOIN cb_cost_measure t1 ON t1.id=t.plan_measure_id
WHERE
t1.project_id=1
AND t1.parent_id=0
AND t.`month`='202406'
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
id, project_id, cb_stage, parent_id, `level`, `number`, `no`,item_content, work_content, id, project_id, cb_stage, parent_id, `level`, `number`, `no`,item_content, work_content,
unit, quantity, unit_price_excluding_tax, usage_time, amount_excluding_tax, tax_rate, unit, quantity, unit_price_excluding_tax, usage_time, amount_excluding_tax, tax_rate,
amount_including_tax, amortization_ratio, amount_exclude_tax_amortized, amount_include_tax_amortized, amount_including_tax, amortization_ratio, amount_exclude_tax_amortized, amount_include_tax_amortized,
tax_amount, remarks, cost_subject, tax_type, create_time, update_time tax_amount, remarks, cost_subject, tax_type,data_source, create_time, update_time
</sql> </sql>
...@@ -54,4 +54,15 @@ ...@@ -54,4 +54,15 @@
AND t.`no` like concat(#{id},'.%') AND t.`no` like concat(#{id},'.%')
ORDER BY id ASC ORDER BY id ASC
</select> </select>
<select id="actualMonthList" resultType="java.lang.String">
SELECT
t1.`month`
FROM cb_cost_measure t
inner JOIN cb_cost_measure_actual t1 ON t1.plan_measure_id=t.id
WHERE
t.project_id=#{projectId}
and t1.del_flag=0
GROUP BY t1.`month` ORDER BY t1.`month` desc
</select>
</mapper> </mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsk.cscec.mapper.CbQuantitySummaryMapper"> <mapper namespace="com.dsk.cscec.mapper.CbQuantitySummaryMapper">
<insert id="batchInsert" parameterType="com.dsk.cscec.domain.CbQuantitySummary">
INSERT INTO cscec_bms.cb_quantity_summary
(project_id, `number`, cb_stage, cb_subject_name, company_no, org_no, cb_name, job_content,
calculation_rule, unit, material_description, guide_price, bid_unit_price, unit_price_difference, quantity,
combined_price, combined_price_tax, brand_name, bid_source, remark, cb_project_file_id)
VALUES
<foreach collection="list" item="item" separator="," >
(#{item.projectId}, #{item.number}, #{item.cbStage}, #{item.cbSubjectName}, #{item.companyNo}, #{item.orgNo}, #{item.cbName},
#{item.jobContent},#{item.calculationRule},#{item.unit},#{item.materialDescription},#{item.guidePrice},
#{item.bidUnitPrice},#{item.unitPriceDifference},#{item.quantity},#{item.combinedPrice},#{item.combinedPriceTax},
#{item.brandName},#{item.bidSource},#{item.remark},#{item.cbProjectFileId})
</foreach>
</insert>
<select id="selectSubject" resultType="java.util.Map"> <select id="selectSubject" resultType="java.util.Map">
select select
......
...@@ -134,7 +134,7 @@ ...@@ -134,7 +134,7 @@
from cb_summary csu from cb_summary csu
left join cb_summary_actual csa on (csu.id = csa.cb_summary_id and csa.expense_date = #{expenseDate} AND csa.del_flag = 0) left join cb_summary_actual csa on (csu.id = csa.cb_summary_id and csa.expense_date = #{expenseDate} AND csa.del_flag = 0)
left join cb_summary_actual csa1 on (csu.id = csa1.cb_summary_id and csa1.expense_date &lt;= #{expenseDate} AND csa1.del_flag = 0) left join cb_summary_actual csa1 on (csu.id = csa1.cb_summary_id and csa1.expense_date &lt;= #{expenseDate} AND csa1.del_flag = 0)
left join cb_direct_expense cde on (csu.project_id = cde.project_id and csu.cb_stage = cde.cb_stage and cde.del_flag = 0) left join cb_direct_expense cde on (csu.project_id = cde.project_id and cde.del_flag = 0)
where csu.id = #{id} and csu.del_flag = 0 where csu.id = #{id} and csu.del_flag = 0
group by csu.id group by csu.id
order by csu.sort order by csu.sort
...@@ -147,7 +147,7 @@ ...@@ -147,7 +147,7 @@
from cb_summary csu from cb_summary csu
left join cb_summary_actual csa on (csu.id = csa.cb_summary_id and csa.expense_date = #{expenseDate} AND csa.del_flag = 0) left join cb_summary_actual csa on (csu.id = csa.cb_summary_id and csa.expense_date = #{expenseDate} AND csa.del_flag = 0)
left join cb_summary_actual csa1 on (csu.id = csa1.cb_summary_id and csa1.expense_date &lt;= #{expenseDate} AND csa1.del_flag = 0) left join cb_summary_actual csa1 on (csu.id = csa1.cb_summary_id and csa1.expense_date &lt;= #{expenseDate} AND csa1.del_flag = 0)
left join cb_direct_expense cde on (csu.project_id = cde.project_id and csu.cb_stage = cde.cb_stage and cde.del_flag = 0) left join cb_direct_expense cde on (csu.project_id = cde.project_id and cde.del_flag = 0)
where csu.parent_id = #{parentId} and csu.del_flag = 0 where csu.parent_id = #{parentId} and csu.del_flag = 0
group by csu.id group by csu.id
order by csu.sort order by csu.sort
......
...@@ -57,11 +57,20 @@ export function getProjectFileUploadDetail(projectId) { ...@@ -57,11 +57,20 @@ export function getProjectFileUploadDetail(projectId) {
}); });
} }
//根据项目文件导入数据
export function importData(projectId) {
return request({
url: '/cbProjectRecord/importData/'+projectId,
method: 'post',
});
}
//获取草稿箱列表 //获取草稿箱列表
export function getDraftDialogList(projectId) { export function getDraftDialogList(data) {
return request({ return request({
url: '/cbProjectRecord/getDraftDialogList', url: '/cbProjectRecord/getDraftDialogList',
method: 'get', method: 'get',
params:data
}); });
} }
...@@ -74,10 +83,11 @@ export function uploadCbProjectFile(data) { ...@@ -74,10 +83,11 @@ export function uploadCbProjectFile(data) {
}); });
} }
//删除文件 //删除文件
export function deleteCbProjectFile(fileId) { export function deleteCbProjectFile(data) {
return request({ return request({
url: '/cbProjectFile/deleteCbProjectFile/' + fileId, url: '/cbProjectFile/deleteCbProjectFile',
method: 'Delete', method: 'Delete',
data: data
}); });
} }
...@@ -154,6 +164,40 @@ export function getSummarydata(data) { ...@@ -154,6 +164,40 @@ export function getSummarydata(data) {
data: data data: data
}); });
} }
//措施费推送工程量
export function pushProjectvolume(data) {
return request({
url: '/cb/cost/measures/push/project/volume',
method: 'post',
data: data
});
}
//措措施费-获取上一次推送工程量
export function projectVolume(data) {
return request({
url: '/cb/cost/measures/last/project/volume/' + data,
method: 'GET',
});
}
//措施费-获取实际成本月份列表
export const getActualMonthsApi = (params = {}) => request({
url: '/cb/cost/measures/actual/months',
method: 'get',
params
});
//批量保存或修改每月措施费
export function saveBatch(data) {
return request({
url: '/cb/cost/measures/saveBatch',
method: 'post',
data:data,
});
}
// 工料汇总 // 工料汇总
...@@ -169,6 +213,17 @@ export const getFeedSummaryMenuTreeApi = (params = {}) => request({ ...@@ -169,6 +213,17 @@ export const getFeedSummaryMenuTreeApi = (params = {}) => request({
params params
}); });
/**
* 获取已记录月份集合
* @param {*} params
* @returns
*/
export const getFeedSummaryMonthListApi = (params = {}) => request({
url: "/cb/quantity/summary/monthList",
method: "get",
params
});
/** /**
* 获取科目月份列表 * 获取科目月份列表
* @param {{ * @param {{
...@@ -185,6 +240,14 @@ export const getFeedSummaryListApi = (params = {}) => request({ ...@@ -185,6 +240,14 @@ export const getFeedSummaryListApi = (params = {}) => request({
params params
}); });
//工程项目信息
export const getCbProjectInfo = (relatedId) => request({
url: '/cbProjectRecord/getCbProjectInfo/' + relatedId,
method: "get",
});
// 其他项目 // 其他项目
//其他项目左侧菜单 //其他项目左侧菜单
...@@ -198,3 +261,10 @@ export const getProjectOtherStatistics = (relatedId) => request({ ...@@ -198,3 +261,10 @@ export const getProjectOtherStatistics = (relatedId) => request({
url: '/cb/projectOther/statistics/' + relatedId, url: '/cb/projectOther/statistics/' + relatedId,
method: "get", method: "get",
}); });
//其他费用-其他费用列表
export const getProjectOtherList = (params = {}) => request({
url: "/cb/projectOther/list",
method: "get",
params
});
<template>
<div class="dsk-skeleton-outer-container">
<el-skeleton :animated="true" class="dsk-skeleton-inner-container">
<template slot="template">
<template v-for="item of count">
<div :key="item">
<el-skeleton-item variant="text" style="width: 60%;" />
<el-skeleton-item variant="text" style="width: 100%;" />
<el-skeleton-item variant="text" style="width: 100%;" />
<el-skeleton-item variant="text" style="width: 100%;" />
</div>
</template>
</template>
</el-skeleton>
</div>
</template>
<script>
export default {
name: 'dskSkeleton',
data() {
return {
count: 0
};
},
created() {
this.getSkeletonCount();
},
methods: {
async getSkeletonCount() {
try {
await this.$nextTick();
const skeletonContainer = this.$el.querySelector(".dsk-skeleton-inner-container");
const height = skeletonContainer.offsetHeight;
// 160高度为一组
const group = Math.round(height / 160);
this.count = group;
} catch (error) {
}
}
}
}
</script>
<style lang="scss" scoped>
.dsk-skeleton-outer-container {
padding: 0px 16px;
background: #fff;
z-index: 999;
.dsk-skeleton-inner-container {
width: 100%;
height: 100%;
overflow: hidden;
}
}
.el-skeleton__item {
height: 20px;
border-radius: 0;
margin-top: 16px;
background: #f0f0f0;
}
.el-skeleton {
.el-skeleton__item:last-of-type {
/* margin-bottom: 16px; */
}
}
</style>
...@@ -3,11 +3,13 @@ ...@@ -3,11 +3,13 @@
<!-- tab列表 --> <!-- tab列表 -->
<div class="dsk-tab-items-container"> <div class="dsk-tab-items-container">
<div class="dsk-tab-items-container-inner"> <div class="dsk-tab-items-container-inner">
<div class="dsk-tab-item" v-for="item of tabs" :key="item.id" :class="{'tab-current' : item.value == currentValue}"> <div class="dsk-tab-item" v-for="item of tabs" :key="item.id"
<div class="dsk-tab-item-name" @click="tabChoose(item)">{{item.name}}</div> :class="{'tab-current' : item.value == currentValue,'tab-is-disabled' : item.disabled || comDisabled}">
<div class="dsk-tab-item-name" @click="item.disabled || comDisabled ? '' : tabChoose(item)">{{item.name}}</div>
</div> </div>
<!-- 下滑条 --> <!-- 下滑条 -->
<div class="dsk-tab-sliding-bar" v-if="tabs.length" :style="{width : `${silidingBarWidth}px`,transform : `translateX(${silidingBarLeft}px)`}"> <div class="dsk-tab-sliding-bar" v-if="tabs.length && this.showTabsSlidingbar && !comDisabled"
:style="{width : `${silidingBarWidth}px`,transform : `translateX(${silidingBarLeft}px)`}">
</div> </div>
</div> </div>
</div> </div>
...@@ -25,6 +27,10 @@ export default { ...@@ -25,6 +27,10 @@ export default {
required: true, required: true,
type: Array, type: Array,
default: () => [] default: () => []
},
disabled: {
type: Boolean,
default: false
} }
}, },
watch: { watch: {
...@@ -32,6 +38,12 @@ export default { ...@@ -32,6 +38,12 @@ export default {
handler(newValue) { handler(newValue) {
this.initSlidingBar(); this.initSlidingBar();
} }
},
// 全部禁用不显示滚动条
disabled: {
handler(newValue) {
this.comDisabled = newValue ? true : false;
}
} }
}, },
model: { model: {
...@@ -41,7 +53,8 @@ export default { ...@@ -41,7 +53,8 @@ export default {
data() { data() {
return { return {
silidingBarLeft: 0, silidingBarLeft: 0,
silidingBarWidth: 0 silidingBarWidth: 0,
comDisabled: this.disabled ? true : false
}; };
}, },
//可访问data属性 //可访问data属性
...@@ -50,7 +63,13 @@ export default { ...@@ -50,7 +63,13 @@ export default {
}, },
//计算集 //计算集
computed: { computed: {
showTabsSlidingbar() {
const current = this.tabs.find(item => item.value == this.currentValue);
if (current) {
return current.disabled ? false : true;
}
return false;
}
}, },
//方法集 //方法集
methods: { methods: {
...@@ -124,6 +143,13 @@ export default { ...@@ -124,6 +143,13 @@ export default {
font-weight: bold; font-weight: bold;
} }
} }
&.tab-is-disabled {
.dsk-tab-item-name {
color: #eee;
cursor: not-allowed;
}
}
} }
.dsk-tab-sliding-bar { .dsk-tab-sliding-bar {
......
<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;
} }
......
<template> <template>
<div class="table-list-com-ins" :class="{'is-empty-table' : !tableDataTotal}"> <div class="table-list-com-ins" :class="{'is-empty-table' : !tableDataTotal,'no-pagination' : !hasQueryParams}">
<div class="table-item"> <div class="table-item">
<el-table v-if="tableDataTotal>0" class="fixed-table" :class="headerFixed ? 'headerFixed':''" v-loading="tableLoading" :data="tableData" <el-table v-if="tableDataTotal>0" class="fixed-table" :class="headerFixed ? 'headerFixed':''" v-loading="tableLoading" :data="tableData"
element-loading-text="Loading" ref="tableRef" border fit highlight-current-row :default-sort="defaultSort?defaultSort:{}" element-loading-text="Loading" ref="tableRef" border fit highlight-current-row :default-sort="defaultSort?defaultSort:{}"
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
:fixed="needSelection.fixed" :align="needSelection.align" :show-overflow-tooltip="needSelection.showOverflowTooltip"> :fixed="needSelection.fixed" :align="needSelection.align" :show-overflow-tooltip="needSelection.showOverflowTooltip">
</el-table-column> </el-table-column>
<el-table-column type="index" v-if="isIndex" label="序号" :width="flexWidth(tableData)" align="left" :fixed="indexFixed" :resizable="false"> <el-table-column type="index" v-if="isIndex" label="序号" :width="flexWidth(tableData)" align="left" :fixed="indexFixed" :resizable="false">
<template slot-scope="scope">{{ queryParams.pageNum * queryParams.pageSize - queryParams.pageSize + scope.$index + 1 }}</template> <template slot-scope="scope">{{pagingHandler(hasQueryParams,queryParams,scope)}}</template>
</el-table-column> </el-table-column>
<template v-for="(item,index) in formColum"> <template v-for="(item,index) in formColum">
<template v-if="item.use !== false"> <template v-if="item.use !== false">
...@@ -20,8 +20,9 @@ ...@@ -20,8 +20,9 @@
</el-table-column> </el-table-column>
<!-- 序号列 --> <!-- 序号列 -->
<el-table-column v-else-if="item.type == 'index'" type="index" :key="item.uid ? item.uid : index" :label="item.label ? item.label : '序号'" <el-table-column v-else-if="item.type == 'index'" type="index" :key="item.uid ? item.uid : index" :label="item.label ? item.label : '序号'"
:width="flexWidth(tableData)" :align="item.align?item.align:'left'" :fixed="item.fixed" :resizable="false"> :width="flexWidth(tableData,item.width)" :min-width="item.minWidth" :align="item.align?item.align:'left'" :fixed="item.fixed"
<template slot-scope="scope">{{ queryParams.pageNum * queryParams.pageSize - queryParams.pageSize + scope.$index + 1 }}</template> :resizable="false">
<template slot-scope="scope">{{pagingHandler(hasQueryParams,queryParams,scope)}}</template>
</el-table-column> </el-table-column>
<!-- 普通列 --> <!-- 普通列 -->
<el-table-column v-else :key="item.uid ? item.uid : index" :label="item.label" :prop="item.prop" :width="item.width" <el-table-column v-else :key="item.uid ? item.uid : index" :label="item.label" :prop="item.prop" :width="item.width"
...@@ -63,7 +64,7 @@ ...@@ -63,7 +64,7 @@
</div> </div>
</div> </div>
<div class="pagination-box" v-if="show_page && tableDataTotal>queryParams.pageSize"> <div class="pagination-box" v-if="show_page && hasQueryParams && tableDataTotal>queryParams.pageSize">
<el-pagination background :current-page="current_page" :page-size="queryParams.pageSize" :total="tableDataTotal" <el-pagination background :current-page="current_page" :page-size="queryParams.pageSize" :total="tableDataTotal"
layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" /> layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div> </div>
...@@ -169,12 +170,26 @@ export default { ...@@ -169,12 +170,26 @@ export default {
return { return {
current_page: this.queryParams.pageNum, current_page: this.queryParams.pageNum,
show_page: this.paging, show_page: this.paging,
comMaxHeight: null comMaxHeight: null,
hasQueryParams: false
}; };
}, },
watch: { watch: {
'queryParams.pageNum'(newVal, oldVal) { 'queryParams.pageNum'(newVal, oldVal) {
this.current_page = newVal; this.current_page = newVal;
},
queryParams: {
handler(newValue) {
const _temp = newValue ? newValue : {};
const keys = Object.keys(_temp);
if (keys.length) {
this.hasQueryParams = true;
} else {
this.hasQueryParams = false;
}
},
immediate: true,
deep: true
} }
}, },
created() { created() {
...@@ -196,6 +211,14 @@ export default { ...@@ -196,6 +211,14 @@ export default {
} }
}, },
pagingHandler(hasQueryParams, queryParams, scope) {
// 有分页参数
if (hasQueryParams) {
return queryParams.pageNum * queryParams.pageSize - queryParams.pageSize + scope.$index + 1;
}
// 不分页
return scope.$index + 1;
},
handleCurrentChange(e) { handleCurrentChange(e) {
if (this.MaxPage < e) { if (this.MaxPage < e) {
this.show_page = false; this.show_page = false;
...@@ -217,12 +240,12 @@ export default { ...@@ -217,12 +240,12 @@ export default {
selectionChange(selectionArray) { selectionChange(selectionArray) {
this.$emit("selectionChange", selectionArray); this.$emit("selectionChange", selectionArray);
}, },
flexWidth(tableData) { flexWidth(tableData, width = 50) {
let currentMax = this.queryParams.pageNum * this.queryParams.pageSize - this.queryParams.pageSize + tableData.length, wdth = 50; let currentMax = this.queryParams.pageNum * this.queryParams.pageSize - this.queryParams.pageSize + tableData.length;
if (currentMax.toString().length > 3) { if (currentMax.toString().length > 3) {
wdth = wdth + (currentMax.toString().length - 3) * 10; width = width + (currentMax.toString().length - 3) * 10;
} }
return wdth + 'px'; return width + 'px';
} }
} }
} }
...@@ -236,6 +259,12 @@ export default { ...@@ -236,6 +259,12 @@ export default {
height: 100%; height: 100%;
} }
} }
&.no-pagination {
::v-deep .table-item {
max-height: 100%;
}
}
::v-deep .table-item { ::v-deep .table-item {
width: 100%; width: 100%;
max-height: calc(100% - 40px); max-height: calc(100% - 40px);
......
...@@ -44,33 +44,33 @@ ...@@ -44,33 +44,33 @@
</template> </template>
<script> <script>
import InfoTable from '../../../../component/infoTable'; import InfoTable from '../../../../component/infoTable';
import { getCbProjectInfo } from "@/api/projectCostLedger";
export default { export default {
name: "projectInformation", name: "projectInformation",
components: {InfoTable}, components: {InfoTable},
data() { data() {
return { return {
comProjectId:'',
labelWidth: 250, labelWidth: 250,
forInfo: { forInfo: { },
name:'宝安中学(集团)初中部改扩建工程施工总承包(二次公告)',
},
defaultList1: [ defaultList1: [
// { name: '工程名称', prop: 'name', slot: true }, // { name: '工程名称', prop: 'name', slot: true },
{ name: '工程名称', prop: 'name', style: true }, { name: '工程名称', prop: 'projectName', style: true },
{ name: '工程所在地', prop: 'creditNo' }, { name: '工程所在地', prop: 'areaName' },
{ name: '工程详细地址', prop: 'operName' }, { name: '工程详细地址', prop: 'projectAddress' },
{ name: '业态', prop: 'status' }, { name: '业态', prop: 'status' },
{ name: '工程类型', prop: 'startDate' }, { name: '工程类型', prop: 'projectType1' },
{ name: '计价模式(清单/定额)', prop: 'registCapi' }, { name: '计价模式(清单/定额)', prop: 'registCapi' },
{ name: '承包形式(EPC/DB/EP/PC)', prop: 'actualCapi'}, { name: '承包形式(EPC/DB/EP/PC)', prop: 'actualCapi'},
{ name: '合同类型', prop: 'checkDate' }, { name: '合同类型', prop: 'checkDate' },
{ name: '建设单位', prop: 'orgNo' }, { name: '建设单位', prop: 'orgNo' },
{ name: '设计单位', prop: 'regNo' }, { name: '设计单位', prop: 'designOrgName' },
{ name: '勘察单位', prop: 'creditNo' }, { name: '勘察单位', prop: 'creditNo' },
{ name: '监理单位', prop: 'econKind' }, { name: '监理单位', prop: 'supervisorOrgName' },
{ name: '代理公司(或工料测量师)', prop: 'term'}, { name: '代理公司(或工料测量师)', prop: 'term'},
{ name: '招标形式', prop: 'qualification' }, { name: '招标形式', prop: 'qualification' },
{ name: '承包方式', prop: 'provinceCode'}, { name: '承包方式', prop: 'provinceCode'},
{ name: '资金来源', prop: 'belongOrg' }, { name: '资金来源', prop: 'moneySource' },
{ name: '分包标准费用项价格库', prop: 'colleguesNum'}, { name: '分包标准费用项价格库', prop: 'colleguesNum'},
{ name: '材料机械标准费用价格库', prop: 'colleguesNum'}, { name: '材料机械标准费用价格库', prop: 'colleguesNum'},
{ name: '专业类别', prop: 'scope'}, { name: '专业类别', prop: 'scope'},
...@@ -87,9 +87,9 @@ export default { ...@@ -87,9 +87,9 @@ export default {
{ name: '结构类型', prop: 'registCapi' }, { name: '结构类型', prop: 'registCapi' },
{ name: '基础类型', prop: 'actualCapi'}, { name: '基础类型', prop: 'actualCapi'},
{ name: '单体个数', prop: 'checkDate', style: true }, { name: '单体个数', prop: 'checkDate', style: true },
{ name: '地上层数', prop: 'orgNo' }, { name: '地上层数', prop: 'noOfOverfloor' },
{ name: '地下层数', prop: 'regNo' }, { name: '地下层数', prop: 'noOfUnderfloor' },
{ name: '建筑高度', prop: 'creditNo' }, { name: '建筑高度', prop: 'constructHeight' },
{ name: '地下深度', prop: 'econKind' }, { name: '地下深度', prop: 'econKind' },
{ name: '首层(m)', prop: 'term'}, { name: '首层(m)', prop: 'term'},
{ name: '标准层(m)', prop: 'qualification' }, { name: '标准层(m)', prop: 'qualification' },
...@@ -146,9 +146,9 @@ export default { ...@@ -146,9 +146,9 @@ export default {
time:'2023-10-20' time:'2023-10-20'
}, },
defaultListYd4: [ defaultListYd4: [
{ name: '计划开工日期', prop: 'time' }, { name: '计划开工日期', prop: 'planStartDate' },
{ name: '计划竣工日期', prop: 'operName' }, { name: '计划竣工日期', prop: 'planEndDate' },
{ name: '总工期(天)', prop: 'status' }, { name: '总工期(天)', prop: 'contractWorkDays' },
{ name: '缺陷责任', prop: 'startDate' }, { name: '缺陷责任', prop: 'startDate' },
], ],
forInfoYd5:{ forInfoYd5:{
...@@ -191,9 +191,40 @@ export default { ...@@ -191,9 +191,40 @@ export default {
], ],
}; };
}, },
props: {
// 项目ID
// projectId: {
// type: String,
// required: true,
// default: ""
// },
// 详情信息
projectDetailInfo: {
type: Object,
default: () => ({})
}
},
watch: {
projectDetailInfo: {
handler(newValue) {
this.comProjectDetailInfo = newValue ? newValue : {};
// this.getCbProjectInfo(this.comProjectDetailInfo.projectId)
this.getCbProjectInfo('1759507630130479106')
// this.init(this.comProjectDetailInfo);
},
deep: true,
immediate: true
},
projectId: {
handler(newValue) {
this.comProjectId = newValue;
},
immediate: true
}
},
//可访问data属性 //可访问data属性
created() { created() {
// this.getCbProjectInfo()
}, },
//计算集 //计算集
computed: { computed: {
...@@ -201,7 +232,17 @@ export default { ...@@ -201,7 +232,17 @@ export default {
}, },
//方法集 //方法集
methods: { methods: {
async getCbProjectInfo(params) {
try {
const result = await getCbProjectInfo(params);
if (result.code == 200) {
console.log(result.data)
this.forInfo=result.data;
}
} catch (error) {
}
},
}, },
} }
</script> </script>
......
...@@ -15,7 +15,8 @@ ...@@ -15,7 +15,8 @@
v-model="expenseDate" v-model="expenseDate"
type="month" type="month"
placeholder="选择月" @change="changetime" placeholder="选择月" @change="changetime"
:picker-options="pickerOptions"> value-format="yyyy-MM"
>
</el-date-picker> </el-date-picker>
</div> </div>
<div class="table-item"> <div class="table-item">
...@@ -115,14 +116,14 @@ ...@@ -115,14 +116,14 @@
data() { data() {
return { return {
pickerOptions: { pickerOptions: {
disabledDate(time) { // disabledDate(time) {
let istrue = true // let istrue = true
let month = new Date().getMonth()+1 // let month = new Date().getMonth()+1
let year = new Date().getFullYear() // let year = new Date().getFullYear()
let times = (year+5)+'-'+ month + '-01 ' + '00:00:00' // let times = (year+5)+'-'+ month + '-01 ' + '00:00:00'
istrue = new Date().getTime() < time.getTime() && time.getTime() < new Date(times).getTime() // istrue = new Date().getTime() < time.getTime() && time.getTime() < new Date(times).getTime()
return !istrue // return !istrue
}, // },
}, },
menuOptions: { menuOptions: {
nodeName: "cbName", nodeName: "cbName",
...@@ -216,6 +217,7 @@ ...@@ -216,6 +217,7 @@
id:this.id, id:this.id,
expenseDate:this.expenseDate expenseDate:this.expenseDate
} }
console.log(param)
getAnalysislist(param).then(res=>{ getAnalysislist(param).then(res=>{
this.tableData = res.data this.tableData = res.data
}) })
...@@ -252,7 +254,7 @@ ...@@ -252,7 +254,7 @@
console.log(error) console.log(error)
} }
}, },
changetime(){ changetime(val){
this.select(this.id) this.select(this.id)
}, },
}, },
......
...@@ -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">
...@@ -44,7 +44,7 @@ export default { ...@@ -44,7 +44,7 @@ export default {
}, },
// 默认打开的菜单 // 默认打开的菜单
defaultActive: { defaultActive: {
type: String, type: [String, Number],
default: "" default: ""
} }
}, },
...@@ -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) {
......
...@@ -3,28 +3,28 @@ ...@@ -3,28 +3,28 @@
<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 :current="current" :breadCrumbTree="createProjectBreadCrumbTree"></project-detail-header>
<!-- tab切换栏 --> <!-- tab切换栏 -->
<dsk-tab-toggle v-model="current" :tabs="toggleTabs" @tabToggle="tabToggle"></dsk-tab-toggle> <dsk-tab-toggle v-model="current" :tabs="toggleTabs" @tabToggle="tabToggle" :disabled="tabsDisabled"></dsk-tab-toggle>
<!-- tab切换组件容器 --> <!-- tab切换组件容器 -->
<div class="project-cost-ledger-detail-module"> <div class="project-cost-ledger-detail-module">
<!-- 放入组件 v-if current == ‘xxxx’ 详情变量 this.detailInfo 需要深度监听--> <!-- 放入组件 v-if current == ‘xxxx’ 详情变量 this.detailInfo 需要深度监听-->
<!-- 工程项目信息 --> <!-- 工程项目信息 -->
<engineering-information v-if="current == 'basicEngineeringInformation'"></engineering-information> <engineering-information v-if="current == 'basicEngineeringInformation'" :project-detail-info="detailInfo"></engineering-information>
<!-- 直接费成本 --> <!-- 直接费成本 -->
<direct-cost v-if="current == 'directCost'"></direct-cost> <direct-cost v-if="current == 'directCost'" :project-detail-info="detailInfo"></direct-cost>
<!-- 工料汇总 --> <!-- 工料汇总 -->
<feed-summary v-if="current == 'feedSummary'" :project-id="projectID" :project-detail-info="detailInfo"></feed-summary> <feed-summary v-if="current == 'feedSummary'" :project-id="projectId" :project-detail-info="detailInfo"></feed-summary>
<!--措施项目--> <!--措施项目-->
<measure-items v-if="current == 'measureItem'" :project-id="projectID" :project-detail-info="detailInfo"></measure-items> <measure-items v-if="current == 'measureItem'" :project-id="projectId" :project-detail-info="detailInfo"></measure-items>
<!-- 其他项目 --> <!-- 其他项目 -->
<other-projects v-if="current == 'otherItems'"></other-projects> <other-projects v-if="current == 'otherItems'" :project-detail-info="detailInfo"></other-projects>
<!-- 盈亏分析对比 --> <!-- 盈亏分析对比 -->
<profit-Loss v-if="current == 'profitAndLoss'" :project-id="projectID" :project-detail-info="detailInfo"></profit-Loss> <profit-Loss v-if="current == 'profitAndLoss'" :project-id="projectId" :project-detail-info="detailInfo"></profit-Loss>
</div> </div>
</div> </div>
...@@ -62,14 +62,15 @@ export default { ...@@ -62,14 +62,15 @@ export default {
}, },
data() { data() {
return { return {
projectID: "", projectId: "",
current: "", current: "",
// 详情信息变量 // 详情信息变量
detailInfo: { detailInfo: {
projectId: "1754425038355890177", projectId: "1754425038355890177",
cbStage: 0, cbStage: 0,
cbType:1 cbType: 1
}, },
tabsDisabled: false,
toggleTabs: [ toggleTabs: [
{ {
value: "basicEngineeringInformation", value: "basicEngineeringInformation",
...@@ -161,21 +162,28 @@ export default { ...@@ -161,21 +162,28 @@ export default {
}, },
async getProjectQuery() { async getProjectQuery() {
try { try {
this.tabsDisabled = true;
const { query } = this.$route; const { query } = this.$route;
// if (!query.projectID) return this.$message.error("缺少项目id"); // if (!query.projectId) {
this.projectID = query.projectID; // this.$message.error("缺少项目id");
// this.tabsDisabled = true;
// return;
// };
this.projectId = query.projectId;
// 获取详情 保证详情获取完毕 再执行tab命中 进行生命周期
await this.getProjectDetail(query.projectId);
if (query.current) { if (query.current) {
this.current = query.current; this.current = query.current;
} else { } else {
// 默认命中工程项目信息 // 默认命中工程项目信息
this.current = "basicEngineeringInformation"; this.current = "basicEngineeringInformation";
}; };
await this.getProjectDetail(query.projectID); this.tabsDisabled = false;
} catch (error) { } catch (error) {
console.log(error); console.log(error);
} }
}, },
async getProjectDetail(projectID) { async getProjectDetail(projectId) {
try { try {
} catch (error) { } catch (error) {
......
...@@ -68,19 +68,18 @@ ...@@ -68,19 +68,18 @@
<el-table-column label="工程名称" width="416" :resizable="false"> <el-table-column label="工程名称" width="416" :resizable="false">
<template slot-scope="scope"> <template slot-scope="scope">
<div style="display:flex;align-items:center"> <div style="display:flex;align-items:center">
<!--<el-tooltip placement="top" v-if="scope.row.customerText.length>20">--> <el-tooltip placement="top" v-if="scope.row.projectText.length>20">
<!--<div slot="content">{{scope.row.projectName}}</div>-->
<div class="renling"> <div class="renling">
<router-link v-if="scope.row.isGetProjectDetail" :to="`/projectCostLedger/detail?projectID=${scope.row.id}`" tag="a" <router-link v-if="scope.row.projectFileStatus==2" :to="`/projectCostLedger/detail?projectId=${scope.row.id}`" tag="a"
class="wordprimary" v-html="scope.row.projectName"></router-link> class="wordprimary" v-html="scope.row.projectName"></router-link>
<span v-else v-html="scope.row.projectName"></span> <span v-else v-html="scope.row.projectName||'--'"></span>
</div>
</el-tooltip>
<div class="renling" v-else>
<router-link v-if="scope.row.projectFileStatus==2" :to="`/projectCostLedger/detail?projectId=${scope.row.id}`" tag="a"
class="wordprimary" v-html="scope.row.projectName"></router-link>
<span v-else v-html="scope.row.projectName||'--'"></span>
</div> </div>
<!--</el-tooltip>-->
<!--<div class="renling" v-else>-->
<!--<router-link v-if="scope.row.companyId" :to="`/enterprise/${encodeStr(scope.row.companyId)}?path=cooperationRecord&companyName=${scope.row.customerName}`" tag="a"-->
<!--class="wordprimary" v-html="scope.row.customerName"></router-link>-->
<!--<span v-else v-html="scope.row.customerName"></span>-->
<!--</div>-->
</div> </div>
</template> </template>
...@@ -157,6 +156,7 @@ ...@@ -157,6 +156,7 @@
</el-dialog> </el-dialog>
<!--新增、修改弹窗--> <!--新增、修改弹窗-->
<el-dialog <el-dialog
:close-on-click-modal="false"
class="pro-news" class="pro-news"
:visible.sync="dialogVisible" :visible.sync="dialogVisible"
width="480px"> width="480px">
...@@ -232,7 +232,7 @@ ...@@ -232,7 +232,7 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<div class="pagination clearfix" v-show="total>cgPagesize"> <div class="pagination clearfix" v-show="cgxtotal>cgPagesize">
<el-pagination background :page-size="cgPagesize" :current-page.sync="cgPagenum" <el-pagination background :page-size="cgPagesize" :current-page.sync="cgPagenum"
@current-change="getCGXlist" layout="prev, pager, next" @current-change="getCGXlist" layout="prev, pager, next"
:total="cgxtotal"> :total="cgxtotal">
...@@ -342,6 +342,9 @@ ...@@ -342,6 +342,9 @@
this.total = res.total this.total = res.total
this.formdata.pageNum = res.currentPage this.formdata.pageNum = res.currentPage
this.tableData = res.rows this.tableData = res.rows
this.tableData.forEach(item=>{
item.projectText = item.projectName.replace(/<\/?[^>]+(style=('|")[^'"]*)?>/gi, '')
})
}else{ }else{
this.total = 0 this.total = 0
this.tableData = [] this.tableData = []
...@@ -379,8 +382,8 @@ ...@@ -379,8 +382,8 @@
//查看进度 //查看进度
detailpro(row){ detailpro(row){
this.uploadData = row this.uploadData = row
this.uploadData.id = this.uploadData.projectId
this.prodetail = true this.prodetail = true
this.isupload = true
}, },
//删除项目 //删除项目
deleetpro(row){ deleetpro(row){
...@@ -466,7 +469,7 @@ ...@@ -466,7 +469,7 @@
pageSize:50, pageSize:50,
pageNum:1, pageNum:1,
} }
// this.customerAll() this.getlist()
}, },
//添加项目 //添加项目
insertPro(){ insertPro(){
...@@ -501,10 +504,11 @@ ...@@ -501,10 +504,11 @@
this.uploadData = data this.uploadData = data
this.isupload = true this.isupload = true
this.cgxVisible = false this.cgxVisible = false
this.prodetail = false
}, },
handleCurrentChange(val){ handleCurrentChange(val){
this.formdata.pageNum = val this.formdata.pageNum = val
this.customerAll() this.getlist()
}, },
setHeaderRow() { setHeaderRow() {
return "owner-table-list-header"; return "owner-table-list-header";
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
<div class="cz" v-if="item.fileParseStatus != 1"> <div class="cz" v-if="item.fileParseStatus != 1">
<div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div> <div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div> <div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id)" v-if="prodetail == false">删除</div> <div class="i" @click="deletefille(item.id,0)" v-if="prodetail == false">删除</div>
</div> </div>
</div> </div>
<div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3"> <div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3">
...@@ -91,7 +91,7 @@ ...@@ -91,7 +91,7 @@
<div class="cz" v-if="item.fileParseStatus != 1"> <div class="cz" v-if="item.fileParseStatus != 1">
<div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div> <div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div> <div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id)" v-if="prodetail == false">删除</div> <div class="i" @click="deletefille(item.id,1)" v-if="prodetail == false">删除</div>
</div> </div>
</div> </div>
<div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3"> <div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3">
...@@ -119,7 +119,7 @@ ...@@ -119,7 +119,7 @@
<div class="cz" v-if="item.fileParseStatus != 1"> <div class="cz" v-if="item.fileParseStatus != 1">
<div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div> <div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div> <div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id)" v-if="prodetail == false">删除</div> <div class="i" @click="deletefille(item.id,2)" v-if="prodetail == false">删除</div>
</div> </div>
</div> </div>
<div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3"> <div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3">
...@@ -147,7 +147,7 @@ ...@@ -147,7 +147,7 @@
<div class="cz" v-if="item.fileParseStatus != 1"> <div class="cz" v-if="item.fileParseStatus != 1">
<div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div> <div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div> <div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id)" v-if="prodetail == false">删除</div> <div class="i" @click="deletefille(item.id,3)" v-if="prodetail == false">删除</div>
</div> </div>
</div> </div>
<div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3"> <div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3">
...@@ -175,7 +175,7 @@ ...@@ -175,7 +175,7 @@
<div class="cz" v-if="item.fileParseStatus != 1"> <div class="cz" v-if="item.fileParseStatus != 1">
<div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div> <div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div> <div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id)" v-if="prodetail == false">删除</div> <div class="i" @click="deletefille(item.id,4)" v-if="prodetail == false">删除</div>
</div> </div>
</div> </div>
<div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3"> <div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3">
...@@ -203,7 +203,7 @@ ...@@ -203,7 +203,7 @@
<div class="cz" v-if="item.fileParseStatus != 1"> <div class="cz" v-if="item.fileParseStatus != 1">
<div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div> <div v-if="item.fileParseStatus != 3"><a :href="item.fileOssUrl">下载</a></div>
<div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div> <div v-if="item.fileParseStatus == 3 && prodetail == false">重新上传</div>
<div class="i" @click="deletefille(item.id)" v-if="prodetail == false">删除</div> <div class="i" @click="deletefille(item.id,5)" v-if="prodetail == false">删除</div>
</div> </div>
</div> </div>
<div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3"> <div class="wrong" v-if="item.fileParseStatus&&item.fileParseStatus == 3">
...@@ -220,7 +220,7 @@ ...@@ -220,7 +220,7 @@
</div> </div>
<el-divider></el-divider> <el-divider></el-divider>
<div class="pro-btns"> <div class="pro-btns">
<el-button type="primary" size="small" @click="importdata">导入数据</el-button> <el-button type="primary" size="small" @click="importdata" v-if="!prodetail">导入数据</el-button>
<el-button size="small" @click="goback">返回</el-button> <el-button size="small" @click="goback">返回</el-button>
</div> </div>
...@@ -243,7 +243,7 @@ ...@@ -243,7 +243,7 @@
<script> <script>
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth'
// import { getDicts } from '@/api/system/dict/data' // import { getDicts } from '@/api/system/dict/data'
import { deleteCbProjectFile, getProjectFileUploadDetail, uploadCbProjectFile } from '@/api/projectCostLedger/index' import { deleteCbProjectFile, getProjectFileUploadDetail, uploadCbProjectFile,importData } from '@/api/projectCostLedger/index'
export default { export default {
name: 'upload', name: 'upload',
...@@ -283,23 +283,50 @@ ...@@ -283,23 +283,50 @@
uploadtype:0,//上传的版块类型 uploadtype:0,//上传的版块类型
visible:false, visible:false,
issub:false,//已填完数据可以开始解析 issub:false,//已填完数据可以开始解析
isclick:true,
} }
}, },
created() { created() {
this.formdata = JSON.parse(JSON.stringify(this.uploadData)) this.formdata = JSON.parse(JSON.stringify(this.uploadData))
this.formdata.cbStage = this.formdata.cbStage.toString() this.formdata.cbStage = this.formdata.cbStage.toString()
this.getDetail() this.getDetail()
console.log(this.formdata )
}, },
methods:{ methods:{
importdata(){ importdata(){
this.visible = true this.visible = true
this.$refs['ruleForm'].validate((valid) => { let valid = true
if(this.directExpense.length>0&&this.quantitySummary.length>0
&&this.measureProject.length>0&&this.otherProject.length>0
&&this.sceneExpense.length>0&&this.cbSummary.length>0){
valid = true
importData(this.formdata.id).then(res=>{})
}else{
valid = false
}
if (valid) { if (valid) {
this.issub = true this.issub = true
this.directExpense.forEach(item=>{
item.fileParseStatus = 1
})
this.quantitySummary.forEach(item=>{
item.fileParseStatus = 1
})
this.measureProject.forEach(item=>{
item.fileParseStatus = 1
})
this.otherProject.forEach(item=>{
item.fileParseStatus = 1
})
this.sceneExpense.forEach(item=>{
item.fileParseStatus = 1
})
this.cbSummary.forEach(item=>{
item.fileParseStatus = 1
})
} else { } else {
this.issub = false this.issub = false
} }
});
}, },
goback(){ goback(){
this.visible = false this.visible = false
...@@ -326,18 +353,22 @@ ...@@ -326,18 +353,22 @@
}) })
}, },
uplpro(type){ uplpro(type){
if(!this.prodetail){ if(!this.prodetail && this.isclick){
this.uploadtype = type this.uploadtype = type
this.$refs.uploadpro.$el.querySelector('input').click() this.$refs.uploadpro.$el.querySelector('input').click()
} }
}, },
deletefille(id){ deletefille(id,type){
this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', { this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
deleteCbProjectFile(id).then(res=>{ let param = {
fileId: id,
cbType: type,
}
deleteCbProjectFile(param).then(res=>{
if(res.code == 200){ if(res.code == 200){
this.$message({ this.$message({
type: 'success', type: 'success',
...@@ -354,6 +385,7 @@ ...@@ -354,6 +385,7 @@
}); });
}, },
handleFileListChange(file, fileList) { handleFileListChange(file, fileList) {
this.isclick = false
var testmsg = file.name.substring(file.name.lastIndexOf(".") + 1); var testmsg = file.name.substring(file.name.lastIndexOf(".") + 1);
const extension = testmsg === "xlsx"; const extension = testmsg === "xlsx";
const extension1 = testmsg === "xls"; const extension1 = testmsg === "xls";
...@@ -403,6 +435,7 @@ ...@@ -403,6 +435,7 @@
default: default:
break break
} }
this.isclick = true
} }
}) })
}, },
......
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