Commit 96594bc9 authored by Administrator's avatar Administrator

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

parents b68099e5 f111a5d9
...@@ -61,7 +61,7 @@ public class CbDirectExpenseController extends BaseController { ...@@ -61,7 +61,7 @@ public class CbDirectExpenseController extends BaseController {
return toAjax(baseService.addExpense(addBo)); return toAjax(baseService.addExpense(addBo));
} }
/*** /**
* 删除直接费费用项 * 删除直接费费用项
*/ */
@DeleteMapping("/deleteExpense/{id}") @DeleteMapping("/deleteExpense/{id}")
......
package com.dsk.cscec.controller; package com.dsk.cscec.controller;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.annotation.SaMode;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.dsk.common.constant.TenantConstants;
import com.dsk.common.core.controller.BaseController; import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.PageQuery; import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.R; import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.CbProjectRecord; import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.DProject;
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.CbProjectHeadInfoVo; import com.dsk.cscec.domain.vo.CbProjectHeadInfoVo;
...@@ -13,10 +19,12 @@ import com.dsk.cscec.domain.vo.CbProjectInfoVo; ...@@ -13,10 +19,12 @@ 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;
import com.dsk.search.util.ObjectUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
...@@ -42,12 +50,25 @@ public class CbProjectRecordController extends BaseController { ...@@ -42,12 +50,25 @@ public class CbProjectRecordController extends BaseController {
* 校验项目编码是否存在 * 校验项目编码是否存在
*/ */
@GetMapping("/checkProjectCodeExist") @GetMapping("/checkProjectCodeExist")
public R<Boolean> checkProjectCodeExist(@Validated CbCheckProjectCodeExistBo checkBo) { public R<String> checkProjectCodeExist(@Validated CbCheckProjectCodeExistBo checkBo) {
if (dProjectService.checkProjectCodeExist(checkBo)) { return R.ok(dProjectService.checkProjectCodeExist(checkBo));
return R.ok(true); }
} else {
return R.fail("IPM项目编码无效", false); /**
} * 根据项目名称模糊查询项目列表
*/
@GetMapping("/queryProjectNameList/projectName")
public R<List<DProject>> queryProjectNameList(@RequestParam @NotBlank(message = "项目名称不能为空") String projectName) {
return R.ok(dProjectService.queryProjectNameList(projectName));
}
/**
* 校验项目名称是否存在
*/
@GetMapping("/checkProjectNameExist/projectName")
public R<CbProjectRecord> checkProjectNameExist(@RequestParam @NotBlank(message = "项目名称不能为空") String projectName) {
CbProjectRecord projectRecord = baseService.checkProjectNameExist(projectName);
return R.ok(ObjectUtil.isNotNull(projectRecord) ? "已存在相同名称项目,是否继续创建该项目的新阶段?" : "操作成功", projectRecord);
} }
/** /**
......
...@@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.IdType; ...@@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import lombok.Data; import lombok.Data;
@Data @Data
...@@ -55,6 +57,12 @@ public class CbCostMeasureActual { ...@@ -55,6 +57,12 @@ public class CbCostMeasureActual {
@TableField(value = "submit_project_volume") @TableField(value = "submit_project_volume")
private BigDecimal submitProjectVolume; private BigDecimal submitProjectVolume;
/**
* 本月差值
*/
@TableField(value = "difference")
private BigDecimal difference;
/** /**
* 年月 * 年月
*/ */
......
...@@ -119,6 +119,18 @@ public class CbDirectExpense extends BaseEntity implements Serializable { ...@@ -119,6 +119,18 @@ public class CbDirectExpense extends BaseEntity implements Serializable {
*/ */
@Excel(name = "含税成本合价") @Excel(name = "含税成本合价")
private String includeTaxCbSumPrice; private String includeTaxCbSumPrice;
/**
* 规格型号
*/
private String specificationModel;
/**
* 计算规则
*/
private String calculateRule;
/**
* 甲供材料
*/
private String supplierMaterial;
/** /**
* 合价偏差 * 合价偏差
*/ */
......
package com.dsk.cscec.domain.bo; package com.dsk.cscec.domain.bo;
import com.dsk.common.annotation.Excel;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
...@@ -32,13 +33,37 @@ public class AddCbDirectExpenseBo { ...@@ -32,13 +33,37 @@ public class AddCbDirectExpenseBo {
*/ */
@NotBlank(message = "单位不能为空") @NotBlank(message = "单位不能为空")
private String unit; private String unit;
/**
* 招标控制价单价
*/
@NotBlank(message = "招标控制价单价不能为空")
private String tenderControlUnitPrice;
/** /**
* 不含税成本单价 * 不含税成本单价
*/ */
@NotBlank(message = "不含税成本单价不能为空") @NotBlank(message = "不含税成本单价不能为空")
private String excludeTaxCbUnitPrice; private String excludeTaxCbUnitPrice;
/**
* 含税成本单价
*/
@NotBlank(message = "含税成本单价不能为空")
private String includeTaxCbUnitPrice;
/**
* 规格型号
*/
@NotBlank(message = "规格型号不能为空")
private String specificationModel;
/** /**
* 特征描述 * 特征描述
*/ */
@NotBlank(message = "特征描述不能为空")
private String projectFeature; private String projectFeature;
/**
* 计算规则
*/
private String calculateRule;
/**
* 甲供材料
*/
private String supplierMaterial;
} }
\ No newline at end of file
...@@ -54,6 +54,11 @@ public class CbCostMeasureActualSaveBo { ...@@ -54,6 +54,11 @@ public class CbCostMeasureActualSaveBo {
*/ */
private BigDecimal submitProjectVolume; private BigDecimal submitProjectVolume;
/**
* 本月差值
*/
private BigDecimal difference;
/** /**
* 年月 * 年月
*/ */
......
...@@ -140,6 +140,16 @@ public class CbCostMeasureActualVo { ...@@ -140,6 +140,16 @@ public class CbCostMeasureActualVo {
*/ */
private BigDecimal submitProjectVolume; private BigDecimal submitProjectVolume;
/**
* 本月差值
*/
private BigDecimal difference;
/**
* 截止本月差值
*/
private BigDecimal sumDifference;
/** /**
* 年月 * 年月
*/ */
......
...@@ -121,9 +121,13 @@ public class CbQuantitySummaryListVo { ...@@ -121,9 +121,13 @@ public class CbQuantitySummaryListVo {
*/ */
private String actualId; private String actualId;
/** /**
* 推送工程量 * 推送工程量(本月差值)
*/ */
private Double pushQuantities; private Double pushQuantities;
/**
* 累计差值
*/
private Double cumulativeDifference;
/** /**
* IPM项目编码 * IPM项目编码
*/ */
......
...@@ -6,6 +6,7 @@ import com.dsk.cscec.domain.bo.CbCostMeasureActualBo; ...@@ -6,6 +6,7 @@ import com.dsk.cscec.domain.bo.CbCostMeasureActualBo;
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 org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.ehcache.javadoc.PrivateApi;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
...@@ -24,4 +25,6 @@ public interface CbCostMeasureActualMapper extends BaseMapper<CbCostMeasureActua ...@@ -24,4 +25,6 @@ public interface CbCostMeasureActualMapper extends BaseMapper<CbCostMeasureActua
BigDecimal selectSumData(CbCostMeasureActualSaveBo bo); BigDecimal selectSumData(CbCostMeasureActualSaveBo bo);
BigDecimal selectMonthProjectVolumeByLevel(@Param("level") Integer level,@Param("projectId") Long projectId,@Param("month") String month); BigDecimal selectMonthProjectVolumeByLevel(@Param("level") Integer level,@Param("projectId") Long projectId,@Param("month") String month);
BigDecimal calculateSumDifference(@Param("item") CbCostMeasureActualVo item);
} }
\ No newline at end of file
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.common.core.domain.PageQuery; import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.CbProjectRecord; import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.DProject;
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.CbProjectHeadInfoVo; import com.dsk.cscec.domain.vo.CbProjectHeadInfoVo;
...@@ -18,6 +19,14 @@ import java.util.List; ...@@ -18,6 +19,14 @@ import java.util.List;
* @since 2024-02-05 11:37:53 * @since 2024-02-05 11:37:53
*/ */
public interface CbProjectRecordService extends IService<CbProjectRecord> { public interface CbProjectRecordService extends IService<CbProjectRecord> {
/**
* 校验项目名称是否存在
*
* @param projectName 项目名称
* @return 项目实体
*/
CbProjectRecord checkProjectNameExist(String projectName);
/** /**
* 新增项目 * 新增项目
* *
......
...@@ -61,7 +61,7 @@ public interface IDProjectService extends IService<DProject> { ...@@ -61,7 +61,7 @@ public interface IDProjectService extends IService<DProject> {
* @param checkBo 待校验信息 * @param checkBo 待校验信息
* @return 校验结果 * @return 校验结果
*/ */
Boolean checkProjectCodeExist(CbCheckProjectCodeExistBo checkBo); String checkProjectCodeExist(CbCheckProjectCodeExistBo checkBo);
/** /**
* 获取工程项目信息 * 获取工程项目信息
...@@ -70,5 +70,13 @@ public interface IDProjectService extends IService<DProject> { ...@@ -70,5 +70,13 @@ public interface IDProjectService extends IService<DProject> {
* @return 工程项目信息 * @return 工程项目信息
*/ */
CbProjectInfoVo getCbProjectInfo(Long projectId); CbProjectInfoVo getCbProjectInfo(Long projectId);
/**
* 根据项目名称模糊查询项目列表
*
* @param projectName 项目名称
* @return 项目列表
*/
List<DProject> queryProjectNameList(String projectName);
} }
...@@ -7,10 +7,12 @@ import cn.hutool.core.lang.Assert; ...@@ -7,10 +7,12 @@ import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNodeConfig; import cn.hutool.core.lang.tree.TreeNodeConfig;
import cn.hutool.core.lang.tree.TreeUtil; import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.ReUtil;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
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;
...@@ -18,6 +20,8 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; ...@@ -18,6 +20,8 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.excel.ExcelResult; import com.dsk.common.excel.ExcelResult;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.helper.LoginHelper;
import com.dsk.common.utils.JsonUtils; import com.dsk.common.utils.JsonUtils;
import com.dsk.common.utils.StringUtils; import com.dsk.common.utils.StringUtils;
import com.dsk.common.utils.poi.ExcelUtil; import com.dsk.common.utils.poi.ExcelUtil;
...@@ -32,7 +36,9 @@ import com.dsk.cscec.domain.vo.CbProjectExpenseSummaryImportVo; ...@@ -32,7 +36,9 @@ import com.dsk.cscec.domain.vo.CbProjectExpenseSummaryImportVo;
import com.dsk.cscec.domain.vo.CbProjectExpenseSummaryVo; import com.dsk.cscec.domain.vo.CbProjectExpenseSummaryVo;
import com.dsk.cscec.listener.ProjectCostMeasureImportListener; import com.dsk.cscec.listener.ProjectCostMeasureImportListener;
import com.dsk.cscec.listener.ProjectCostMeasureSummaryImportListener; import com.dsk.cscec.listener.ProjectCostMeasureSummaryImportListener;
import com.dsk.cscec.mapper.CbCostMeasureActualMapper;
import com.dsk.cscec.service.*; import com.dsk.cscec.service.*;
import com.sun.org.apache.bcel.internal.generic.IFNULL;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -40,6 +46,7 @@ import org.springframework.stereotype.Service; ...@@ -40,6 +46,7 @@ import org.springframework.stereotype.Service;
import com.dsk.cscec.mapper.CbCostMeasureMapper; import com.dsk.cscec.mapper.CbCostMeasureMapper;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.InputStream; import java.io.InputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -60,15 +67,12 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C ...@@ -60,15 +67,12 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C
@Autowired @Autowired
private CbProjectRecordService cbProjectRecordService; private CbProjectRecordService cbProjectRecordService;
@Autowired @Autowired
private ICbCostMeasureActualService cbCostMeasureActualService; private ICbCostMeasureActualService cbCostMeasureActualService;
@Resource
private CbCostMeasureActualMapper cbCostMeasureActualMapper;
@Autowired @Autowired
private CbProjectFileService cbProjectFileService; private CbProjectFileService cbProjectFileService;
@Autowired @Autowired
private CbProjectExpenseSummaryService cbProjectExpenseSummaryService; private CbProjectExpenseSummaryService cbProjectExpenseSummaryService;
...@@ -184,6 +188,10 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C ...@@ -184,6 +188,10 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C
//查询项目某项措施费所有计划成本 //查询项目某项措施费所有计划成本
dataList = baseMapper.selectListByProjectAndNo(costMeasureActualBo); dataList = baseMapper.selectListByProjectAndNo(costMeasureActualBo);
//统计截止本月差值
dataList.forEach(item -> {
item.setSumDifference(cbCostMeasureActualMapper.calculateSumDifference(item));
});
//配置类 //配置类
TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
treeNodeConfig.setIdKey("id"); treeNodeConfig.setIdKey("id");
...@@ -218,6 +226,8 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C ...@@ -218,6 +226,8 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C
treeNode.putExtra("projectVolume", object.getProjectVolume()); treeNode.putExtra("projectVolume", object.getProjectVolume());
treeNode.putExtra("currentProjectVolume", object.getCurrentProjectVolume()); treeNode.putExtra("currentProjectVolume", object.getCurrentProjectVolume());
treeNode.putExtra("submitProjectVolume", object.getSubmitProjectVolume()); treeNode.putExtra("submitProjectVolume", object.getSubmitProjectVolume());
treeNode.putExtra("difference", object.getDifference());
treeNode.putExtra("sumDifference", object.getSumDifference());
treeNode.putExtra("month", object.getMonth()); treeNode.putExtra("month", object.getMonth());
treeNode.putExtra("pushTime", object.getPushTime()); treeNode.putExtra("pushTime", object.getPushTime());
treeNode.putExtra("pushDataJson", object.getPushDataJson()); treeNode.putExtra("pushDataJson", object.getPushDataJson());
...@@ -230,7 +240,25 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C ...@@ -230,7 +240,25 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C
@Override @Override
public void saveBatchCostMeasureActual(List<CbCostMeasureActualSaveBo> boList) { public void saveBatchCostMeasureActual(List<CbCostMeasureActualSaveBo> boList) {
//递归 //递归
this.recursionSaveBatchCostMeasureActual(boList, boList.get(0).getId(), null); //this.recursionSaveBatchCostMeasureActual(boList, boList.get(0).getId(), null);
Assert.isTrue(ObjectUtil.isNotEmpty(boList), "数据不能为空");
boList.forEach(item -> {
CbCostMeasureActual actual = BeanUtil.toBean(item, CbCostMeasureActual.class);
Assert.notNull(actual.getPlanMeasureId(), "基础数据id不能为空");
Assert.notNull(actual.getMonth(), "填写月份不能为空");
actual.setId(ObjectUtil.isNull(actual.getId()) ? IdUtil.getSnowflakeNextId() : actual.getId());
// 查询计划成本累积实际成本
BigDecimal bigDecimal = cbCostMeasureActualService.selectSumData(item);
actual.setCurrentProjectVolume(NumberUtil.add(bigDecimal, actual.getProjectVolume()));
actual.setUpdateUser(Objects.requireNonNull(LoginHelper.getUsername()));
actual.setUpdateId(Objects.requireNonNull(LoginHelper.getUserId()));
actual.setDelFlag(0);
boolean b = cbCostMeasureActualService.saveOrUpdate(actual);
if (!b) {
log.error("CbQuantitySummaryServiceImpl.updateActual() data insert error! data:" + JSONUtil.toJsonStr(actual));
throw new ServiceException("数据添加错误!");
}
});
} }
/** /**
...@@ -246,6 +274,7 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C ...@@ -246,6 +274,7 @@ public class CbCostMeasureServiceImpl extends ServiceImpl<CbCostMeasureMapper, C
for (CbCostMeasureActualSaveBo cbCostMeasureActualSaveBo : boList) { for (CbCostMeasureActualSaveBo cbCostMeasureActualSaveBo : boList) {
CbCostMeasureActual cbCostMeasureActual = new CbCostMeasureActual(); CbCostMeasureActual cbCostMeasureActual = new CbCostMeasureActual();
BeanUtil.copyProperties(cbCostMeasureActualSaveBo, cbCostMeasureActual); BeanUtil.copyProperties(cbCostMeasureActualSaveBo, cbCostMeasureActual);
if (ObjectUtil.isNotNull(planMeasureId)) { if (ObjectUtil.isNotNull(planMeasureId)) {
cbCostMeasureActual.setPlanMeasureId(planMeasureIdTemp++); cbCostMeasureActual.setPlanMeasureId(planMeasureIdTemp++);
} }
......
...@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; ...@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.constant.TenantConstants;
import com.dsk.common.core.domain.PageQuery; import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.helper.LoginHelper; import com.dsk.common.helper.LoginHelper;
...@@ -17,12 +18,14 @@ import com.dsk.component.DataAnalysisComponent; ...@@ -17,12 +18,14 @@ import com.dsk.component.DataAnalysisComponent;
import com.dsk.cscec.constant.CbProjectConstants; import com.dsk.cscec.constant.CbProjectConstants;
import com.dsk.cscec.domain.CbProjectFile; import com.dsk.cscec.domain.CbProjectFile;
import com.dsk.cscec.domain.CbProjectRecord; import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.DProject;
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.CbProjectHeadInfoVo; import com.dsk.cscec.domain.vo.CbProjectHeadInfoVo;
import com.dsk.cscec.domain.vo.CbProjectRecordSearchVo; import com.dsk.cscec.domain.vo.CbProjectRecordSearchVo;
import com.dsk.cscec.mapper.CbProjectFileMapper; import com.dsk.cscec.mapper.CbProjectFileMapper;
import com.dsk.cscec.mapper.CbProjectRecordMapper; import com.dsk.cscec.mapper.CbProjectRecordMapper;
import com.dsk.cscec.mapper.DProjectMapper;
import com.dsk.cscec.service.*; import com.dsk.cscec.service.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.aop.framework.AopContext; import org.springframework.aop.framework.AopContext;
...@@ -31,6 +34,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -31,6 +34,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -62,6 +66,26 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -62,6 +66,26 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
private ICbCostMeasureService costMeasureService; private ICbCostMeasureService costMeasureService;
@Resource @Resource
private CbDirectExpenseService directExpenseService; private CbDirectExpenseService directExpenseService;
@Resource
private DProjectMapper dProjectMapper;
/**
* 校验项目名称是否存在
*
* @param projectName 项目名称
* @return 项目实体
*/
@Override
public CbProjectRecord checkProjectNameExist(String projectName) {
if (StringUtils.isNotBlank(projectName)) {
return baseMapper.selectOne(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getProjectName, projectName)
.eq(CbProjectRecord::getDelFlag, CbProjectConstants.DELETE_FLAG_EXIST)
.orderByDesc(CbProjectRecord::getCbStage)
.last("LIMIT 1"));
}
return null;
}
/** /**
* 新增项目 * 新增项目
...@@ -72,6 +96,16 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -72,6 +96,16 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public CbProjectRecord addProject(AddCbProjectBo addCbProjectBo) { public CbProjectRecord addProject(AddCbProjectBo addCbProjectBo) {
//仅管理员可创建IPM系统中不存在的项目
Objects.requireNonNull(LoginHelper.getLoginUser()).getRolePermission().forEach(permission -> {
if (!TenantConstants.SUPER_ADMIN_ROLE_KEY.equals(permission) &&
!TenantConstants.TENANT_SUPER_ADMIN_ROLE_KEY.equals(permission) &&
!TenantConstants.TENANT_ADMIN_ROLE_KEY.equals(permission)) {
Assert.isTrue(dProjectMapper.exists(new LambdaQueryWrapper<DProject>()
.eq(DProject::getProjectName, addCbProjectBo.getProjectName())), "IPM系统中不存在该项目,请重新选择");
}
});
CbProjectRecord projectRecord = BeanUtil.toBean(addCbProjectBo, CbProjectRecord.class); CbProjectRecord projectRecord = BeanUtil.toBean(addCbProjectBo, CbProjectRecord.class);
//生成唯一关联ID //生成唯一关联ID
...@@ -198,8 +232,8 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -198,8 +232,8 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
for (CbProjectRecordSearchVo searchVo : page.getRecords()) { for (CbProjectRecordSearchVo searchVo : page.getRecords()) {
//判断是否有历史阶段 //判断是否有历史阶段
searchVo.setHasChildren(baseMapper.selectCount(new LambdaQueryWrapper<CbProjectRecord>() searchVo.setHasChildren(baseMapper.selectCount(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getRelatedId, searchVo.getRelatedId()) .eq(CbProjectRecord::getRelatedId, searchVo.getRelatedId())
//.ne(CbProjectRecord::getProjectFileStatus, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING) //.ne(CbProjectRecord::getProjectFileStatus, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)
) > 1 ) > 1
); );
...@@ -245,7 +279,7 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe ...@@ -245,7 +279,7 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
projectRecordList.forEach(record -> { projectRecordList.forEach(record -> {
//关键字标红 //关键字标红
if (StringUtils.isNotBlank(searchBo.getProjectName())) { if (StringUtils.isNotBlank(searchBo.getProjectName())) {
record.setProjectName(StringUtils.markInRed(record.getProjectFileName(), searchBo.getProjectName())); record.setProjectName(StringUtils.markInRed(record.getProjectName(), searchBo.getProjectName()));
} }
//补充更新时间、更新人 //补充更新时间、更新人
CbProjectFile projectFile = projectFileMapper.selectOne(new LambdaQueryWrapper<CbProjectFile>() CbProjectFile projectFile = projectFileMapper.selectOne(new LambdaQueryWrapper<CbProjectFile>()
......
...@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.core.domain.PageQuery; import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.utils.StringUtils; 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;
...@@ -35,10 +36,12 @@ import com.dsk.jsk.domain.EnterpriseInfoHeaderBody; ...@@ -35,10 +36,12 @@ import com.dsk.jsk.domain.EnterpriseInfoHeaderBody;
import com.dsk.system.utils.DskOpenApiUtil; import com.dsk.system.utils.DskOpenApiUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.MapUtils;
import org.apache.poi.ss.formula.functions.DProduct;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* 咨询机构管理 * 咨询机构管理
...@@ -261,16 +264,13 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject> ...@@ -261,16 +264,13 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject>
* @return 校验结果 * @return 校验结果
*/ */
@Override @Override
public Boolean checkProjectCodeExist(CbCheckProjectCodeExistBo checkBo) { public String checkProjectCodeExist(CbCheckProjectCodeExistBo checkBo) {
Long projectId = checkBo.getProjectId(); Long projectId = checkBo.getProjectId();
String projectCode = checkBo.getProjectCode(); String projectCode = checkBo.getProjectCode();
//新增全新项目时,直接校验IPM编码是否重复和是否存在 //新增全新项目时,直接校验IPM编码是否重复和是否存在
if (ObjectUtil.isNull(projectId)) { if (ObjectUtil.isNull(projectId)) {
Assert.isFalse(projectRecordMapper.exists(new LambdaQueryWrapper<CbProjectRecord>() return this.treatProjectCodeExist(projectCode);
.eq(CbProjectRecord::getIpmProjectNo, projectCode)), "项目台账列表中已存在相同IPM编码的项目");
return baseMapper.exists(new LambdaQueryWrapper<DProject>()
.eq(DProject::getProjectCode, projectCode));
} else { } else {
CbProjectRecord projectRecord = projectRecordMapper.selectById(projectId); CbProjectRecord projectRecord = projectRecordMapper.selectById(projectId);
////未做任何改动时 ////未做任何改动时
...@@ -278,16 +278,24 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject> ...@@ -278,16 +278,24 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject>
//修改项目信息or新增新阶段项目时 //修改项目信息or新增新阶段项目时
if (projectCode.equals(projectRecord.getIpmProjectNo()) if (projectCode.equals(projectRecord.getIpmProjectNo())
&& projectRecord.getIsGetProjectDetail()) { && projectRecord.getIsGetProjectDetail()) {
return true; return projectRecord.getProjectName();
} else { } else {
Assert.isFalse(projectRecordMapper.exists(new LambdaQueryWrapper<CbProjectRecord>() return this.treatProjectCodeExist(projectCode);
.eq(CbProjectRecord::getIpmProjectNo, projectCode)), "项目台账列表中已存在相同IPM编码的项目");
return baseMapper.exists(new LambdaQueryWrapper<DProject>()
.eq(DProject::getProjectCode, projectCode));
} }
} }
} }
private String treatProjectCodeExist(String projectCode) {
Assert.isFalse(projectRecordMapper.exists(new LambdaQueryWrapper<CbProjectRecord>()
.eq(CbProjectRecord::getIpmProjectNo, projectCode)), "项目台账列表中已存在相同IPM编码的项目");
DProject dProject = baseMapper.selectOne(new LambdaQueryWrapper<DProject>()
.eq(DProject::getProjectCode, projectCode));
if (ObjectUtil.isNotNull(dProject)) {
return dProject.getProjectName();
}
throw new ServiceException("IPM项目编码无效");
}
/** /**
* 获取工程项目信息 * 获取工程项目信息
* *
...@@ -303,5 +311,20 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject> ...@@ -303,5 +311,20 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject>
return BeanUtil.toBean(baseMapper.selectOne(new LambdaQueryWrapper<DProject>() return BeanUtil.toBean(baseMapper.selectOne(new LambdaQueryWrapper<DProject>()
.eq(DProject::getProjectCode, projectRecord.getIpmProjectNo())), CbProjectInfoVo.class); .eq(DProject::getProjectCode, projectRecord.getIpmProjectNo())), CbProjectInfoVo.class);
} }
/**
* 根据项目名称模糊查询项目列表
*
* @param projectName 项目名称
* @return 项目列表
*/
@Override
public List<DProject> queryProjectNameList(String projectName) {
return baseMapper.selectList(new LambdaQueryWrapper<DProject>()
.select(DProject::getProjectName, DProject::getProjectCode)
.like(StringUtils.isNotBlank(projectName), DProject::getProjectName, projectName)).stream().peek(item -> {
item.setProjectName(StringUtils.markInRed(item.getProjectName(), projectName));
}).collect(Collectors.toList());
}
} }
...@@ -200,4 +200,11 @@ ...@@ -200,4 +200,11 @@
AND t1.level=#{level} AND t1.level=#{level}
AND t.`month`=#{month} AND t.`month`=#{month}
</select> </select>
<select id="calculateSumDifference" resultType="java.math.BigDecimal">
select ifnull(sum(ccma.difference), 0) sumDifference
from cb_cost_measure_actual ccma
where ccma.plan_measure_id = #{item.id}
and ccma.month &lt;= #{item.month}
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -34,16 +34,16 @@ ...@@ -34,16 +34,16 @@
<sql id="Base_Column_List"> <sql id="Base_Column_List">
<!--@mbg.generated--> <!--@mbg.generated-->
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,data_source, create_time, update_time tax_amount, remarks, cost_subject, tax_type,data_source, create_time, update_time
</sql> </sql>
<select id="selectListByProjectAndNo" resultType="com.dsk.cscec.domain.vo.CbCostMeasureActualVo"> <select id="selectListByProjectAndNo" resultType="com.dsk.cscec.domain.vo.CbCostMeasureActualVo">
SELECT t.*,t1.actualId,t1.plan_measure_id,t1.month_cost_rate, t1.cost_effective, t1.project_volume,t1.current_project_volume,t1.submit_project_volume,t1.`month`,t1.push_time FROM cb_cost_measure t SELECT t.*,t1.actualId,t1.plan_measure_id,t1.month_cost_rate, t1.cost_effective, t1.project_volume,t1.current_project_volume,t1.submit_project_volume,t1.difference,t1.`month`,t1.push_time FROM cb_cost_measure t
left JOIN ( left JOIN (
SELECT t.id actualId,t1.plan_measure_id,t1.month_cost_rate, t1.cost_effective,t1.project_volume, t1.current_project_volume,t1.submit_project_volume,t1.`month`,t1.push_time FROM cb_cost_measure t SELECT t1.id actualId,t1.plan_measure_id,t1.month_cost_rate, t1.cost_effective,t1.project_volume, t1.current_project_volume,t1.submit_project_volume,t1.difference,t1.`month`,t1.push_time FROM cb_cost_measure t
inner JOIN cb_cost_measure_actual t1 ON t1.plan_measure_id=t.id inner JOIN cb_cost_measure_actual t1 ON t1.plan_measure_id=t.id
WHERE WHERE
t.project_id=#{projectId} t.project_id=#{projectId}
......
...@@ -91,7 +91,7 @@ ...@@ -91,7 +91,7 @@
cqs.combined_price, cqs.combined_price_tax, cqs.brand_name, cqs.bid_source, cqs.remark, cqs.`number`, cqsa.quantities, cqs.combined_price, cqs.combined_price_tax, cqs.brand_name, cqs.bid_source, cqs.remark, cqs.`number`, cqsa.quantities,
cqsa.quantities_unit, cqsa.conversion_quantities, cqsa.conversion_unit, cqsa.purchase_unit_price, cqsa.create_time, cqsa.quantities_unit, cqsa.conversion_quantities, cqsa.conversion_unit, cqsa.purchase_unit_price, cqsa.create_time,
cqsa.id actualId, cqsa.ipm_project_code, cqsa.ipm_contract_code, cqsa.ipm_biz_code, cqsa.push_quantities, cqsa.id actualId, cqsa.ipm_project_code, cqsa.ipm_contract_code, cqsa.ipm_biz_code, cqsa.push_quantities,
ifnull(sum(cqsa1.quantities),0) totalQuantities ifnull(sum(cqsa1.quantities),0) totalQuantities,ifnull(sum(cqsa1.push_quantities),0) cumulativeDifference
from cb_quantity_summary cqs from cb_quantity_summary cqs
left join cb_quantity_summary_actual cqsa on (cqs.id = cqsa.cb_quantity_summary_id and cqsa.record_date = #{recordDate} ) left join cb_quantity_summary_actual cqsa on (cqs.id = cqsa.cb_quantity_summary_id and cqsa.record_date = #{recordDate} )
left join cb_quantity_summary_actual cqsa1 on (cqs.id = cqsa1.cb_quantity_summary_id and cqsa1.record_date &lt;= #{recordDate} ) left join cb_quantity_summary_actual cqsa1 on (cqs.id = cqsa1.cb_quantity_summary_id and cqsa1.record_date &lt;= #{recordDate} )
......
...@@ -11,6 +11,22 @@ export const getProjectDetailApi = (projectId) => request({ ...@@ -11,6 +11,22 @@ export const getProjectDetailApi = (projectId) => request({
params: {} params: {}
}); });
//项目名称模糊查询
export function queryProjectNameListProjectName(data) {
return request({
url: '/cbProjectRecord/queryProjectNameList/projectName',
method: 'get',
params: data,
});
}
//校验项目名称是否有相同
export function checkProjectNameExistProjectName(data) {
return request({
url: '/cbProjectRecord/checkProjectNameExist/projectName',
method: 'get',
params: data,
});
}
//校验项目编码是否存在 //校验项目编码是否存在
export function checkProjectCodeExist(data) { export function checkProjectCodeExist(data) {
return request({ return request({
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<!-- 列二次封装 --> <!-- 列二次封装 -->
<template v-for="(item,index) of formColum"> <template v-for="(item,index) of formColum">
<table-list-column v-if="item.use !== false" :key="item.uid" :tableData="tableData" :item="item"> <table-list-column v-if="item.use !== false" :key="item.uid" :tableData="tableData" :item="item" :queryParams="queryParams">
<!-- 根据透传属性创建插槽 --> <!-- 根据透传属性创建插槽 -->
<template v-for="(fn, slotName) in $slots" :slot="slotName"> <template v-for="(fn, slotName) in $slots" :slot="slotName">
<slot :name="slotName"></slot> <slot :name="slotName"></slot>
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
</el-table-column> </el-table-column>
<!-- 列二次封装 --> <!-- 列二次封装 -->
<template v-for="(item,index) of formColum"> <template v-for="(item,index) of formColum">
<table-list-column v-if="item.use !== false" :key="item.uid ? item.uid : index" :tableData="tableData" :item="item"> <table-list-column v-if="item.use !== false" :key="item.uid ? item.uid : index" :tableData="tableData" :item="item" :queryParams="queryParams">
<!-- 根据透传属性创建插槽 --> <!-- 根据透传属性创建插槽 -->
<template v-for="(index, name) in $slots" :slot="name"> <template v-for="(index, name) in $slots" :slot="name">
<slot :name="name" /> <slot :name="name" />
...@@ -167,7 +167,7 @@ export default { ...@@ -167,7 +167,7 @@ export default {
async maxHeightInit() { async maxHeightInit() {
try { try {
await this.$nextTick(); await this.$nextTick();
/** /**
* @type {HTMLDivElement} * @type {HTMLDivElement}
*/ */
const container = this.$el.querySelector(".table-item"); const container = this.$el.querySelector(".table-item");
......
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
<skeleton v-if="tableLoading"></skeleton> <skeleton v-if="tableLoading"></skeleton>
<!-- table 列表 --> <!-- table 列表 -->
<table-list-com ref="tableContainer" :tableData="tableDataList" :formColum="formColum" :tableDataTotal="total" :queryParams="queryParams" <table-list-com ref="tableContainer" :tableData="tableDataList" :formColum="formColum" :tableDataTotal="total" :queryParams="queryParams"
v-else-if="!tableLoading" :maxHeight="true" @handle-current-change="handleCurrentChange"> v-else-if="!tableLoading" :maxHeight="false" @handle-current-change="handleCurrentChange">
<!-- 项目列表 --> <!-- 项目列表 -->
<template slot="projectName" slot-scope="{data,row}"> <template slot="projectName" slot-scope="{data,row}">
<div v-if="row.projectName" class="no-line-feed" v-html="row.projectName" @click="viewProjectDetail(row)">{{row.projectName}}</div> <div v-if="row.projectName" class="no-line-feed" v-html="row.projectName" @click="viewProjectDetail(row)">{{row.projectName}}</div>
......
...@@ -68,8 +68,8 @@ export default { ...@@ -68,8 +68,8 @@ export default {
.default-layout-container-inner { .default-layout-container-inner {
.cooperation-desk-account-project, .cooperation-desk-account-project,
.cooperation-desk-account-enterprise { .cooperation-desk-account-enterprise {
overflow: hidden; /*overflow: hidden;*/
height: calc(100%); /*height: calc(100%);*/
} }
} }
.title_wrap{ .title_wrap{
......
...@@ -63,8 +63,8 @@ export default { ...@@ -63,8 +63,8 @@ export default {
.default-layout-container-inner { .default-layout-container-inner {
.cooperation-desk-account-project, .cooperation-desk-account-project,
.cooperation-desk-account-enterprise { .cooperation-desk-account-enterprise {
overflow: hidden; /*overflow: hidden;*/
height: calc(100%); /*height: calc(100%);*/
} }
} }
.title_wrap{ .title_wrap{
......
...@@ -100,6 +100,7 @@ export default { ...@@ -100,6 +100,7 @@ export default {
{ {
title: '企业概要', pathName: '', children: [ title: '企业概要', pathName: '', children: [
{ title: '企业速览', pathName: 'overview' }, { title: '企业速览', pathName: 'overview' },
{ title: '资质资格', pathName: 'qualification' },
{ title: '工商信息', pathName: 'businfo' }, { title: '工商信息', pathName: 'businfo' },
{ title: '股东信息', pathName: 'holderinfo' }, { title: '股东信息', pathName: 'holderinfo' },
{ title: '高管信息', pathName: 'execuinfo' }, { title: '高管信息', pathName: 'execuinfo' },
...@@ -144,7 +145,8 @@ export default { ...@@ -144,7 +145,8 @@ export default {
// ] // ]
// }, // },
{ {
title: '风险信息', pathName: '', children: [ title: '信用行为', pathName: '', children: [
{ title: '信用中国', pathName: 'credit' },
{ title: '行政处罚', pathName: 'punish' }, { title: '行政处罚', pathName: 'punish' },
{ title: '经营异常', pathName: 'businessAnomaly' }, { title: '经营异常', pathName: 'businessAnomaly' },
{ title: '被执行人', pathName: 'ifThePerson' }, { title: '被执行人', pathName: 'ifThePerson' },
...@@ -200,6 +202,7 @@ export default { ...@@ -200,6 +202,7 @@ export default {
{ {
title: '企业概要', pathName: '', children: [ title: '企业概要', pathName: '', children: [
{ title: '企业速览', pathName: 'overview' }, { title: '企业速览', pathName: 'overview' },
{ title: '资质资格', pathName: 'qualification' },
{ title: '工商信息', pathName: 'businfo' }, { title: '工商信息', pathName: 'businfo' },
{ title: '股东信息', pathName: 'holderinfo' }, { title: '股东信息', pathName: 'holderinfo' },
{ title: '高管信息', pathName: 'execuinfo' }, { title: '高管信息', pathName: 'execuinfo' },
...@@ -244,7 +247,8 @@ export default { ...@@ -244,7 +247,8 @@ export default {
// ] // ]
// }, // },
{ {
title: '风险信息', pathName: '', children: [ title: '信用行为', pathName: '', children: [
{ title: '信用中国', pathName: 'credit' },
{ title: '行政处罚', pathName: 'punish' }, { title: '行政处罚', pathName: 'punish' },
{ title: '经营异常', pathName: 'businessAnomaly' }, { title: '经营异常', pathName: 'businessAnomaly' },
{ title: '被执行人', pathName: 'ifThePerson' }, { title: '被执行人', pathName: 'ifThePerson' },
......
<template>
<div>
信用中国
</div>
</template>
<script>
export default {
name: "credit"
}
</script>
<style scoped>
</style>
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
<template v-if="isCompany"> <template v-if="isCompany">
<!-- 企业概览 --> <!-- 企业概览 -->
<Overview v-if="currentPath.pathName=='overview'" :company-id="companyId" :isSkeleton="isSkeleton" :companyInfo="companyInfo" /> <Overview v-if="currentPath.pathName=='overview'" :company-id="companyId" :isSkeleton="isSkeleton" :companyInfo="companyInfo" />
<Qualification v-if="currentPath.pathName=='qualification'" :company-id="companyId" />
<Businfo v-if="currentPath.pathName=='businfo'" :company-id="companyId" /> <Businfo v-if="currentPath.pathName=='businfo'" :company-id="companyId" />
<Holderinfo v-if="currentPath.pathName=='holderinfo'" :company-id="companyId" /> <Holderinfo v-if="currentPath.pathName=='holderinfo'" :company-id="companyId" />
<Execuinfo v-if="currentPath.pathName=='execuinfo'" :company-id="companyId" /> <Execuinfo v-if="currentPath.pathName=='execuinfo'" :company-id="companyId" />
...@@ -48,6 +49,7 @@ ...@@ -48,6 +49,7 @@
<LandAcquisition v-if="currentPath.pathName=='landAcquisition'" :company-id="companyId" /> <LandAcquisition v-if="currentPath.pathName=='landAcquisition'" :company-id="companyId" />
<SameRegion v-if="currentPath.pathName=='sameRegion'" :company-id="companyId" :companyInfo="companyInfo" /> <SameRegion v-if="currentPath.pathName=='sameRegion'" :company-id="companyId" :companyInfo="companyInfo" />
<!-- 风险信息 --> <!-- 风险信息 -->
<Credit v-if="currentPath.pathName=='credit'" :company-id="companyId" />
<Punish v-if="currentPath.pathName=='punish'" :company-id="companyId" /> <Punish v-if="currentPath.pathName=='punish'" :company-id="companyId" />
<BusinessAnomaly v-if="currentPath.pathName=='businessAnomaly'" :company-id="companyId" /> <BusinessAnomaly v-if="currentPath.pathName=='businessAnomaly'" :company-id="companyId" />
<IfThePerson v-if="currentPath.pathName=='ifThePerson'" :company-id="companyId" /> <IfThePerson v-if="currentPath.pathName=='ifThePerson'" :company-id="companyId" />
...@@ -118,6 +120,7 @@ import elementResizeDetectorMaker from "element-resize-detector"; ...@@ -118,6 +120,7 @@ import elementResizeDetectorMaker from "element-resize-detector";
import Header from "./component/Header"; import Header from "./component/Header";
import SideBar from "./component/Sidebar"; import SideBar from "./component/Sidebar";
import Overview from "./overview/overview"; //企业概览-企业速览 import Overview from "./overview/overview"; //企业概览-企业速览
import Qualification from "./qualification/qualification"; //企业概览-资质资格
import Businfo from "./overview/businfo"; //企业概览-工商信息 import Businfo from "./overview/businfo"; //企业概览-工商信息
import Holderinfo from "./overview/holderinfo"; //企业概览-股东信息 import Holderinfo from "./overview/holderinfo"; //企业概览-股东信息
import Execuinfo from "./overview/execuinfo"; //企业概览-高管信息 import Execuinfo from "./overview/execuinfo"; //企业概览-高管信息
...@@ -145,6 +148,7 @@ import LandAcquisition from "./urbanLnvestment/landAcquisition"; //投诚分析- ...@@ -145,6 +148,7 @@ import LandAcquisition from "./urbanLnvestment/landAcquisition"; //投诚分析-
import RegionalEconomies from "./urbanLnvestment/regionalEconomies"; //投诚分析-区域经济 import RegionalEconomies from "./urbanLnvestment/regionalEconomies"; //投诚分析-区域经济
import SameRegion from "./urbanLnvestment/sameRegion"; //投诚分析-同地区城投 import SameRegion from "./urbanLnvestment/sameRegion"; //投诚分析-同地区城投
import Punish from "./riskInformation/punish"; //风险信息-行政处罚 import Punish from "./riskInformation/punish"; //风险信息-行政处罚
import Credit from "./credit/credit"; //风险信息-信用中国
import BusinessAnomaly from "./riskInformation/businessAnomaly"; //风险信息-经营异常 import BusinessAnomaly from "./riskInformation/businessAnomaly"; //风险信息-经营异常
import IfThePerson from "./riskInformation/ifThePerson"; //风险信息-被执行人 import IfThePerson from "./riskInformation/ifThePerson"; //风险信息-被执行人
import Dishonesty from "./riskInformation/dishonesty"; //风险信息-失信被执行 import Dishonesty from "./riskInformation/dishonesty"; //风险信息-失信被执行
...@@ -189,6 +193,7 @@ export default { ...@@ -189,6 +193,7 @@ export default {
Header, Header,
SideBar, SideBar,
Overview, Overview,
Qualification,
Businfo, Businfo,
Holderinfo, Holderinfo,
Execuinfo, Execuinfo,
...@@ -212,6 +217,7 @@ export default { ...@@ -212,6 +217,7 @@ export default {
LandAcquisition, LandAcquisition,
RegionalEconomies, RegionalEconomies,
SameRegion, SameRegion,
Credit,
Punish, Punish,
BusinessAnomaly, BusinessAnomaly,
IfThePerson, IfThePerson,
......
...@@ -65,9 +65,9 @@ export default { ...@@ -65,9 +65,9 @@ export default {
{ label: '联系电话', prop: 'projectManagerPhone', width: '102' }, { label: '联系电话', prop: 'projectManagerPhone', width: '102' },
{ label: '资源平台类型', prop: 'projectType2', width: '98' }, { label: '资源平台类型', prop: 'projectType2', width: '98' },
{ label: '合同签订日期', prop: 'signDate', width: '149' }, { label: '合同签订日期', prop: 'signDate', width: '149' },
{ label: '合同总价', prop: 'subcontractValue', width: '79' }, { label: '合同总价', prop: 'subcontractValue', width: '100' },
{ label: '结算总价', prop: 'settleValue', width: '79' }, { label: '结算总价', prop: 'settleValue', width: '100' },
{ label: '分包内容', prop: 'jobScope', width: '126' }, { label: '分包内容', prop: 'jobScope', width: '400' },
{ label: '工程类型', prop: 'projectType2', width: '78' }, { label: '工程类型', prop: 'projectType2', width: '78' },
{ label: '队伍完工评价', prop: '', minWidth: '98' }, { label: '队伍完工评价', prop: '', minWidth: '98' },
{ label: '合同完工评价', prop: '', minWidth: '98' }, { label: '合同完工评价', prop: '', minWidth: '98' },
......
<template>
<div class="qualification-container">
<div class="title_wrap">
<div class="enterprise_title">
资质资格
</div>
</div>
<div class="label-item">
<span class="color">建筑业企业资质 31</span>
<span>工程设计资质 31</span>
</div>
<div class="table-item">
<el-table
v-if="!isSkeleton"
element-loading-text="Loading"
:data="tableData"
row-key="id"
:span-method="objectSpanMethod"
default-expand-all
border
highlight-current-row
>
<el-table-column label="序号" width="60" align="left" type="index" fixed="left"></el-table-column>
<el-table-column label="资质编号" width="150" prop="code"></el-table-column>
<el-table-column label="资质名称" min-width="200" prop="expenseName"></el-table-column>
<el-table-column label="发证日期" width="150" prop="date"></el-table-column>
<el-table-column label="有效期" width="150" prop="time"></el-table-column>
<el-table-column label="发证机关" min-width="200" prop="fzjg"></el-table-column>
</el-table>
</div>
</div>
</template>
<script>
import skeleton from '../component/skeleton';
export default {
name: "qualification",
components: {
skeleton,
},
data() {
return {
tableData:[
{
code:'D123456489',
expenseName:'冶金工程施工总承包一级',
date:'2020-08-01',
time:'2020-08-01',
fzjg:'住房和城乡建设部',
},
{
code:'D123456489',
expenseName:'冶金工程施工总承包二级',
date:'2020-08-01',
time:'2020-08-01',
fzjg:'住房和城乡建设部',
},
{
code:'D123456489',
expenseName:'冶金工程施工总承包san级',
date:'2020-08-01',
time:'2020-08-01',
fzjg:'住房和城乡建设部',
},
{
code:'D323156489',
expenseName:'冶金工程施工总承包san级',
date:'2020-08-01',
time:'2020-08-01',
fzjg:'住房和城乡建设部',
},
],
isSkeleton:false,
}
},
created() {
},
//计算集
computed: {
},
//方法集
methods: {
handleSearch(){
},
flitterData(arr) {
let spanOneArr = []
let concatOne = 0
arr.forEach((item, index) => {
if (index === 0) {
spanOneArr.push(1)
} else {
if (item.code === arr[index - 1].code) {
spanOneArr[concatOne] += 1
spanOneArr.push(0)
} else {
spanOneArr.push(1)
concatOne = index
}
}
})
return {
one: spanOneArr
}
},
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
const _row = this.flitterData(this.tableData).one[rowIndex]
console.log(_row,"||||||||")
const _col = _row > 0 ? 1 : 0
return {
rowspan: _row,
colspan: _col
}
}
},
}
}
</script>
<style lang="scss" scoped>
.qualification-container{
.title_wrap{
border-bottom: 0;
}
.label-item{
padding: 0 16px;
span{
display: inline-block;
height: 38px;
border-radius: 4px;
line-height: 38px;
border: 1px solid #DCDFE6;
color: #232323;
font-size: 14px;
margin-right: 8px;
padding: 0 12px;
}
.color{
background: rgba(0, 129, 255, 0.1);
color: #0081FF;
}
}
}
</style>
...@@ -231,7 +231,6 @@ ...@@ -231,7 +231,6 @@
selectList:[], selectList:[],
selectList1:[], selectList1:[],
sffx:[], sffx:[],
gsfx:[],
queryParams:{ queryParams:{
pageNum:1, pageNum:1,
pageSize:50, pageSize:50,
...@@ -348,29 +347,15 @@ ...@@ -348,29 +347,15 @@
}else { }else {
delete params.condition.riskLevel delete params.condition.riskLevel
} }
let sffx = this.sffx let sffx = this.sffx;
if(sffx.indexOf('不限')>-1){ if(sffx.indexOf('不限')>-1){
sffx = [] sffx = []
} }
let gsfx = this.gsfx if(sffx.length > 0){
if(gsfx.indexOf('不限')>-1){ params.condition.parentDimension=['司法风险']
gsfx = [] params.condition.dimension=this.sffx;
} }else {
if(sffx.length > 0 && gsfx.length > 0){ params.condition.parentDimension=['司法风险']
params.condition.riskType='司法风险,工商风险'
params.condition.dimension=this.sffx.concat(this.gsfx)
}
if(sffx.length > 0 && gsfx.length === 0){
params.condition.riskType='司法风险'
params.condition.dimension=this.sffx
}
if(sffx.length === 0 && gsfx.length > 0){
params.condition.riskType='工商风险'
params.condition.dimension=this.gsfx
}
if(sffx.length === 0 && gsfx.length === 0){
delete params.condition.riskType
delete params.condition.dimension
} }
dynamicPage(params).then(res => { dynamicPage(params).then(res => {
this.isSkeleton = false; this.isSkeleton = false;
...@@ -420,21 +405,6 @@ ...@@ -420,21 +405,6 @@
this.queryParams.pageSize=10 this.queryParams.pageSize=10
this.querySubmit() this.querySubmit()
}, },
changeGsfx(val) {
if(val == '不限')
this.gsfx = ['不限']
else if(this.gsfx.indexOf('不限')>-1){
this.gsfx.splice(this.gsfx.indexOf('不限'),1)
}
// if (this.gsfx.indexOf(val.dimensionName) == -1) {
// this.gsfx.push(val.dimensionName)
// } else {
// this.gsfx.splice(this.gsfx.indexOf(val.dimensionName), 1)
// }
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
checkFxjbBtn(val) { checkFxjbBtn(val) {
this.fxjbType = []; this.fxjbType = [];
this.checkFx = true; this.checkFx = true;
...@@ -724,7 +694,7 @@ ...@@ -724,7 +694,7 @@
.main-right { .main-right {
width: calc(100% - 112px); width: calc(100% - 112px);
.select-popper { .select-popper {
text-align: center; /*text-align: center;*/
display: inline-block; display: inline-block;
position: relative; position: relative;
color: #333333; color: #333333;
......
...@@ -229,7 +229,6 @@ ...@@ -229,7 +229,6 @@
], ],
selectList:[], selectList:[],
selectList1:[], selectList1:[],
sffx:[],
gsfx:[], gsfx:[],
queryParams:{ queryParams:{
pageNum:1, pageNum:1,
...@@ -347,29 +346,15 @@ ...@@ -347,29 +346,15 @@
}else { }else {
delete params.condition.riskLevel delete params.condition.riskLevel
} }
let sffx = this.sffx
if(sffx.indexOf('不限')>-1){
sffx = []
}
let gsfx = this.gsfx let gsfx = this.gsfx
if(gsfx.indexOf('不限')>-1){ if(gsfx.indexOf('不限')>-1){
gsfx = [] gsfx = []
} }
if(sffx.length > 0 && gsfx.length > 0){ if(gsfx.length > 0){
params.condition.riskType='司法风险,工商风险' params.condition.parentDimension=['工商风险']
params.condition.dimension=this.sffx.concat(this.gsfx) params.condition.dimension=this.gsfx;
} }else {
if(sffx.length > 0 && gsfx.length === 0){ params.condition.parentDimension=['工商风险']
params.condition.riskType='司法风险'
params.condition.dimension=this.sffx
}
if(sffx.length === 0 && gsfx.length > 0){
params.condition.riskType='工商风险'
params.condition.dimension=this.gsfx
}
if(sffx.length === 0 && gsfx.length === 0){
delete params.condition.riskType
delete params.condition.dimension
} }
dynamicPage(params).then(res => { dynamicPage(params).then(res => {
this.isSkeleton = false; this.isSkeleton = false;
...@@ -404,21 +389,6 @@ ...@@ -404,21 +389,6 @@
this.detail=res.data; this.detail=res.data;
}) })
}, },
changeSffx(val) {
if(val == '不限')
this.sffx = ['不限']
else if(this.sffx.indexOf('不限')>-1){
this.sffx.splice(this.sffx.indexOf('不限'),1)
}
// if (this.sffx.indexOf(val.dimensionName) == -1) {
// this.sffx.push(val.dimensionName)
// } else {
// this.sffx.splice(this.sffx.indexOf(val.dimensionName), 1)
// }
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
changeGsfx(val) { changeGsfx(val) {
if(val == '不限') if(val == '不限')
this.gsfx = ['不限'] this.gsfx = ['不限']
...@@ -723,7 +693,7 @@ ...@@ -723,7 +693,7 @@
.main-right { .main-right {
width: calc(100% - 112px); width: calc(100% - 112px);
.select-popper { .select-popper {
text-align: center; /*text-align: center;*/
display: inline-block; display: inline-block;
position: relative; position: relative;
color: #333333; color: #333333;
......
<template>
<!--经营风险动态-->
<div class="app-container MonitoringDynamics">
<div class="title_wrap">
<div class="enterprise_title">
经营风险动态
</div>
</div>
<div class="search">
<div class="search-item" style="line-height: 32px;margin-top: 0;padding-bottom: 8px;">
<div class="label">监控对象</div>
<el-input class="name" placeholder="请输入监控对象名称" v-model="companyName">
<el-button slot="append" @click="handleKeyword()">搜索</el-button>
</el-input>
</div>
<div class="search-item" style="margin-bottom: 25px">
<div class="label">更新时间</div>
<div class="checkbox">
<el-radio-group v-model="radio">
<el-radio v-for="item in radioList" @change="radioBtn" :label="item.type">{{item.label}}</el-radio>
</el-radio-group>
<el-date-picker
v-if="radio==6"
v-model="date"
type="daterange"
value-format="yyyy-MM-dd"
unlink-panels
size="small"
@change="changePicker"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="label">经营风险</div>
<div class="main-right">
<div class="select-popper">
<el-checkbox-group v-model="jyfx">
<el-checkbox label="不限" @change="changeGsfx('不限')">不限</el-checkbox>
<el-checkbox v-for="(i,index) in selectList1" :key="index" :label="i.dimensionName" @change="changeGsfx(i)">{{i.dimensionName}}</el-checkbox>
</el-checkbox-group>
</div>
</div>
</div>
<div class="search-item">
<div class="label">风险级别</div>
<div class="main-right">
<div class="checkbox">
<div class="checkbox-content-qx">
<el-checkbox v-model="checkFx" @change="checkFxjbBtn">全部</el-checkbox>
</div>
<el-checkbox-group v-model="fxjbType" class="keyword_checkbox" @change="checkFxjb1Btn">
<el-checkbox v-for="item in fxjb" :label="item.value" :key="item.label">{{item.label}}</el-checkbox>
</el-checkbox-group>
</div>
</div>
</div>
</div>
<div class="content">
<div class="total" v-if="tableDataTotal > 0 && !isSkeleton">{{tableDataTotal}}</div>
<div class="table-item">
<div v-if="tableDataTotal > 0 && !isSkeleton">
<el-table
:data="tableData"
element-loading-text="Loading"
border
highlight-current-row
>
<el-table-column label="序号" width="60" align="left" fixed>
<template slot-scope="scope">{{ queryParams.pageNum * queryParams.pageSize - queryParams.pageSize + scope.$index + 1 }}</template>
</el-table-column>
<el-table-column label="监控对象" prop="companyName" align="left" width="250"></el-table-column>
<el-table-column label="风险级别" prop="riskLevel" align="left" width="120"></el-table-column>
<el-table-column label="监控类型" prop="dimensionName" align="left" width="150"></el-table-column>
<el-table-column label="动态内容" prop="details" align="left">
<template slot-scope="scope">
<div v-for="(item,index) in scope.row.Array" :key="index">
<div>
<span style="color: #999;">{{item.key}}</span>
<span>{{item.value}}</span>
</div>
</div>
</template>
</el-table-column>
<el-table-column label="更新时间" prop="createTime" align="left" width="150"></el-table-column>
<el-table-column
label="操作"
align="center"
width="150"
>
<template slot-scope="scope">
<!---->
<span v-if="scope.row.hasdetail" style="cursor: pointer;color:#0081FF;" @click="handleDetail(scope.row)">查看详情</span>
<span v-else="scope.row.hasdetail" @click="handleDetail(scope.row)">查看详情</span>
</template>
</el-table-column>
</el-table>
</div>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<div class="empty" v-if="tableDataTotal === 0 && !isSkeleton">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">暂未发现企业风险动态信息</div>
<!--<div class="p2">建议调整关键词或筛选条件,重新搜索</div>-->
</div>
</div>
<div class="pagination-box" v-if="tableDataTotal>queryParams.pageSize">
<el-pagination background :current-page="queryParams.pageNum" :page-size="queryParams.pageSize" :total="tableDataTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div>
</div>
<el-dialog :visible.sync="dialogVisible" custom-class='dialog-claim' :title="title" width="720px" :close-on-click-modal="false">
<div class="dialog-content">
<template v-if="title=='开庭公告详情'">
<info-table class="info-tab" :list="defaultList0" :obj="detail" :labelWidth="labelWidth">
<template v-slot:relatedCompanies="row">
<p v-for="i in row.data.relatedCompanies">
{{i.role}}:<br/>
{{i.name}}
</p>
</template>
</info-table>
</template>
<template v-if="title=='失信被执行人详情'">
<info-table class="info-tab" :list="defaultList1" :obj="detail" :labelWidth="labelWidth"></info-table>
</template>
<template v-if="title=='法院公告详情'">
<info-table class="info-tab" :list="defaultList2" :obj="detail" :labelWidth="labelWidth"></info-table>
</template>
<template v-if="title=='经营异常详情'">
<info-table class="info-tab" :list="defaultList3" :obj="detail" :labelWidth="labelWidth"></info-table>
</template>
<template v-if="title=='股权冻结详情'">
<info-table class="info-tab" :list="defaultList4" :obj="detail" :labelWidth="labelWidth"></info-table>
</template>
<template v-if="title=='裁判文书详情'">
<info-table class="info-tab" :list="defaultList5" :obj="detail" :labelWidth="labelWidth">
<template v-slot:relatedCompanies="row">
<p v-for="i in row.data.relatedCompanies">
{{i.role}}:<br/>
{{i.name}}
</p>
</template>
</info-table>
</template>
</div>
</el-dialog>
</div>
</template>
<script>
import { v4 } from "uuid";
import {changeTime} from "@/assets/js/common.js"
import { dynamicPage,companyDetail,rulesSelect } from '@/api/monitoring/monitoring'
import InfoTable from '../detail/party-a/component/infoTable';
import skeleton from '../component/skeleton'
export default {
name: 'MonitoringDynamicsgs',
components: {
InfoTable,skeleton
},
data() {
return {
isSkeleton:true,
radio:null,
date:'',
radioList:[
{
type:null,
label:'全部'
},
{
type:1,
label:'今天'
},
{
type:2,
label:'近三天'
},
{
type:3,
label:'近一周'
},
{
type:4,
label:'近半月'
},
{
type:5,
label:'近一个月'
},
{
type:6,
label:'自定义日期'
},
],
fxjb:[
{
value:'低风险',
label:'低风险'
},
{
value:'中风险',
label:'中风险'
},
{
value:'高风险',
label:'高风险'
},
],
checkFx: true,
fxlxType:[],
jkType:[
{
value:'1',
label:'司法风险'
},
{
value:'2',
label:'工商变更'
},
],
selectList:[],
selectList1:[],
jyfx:[],
queryParams:{
pageNum:1,
pageSize:50,
condition:{}
},
type:[],
gsbgType:[],
companyName:'',
fxjbType:[],
inputID1: this.getUid(),
inputID2: this.getUid(),
tableData:[],
tableDataTotal:0,
dialogVisible:false,
labelWidth: 140,
//开庭公告详情
defaultList0:[
{ name: '案由', prop: 'causeAction' },
{ name: '案号', prop: 'caseNo' },
{ name: '开庭时间', prop: 'hearingDate' },
{ name: '承办部门', prop: 'department' },
{ name: '审判长/主判人', prop: 'judge'},
{ name: '当事人', prop: 'relatedCompanies',slot: true},
{ name: '法院', prop: 'court'},
{ name: '法庭', prop: 'tribunal'},
{ name: '公告内容', prop: 'content', style: true },
],
//失信被执行人详情
defaultList1:[
{ name: '失信被执行人行为具体情形', prop: 'executionDesc', style: true },
{ name: '履行情况', prop: 'finalDuty' },
{ name: '立案文号', prop: 'caseNumber' },
{ name: '立案日期', prop: 'date' },
{ name: '执行依据文号', prop: 'docNumber'},
{ name: '执行法院', prop: 'court'},
],
//法院公告详情
defaultList2:[
{ name: '当事人', prop: 'people',style: true },
{ name: '身份', prop: 'role' },
{ name: '公共类型', prop: 'type' },
{ name: '公告日期', prop: 'date' },
{ name: '公告法院', prop: 'court',style: true},
{ name: '案由', prop: 'caseReason',style: true},
],
//经营异常详情
defaultList3:[
{ name: '列入日期', prop: 'inDate'},
{ name: '移出日期', prop: 'outDate' },
{ name: '列入经营异常原因', prop: 'outReason',style: true },
{ name: '做出决定机关(移入)', prop: 'department' },
{ name: '做出决定机关(移出)', prop: 'outDepartment'},
{ name: '移出经营移除名录原因', prop: 'outReason',style: true},
],
//股权冻结详情
defaultList4:[
{ name: '执行法院', prop: 'executiveCourt'},
{ name: '执行事项', prop: 'assistItem' },
{ name: '执行裁定文书号', prop: 'adjudicateNo'},
{ name: '执行通知文号', prop: 'number' },
{ name: '被执行人', prop: 'beExecutedPerson'},
{ name: '被执行人持有股权、其他投资权益数额', prop: 'amount'},
{ name: '冻结期限自', prop: 'freezeStartDate'},
{ name: '冻结期限至', prop: 'freezeEndDate'},
{ name: '冻结期限', prop: 'freezeYearMonth'},
{ name: '公示日期', prop: 'publicDate'},
],
//裁判文书详情
defaultList5:[
{ name: '案由', prop: 'causeAction'},
{ name: '执行案号', prop: 'causeNo' },
{ name: '身份', prop: 'role'},
{ name: '当事人', prop: 'relatedCompanies',slot: true },
{ name: '案件金额', prop: 'subAmount'},
{ name: '判决日期', prop: 'date'},
{ name: '判决结果', prop: 'judgeresult',style: true},
],
title:'法院公告详情',
detail:{}
}
},
created() {
this.getPlaceholder()
this.querySubmit()
rulesSelect().then(res => {
this.selectList=res.data;
for(let i in res.data){
if(res.data[i].dimensionName === '经营风险'){
this.selectList1=res.data[i].children
}
}
})
},
methods: {
async querySubmit() {
let endTime = new Date()
let params={
pageNum:this.queryParams.pageNum,
pageSize:this.queryParams.pageSize,
condition:this.queryParams.condition
}
if(this.radio === 1){
params.condition.beginTime=this.formatDate(endTime)
params.condition.endTime=this.formatDate(endTime)
}
if(this.companyName){
params.condition.companyName=this.companyName
}
if(this.fxjbType.length > 0){
params.condition.riskLevel=this.fxjbType
}else {
delete params.condition.riskLevel
}
let jyfx = this.jyfx
if(jyfx.indexOf('不限')>-1){
jyfx = []
}
if(jyfx.length > 0){
params.condition.parentDimension=['经营风险']
params.condition.dimension=this.jyfx;
}else {
params.condition.parentDimension=['经营风险']
}
dynamicPage(params).then(res => {
this.isSkeleton = false;
this.tableData=res.rows;
this.tableDataTotal=res.total;
this.tableData.forEach(el => {
el.createTime = changeTime(el.createTime)
// 把动态内容从json字符串改为对象
el.details = JSON.parse(el.details)
// 对象转为键值对数组
let arr = Object.entries(el.details)
// 新建一个属性数组
el.Array = []
for(let [i,j] of arr){
el.Array.push({key:i,value:j})
}
let types = ['新增开庭公告','新增法院公告','新增裁判文书','新增经营异常','新增失信被执行人','新增股权冻结']
if(types.indexOf(el.dimensionName)>-1){
el.hasdetail = true
}else{
el.hasdetail = false
}
})
})
},
getDetail(name,id) {
companyDetail({dimensionName:name,sourceId:id}).then(res => {
console.log(res)
this.dialogVisible=true;
this.detail=res.data;
})
},
changeGsfx(val) {
if(val == '不限')
this.jyfx = ['不限']
else if(this.jyfx.indexOf('不限')>-1){
this.jyfx.splice(this.jyfx.indexOf('不限'),1)
}
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
checkFxjbBtn(val) {
this.fxjbType = [];
this.checkFx = true;
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
checkFxjb1Btn(val){
if (val.length > 0) {
this.checkFx = false;
} else if (val.length == 0) {
this.checkFx = true;
this.fxjbType = [];
}
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
handleDetail(item){
switch (item.dimensionName) {
case '新增开庭公告':
this.title='开庭公告详情'
this.getDetail(item.dimensionName,item.sourceId)
break;
case '新增法院公告':
this.title='法院公告详情'
this.getDetail(item.dimensionName,item.sourceId)
break;
case '新增裁判文书':
this.title='裁判文书详情'
this.getDetail(item.dimensionName,item.sourceId)
break;
case '新增经营异常':
this.title='经营异常详情'
this.getDetail(item.dimensionName,item.sourceId)
break;
case '新增失信被执行人':
this.title='失信被执行人详情'
this.getDetail(item.dimensionName,item.sourceId)
break;
case '新增股权冻结':
this.title='股权冻结详情'
this.getDetail(item.dimensionName,item.sourceId)
break;
default:
this.$message.success("暂无详情");
break;
}
},
handleKeyword(){
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
radioBtn(val){
let endTime = new Date()
this.queryParams.pageNum=1
this.queryParams.pageSize=10
switch (val) {
case 1:
this.queryParams.condition.beginTime=this.formatDate(endTime)
this.queryParams.condition.endTime=this.formatDate(endTime)
this.querySubmit()
break;
case 2:
this.queryParams.condition.beginTime = this.formatDate(new Date(endTime.getTime() - 3600 * 1000 * 24 * 3))
this.queryParams.condition.endTime = this.formatDate(endTime)
this.querySubmit()
break;
case 3:
this.queryParams.condition.beginTime = this.formatDate(new Date(endTime.getTime() - 3600 * 1000 * 24 * 7))
this.queryParams.condition.endTime = this.formatDate(endTime)
this.querySubmit()
break;
case 4:
this.queryParams.condition.beginTime = this.formatDate(new Date(endTime.getTime() - 3600 * 1000 * 24 * 15))
this.queryParams.condition.endTime = this.formatDate(endTime)
this.querySubmit()
break;
case 5:
this.queryParams.condition.beginTime = this.formatDate(new Date(endTime.getTime() - 3600 * 1000 * 24 * 30))
this.queryParams.condition.endTime = this.formatDate(endTime)
this.querySubmit()
break;
case 6:
this.date=[]
break;
default:
this.queryParams.condition.beginTime=''
this.queryParams.condition.endTime=''
this.querySubmit()
break;
}
},
// 重置页数
handleSizeChange(val) {
this.queryParams.pageNum = 1
this.queryParams.pageSize = val
this.querySubmit()
},
// 跳转指定页数
handleCurrentChange(val) {
this.queryParams.pageNum = val
this.querySubmit()
window.scrollTo(0, 0);
},
// 时间选择改变后的回调
changePicker(value) {
if(value && value.length) {
this.queryParams.condition.beginTime = value[0]
this.queryParams.condition.endTime = value[1]
}
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
// 时间格式化
formatDate(timeStr) {
let date = new Date(Number(timeStr));
let year = date.getFullYear();
let month = String(date.getMonth() + 1).padStart(2, 0);
let day = String(date.getDate()).padStart(2, 0);
return `${year}-${month}-${day}`;
},
async getPlaceholder() {
try {
await this.$nextTick();
const doms = document.querySelectorAll("[class*='select-adaptive-']");
if (doms?.length) {
doms.forEach(dom => {
const realStyles = window.getComputedStyle(dom);
const ipt = dom.querySelector("input");
const text = ipt.getAttribute("placeholder");
const textContainer = document.createElement("span");
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
const hasPadding = (parseInt(realStyles.paddingLeft) || parseInt(realStyles.paddingRight)) ? true : false;
hasPadding ? textContainer.style.setProperty("padding", realStyles.paddingRight) : null;
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = text;
document.body.append(textContainer);
// 加上按钮宽度 以及按钮左外边距
let containerWidth = textContainer.offsetWidth + 30;
textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`);
});
}
} catch (error) {
}
},
iptAdaptive(uid, multiple = false, name) {
multiple ? this.multipleAdaptiveHandle(uid, name) : this.iptAdaptiveHandle(uid, name);
},
getUid() {
return v4();
},
// 多选处理
async multipleAdaptiveHandle(uid, name) {
try {
await this.$nextTick();
const dom = document.querySelector(`.select-adaptive-${uid}`);
const iptChild = dom.querySelector(".el-input__inner");
if (dom) {
const textContainer = document.createElement("span");
const textName = `text-${uid}`;
textContainer.classList.add(textName);
const selectChildren = dom.querySelectorAll(".el-tag");
if (selectChildren.length) {
let width = 0;
selectChildren.forEach(item => {
const text = item.textContent;
const itemInfo = window.getComputedStyle(item);
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
textContainer.style.setProperty("padding", itemInfo.padding);
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = text;
document.body.append(textContainer);
width += textContainer.offsetWidth + parseInt(itemInfo.marginLeft) + parseInt(itemInfo.marginRight);
textContainer.remove();
});
dom.style.setProperty("width", `${width + 50}px`);
// this.handleSearch(name);
return;
}
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
textContainer.style.setProperty("padding", "0px 8px");
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = iptChild.getAttribute("placeholder");
document.body.append(textContainer);
let containerWidth = textContainer.offsetWidth + 12 + 8;
// let containerWidth = 130;
textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`);
// this.handleSearch(name);
}
} catch (error) {
console.log(error);
}
},
// 单选处理
async iptAdaptiveHandle(uid, name) {
try {
await this.$nextTick();
const dom = document.querySelector(`.select-adaptive-${uid}`);
const realStyles = window.getComputedStyle(dom);
if (dom) {
const iptChild = dom.querySelector(".el-input__inner");
const textContainer = document.createElement("span");
const textName = `text-${uid}`;
textContainer.classList.add(textName);
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
const hasPadding = (parseInt(realStyles.paddingLeft) || parseInt(realStyles.paddingRight)) ? true : false;
hasPadding ? textContainer.style.setProperty("padding", "0px 8px") : null;
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = iptChild.value ? iptChild.value : iptChild.getAttribute("placeholder");
document.body.append(textContainer);
let containerWidth = textContainer.offsetWidth + 50;
textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`);
}
// this.handleSearch(name);
} catch (error) {
}
},
}
}
</script>
<style lang="scss">
.el-select-dropdown__item.selected,
.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{
color: #3181fa;
font-size: 0;
}
</style>
<style lang="scss" scoped>
.MonitoringDynamics{
.search{
background: #FFFFFF;
padding: 25px 16px;
border-radius: 4px;
.search-item{
display: -webkit-box;
align-items: flex-start;
line-height: 20px;
margin-top: 8px;
}
.label{
margin-right: 12px;
font-size: 14px;
color: rgba(35,35,35,0.8);
}
.color_text {
color: #0081ff;
}
::v-deep .name{
width: 405px;
height: 32px;
margin-left: 12px;
border-radius: 2px;
border: 1px solid #DCDFE6;
.el-input__inner{
border: 0;
height: 32px;
}
.el-input-group__append{
border: 0;
background: #F5F5F5;
width: 60px;
color: #0081FF;
text-align: center;
}
.el-input-group__append:hover{
background:#F5F5F5;
}
}
.main-right {
width: calc(100% - 112px);
.select-popper {
/*text-align: center;*/
display: inline-block;
position: relative;
color: #333333;
font-size: 14px;
cursor: pointer;
margin: 0px 12px;
margin-bottom: 16px;
}
.select-popper .select-popper-img {
width: 24px;
height: 12px;
position: absolute;
top: -10px;
right: 2px;
}
.select-multiple {
position: absolute;
left: 0;
top: -6px;
opacity: 0;
line-height: 22px;
::v-deep .el-input {
width: 100%;
line-height: 22px;
.el-input__inner {
color: rgba(35,35,35,0.8);
width: 100%;
height: 22px !important;
}
}
.el-tag__close.el-icon-close {
display: none;
}
}
}
.checkbox{
display: flex;
align-items: flex-start;
padding-left: 12px;
position: relative;
.checkbox-content-qx{
margin-right: 24px;
}
.keyword_checkbox{
::v-deep .el-checkbox{
margin-right: 24px;
}
}
::v-deep .el-radio{
color: rgba(35,35,35,0.8);
}
::v-deep .el-checkbox__label{
color: rgba(35,35,35,0.8);
}
::v-deep .el-checkbox{
margin-right: 10px;
}
::v-deep .el-date-editor{
position: absolute;
left: 602px;
top: -7px
}
::v-deep .el-select{
.el-input{
.el-input__inner{
height: 32px;
line-height: 32px;
border-radius: 4px;
border: 0;
padding-left: 0px;
padding-right: 8px;
&::placeholder{
color: rgba(35,35,35,0.8) !important;
}
}
.el-input__suffix{
top:2px;
}
}
}
}
}
.content{
background: #FFFFFF;
border-radius: 4px;
margin-top: 16px;
padding: 16px;
.total{
color: rgba(35,35,35,0.8);
font-size: 12px;
padding-bottom: 16px;
display: flex;
align-items: center;
&:before {
content: "";
display: inline-block;
width: 2px;
height: 2px;
background: rgba(35,35,35,.4);
margin-right: 4px;
}
}
.empty{
margin: 0 auto;
height: 550px;
text-align: center;
.img{
width: 108px;
height: 108px;
margin-bottom: 24px;
margin-top: 150px;
}
.p1{
color: #333333;
font-size: 16px;
}
.p2{
color: #999999;
font-size: 14px;
margin-top: 8px;
}
}
}
::v-deep .dialog-claim{
.el-dialog__header{
display: block;
padding:16px 20px;
border-bottom: 1px solid #EEEEEE;
font-size: 16px;
font-weight: 700;
color: #232323;
}
.el-dialog__body {
padding: 24px 20px;
}
}
.title_wrap{
padding: 20px;
background-color: #FFFFFF;
border-bottom: 1px solid #e0e0e0;
.enterprise_title{
border-left: 2px solid #445781;
padding-left: 8px;
font-size: 16px;
height: 16px;
line-height: 16px;
font-weight: 700;
color: #232323;
}
}
}
</style>
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
import { reportPage } from '@/api/monitoring/monitoring' import { reportPage } from '@/api/monitoring/monitoring'
import skeleton from '../../component/skeleton' import skeleton from '../../component/skeleton'
export default { export default {
name: 'MonitoringReport', name: 'daily',
components: { components: {
skeleton skeleton
}, },
...@@ -93,6 +93,7 @@ ...@@ -93,6 +93,7 @@
}, },
created() { created() {
this.querySubmit() this.querySubmit()
console.log("111111")
}, },
methods: { methods: {
async querySubmit() { async querySubmit() {
...@@ -126,6 +127,20 @@ ...@@ -126,6 +127,20 @@
<style lang="scss" scoped> <style lang="scss" scoped>
.MonitoringReport{ .MonitoringReport{
.title_wrap{
padding: 20px;
background-color: #FFFFFF;
border-bottom: 1px solid #e0e0e0;
}
.enterprise_title{
border-left: 2px solid #445781;
padding-left: 8px;
font-size: 16px;
height: 16px;
line-height: 16px;
font-weight: 700;
color: #232323;
}
/*background: #ffffff;*/ /*background: #ffffff;*/
.header{ .header{
justify-content: space-between; justify-content: space-between;
......
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
import { reportPage } from '@/api/monitoring/monitoring' import { reportPage } from '@/api/monitoring/monitoring'
import skeleton from '../../component/skeleton' import skeleton from '../../component/skeleton'
export default { export default {
name: 'MonitoringReport', name: 'monthlyReport',
components: { components: {
skeleton skeleton
}, },
...@@ -127,6 +127,22 @@ ...@@ -127,6 +127,22 @@
<style lang="scss" scoped> <style lang="scss" scoped>
.MonitoringReport{ .MonitoringReport{
/*background: #ffffff;*/ /*background: #ffffff;*/
.title_wrap{
padding: 20px;
background-color: #FFFFFF;
border-bottom: 1px solid #e0e0e0;
}
.enterprise_title{
border-left: 2px solid #445781;
padding-left: 8px;
font-size: 16px;
height: 16px;
line-height: 16px;
font-weight: 700;
color: #232323;
}
.header{ .header{
justify-content: space-between; justify-content: space-between;
height: 48px; height: 48px;
......
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
import { reportPage } from '@/api/monitoring/monitoring' import { reportPage } from '@/api/monitoring/monitoring'
import skeleton from '../../component/skeleton' import skeleton from '../../component/skeleton'
export default { export default {
name: 'MonitoringReport', name: 'weekly',
components: { components: {
skeleton skeleton
}, },
...@@ -127,6 +127,22 @@ ...@@ -127,6 +127,22 @@
<style lang="scss" scoped> <style lang="scss" scoped>
.MonitoringReport{ .MonitoringReport{
/*background: #ffffff;*/ /*background: #ffffff;*/
.title_wrap{
padding: 20px;
background-color: #FFFFFF;
border-bottom: 1px solid #e0e0e0;
}
.enterprise_title{
border-left: 2px solid #445781;
padding-left: 8px;
font-size: 16px;
height: 16px;
line-height: 16px;
font-weight: 700;
color: #232323;
}
.header{ .header{
justify-content: space-between; justify-content: space-between;
height: 48px; height: 48px;
......
...@@ -64,6 +64,17 @@ ...@@ -64,6 +64,17 @@
</div> </div>
</div> </div>
</div> </div>
<div class="search-item">
<div class="label">经营风险</div>
<div class="main-right">
<div class="select-popper">
<el-checkbox-group v-model="jyfx">
<el-checkbox label="不限" @change="changeJyfx('不限')">不限</el-checkbox>
<el-checkbox v-for="(i,index) in selectList2" :key="index" :label="i.dimensionName" @change="changeJyfx(i)">{{i.dimensionName}}</el-checkbox>
</el-checkbox-group>
</div>
</div>
</div>
<div class="search-item" style="line-height: 16px;"> <div class="search-item" style="line-height: 16px;">
<div class="label">时间筛选</div> <div class="label">时间筛选</div>
<div class="checkbox"> <div class="checkbox">
...@@ -169,6 +180,13 @@ ...@@ -169,6 +180,13 @@
</template> </template>
</info-table> </info-table>
</template> </template>
<template v-if="title=='行政处罚详情'">
<info-table class="info-tab" :list="defaultList6" :obj="detail" :labelWidth="labelWidth">
<template v-slot:dataSource="row">
<span v-for="i in row.data.dataSource">{{i.web}}</span>
</template>
</info-table>
</template>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
...@@ -231,8 +249,11 @@ ...@@ -231,8 +249,11 @@
fxlxType:[], fxlxType:[],
selectList:[], selectList:[],
selectList1:[], selectList1:[],
selectList2:[],
sffx:[], sffx:[],
gsfx:[], gsfx:[],
jyfx:[],
dimension:[],
queryParams:{ queryParams:{
pageNum:1, pageNum:1,
pageSize:10, pageSize:10,
...@@ -314,6 +335,19 @@ ...@@ -314,6 +335,19 @@
{ name: '判决日期', prop: 'date'}, { name: '判决日期', prop: 'date'},
{ name: '判决结果', prop: 'judgeresult',style: true}, { name: '判决结果', prop: 'judgeresult',style: true},
], ],
//行政处罚详情
defaultList6:[
{ name: '企业名称', prop: 'companyName'},
{ name: '相关人员', prop: 'personName' },
{ name: '决定文书号', prop: 'fileNum'},
{ name: '处罚类型', prop: 'punishType'},
{ name: '处罚开始日期', prop: 'punishBegin'},
{ name: '处罚结束日期', prop: 'punishEnd'},
{ name: '处罚机关', prop: 'office',style: true},
{ name: '处罚内容(原因)', prop: 'punishReason',style: true},
{ name: '处罚结果', prop: 'punishResult',style: true},
{ name: '来源', prop: 'dataSource',style: true,slot: true},
],
title:'开庭公告详情', title:'开庭公告详情',
detail:{} detail:{}
} }
...@@ -321,7 +355,6 @@ ...@@ -321,7 +355,6 @@
created() { created() {
this.getPlaceholder() this.getPlaceholder()
this.querySubmit() this.querySubmit()
console.log(this.$route.params)
rulesSelect().then(res => { rulesSelect().then(res => {
this.selectList=res.data; this.selectList=res.data;
for(let i in res.data){ for(let i in res.data){
...@@ -331,6 +364,9 @@ ...@@ -331,6 +364,9 @@
if(res.data[i].dimensionName === '工商风险'){ if(res.data[i].dimensionName === '工商风险'){
this.selectList1=res.data[i].children this.selectList1=res.data[i].children
} }
if(res.data[i].dimensionName === '经营风险'){
this.selectList2=res.data[i].children
}
} }
}) })
}, },
...@@ -346,6 +382,7 @@ ...@@ -346,6 +382,7 @@
// } else { // } else {
// this.sffx.splice(this.sffx.indexOf(val.dimensionName), 1) // this.sffx.splice(this.sffx.indexOf(val.dimensionName), 1)
// } // }
this.queryParams.pageNum=1 this.queryParams.pageNum=1
this.queryParams.pageSize=10 this.queryParams.pageSize=10
this.querySubmit() this.querySubmit()
...@@ -365,6 +402,16 @@ ...@@ -365,6 +402,16 @@
this.queryParams.pageSize=10 this.queryParams.pageSize=10
this.querySubmit() this.querySubmit()
}, },
changeJyfx(val) {
if(val == '不限')
this.jyfx = ['不限']
else if(this.jyfx.indexOf('不限')>-1){
this.jyfx.splice(this.jyfx.indexOf('不限'),1)
}
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
async querySubmit() { async querySubmit() {
let endTime = new Date() let endTime = new Date()
let params={ let params={
...@@ -392,22 +439,37 @@ ...@@ -392,22 +439,37 @@
if(gsfx.indexOf('不限')>-1){ if(gsfx.indexOf('不限')>-1){
gsfx = [] gsfx = []
} }
if(sffx.length > 0 && gsfx.length > 0){ let jyfx = this.jyfx
params.condition.riskType='司法风险,工商风险' if(jyfx.indexOf('不限')>-1){
params.condition.dimension=this.sffx.concat(this.gsfx) jyfx = []
} }
if(sffx.length > 0 && gsfx.length === 0){
params.condition.riskType='司法风险' let arr=[
params.condition.dimension=this.sffx ...sffx,
} ...gsfx,
if(sffx.length === 0 && gsfx.length > 0){ ...jyfx,
params.condition.riskType='工商风险' ]
params.condition.dimension=this.gsfx
} if(arr.length > 0){
if(sffx.length === 0 && gsfx.length === 0){ params.condition.dimension=arr
delete params.condition.riskType
delete params.condition.dimension
} }
// if(sffx.length > 0 && gsfx.length > 0 && jyfx.length > 0){
// // params.condition.riskType='司法风险,工商风险'
// params.condition.dimension=this.sffx.concat(this.gsfx)
// }
// if(sffx.length > 0 && gsfx.length === 0){
// // params.condition.riskType='司法风险'
// params.condition.dimension=this.sffx
// }
// if(sffx.length === 0 && gsfx.length > 0){
// // params.condition.riskType='工商风险'
// params.condition.dimension=this.gsfx
// }
// if(sffx.length === 0 && gsfx.length === 0){
// // delete params.condition.riskType
// delete params.condition.dimension
// }
dynamicPage(params).then(res => { dynamicPage(params).then(res => {
this.isSkeleton = false; this.isSkeleton = false;
this.object=res.object; this.object=res.object;
...@@ -477,6 +539,10 @@ ...@@ -477,6 +539,10 @@
this.title='股权冻结详情' this.title='股权冻结详情'
this.getDetail(item.dimensionName,item.sourceId) this.getDetail(item.dimensionName,item.sourceId)
break; break;
case '新增行政处罚':
this.title='行政处罚详情'
this.getDetail(item.dimensionName,item.sourceId)
break;
default: default:
this.$message.success("暂无详情"); this.$message.success("暂无详情");
break; break;
...@@ -671,6 +737,7 @@ ...@@ -671,6 +737,7 @@
border-radius: 4px; border-radius: 4px;
.enterprise{ .enterprise{
border-bottom: 1px solid #EEEEEE; border-bottom: 1px solid #EEEEEE;
margin-bottom: 18px;
.name{ .name{
img{ img{
width: 28px; width: 28px;
...@@ -711,7 +778,7 @@ ...@@ -711,7 +778,7 @@
.main-right { .main-right {
width: calc(100% - 112px); width: calc(100% - 112px);
.select-popper { .select-popper {
text-align: center; /*text-align: center;*/
display: inline-block; display: inline-block;
position: relative; position: relative;
color: #333333; color: #333333;
......
...@@ -33,49 +33,52 @@ ...@@ -33,49 +33,52 @@
highlight-current-row highlight-current-row
> >
<el-table-column label="序号" width="60" align="left" prop="index" fixed="left"></el-table-column> <el-table-column label="序号" width="60" align="left" prop="index" fixed="left"></el-table-column>
<el-table-column label="编码" width="130" prop="code"></el-table-column> <el-table-column label="编码" width="130" prop="code" :formatter="formatStatus"></el-table-column>
<el-table-column label="名称" width="230" prop="expenseName"></el-table-column> <el-table-column label="名称" width="230" prop="expenseName" :formatter="formatStatus"></el-table-column>
<el-table-column label="清单" width="110" prop="expenseCategoryTag"></el-table-column> <el-table-column label="清单" width="110" prop="expenseCategoryTag" :formatter="formatStatus"></el-table-column>
<el-table-column label="项目特征" width="340" prop="projectFeature"></el-table-column> <el-table-column label="项目特征" width="340" prop="projectFeature" :formatter="formatStatus"></el-table-column>
<el-table-column label="单位" width="110" prop="unit"></el-table-column> <el-table-column label="单位" width="110" prop="unit" :formatter="formatStatus"></el-table-column>
<el-table-column label="计划成本" align="center"> <el-table-column label="计划成本" align="center">
<el-table-column prop="engineeringVolumeExpression" label="工程表达式" width="120"></el-table-column> <el-table-column prop="engineeringVolumeExpression" label="工程表达式" width="120" :formatter="formatStatus"></el-table-column>
<el-table-column prop="engineeringVolume" label="工程量" width="120"></el-table-column> <el-table-column prop="engineeringVolume" label="工程量" width="120" :formatter="formatStatus"></el-table-column>
<el-table-column prop="cbSubject" label="成本科目" width="130"></el-table-column> <el-table-column prop="cbSubject" label="成本科目" width="130" :formatter="formatStatus"></el-table-column>
<el-table-column prop="tenderControlUnitPrice" label="招标控制单价" width="120"></el-table-column> <el-table-column prop="tenderControlUnitPrice" label="招标控制单价" width="120" :formatter="formatStatus"></el-table-column>
<el-table-column prop="tenderControlSumPrice" label="招标控制合价" width="120"></el-table-column> <el-table-column prop="tenderControlSumPrice" label="招标控制合价" width="120" :formatter="formatStatus"></el-table-column>
<el-table-column prop="excludeTaxCbUnitPrice" label="不含税成本单价" width="122"> <el-table-column prop="excludeTaxCbUnitPrice" label="不含税成本单价" width="122" :formatter="formatStatus">
</el-table-column> </el-table-column>
<el-table-column prop="excludeTaxCbSumPrice" label="不含税成本合计" width="122"> <el-table-column prop="excludeTaxCbSumPrice" label="不含税成本合计" width="122" :formatter="formatStatus">
<template slot-scope="scope"> <template slot-scope="scope">
{{$decimalFormat(scope.row.excludeTaxCbSumPrice)}} {{$decimalFormat(scope.row.excludeTaxCbSumPrice)}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="cbTaxSum" label="成本税金合计" width="120"> <el-table-column prop="cbTaxSum" label="成本税金合计" width="120" :formatter="formatStatus">
<template slot-scope="scope"> <template slot-scope="scope">
{{$decimalFormat(scope.row.cbTaxSum)}} {{$decimalFormat(scope.row.cbTaxSum)}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="includeTaxCbUnitPrice" label="含税成本单价" width="120"> <el-table-column prop="includeTaxCbUnitPrice" label="含税成本单价" width="120" :formatter="formatStatus">
<template slot-scope="scope"> <template slot-scope="scope">
{{$decimalFormat(scope.row.includeTaxCbUnitPrice)}} {{$decimalFormat(scope.row.includeTaxCbUnitPrice)}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="includeTaxCbSumPrice" label="含税成本合价" width="120"> <el-table-column prop="includeTaxCbSumPrice" label="含税成本合价" width="120" :formatter="formatStatus">
<template slot-scope="scope"> <template slot-scope="scope">
{{$decimalFormat(scope.row.includeTaxCbSumPrice)}} {{$decimalFormat(scope.row.includeTaxCbSumPrice)}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="sumPriceDeviation" label="合价偏差" width="120"> <el-table-column prop="sumPriceDeviation" label="合价偏差" width="120" :formatter="formatStatus">
<template slot-scope="scope"> <template slot-scope="scope">
{{$decimalFormat(scope.row.sumPriceDeviation)}} {{$decimalFormat(scope.row.sumPriceDeviation)}}
</template> </template>
</el-table-column> </el-table-column>
</el-table-column> </el-table-column>
<el-table-column label="盈亏率" width="100" prop="profitLossRatio"></el-table-column> <el-table-column label="盈亏率" width="100" prop="profitLossRatio" :formatter="formatStatus"></el-table-column>
<el-table-column label="标准费用项" width="100" prop="standardCbItem"></el-table-column> <el-table-column label="标准费用项" width="100" prop="standardCbItem" :formatter="formatStatus"></el-table-column>
<el-table-column label="备注" width="120" prop="remark"></el-table-column> <el-table-column label="规格型号" width="100" prop="specificationModel" :formatter="formatStatus"></el-table-column>
<el-table-column label="计算规则" width="100" prop="calculateRule" :formatter="formatStatus"></el-table-column>
<el-table-column label="甲供材料" width="150" prop="supplierMaterial" :formatter="formatStatus"></el-table-column>
<el-table-column label="备注" width="120" prop="remark" :formatter="formatStatus"></el-table-column>
<el-table-column label="操作" min-width="120" fixed="right"> <el-table-column label="操作" min-width="120" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.expenseCategoryTag ==='清'" style="color:#0081FF;font-size: 14px;cursor: pointer;" @click="handleDialogVisible(scope.row)">增加费用项</span> <span v-if="scope.row.expenseCategoryTag ==='清'" style="color:#0081FF;font-size: 14px;cursor: pointer;" @click="handleDialogVisible(scope.row)">增加费用项</span>
...@@ -110,7 +113,16 @@ ...@@ -110,7 +113,16 @@
<el-form-item label="含税成本单价" prop="includeTaxCbUnitPrice"> <el-form-item label="含税成本单价" prop="includeTaxCbUnitPrice">
<el-input v-model="ruleForm.includeTaxCbUnitPrice" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入含税成本单价"></el-input> <el-input v-model="ruleForm.includeTaxCbUnitPrice" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入含税成本单价"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="特征描述"> <el-form-item label="规格型号" prop="specificationModel">
<el-input v-model="ruleForm.specificationModel" placeholder="请输入规格型号"></el-input>
</el-form-item>
<el-form-item label="计算规则">
<el-input v-model="ruleForm.calculateRule" placeholder="请输入计算规则"></el-input>
</el-form-item>
<el-form-item label="甲供材料">
<el-input v-model="ruleForm.supplierMaterial" placeholder="请输入甲供材料"></el-input>
</el-form-item>
<el-form-item label="特征描述" prop="projectFeature">
<el-input type="textarea" v-model="ruleForm.projectFeature" placeholder="请输入特征描述"></el-input> <el-input type="textarea" v-model="ruleForm.projectFeature" placeholder="请输入特征描述"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -172,10 +184,11 @@ export default { ...@@ -172,10 +184,11 @@ export default {
expenseName:{ required: true, message: '项目名称不能为空', trigger: 'blur' }, // 限制必填 expenseName:{ required: true, message: '项目名称不能为空', trigger: 'blur' }, // 限制必填
// jsgz:{ required: true, message: '计算规则不能为空', trigger: 'blur' }, // 限制必填 // jsgz:{ required: true, message: '计算规则不能为空', trigger: 'blur' }, // 限制必填
unit:{ required: true, message: '单位不能为空', trigger: 'blur' }, // 限制必填 unit:{ required: true, message: '单位不能为空', trigger: 'blur' }, // 限制必填
tenderControlUnitPrice:{ required: true, message: '招标控制价单价', trigger: 'blur' }, // 限制必填 tenderControlUnitPrice:{ required: true, message: '招标控制价单价不能为空', trigger: 'blur' }, // 限制必填
excludeTaxCbUnitPrice:{ required: true, message: '不含税成本单价', trigger: 'blur' }, // 限制必填 excludeTaxCbUnitPrice:{ required: true, message: '不含税成本单价不能为空', trigger: 'blur' }, // 限制必填
includeTaxCbUnitPrice:{ required: true, message: '含税成本单价', trigger: 'blur' }, // 限制必填 includeTaxCbUnitPrice:{ required: true, message: '含税成本单价不能为空', trigger: 'blur' }, // 限制必填
// projectFeature:{ required: true, message: '特征描述', trigger: 'blur' }, // 限制必填 specificationModel:{ required: true, message: '规格型号不能为空', trigger: 'blur' }, // 限制必填
calculateRule:{ required: true, message: '计算规则不能为空', trigger: 'blur' }, // 限制必填
}, },
dialogVisible:false, dialogVisible:false,
defaultActive: "", defaultActive: "",
...@@ -276,7 +289,6 @@ export default { ...@@ -276,7 +289,6 @@ export default {
this.detailsId=row.id; this.detailsId=row.id;
}, },
handleAdd(){ handleAdd(){
this.ruleForm.qingId = this.detailsId this.ruleForm.qingId = this.detailsId
cbDirectExpenseAdd(JSON.stringify(this.ruleForm)).then(res=>{ cbDirectExpenseAdd(JSON.stringify(this.ruleForm)).then(res=>{
if(res.code == 200){ if(res.code == 200){
...@@ -323,8 +335,10 @@ export default { ...@@ -323,8 +335,10 @@ export default {
async maxHeightInit() { async maxHeightInit() {
const divHeight = this.$refs.rightTable.clientHeight-32; const divHeight = this.$refs.rightTable.clientHeight-32;
this.maxHeight=divHeight; this.maxHeight=divHeight;
console.log('DIV的高度是:', divHeight); },
} formatStatus: function(row, column, cellValue) {
return cellValue? cellValue : '-'
},
}, },
} }
</script> </script>
......
...@@ -44,8 +44,8 @@ ...@@ -44,8 +44,8 @@
<custom-table :tableData="dataForm.tableDataList" :formColum="formColum" :max-height="true" :tableDataTotal="total" :paging="false" v-if="total > 0 && !tableLoading" <custom-table :tableData="dataForm.tableDataList" :formColum="formColum" :max-height="true" :tableDataTotal="total" :paging="false" v-if="total > 0 && !tableLoading"
:header-cell-class-name="headerCellClassName" :cell-class-name="cellClassName"> :header-cell-class-name="headerCellClassName" :cell-class-name="cellClassName">
<template slot="action-field-bar" slot-scope="scope"> <template slot="action-field-bar" slot-scope="scope">
<div class="project-action-field-bar"> <div class="project-action-field-bar" v-if="rowCanEditInput(scope.rowIndex,hasTarget)">
<span class="push-project-use" @click="pushProjectUse(scope.row)" :class="{'is-emty-quantities' : rowHasLastPush(scope.rowIndex)}">修改工程量</span> <span class="push-project-use" @click="!rowHasLastPush(scope.rowIndex) ? pushProjectUse(scope.row) :''" :class="{'is-emty-quantities' : rowHasLastPush(scope.rowIndex)}">修改本月差值</span>
</div> </div>
<!--<div class="project-action-field-bar" v-if="rowCanEditInput(scope.rowIndex,hasTarget)">--> <!--<div class="project-action-field-bar" v-if="rowCanEditInput(scope.rowIndex,hasTarget)">-->
<!--<span class="push-project-use" :class="{'is-emty-quantities' : rowHasLastPush(scope.rowIndex)}"--> <!--<span class="push-project-use" :class="{'is-emty-quantities' : rowHasLastPush(scope.rowIndex)}"-->
...@@ -273,11 +273,11 @@ export default { ...@@ -273,11 +273,11 @@ export default {
total: 0, total: 0,
// 列表表头 // 列表表头
formColum: [ formColum: [
{ label: '序号', prop: "staticSerialNumber", type: "index", lock: true, width: "53", fixed: false, uid: v4() }, { label: '序号', prop: "staticSerialNumber", type: "index", lock: true, width: "53", fixed: true, uid: v4() },
{ label: '成本科目', prop: "cbSubjectName", width: "137", uid: v4() }, { label: '成本科目', prop: "cbSubjectName", width: "137", uid: v4(), fixed: true },
{ label: '名称', prop: "cbName", width: "232", uid: v4(), fixed: true },
{ label: '公司编码', prop: "companyNo", width: "137", uid: v4() }, { label: '公司编码', prop: "companyNo", width: "137", uid: v4() },
{ label: '集团编码', prop: "orgNo", width: "137", uid: v4() }, { label: '集团编码', prop: "orgNo", width: "137", uid: v4() },
{ label: '名称', prop: "cbName", width: "232", uid: v4() },
{ label: '工作内容', prop: "jobContent", width: "341", uid: v4() }, { label: '工作内容', prop: "jobContent", width: "341", uid: v4() },
{ label: '计算规则', prop: "calculationRule", width: "137", uid: v4() }, { label: '计算规则', prop: "calculationRule", width: "137", uid: v4() },
{ label: '单位', prop: "unit", width: "57", uid: v4() }, { label: '单位', prop: "unit", width: "57", uid: v4() },
...@@ -303,18 +303,19 @@ export default { ...@@ -303,18 +303,19 @@ export default {
{ label: '填写时间', prop: "createTime", minWidth: "160", uid: v4(), slot: true }, { label: '填写时间', prop: "createTime", minWidth: "160", uid: v4(), slot: true },
] ]
}, },
{ label: '修改后工程量', prop: "pushQuantities", width: "110", uid: v4(), slot: true }, { label: '本月差值', prop: "pushQuantities", width: "110", uid: v4(), slot: true },
{ label: '累计差值', prop: "cumulativeDifference", width: "110", uid: v4(), slot: true },
{ label: '备注', prop: "remark", width: "115", uid: v4(), slot: true }, { label: '备注', prop: "remark", width: "115", uid: v4(), slot: true },
{ label: '操作', prop: "action-field-bar", width: "99", uid: v4(), fixed: "right" }, { label: '操作', prop: "action-field-bar", width: "120", uid: v4(), fixed: "right" },
], ],
// 实体工程材料表头 // 实体工程材料表头
entityMaterialsFormColum: [ entityMaterialsFormColum: [
{ label: '多选', prop: "staticSerialNumber", type: "selection", lock: true, width: "53", fixed: "left", uid: v4() }, { 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: "staticIndexNumber", type: "index", lock: true, width: "53", fixed: "left", uid: v4() },
{ label: '成本科目', prop: "cbSubjectName", width: "137", uid: v4() }, { label: '成本科目', prop: "cbSubjectName", width: "137", uid: v4(), fixed: "left" },
{ label: '名称', prop: "cbName", width: "232", uid: v4(), fixed: "left" },
{ label: '公司编码', prop: "companyNo", width: "137", uid: v4() }, { label: '公司编码', prop: "companyNo", width: "137", uid: v4() },
{ label: '集团编码', prop: "orgNo", width: "137", uid: v4() }, { label: '集团编码', prop: "orgNo", width: "137", uid: v4() },
{ label: '名称', prop: "cbName", width: "232", uid: v4() },
{ label: '工作内容', prop: "jobContent", width: "341", uid: v4() }, { label: '工作内容', prop: "jobContent", width: "341", uid: v4() },
{ label: '计算规则', prop: "calculationRule", width: "137", uid: v4() }, { label: '计算规则', prop: "calculationRule", width: "137", uid: v4() },
{ label: '单位', prop: "unit", width: "57", uid: v4() }, { label: '单位', prop: "unit", width: "57", uid: v4() },
...@@ -340,7 +341,7 @@ export default { ...@@ -340,7 +341,7 @@ export default {
{ label: '填写时间', prop: "createTime", 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" }, { label: '操作', prop: "action-field-bar", width: "140", uid: v4(), fixed: "right" },
], ],
// 已记录月份集合 // 已记录月份集合
monthList: [], monthList: [],
...@@ -372,9 +373,9 @@ export default { ...@@ -372,9 +373,9 @@ export default {
lastScrollTop: 0, lastScrollTop: 0,
// 推送工程量弹窗 // 推送工程量弹窗
pushProjectUseDialog: false, pushProjectUseDialog: false,
//修改工程量弹窗 //修改本月差值弹窗
editDialog: false, editDialog: false,
// 修改工程量数据缓存 // 修改本月差值数据缓存
pushProjectUseTemp: { pushProjectUseTemp: {
id: "", id: "",
pushQuantities: "", pushQuantities: "",
...@@ -786,7 +787,6 @@ export default { ...@@ -786,7 +787,6 @@ export default {
}, },
// 修改工程用量 // 修改工程用量
pushProjectUse(row) { pushProjectUse(row) {
console.log(row)
if (!row.actualId) return; if (!row.actualId) return;
// 打开推送推送弹窗 // 打开推送推送弹窗
const _temp = { const _temp = {
...@@ -824,9 +824,9 @@ export default { ...@@ -824,9 +824,9 @@ export default {
async submitEditData(pushForm) { async submitEditData(pushForm) {
try { try {
const result = await editEngineeringQuantityApi(pushForm); const result = await editEngineeringQuantityApi(pushForm);
console.log(result)
if(result.code === 200){ if(result.code === 200){
this.editDialog=false this.editDialog=false;
this.init(this.comProjectDetailInfo);
} }
} catch (error) { } catch (error) {
......
...@@ -121,9 +121,12 @@ ...@@ -121,9 +121,12 @@
<template v-else>{{scope.row.costEffective || '--'}}</template> <template v-else>{{scope.row.costEffective || '--'}}</template>
</template> </template>
</el-table-column> </el-table-column>
<!--<el-table-column label="本月推送工程量" width="130" prop="submitProjectVolume">--> <el-table-column label="本月差值" width="130" prop="difference">
<!--<template slot-scope="scope">{{scope.row.submitProjectVolume || '&#45;&#45;'}}</template>--> <template slot-scope="scope">{{$decimalFormat(scope.row.difference)}}</template>
<!--</el-table-column>--> </el-table-column>
<el-table-column label="截止本月差值" width="130" prop="sumDifference">
<template slot-scope="scope">{{$decimalFormat(scope.row.sumDifference)}}</template>
</el-table-column>
<el-table-column label="备注" width="130" prop="remarks"> <el-table-column label="备注" width="130" prop="remarks">
<template slot-scope="scope">{{scope.row.remarks || '--'}}</template> <template slot-scope="scope">{{scope.row.remarks || '--'}}</template>
...@@ -217,6 +220,14 @@ ...@@ -217,6 +220,14 @@
} from '@/api/projectCostLedger' } from '@/api/projectCostLedger'
import { cloneDeep } from 'lodash-es' import { cloneDeep } from 'lodash-es'
import DskSkeleton from "@/components/DskSkeleton"; import DskSkeleton from "@/components/DskSkeleton";
// 可编辑字段
const editPropNames = [
"projectVolume",
"monthCostRate",
"costEffective",
];
export default { export default {
name: "MeasureItems", name: "MeasureItems",
props: { props: {
...@@ -276,6 +287,7 @@ ...@@ -276,6 +287,7 @@
id: 0, id: 0,
expenseDate: '', expenseDate: '',
tableData: [], tableData: [],
originTableDataList: [], //源数据列表
isall: true,//是否汇总 isall: true,//是否汇总
dialogVisible: false, dialogVisible: false,
queryParam: {},//推送工程量数据 queryParam: {},//推送工程量数据
...@@ -389,8 +401,10 @@ ...@@ -389,8 +401,10 @@
if(item == thismonth){ if(item == thismonth){
hasmonth = true hasmonth = true
} }
let li = {value:item,label:item.substring(0, 4) + '-' + item.substring(4, 6)} if(item){
arr.push(li) let li = {value:item,label:item.substring(0, 4) + '-' + item.substring(4, 6)}
arr.push(li)
}
}); });
if(!hasmonth){ if(!hasmonth){
let li = {value:thismonth,label:thismonth.substring(0, 4) + '-' + thismonth.substring(4, 6)} let li = {value:thismonth,label:thismonth.substring(0, 4) + '-' + thismonth.substring(4, 6)}
...@@ -431,7 +445,8 @@ ...@@ -431,7 +445,8 @@
// this.tableData = res.data; // this.tableData = res.data;
} }
const res = await getCostMeasureslist(param); const res = await getCostMeasureslist(param);
this.tableData = res.data; this.tableData = cloneDeep(res.data);
this.originTableDataList =cloneDeep(res.data);
this.isinput = false this.isinput = false
// await this.$nextTick() // await this.$nextTick()
this.$nextTick(()=>{ this.$nextTick(()=>{
...@@ -445,6 +460,16 @@ ...@@ -445,6 +460,16 @@
this.tableLoading = false; this.tableLoading = false;
} }
}, },
async getListData(menuPath){
let param = {
projectId: this.projectId,
id: this.id,
month: this.expenseDate
};
const res = await getCostMeasureslist(param);
this.tableData = cloneDeep(res.data);
this.originTableDataList =cloneDeep(res.data);
},
async init(detail = '') { async init(detail = '') {
try { try {
const projectId = detail; const projectId = detail;
...@@ -525,23 +550,62 @@ ...@@ -525,23 +550,62 @@
addcost() { addcost() {
this.cbVisible = true this.cbVisible = true
}, },
addinputs(){ // 差异化比对
let tables = JSON.parse(JSON.stringify(this.tableData)) differentCompare() {
tables.forEach(item=>{ const originData = this.originTableDataList;
item.planMeasureId = item.id /**
item.actualId = item.id * @type {Array<object>}
item.month = this.expenseDate */
item.monthCostRate = item.monthCostRate?parseInt(item.monthCostRate.replace('%','')):null let data = cloneDeep(this.tableData);
}) // 差异数据
saveBatch(JSON.stringify(tables)).then(res=>{ const different = this.getDeepDifferentData(data, originData);
if(res.code == 200){ return cloneDeep(different);
this.$message.success(res.msg) },
this.isinput = false // 深度差异化对比
this.getDatas(this.id) getDeepDifferentData(data = [], originData = [], tempArray = []) {
}else{ const len = data.length;
this.$message.error(res.msg) for (let index = 0; index < len; index++) {
const item = data[index];
// 源数据
const originItem = originData[index];
// 查看可编辑字段是否存在任意一处 数据不同
const hasDifferent = editPropNames.some(prop => {
// 两个皆为无效值 返回false
if (!parseFloat(item[prop]) && !parseFloat(originItem[prop])) return false;
return item[prop] != originItem[prop];
});
console.log(hasDifferent,"hasDifferenthasDifferenthasDifferent")
// 浅层级
if (hasDifferent) {
tempArray.push({
...item,
id: item.actualId,
planMeasureId: item.id,
monthCostRate: item.monthCostRate?parseInt(item.monthCostRate.replace('%','')):null,
month: this.expenseDate
});
}
// 递归深层级
if (item?.children?.length) {
this.getDeepDifferentData(item.children, originItem.children, tempArray);
}
} }
}) return tempArray;
},
addinputs(){
let resultData = this.differentCompare();
// 有差异
if (resultData.length) {
saveBatch(resultData).then(res=>{
if(res.code == 200){
this.$message.success(res.msg)
this.isinput = false
this.getDatas(this.id);
}else{
this.$message.error(res.msg)
}
})
}
}, },
changeDate(){ changeDate(){
let choseDate = this.chooseDate.replace('-','') let choseDate = this.chooseDate.replace('-','')
...@@ -557,6 +621,7 @@ ...@@ -557,6 +621,7 @@
this.expenseDate = choseDate this.expenseDate = choseDate
// arr.unshift(li) // arr.unshift(li)
} }
this.getListData(this.id);
}, },
inputnum(){ inputnum(){
this.cbVisible = false this.cbVisible = false
......
...@@ -134,8 +134,8 @@ ...@@ -134,8 +134,8 @@
<el-table-column label="操作" min-width="260" :resizable="false" fixed="right"> <el-table-column label="操作" min-width="260" :resizable="false" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<span class="wordprimary tabs" @click="editpro(scope.row)">修改项目信息</span> <span class="wordprimary tabs" @click="editpro(scope.row)">修改项目信息</span>
<span class="wordprimary tabs" @click="detailpro(scope.row)" v-if="scope.row.cbStage !=3">查看导入进度</span> <span class="wordprimary tabs" @click="detailpro(scope.row)" v-if="scope.row.cbStage !=3 || scope.row.cbStage !='3'">查看导入进度</span>
<span style="color:#eee;" class="wordprimary tabs" v-if="scope.row.cbStage ===3">查看导入进度</span> <span style="color:#eee;" class="wordprimary tabs" v-if="scope.row.cbStage ===3 || scope.row.cbStage ==='3'">查看导入进度</span>
<span class="worddel tabs" v-if="scope.row.projectFileStatus != 1" @click="deleetpro(scope.row)">删除</span> <span class="worddel tabs" v-if="scope.row.projectFileStatus != 1" @click="deleetpro(scope.row)">删除</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -176,14 +176,23 @@ ...@@ -176,14 +176,23 @@
<span>{{protitle}}</span> <span>{{protitle}}</span>
</div> </div>
<el-form class="popform" label-width="97px" :model="queryParam" :rules="rules" ref="ruleForm"> <el-form class="popform" label-width="97px" :model="queryParam" :rules="rules" ref="ruleForm">
<el-form-item label="项目名称" class="row" prop="projectName">
<el-input type="text" v-model="queryParam.projectName" placeholder="请输入完整的项目名称"></el-input>
</el-form-item>
<el-form-item label="IPM项目编码" class="row"> <el-form-item label="IPM项目编码" class="row">
<el-input type="text" placeholder="请输入IPM项目编码" v-model="queryParam.ipmProjectNo"> <el-input type="text" placeholder="请输入IPM项目编码" v-model="queryParam.ipmProjectNo">
<template slot="append"><div class="pro-getbtn" @click="getipmProjectNo">获取数据</div></template> <template slot="append"><div class="pro-getbtn" @click="getipmProjectNo">获取数据</div></template>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item label="项目名称" class="row" prop="projectName">
<el-input type="text" v-model="queryParam.projectName" @input="inputProjectName" placeholder="请输入完整的项目名称"></el-input>
<div class="projectNameList" v-if="projectNameList.length > 0">
<p @click="blurProjectName(item)" v-for="item in projectNameList">
<el-tooltip placement="top" v-if="item.projectName.length>26">
<div slot="content" v-html="item.projectName"></div>
<span v-html="item.projectName"></span>
</el-tooltip>
<span v-else v-html="item.projectName"></span>
</p>
</div>
</el-form-item>
<el-form-item label="文件名称" class="row"> <el-form-item label="文件名称" class="row">
<el-input type="text" placeholder="请输入文件名称" v-model="queryParam.projectFileName"></el-input> <el-input type="text" placeholder="请输入文件名称" v-model="queryParam.projectFileName"></el-input>
</el-form-item> </el-form-item>
...@@ -199,7 +208,8 @@ ...@@ -199,7 +208,8 @@
<div class="btn btn_primary h32" v-if="isedit && !ischeck" @click="savepro">保存</div> <div class="btn btn_primary h32" v-if="isedit && !ischeck" @click="savepro">保存</div>
<div class="btn btn_primary h32" v-if="!isedit && ischeck && queryParam.cbStage ==='3'" @click="insertPro1">创建项目</div> <div class="btn btn_primary h32" v-if="!isedit && ischeck && queryParam.cbStage ==='3'" @click="insertPro1">创建项目</div>
<div class="btn btn_primary h32" v-if="isedit && ischeck && queryParam.cbStage !=='3'" @click="changepro">下一步,导入数据</div> <div class="btn btn_primary h32" v-if="isedit && ischeck && queryParam.cbStage !=='3'" @click="changepro">下一步,导入数据</div>
<div class="btn btn_primary h32" v-if="!isedit && ischeck && queryParam.cbStage !=='3'" @click="insertPro" :class="{'btn_disabled':!queryParam.cbStage}" :disabled="!queryParam.cbStage">下一步,导入数据</div> <div class="btn btn_primary h32" v-if="!isedit && ischeck && queryParam.cbStage !=='3' && !repeatState" @click="insertPro" :class="{'btn_disabled':!queryParam.cbStage}" :disabled="!queryParam.cbStage">下一步,导入数据</div>
<div class="btn btn_primary h32" v-if="!isedit && ischeck && queryParam.cbStage !=='3' && repeatState" @click="insertPro" :class="{'btn_disabled':repeatState}" :disabled="repeatState">下一步,导入数据</div>
</div> </div>
</el-dialog> </el-dialog>
...@@ -260,6 +270,8 @@ ...@@ -260,6 +270,8 @@
import { import {
addNewStageProject, addNewStageProject,
addProject, addProject,
queryProjectNameListProjectName,
checkProjectNameExistProjectName,
checkProjectCodeExist, checkProjectCodeExist,
deleteDraft, deleteDraft,
editProjectInfo, editProjectInfo,
...@@ -272,52 +284,63 @@ ...@@ -272,52 +284,63 @@
export default { export default {
name: "projectCostLedger", name: "projectCostLedger",
components:{proupload,skeleton}, components:{proupload,skeleton},
data() { data() {
return { return {
typenum:0, typenum:0,
formdata:{ formdata:{
pageNum:1, pageNum:1,
pageSize:50, pageSize:50,
}, },
isSkeleton:false, isSkeleton:false,
total:0, total:0,
protitle:'', protitle:'',
dialogVisible:false, dialogVisible:false,
cbStagelist:[], cbStagelist:[],
ztStagelist:[], ztStagelist:[],
//新建项目参数 //新建项目参数
queryParam:{ queryParam:{
projectName:'',//项目名称 projectName:'',//项目名称
ipmProjectNo:'',// IPM项目编码 ipmProjectNo:'',// IPM项目编码
isGetProjectDetail:0,// 是否获取项目详情 0:否、1:是) isGetProjectDetail:0,// 是否获取项目详情 0:否、1:是)
projectFileName:'',// 文件名称 projectFileName:'',// 文件名称
cbStage:'',//成本阶段 cbStage:'',//成本阶段
}, },
rules:{ rules:{
cbStage:[{ required: true, message: '请选择成本阶段!', trigger: 'blur' },], cbStage:[{ required: true, message: '请选择成本阶段!', trigger: 'blur' },],
projectName:[{ required: true, message: '请输入项目名称', trigger: 'blur' },], projectName:[{ required: true, message: '请输入项目名称', trigger: 'blur' },],
},
isupload:false,
tableData:[{}],
cgxVisible:false,
cgxSkeleton:false,
cgxtotal:0,
cgxlist:[],
uploadData:{
cbStage:0,
},//新增项目返回的数据
cgPagesize:10,
cgPagenum:1,
prodetail:false,
isedit:false,//是否修改项目
ischeck:false,//是否可选
deletevisible:false,
indeterminate:false,//半选状态
checkAll:false,
checkds:[],
allchecks:[],//可以用的项目阶段
projectNameList:[],
repeatState:false, //当新增项目名称重复的时候下一步按钮状态
};
},
watch: {
dialogVisible: {
handler(newValue) {
if(!newValue){
this.projectNameList=[]
}
}
}, },
isupload:false, },
tableData:[{}],
cgxVisible:false,
cgxSkeleton:false,
cgxtotal:0,
cgxlist:[],
uploadData:{
cbStage:0,
},//新增项目返回的数据
cgPagesize:10,
cgPagenum:1,
prodetail:false,
isedit:false,//是否修改项目
ischeck:false,//是否可选
deletevisible:false,
indeterminate:false,//半选状态
checkAll:false,
checkds:[],
allchecks:[],//可以用的项目阶段
};
},
//可访问data属性 //可访问data属性
created() { created() {
//成本阶段 //成本阶段
...@@ -469,17 +492,58 @@ ...@@ -469,17 +492,58 @@
this.getlist() this.getlist()
}, },
//验证项目名称是否有相同的
blurProjectName(item){
let pram = {
projectName:this.queryParam.projectName
}
checkProjectNameExistProjectName(pram).then(res=>{
if(res.code == 200 && res.data){
this.$confirm(res.msg, '提示', {
confirmButtonText: '修改项目信息',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.editpro(res.data)
}).catch(() => {
this.repeatState = true
});
}else{
this.repeatState = false;
}
})
this.queryParam.projectName=item.projectName.replace(/<[^>]+>/g,'');
this.projectNameList=[]
},
//模糊查询
inputProjectName(){
if(!this.queryParam.projectName){
this.projectNameList=[]
return
}
let pram = {
projectName:this.queryParam.projectName
}
queryProjectNameListProjectName(pram).then(res=>{
if(res.code == 200){
this.projectNameList=res.data;
}else{
}
})
},
getipmProjectNo(){ getipmProjectNo(){
//点击且校验了当前编码有数据才获取 //点击且校验了当前编码有数据才获取
console.log(this.queryParam)
let pram = { let pram = {
projectId:this.queryParam.id, projectId:this.queryParam.id,
projectCode:this.queryParam.ipmProjectNo projectCode:this.queryParam.ipmProjectNo
} }
checkProjectCodeExist(pram).then(res=>{ checkProjectCodeExist(pram).then(res=>{
if(res.code == 200 && res.data == true){ if(res.code == 200){
this.queryParam.isGetProjectDetail = 1 this.queryParam.isGetProjectDetail = 1
this.$message.success(res.msg) this.queryParam.projectName =res.msg;
// this.$message.success(res.msg)
}else{ }else{
this.queryParam.isGetProjectDetail = 0 this.queryParam.isGetProjectDetail = 0
this.$message.error(res.msg) this.$message.error(res.msg)
...@@ -708,6 +772,34 @@ ...@@ -708,6 +772,34 @@
.popform { .popform {
padding: 24px 20px 0; padding: 24px 20px 0;
.projectNameList{
width: 342px;
height: 176px;
border-radius: 4px;
background: #ffffff;
position: absolute;
box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.12);
border: 1px solid #E4E7ED;
z-index: 9;
top:40px;
padding-top: 8px;
overflow: auto;
cursor: pointer;
p{
height: 32px;
line-height: 32px;
color:#232323;
font-size: 14px;
padding-left: 20px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
p:hover{
background: #F5F7FA;
}
}
.row { .row {
margin-bottom: 16px; margin-bottom: 16px;
position: relative; position: relative;
......
...@@ -36,12 +36,12 @@ module.exports = { ...@@ -36,12 +36,12 @@ module.exports = {
// detail: https://cli.vuejs.org/config/#devserver-proxy // detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: { [process.env.VUE_APP_BASE_API]: {
// target: `http://111.204.34.146:9099/prod-api`,//测试 // target: `http://111.204.34.146:9099/prod-api`,//测试
target: `http://172.17.0.12:9099//prod-api`,//测试 target: `http://172.17.0.12:9099/prod-api`,//测试
// target: `http://192.168.60.5:9098`,//陈跃方 // target: `http://192.168.60.5:9098`,//陈跃方
// target: `http://192.168.60.27:9098`,//邓 // target: `http://192.168.60.27:9098`,//邓
// target: `http://122.9.160.122:9011`, //线上 // target: `http://122.9.160.122:9011`, //线上
// target: `http://192.168.0.165:9098`,//施-无线 // target: `http://192.168.0.9:9098`,//施-无线
// target: `http://192.168.60.46:9098`,//施-有线 // target: `http://192.168.60.7:9098`,//施-有线
// target: `http://192.168.60.90:9098`,//谭 // target: `http://192.168.60.90:9098`,//谭
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
......
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