Commit 95ae6464 authored by Administrator's avatar Administrator

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

parents c0ed0b6e b7168051
......@@ -204,6 +204,7 @@ tenant:
- cb_scene_expense_month
- cb_subject
- cb_project_other
- s_materiel_project
# MyBatisPlus配置
# https://baomidou.com/config/
......
......@@ -56,6 +56,36 @@
<artifactId>elasticsearch-java</artifactId>
<version>8.7.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.61</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.3.1</version>
</dependency>
<dependency>
<groupId>com.zjyj</groupId>
<artifactId>cloudt-rest-client</artifactId>
<version>2.8.0-SNAPSHOT</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.tencentcloudapi</groupId>-->
......
package com.dsk.component;
import cn.hutool.core.date.DatePattern;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.utils.DateUtils;
import com.dsk.cscec.domain.CbProjectRecord;
import com.dsk.cscec.domain.CbQuantitySummary;
import com.dsk.cscec.domain.CbSubject;
import com.dsk.cscec.domain.SMaterielProject;
import com.dsk.cscec.mapper.CbSubjectMapper;
import com.dsk.cscec.service.CbProjectRecordService;
import com.dsk.cscec.service.ICbQuantitySummaryService;
import com.dsk.cscec.service.ISMaterielProjectService;
import com.glodon.cloudt.rest.client.RestServiceClient;
import com.glodon.cloudt.rest.client.data.HmacRestAuthInfo;
import com.glodon.cloudt.rest.client.data.RestResponseInfo;
import com.glodon.cloudt.rest.client.exception.AuthenticateException;
import com.glodon.cloudt.rest.client.exception.InvalidUriException;
import com.glodon.cloudt.rest.client.exception.NoAuthenticateException;
import com.glodon.cloudt.rest.client.impl.HmacRestServiceClient;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 物料相关组件
*
* @Author lcl
* @Data 2024/3/14 15:56
*/
@Component
public class MaterielComponent {
@Resource
private ISMaterielProjectService materielProjectService;
@Resource
private ICbQuantitySummaryService quantitySummaryService;
@Resource
private CbProjectRecordService projectRecordService;
@Resource
private CbSubjectMapper subjectMapper;
/**
* 物料项目定时拉取
*/
@Scheduled(cron = "0 0 1 20 * ? ")
public void materielProjectPull() {
String apiURI = "/api/inspection/v1.0/project/getTenantHasCodeProject";
String resStr = materielRequest(apiURI);
JSONObject jsonObject = JSONObject.parseObject(resStr);
if (!ObjectUtils.isEmpty(jsonObject.getString("data"))) {
List<SMaterielProject> list = JSON.parseArray(jsonObject.getString("data"), SMaterielProject.class);
materielProjectService.saveOrUpdateBatch(list);
}
}
/**
* 物料数据定时拉取
*/
@Scheduled(cron = "0 0 2 20 * ? ")
public void materielDataPull() {
String beginTimestamp = DatePattern.PURE_DATETIME_MS_FORMAT.format(DateUtils.addMonths(new Date(), -1));
String apiURI = "/gys/inspection-api-service/integrate-v2/getSLlist?beginTimestamp=" + beginTimestamp;
String resStr = materielRequest(apiURI);
JSONObject jsonObject = JSONObject.parseObject(resStr);
JSONObject data = JSONObject.parseObject(jsonObject.getString("data"));
JSONArray bills = JSONObject.parseArray(data.getString("Bills"));
if(ObjectUtils.isEmpty(bills)) return;
List<CbQuantitySummary> list = new ArrayList<>();
for (int i = 0; i < bills.size(); i++) {
JSONObject obj = bills.getJSONObject(i);
JSONArray bdcls = JSONObject.parseArray(obj.getString("BDCL"));
for (int j = 0; j < bdcls.size(); j++) {
JSONObject bean = bdcls.getJSONObject(j);
//材料code
String code = bean.getString("CLLBBM").substring(bean.getString("CLLBBM").lastIndexOf(".") + 1);
CbSubject subject = subjectMapper.selectOne(Wrappers.<CbSubject>lambdaQuery().eq(CbSubject::getCode, code));
//获取项目id 通过第三方项目id->ipm编码->系统项目id
String projectId = bean.getString("projectId");
if (ObjectUtils.isEmpty(projectId)) {
continue;
}
SMaterielProject materielProject = materielProjectService.getById(projectId);
if (ObjectUtils.isEmpty(materielProject) || ObjectUtils.isEmpty(materielProject.getSyncCode())) {
continue;
}
CbProjectRecord one = projectRecordService.getOne(Wrappers.<CbProjectRecord>lambdaQuery()
.eq(CbProjectRecord::getIpmProjectNo, materielProject.getSyncCode())
.orderByDesc(CbProjectRecord::getCbStage));
if(ObjectUtils.isEmpty(one)){
continue;
}
CbQuantitySummary cb = new CbQuantitySummary();
cb.setProjectId(one.getId());
cb.setCbStage(one.getCbStage());
cb.setCbSubjectName(bean.getString("CLLBMC"));
cb.setCbSubjectNo(subject.getCbSubjectNo());
cb.setCbName(bean.getString("CLMC"));
cb.setUnit(bean.getString("JLDW"));
cb.setQuantity(bean.getDouble("SJSL"));
list.add(cb);
}
}
quantitySummaryService.batchInsert(list);
System.out.println(list);
}
private String materielRequest(String apiURI) {
try {
/** ------------ 授权认证 --------------*/
//第3步:创建客户端实例
RestServiceClient serviceClient = HmacRestServiceClient.getInstance();
//第4步:加载/验证授权文件
//4.1构建认证信息
HmacRestAuthInfo restAuthInfo = new HmacRestAuthInfo();
//4.2设置授权文件路径
// restAuthInfo.setLicPath("src/main/resource/auth/auth.lic");
restAuthInfo.setLicStream(this.getClass().getResourceAsStream("/auth/auth.lic"));
//4.3权限认证
serviceClient.authenticate(restAuthInfo);
/** ------------ 拼接请求地址 --------------*/
//第5步:获取授权文件关联的GYS平台地址hostAddress
String hostAddress = serviceClient.getRestRootAddress();
//第6步:设置请求接口的URI地址apiURI(以获取集成项目列表信息为例)
//第7步:拼装完整的请求网址
String fullURL = hostAddress + apiURI;
//第8步:请求数据准备(本例中为从GYS平台获取数据,无需进行请求数据的准备)
//第9步:发送请求,用来推送/获取数据
RestResponseInfo restResponseInfo = serviceClient.get(fullURL);
/** ------------ 处理请求返回结果 --------------*/
if (restResponseInfo.isSuccess()) {
//请求成功:
//第10步:处理请求结果(第三方系统自行处理)
return restResponseInfo.getStringContent();
} else {
//请求失败:
//第11步:拼接完整的上报请求失败地址
String faultLogApiURI = "/gys/tl/services/trace/api-fault-log";
String faultLogFullURL = hostAddress + faultLogApiURI;
//第12步:构建上报请求失败数据
JSONObject faultLog = new JSONObject();
faultLog.put("requestUrl", fullURL);
faultLog.put("requestMethod", "GET");
faultLog.put("requestBody", "");
faultLog.put("statusCode", restResponseInfo.getErrorCode());
faultLog.put("response", restResponseInfo.getStringContent());
faultLog.put("description", restResponseInfo.getErrorMessage());
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");//时间戳格式,到秒
LocalDateTime dateTime = LocalDateTime.now();
String searchKey = formatter.format(dateTime);
faultLog.put("searchKey", searchKey); //能表征本次请求记录的标识,方便进行问题排查
//第13步:上报请求失败数据
serviceClient.post(faultLogFullURL, faultLog.toJSONString());
}
} catch (AuthenticateException e) {
e.printStackTrace();
} catch (InvalidUriException e) {
e.printStackTrace();
} catch (NoAuthenticateException e) {
e.printStackTrace();
}
throw new ServiceException("物料接口调用失败!");
}
}
......@@ -20,6 +20,10 @@ public interface CbProjectConstants {
* 成本阶段:转固
*/
Integer CB_STAGE_TO_SOLID = 2;
/**
* 成本阶段:暂无成本计划
*/
Integer CB_STAGE_NO_COST_PLAN = 3;
/**
* 项目文件状态:准备中
*/
......
......@@ -43,7 +43,11 @@ public class CbProjectRecordController extends BaseController {
*/
@GetMapping("/checkProjectCodeExist")
public R<Boolean> checkProjectCodeExist(@Validated CbCheckProjectCodeExistBo checkBo) {
return R.ok(dProjectService.checkProjectCodeExist(checkBo));
if (dProjectService.checkProjectCodeExist(checkBo)) {
return R.ok(true);
} else {
return R.fail("IPM项目编码无效", false);
}
}
/**
......
......@@ -83,5 +83,13 @@ public class CbQuantitySummaryController extends BaseController {
return R.ok();
}
/**
* 修改工程量
*/
@PostMapping("/editEngineeringQuantity")
public R<Void> editEngineeringQuantity(@RequestBody CbQuantitySummaryActual bo) {
return toAjax(baseService.editEngineeringQuantity(bo));
}
}
......@@ -53,5 +53,7 @@ public class CbSubject implements Serializable {
private Date createTime;
private Integer sort;
private String code;
}
package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 物料项目类
*
* @Author lcl
* @Data 2024/3/15 9:15
*/
@Data
@TableName("s_materiel_project")
public class SMaterielProject {
/**
* 第三方项目id
*/
@TableId(value = "id")
private Long id;
/**
* 项目名称
*/
private String name;
private String ownerDeptName;
/**
* 项目对应的组织id
*/
private Long ownerOrg;
/**
* 项目对应的父组织id
*/
private Long parentId;
private String shortName;
/**
* 项目(建设)状态 0:未开工; 1:在建; 2:停工; 3:完工; 4:验收
*/
private Integer status;
/**
* 同步编码(ipm项目编码:project_code)
*/
private String syncCode;
/**
* 1:表示普通项目;3:表示搅拌站
*/
private Integer type;
}
......@@ -2,6 +2,7 @@ package com.dsk.cscec.domain.bo;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
......@@ -14,6 +15,7 @@ public class AddCbProjectBo {
/**
* 项目名称
*/
@NotBlank(message = "项目名称不能为空")
private String projectName;
/**
* IPM项目编码
......@@ -29,7 +31,7 @@ public class AddCbProjectBo {
*/
private String projectFileName;
/**
* 成本阶段(0:标前成本、1:标后成本、2:转固成本)
* 成本阶段(0:标前成本、1:标后成本、2:转固成本、3:暂无成本计划)
*/
@NotNull(message = "未选择成本阶段")
private Integer cbStage;
......
......@@ -17,4 +17,8 @@ public class CbQuantitySummaryListBo extends CbProjectBaseBo {
* 记录月份
*/
private String recordDate;
/**
* 是否超出计划成本合价(不含税)
*/
private Boolean isOutPlanCostCombinedPrice;
}
......@@ -100,6 +100,14 @@ public class CbQuantitySummaryListVo {
* 采购单价
*/
private Double purchaseUnitPrice;
/**
* 实际成本合价(不含税)
*/
private Double actualCombinedPrice = 0.0;
/**
* 实际成本合价(不含税)成本是否超出计划成本当中合价(不含税)
*/
private Boolean isActualGreaterThanPlan;
/**
* 创建时间
*/
......@@ -117,7 +125,7 @@ public class CbQuantitySummaryListVo {
*/
private Double pushQuantities;
/**
* IPM项目编码
* IPM项目编码
*/
private String ipmProjectCode;
/**
......
......@@ -23,12 +23,12 @@ public interface CbProjectRecordMapper extends BaseMapper<CbProjectRecord> {
Page<CbProjectRecordSearchVo> selectPageProjectRecordList(IPage<CbProjectSearchBo> build,
@Param("searchBo") CbProjectSearchBo searchBo,
@Param("deleteFlagExist") Integer deleteFlagExist,
@Param("projectFileStatusPreparing") Integer projectFileStatusPreparing);
@Param("projectFileStatusPreparing") Integer projectFileStatusPreparing,
@Param("cbStageNoCostPlan") Integer cbStageNoCostPlan);
/**
* 获取草稿弹窗列表
*/
Page<CbProjectRecord> selectPageDraftDialogList(@Param("page") Page<CbProjectRecord> page, @Param(Constants.WRAPPER) QueryWrapper<CbProjectRecord> wrapper);
}
package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.SMaterielProject;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface SMaterielProjectMapper extends BaseMapper<SMaterielProject> {
}
......@@ -32,5 +32,10 @@ public interface ICbQuantitySummaryService extends IService<CbQuantitySummary> {
boolean batchInsert(List<CbQuantitySummary> list);
R conversionNotice(CbQuantitySummaryListBo bo);
/**
* 修改工程量
*/
Boolean editEngineeringQuantity(CbQuantitySummaryActual bo);
}
package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.SMaterielProject;
public interface ISMaterielProjectService extends IService<SMaterielProject> {
}
......@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.excel.ExcelUtils;
......@@ -65,7 +66,7 @@ public class CbDirectExpenseServiceImpl extends ServiceImpl<CbDirectExpenseMappe
//校验项目是否存在
this.checkProjectExist(projectId);
//查询清单/费用项分类标识为数字的数字
//查询清单/费用项分类标识为数字123的数据
List<CbDirectExpenseMenuVo> menuVoList = baseMapper.selectMenuData(projectId, regx, CbProjectConstants.DELETE_FLAG_EXIST);
Assert.isFalse(menuVoList.isEmpty(), "当前项目不存在直接费菜单");
......@@ -241,19 +242,28 @@ public class CbDirectExpenseServiceImpl extends ServiceImpl<CbDirectExpenseMappe
*/
@Override
public List<CbDirectExpenseDataDetailVo> getDataDetail(Long menuId) {
//查询该菜单下的
List<CbDirectExpenseDataDetailVo> qingList = BeanUtil.copyToList(baseMapper.selectList(new LambdaQueryWrapper<CbDirectExpense>()
//查询该菜单下的子集
List<CbDirectExpenseDataDetailVo> level4List = BeanUtil.copyToList(baseMapper.selectList(new LambdaQueryWrapper<CbDirectExpense>()
.eq(CbDirectExpense::getParentId, menuId)
//.eq(CbDirectExpense::getExpenseCategoryTag, CbProjectConstants.DIRECT_EXPENSE_CATEGORY_TAG_QING)
), CbDirectExpenseDataDetailVo.class);
Assert.isFalse(qingList.isEmpty(), "该菜单下无数据");
Assert.isFalse(level4List.isEmpty(), "该菜单下无数据");
//生成数据树形
qingList.forEach(qing -> {
qing.getChildrenList().addAll(BeanUtil.copyToList(baseMapper.selectList(new LambdaQueryWrapper<CbDirectExpense>()
.eq(CbDirectExpense::getParentId, qing.getId())), CbDirectExpenseDataDetailVo.class));
this.generateDataDetailTree(level4List);
return level4List;
}
//生成数据详情树形
public void generateDataDetailTree(List<CbDirectExpenseDataDetailVo> level4List) {
level4List.forEach(item -> {
if (ReUtil.isMatch(regx, item.getExpenseCategoryTag())) {
item.setExpenseCategoryTag(null);
}
List<CbDirectExpenseDataDetailVo> childrenList = BeanUtil.copyToList(baseMapper.selectList(new LambdaQueryWrapper<CbDirectExpense>()
.eq(CbDirectExpense::getParentId, item.getId())), CbDirectExpenseDataDetailVo.class);
item.getChildrenList().addAll(childrenList);
generateDataDetailTree(childrenList);
});
return qingList;
}
/**
......
......@@ -193,7 +193,7 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
*/
@Override
public TableDataInfo<CbProjectRecordSearchVo> getProjectList(CbProjectSearchBo searchBo, PageQuery pageQuery) {
Page<CbProjectRecordSearchVo> page = baseMapper.selectPageProjectRecordList(pageQuery.build(), searchBo, CbProjectConstants.DELETE_FLAG_EXIST, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING);
Page<CbProjectRecordSearchVo> page = baseMapper.selectPageProjectRecordList(pageQuery.build(), searchBo, CbProjectConstants.DELETE_FLAG_EXIST, CbProjectConstants.PROJECT_FILE_STATUS_PREPARING, CbProjectConstants.CB_STAGE_NO_COST_PLAN);
for (CbProjectRecordSearchVo searchVo : page.getRecords()) {
//判断是否有历史阶段
......@@ -212,8 +212,10 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
.eq(CbProjectFile::getProjectId, searchVo.getId())
.orderByDesc(CbProjectFile::getUpdateTime)
.last("LIMIT 1"));
searchVo.setUpdateBy(projectFile.getUpdateBy());
searchVo.setUpdateTime(projectFile.getUpdateTime());
if (ObjectUtil.isNotNull(projectFile)) {
searchVo.setUpdateBy(projectFile.getUpdateBy());
searchVo.setUpdateTime(projectFile.getUpdateTime());
}
}
return TableDataInfo.build(page);
}
......@@ -378,12 +380,11 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
, "存在解析中的项目,删除失败");
//各个成本类型数据和对应每月成本数据暂不做删除,项目台账列表查不出来自然也无法查看数据
//删除项目文件记录
flag = projectFileMapper.delete(new LambdaQueryWrapper<CbProjectFile>()
.eq(CbProjectFile::getProjectId, projectId));
//删除项目记录
Assert.isTrue(flag > 0, "操作异常,请联系管理员");
Assert.isTrue(flag == 0, "操作异常,请联系管理员");
flag = baseMapper.deleteById(projectId);
}
return flag;
......@@ -412,6 +413,7 @@ public class CbProjectRecordServiceImpl extends ServiceImpl<CbProjectRecordMappe
QueryWrapper<CbProjectRecord> wrapper = Wrappers.query();
wrapper
.eq("project_file_status", CbProjectConstants.PROJECT_FILE_STATUS_PREPARING)
.ne("cb_stage", CbProjectConstants.CB_STAGE_NO_COST_PLAN)
.eq("del_flag", CbProjectConstants.DELETE_FLAG_EXIST)
.orderByDesc("update_time");
return TableDataInfo.build(baseMapper.selectPageDraftDialogList(pageQuery.build(), wrapper));
......
......@@ -59,27 +59,36 @@ public class CbQuantitySummaryServiceImpl extends ServiceImpl<CbQuantitySummaryM
List<Map<String, Object>> resultList = new ArrayList<>();
List<Map<String, Object>> list = baseMapper.selectSubject(bo);
if (!ObjectUtils.isEmpty(list)) {
Map<String, Map<String, Map<String, List<Map<String, Object>>>>> map = list.stream()
Map<String, Map<String, Map<String, Map<String, List<Map<String, Object>>>>>> map = list.stream()
.collect(
Collectors.groupingBy(item -> item.get("one").toString(),
Collectors.groupingBy(item -> item.get("two").toString(),
Collectors.groupingBy(item -> item.get("three").toString()))));
Collectors.groupingBy(item -> item.get("three").toString(),
Collectors.groupingBy(item -> item.get("four").toString()
)))));
Map<String, Object> resMap = new HashMap<>();
List<Map<String, Object>> resList = new ArrayList<>();
resMap.put("name", "房建类成本科目");
resMap.put("sort", 1);
for (Map.Entry<String, Map<String, Map<String, List<Map<String, Object>>>>> entry : map.entrySet()) {
for (Map.Entry<String, Map<String, Map<String, Map<String, List<Map<String, Object>>>>>> entry : map.entrySet()) {
Map<String, Object> oneMap = new HashMap<>();
List<Map<String, Object>> oneList = new ArrayList<>();
oneMap.put("name", entry.getKey());
oneMap.put("sort", cbSubjectMapper.selectOne(Wrappers.<CbSubject>lambdaQuery().eq(CbSubject::getCbSubjectName, entry.getKey())).getSort());
for (Map.Entry<String, Map<String, List<Map<String, Object>>>> twoEntry : entry.getValue().entrySet()) {
for (Map.Entry<String, Map<String, Map<String, List<Map<String, Object>>>>> twoEntry : entry.getValue().entrySet()) {
Map<String, Object> twoMap = new HashMap<>();
List<Map<String, Object>> twoList = new ArrayList<>();
twoMap.put("name", twoEntry.getKey());
for (Map.Entry<String, List<Map<String, Object>>> threeEntry : twoEntry.getValue().entrySet()) {
for (Map.Entry<String, Map<String, List<Map<String, Object>>>> threeEntry : twoEntry.getValue().entrySet()) {
Map<String, Object> threeMap = new HashMap<>();
List<Map<String, Object>> threeList = new ArrayList<>();
threeMap.put("name", threeEntry.getKey());
for (Map.Entry<String, List<Map<String, Object>>> fourEntry : threeEntry.getValue().entrySet()) {
Map<String, Object> fourMap = new HashMap<>();
fourMap.put("name", fourEntry.getKey());
threeList.add(fourMap);
}
threeMap.put("children", threeList);
twoList.add(threeMap);
}
twoMap.put("children", twoList);
......@@ -109,13 +118,52 @@ public class CbQuantitySummaryServiceImpl extends ServiceImpl<CbQuantitySummaryM
@Override
public List<CbQuantitySummaryListVo> subjectList(CbQuantitySummaryListBo bo) {
if(ObjectUtils.isEmpty(bo.getRecordDate())){
if (ObjectUtils.isEmpty(bo.getRecordDate())) {
//默认当前月
bo.setRecordDate(DatePattern.SIMPLE_MONTH_FORMAT.format(new Date()));
}
if (ObjectUtils.isEmpty(bo.getProjectId())) throw new BeanException("项目id不能为空!");
if (ObjectUtils.isEmpty(bo.getCbStage())) throw new BeanException("成本阶段不能为空!");
return baseMapper.selectListBySubject(bo);
List<CbQuantitySummaryListVo> listVo = baseMapper.selectListBySubject(bo);
//超出计划成本合价(不含税)的集合
List<CbQuantitySummaryListVo> outList = new ArrayList<>();
//未超出计划成本合价(不含税)的集合
List<CbQuantitySummaryListVo> notOutList = new ArrayList<>();
listVo.forEach(vo -> {
if (ObjectUtil.isNotNull(vo.getPushQuantities())) {
//实际成本合价(不含税)
vo.setActualCombinedPrice(vo.getQuantity() * vo.getPushQuantities());
} else {
//实际成本合价(不含税)
vo.setActualCombinedPrice(
(ObjectUtil.isNull(vo.getPurchaseUnitPrice()) ? 0.0 : vo.getPurchaseUnitPrice())
*
(ObjectUtil.isNull(vo.getPushQuantities()) ? 0.0 : vo.getPushQuantities())
);
}
//如果实际成本合价(不含税)超出了计划成本合价(不含税),则设置标识,以便前端标红
Double combinedPrice = ObjectUtil.isNull(vo.getCombinedPrice()) ? 0.0 : vo.getCombinedPrice();
if (vo.getActualCombinedPrice().compareTo(combinedPrice) > 0) {
//vo.setActualCombinedPrice(Double.parseDouble(StringUtils.markInRed(vo.getActualCombinedPrice().toString(), vo.getActualCombinedPrice().toString())));
vo.setIsActualGreaterThanPlan(true);
outList.add(vo);
} else {
vo.setIsActualGreaterThanPlan(false);
notOutList.add(vo);
}
});
//筛选是否超出计划成本合价(不含税)
Boolean flag = bo.getIsOutPlanCostCombinedPrice();
if (ObjectUtil.isNotNull(flag)) {
if (flag) {
return outList;
} else {
return notOutList;
}
}
return listVo;
}
@Override
......@@ -190,5 +238,20 @@ public class CbQuantitySummaryServiceImpl extends ServiceImpl<CbQuantitySummaryM
}
return R.ok();
}
/**
* 修改工程量
*/
@Override
public Boolean editEngineeringQuantity(CbQuantitySummaryActual bo) {
if (ObjectUtils.isEmpty(bo.getId())) throw new BeanException("id不能为空!");
if (ObjectUtils.isEmpty(bo.getPushQuantities())) throw new BeanException("修改后的工程量不能为空!");
boolean update = baseActualService.updateById(bo);
if (!update) {
log.error("CbQuantitySummaryServiceImpl.editEngineeringQuantity() data update error! data:" + JSONUtil.toJsonStr(bo));
throw new ServiceException("数据更新错误!");
}
return update;
}
}
......@@ -73,10 +73,6 @@ public class CustomerInfoServiceImpl extends ServiceImpl<DCustomerMapper, DCusto
if(!ObjectUtils.isEmpty(bo.getCustomerName())){
item.setCustomerName(StringUtils.markInRed(item.getCustomerName(), bo.getCustomerName()));
}
//关键字标红
if(!ObjectUtils.isEmpty(bo.getLeaderName())){
item.setCustomerName(StringUtils.markInRed(item.getLeaderName(), bo.getLeaderName()));
}
try {
Map<String, Object> map = opportunityRadarService.enterpriseByName(item.getCustomerName());
if (!ObjectUtils.isEmpty(map.get("data"))) {
......@@ -87,6 +83,10 @@ public class CustomerInfoServiceImpl extends ServiceImpl<DCustomerMapper, DCusto
}catch (Exception e){
log.error("CustomerInfoServiceImpl.queryPageList() error:" + e);
}
//关键字标红
if(!ObjectUtils.isEmpty(bo.getLeaderName())){
item.setCustomerName(StringUtils.markInRed(item.getLeaderName(), bo.getLeaderName()));
}
});
}
return TableDataInfo.build(page);
......
......@@ -273,8 +273,8 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject>
.eq(DProject::getProjectCode, projectCode));
} else {
CbProjectRecord projectRecord = projectRecordMapper.selectById(projectId);
//未做任何改动时
Assert.isFalse(projectCode.equals(projectRecord.getIpmProjectNo()), "新编码与旧编码相同");
////未做任何改动时
//Assert.isFalse(projectCode.equals(projectRecord.getIpmProjectNo()), "新编码与旧编码相同");
//修改项目信息or新增新阶段项目时
if (projectCode.equals(projectRecord.getIpmProjectNo())
&& projectRecord.getIsGetProjectDetail()) {
......@@ -297,7 +297,9 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject>
@Override
public CbProjectInfoVo getCbProjectInfo(Long projectId) {
CbProjectRecord projectRecord = projectRecordMapper.selectById(projectId);
Assert.isTrue(projectRecord.getIsGetProjectDetail(), "请先通过IPM项目编码获取数据,或IPM项目编码无效");
if (!projectRecord.getIsGetProjectDetail()) {
return null;
}
return BeanUtil.toBean(baseMapper.selectOne(new LambdaQueryWrapper<DProject>()
.eq(DProject::getProjectCode, projectRecord.getIpmProjectNo())), CbProjectInfoVo.class);
}
......
package com.dsk.cscec.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.cscec.domain.SMaterielProject;
import com.dsk.cscec.mapper.SMaterielProjectMapper;
import com.dsk.cscec.service.ISMaterielProjectService;
import org.springframework.stereotype.Service;
/**
* @Author lcl
* @Data 2024/3/15 10:00
*/
@Service
public class SMaterielProjectServiceImpl extends ServiceImpl<SMaterielProjectMapper, SMaterielProject> implements ISMaterielProjectService{
}
Fsj/9hmISdE3AkSo8tpwb2an4K+BGCrN5xafwa0p3ej89iE7bllHhR1WU25d+UVI23K9ib+YYOoYqdPpodi1tm5G1AELKEEOhXAb5cAohVJ7Z7a7ABEw4hf39qLy3AjCTWsn8XBJmszNvx9gPZ+6mUGgqOEnuwNa+smkEtV24QXqPfB+wugDXLOMB6GK/GLRzDe5vbbLEWHzoKCbZloAgnMJqfjlBrgfekQRPwwASfsreQsWCeOcuh7ValPaj7/s9fuaDqg3nSTUXZwnORiteC2BH6PJa41hKVDRGgOEZMtXROcD01LizyjbstdQE0EnCJsk3P76zvzaY2w547NCmyqwhl9sCmpoB+CbAVctDR2DXnVg22Y2QdHDe0eoa66dFR/FCZaD1/LTM/xbIGZaZ3kJyP8XzQYtrzq5Go6WkpMUSOeRcjJ4JlNPU7oN67P4AAHiG6sI5n6hZTr+6InpPoCMvqPbcyNanrc+Eo7h3ToqF0XyU9uzblgcZbRtCuvmERvoZ/siTQhl/bTntG71NsA2WT3SnWsAf0MrwlkJqnwErn1ynit5nfeStDeX2+vfL16UCvDDnCG1JU2GcbYYK3dAkPXlADD6lp//s2TJuRzeeBlGfp88rSDS5EmcwSmn1F1ZoVipP7M92vmWq4bO1sowqEaHJmXmMP99WfUiW9KYGZa223CJONINBFEH1IlDrzJ1yh79uE2KxP3E9n00RX6SjZ/TbJWVTgBP5t9oXeASFIMqetdP8ZfgjwsiL0J1ag1uYMbbbmS8nJDL13O2sII6YTPDQ2qcW/9a2Iy/MwILHENplZpWZn1ifmZifsqASVlenVnjy2brnoGXLFS0hbynVRAzt44MDHonOzHsvZ4e4ZfXU55YoBNJRPe6oLgRUCxPsA2LjXWgH5YNa9pJya0XQeI69h876z+w6fg2dFGabJdB+2dE/JTOw2J8gbfjG9N9Lf8FawtLAr5GIEFLzXpr/QusnmYzuIbXN0fxn/7f6DLArS9uABaiuNVDjDrCVuMGNyrgtIgo8rIShuZjU+7uIE3xsD6srnZ7EvV1fA+SATk+XgWNmgMaiPriRDj2y1mTOIXRWtLGHFaCi2w6yA==
\ No newline at end of file
......@@ -13,6 +13,8 @@
cpr.ipm_project_no,
cpr.is_get_project_detail,
cpr.project_file_name,
cpr.del_flag,
cpr.create_by,
cpr.create_time
from cb_project_record cpr
where cpr.del_flag=#{deleteFlagExist}
......@@ -30,6 +32,10 @@
</if>
and
cpr.project_file_status != #{projectFileStatusPreparing}
or
cpr.cb_stage = #{cbStageNoCostPlan}
and
cpr.del_flag=#{deleteFlagExist}
order by cpr.cb_stage desc) a
group by a.related_id
order by a.create_time desc
......
......@@ -3,12 +3,12 @@
<mapper namespace="com.dsk.cscec.mapper.CbQuantitySummaryMapper">
<insert id="batchInsert" parameterType="com.dsk.cscec.domain.CbQuantitySummary">
INSERT INTO cscec_bms.cb_quantity_summary
(project_id, `number`, cb_stage, cb_subject_name, company_no, org_no, cb_name, job_content,
(project_id, `number`, cb_stage, cb_subject_name, cb_subject_no, company_no, org_no, cb_name, job_content,
calculation_rule, unit, material_description, guide_price, bid_unit_price, unit_price_difference, quantity,
combined_price, combined_price_tax, brand_name, bid_source, remark, cb_project_file_id)
VALUES
<foreach collection="list" item="item" separator="," >
(#{item.projectId}, #{item.number}, #{item.cbStage}, #{item.cbSubjectName}, #{item.companyNo}, #{item.orgNo}, #{item.cbName},
(#{item.projectId}, #{item.number}, #{item.cbStage}, #{item.cbSubjectName}, #{item.cbSubjectNo}, #{item.companyNo}, #{item.orgNo}, #{item.cbName},
#{item.jobContent},#{item.calculationRule},#{item.unit},#{item.materialDescription},#{item.guidePrice},
#{item.bidUnitPrice},#{item.unitPriceDifference},#{item.quantity},#{item.combinedPrice},#{item.combinedPriceTax},
#{item.brandName},#{item.bidSource},#{item.remark},#{item.cbProjectFileId})
......@@ -17,13 +17,46 @@
<select id="selectSubject" resultType="java.util.Map">
select
cs1.cb_subject_name as one, cs2.cb_subject_name as two, cs3.cb_subject_name as three
cs1.cb_subject_name as one, cs2.cb_subject_name as two, cs3.cb_subject_name as three , '' as four
from cb_subject cs1
join cb_subject cs2 on (cs2.cb_subject_no like concat(cs1.cb_subject_no,'%') and cs2.`level` = 2 )
join cb_subject cs3 on (cs3.cb_subject_no like concat(cs2.cb_subject_no,'%') and cs3.`level` = 3 )
join cb_quantity_summary cqs on (cqs.cb_subject_name = cs3.cb_subject_name and cqs.del_falg = 0 and cqs.project_id = #{projectId} and cqs.cb_stage = #{cbStage} )
where cs1.`level` = 1
where cs1.`level` = 1 and cs1.cb_subject_no != 'CL'
group by cs1.cb_subject_name,cs2.cb_subject_name,cs3.cb_subject_name
union all
select
cs1.cb_subject_name as one, cs2.cb_subject_name as two, '' as three, '' as four
from cb_subject cs1
join cb_subject cs2 on (cs2.cb_subject_no like concat(cs1.cb_subject_no,'%') and cs2.`level` = 2 )
join cb_quantity_summary cqs on (cqs.cb_subject_no = cs2.cb_subject_no and cqs.del_falg = 0 and cqs.project_id = #{projectId} and cqs.cb_stage = #{cbStage} )
where cs1.`level` = 1 and cs1.cb_subject_no = 'CL'
group by cs1.cb_subject_name,cs2.cb_subject_name
union all
select
cs1.cb_subject_name as one, cs2.cb_subject_name as two, cs3.cb_subject_name as three, '' as four
from cb_subject cs1
join cb_subject cs2 on (cs2.cb_subject_no like concat(cs1.cb_subject_no,'%') and cs2.`level` = 2 )
join cb_subject cs3 on (cs3.cb_subject_no like concat(cs2.cb_subject_no,'%') and cs3.`level` = 3 )
join cb_quantity_summary cqs on (cqs.cb_subject_no = cs3.cb_subject_no and cqs.del_falg = 0 and cqs.project_id = #{projectId} and cqs.cb_stage = #{cbStage} )
where cs1.`level` = 1 and cs1.cb_subject_no = 'CL'
group by cs1.cb_subject_name,cs2.cb_subject_name,cs3.cb_subject_name
union all
select
cs1.cb_subject_name as one, cs2.cb_subject_name as two, cs3.cb_subject_name as three, cs4.cb_subject_name as four
from cb_subject cs1
join cb_subject cs2 on (cs2.cb_subject_no like concat(cs1.cb_subject_no,'%') and cs2.`level` = 2 )
join cb_subject cs3 on (cs3.cb_subject_no like concat(cs2.cb_subject_no,'%') and cs3.`level` = 3 )
join cb_subject cs4 on (cs4.cb_subject_no like concat(cs3.cb_subject_no,'%') and cs4.`level` = 4 )
join cb_quantity_summary cqs on (cqs.cb_subject_no = cs4.cb_subject_no and cqs.del_falg = 0 and cqs.project_id = #{projectId} and cqs.cb_stage = #{cbStage} )
where cs1.`level` = 1 and cs1.cb_subject_no = 'CL'
group by cs1.cb_subject_name,cs2.cb_subject_name,cs3.cb_subject_name,cs4.cb_subject_name
</select>
<select id="selectOtherSubjectCount" resultType="java.lang.Integer">
......
......@@ -134,12 +134,12 @@
<select id="getGainLossAnalysisById" resultType="com.dsk.cscec.domain.vo.CbGainLossAnalysisListVo">
select csu.id, csu.cb_name, csu.tax_exclusive_total, csu.cb_taxes_total, csu.tax_inclusive_total, csa.tax_inclusive_expense, csa.tax_exclusive_expense,
sum(cde.tender_control_sum_price) tenderSumPrice, sum(cde.exclude_tax_cb_sum_price) taxExcludeTenderSumPrice, sum(cde.include_tax_cb_sum_price) taxIncludeTenderSumPrice,
-- sum(cde.tender_control_sum_price) tenderSumPrice, sum(cde.exclude_tax_cb_sum_price) taxExcludeTenderSumPrice, sum(cde.include_tax_cb_sum_price) taxIncludeTenderSumPrice,
sum(csa1.tax_inclusive_expense) sumTaxInclusiveExpense, sum(csa1.tax_exclusive_expense) sumTaxExclusiveExpense
from cb_summary csu
left join cb_summary_actual csa on (csu.id = csa.cb_summary_id and csa.expense_date = #{expenseDate} AND csa.del_flag = 0)
left join cb_summary_actual csa1 on (csu.id = csa1.cb_summary_id and csa1.expense_date &lt;= #{expenseDate} AND csa1.del_flag = 0)
left join cb_direct_expense cde on (csu.project_id = cde.project_id and cde.del_flag = 0)
-- left join cb_direct_expense cde on (csu.project_id = cde.project_id and cde.del_flag = 0)
where csu.id = #{id} and csu.del_flag = 0
group by csu.id
order by csu.sort
......@@ -147,12 +147,12 @@
<select id="getGainLossAnalysisByParentId" resultType="com.dsk.cscec.domain.vo.CbGainLossAnalysisListVo">
select csu.id, csu.cb_name, csu.tax_exclusive_total, csu.cb_taxes_total, csu.tax_inclusive_total, csa.tax_inclusive_expense, csa.tax_exclusive_expense,
sum(cde.tender_control_sum_price) tenderSumPrice, sum(cde.exclude_tax_cb_sum_price) taxExcludeTenderSumPrice, sum(cde.include_tax_cb_sum_price) taxIncludeTenderSumPrice,
-- sum(cde.tender_control_sum_price) tenderSumPrice, sum(cde.exclude_tax_cb_sum_price) taxExcludeTenderSumPrice, sum(cde.include_tax_cb_sum_price) taxIncludeTenderSumPrice,
sum(csa1.tax_inclusive_expense) sumTaxInclusiveExpense, sum(csa1.tax_exclusive_expense) sumTaxExclusiveExpense
from cb_summary csu
left join cb_summary_actual csa on (csu.id = csa.cb_summary_id and csa.expense_date = #{expenseDate} AND csa.del_flag = 0)
left join cb_summary_actual csa1 on (csu.id = csa1.cb_summary_id and csa1.expense_date &lt;= #{expenseDate} AND csa1.del_flag = 0)
left join cb_direct_expense cde on (csu.project_id = cde.project_id and cde.del_flag = 0)
-- left join cb_direct_expense cde on (csu.project_id = cde.project_id and cde.del_flag = 0)
where csu.parent_id = #{parentId} and csu.del_flag = 0
group by csu.id
order by csu.sort
......
......@@ -274,6 +274,13 @@ export const pushFeedSummaryRowsApi = (data) => request({
data
});
//修改工程用量
export const editEngineeringQuantityApi = (data) => request({
url: "/cb/quantity/summary/editEngineeringQuantity",
method: "POST",
data
});
//工程项目信息
......@@ -383,8 +390,8 @@ export const getFieldExpensesOtherListApi = (params = {}) => request({
/**
* 成本汇总左侧一级菜单
* @param {*} params
* @returns
* @param {*} params
* @returns
*/
export const getCostSummaryMenuTreeApi = (params = {}) => request({
url: "/cbSummary/cbNameList",
......@@ -394,8 +401,8 @@ export const getCostSummaryMenuTreeApi = (params = {}) => request({
/**
* 成本汇总已添加成本月份
* @param {*} params
* @returns
* @param {*} params
* @returns
*/
export const getCostSummaryMonthListApi = (params = {}) => request({
url: "/cbSummary/expenseDateList",
......@@ -405,8 +412,8 @@ export const getCostSummaryMonthListApi = (params = {}) => request({
/**
* 获取成本汇总数据列表 懒加载
* @param {*} params
* @returns
* @param {*} params
* @returns
*/
export const getCostSummaryListApi = (params = {}) => request({
url: "/cbSummary/list",
......@@ -416,8 +423,8 @@ export const getCostSummaryListApi = (params = {}) => request({
/**
* 获取全量成本汇总列表
* @param {*} params
* @returns
* @param {*} params
* @returns
*/
export const getCostSummaryAllListApi = (params = {}) => request({
url: "/cbSummary/allList",
......@@ -427,8 +434,8 @@ export const getCostSummaryAllListApi = (params = {}) => request({
/**
* 锁定成本前提示未填项
* @param {*} params
* @returns
* @param {*} params
* @returns
*/
export const validateBeforeCostLockApi = (params = {}) => request({
url: "/cbSummary/getUnfilled",
......@@ -438,8 +445,8 @@ export const validateBeforeCostLockApi = (params = {}) => request({
/**
* 确定锁定成本
* @param {*} data
* @returns
* @param {*} data
* @returns
*/
export const setCostLockApi = (data = {}) => request({
url: "/cbSummary/lockActual",
......@@ -449,8 +456,8 @@ export const setCostLockApi = (data = {}) => request({
/**
* 获取已经锁定成本月份
* @param {*} params
* @returns
* @param {*} params
* @returns
*/
export const getLockMonthListApi = (params = {}) => request({
url: "/cbSummary/expenseDateList/locked",
......@@ -460,8 +467,8 @@ export const getLockMonthListApi = (params = {}) => request({
/**
* 成本汇总导出
* @param {*} data
* @returns
* @param {*} data
* @returns
*/
export const exportCostLockExcelApi = (data = {}) => request({
url: "/cbSummary/export",
......@@ -473,8 +480,8 @@ export const exportCostLockExcelApi = (data = {}) => request({
/**
* 编辑成本 保存成本
* @param {*} data
* @returns
* @param {*} data
* @returns
*/
export const saveCostModifyApi = (data = {}) => request({
url: "/cbSummary/editActual",
......
This source diff could not be displayed because it is too large. You can view the blob instead.
<svg xmlns="http://www.w3.org/2000/svg" fill="white" version="1.1" width="14" height="14" viewBox="0 0 14 14">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="14" height="14" viewBox="0 0 14 14">
<defs>
<clipPath id="master_svg0_634_008390">
<rect x="0" y="0" width="14" height="14" rx="0"/>
......@@ -8,25 +8,25 @@
<g>
<path
d="M1.0104570234375,2.9374589765625L1.0104570234375,11.9582959765625Q1.0104570234375,12.3854259765625,1.3125050234375,12.6875259765625Q1.6145490234375,12.9895259765625,2.0417070234375,12.9895259765625L11.9583740234375,12.9895259765625Q12.3855740234375,12.9895259765625,12.6875740234375,12.6875259765625Q12.9895740234375,12.3854259765625,12.9895740234375,11.9582859765625L12.9895740234375,2.9374539765625Q12.9895740234375,2.3808559765625,12.5959740234375,1.9872829765625Q12.2024740234375,1.5937089765625,11.6458740234375,1.5937089765625L2.3542070234375,1.5937089765625Q1.7976080234375,1.5937089765625,1.4040326234375,1.9872845765625Q1.0104570234375,2.3808599765625,1.0104570234375,2.9374589765625ZM2.0417070234375,12.0937259765625Q1.9062910234375,12.0937259765625,1.9062910234375,11.9582959765625L1.9062910234375,2.9374589765625Q1.9062910234375,2.7519259765625,2.0374820234374997,2.6207339765624997Q2.1686740234375,2.4895429765625,2.3542070234375,2.4895429765625L11.6458740234375,2.4895429765625Q11.8313740234375,2.4895429765625,11.9625740234375,2.6207339765624997Q12.0937740234375,2.7519249765625,12.0937740234375,2.9374579765625L12.0937740234375,11.9582959765625Q12.0937740234375,12.0937259765625,11.9583740234375,12.0937259765625L2.0417070234375,12.0937259765625Z"
fill-rule="evenodd" fill="#ffffff" fill-opacity="1"/>
fill-rule="evenodd" fill-opacity="1"/>
</g>
<g>
<path
d="M4.822917,1.3557511Q4.825,1.3341757,4.825,1.3125Q4.825,1.2681789,4.816353,1.2247094Q4.807707,1.18124,4.790746,1.140292Q4.773785,1.099345,4.749161,1.062493Q4.724538,1.025642,4.693198,0.994302Q4.661858,0.962962,4.625007,0.938339Q4.588155,0.913715,4.547208,0.896754Q4.50626,0.879793,4.4627906,0.871147Q4.4193211,0.8625,4.375,0.8625Q4.3306789,0.8625,4.2872094,0.871147Q4.24374,0.879793,4.202792,0.896754Q4.161845,0.913715,4.124993,0.938339Q4.088142,0.962962,4.056802,0.994302Q4.025462,1.025642,4.000839,1.062493Q3.976215,1.099345,3.959254,1.140292Q3.942293,1.18124,3.933647,1.2247094Q3.925,1.2681789,3.925,1.3125Q3.925,1.3341757,3.927083,1.3557511L3.927083,3.45675Q3.925,3.47832,3.925,3.5Q3.925,3.54432,3.933647,3.58779Q3.942293,3.63126,3.959254,3.67221Q3.976215,3.71315,4.000839,3.75001Q4.025462,3.78686,4.056802,3.8182Q4.088142,3.84954,4.124993,3.87416Q4.161845,3.89878,4.202792,3.91575Q4.24374,3.93271,4.2872094,3.94135Q4.3306789,3.95,4.375,3.95Q4.4193211,3.95,4.4627906,3.94135Q4.50626,3.93271,4.547208,3.91575Q4.588155,3.89878,4.625007,3.87416Q4.661858,3.84954,4.693198,3.8182Q4.724538,3.78686,4.749161,3.75001Q4.773785,3.71315,4.790746,3.67221Q4.807707,3.63126,4.816353,3.58779Q4.825,3.54432,4.825,3.5Q4.825,3.47832,4.822917,3.45675L4.822917,1.3557511Z"
fill-rule="evenodd" fill="#ffffff" fill-opacity="1"/>
fill-rule="evenodd" fill-opacity="1"/>
</g>
<g>
<path
d="M10.072917,1.3557511Q10.075,1.3341757,10.075,1.3125Q10.075,1.2681789,10.066353,1.2247094Q10.057707,1.18124,10.040746,1.140292Q10.023785,1.099345,9.999161,1.062493Q9.974538,1.025642,9.943198,0.994302Q9.911858,0.962962,9.875007,0.938339Q9.838155,0.913715,9.797208,0.896754Q9.75626,0.879793,9.7127906,0.871147Q9.6693211,0.8625,9.625,0.8625Q9.5806789,0.8625,9.5372094,0.871147Q9.49374,0.879793,9.452792,0.896754Q9.411845,0.913715,9.374993,0.938339Q9.338142,0.962962,9.306802,0.994302Q9.275462,1.025642,9.250839,1.062493Q9.226215,1.099345,9.209254,1.140292Q9.192293,1.18124,9.183647,1.2247094Q9.175,1.2681789,9.175,1.3125Q9.175,1.3341757,9.177083,1.3557511L9.177083,3.45675Q9.175,3.47832,9.175,3.5Q9.175,3.54432,9.183647,3.58779Q9.192293,3.63126,9.209254,3.67221Q9.226215,3.71315,9.250839,3.75001Q9.275462,3.78686,9.306802,3.8182Q9.338142,3.84954,9.374993,3.87416Q9.411845,3.89878,9.452792,3.91575Q9.49374,3.93271,9.5372094,3.94135Q9.5806789,3.95,9.625,3.95Q9.6693211,3.95,9.7127906,3.94135Q9.75626,3.93271,9.797208,3.91575Q9.838155,3.89878,9.875007,3.87416Q9.911858,3.84954,9.943198,3.8182Q9.974538,3.78686,9.999161,3.75001Q10.023785,3.71315,10.040746,3.67221Q10.057707,3.63126,10.066353,3.58779Q10.075,3.54432,10.075,3.5Q10.075,3.47832,10.072917,3.45675L10.072917,1.3557511Z"
fill-rule="evenodd" fill="#ffffff" fill-opacity="1"/>
fill-rule="evenodd" fill-opacity="1"/>
</g>
<g>
<ellipse cx="7" cy="7.875" rx="0.875" ry="0.875" fill="#ffffff" fill-opacity="1"/>
<ellipse cx="7" cy="7.875" rx="0.875" ry="0.875" fill-opacity="1"/>
</g>
<g transform="matrix(0,1,-1,0,14.875,-4.375)">
<path
d="M12.47396,4.862093L14.74727,6.174593Q14.79834,6.204078,14.84004,6.245775Q14.88174,6.28747,14.91122,6.33854Q14.94071,6.38961,14.95597,6.4465699999999995Q14.97123,6.50353,14.97123,6.5625L14.97123,9.1875Q14.97123,9.24647,14.95597,9.303429999999999Q14.94071,9.360389999999999,14.91122,9.41146Q14.88174,9.462530000000001,14.84004,9.50422Q14.79834,9.545919999999999,14.74727,9.57541L12.47396,10.88791Q12.42289,10.917390000000001,12.36593,10.932649999999999Q12.30897,10.94792,12.25,10.94792Q12.19103,10.94792,12.13407,10.932649999999999Q12.07711,10.917390000000001,12.02604,10.88791L9.752725,9.57541Q9.701656,9.545919999999999,9.6599584,9.50422Q9.61826079,9.462530000000001,9.5887761,9.41146Q9.5592914,9.360389999999999,9.544029,9.303429999999999Q9.5287667,9.24647,9.5287667,9.1875L9.5287666,6.5625Q9.5287666,6.50353,9.544029,6.4465699999999995Q9.5592914,6.38961,9.5887761,6.33854Q9.61826075,6.28747,9.6599584,6.245775Q9.701656,6.204077,9.752725,6.174593L12.02604,4.862093Q12.07711,4.8326080000000005,12.13407,4.817346Q12.19103,4.802083,12.25,4.802083Q12.30897,4.802083,12.36593,4.817346Q12.42289,4.8326080000000005,12.47396,4.862093L12.47396,4.862093ZM12.02604,5.637907L12.25,5.25L12.47396,5.637907L10.200642,6.95041L9.976683,6.5625L10.4246,6.5625L10.4246,9.1875L9.976683,9.1875L10.200642,8.79959L12.47396,10.11209L12.25,10.5L12.02604,10.11209L14.29936,8.79959L14.52332,9.1875L14.0754,9.1875L14.0754,6.5625L14.52332,6.5625L14.29936,6.95041L12.02604,5.637907Z"
fill="#ffffff" fill-opacity="1"/>
fill-opacity="1"/>
</g>
</g>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="16" height="16" viewBox="0 0 16 16"><defs><clipPath id="master_svg0_233_92225/11_04949"><rect x="0" y="0" width="16" height="16" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_233_92225/11_04949)"><g><path d="M6.5,14L6.5,11Q6.5,10.9507543,6.509607,10.9024549Q6.519215,10.854155,6.53806,10.808658Q6.556906,10.763161,6.584265,10.722215Q6.611625,10.681269,6.646447,10.646447Q6.681269,10.611625,6.722215,10.584265Q6.763161,10.556906,6.808658,10.53806Q6.854155,10.519214999999999,6.9024549,10.509607Q6.9507543,10.5,7,10.5L9,10.5Q9.04925,10.5,9.09754,10.509607Q9.14584,10.519214999999999,9.19134,10.53806Q9.23684,10.556906,9.27778,10.584265Q9.31873,10.611625,9.35355,10.646447Q9.38838,10.681269,9.41573,10.722215Q9.44309,10.763161,9.46194,10.808658Q9.48078,10.854155,9.49039,10.9024549Q9.5,10.9507543,9.5,11L9.5,14Q9.5,14.04925,9.49039,14.09754Q9.48078,14.14584,9.46194,14.19134Q9.44309,14.23684,9.41573,14.27778Q9.38838,14.31873,9.35355,14.35355Q9.31873,14.38837,9.27779,14.41573Q9.23684,14.44309,9.19134,14.46194Q9.14584,14.48078,9.09754,14.49039Q9.04925,14.5,9,14.5L7,14.5Q6.9507543,14.5,6.9024549,14.49039Q6.854155,14.48078,6.808658,14.46194Q6.763161,14.44309,6.722215,14.41573Q6.681269,14.38837,6.646447,14.35355Q6.611625,14.31873,6.584265,14.27778Q6.556906,14.23684,6.53806,14.19134Q6.519215,14.14584,6.509607,14.09754Q6.5,14.04925,6.5,14ZM7.5,11.5L7.5,13.5L8.5,13.5L8.5,11.5L7.5,11.5Z" fill="#FFFFFF" fill-opacity="1"/></g><g><rect x="2" y="3" width="12" height="8" rx="1" fill-opacity="0" stroke-opacity="1" stroke="#FFFFFF" fill="none" stroke-width="1"/></g><g transform="matrix(1,0.0000922808758332394,-0.00009228093404090032,1,0.0012919330765726045,-0.0003691235033329576)"><path d="M4,14.5L12.00001,14.5Q12.04926,14.5,12.09756,14.490393Q12.14586,14.480785000000001,12.19135,14.46194Q12.23685,14.443094,12.2778,14.415735Q12.31874,14.388375,12.35357,14.353553Q12.38839,14.318731,12.41575,14.277785Q12.44311,14.236839,12.46195,14.191342Q12.4808,14.145845,12.49041,14.0975451Q12.50001,14.0492457,12.50001,14Q12.50001,13.9507543,12.49041,13.9024549Q12.4808,13.854155,12.46195,13.808658Q12.44311,13.763161,12.41575,13.722215Q12.38839,13.681269,12.35357,13.646447Q12.31874,13.611625,12.2778,13.584265Q12.23685,13.556906,12.19135,13.53806Q12.14586,13.519214999999999,12.09756,13.509607Q12.04926,13.5,12.00001,13.5L4,13.5Q3.9507543,13.5,3.9024549,13.509607Q3.854155,13.519214999999999,3.808658,13.53806Q3.763161,13.556906,3.722215,13.584265Q3.681269,13.611625,3.646447,13.646447Q3.611625,13.681269,3.584265,13.722215Q3.556906,13.763161,3.5380599999999998,13.808658Q3.519215,13.854155,3.509607,13.9024549Q3.5,13.9507543,3.5,14Q3.5,14.0492457,3.509607,14.0975451Q3.519215,14.145845,3.5380599999999998,14.191342Q3.556906,14.236839,3.584265,14.277785Q3.611625,14.318731,3.646447,14.353553Q3.681269,14.388375,3.722215,14.415735Q3.763161,14.443094,3.808658,14.46194Q3.854155,14.480785000000001,3.9024549,14.490393Q3.9507543,14.5,4,14.5Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="1"/></g><g><path d="M11.85355,5.353553Q11.92388,5.283227,11.96194,5.191342Q12,5.0994562,12,5Q12,4.9507543,11.99039,4.9024549Q11.98078,4.854155,11.96194,4.808658Q11.94309,4.763161,11.91573,4.722215Q11.88837,4.681269,11.85355,4.646447Q11.81873,4.611625,11.77778,4.584265Q11.73684,4.556906,11.69134,4.53806Q11.64584,4.519215,11.59754,4.509607Q11.54925,4.5,11.5,4.5Q11.40054,4.5,11.30866,4.53806Q11.21677,4.57612,11.14645,4.646447L11.14626,4.646634L8.5,7.29289L7.35355,6.14645Q7.31873,6.11162,7.27778,6.08427Q7.23684,6.05691,7.19134,6.03806Q7.14584,6.01921,7.09754,6.00961Q7.04925,6,7,6Q6.95075,6,6.90245,6.00961Q6.85416,6.01921,6.80866,6.03806Q6.76316,6.05691,6.7222100000000005,6.08427Q6.68127,6.11162,6.64645,6.14645L4.646634,8.14626L4.646447,8.14645Q4.57612,8.21677,4.53806,8.30866Q4.5,8.40054,4.5,8.5Q4.5,8.54925,4.509607,8.59754Q4.519215,8.64584,4.53806,8.69134Q4.556906,8.73684,4.584265,8.77778Q4.611625,8.81873,4.646447,8.85355Q4.681269,8.88838,4.722215,8.91573Q4.763161,8.94309,4.808658,8.96194Q4.854155,8.98078,4.9024549,8.99039Q4.9507543,9,5,9Q5.0994562,9,5.191342,8.96194Q5.283227,8.92388,5.353553,8.85355L5.353741,8.85337L7,7.20711L8.14645,8.35355Q8.21677,8.42388,8.30866,8.46194Q8.40054,8.5,8.5,8.5Q8.59946,8.5,8.69134,8.46194Q8.78323,8.42388,8.85355,8.35355L11.85337,5.353741L11.85355,5.353553L11.85355,5.353553Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="1"/></g></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="14" height="14" viewBox="0 0 14 14"><defs><clipPath id="master_svg0_264_80210"><rect x="0" y="0" width="14" height="14" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_264_80210)"><g><path d="M5.625,12.25L5.625,9.625Q5.625,9.5757543,5.634607,9.5274549Q5.644215,9.479155,5.66306,9.433658Q5.681906,9.388161,5.709265,9.347215Q5.736625,9.306269,5.771447,9.271447Q5.806269,9.236625,5.847215,9.209265Q5.888161,9.181906,5.933658,9.16306Q5.979155,9.144214999999999,6.0274549,9.134607Q6.0757543,9.125,6.125,9.125L7.875,9.125Q7.92425,9.125,7.97254,9.134607Q8.02084,9.144214999999999,8.06634,9.16306Q8.11184,9.181906,8.15278,9.209265Q8.19373,9.236625,8.22855,9.271447Q8.26337,9.306269,8.29073,9.347215Q8.31809,9.388161,8.33694,9.433658Q8.35578,9.479155,8.36539,9.5274549Q8.375,9.5757543,8.375,9.625L8.375,12.25Q8.375,12.29925,8.36539,12.34755Q8.35578,12.39584,8.33694,12.44134Q8.31809,12.48684,8.29073,12.52778Q8.26337,12.56873,8.22855,12.60355Q8.19373,12.63838,8.15278,12.66573Q8.11184,12.69309,8.06634,12.71194Q8.02084,12.73078,7.97254,12.74039Q7.92425,12.75,7.875,12.75L6.125,12.75Q6.0757543,12.75,6.0274549,12.74039Q5.979155,12.73078,5.933658,12.71194Q5.888161,12.69309,5.847215,12.66573Q5.806269,12.63838,5.771447,12.60355Q5.736625,12.56873,5.709265,12.52778Q5.681906,12.48684,5.66306,12.44134Q5.644215,12.39584,5.634607,12.34755Q5.625,12.29925,5.625,12.25ZM6.625,10.125L6.625,11.75L7.375,11.75L7.375,10.125L6.625,10.125Z" fill-opacity="1"/></g><g><rect x="1.75" y="2.625" width="10.5" height="7" rx="1" fill-opacity="0" stroke-opacity="1" stroke="#86909C" stroke-width="1"/></g><g transform="matrix(1,0.0000922808758332394,-0.00009228093404090032,1,0.001130441442001029,-0.0003229830654163379)"><path d="M3.5,11.75L10.50001,11.75Q10.54926,11.75,10.59756,11.759607Q10.645859999999999,11.769214999999999,10.69135,11.78806Q10.73685,11.806906,10.7778,11.834265Q10.81874,11.861625,10.85356,11.896447Q10.888390000000001,11.931269,10.91575,11.972215Q10.943100000000001,12.013161,10.96195,12.058658Q10.9808,12.104155,10.990400000000001,12.1524549Q11.00001,12.2007543,11.00001,12.25Q11.00001,12.2992457,10.990400000000001,12.3475451Q10.9808,12.395845,10.96195,12.441342Q10.943100000000001,12.486839,10.91575,12.527785Q10.888390000000001,12.568731,10.85356,12.603553Q10.81874,12.638375,10.7778,12.665735Q10.73685,12.693094,10.69135,12.71194Q10.645859999999999,12.730785000000001,10.59756,12.740393Q10.54926,12.75,10.50001,12.75L3.5,12.75Q3.4507543,12.75,3.4024549,12.740393Q3.354155,12.730785000000001,3.308658,12.71194Q3.263161,12.693094,3.222215,12.665735Q3.181269,12.638375,3.146447,12.603553Q3.111625,12.568731,3.084265,12.527785Q3.056906,12.486839,3.0380599999999998,12.441342Q3.019215,12.395845,3.009607,12.3475451Q3,12.2992457,3,12.25Q3,12.2007543,3.009607,12.1524549Q3.019215,12.104155,3.0380599999999998,12.058658Q3.056906,12.013161,3.084265,11.972215Q3.111625,11.931269,3.146447,11.896447Q3.181269,11.861625,3.222215,11.834265Q3.263161,11.806906,3.308658,11.78806Q3.354155,11.769214999999999,3.4024549,11.759607Q3.4507543,11.75,3.5,11.75Z" fill-rule="evenodd" fill-opacity="1"/></g><g><path d="M10.41605,4.728553Q10.48638,4.658227,10.52444,4.566342Q10.5625,4.4744562,10.5625,4.375Q10.5625,4.3257543,10.55289,4.2774549Q10.54328,4.229155,10.52444,4.183658Q10.50559,4.138161,10.47823,4.097215Q10.45087,4.056269,10.41605,4.021447Q10.38123,3.986625,10.34028,3.959265Q10.29934,3.931906,10.25384,3.9130599999999998Q10.20834,3.894215,10.16004,3.884607Q10.11175,3.875,10.0625,3.875Q9.96304,3.875,9.87116,3.9130599999999998Q9.77927,3.95112,9.70895,4.021447L9.70876,4.021634L7.4375,6.29289L6.47855,5.333947Q6.44373,5.299124,6.40278,5.271765Q6.36184,5.244406,6.31634,5.22556Q6.27084,5.206715,6.22254,5.197107Q6.17425,5.1875,6.125,5.1875Q6.07575,5.1875,6.02745,5.197107Q5.97916,5.206715,5.93366,5.22556Q5.88816,5.244406,5.8472100000000005,5.271765Q5.80627,5.299124,5.77145,5.333947L4.021634,7.08376L4.021447,7.08395Q3.95112,7.15427,3.9130599999999998,7.24616Q3.875,7.3380399999999995,3.875,7.4375Q3.875,7.48675,3.884607,7.53504Q3.894215,7.58334,3.9130599999999998,7.62884Q3.931906,7.67434,3.959265,7.71528Q3.986625,7.75623,4.021447,7.79105Q4.056269,7.82588,4.097215,7.85323Q4.138161,7.88059,4.183658,7.89944Q4.229155,7.91829,4.2774549,7.92789Q4.3257543,7.9375,4.375,7.9375Q4.4744562,7.9375,4.566342,7.89944Q4.658227,7.8613800000000005,4.728553,7.79105L4.728741,7.79087L6.125,6.39461L7.08395,7.35355Q7.15427,7.4238800000000005,7.24616,7.46194Q7.3380399999999995,7.5,7.4375,7.5Q7.5369600000000005,7.5,7.62884,7.46194Q7.72073,7.4238800000000005,7.79105,7.35355L10.41587,4.728741L10.41605,4.728553L10.41605,4.728553Z" fill-rule="evenodd" fill-opacity="1"/></g></g></svg>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -130,7 +130,6 @@
width: 100% !important;
min-width: 128px;
font-size: 12px;
color: #fff !important;
padding-left: 24px;
}
.el-menu--inline .nest-menu .el-menu-item .svg-icon {
......@@ -143,7 +142,6 @@
align-items: center;
height: 36px;
line-height: 36px;
border: 1px solid #141b2f;
border-radius: 4px;
color: #fff;
margin-bottom: 8px;
......@@ -165,13 +163,11 @@
// menu hover
.el-menu-item.is-active {
// 点击菜单的颜色
background-color: #1e2c4c !important;
color: #fff !important;
border: 1px solid #2b3f69;
background-color: #fff !important;
color: #0081FF !important;
&:hover {
background-color: #1e2c4c !important;
color: #fff !important;
border: 1px solid #2b3f69;
background-color: #fff !important;
color: #0081FF !important;
}
&:before {
background: #fff !important;
......@@ -184,18 +180,17 @@
border-radius: 4px;
color: #fff !important;
&:hover {
background-color: #1e2c4c !important;
color: #fff !important;
border: 1px solid #2b3f69;
background-color: #fff !important;
color: #0081FF !important;
}
}
}
.sidebar-container .el-submenu .el-menu-item:hover,
.sidebar-container .nest-menu .el-submenu > .el-submenu__title:hover {
background-color: #1e2c4c !important;
color: #fff !important;
background-color: #fff !important;
color: #0081FF !important;
border-radius: 4px;
border: 1px solid #2b3f69;
}
// .sidebar-container .el-submenu .el-menu-item:before,
......@@ -351,11 +346,18 @@
.el-menu-item {
font-size: 14px;
padding-left: 32px !important;
&:hover{
background-color: #fff!important;
}
}
& > .secondary-menu-item {
.el-submenu__title {
padding-left: 32px !important;
background-color: unset!important;
&:hover{
background-color: #fff!important;
}
}
& > .el-menu--inline {
......@@ -363,6 +365,9 @@
.el-menu-item {
font-size: 14px;
padding-left: 56px !important;
&:hover{
background-color: #fff!important;
}
}
}
}
......
......@@ -37,14 +37,14 @@ $base-sub-menu-hover:#001528;
*/
// 央企颜色设置自定义
$base-menu-background:#141b2f;
$base-menu-background:#0067CC;
$base-menu-light-background: #fff; // 选中菜单的字体颜色
$base-logo-light-title-color: #fff; // 对应base-logo-title-color
$menuText:#FFFFFF;
$menuActiveText:#FFFFFF;
$subMenuActiveText:#f4f4f5; //https://github.com/ElemeFE/element/issues/12951
$menuBg:#141B2F;
$menuBg:#0067CC;
$menuHover:#263445;
$subMenuBg:#1f2d3d;
......
......@@ -5,7 +5,7 @@
<div class="custom-table-item">
<el-table v-if="tableDataTotal>0" class="custom-table" v-loading="comTableLoading" :data="tableData" element-loading-text="加载中"
ref="customTableRef" border fit highlight-current-row :default-sort="defaultSort?defaultSort:{}" @sort-change="sortChange"
@selection-change="selectionChange" @expand-change="expandChange" :cell-class-name="cellClassName" :cell-style="cellStyle"
@selection-change="selectionChange" @expand-change="expandChange" :cell-class-name="cellClassName" :cell-style="cellStyle" :header-cell-class-name="headerCellClassName"
:row-class-name="rowClassName" :row-style="rowStyle" :row-key="rowKey" :lazy="lazy" :load="loadFn" :tree-props="treeOptions"
:default-expand-all="defaultExpandAll" :indent="indent" :height="height" :maxHeight="comMaxHeight" v-sticky-header="stickyHeader">
......@@ -56,6 +56,10 @@ export default {
type: Function,
default: () => { }
},
headerCellClassName: {
type: Function,
default: () => { }
},
cellStyle: {
type: Function,
default: () => { }
......@@ -235,7 +239,7 @@ export default {
if (isFixedNumber && !resize) {
containerMaxHeight = this.maxHeight;
} else {
/**
/**
* @type {HTMLDivElement}
*/
const container = this.$el;
......@@ -248,7 +252,7 @@ export default {
this.comMaxHeight = containerMaxHeight ? `${containerMaxHeight}px` : null;
// 重新计算表格高度 有横向滚动条则需要减去滚动条高度差 16 - 6 有固定列的情况
if (containerMaxHeight) {
/**
/**
* @type {HTMLDivElement}
*/
const tableFixedHeader = this.$el.querySelector(".el-table__fixed-header-wrapper");
......@@ -635,6 +639,7 @@ export default {
box-shadow: unset;
}
}
/* 滚动条在最右侧时 */
&.is-scrolling-right {
/* 右侧固定列 */
......@@ -643,6 +648,19 @@ export default {
box-shadow: unset;
}
}
// 没有滚动条
&.is-scrolling-none {
& + .el-table__fixed {
box-shadow: unset;
}
/* 右侧固定列 */
& + .el-table__fixed + .el-table__fixed-right,
& + .el-table__fixed-right {
box-shadow: unset;
}
}
}
.el-table__fixed-right,
.el-table__fixed {
......
......@@ -59,6 +59,7 @@ export default {
},
//可访问data属性
created() {
console.log(this.tabs,"||||||||")
this.initSlidingBar();
},
//计算集
......
......@@ -69,7 +69,7 @@ export default {
height: 56px;
line-height: 56px;
background: #141b2f;
border-bottom: 1px solid #1a2743;
border-bottom: 1px solid rgba(255, 255, 255, 0.2);
text-align: center;
padding: 0px 18px;
box-sizing: border-box;
......
......@@ -55,6 +55,8 @@ import DictData from '@/components/DictData';
// 全局缩放
import ScreenScal from "@/utils/screenScal";
import { decimalFormat } from "@/utils/decimal";
// 全局方法挂载
Vue.prototype.getDicts = getDicts;
Vue.prototype.getConfigKey = getConfigKey;
......@@ -66,6 +68,7 @@ Vue.prototype.selectDictLabels = selectDictLabels;
Vue.prototype.download = download;
Vue.prototype.handleTree = handleTree;
Vue.prototype.$mitt = mitt();
Vue.prototype.$decimalFormat = (num) => decimalFormat(num);
// 全局组件挂载
Vue.component('DictTag', DictTag);
......
import Decimal from "decimal.js";
/**
* 全局方法 处理为特定的decimal 格式
* @param {*} num
*/
export const decimalFormat = (num) => {
// 处理特殊字符为字母的情况
const reg = /[a-zA-Z]/gmi;
if (reg.test(num) && num != undefined && num != null && isFinite(num)) {
return num;
} else if (!parseFloat(num)) {
return "-";
} else {
return add(num, 0, 4, 15, true);
}
};
/**
* 加法
* @param {*} num1
......@@ -12,7 +29,7 @@ export const add = (num1, num2, digit = 9, intLen = 20, omit = false) => {
const decimal1 = new Decimal(num1);
const decimal2 = new Decimal(num2);
const result = decimal1.plus(decimal2);
return omit ? result.toFixed(digit, Decimal.ROUND_UP) : result.toDecimalPlaces(digit, Decimal.ROUND_UP).toSignificantDigits(intLen).toString();
return omit ? result.toFixed(digit, Decimal.ROUND_HALF_UP) : result.toDecimalPlaces(digit, Decimal.ROUND_HALF_UP).toSignificantDigits(intLen).toString();
};
/**
......@@ -27,7 +44,7 @@ export const subtract = (num1, num2, digit = 9, intLen = 20, omit = false) => {
const decimal1 = new Decimal(num1);
const decimal2 = new Decimal(num2);
const result = decimal1.minus(decimal2);
return omit ? result.toFixed(digit, Decimal.ROUND_UP) : result.toDecimalPlaces(digit, Decimal.ROUND_UP).toSignificantDigits(intLen).toString();
return omit ? result.toFixed(digit, Decimal.ROUND_HALF_UP) : result.toDecimalPlaces(digit, Decimal.ROUND_HALF_UP).toSignificantDigits(intLen).toString();
};
/**
......@@ -42,7 +59,7 @@ export const multiply = (num1, num2, digit = 9, intLen = 20, omit = false) => {
const decimal1 = new Decimal(num1);
const decimal2 = new Decimal(num2);
const result = decimal1.times(decimal2);
return omit ? result.toFixed(digit, Decimal.ROUND_UP) : result.toDecimalPlaces(digit, Decimal.ROUND_UP).toSignificantDigits(intLen).toString();
return omit ? result.toFixed(digit, Decimal.ROUND_HALF_UP) : result.toDecimalPlaces(digit, Decimal.ROUND_HALF_UP).toSignificantDigits(intLen).toString();
};
/**
......@@ -57,7 +74,7 @@ export const divide = (num1, num2, digit = 9, intLen = 20, omit = false) => {
const decimal1 = new Decimal(num1);
const decimal2 = new Decimal(num2);
const result = decimal1.dividedBy(decimal2);
return omit ? result.toFixed(digit, Decimal.ROUND_UP) : result.toDecimalPlaces(digit, Decimal.ROUND_UP).toSignificantDigits(intLen).toString();
return omit ? result.toFixed(digit, Decimal.ROUND_HALF_UP) : result.toDecimalPlaces(digit, Decimal.ROUND_HALF_UP).toSignificantDigits(intLen).toString();
};
// 检测结果是否是负数
......
......@@ -173,6 +173,10 @@ export default {
let startTime = ''
let endTime = new Date()
switch (value) {
case '昨日':
startTime = new Date(endTime.getTime() - 3600 * 1000 * 24 * 1)
timeStr = [this.formatDate(startTime), this.formatDate(endTime)]
break;
case '今日':
startTime = new Date(endTime.getTime())
timeStr = [this.formatDate(startTime), this.formatDate(endTime)]
......
......@@ -387,14 +387,14 @@
}
}
if(key === '2'){
this.queryParams.maxStockPercent=''
// this.paramsData.maxStockPercent=''
if(name === this.cgblName){
this.cgblName=''
this.queryParams.minStockPercent=''
this.queryParams.maxStockPercent=''
}else {
this.cgblName=name;
}
this.queryParams.maxStockPercent=''
this.paramsData.maxStockPercent=''
if(this.cgblName){
if(name === '100%'){
this.queryParams.minStockPercent=1
}
......@@ -411,14 +411,11 @@
this.queryParams.minStockPercent=0.01
this.queryParams.maxStockPercent=0.05
}
}else {
this.queryParams.minStockPercent=''
this.queryParams.maxStockPercent=''
}
if(this.paramsData){
if(!this.paramsData.combineId){
this.paramsData=this.queryParams
}
// if(!this.paramsData.combineId){
this.paramsData=this.queryParams
// }
this.paramsData.pageNum =1
this.queryParams.pageNum =1
}
......
......@@ -170,12 +170,27 @@ export default {
{
title: '供应商合作记录', pathName: '', children: [
{ title: '准入情况', pathName: 'accessCondition' },
{ title: '供应商考评', pathName: 'assessMent' },
{ title: '管理人员信息', pathName: 'managerial' },
{ title: '设备信息', pathName: 'equipment' },
{ title: '工程考察情况记录', pathName: 'projectRecord' },
{ title: '施工业绩', pathName: 'constructionPerformance' },
{ title: '在施工程情况', pathName: 'constructionSituation' },
{ title: '生活保障基地', pathName: 'livingSecurity' },
{ title: '合作记录', pathName: 'cooperationRecord' },
]
},
{
title: '供应商评价信息', pathName: '', children: [
{ title: '履约评价', pathName: 'honourAgreement' },
{ title: '信用评价', pathName: 'creditRate' },
{ title: '年度考评', pathName: 'assessMent' },
]
},
{
title: '供应商不良行为', pathName: '', children: [
{ title: '不良行为列表', pathName: 'badlist' },
]
},
]
}
],
......@@ -434,6 +449,7 @@ export default {
},
handleItem(item) {
console.log(item)
let obj = item;
for (var i in this.sideRoute1) {
if (this.sideRoute1[i].children) {
......
......@@ -66,8 +66,12 @@
:company-id="companyId"></consulting-agency-cooperation>
<!-- 2、准入情况 -->
<access-condition v-if="currentPath.pathName=='accessCondition'" :company-id="companyId" :companyInfo="companyInfo"></access-condition>
<!-- 2、供应商考评 -->
<assessMent class="no-padding" v-if="currentPath.pathName=='assessMent'" :company-id="companyId" :companyInfo="companyInfo"></assessMent>
<!-- 管理人员信息 -->
<Managerial v-if="currentPath.pathName=='managerial'" :company-id="companyId" :companyInfo="companyInfo"></Managerial>
<!-- 设备信息 -->
<equipment v-if="currentPath.pathName=='equipment'" :company-id="companyId" :companyInfo="companyInfo"></equipment>
<!-- 工程考察情况记录 -->
<project-record v-if="currentPath.pathName=='projectRecord'" :company-id="companyId" :companyInfo="companyInfo"></project-record>
<!-- 3、供应商合作记录 -->
<cooperation-record v-if="currentPath.pathName=='cooperationRecord'" :company-id="companyId"
:company-name="companyName" :ctm-id="ctmId"></cooperation-record>
......@@ -75,6 +79,16 @@
<construction-performance v-if="currentPath.pathName=='constructionPerformance'" :company-id="companyId"></construction-performance>
<!-- 5、在施工程情况 -->
<construction-situation v-if="currentPath.pathName=='constructionSituation'" :company-id="companyId"></construction-situation>
<!-- 生活保障基地 -->
<living-security v-if="currentPath.pathName=='livingSecurity'" :company-id="companyId"></living-security>
<!-- 履约评价 -->
<honour-agreement v-if="currentPath.pathName=='honourAgreement'" :company-id="companyId"></honour-agreement>
<!-- 信用评价 -->
<credit-rate v-if="currentPath.pathName=='creditRate'" :company-id="companyId"></credit-rate>
<!-- 年度考评 -->
<assessMent class="no-padding" v-if="currentPath.pathName=='assessMent'" :company-id="companyId" :companyInfo="companyInfo"></assessMent>
<!-- 不良行为列表 -->
<badlist class="no-padding" v-if="currentPath.pathName=='badlist'" :company-id="companyId" :companyInfo="companyInfo"></badlist>
</template>
<template v-if="customerId && isCustomer">
<!-- 商务信息 -->
......@@ -146,10 +160,20 @@ import DecisionMaking from "./decisionMaking"; //决策链条
import Gjjl from "../../project/projectList/component/gjjl"; //跟进记录
import ConsultingAgencyCooperation from "@/views/detail/party-a/internalCooperation/consultingAgencyCooperation"; //内部合作 咨询机构合作
import AccessCondition from "@/views/detail/party-a/internalCooperation/accessCondition"; //内部合作 准入情况
import assessMent from "@/views/supplier/supplierlist/assessment"; //供应商考评
import Managerial from "@/views/detail/party-a/internalCooperation/managerial"; //内部合作 管理人员信息
import equipment from "@/views/detail/party-a/internalCooperation/equipment"; //内部合作 设备信息
import projectRecord from "@/views/detail/party-a/internalCooperation/projectRecord"; //内部合作 工程考察情况记录
import badlist from "@/views/detail/party-a/internalCooperation/badlist"; //不良行为列表
import assessMent from "@/views/supplier/supplierlist/assessment"; //年度考评
import CooperationRecord from "@/views/detail/party-a/internalCooperation/cooperationRecord"; //内部合作 供应商合作记录
import ConstructionPerformance from "@/views/detail/party-a/internalCooperation/constructionPerformance"; //内部合作 施工业绩
import ConstructionSituation from "@/views/detail/party-a/internalCooperation/constructionSituation"; //内部合作 在施工程情况
import livingSecurity from "@/views/detail/party-a/internalCooperation/livingSecurity"; //内部合作 生活保障基地
import honourAgreement from "@/views/detail/party-a/ratelist/honourAgreement"; //供应商评价信息 履约评价
import creditRate from "@/views/detail/party-a/ratelist/creditRate"; //供应商评价信息 信用评价
import {
urbanInvestmentPage,
} from '@/api/detail/party-a/urbanLnvestment';
......@@ -157,6 +181,11 @@ import skeleton from './component/skeleton';
export default {
name: 'PartyA',
components: {
honourAgreement,
creditRate,
livingSecurity,
equipment,
projectRecord,
Header,
SideBar,
Overview,
......@@ -201,11 +230,13 @@ export default {
ConsultingAgencyCooperation,
AccessCondition,
assessMent,
badlist,
CooperationRecord,
CooperativeConstructionUnit,
CooperativeGroup,
ConstructionPerformance,
ConstructionSituation,
Managerial,
skeleton
},
data() {
......
<template>
<!--设备信息-->
<div class="supplier">
<div class="search-supplier">
<div class="title_wrap i">
<div class="enterprise_title">
设备信息
</div>
</div>
</div>
<div class="table-supplier i">
<div class="table-item-jf table-item-jf1 empty-table" v-if="!tableData.length && !isSkeleton">
<img class="item-jf-img" src="@/assets/images/kong.png" alt="">
<div class="item-jf-titel">暂无相关数据</div>
<div class="item-jf-text">抱歉,暂无数据,试试更换搜索条件吧</div>
</div>
<skeleton v-if="isSkeleton"></skeleton>
<div class="table-item-jf table-item" v-if="!isSkeleton&&tableData.length>0">
<el-table :data="tableData" :header-cell-style="{ background:'#f0f3fa',color: 'rgba(35,35,35,0.8)'}"
v-sticky-header.always="{offsetTop : '-16px',offsetBottom : '-15px'}" class="table-item1 fixed-table" border highlight-current-row
:header-row-class-name="setHeaderRow" :cell-class-name="setCellClass" :row-class-name="setRowClass" :header-cell-class-name="setCellClass"
ref="theOwnerListTable">
<el-table-column type="index" label="序号" width="60" :resizable="false">
<template slot-scope="scope">
<span>{{(pageNum - 1) *pageSize + scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="客商代码" width="160" prop="name1" :resizable="false">
</el-table-column>
<el-table-column label="设备种类" :resizable="false" width="100">
<template slot-scope="scope">
{{scope.row.name5||"--"}}
</template>
</el-table-column>
<el-table-column label="型号" :resizable="false" width="100">
<template slot-scope="scope">
{{scope.row.name22||"--"}}
</template>
</el-table-column>
<el-table-column label="设备数量" width="100" :resizable="false">
<template slot-scope="scope">
{{scope.row.name4||"--"}}
</template>
</el-table-column>
<el-table-column label="已使用年限" width="100" :resizable="false">
<template slot-scope="scope">
{{scope.row.name4||"--"}}
</template>
</el-table-column>
<el-table-column label="当年使用情况" width="100" :resizable="false">
<template slot-scope="scope">
{{scope.row.name7||"--"}}
</template>
</el-table-column>
<el-table-column label="考察项目" min-width="120" :resizable="false">
<template slot-scope="scope">
{{scope.row.name3||"--"}}
</template>
</el-table-column>
<el-table-column label="考察公司" min-width="120" :resizable="false">
<template slot-scope="scope">
{{scope.row.name2||"--"}}
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination clearfix" v-show="total>pageSize">
<el-pagination background :page-size="pageSize" :current-page.sync="pageNum" @current-change="handleCurrentChange" layout="prev, pager, next"
:total="total">
</el-pagination>
</div>
</div>
</div>
</template>
<script>
import { encodeStr } from "@/assets/js/common.js";
import "@/assets/styles/public.scss";
import "@/assets/styles/supplierlist.scss";
import skeleton from '@/views/project/projectList/component/skeleton';
export default {
name: 'assessment',
components:{skeleton},
data(){
return{
encodeStr,
tableData:[
{name1:'345462018',name22:'3948-91',name2:'华北公司',name3:'北京航华科贸项目',name4:'19',name5:'机械',name7:'正常',name6:'19.4'},
{name1:'345462017',name22:'3948-91',name2:'中建一局集团第三建筑有限公司',name3:'朝阳区崔各庄乡大望京村2号地626地块1号楼工程',name4:'81',name5:'机械',name7:'正常',name6:'82'},
{name1:'345462017',name22:'3948-91',name2:'总承包公司',name3:'晋中万达广场项目',name4:'82',name5:'机械',name7:'正常',name6:'80'},
{name1:'345462017',name22:'3948-91',name2:'总承包公司',name3:'晋中万达广场项目',name4:'80',name5:'机械',name7:'正常',name6:'96'},
{name1:'345462017',name22:'3948-91',name2:'中建一局集团第五建筑有限公司',name3:'运河国际生态城一期百合座',name4:'96',name5:'机械',name7:'正常',name6:'100'},
{name1:'345462017',name22:'3948-91',name2:'中建一局集团第五建筑有限公司',name3:'北京新机场安置房郑西.鑫苑名家(二期)项目施工总承包工程',name4:'100',name5:'机械',name7:'正常',name6:'82'},
{name1:'345462017',name22:'3948-91',name2:'中建一局集团第五建筑有限公司',name3:'胶州鼎峰中央公园c26#楼项目德州鲁班御景国际二期工程及地下车库一标段',name4:'82',name5:'机械',name7:'正常',name6:'95'},
{name1:'345462017',name22:'3948-91',name2:'中建一局集团第五建筑有限公司',name3:'济南转山项目B-2地块',name4:'95',name5:'机械',name7:'正常',name6:'91'},
{name1:'345462017',name22:'3948-91',name2:'中建一局集团第五建筑有限公司',name3:'济南未来城A5地块房地产开发项目(西地块一期)',name4:'91',name5:'机械',name7:'正常',name6:'88'},
{name1:'345462017',name22:'3948-91',name2:'中建一局集团第五建筑有限公司',name3:'盐城万达广场项目部',name4:'84',name5:'机械',name7:'正常',name6:'84'},
{name1:'345462017',name22:'3948-91',name2:'中建一局集团第五建筑有限公司',name3:'济南雪山项目A04地块工程总承包',name4:'84',name5:'机械',name7:'正常',name6:'84'},
{name1:'345462017',name22:'3948-91',name2:'中建一局集团第五建筑有限公司',name3:'合肥整机智能制造生产线',name4:'84',name5:'机械',name7:'正常',name6:'95'},
{name1:'345462017',name22:'3948-91',name2:'中建一局集团第五建筑有限公司',name3:'清华附中凯文国际学校工程武汉新城四新项目C地块一期总包工程',name4:'95',name5:'机械',name7:'正常',name6:'83'},
{name1:'345462017',name22:'3948-91',name2:'中建一局集团第五建筑有限公司',name3:'合肥京东方医院项目',name4:'86',name5:'机械',name7:'正常',name6:'95'},
{name1:'345462017',name22:'3948-91',name2:'中建一局集团第五建筑有限公司',name3:'长春吾悦广场住宅区土建安装工程(一标段)',name4:'98',name5:'机械',name7:'正常',name6:'86'},
{name1:'345462017',name22:'3948-91',name2:'中建一局集团第五建筑有限公司',name3:'中国机械设备工程股份有限公司总部综合楼工程',name4:'83',name5:'机械',name7:'正常',name6:'98'},
{name1:'345462017',name22:'3948-91',name2:'中建一局集团第五建筑有限公司',name3:'郑州航空港经济综合实验区(郑州新郑综合保税区)河东第六棚户区第五标段2#地块',name4:'92',name5:'机械',name7:'正常',name6:'83'},
],
isSkeleton:false,
total:2,
pageSize:10,
pageNum:1,
}
},
methods: {
handleCurrentChange() {
},
setHeaderRow() {
return "owner-table-list-header";
},
setCellClass({ row, column, rowIndex, columnIndex }) {
if (columnIndex == 1) {
return "enterprise-name-column";
}
},
setRowClass({ row, rowIndex }) {
return "enterprise-name-row";
},
}
}
</script>
<style scoped>
.supplier{
padding: 0;
}
</style>
<template>
<!--生活保障基地-->
<div class="supplier">
<div class="search-supplier">
<div class="title_wrap i">
<div class="enterprise_title">
生活保障基地
</div>
</div>
</div>
<div class="table-supplier i">
<div class="table-item-jf table-item-jf1 empty-table" v-if="!tableData.length && !isSkeleton">
<img class="item-jf-img" src="@/assets/images/kong.png" alt="">
<div class="item-jf-titel">暂无相关数据</div>
<div class="item-jf-text">抱歉,暂无数据,试试更换搜索条件吧</div>
</div>
<skeleton v-if="isSkeleton"></skeleton>
<div class="table-item-jf table-item" v-if="!isSkeleton&&tableData.length>0">
<el-table :data="tableData" :header-cell-style="{ background:'#f0f3fa',color: 'rgba(35,35,35,0.8)'}"
v-sticky-header.always="{offsetTop : '-16px',offsetBottom : '-15px'}" class="table-item1 fixed-table" border highlight-current-row
:header-row-class-name="setHeaderRow" :cell-class-name="setCellClass" :row-class-name="setRowClass" :header-cell-class-name="setCellClass"
ref="theOwnerListTable">
<el-table-column type="index" label="序号" width="60" :resizable="false">
<template slot-scope="scope">
<span>{{(pageNum - 1) *pageSize + scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="地址" width="160" prop="area" :resizable="false">
</el-table-column>
<el-table-column label="建筑面积(㎡)" :resizable="false" width="160">
<template slot-scope="scope">
{{scope.row.name6||"--"}}
</template>
</el-table-column>
<el-table-column label="到期年限" width="160" :resizable="false">
<template slot-scope="scope">
{{scope.row.name1||"--"}}
</template>
</el-table-column>
<el-table-column label="当前状况" width="160" :resizable="false">
<template slot-scope="scope">
{{scope.row.name5||"--"}}
</template>
</el-table-column>
<el-table-column label="考察项目" min-width="120" :resizable="false">
<template slot-scope="scope">
{{scope.row.name3||"--"}}
</template>
</el-table-column>
<el-table-column label="考察公司" min-width="120" :resizable="false">
<template slot-scope="scope">
{{scope.row.name2||"--"}}
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination clearfix" v-show="total>pageSize">
<el-pagination background :page-size="pageSize" :current-page.sync="pageNum" @current-change="handleCurrentChange" layout="prev, pager, next"
:total="total">
</el-pagination>
</div>
</div>
</div>
</template>
<script>
import { encodeStr } from "@/assets/js/common.js";
import "@/assets/styles/public.scss";
import "@/assets/styles/supplierlist.scss";
import skeleton from '@/views/project/projectList/component/skeleton';
export default {
name: 'assessment',
components:{skeleton},
data(){
return{
encodeStr,
tableData:[
{area:'北京朝阳区',name1:'2018',name2:'华北公司',name3:'北京航华科贸项目',name4:'19',name5:'使用中',name6:'19.4'},
{area:'北京朝阳区',name1:'2017',name2:'中建一局集团第三建筑有限公司',name3:'朝阳区崔各庄乡大望京村2号地626地块1号楼工程',name4:'81',name5:'使用中',name6:'82'},
{area:'北京朝阳区',name1:'2017',name2:'总承包公司',name3:'晋中万达广场项目',name4:'82',name5:'使用中',name6:'80'},
{area:'北京朝阳区',name1:'2017',name2:'总承包公司',name3:'晋中万达广场项目',name4:'80',name5:'使用中',name6:'96'},
{area:'北京朝阳区',name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'运河国际生态城一期百合座',name4:'96',name5:'使用中',name6:'100'},
{area:'北京朝阳区',name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'北京新机场安置房郑西.鑫苑名家(二期)项目施工总承包工程',name4:'100',name5:'使用中',name6:'82'},
{area:'北京朝阳区',name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'胶州鼎峰中央公园c26#楼项目德州鲁班御景国际二期工程及地下车库一标段',name4:'82',name5:'使用中',name6:'95'},
{area:'北京朝阳区',name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'济南转山项目B-2地块',name4:'95',name5:'使用中',name6:'91'},
{area:'北京朝阳区',name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'济南未来城A5地块房地产开发项目(西地块一期)',name4:'91',name5:'使用中',name6:'88'},
{area:'北京朝阳区',name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'盐城万达广场项目部',name4:'84',name5:'使用中',name6:'84'},
{area:'北京朝阳区',name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'济南雪山项目A04地块工程总承包',name4:'84',name5:'使用中',name6:'84'},
{area:'北京朝阳区',name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'合肥整机智能制造生产线',name4:'84',name5:'使用中',name6:'95'},
{area:'北京朝阳区',name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'清华附中凯文国际学校工程武汉新城四新项目C地块一期总包工程',name4:'95',name5:'使用中',name6:'83'},
{area:'北京朝阳区',name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'合肥京东方医院项目',name4:'86',name5:'使用中',name6:'95'},
{area:'北京朝阳区',name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'长春吾悦广场住宅区土建安装工程(一标段)',name4:'98',name5:'使用中',name6:'86'},
{area:'北京朝阳区',name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'中国机械设备工程股份有限公司总部综合楼工程',name4:'83',name5:'使用中',name6:'98'},
{area:'北京朝阳区',name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'郑州航空港经济综合实验区(郑州新郑综合保税区)河东第六棚户区第五标段2#地块',name4:'92',name5:'使用中',name6:'83'},
],
isSkeleton:false,
total:2,
pageSize:10,
pageNum:1,
}
},
methods: {
handleCurrentChange() {
},
setHeaderRow() {
return "owner-table-list-header";
},
setCellClass({ row, column, rowIndex, columnIndex }) {
if (columnIndex == 1) {
return "enterprise-name-column";
}
},
setRowClass({ row, rowIndex }) {
return "enterprise-name-row";
},
}
}
</script>
<style scoped>
.supplier{
padding: 0;
}
</style>
<template>
<!--供应商考评-->
<div class="supplier">
<div class="search-supplier">
<div class="title_wrap i">
<div class="enterprise_title">
管理人员信息
</div>
</div>
</div>
<div class="table-supplier i">
<div class="table-item-jf table-item-jf1 empty-table" v-if="!tableData.length && !isSkeleton">
<img class="item-jf-img" src="@/assets/images/kong.png" alt="">
<div class="item-jf-titel">暂无相关数据</div>
<div class="item-jf-text">抱歉,暂无数据,试试更换搜索条件吧</div>
</div>
<skeleton v-if="isSkeleton"></skeleton>
<div class="table-item-jf table-item" v-if="!isSkeleton&&tableData.length>0">
<el-table :data="tableData" :header-cell-style="{ background:'#f0f3fa',color: 'rgba(35,35,35,0.8)'}"
v-sticky-header.always="{offsetTop : '-16px',offsetBottom : '-15px'}" class="table-item1 fixed-table" border highlight-current-row
:header-row-class-name="setHeaderRow" :cell-class-name="setCellClass" :row-class-name="setRowClass" :header-cell-class-name="setCellClass"
ref="theOwnerListTable">
<el-table-column type="index" label="序号" width="60" :resizable="false">
<template slot-scope="scope">
<span>{{(pageNum - 1) *pageSize + scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="客商代码" width="160" prop="name1" :resizable="false">
</el-table-column>
<el-table-column label="职务" :resizable="false" width="160">
<template slot-scope="scope">
{{scope.row.name5||"--"}}
</template>
</el-table-column>
<el-table-column label="数量" width="160" :resizable="false">
<template slot-scope="scope">
{{scope.row.name4||"--"}}
</template>
</el-table-column>
<el-table-column label="考察项目" min-width="120" :resizable="false">
<template slot-scope="scope">
{{scope.row.name3||"--"}}
</template>
</el-table-column>
<el-table-column label="考察公司" min-width="120" :resizable="false">
<template slot-scope="scope">
{{scope.row.name2||"--"}}
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination clearfix" v-show="total>pageSize">
<el-pagination background :page-size="pageSize" :current-page.sync="pageNum" @current-change="handleCurrentChange" layout="prev, pager, next"
:total="total">
</el-pagination>
</div>
</div>
</div>
</template>
<script>
import { encodeStr } from "@/assets/js/common.js";
import "@/assets/styles/public.scss";
import "@/assets/styles/supplierlist.scss";
import skeleton from '@/views/project/projectList/component/skeleton';
export default {
name: 'assessment',
components:{skeleton},
data(){
return{
encodeStr,
tableData:[
{name1:'2018',name2:'华北公司',name3:'北京航华科贸项目',name4:'19',name5:'项目经理',name6:'19.4'},
{name1:'2017',name2:'中建一局集团第三建筑有限公司',name3:'朝阳区崔各庄乡大望京村2号地626地块1号楼工程',name4:'81',name5:'项目经理',name6:'82'},
{name1:'2017',name2:'总承包公司',name3:'晋中万达广场项目',name4:'82',name5:'项目经理',name6:'80'},
{name1:'2017',name2:'总承包公司',name3:'晋中万达广场项目',name4:'80',name5:'项目经理',name6:'96'},
{name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'运河国际生态城一期百合座',name4:'96',name5:'项目经理',name6:'100'},
{name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'北京新机场安置房郑西.鑫苑名家(二期)项目施工总承包工程',name4:'100',name5:'项目经理',name6:'82'},
{name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'胶州鼎峰中央公园c26#楼项目德州鲁班御景国际二期工程及地下车库一标段',name4:'82',name5:'项目经理',name6:'95'},
{name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'济南转山项目B-2地块',name4:'95',name5:'项目经理',name6:'91'},
{name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'济南未来城A5地块房地产开发项目(西地块一期)',name4:'91',name5:'项目经理',name6:'88'},
{name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'盐城万达广场项目部',name4:'84',name5:'项目经理',name6:'84'},
{name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'济南雪山项目A04地块工程总承包',name4:'84',name5:'项目经理',name6:'84'},
{name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'合肥整机智能制造生产线',name4:'84',name5:'项目经理',name6:'95'},
{name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'清华附中凯文国际学校工程武汉新城四新项目C地块一期总包工程',name4:'95',name5:'项目经理',name6:'83'},
{name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'合肥京东方医院项目',name4:'86',name5:'项目经理',name6:'95'},
{name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'长春吾悦广场住宅区土建安装工程(一标段)',name4:'98',name5:'项目经理',name6:'86'},
{name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'中国机械设备工程股份有限公司总部综合楼工程',name4:'83',name5:'项目经理',name6:'98'},
{name1:'2017',name2:'中建一局集团第五建筑有限公司',name3:'郑州航空港经济综合实验区(郑州新郑综合保税区)河东第六棚户区第五标段2#地块',name4:'92',name5:'项目经理',name6:'83'},
],
isSkeleton:false,
total:2,
pageSize:10,
pageNum:1,
}
},
methods: {
handleCurrentChange() {
},
setHeaderRow() {
return "owner-table-list-header";
},
setCellClass({ row, column, rowIndex, columnIndex }) {
if (columnIndex == 1) {
return "enterprise-name-column";
}
},
setRowClass({ row, rowIndex }) {
return "enterprise-name-row";
},
}
}
</script>
<style scoped>
.supplier{
padding: 0;
}
</style>
......@@ -3,7 +3,7 @@
<div class="app-container MonitoringDynamics">
<div class="title_wrap">
<div class="enterprise_title">
风险监控动态
司法风险监控动态
</div>
</div>
<div class="search">
......@@ -51,23 +51,6 @@
</div>
</div>
</div>
<div class="search-item">
<div class="label">工商风险</div>
<div class="main-right">
<div class="select-popper">
<el-checkbox-group v-model="gsfx">
<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>
<!--<span :class="{ color_text: gsfx.length }">工商风险{{gsfx.length > 0 ? gsfx.length:''}}<i class="el-icon-caret-bottom"></i></span>-->
<!--<el-select ref="tenderTypeSelect" v-model="gsfx" class="select-multiple" collapse-tags multiple placeholder="请选择">-->
<!--<el-option v-for="(i,index) in selectList1" :key="index" :label="i.dimensionName" :value="i.dimensionName">-->
<!--<el-checkbox style="width: 100%;" :label="i.dimensionName" @change="changeGsfx(i)">{{i.dimensionName}}</el-checkbox>-->
<!--</el-option>-->
<!--</el-select>-->
</div>
</div>
</div>
<div class="search-item">
<div class="label">风险级别</div>
<div class="main-right">
......@@ -880,5 +863,19 @@
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>
This diff is collapsed.
<!-- 表格组件 -->
<template>
<div class="infoTable-container">
<h2 v-if="title !== '' && isSubTitle" class="infoTable-title">
{{ title }}
</h2>
<el-form class="infoTable-form" label-position="left">
<template v-for="(item, index) in list">
<el-form-item :style="item.span?{width: `${100/(24/item.span)}%`}:{}" :label="item.name" :label-width="labelWidth?labelWidth+'px':'130px'" :key="index" :class="[
{ 'infoTable-form-view': item.style },
{ 'infoTable-form-item': !item.style },
{ 'infoTable-form-row': item.rowstyle }
]">
<div>
<template v-if="item.slot === true">
<slot :name="item.prop" :data="obj"></slot>
</template>
<span v-else> {{ obj[item.prop] ?obj[item.prop] !==""?item.formatter?item.formatter(obj[item.prop]):obj[item.prop]:'-' :'-' }}</span>
</div>
</el-form-item>
</template>
</el-form>
<!--<div v-else class="no-data">-->
<!--<div class="no-data-box" v-if="show">-->
<!--<img :src="noData" alt="暂时没有找到相关数据" />-->
<!--<span>暂时没有找到相关数据</span>-->
<!--</div>-->
<!--</div>-->
</div>
</template>
<script>
export default {
name: "InfoTable",
components: {
},
props: {
list: {
type: Array,
default: () => [],
},
title: {
type: String,
default: "",
},
obj: {
type: Object,
default: () => { }
},
labelWidth: {
type: Number,
default: null
},
isSubTitle: {
type: Boolean,
default: false,
},
},
data() {
return {
show:false,
// 当前移入单元格内容
noData: require("@/assets/images/detail/noData.png")
};
},
created() {
},
mounted(){
this.show = true;
},
methods: {
},
};
</script>
<style lang="scss" scoped>
.infoTable-container {
.infoTable-title {
font-size: 16px;
font-family: Microsoft YaHei-Bold, Microsoft YaHei;
font-weight: bold;
padding-left: 8px;
border-left: 2px solid #58637B;
color: #000000;
text-shadow: 0px 0px 10px rgba(0, 37, 106, 0.10000000149011612);
margin: 0 0 16px 0;
}
.infoTable-form {
display: flex;
flex-wrap: wrap;
border-left: 1px solid #e5e9f5;
border-top: 1px solid #e5e9f5;
border-collapse: collapse;
.infoTable-form-item {
width: 50%;
flex: auto;
margin-bottom: 0px;
border-right: 1px solid #e5e9f5;
border-bottom: 1px solid #e5e9f5;
font-family: Microsoft YaHei-Regular, Microsoft YaHei;
font-size: 13px;
}
.infoTable-form-view {
width: 100%;
flex: auto;
margin-bottom: 0px;
border-right: 1px solid #e5e9f5;
border-bottom: 1px solid #e5e9f5;
font-family: Microsoft YaHei-Regular, Microsoft YaHei;
font-size: 13px;
}
.infoTable-form-row {
width: 33%;
flex: auto;
margin-bottom: 0px;
border-right: 1px solid #e5e9f5;
border-bottom: 1px solid #e5e9f5;
font-family: Microsoft YaHei-Regular, Microsoft YaHei;
font-size: 13px;
}
::v-deep .el-form-item__label {
height: 100%;
background-color: #F0F3FA;
padding: 8px 12px 8px 12px;
font-size: 13px;
font-weight: normal;
color: rgba(35,35,35,0.8);
display: flex;
align-items: center;
line-height: normal;
}
::v-deep .el-form-item__content {
padding-left: 12px;
font-size: 13px;
color: #232323;
}
::v-deep .el-form-item__content {
border-left: 1px solid #e5e9f5;
height: 100%;
display: flex;
align-items: center;
}
::v-deep .el-col {
border-bottom: 1px solid #e5e9f5;
}
}
.no-data {
font-size: 14px;
font-family: Microsoft YaHei-Regular, Microsoft YaHei;
font-weight: 400;
color: #999999;
text-shadow: 0px 0px 10px rgba(0, 37, 106, 0.10000000149011612);
max-width: 1200px;
height: 328px;
display: flex;
justify-content: center;
align-items: center;
background: #ffffff;
border-radius: 0px 0px 0px 0px;
opacity: 1;
border: 1px solid #eeeeee;
.no-data-box {
display: flex;
flex-direction: column;
align-items: center;
img {
width: 64px;
height: 79px;
margin-bottom: 16px;
}
}
}
::v-deep .el-form-item__content {
line-height: 22px;
padding: 6px 4px;
}
}
</style>
......@@ -44,12 +44,34 @@
<el-table-column prop="cbSubject" label="成本科目" width="130"></el-table-column>
<el-table-column prop="tenderControlUnitPrice" label="招标控制单价" width="120"></el-table-column>
<el-table-column prop="tenderControlSumPrice" label="招标控制合价" width="120"></el-table-column>
<el-table-column prop="excludeTaxCbUnitPrice" label="不含税成本单价" width="122"></el-table-column>
<el-table-column prop="excludeTaxCbSumPrice" label="不含税成本合计" width="122"></el-table-column>
<el-table-column prop="cbTaxSum" label="成本税金合计" width="120"></el-table-column>
<el-table-column prop="includeTaxCbUnitPrice" label="含税成本单价" width="120"></el-table-column>
<el-table-column prop="includeTaxCbSumPrice" label="含税成本合价" width="120"></el-table-column>
<el-table-column prop="sumPriceDeviation" label="合价偏差" width="120"></el-table-column>
<el-table-column prop="excludeTaxCbUnitPrice" label="不含税成本单价" width="122">
</el-table-column>
<el-table-column prop="excludeTaxCbSumPrice" label="不含税成本合计" width="122">
<template slot-scope="scope">
{{$decimalFormat(scope.row.excludeTaxCbSumPrice)}}
</template>
</el-table-column>
<el-table-column prop="cbTaxSum" label="成本税金合计" width="120">
<template slot-scope="scope">
{{$decimalFormat(scope.row.cbTaxSum)}}
</template>
</el-table-column>
<el-table-column prop="includeTaxCbUnitPrice" label="含税成本单价" width="120">
<template slot-scope="scope">
{{$decimalFormat(scope.row.includeTaxCbUnitPrice)}}
</template>
</el-table-column>
<el-table-column prop="includeTaxCbSumPrice" label="含税成本合价" width="120">
<template slot-scope="scope">
{{$decimalFormat(scope.row.includeTaxCbSumPrice)}}
</template>
</el-table-column>
<el-table-column prop="sumPriceDeviation" label="合价偏差" width="120">
<template slot-scope="scope">
{{$decimalFormat(scope.row.sumPriceDeviation)}}
</template>
</el-table-column>
</el-table-column>
<el-table-column label="盈亏率" width="100" prop="profitLossRatio"></el-table-column>
<el-table-column label="标准费用项" width="100" prop="standardCbItem"></el-table-column>
......
......@@ -43,7 +43,7 @@
</div>
</template>
<script>
import InfoTable from '../../../../component/infoTable';
import InfoTable from '../../../component/infoTable';
import { getCbProjectInfo } from "@/api/projectCostLedger";
export default {
name: "projectInformation",
......@@ -237,7 +237,6 @@ export default {
try {
const result = await getCbProjectInfo(params);
if (result.code == 200) {
console.log(result.data)
this.forInfo=result.data;
}
} catch (error) {
......
<template>
<el-dialog title="修改工程量" :visible="comPushProjectUseDialog" width="480px" class="push-project-use-dialog"
@close="dialogClose" @open="dialogOpen" :close-on-click-modal="false" :destroy-on-close="true">
<div class="dialog-body-content">
<el-form :model="pushForm" ref="pushForm" :rules="rules" class="push-form">
<el-form-item label="分包项目名称">
<el-input :value="pushForm.projectName" :disabled="true"></el-input>
</el-form-item>
<el-form-item label="成本科目">
<el-input :value="pushForm.cbSubjectName" :disabled="true"></el-input>
</el-form-item>
<el-form-item label="名称">
<el-input :value="pushForm.cbName" :disabled="true"></el-input>
</el-form-item>
<el-form-item label="编码">
<el-input :value="pushForm.companyNo" :disabled="true"></el-input>
</el-form-item>
<el-form-item label="IPM本月工程量" prop="ipmProjectCode">
<el-input v-model="pushForm.quantities" :disabled="true"></el-input>
</el-form-item>
<!-- 修改后工程量-->
<el-form-item label="修改后工程量" prop="pushQuantities">
<el-input v-model="pushForm.pushQuantities" placeholder="请填写需要展示的工程量"></el-input>
</el-form-item>
</el-form>
</div>
<!-- 底部按钮 -->
<div class="dialog-footer-content">
<div class="footer-btn cancel-submit" @click="cancelSubmit">取消</div>
<div class="footer-btn ok-submit" @click="pushResult">确定修改</div>
</div>
</el-dialog>
</template>
<script>
import { subtract, targetIsNegative, add } from "@/utils/decimal";
import { cloneDeep } from 'lodash-es';
export default {
name: "pushProjectUseDialog",
model: {
prop: "pushProjectUseDialog",
event: "close"
},
props: {
pushProjectUseDialog: {
type: Boolean,
default: false
},
isEntityMaterials: {
type: Boolean,
default: false
},
rowData: {
type: Object,
default: () => ({})
}
},
watch: {
pushProjectUseDialog: {
handler(newValue, oldValue) {
this.comPushProjectUseDialog = newValue;
}
},
rowData: {
handler(newValue, oldValue) {
const _temp = newValue ? newValue : {};
this.pushForm = cloneDeep({ ...this.pushForm, ..._temp });
}
}
},
data() {
return {
comPushProjectUseDialog: this.pushProjectUseDialog,
pushForm: {
id: "",
pushQuantities: "",
cbSubjectName: "",
cbName: "",
companyNo: "",
quantities: "",
projectName: "",
},
rules: {
pushQuantities: [
{ required: true, trigger: ["blur", "change"], message: "请填写需要展示的工程量", whitespace: true }
]
}
};
},
//可访问data属性
created() {
},
//计算集
computed: {
},
//方法集
methods: {
// 验证需推送工程量
pushQuantitiesValidator(maxValue) {
return [{
trigger: ['blur', 'change'], validator: (rule, value, callback) => {
const reg = /^(?!0\d)(?!0+$)(?!0*\.0*$)\d+(\.\d+)?$/;
if (!reg.test(value)) return callback(new Error("请输入正确的工程量"));
const _maxValue = maxValue ? maxValue : 0;
if (targetIsNegative(subtract(_maxValue, value))) return callback(new Error("注:推送工程量不得大于实际产生的总工程量"));
callback();
}
}];
},
clearValidate() {
const form = this.$refs["pushForm"];
if (form) form.clearValidate();
},
dialogClose() {
this.$emit("dialogClose");
this.pushForm = this.$options.data.call(this).pushForm;
this.clearValidate();
this.$emit("close", false);
},
dialogOpen() {
},
cancelSubmit() {
this.comPushProjectUseDialog = false;
},
//推送工程量
pushResult() {
this.$refs["pushForm"].validate(flag => {
if (flag) {
const { id, pushQuantities } = cloneDeep(this.pushForm);
this.$emit("submitEditData", {
id,
pushQuantities,
});
}
});
}
},
}
</script>
<style lang="scss" scoped>
.push-project-use-dialog {
::v-deep .el-dialog {
margin-top: 0px !important;
margin: 0px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
.el-dialog__header {
height: 56px;
padding: 0px 20px;
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #eeeeee;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
.el-dialog__title {
color: #232323;
font-size: 16px;
font-weight: bold;
}
.el-dialog__headerbtn {
position: static;
width: 16px;
height: 16px;
}
}
.el-dialog__body {
padding: 0px;
.dialog-body-content {
padding: 24px 20px;
box-sizing: border-box;
.push-form {
.el-form-item {
&.is-error {
margin-bottom: 33px;
}
margin-bottom: 16px;
display: flex;
align-items: center;
.el-form-item__label {
width: 98px;
min-width: 98px;
line-height: 20px;
color: rgba(35, 35, 35, 0.8);
font-weight: 350;
font-size: 14px;
text-align: right;
padding-right: 0px;
margin-right: 16px;
white-space: nowrap;
}
.el-form-item__content {
width: 100%;
line-height: 32px;
.el-input {
&.is-disabled {
.el-input__inner {
background: #fff;
color: rgba(35, 35, 35, 0.8);
}
}
}
.el-input__inner {
line-height: 32px;
height: 32px;
border-radius: 2px;
padding: 0px 7px;
::placeholder {
color: #c0c4cc !important;
}
}
}
}
}
}
.dialog-footer-content {
padding: 16px 20px;
box-sizing: border-box;
border-top: 1px solid #eeeeee;
display: flex;
align-items: center;
justify-content: flex-end;
.footer-btn {
height: 32px;
padding: 0px 16px;
font-size: 14px;
font-weight: 350;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: center;
border-radius: 4px;
cursor: pointer;
&.cancel-submit {
color: rgba(35, 35, 35, 0.8);
background: #fff;
border: 1px solid #dcdfe6;
margin-right: 12px;
}
&.ok-submit {
color: #fff;
background: #0081ff;
}
}
}
}
}
}
</style>
......@@ -39,6 +39,7 @@
:tableLoading="tableLoading"
:tableData="tableData1"
:forData="forData1"
:indexFixed="true"
:MaxPage=500
:tableDataTotal="tableDataTotal1"
:queryParams="queryParams"
......@@ -96,7 +97,7 @@ export default {
{label: '占比', prop: 'proportion', slot: true},
],
forData1: [
{label: '清单内容', prop: 'itemContent',minWidth:'220'},
{label: '清单内容', prop: 'itemContent',minWidth:'220', fixed: "left"},
{label: '工作内容、做法/规格型号/施工现场配置说明', prop: 'workContent',minWidth:'302'},
{label: '单位', prop: 'unit',minWidth:'115'},
{label: '不含税单价', prop: 'unitPriceExcludingTax',minWidth:'115'},
......
......@@ -60,7 +60,11 @@ export default {
//计算集
computed: {
checkHasChidren() {
return !!(this.menuItem && this.menuItem?.children?.length);
let state=false
if(this.menuItem?.children){
state=this.menuItem?.children[0].nodeName ? true : false
}
return !!(this.menuItem && this.menuItem?.children?.length && state);
},
},
//方法集
......
This diff is collapsed.
This diff is collapsed.
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