Commit 58b96fc6 authored by yht15023815643's avatar yht15023815643

Merge branch 'V20231129-中建一局二公司' of http://192.168.60.201/root/dsk-operate-sys...

Merge branch 'V20231129-中建一局二公司' of http://192.168.60.201/root/dsk-operate-sys into V20231129-中建一局二公司
parents 3ac28478 59aecc57
...@@ -204,6 +204,7 @@ tenant: ...@@ -204,6 +204,7 @@ tenant:
- cb_scene_expense_month - cb_scene_expense_month
- cb_subject - cb_subject
- cb_project_other - cb_project_other
- s_materiel_project
# MyBatisPlus配置 # MyBatisPlus配置
# https://baomidou.com/config/ # https://baomidou.com/config/
......
...@@ -56,6 +56,36 @@ ...@@ -56,6 +56,36 @@
<artifactId>elasticsearch-java</artifactId> <artifactId>elasticsearch-java</artifactId>
<version>8.7.0</version> <version>8.7.0</version>
</dependency> </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>--> <!-- <dependency>-->
<!-- <groupId>com.tencentcloudapi</groupId>--> <!-- <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("物料接口调用失败!");
}
}
...@@ -53,5 +53,7 @@ public class CbSubject implements Serializable { ...@@ -53,5 +53,7 @@ public class CbSubject implements Serializable {
private Date createTime; private Date createTime;
private Integer sort; 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;
}
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> {
}
package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.SMaterielProject;
public interface ISMaterielProjectService extends IService<SMaterielProject> {
}
...@@ -59,27 +59,36 @@ public class CbQuantitySummaryServiceImpl extends ServiceImpl<CbQuantitySummaryM ...@@ -59,27 +59,36 @@ public class CbQuantitySummaryServiceImpl extends ServiceImpl<CbQuantitySummaryM
List<Map<String, Object>> resultList = new ArrayList<>(); List<Map<String, Object>> resultList = new ArrayList<>();
List<Map<String, Object>> list = baseMapper.selectSubject(bo); List<Map<String, Object>> list = baseMapper.selectSubject(bo);
if (!ObjectUtils.isEmpty(list)) { 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( .collect(
Collectors.groupingBy(item -> item.get("one").toString(), Collectors.groupingBy(item -> item.get("one").toString(),
Collectors.groupingBy(item -> item.get("two").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<>(); Map<String, Object> resMap = new HashMap<>();
List<Map<String, Object>> resList = new ArrayList<>(); List<Map<String, Object>> resList = new ArrayList<>();
resMap.put("name", "房建类成本科目"); resMap.put("name", "房建类成本科目");
resMap.put("sort", 1); 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<>(); Map<String, Object> oneMap = new HashMap<>();
List<Map<String, Object>> oneList = new ArrayList<>(); List<Map<String, Object>> oneList = new ArrayList<>();
oneMap.put("name", entry.getKey()); oneMap.put("name", entry.getKey());
oneMap.put("sort", cbSubjectMapper.selectOne(Wrappers.<CbSubject>lambdaQuery().eq(CbSubject::getCbSubjectName, entry.getKey())).getSort()); 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<>(); Map<String, Object> twoMap = new HashMap<>();
List<Map<String, Object>> twoList = new ArrayList<>(); List<Map<String, Object>> twoList = new ArrayList<>();
twoMap.put("name", twoEntry.getKey()); 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<>(); Map<String, Object> threeMap = new HashMap<>();
List<Map<String, Object>> threeList = new ArrayList<>();
threeMap.put("name", threeEntry.getKey()); 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); twoList.add(threeMap);
} }
twoMap.put("children", twoList); twoMap.put("children", twoList);
......
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
...@@ -3,12 +3,12 @@ ...@@ -3,12 +3,12 @@
<mapper namespace="com.dsk.cscec.mapper.CbQuantitySummaryMapper"> <mapper namespace="com.dsk.cscec.mapper.CbQuantitySummaryMapper">
<insert id="batchInsert" parameterType="com.dsk.cscec.domain.CbQuantitySummary"> <insert id="batchInsert" parameterType="com.dsk.cscec.domain.CbQuantitySummary">
INSERT INTO cscec_bms.cb_quantity_summary 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, 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) combined_price, combined_price_tax, brand_name, bid_source, remark, cb_project_file_id)
VALUES VALUES
<foreach collection="list" item="item" separator="," > <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.jobContent},#{item.calculationRule},#{item.unit},#{item.materialDescription},#{item.guidePrice},
#{item.bidUnitPrice},#{item.unitPriceDifference},#{item.quantity},#{item.combinedPrice},#{item.combinedPriceTax}, #{item.bidUnitPrice},#{item.unitPriceDifference},#{item.quantity},#{item.combinedPrice},#{item.combinedPriceTax},
#{item.brandName},#{item.bidSource},#{item.remark},#{item.cbProjectFileId}) #{item.brandName},#{item.bidSource},#{item.remark},#{item.cbProjectFileId})
...@@ -17,13 +17,46 @@ ...@@ -17,13 +17,46 @@
<select id="selectSubject" resultType="java.util.Map"> <select id="selectSubject" resultType="java.util.Map">
select 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 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 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 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} ) 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 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>
<select id="selectOtherSubjectCount" resultType="java.lang.Integer"> <select id="selectOtherSubjectCount" resultType="java.lang.Integer">
......
...@@ -59,6 +59,7 @@ export default { ...@@ -59,6 +59,7 @@ export default {
}, },
//可访问data属性 //可访问data属性
created() { created() {
console.log(this.tabs,"||||||||")
this.initSlidingBar(); this.initSlidingBar();
}, },
//计算集 //计算集
......
...@@ -173,6 +173,10 @@ export default { ...@@ -173,6 +173,10 @@ export default {
let startTime = '' let startTime = ''
let endTime = new Date() let endTime = new Date()
switch (value) { switch (value) {
case '昨日':
startTime = new Date(endTime.getTime() - 3600 * 1000 * 24 * 1)
timeStr = [this.formatDate(startTime), this.formatDate(endTime)]
break;
case '今日': case '今日':
startTime = new Date(endTime.getTime()) startTime = new Date(endTime.getTime())
timeStr = [this.formatDate(startTime), this.formatDate(endTime)] timeStr = [this.formatDate(startTime), this.formatDate(endTime)]
......
<!-- 表格组件 -->
<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>
...@@ -289,7 +289,7 @@ export default { ...@@ -289,7 +289,7 @@ export default {
includeNowMonth(time) { includeNowMonth(time) {
return this.originMonthList.find(item => item.expenseDate == time); return this.originMonthList.find(item => item.expenseDate == time);
}, },
// 按项目汇总 按成本科目汇总 // 按项目汇总 按成本科目汇总
currentCategoryChange(category) { currentCategoryChange(category) {
if (category == this.currentCategory) return; if (category == this.currentCategory) return;
this.currentCategory = category; this.currentCategory = category;
...@@ -386,6 +386,10 @@ export default { ...@@ -386,6 +386,10 @@ export default {
const result = await getCostSummaryMenuTreeApi(params); const result = await getCostSummaryMenuTreeApi(params);
if (result.code == 200 && result.data instanceof Array) { if (result.code == 200 && result.data instanceof Array) {
const _tempArray = result.data; const _tempArray = result.data;
if(_tempArray.length === 0){
this.currentCategory=2
return this.init(this.comProjectDetailInfo);
}
const _tempMenu = { const _tempMenu = {
id: 0, id: 0,
cbName: this.currentCategory == 1 ? "成本汇总" : "房建类成本科目", cbName: this.currentCategory == 1 ? "成本汇总" : "房建类成本科目",
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
</div> </div>
</template> </template>
<script> <script>
import InfoTable from '../../../../component/infoTable'; import InfoTable from '../../../component/infoTable';
import { getCbProjectInfo } from "@/api/projectCostLedger"; import { getCbProjectInfo } from "@/api/projectCostLedger";
export default { export default {
name: "projectInformation", name: "projectInformation",
......
...@@ -92,7 +92,17 @@ ...@@ -92,7 +92,17 @@
<el-table-column label="税金类型" width="130" prop="taxType"> <el-table-column label="税金类型" width="130" prop="taxType">
<template slot-scope="scope">{{scope.row.taxType || '--'}}</template> <template slot-scope="scope">{{scope.row.taxType || '--'}}</template>
</el-table-column> </el-table-column>
<el-table-column label="本月工程量" width="130" prop="projectVolume">
<template slot-scope="scope">
<template v-if="isinput">
<el-input v-model="scope.row.projectVolume "></el-input>
</template>
<template v-else>{{scope.row.projectVolume || '--'}}</template>
</template>
</el-table-column>
<el-table-column label="截止本月工程量" width="130" prop="currentProjectVolume">
<template slot-scope="scope">{{scope.row.suncurrentProjectVolume || '--'}}</template>
</el-table-column>
<el-table-column label="本月成本发生比例" width="150" prop="monthCostRate"> <el-table-column label="本月成本发生比例" width="150" prop="monthCostRate">
<template slot-scope="scope"> <template slot-scope="scope">
<template v-if="isinput"> <template v-if="isinput">
...@@ -102,34 +112,28 @@ ...@@ -102,34 +112,28 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="成本合价" width="130" prop="costEffective"> <el-table-column label="成本合价" width="130" prop="costEffective">
<template slot-scope="scope">{{scope.row.costEffective || '--'}}</template>
</el-table-column>
<el-table-column label="本月工程量" width="130" prop="projectVolume">
<template slot-scope="scope"> <template slot-scope="scope">
<template v-if="isinput"> <template v-if="isinput">
<el-input v-model="scope.row.projectVolume "></el-input> <el-input v-model="scope.row.costEffective "></el-input>
</template> </template>
<template v-else>{{scope.row.projectVolume || '--'}}</template> <template v-else>{{scope.row.costEffective || '--'}}</template>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="截止本月工程量" width="130" prop="currentProjectVolume"> <!--<el-table-column label="本月推送工程量" width="130" prop="submitProjectVolume">-->
<template slot-scope="scope">{{scope.row.suncurrentProjectVolume || '--'}}</template> <!--<template slot-scope="scope">{{scope.row.submitProjectVolume || '&#45;&#45;'}}</template>-->
</el-table-column> <!--</el-table-column>-->
<el-table-column label="本月推送工程量" width="130" prop="submitProjectVolume">
<template slot-scope="scope">{{scope.row.submitProjectVolume || '--'}}</template>
</el-table-column>
<el-table-column label="备注" width="130" prop="remarks"> <el-table-column label="备注" width="130" prop="remarks">
<template slot-scope="scope">{{scope.row.remarks || '--'}}</template> <template slot-scope="scope">{{scope.row.remarks || '--'}}</template>
</el-table-column> </el-table-column>
<el-table-column label="是否推送" width="130"> <!--<el-table-column label="是否推送" width="130">-->
<template slot-scope="scope">{{scope.row.pushTime?'是':'否'}}</template> <!--<template slot-scope="scope">{{scope.row.pushTime?'是':'否'}}</template>-->
</el-table-column> <!--</el-table-column>-->
<el-table-column label="操作" width="130" fixed="right"> <!--<el-table-column label="操作" width="130" fixed="right">-->
<template slot-scope="scope"> <!--<template slot-scope="scope">-->
<span class="wordprimary" @click="pushwork(scope.row)">推送工程量</span> <!--<span class="wordprimary" @click="pushwork(scope.row)">推送工程量</span>-->
</template> <!--</template>-->
</el-table-column> <!--</el-table-column>-->
</el-table> </el-table>
</div> </div>
...@@ -532,6 +536,18 @@ ...@@ -532,6 +536,18 @@
width: 100%; width: 100%;
height: 100%; height: 100%;
.meafixed-table{
// 解决拖拽表格滚动条,错位问题
::v-deep .el-table__header-wrapper{
padding-right: 16px!important; // 滚动条宽度
}
::v-deep .el-table--border th.el-table__cell.gutter:last-of-type {
display: block!important;
width: 16px!important;
}
}
::v-deep .tored{ ::v-deep .tored{
/*background: rgb(255,236,236) !important;*/ /*background: rgb(255,236,236) !important;*/
} }
......
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
:tableLoading="tableLoading" :tableLoading="tableLoading"
:tableData="tableData1" :tableData="tableData1"
:forData="forData1" :forData="forData1"
:indexFixed="true"
:MaxPage=500 :MaxPage=500
:tableDataTotal="tableDataTotal1" :tableDataTotal="tableDataTotal1"
:queryParams="queryParams" :queryParams="queryParams"
...@@ -96,7 +97,7 @@ export default { ...@@ -96,7 +97,7 @@ export default {
{label: '占比', prop: 'proportion', slot: true}, {label: '占比', prop: 'proportion', slot: true},
], ],
forData1: [ forData1: [
{label: '清单内容', prop: 'itemContent',minWidth:'220'}, {label: '清单内容', prop: 'itemContent',minWidth:'220', fixed: "left"},
{label: '工作内容、做法/规格型号/施工现场配置说明', prop: 'workContent',minWidth:'302'}, {label: '工作内容、做法/规格型号/施工现场配置说明', prop: 'workContent',minWidth:'302'},
{label: '单位', prop: 'unit',minWidth:'115'}, {label: '单位', prop: 'unit',minWidth:'115'},
{label: '不含税单价', prop: 'unitPriceExcludingTax',minWidth:'115'}, {label: '不含税单价', prop: 'unitPriceExcludingTax',minWidth:'115'},
......
...@@ -83,46 +83,54 @@ export default { ...@@ -83,46 +83,54 @@ export default {
{ {
value: "basicEngineeringInformation", value: "basicEngineeringInformation",
name: "工程项目信息", name: "工程项目信息",
disabled:false,
id: v4() id: v4()
}, },
{ {
value: "directCost", value: "directCost",
name: "直接费成本", name: "直接费成本",
disabled:false,
cbType: 0, cbType: 0,
id: v4() id: v4()
}, },
{ {
value: "feedSummary", value: "feedSummary",
name: "工料汇总", name: "工料汇总",
disabled:false,
cbType: 1, cbType: 1,
id: v4() id: v4()
}, },
{ {
name: "措施项目", name: "措施项目",
value: "measureItem", value: "measureItem",
disabled:false,
cbType: 2, cbType: 2,
id: v4() id: v4()
}, },
{ {
name: "其他项目", name: "其他项目",
value: "otherItems", value: "otherItems",
disabled:false,
cbType: 3, cbType: 3,
id: v4() id: v4()
}, },
{ {
name: "现场经费", name: "现场经费",
value: "fieldExpenses", value: "fieldExpenses",
disabled:false,
cbType: 4, cbType: 4,
id: v4() id: v4()
}, },
{ {
name: "成本汇总", name: "成本汇总",
value: "cost", value: "cost",
disabled:false,
cbType: 5, cbType: 5,
id: v4() id: v4()
}, },
{ {
name: "盈亏分析对比", name: "盈亏分析对比",
disabled:false,
value: "profitAndLoss", value: "profitAndLoss",
cbType: 1, cbType: 1,
id: v4() id: v4()
......
...@@ -171,25 +171,47 @@ ...@@ -171,25 +171,47 @@
<span>{{protitle}}</span> <span>{{protitle}}</span>
</div> </div>
<el-form class="popform" label-width="97px" :model="queryParam" :rules="rules" ref="ruleForm"> <el-form class="popform" label-width="97px" :model="queryParam" :rules="rules" ref="ruleForm">
<el-form-item label="项目名称" class="row"> <el-form-item label="成本计划" class="row">
<el-input type="text" v-model="queryParam.projectName" placeholder="请输入完整的项目名称"></el-input> <el-select placeholder="请选择成本计划" v-model="cbjh">
</el-form-item> <el-option v-for="(item,index) in cbjhlist" :label="item.label" :value="item.value" :key="index"></el-option>
<el-form-item label="IPM项目编码" class="row">
<el-input type="text" placeholder="请输入IPM项目编码" v-model="queryParam.ipmProjectNo">
<template slot="append"><div class="pro-getbtn" @click="getipmProjectNo">获取数据</div></template>
</el-input>
</el-form-item>
<el-form-item label="文件名称" class="row">
<el-input type="text" placeholder="请输入文件名称" v-model="queryParam.projectFileName"></el-input>
</el-form-item>
<el-form-item label="成本阶段" class="row" prop="cbStage">
<el-checkbox v-model="ischeck" v-if="isedit" class="checkcb"></el-checkbox>
<el-select placeholder="请选择成本阶段" v-model="queryParam.cbStage" :disabled="!ischeck">
<el-option v-for="(item,index) in cbStagelist" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<template v-if="cbjh === '已有成本计划'">
<el-form-item label="项目名称" class="row">
<el-input type="text" v-model="queryParam.projectName" placeholder="请输入完整的项目名称"></el-input>
</el-form-item>
<el-form-item label="IPM项目编码" class="row">
<el-input type="text" placeholder="请输入IPM项目编码" v-model="queryParam.ipmProjectNo">
<template slot="append"><div class="pro-getbtn" @click="getipmProjectNo">获取数据</div></template>
</el-input>
</el-form-item>
<el-form-item label="文件名称" class="row">
<el-input type="text" placeholder="请输入文件名称" v-model="queryParam.projectFileName"></el-input>
</el-form-item>
<el-form-item label="成本阶段" class="row" prop="cbStage">
<el-checkbox v-model="ischeck" v-if="isedit" class="checkcb"></el-checkbox>
<el-select placeholder="请选择成本阶段" v-model="queryParam.cbStage" :disabled="!ischeck">
<el-option v-for="(item,index) in cbStagelist" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>
</el-select>
</el-form-item>
</template>
<template v-if="cbjh === '暂无成本计划'">
<el-form-item label="项目名称" class="row">
<el-input type="text" v-model="queryParam.projectName" placeholder="请输入完整的项目名称"></el-input>
</el-form-item>
<el-form-item label="IPM项目编码" class="row">
<el-input type="text" placeholder="请输入IPM项目编码" v-model="queryParam.ipmProjectNo">
<template slot="append"><div class="pro-getbtn" @click="getipmProjectNo">获取数据</div></template>
</el-input>
</el-form-item>
</template>
</el-form > </el-form >
<div class="popbot"> <div class="popbot" v-if="cbjh === '暂无成本计划'">
<div class="btn btn_cancel h32" @click="dialogVisible = false">取消</div>
<div class="btn btn_primary h32" v-if="isedit && !ischeck" @click="savepro">创建项目</div>
</div>
<div class="popbot" v-else>
<div class="btn btn_cancel h32" @click="dialogVisible = false">取消</div> <div class="btn btn_cancel h32" @click="dialogVisible = false">取消</div>
<div class="btn btn_primary h32" v-if="isedit && !ischeck" @click="savepro">保存</div> <div class="btn btn_primary h32" v-if="isedit && !ischeck" @click="savepro">保存</div>
<div class="btn btn_primary h32" v-if="isedit && ischeck" @click="changepro">下一步,导入数据</div> <div class="btn btn_primary h32" v-if="isedit && ischeck" @click="changepro">下一步,导入数据</div>
...@@ -279,6 +301,17 @@ ...@@ -279,6 +301,17 @@
dialogVisible:false, dialogVisible:false,
cbStagelist:[], cbStagelist:[],
ztStagelist:[], ztStagelist:[],
cbjhlist:[
{
value: '已有成本计划',
label: '已有成本计划'
},
{
value: '暂无成本计划',
label: '暂无成本计划'
},
],
cbjh:'',
//新建项目参数 //新建项目参数
queryParam:{ queryParam:{
projectName:'',//项目名称 projectName:'',//项目名称
......
<template>
<div class="overview">
<div class="search-supplier m-16">
<div class="title_wrap">
<div class="enterprise_title">
供应商风险动态
</div>
</div>
<div class="evalist">
<div>
<div class="eva1">供应商风险总数</div>
<div class="eva2">1200</div>
<div class="eva3">近一月<span>新增+374</span></div>
<div class="eva4">昨日<span>减少-21</span></div>
</div>
<div>
<div class="eva1">司法诉讼</div>
<div class="eva2">200</div>
<div class="eva3">近一月<span>新增+374</span></div>
<div class="eva4">昨日<span>减少-21</span></div>
</div>
<div>
<div class="eva1">经营预警</div>
<div class="eva2">400</div>
<div class="eva3">近一月<span>新增+374</span></div>
<div class="eva4">昨日<span>减少-21</span></div>
</div>
<div>
<div class="eva1">行政处罚</div>
<div class="eva2">400</div>
<div class="eva3">近一月<span>新增+374</span></div>
<div class="eva4">昨日<span>减少-21</span></div>
</div>
<div>
<div class="eva1">不良行为</div>
<div class="eva2">400</div>
<div class="eva3">近一月<span>新增+374</span></div>
<div class="eva4">昨日<span>减少-21</span></div>
</div>
<div>
<div class="eva1">涉诉限用/禁用</div>
<div class="eva2">400</div>
<div class="eva3">近一月<span>新增+374</span></div>
<div class="eva4">昨日<span>减少-21</span></div>
</div>
</div>
</div>
<div class="content1 m-16">
<div class="cont-left">
<div class="title_wrap">
<div class="cont_title">
风险类型分布
<div class="select">
<el-select v-model="value1" filterable class="form-content-width same-select-com" placeholder="供应商类型" :class="[`select-adaptive-${inputID1}`]" :popper-append-to-body='false'>
<el-option v-for="(item, index) in gyslxList" :key="index" :label="item.label" :value="item.value" />
</el-select>
<custom-time-select :timeList="timeList" v-model="time" :class="[`select-adaptive-${inputID}`]" timeValue=""
placeholder="动态时间" @handle-search="iptAdaptive(inputID,'','changeSelect')" />
</div>
</div>
</div>
<div class="charts-div">
<div id="fb-echarts" style="height: 300px;"></div>
<div style="margin: 0 16px">
<el-table
:data="fxList"
height="241"
border
highlight-current-row
>
<el-table-column label="序号" width="60" align="left">
<template slot-scope="scope">
<span>{{scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="风险类型" prop="type"></el-table-column>
<el-table-column label="供应商数量" prop="number"></el-table-column>
</el-table>
</div>
</div>
</div>
<div class="cont-right">
<div class="title_wrap">
<div class="cont_title">
风险类型趋势
<div class="select">
<el-select v-model="value2" filterable class="form-content-width same-select-com" placeholder="供应商类型" :class="[`select-adaptive-${inputID1}`]" :popper-append-to-body='false'>
<el-option v-for="(item, index) in gyslxList" :key="index" :label="item.label" :value="item.value" />
</el-select>
<!--<el-select v-model="value3" filterable class="form-content-width same-select-com" placeholder="展示方式" :class="[`select-adaptive-${inputID1}`]" :popper-append-to-body='false'>-->
<!--<el-option v-for="(item, index) in gyslxList" :key="index" :label="item.label" :value="item.value" />-->
<!--</el-select>-->
</div>
</div>
</div>
<div class="charts-div">
<div id="wz-echarts" style="height: 300px;"></div>
<div style="margin: 0 16px">
<el-table
:data="fxqsList"
height="241"
border
highlight-current-row
>
<el-table-column label="序号" width="60" align="left">
<template slot-scope="scope">
<span>{{scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="年月" prop="date"></el-table-column>
<el-table-column label="司法诉讼" prop="number1"></el-table-column>
<el-table-column label="经营预警" prop="number2"></el-table-column>
<el-table-column label="行政处罚" prop="number3"></el-table-column>
<el-table-column label="不良行为" prop="number4"></el-table-column>
<el-table-column label="涉诉限用/禁用" prop="number5"></el-table-column>
</el-table>
</div>
</div>
</div>
</div>
<div class="content2 m-16">
<div class="title_wrap">
<div class="cont_title">
供应商风险列表
<div class="select">
<el-select v-model="value4" filterable class="form-content-width same-select-com" placeholder="供应商类型" :class="[`select-adaptive-${inputID1}`]" :popper-append-to-body='false'>
<el-option v-for="(item, index) in gyslxList" :key="index" :label="item.label" :value="item.value" />
</el-select>
<custom-time-select :timeList="timeList" v-model="time1" :class="[`select-adaptive-${inputID}`]" timeValue=""
placeholder="动态时间" @handle-search="iptAdaptive(inputID,'','changeSelect')" />
</div>
</div>
</div>
<div class="table-item" style="padding: 16px;">
<el-table
element-loading-text="Loading"
maxHeight="840"
:data="tableData"
row-key="id"
default-expand-all
border
highlight-current-row
>
<el-table-column label="序号" width="60" align="left" fixed="left">
<template slot-scope="scope">
<span>{{scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="供应商名称" min-width="350" prop="name"></el-table-column>
<el-table-column label="风险总数" prop="fxsl"></el-table-column>
<el-table-column label="司法风险" prop="sffx"></el-table-column>
<el-table-column label="经营预警" prop="jyyj"></el-table-column>
<el-table-column label="行政处罚" prop="xzcf"></el-table-column>
<el-table-column label="不良行为" prop="blxw"></el-table-column>
<el-table-column label="涉诉限用/禁用" prop="ss"></el-table-column>
</el-table>
</div>
</div>
<div class="content3 m-16">
<div class="title_wrap">
<div class="enterprise_title">
供应商基本情况
</div>
</div>
<div class="evalist">
<div>
<div class="eva1">供应商总数</div>
<div class="eva2">1200</div>
</div>
<div>
<div class="eva1">专业分包</div>
<div class="eva2">200</div>
</div>
<div>
<div class="eva1">机械施工</div>
<div class="eva2">300</div>
</div>
<div>
<div class="eva1">物资设备</div>
<div class="eva2">400</div>
</div>
<div>
<div class="eva1">劳务分包企业</div>
<div class="eva2">200</div>
</div>
<div>
<div class="eva1">劳务分包队伍</div>
<div class="eva2">100</div>
</div>
</div>
</div>
<div class="content4 m-16">
<div class="cont-left">
<div class="title_wrap">
<div class="cont_title">
供应商地区分布分布
<div class="select">
<el-select v-model="value5" filterable class="form-content-width same-select-com" placeholder="供应商类型" :class="[`select-adaptive-${inputID1}`]" :popper-append-to-body='false'>
<el-option v-for="(item, index) in gyslxList" :key="index" :label="item.label" :value="item.value" />
</el-select>
</div>
</div>
</div>
<div class="charts-div">
<div id="dqfb-echarts" style="height: 350px;"></div>
<div style="margin: 0 16px">
<el-table
:data="viewData"
height="192"
border
highlight-current-row
>
<el-table-column label="序号" width="60" align="left">
<template slot-scope="scope">
<span>{{scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="地区" prop="name"></el-table-column>
<el-table-column label="供应商数量" prop="quantity"></el-table-column>
<el-table-column label="履约金额(亿)" prop="money"></el-table-column>
</el-table>
</div>
</div>
</div>
<div class="cont-right">
<div class="title_wrap">
<div class="cont_title">
供应商准入/淘汰趋势
</div>
</div>
<div class="charts-div">
<div id="qs-echarts" style="height: 350px;"></div>
<div style="margin: 0 16px">
<el-table
:data="qsList"
height="192"
border
highlight-current-row
>
<el-table-column label="序号" width="60" align="left">
<template slot-scope="scope">
<span>{{scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="年月日" prop="date"></el-table-column>
<el-table-column label="准入供应商" prop="number1"></el-table-column>
<el-table-column label="淘汰供应商" prop="number2"></el-table-column>
</el-table>
</div>
</div>
</div>
</div>
<div class="content5 m-16">
<div class="cont-left">
<div class="title_wrap">
<div class="cont_title">
供应商行业分布
</div>
</div>
<div class="charts-div">
<div id="hyfb-echarts" style="height: 350px;"></div>
<div style="margin: 0 16px">
<el-table
:data="hyfbList"
height="192"
border
highlight-current-row
>
<el-table-column label="序号" width="60" align="left">
<template slot-scope="scope">
<span>{{scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="行业" prop="name"></el-table-column>
<el-table-column label="供应商数量" width="130" prop="number"></el-table-column>
<el-table-column label="履约金额(亿)" width="130" prop="money"></el-table-column>
</el-table>
</div>
</div>
</div>
<div class="cont-right">
<div class="title_wrap">
<div class="cont_title">
供应商股份评级
<div class="select">
<el-select v-model="value6" filterable class="form-content-width same-select-com" placeholder="供应商类型" :class="[`select-adaptive-${inputID1}`]" :popper-append-to-body='false'>
<el-option v-for="(item, index) in gyslxList" :key="index" :label="item.label" :value="item.value" />
</el-select>
</div>
</div>
</div>
<div class="charts-div">
<div id="gfpj-echarts" style="height: 350px;"></div>
<div style="margin: 0 16px">
<el-table
:data="gfpjList"
height="192"
border
highlight-current-row
>
<el-table-column label="序号" width="60" align="left">
<template slot-scope="scope">
<span>{{scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="股份评级" prop="type"></el-table-column>
<el-table-column label="供应商数量" prop="number"></el-table-column>
<el-table-column label="履约金额(亿)" prop="money"></el-table-column>
</el-table>
</div>
</div>
</div>
</div>
<div class="content6 m-16">
<div class="cont-left">
<div class="title_wrap">
<div class="cont_title">
供应商中标次数排名
</div>
</div>
<div class="charts-div">
<div id="zbcs-echarts" style="height: 350px;"></div>
<div style="margin: 0 16px">
<el-table
:data="wzData"
height="192"
border
highlight-current-row
>
<el-table-column label="序号" width="60" align="left">
<template slot-scope="scope">
<span>{{scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="供应商名称" prop="name"></el-table-column>
<el-table-column label="投标次数" width="130" prop="money"></el-table-column>
<el-table-column label="中标次数" width="130" prop="score"></el-table-column>
</el-table>
</div>
</div>
</div>
<div class="cont-right">
<div class="title_wrap">
<div class="cont_title">
供应商履约金额分布统计
<div class="select">
<el-select v-model="value7" filterable class="form-content-width same-select-com" placeholder="供应商类型" :class="[`select-adaptive-${inputID1}`]" :popper-append-to-body='false'>
<el-option v-for="(item, index) in gyslxList" :key="index" :label="item.label" :value="item.value" />
</el-select>
</div>
</div>
</div>
<div class="charts-div">
<div id="jefb-echarts" style="height: 350px;"></div>
<div style="margin: 0 16px">
<el-table
:data="jefbList"
height="192"
border
highlight-current-row
>
<el-table-column label="序号" width="60" align="left">
<template slot-scope="scope">
<span>{{scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column label="履约金额范围" prop="type"></el-table-column>
<el-table-column label="供应商数量" prop="number"></el-table-column>
</el-table>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import '@/assets/styles/public.scss'
import '@/assets/styles/supplierlist.scss'
import mixin from '@/views/detail/party-a/mixins/mixin'
import CustomTimeSelect from '../../component/CustomTimeSelect'
import { v4 } from "uuid"
import * as echarts from 'echarts'
import '@/assets/lib/china.js'
export default {
name: 'overview',
mixins: [mixin],
components:{CustomTimeSelect},
data(){
return{
wzData:[
{
name:'北京宏盛兴达装饰设计有限责任公司',
money:'772',
score:'118'
},
{
name:'重庆宏力嘉商贸有限公司',
money:'245',
score:'114'
},
{
name:'都江堰市宏发节能砖厂',
money:'832',
score:'102'
},
{
name:'重庆展鹏门业有限公司',
money:'132',
score:'92'
},
{
name:'海南奥利格新型建',
money:'132',
score:'82'
},
{
name:'莱晟达(烟台)环保材料科',
money:'132',
score:'78'
},
{
name:'中建蓉成建材成都有限公司',
money:'132',
score:'72'
},
{
name:'北京京首建混凝土搅拌站有限公司',
money:'132',
score:'62'
},
{
name:'重庆越尚建材有限公司',
money:'83',
score:'11'
},
{
name:'北京京首建混凝土搅拌站有限公司',
money:'684',
score:'25'
},
],
timeList: ['昨天','近三天', '近七天', '近半月', '自定义'],
time:'',
time1:'',
inputID: this.getUid(),
inputID1:this.getUid(),
gyslxList:[
{
label:'劳务分包',
value:'劳务分包'
},
{
label:'专业分包',
value:'专业分包'
},
{
label:'专业服务',
value:'专业服务'
},
{
label:'设备',
value:'设备'
},
{
label:'租赁',
value:'租赁'
},
{
label:'物资',
value:'物资'
},
],
value1:'',
value2:'',
value3:'',
value4:'',
value5:'',
value6:'',
value7:'',
zkfsList:[
{
label:'按天展示',
value:'按天展示'
},
{
label:'按周展示',
value:'按周展示'
},
{
label:'按月展示',
value:'按月展示'
},
{
label:'按年展示',
value:'按年展示'
},
],
fxList:[
{
type:'司法诉讼',
number:'1200'
},
{
type:'经营预警',
number:'500'
},
{
type:'行政处罚',
number:'300'
},
{
type:'不良行为',
number:'200'
},
{
type:'涉诉限用/禁用',
number:'100'
},
],
lxList:[
{
type:'司法诉讼',
number:'1200',
date:'1月',
},
{
type:'经营预警',
number:'500',
date:'2月',
},
{
type:'行政处罚',
number:'300',
date:'3月',
},
{
type:'不良行为',
number:'200',
date:'4月',
},
{
type:'涉诉限用/禁用',
number:'100',
date:'5月',
},
],
tableData:[
{
name:'中国石油化工股份有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'中国石油天然气股份有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
{
name:'中国建筑股份有限公司',
fxsl:'27',
sffx:'85',
jyyj:'77',
xzcf:'77',
blxw:'75',
ss:'43',
},
],
fxqsList:[
{
date:'1月',
number1:'87',
number2:'5',
number3:'3',
number4:'12',
number5:'9',
},
{
date:'2月',
number1:'47',
number2:'5',
number3:'3',
number4:'12',
number5:'9',
},
{
date:'3月',
number1:'67',
number2:'5',
number3:'3',
number4:'5',
number5:'2',
},
{
date:'4月',
number1:'37',
number2:'6',
number3:'14',
number4:'4',
number5:'9',
},
{
date:'5月',
number1:'67',
number2:'46',
number3:'3',
number4:'8',
number5:'17',
},
{
date:'6月',
number1:'47',
number2:'16',
number3:'3',
number4:'12',
number5:'2',
},
{
date:'7月',
number1:'37',
number2:'11',
number3:'6',
number4:'8',
number5:'19',
},
{
date:'8月',
number1:'48',
number2:'26',
number3:'9',
number4:'7',
number5:'23',
},
{
date:'9月',
number1:'47',
number2:'16',
number3:'7',
number4:'12',
number5:'9',
},
{
date:'10月',
number1:'75',
number2:'56',
number3:'4',
number4:'12',
number5:'11',
},
{
date:'11月',
number1:'23',
number2:'6',
number3:'13',
number4:'12',
number5:'16',
},
{
date:'12月',
number1:'67',
number2:'46',
number3:'26',
number4:'12',
number5:'9',
},
],
viewData:[
{
name:'河南省',
quantity:'1230',
money:12.00,
},
{
name:'北京',
quantity:'2230',
money:20.90,
},
{
name:'四川省',
quantity:'230',
money:4.00,
},
{
name:'河北省',
quantity:'130',
money:4.00,
},
{
name:'广东省',
quantity:'1000',
money:10.00,
},
{
name:'重庆',
quantity:'100',
money:10.00,
},
{
name:'江苏省',
quantity:'200',
money:10.00,
},
{
name:'青海省',
quantity:'1230',
money:12.00,
},
{
name:'甘肃省',
quantity:'2230',
money:20.90,
},
{
name:'云南省',
quantity:'230',
money:4.00,
},
],
qsList:[
{
date:'1月',
number1:'87',
number2:'26'
},
{
date:'2月',
number1:'47',
number2:'16'
},
{
date:'3月',
number1:'67',
number2:'26'
},
{
date:'4月',
number1:'37',
number2:'12'
},
{
date:'5月',
number1:'67',
number2:'46'
},
{
date:'6月',
number1:'47',
number2:'16'
},
{
date:'7月',
number1:'37',
number2:'11'
},
{
date:'8月',
number1:'48',
number2:'26'
},
{
date:'9月',
number1:'47',
number2:'16'
},
{
date:'10月',
number1:'75',
number2:'56'
},
{
date:'11月',
number1:'23',
number2:'6'
},
{
date:'12月',
number1:'67',
number2:'46'
},
],
hyfbList:[
{
name:'批发和零售业',
number:'832',
money:'102'
},
{
name:'房屋建筑业',
number:'772',
money:'118'
},
{
name:'制造业',
number:'345',
money:'114'
},
{
name:'交通运输',
number:'342',
money:'92'
},
{
name:'农、林、牧、渔',
number:'232',
money:'82'
},
{
name:'供应商行业名称六',
number:'132',
money:'78'
},
{
name:'供应商行业名称七',
number:'132',
money:'72'
},
{
name:'供应商行业名称八',
number:'132',
money:'62'
},
{
name:'供应商行业名称九',
number:'83',
money:'11'
},
{
name:'供应商行业名称十',
number:'84',
money:'25'
},
],
gfpjList:[
{
type:'物资优质',
number:'23',
money:'12.00'
},
{
type:'专业分包优质',
number:'33',
money:'22.00'
},
{
type:'设备优质',
number:'43',
money:'12.00'
},
{
type:'专业服务优质',
number:'8',
money:'11.00'
},
{
type:'劳务优质',
number:'12',
money:'27.00'
},
],
jefbList:[
{
type:'100万以下',
number:'23'
},
{
type:'100万~500万',
number:'34'
},
{
type:'500万-1000万',
number:'45'
},
{
type:'1000万-5000万',
number:'21'
},
{
type:'5000万~1亿',
number:'5'
},
],
}
},
created() {
this.$nextTick(()=>{
this.initChart(this.fxList)
this.initChart1(this.fxqsList)
this.initChart3()
this.initChart4(this.qsList)
this.initChart5(this.hyfbList)
this.initChart6(this.gfpjList)
this.initChart7(this.wzData)
this.initChart8(this.jefbList)
// this.initChart1(this.wzData)
// this.initChart2(this.wzData)
// this.initChart3(this.wzData)
// this.initChart4(this.wzData)
// this.initChart5(this.wzData)
})
},
methods:{
getUid() {
return v4();
},
changeSelect(){
},
initChart(data) {
var list=[];
for(var i=0;i<data.length;i++){
var obj={};
obj.name=data[i].type;
obj.value=data[i].number;
list.push(obj)
}
let myChart = echarts.init(document.getElementById("fb-echarts"))
let option = {
tooltip: {
trigger: 'item',
},
legend: {
show:false,
type: 'scroll',
orient: 'vertical',
right: 10,
top: 20,
bottom: 20,
data: list,
},
color:['#FF3C3C', '#0081FF', '#12C0C7','#0CBC6D','#FFAB44'],
series: [
{
type: 'pie',
radius: '55%',
center: ['50%', '50%'],
data: list,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
},
initChart1(data) {
let myChart = echarts.init(document.getElementById("wz-echarts"))
let option ={
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line',
label: {
backgroundColor: '#FFFFFF'
}
}
},
xAxis: {
type: 'category',
boundaryGap: false,
axisLabel: {
show: true,
interval: 0
},
data: data.map(item => item.date),
},
yAxis: {
type: 'value',
},
grid: {
top:30,
left:50,
right:40,
bottom:60,
},
color:['#0081FF', '#0CBC6D', '#FF3C3C', '#FFAB44', '#12C0C7'],
series: [
{
name: '司法诉讼',
type: 'line',
symbolSize:0,
data: data.map(item => item.number1)
},
{
name: '经营预警',
type: 'line',
symbolSize:0,
data: data.map(item => item.number2)
},
{
name: '行政处罚',
type: 'line',
symbolSize:0,
data: data.map(item => item.number3)
},
{
name: '不良行为',
type: 'line',
symbolSize:0,
data: data.map(item => item.number4)
},
{
name: '涉诉限用/禁用',
type: 'line',
symbolSize:0,
data: data.map(item => item.number5)
},
]
}
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
},
//中国地图
initChart3(){
let myChart = echarts.init(document.getElementById("dqfb-echarts"))
// 指定图表的配置项和数据
// 绘制图表
let data =[]
this.viewData.length>0&&this.viewData.map(item=>{
data.push({value:Number(item.quantity),name:item.name,money:item.money})
})
let option = {
tooltip: {
trigger: 'item',
show: true,
formatter: function(params) {
console.log(params)
return `<span style="color:rgba(35, 35, 35, 1);font-size:14px;">${params.name}</span><br>
<span style="color:#3D3D3D;font-size:12px;">供应商数量</span><span style="color:#3D3D3D;font-size:12px;font-weight:700;"> ${params.value}</span><br>
<span style="color:#3D3D3D;font-size:12px;">履约金额(亿)</span><span style="color:#3D3D3D;font-size:12px;font-weight:700;"> ${params.data.money}</span><br>
`
}
},
// 左侧小导航图标
visualMap: {
show: false,
x: 'left',
y: 'center',
min: 0,
max: 830000,
color: ['#D1E6FF']
},
selectedMode: 'single',
series: [{
name: '地图',
type: 'map',
mapType: 'china',
roam: false,
zoom: 1.2,
label: {
normal: {
show: false, // 省份名称
},
},
itemStyle: {
normal: { // 未选中状态
// areaColor: 'red', // 南沙诸岛背景颜色
borderColor: '#FFFFFF',
label: {
show: true// 显示名称
}
},
emphasis: { // 也是选中样式
areaColor: '#0081FF',
}
},
data: data
}]
}
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
},
initChart4(data) {
let myChart = echarts.init(document.getElementById("qs-echarts"))
let option ={
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'line',
label: {
backgroundColor: '#FFFFFF'
}
}
},
xAxis: {
type: 'category',
boundaryGap: false,
axisLabel: {
show: true,
interval: 0
},
data: data.map(item => item.date),
},
yAxis: {
type: 'value',
},
grid: {
top:30,
left:50,
right:40,
bottom:60,
},
color:['#FF3C3C', '#0081FF'],
series: [
{
name: '淘汰供应商',
type: 'line',
symbolSize:0,
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(255, 60, 60, 0.2)'
}, {
offset: 1, color: 'rgba(255, 60, 60, 0)'
} ],
global: false
}
},
data: data.map(item => item.number2)
},
{
name: '准入供应商',
type: 'line',
symbolSize:0,
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(0, 129, 255, 0.2)'
}, {
offset: 1, color: 'rgba(0, 129, 255, 0)'
} ],
global: false
}
},
data: data.map(item => item.number1)
},
]
}
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
},
initChart5(data) {
let myChart = echarts.init(document.getElementById("hyfb-echarts"))
let option = {
// 坐标轴
grid: {
top: "10%",
left: "4%",
right: "3%",
bottom: "4%",
containLabel: true, //是否包含坐标轴的文字
},
// 鼠标hover出现的提示框组件
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow',
},
backgroundColor: '#FFFFFF',
borderWidth: 0,
textStyle: {
color: '#232323',
fontSize: 14,
},
},
xAxis: [
//x轴数据设置
{
type: "value",
},
],
yAxis: [
{
type: "category",
data: data.map(item => item.name),
axisTick: { show: false },
inverse:true,
axisLine:{
// color: '#DCDFE6',
lineStyle: {
color: '#DCDFE6',//左边线的颜色
},
},
axisLabel:{
textStyle:{
color: '#232323cc'
}
}
},
],
series: [
{
name: '供应商数量',
data: data.map(item => item.number),
type: "bar",
barWidth: 12,
barGap: 0.5,
itemStyle: {
color: '#0081FF',
}
},
],
};
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
},
initChart6(data) {
var list=[];
for(var i=0;i<data.length;i++){
var obj={};
obj.name=data[i].type;
obj.value=data[i].number;
list.push(obj)
}
let myChart = echarts.init(document.getElementById("gfpj-echarts"))
let option = {
tooltip: {
trigger: 'item',
},
legend: {
show:false,
type: 'scroll',
orient: 'vertical',
right: 10,
top: 20,
bottom: 20,
data: list,
},
color:['#FF3C3C', '#0081FF', '#12C0C7','#0CBC6D','#FFAB44'],
series: [
{
type: 'pie',
radius: '55%',
center: ['50%', '50%'],
data: list,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
},
initChart7(data) {
let myChart = echarts.init(document.getElementById("zbcs-echarts"))
let option = {
// 坐标轴
grid: {
top: "10%",
left: "4%",
right: "3%",
bottom: "4%",
containLabel: true, //是否包含坐标轴的文字
},
// 鼠标hover出现的提示框组件
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow',
},
backgroundColor: '#FFFFFF',
borderWidth: 0,
textStyle: {
color: '#232323',
fontSize: 14,
},
},
xAxis: [
//x轴数据设置
{
type: "value",
},
],
yAxis: [
{
type: "category",
data: data.map(item => item.name),
axisTick: { show: false },
axisLine:{
// color: '#DCDFE6',
lineStyle: {
color: '#DCDFE6',//左边线的颜色
},
},
axisLabel:{
textStyle:{
color: '#232323cc'
}
}
},
],
series: [
{
name: '履约加权得分',
data: data.map(item => item.score),
type: "bar",
barWidth: 12,
barGap: 0.5,
itemStyle: {
color: '#0081FF',
}
},
],
};
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
},
initChart8(data) {
var list=[];
for(var i=0;i<data.length;i++){
var obj={};
obj.name=data[i].type;
obj.value=data[i].number;
list.push(obj)
}
let myChart = echarts.init(document.getElementById("jefb-echarts"))
let option = {
tooltip: {
trigger: 'item',
},
legend: {
show:false,
type: 'scroll',
orient: 'vertical',
right: 10,
top: 20,
bottom: 20,
data: list,
},
color:['#FF3C3C', '#0081FF', '#12C0C7','#0CBC6D','#FFAB44'],
series: [
{
type: 'pie',
radius: '55%',
center: ['50%', '50%'],
data: list,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
myChart.setOption(option);
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
},
iptAdaptive(uid, multiple = false, name) {
multiple ? this.multipleAdaptiveHandle(uid, name) : this.iptAdaptiveHandle(uid, name);
},
//单选
async iptAdaptiveHandle(uid, name) {
try {
await this.$nextTick();
const dom = document.querySelector(`.select-adaptive-${uid}`);
const realStyles = window.getComputedStyle(dom);
if (dom) {
const iptChild = dom.querySelector(".el-input__inner");
const textContainer = document.createElement("span");
const textName = `text-${uid}`;
textContainer.classList.add(textName);
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
const hasPadding = (parseInt(realStyles.paddingLeft) || parseInt(realStyles.paddingRight)) ? true : false;
hasPadding ? textContainer.style.setProperty("padding", "0px 8px") : null;
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = iptChild.value ? iptChild.value : iptChild.getAttribute("placeholder");
document.body.append(textContainer);
let containerWidth = textContainer.offsetWidth + 50;
textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`);
}
this.handleSearch(name);
} catch (error) {
}
},
async multipleAdaptiveHandle(){
},
}
}
</script>
<style lang="scss" scoped>
.overview{
.enterprise_title{
position: relative;
}
.select{
position: absolute;
right: 0;
top:-10px;
display: flex;
}
.custom-time-select1 {
width: 110px !important;
::v-deep .el-input__inner{
border: 0;
&::placeholder {
color: rgba(35, 35, 35, 0.8) !important;
}
}
}
.evalist{
background: #fff;
display: flex;
padding: 12px 10px;
justify-content: space-around;
>div{
margin: 0 6px;
border: 1px solid #DCDFE6;
height: 136px;
width: calc(16.66% - 12px);
text-align: center;
border-radius: 4px;
.eva1{
font-size: 16px;
font-weight: 500;
}
.eva2{
padding-top: 8px;
padding-bottom: 10px;
font-size: 24px;
}
.eva3{
color: rgba(35, 35, 35, 0.6);
font-size: 14px;
line-height: 22px;
span{
color: #FF3C3C;
margin-left: 8px;
}
}
.eva4{
color: rgba(35, 35, 35, 0.6);
font-size: 14px;
line-height: 22px;
span{
color: #0CBC6D;
margin-left: 8px;
}
}
}
}
.content3{
.evalist{
>div{
height: 76px;
.eva1{
padding-top: 10px;
}
.eva2{
padding-top: 6px;
padding-bottom: 0;
font-size: 24px;
}
}
}
}
.content1,.content4,.content5,.content6{
display: flex;
height: 612px;
.cont-left{
width: 49.5%;
background: #ffffff;
margin-right: 1%;
}
.cont-right{
width: 49.5%;
background: #ffffff;
}
}
::v-deep .el-select{
color: rgba(35, 35, 35, 0.8);
.el-input__inner{
border: 0;
&::placeholder {
color: rgba(35, 35, 35, 0.8) !important;
}
}
}
.form-content-width{
width: 116px;
}
.cont_title{
padding-left: 8px;
font-size: 16px;
height: 16px;
line-height: 16px;
font-weight: 700;
color: #232323;
position: relative;
}
.content2{
background: #ffffff;
}
::v-deep .el-table--border .el-table__cell {
padding: 8px 0;
}
::v-deep .custom-time-select1{
.options-block{
/*<!--left: -30px;-->*/
right:0;
}
.picker-block{
.el-picker-panel.el-date-range-picker.el-popper{
left: -680px !important;
top:144px !important;
}
}
}
}
.m-b16{
margin-bottom: 16px;
}
.m-16{
margin: 16px;
}
.yj-supplier{
background: #ffffff;
.yj-main{
display: flex;
height: 512px;
overflow: hidden;
margin-top: 16px;
.yj-title{
color: #232323;
font-size: 14px;
line-height: 24px;
margin-bottom: 8px;
font-weight: 600;
span{
color: #FF3C3C;
}
}
.yi-cont{
width: 48%;
margin: 0 1%;
}
.yj-list{
border-radius: 4px 4px 4px 4px;
border: 1px solid #DCDFE6;
overflow-y: auto;
height: 448px;
padding: 12px 8px;
font-size: 14px;
color: #232323;
line-height: 22px;
.time{
font-size: 12px;
color: rgba(35,35,35,0.6);
margin-top: 8px;
}
}
::v-deep .el-timeline{
.el-timeline-item{
margin-bottom: 8px;
padding-bottom: 0;
}
.el-timeline-item__wrapper{
padding-left:16px;
}
.el-timeline-item__tail{
top: 12px;
height: calc(100% - 18px);
}
.el-timeline-item__node{
background-color:#ffffff;
border: 2px solid #FF3C3C;
}
.el-timeline-item__node--normal{
left: 1px;
width: 8px;
height: 8px;
top: 2px;
}
.el-timeline-item:last-child .el-timeline-item__tail{
display: block;
}
}
}
}
.charts-supplier{
background: #ffffff;
.charts-main {
display: flex;
flex-wrap: wrap;
overflow: hidden;
padding-top:16px;
.charts-cont{
width: 48%;
margin: 0 1%;
margin-bottom: 24px;
.charts-title{
font-size: 14px;
color: #232323;
line-height: 24px;
margin-bottom: 8px;
font-weight: 600;
}
}
.charts-div{
height: 560px;
border-radius: 4px 4px 4px 4px;
border: 1px solid #DCDFE6;
}
}
}
</style>
...@@ -831,7 +831,7 @@ ...@@ -831,7 +831,7 @@
}); });
}, },
iptAdaptive(uid, multiple = false, name) { iptAdaptive(uid, multiple = false, name) {
multiple ? this.multipleAdaptiveHandle(uid, name) : this.iptAdaptiveHandle(uid, name); multiple ? this.multipleAdaptiveHandle(uid, name) : this.iptAdaptiveHandle(uid, name);
}, },
//单选 //单选
async iptAdaptiveHandle(uid, name) { async iptAdaptiveHandle(uid, name) {
......
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