Commit bacc8335 authored by huangjie's avatar huangjie

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 8ba0b07f 8a45ce07
package com.dsk.web.schedule;
import com.dsk.common.tenant.helper.TenantHelper;
import com.dsk.cscec.service.AdvisoryBodyService;
import com.dsk.system.service.ISysTenantService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
......@@ -19,9 +20,10 @@ import org.springframework.stereotype.Component;
public class TenantTimerTask {
private final ISysTenantService tenantService;
private final AdvisoryBodyService advisoryBodyService;
/**
* 每6小时扫描并禁用已过期租户账号
* 每10分钟扫描并禁用已过期租户账号
*/
@Scheduled(cron = "0 0/10 * * * ? ")
public void updateExpiredTenantStatus() {
......@@ -29,4 +31,13 @@ public class TenantTimerTask {
TenantHelper.ignore(tenantService::handleExpiredTenant);
}
/**
* 每小时更新一次咨询机构经营范围
*/
@Scheduled(cron = "0 0 * 1/1 * ? ")
public void updateAdvisoryBodyBusinessScope() {
log.info("执行定时更新咨询机构经营范围(1h/次)");
TenantHelper.ignore(advisoryBodyService::updateAdvisoryBodyBusinessScope);
}
}
\ No newline at end of file
......@@ -168,6 +168,7 @@ tenant:
- d_subcontract
- advisory_body
- advisory_body_project
- advisory_body_custom_form
- dim_area
- biz_dict_data
......
......@@ -5,23 +5,19 @@ import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.bo.AdvisoryBodySearchBo;
import com.dsk.cscec.domain.bo.CooperateProjectDetailSearchBo;
import com.dsk.cscec.domain.bo.ProjectDetailBo;
import com.dsk.cscec.domain.bo.ProjectSearchBo;
import com.dsk.cscec.domain.vo.AdvisoryBodySearchVo;
import com.dsk.cscec.domain.vo.CooperateProjectDetailSearchVo;
import com.dsk.cscec.domain.vo.ProjectDetailVo;
import com.dsk.cscec.domain.vo.ProjectSearchVo;
import com.dsk.cscec.domain.AdvisoryBodyCustomForm;
import com.dsk.cscec.domain.bo.*;
import com.dsk.cscec.domain.vo.*;
import com.dsk.cscec.service.AdvisoryBodyCustomFormService;
import com.dsk.cscec.service.AdvisoryBodyProjectService;
import com.dsk.cscec.service.AdvisoryBodyService;
import com.dsk.cscec.service.IDProjectService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 咨询机构管理控制层
......@@ -29,7 +25,6 @@ import javax.annotation.Resource;
* @author sxk
* @since 2023-12-10 15:34:46
*/
@Validated
@RestController
@RequestMapping("advisory/body")
public class AdvisoryBodyManageController extends BaseController {
......@@ -39,6 +34,8 @@ public class AdvisoryBodyManageController extends BaseController {
private AdvisoryBodyService advisoryBodyService;
@Resource
private AdvisoryBodyProjectService advisoryBodyProjectService;
@Resource
private AdvisoryBodyCustomFormService advisoryBodyCustomFormService;
/**
* 获取所有项目列表数据
......@@ -60,15 +57,55 @@ public class AdvisoryBodyManageController extends BaseController {
* 获取合作项目明细
*/
@GetMapping("/getCooperateProjectDetailList")
public TableDataInfo<CooperateProjectDetailSearchVo> getCooperateProjectDetailList(CooperateProjectDetailSearchBo cooperateProjectDetailSearchBo, PageQuery pageQuery) {
public TableDataInfo<CooperateProjectDetailSearchVo> getCooperateProjectDetailList(@Validated CooperateProjectDetailSearchBo cooperateProjectDetailSearchBo, PageQuery pageQuery) {
return baseService.queryCooperateProjectDetailList(cooperateProjectDetailSearchBo, pageQuery);
}
/**
* 根据项目主键查询项目详情
* 获取项目详情
*/
@GetMapping("/getProjectDetail")
public R<ProjectDetailVo> getProjectDetail(ProjectDetailBo projectDetailBo) {
public R<ProjectDetailVo> getProjectDetail(@Validated ProjectDetailBo projectDetailBo) {
return R.ok(baseService.queryProjectDetail(projectDetailBo));
}
/**
* 校验咨询机构是否存在
*/
@GetMapping("/checkAdvisoryBodyExist")
public R<AdvisoryBodyExistVo> checkAdvisoryBodyExist(@Validated @NotBlank(message = "咨询机构名称不能为空") String advisoryBodyName) {
return R.ok(advisoryBodyService.checkAdvisoryBodyExist(advisoryBodyName));
}
/**
* 新增咨询机构
*/
@PostMapping("/addAdvisoryBody")
public R<Void> addAdvisoryBody(@Validated AddAdvisoryBodyBo addAdvisoryBodyBo) {
return toAjax(advisoryBodyService.addAdvisoryBody(addAdvisoryBodyBo));
}
/**
* 获取咨询机构自定义表单
*/
@GetMapping("/getAdvisoryBodyCustomForm/{projectKey}")
public R<AdvisoryBodyCustomForm> getAdvisoryBodyCustomForm(@Validated @NotNull(message = "项目主键不能为空") @PathVariable Long projectKey) {
return R.ok(advisoryBodyCustomFormService.getById(projectKey));
}
/**
* 新增咨询机构自定义表单
*/
@PostMapping("/addAdvisoryBodyCustomForm")
public R<Void> addAdvisoryBodyCustomForm(@Validated AdvisoryBodyCustomForm advisoryBodyCustomForm) {
return toAjax(advisoryBodyCustomFormService.save(advisoryBodyCustomForm));
}
/**
* 更新咨询机构自定义表单
*/
@PutMapping("/updateAdvisoryBodyCustomForm")
public R<Void> updateAdvisoryBodyCustomForm(@Validated AdvisoryBodyCustomForm advisoryBodyCustomForm) {
return toAjax(advisoryBodyCustomFormService.updateById(advisoryBodyCustomForm));
}
}
\ No newline at end of file
......@@ -4,7 +4,6 @@ package com.dsk.cscec.controller;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.R;
import com.dsk.cscec.domain.vo.RegionVo;
import com.dsk.cscec.domain.vo.RegionWithLevelVo;
import com.dsk.cscec.service.IDimAreaService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -40,7 +39,7 @@ public class DimAreaController extends BaseController {
* 获取地区树(不含区域)
*/
@GetMapping("/all/withoutRegion")
public R<List<RegionWithLevelVo>> allAreaWithoutRegion(){
public R<List<RegionVo>> allAreaWithoutRegion(){
return R.ok(baseService.allAreaWithoutRegion());
}
}
......
package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.dsk.common.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* 咨询机构(SysAdvisoryBody)表实体类
......@@ -14,10 +15,11 @@ import java.util.Date;
* @author sxk
* @since 2023-12-12 10:12:06
*/
@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AdvisoryBody implements Serializable {
public class AdvisoryBody extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
......@@ -38,24 +40,5 @@ public class AdvisoryBody implements Serializable {
* 经营范围
*/
private String businessScope;
/**
* 创建者
*/
private String createBy;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新者
*/
private String updateBy;
/**
* 更新时间
*/
private Date updateTime;
}
package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* 咨询机构自定义表单(AdvisoryBodyCustomForm)实体类
*
* @author sxk
* @since 2023-12-20 16:39:43
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AdvisoryBodyCustomForm extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 项目主键
*/
@TableId(value = "project_key")
@NotNull(message = "项目主键不能为空")
private Long projectKey;
/**
* 咨询机构ID
*/
@NotNull(message = "咨询机构ID不能为空")
private Long advisoryBodyId;
/**
* json数据
*/
@NotBlank(message = "json数据不能为空")
private String jsonData;
}
package com.dsk.cscec.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
......@@ -11,8 +13,9 @@ import java.util.Date;
* @date 2023.12.15
* @time 15:58
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AdvisoryBodyProject implements Serializable {
public class AdvisoryBodyProject extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
......@@ -61,20 +64,4 @@ public class AdvisoryBodyProject implements Serializable {
* 是否为终审单位(0代表是 1代表否)
*/
private String isFinalJudgeUnit;
/**
* 创建者
*/
private String createBy;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新者
*/
private String updateBy;
/**
* 更新时间
*/
private Date updateTime;
}
......@@ -13,7 +13,7 @@ import java.util.Date;
*/
@Data
public class DProject implements Serializable {
private static final long serialVersionUID = -39953154592938442L;
private static final long serialVersionUID = 1L;
/**
* 项目主键
......
package com.dsk.cscec.domain.bo;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* @author sxk
* @date 2023.12.19
* @time 09:54
*/
@Data
public class AddAdvisoryBodyBo {
/**
* 是否为新资讯机构
*/
@NotNull(message = "是否为新咨询机构不能为空")
private Boolean isNewAdvisoryBody;
/**
* 项目主键
*/
@NotNull(message = "项目主键不能为空")
private Long projectKey;
/**
* 咨询机构cid(用于查询建设库数据)
*/
@NotNull(message = "咨询机构cid不能为空")
private Integer advisoryBodyCid;
/**
* 咨询机构名称
*/
@NotBlank(message = "咨询机构名称不能为空")
private String advisoryBodyName;
/**
* 经营范围
*/
@NotBlank(message = "经营范围不能为空")
private String businessScope;
/**
* 项目负责人
*/
private String projectLeader;
/**
* 项目负责人专业
*/
private String projectLeaderMajor;
/**
* 项目负责人联系电话
*/
private String projectLeaderPhone;
/**
* 结算金额(万元)
*/
private Double settleAmount;
/**
* 结算开始时间
*/
private Date settleStartTime;
/**
* 结算完成时间
*/
private Date settleFinishTime;
/**
* 是否为终审单位(0代表是 1代表否)
*/
private String isFinalJudgeUnit;
}
......@@ -39,6 +39,10 @@ public class AdvisoryBodyBo extends BaseEntity {
* 项目承接单位
*/
private String contractOrgName;
/**
* 区域
*/
private List<String> area;
/**
* 省份
*/
......
package com.dsk.cscec.domain.vo;
import com.dsk.cscec.domain.AdvisoryBody;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author sxk
* @date 2023.12.19
* @time 14:20
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AdvisoryBodyExistVo extends AdvisoryBody {
/**
* 是否为新资讯机构
*/
private Boolean isNewAdvisoryBody;
}
......@@ -3,6 +3,7 @@ package com.dsk.cscec.domain.vo;
import com.dsk.cscec.domain.AdvisoryBody;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.Date;
......@@ -12,6 +13,7 @@ import java.util.Date;
* @date 2023.12.13
* @time 10:32
*/
@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
......
......@@ -112,8 +112,8 @@ public class AdvisoryBodyVo {
private String contractOrgName;
/**
* 创建时间
* 创建时间/合同生效(盖章)日期
*/
@ExcelProperty(value = "创建时间", index = 13)
private Date loadTime;
private Date contractSignDate;
}
package com.dsk.cscec.domain.vo;
import com.dsk.cscec.domain.AdvisoryBody;
import com.dsk.cscec.domain.AdvisoryBodyProject;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
......@@ -67,6 +67,11 @@ public class CooperateProjectDetailSearchVo {
*/
private BigDecimal contractOrigValue;
/**
* 咨询机构与项目关联信息
*/
private AdvisoryBodyProject advisoryBodyProject;
/**
* 结算天数(天)
*/
......@@ -82,11 +87,6 @@ public class CooperateProjectDetailSearchVo {
*/
private String contractOrgName;
/**
* 咨询机构(咨询机构表)
*/
private AdvisoryBody advisoryBody;
/**
* 创建时间(合同生效日期)
*/
......
package com.dsk.cscec.domain.vo;
import com.dsk.cscec.domain.AdvisoryBody;
import com.dsk.cscec.domain.AdvisoryBodyProject;
import com.dsk.cscec.domain.DProject;
import lombok.AllArgsConstructor;
import lombok.Data;
......@@ -22,11 +23,15 @@ public class ProjectDetailVo extends DProject {
*/
private AdvisoryBody advisoryBody;
/**
* 法定代表人
* 法定代表人
*/
private String corporatePerson;
/**
* 注册地址
*/
private String regAddress;
/**
* 项目信息
*/
private AdvisoryBodyProject advisoryBodyProject;
}
......@@ -15,4 +15,6 @@ public class RegionVo {
List<RegionVo> children;
Integer childrenLength;
}
package com.dsk.cscec.domain.vo;
import lombok.Data;
import java.util.List;
/**
* @Author sxk
* @Data 2023/12/13 14:14
*/
@Data
public class RegionWithLevelVo {
String level;
String value;
List<RegionWithLevelVo> children;
Integer childrenLength;
}
package com.dsk.cscec.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.cscec.domain.AdvisoryBodyCustomForm;
/**
* 咨询机构自定义表单(AdvisoryBodyCustomForm)表数据库访问层
*
* @author sxk
* @since 2023-12-20 16:39:37
*/
public interface AdvisoryBodyCustomFormMapper extends BaseMapper<AdvisoryBodyCustomForm> {
}
package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.AdvisoryBodyCustomForm;
/**
* 咨询机构自定义表单(AdvisoryBodyCustomForm)表服务接口
*
* @author makejava
* @since 2023-12-20 17:33:31
*/
public interface AdvisoryBodyCustomFormService extends IService<AdvisoryBodyCustomForm> {
}
......@@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.cscec.domain.AdvisoryBody;
import com.dsk.cscec.domain.bo.AddAdvisoryBodyBo;
import com.dsk.cscec.domain.bo.AdvisoryBodySearchBo;
import com.dsk.cscec.domain.vo.AdvisoryBodyExistVo;
import com.dsk.cscec.domain.vo.AdvisoryBodySearchVo;
/**
......@@ -22,5 +24,26 @@ public interface AdvisoryBodyService extends IService<AdvisoryBody> {
* @return 所有数据
*/
TableDataInfo<AdvisoryBodySearchVo> queryAdvisoryBodyList(AdvisoryBodySearchBo advisoryBodySearchBo, PageQuery pageQuery);
/**
* 校验咨询机构是否存在
*
* @param advisoryBodyName 咨询机构名称
* @return 校验结果
*/
AdvisoryBodyExistVo checkAdvisoryBodyExist(String advisoryBodyName);
/**
* 新增咨询机构
*
* @param addAdvisoryBodyBo 新增信息
* @return 添加结果
*/
Integer addAdvisoryBody(AddAdvisoryBodyBo addAdvisoryBodyBo);
/**
* 每小时更新一次咨询机构经营范围
*/
void updateAdvisoryBodyBusinessScope();
}
......@@ -3,7 +3,6 @@ package com.dsk.cscec.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsk.cscec.domain.DimArea;
import com.dsk.cscec.domain.vo.RegionVo;
import com.dsk.cscec.domain.vo.RegionWithLevelVo;
import java.util.List;
......@@ -18,7 +17,7 @@ public interface IDimAreaService extends IService<DimArea> {
List<RegionVo> allArea();
List<RegionWithLevelVo> allAreaWithoutRegion();
List<RegionVo> allAreaWithoutRegion();
}
package com.dsk.cscec.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.cscec.domain.AdvisoryBodyCustomForm;
import com.dsk.cscec.mapper.AdvisoryBodyCustomFormMapper;
import com.dsk.cscec.service.AdvisoryBodyCustomFormService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* 咨询机构自定义表单(AdvisoryBodyCustomForm)表服务实现类
*
* @author sxk
* @since 2023-12-20 17:33:31
*/
@Service("advisoryBodyCustomFormService")
public class AdvisoryBodyCustomFormServiceImpl extends ServiceImpl<AdvisoryBodyCustomFormMapper, AdvisoryBodyCustomForm> implements AdvisoryBodyCustomFormService {
@Resource
private AdvisoryBodyCustomFormMapper baseMapper;
}
......@@ -9,10 +9,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.utils.StringUtils;
import com.dsk.cscec.domain.AdvisoryBody;
import com.dsk.cscec.domain.AdvisoryBodyProject;
import com.dsk.cscec.domain.bo.AddAdvisoryBodyBo;
import com.dsk.cscec.domain.bo.AdvisoryBodySearchBo;
import com.dsk.cscec.domain.vo.AdvisoryBodyExistVo;
import com.dsk.cscec.domain.vo.AdvisoryBodySearchVo;
import com.dsk.cscec.mapper.AdvisoryBodyMapper;
import com.dsk.cscec.mapper.AdvisoryBodyProjectMapper;
......@@ -21,8 +24,11 @@ import com.dsk.jsk.domain.EnterpriseInfoHeaderBody;
import com.dsk.system.utils.DskOpenApiUtil;
import org.apache.commons.collections4.MapUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -100,5 +106,83 @@ public class AdvisoryBodyServiceImpl extends ServiceImpl<AdvisoryBodyMapper, Adv
}
return TableDataInfo.build(page);
}
/**
* 校验咨询机构是否存在
*
* @param advisoryBodyName 咨询机构名称
* @return 校验结果
*/
@Override
public AdvisoryBodyExistVo checkAdvisoryBodyExist(String advisoryBodyName) {
//先从咨询机构表查询是否存在,存在则直接返回
AdvisoryBody advisoryBody = baseMapper.selectOne(new LambdaQueryWrapper<AdvisoryBody>()
.eq(AdvisoryBody::getAdvisoryBodyName, advisoryBodyName));
if (ObjectUtil.isNotNull(advisoryBody)) {
//咨询机构表中有记录,则设置为非新咨询机构
AdvisoryBodyExistVo advisoryBodyExistVo = BeanUtil.toBean(advisoryBody, AdvisoryBodyExistVo.class);
advisoryBodyExistVo.setIsNewAdvisoryBody(false);
return advisoryBodyExistVo;
} else {
Map<String, Object> params = new HashMap<>();
params.put("keyword", advisoryBodyName);
Map jskData = MapUtils.getMap(dskOpenApiUtil.requestBody("/nationzj/enterprice/index", params), "data", null);
//防止没有数据而导致强转错误,所以先判断下total
if (MapUtils.getInteger(jskData, "total", 0) > 0) {
List<Map<String, Object>> data = (List<Map<String, Object>>) jskData.get("list");
for (Map<String, Object> companyData : data) {
//企业名称完全匹配上,则直接返回给前端
if (advisoryBodyName.equals(companyData.get("name"))) {
AdvisoryBodyExistVo advisoryBodyExistVo = new AdvisoryBodyExistVo();
advisoryBodyExistVo.setAdvisoryBodyCid(Math.toIntExact(MapUtils.getLong(companyData, "jskEid")));
advisoryBodyExistVo.setAdvisoryBodyName(MapUtils.getString(companyData, "name"));
advisoryBodyExistVo.setBusinessScope(MapUtils.getString(companyData, "businessScope"));
advisoryBodyExistVo.setIsNewAdvisoryBody(true);
break;
}
}
//查不到则抛异常
throw new ServiceException("咨询机构不存在");
}
}
return null;
}
/**
* 新增咨询机构
*
* @param addAdvisoryBodyBo 新增信息
* @return 添加结果
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Integer addAdvisoryBody(AddAdvisoryBodyBo addAdvisoryBodyBo) {
//如果是新增咨询机构,则需要新增记录到咨询机构表
if (addAdvisoryBodyBo.getIsNewAdvisoryBody()) {
AdvisoryBody newAdvisoryBody = BeanUtil.toBean(addAdvisoryBodyBo, AdvisoryBody.class);
newAdvisoryBody.setCreateTime(new Date());
baseMapper.insert(newAdvisoryBody);
}
return advisoryBodyProjectMapper.insert(BeanUtil.toBean(addAdvisoryBodyBo, AdvisoryBodyProject.class));
}
/**
* 每小时更新一次咨询机构经营范围
*/
@Override
public void updateAdvisoryBodyBusinessScope() {
EnterpriseInfoHeaderBody infoHeaderBody = new EnterpriseInfoHeaderBody();
for (AdvisoryBody advisoryBody : baseMapper.selectList(null)) {
infoHeaderBody.setCompanyId(Math.toIntExact(advisoryBody.getAdvisoryBodyCid()));
Map<String, Object> companyMap = dskOpenApiUtil.requestBody("/api/jsk/enterprise/infoHeader", BeanUtil.beanToMap(infoHeaderBody, false, false));
Map companyData = MapUtils.getMap(companyMap, "data", null);
String businessScope = MapUtils.getString(companyData, "businessScope", "empty");
if (!"empty".equals(businessScope)) {
advisoryBody.setBusinessScope(businessScope);
baseMapper.updateById(advisoryBody);
}
}
}
}
......@@ -17,10 +17,7 @@ import com.dsk.cscec.domain.DCustomer;
import com.dsk.cscec.domain.bo.AdvisoryBodyBo;
import com.dsk.cscec.domain.bo.CustomerCooperationBo;
import com.dsk.cscec.domain.bo.CustomerInfoBo;
import com.dsk.cscec.domain.vo.AdvisoryBodyVo;
import com.dsk.cscec.domain.vo.CustomerApproveVo;
import com.dsk.cscec.domain.vo.CustomerCooperationVo;
import com.dsk.cscec.domain.vo.CustomerInfoVo;
import com.dsk.cscec.domain.vo.*;
import com.dsk.cscec.mapper.AdvisoryBodyMapper;
import com.dsk.cscec.mapper.DCustomerMapper;
import com.dsk.cscec.mapper.DSubcontractMapper;
......@@ -66,10 +63,11 @@ public class CustomerInfoServiceImpl extends ServiceImpl<DCustomerMapper, DCusto
Page<CustomerInfoVo> page = baseMapper.queryListByType(query.build(), bo);
if (CollectionUtils.isNotEmpty(page.getRecords())) {
page.getRecords().parallelStream().forEach(item->{
DCustomerListVo vo = subcontractMapper.selectStatisticByCustomerId(item.getCustomerId());
//企业合作数量
item.setEnterpriseCooperationCount(subcontractMapper.selectEnterpriseCountByCustomerId(item.getCustomerId()));
item.setEnterpriseCooperationCount(vo.getEnterpriseCooperationCount());
//项目合作数量
item.setProjectCooperationCount(subcontractMapper.selectProjectCountByCustomerId(item.getCustomerId()));
item.setProjectCooperationCount(vo.getProjectCooperationCount());
//关键字标红
if(!ObjectUtils.isEmpty(bo.getCustomerName())){
item.setCustomerName(StringUtils.markInRed(item.getCustomerName(), bo.getCustomerName()));
......
......@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsk.common.core.domain.entity.SysDictData;
import com.dsk.cscec.domain.DimArea;
import com.dsk.cscec.domain.vo.RegionVo;
import com.dsk.cscec.domain.vo.RegionWithLevelVo;
import com.dsk.cscec.mapper.DimAreaMapper;
import com.dsk.cscec.service.IDimAreaService;
import com.dsk.system.service.ISysDictTypeService;
......@@ -67,6 +66,7 @@ public class DimAreaServiceImpl extends ServiceImpl<DimAreaMapper, DimArea> impl
}
}
provinceVo.setChildren(cityVos);
provinceVo.setChildrenLength(provinceVo.getChildren().size());
provinceVos.add(provinceVo);
}
}
......@@ -78,8 +78,8 @@ public class DimAreaServiceImpl extends ServiceImpl<DimAreaMapper, DimArea> impl
}
@Override
public List<RegionWithLevelVo> allAreaWithoutRegion() {
List<RegionWithLevelVo> vos = new ArrayList<>();
public List<RegionVo> allAreaWithoutRegion() {
List<RegionVo> vos = new ArrayList<>();
//区域
List<SysDictData> sysDictData = sysDictTypeService.selectDictDataByType(AREA_TYPE);
if(CollectionUtils.isNotEmpty(sysDictData)){
......@@ -93,10 +93,9 @@ public class DimAreaServiceImpl extends ServiceImpl<DimAreaMapper, DimArea> impl
if(CollectionUtils.isNotEmpty(provinces)){
for (Object province : provinces) {
RegionWithLevelVo provinceVo = new RegionWithLevelVo();
RegionVo provinceVo = new RegionVo();
provinceVo.setValue(String.valueOf(province));
provinceVo.setLevel("1");
List<RegionWithLevelVo> cityVos = new ArrayList<>();
List<RegionVo> cityVos = new ArrayList<>();
//市
List<Object> citys = baseMapper.selectObjs(Wrappers.<DimArea>lambdaQuery()
.select(DimArea::getAreaName3)
......@@ -105,9 +104,8 @@ public class DimAreaServiceImpl extends ServiceImpl<DimAreaMapper, DimArea> impl
.groupBy(DimArea::getAreaName3));
if(CollectionUtils.isNotEmpty(citys)){
for (Object city : citys) {
RegionWithLevelVo cityVo = new RegionWithLevelVo();
RegionVo cityVo = new RegionVo();
cityVo.setValue(String.valueOf(city));
cityVo.setLevel("2");
cityVos.add(cityVo);
}
}
......
......@@ -35,6 +35,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
......@@ -80,9 +81,14 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject>
Page<ProjectSearchVo> page = baseMapper.selectPageProjectList(pageQuery.build(), this.buildProjectQueryWrapper(projectSearchBo, projectKeys));
//补充咨询机构信息
for (ProjectSearchVo projectSearchVo : page.getRecords()) {
//补充咨询机构信息
projectSearchVo.setAdvisoryBody(this.getAdvisoryBodyByProjectKey(projectSearchVo.getProjectKey()));
//关键字标红
if (StringUtils.isNotBlank(projectSearchBo.getProjectName())) {
projectSearchVo.setProjectName(StringUtils.markInRed(projectSearchVo.getProjectName(), projectSearchBo.getProjectName()));
}
}
return TableDataInfo.build(page);
}
......@@ -103,7 +109,7 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject>
.like(StringUtils.isNotBlank(projectSearchBo.getOwnerUnit()), "p.owner_name", projectSearchBo.getOwnerUnit())
//项目创建时间(字段去的合同签约日期)
.between(ObjectUtil.isNotNull(projectSearchBo.getProjectStartTime()) && ObjectUtil.isNotNull(projectSearchBo.getProjectEndTime()),
"p.sign_date",
"p.contract_sign_date",
projectSearchBo.getProjectStartTime(),
projectSearchBo.getProjectEndTime())
//项目承接类型下拉选项
......@@ -142,7 +148,6 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject>
public TableDataInfo<CooperateProjectDetailSearchVo> queryCooperateProjectDetailList(CooperateProjectDetailSearchBo cooperateProjectDetailSearchBo, PageQuery pageQuery) {
//先根据咨询机构CID查出所有该咨询机构下的项目主键keys
List<Long> projectKeys = advisoryBodyProjectMapper.selectProjectKeysByAdvisoryBodyCids(Collections.singletonList(cooperateProjectDetailSearchBo.getAdvisoryBodyCid()));
//再根据记录终改的项目主键查询项目详情
QueryWrapper<DProject> wrapper = Wrappers.query();
wrapper
......@@ -151,22 +156,36 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject>
//项目名称
.like(StringUtils.isNotBlank(cooperateProjectDetailSearchBo.getProjectName()), "project_name", cooperateProjectDetailSearchBo.getProjectName())
//项目承接类型
.in(!cooperateProjectDetailSearchBo.getIsinvestproject().isEmpty(), "isinvestproject", cooperateProjectDetailSearchBo.getIsinvestproject())
.in(ObjectUtil.isNotNull(cooperateProjectDetailSearchBo.getIsinvestproject()), "isinvestproject", cooperateProjectDetailSearchBo.getIsinvestproject())
//工程基础大类
.in(!cooperateProjectDetailSearchBo.getProjectType1().isEmpty(), "project_type1", cooperateProjectDetailSearchBo.getProjectType1())
.in(ObjectUtil.isNotNull(cooperateProjectDetailSearchBo.getProjectType1()), "project_type1", cooperateProjectDetailSearchBo.getProjectType1())
//工程类别明细
.in(!cooperateProjectDetailSearchBo.getProjectType().isEmpty(), "project_type", cooperateProjectDetailSearchBo.getProjectType())
.in(ObjectUtil.isNotNull(cooperateProjectDetailSearchBo.getProjectType()), "project_type", cooperateProjectDetailSearchBo.getProjectType())
//项目地区
.in(!cooperateProjectDetailSearchBo.getProvinceName().isEmpty(), "province_name", cooperateProjectDetailSearchBo.getProvinceName())
.in(ObjectUtil.isNotNull(cooperateProjectDetailSearchBo.getProvinceName()), "province_name", cooperateProjectDetailSearchBo.getProvinceName())
.or()
.in(!cooperateProjectDetailSearchBo.getCityName().isEmpty(), "city_name", cooperateProjectDetailSearchBo.getCityName());
.in(ObjectUtil.isNotNull(cooperateProjectDetailSearchBo.getCityName()), "city_name", cooperateProjectDetailSearchBo.getCityName());
Page<CooperateProjectDetailSearchVo> page = baseMapper.selectPageCooperateProjectDetailList(pageQuery.build(), wrapper);
//填充结算天数
for (CooperateProjectDetailSearchVo cooperateProjectDetailSearchVo : page.getRecords()) {
AdvisoryBodyProject advisoryBodyProject = advisoryBodyProjectMapper.selectById(cooperateProjectDetailSearchVo.getProjectKey());
long betweenDays = DateUtil.between(advisoryBodyProject.getSettleStartTime(), advisoryBodyProject.getSettleFinishTime(), DateUnit.DAY);
cooperateProjectDetailSearchVo.setSettlementDays(betweenDays);
//填充咨询机构与项目关联信息
cooperateProjectDetailSearchVo.setAdvisoryBodyProject(advisoryBodyProject);
//填充结算天数
if (ObjectUtil.isNotNull(advisoryBodyProject)) {
Date settleStartTime = advisoryBodyProject.getSettleStartTime();
Date settleFinishTime = advisoryBodyProject.getSettleFinishTime();
if (ObjectUtil.isNotNull(settleStartTime)&& ObjectUtil.isNotNull(settleFinishTime)) {
cooperateProjectDetailSearchVo.setSettlementDays(DateUtil.between(settleStartTime, settleFinishTime, DateUnit.DAY));
}else {
cooperateProjectDetailSearchVo.setSettlementDays(0L);
}
}
//关键字标红
if (StringUtils.isNotBlank(cooperateProjectDetailSearchBo.getProjectName())) {
cooperateProjectDetailSearchVo.setProjectName(StringUtils.markInRed(cooperateProjectDetailSearchVo.getProjectName(), cooperateProjectDetailSearchBo.getProjectName()));
}
}
return TableDataInfo.build(page);
}
......@@ -194,6 +213,9 @@ public class IDProjectServiceImpl extends ServiceImpl<DProjectMapper, DProject>
projectDetailVo.setCorporatePerson(MapUtils.getString(companyData, "corporatePerson", ""));
//注册地址
projectDetailVo.setRegAddress(MapUtils.getString(companyData, "addressDetail", ""));
//查询项目信息并填充
projectDetailVo.setAdvisoryBodyProject(advisoryBodyProjectMapper.selectById(projectDetailBo.getProjectKey()));
return projectDetailVo;
}
}
......
package com.dsk.jsk.controller;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.jsk.domain.JskCompanyRelationTableV1Dto;
import com.dsk.jsk.service.CompanyRelationTableV1Service;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @ClassName CompanyRelationTableV1Controller
* @Description
* @Author Dgm
* @Date 2023/12/13 11:28
* @Version
*/
@RestController
@RequestMapping("/consultancy")
public class CompanyRelationTableV1Controller {
@Resource
private CompanyRelationTableV1Service relationTableV1Service;
/***
*@Description: 业主/施工/集团单位-分页列表
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:29
*/
@PostMapping("/page")
public TableDataInfo page(@RequestBody JskCompanyRelationTableV1Dto dto) throws Exception {
return relationTableV1Service.page(dto);
}
/***
*@Description: -业主/施工/集团单位详情-分页列表
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:29
*/
@PostMapping("/detailPage")
public TableDataInfo detailPage(@RequestBody JskCompanyRelationTableV1Dto dto) throws Exception{
return relationTableV1Service.detailPage(dto);
}
/***
*@Description: -分页列表-下拉
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:29
*/
@PostMapping("/pageSelect")
public R pageSelect(@RequestBody JskCompanyRelationTableV1Dto dto) throws Exception{
return relationTableV1Service.pageSelect(dto);
}
}
package com.dsk.jsk.domain;
import lombok.Data;
import java.util.List;
/**
* @ClassName JskCompanyRelationTableV1Dto
* @Description
* @Author Dgm
* @Date 2023/12/11 20:37
* @Version
*/
@Data
public class JskCompanyRelationTableV1Dto extends BasePage {
/**
* 搜-关键字素
*/
private String keyword;
/**
* 企业类型
*/
private String companyRole;
/**
* 项目类型
*/
private List<String> counterpartCompanyRoles;
/**
* 工程类型
*/
private List<String> projectTypes;
/**
* 咨询机构业务类型
*/
private List<String> businessTypes;
/**
* 公布日期-开始时间
*/
private String beginTime;
/**
* 公布日期-结束时间
*/
private String endTime;
/**
* 本次合作合同金额(万元)-最大金额
*/
private Double maxAmount;
/**
* 本次合作合同金额(万元)-最小金额
*/
private Double minAmount;
/**
* 企业Id
*/
private Integer companyId;
/**
* 企业类型 1:业主 2:施工 3:集团
*/
private Integer companyType;
/**
* 排序 1:金额降序 2:金额升序 3: 时间降序 4: 时间升区5: 数量降序6:数量升序
*/
private Integer sort = 5;
}
package com.dsk.jsk.service;
import cn.hutool.core.bean.BeanUtil;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.jsk.domain.*;
import com.dsk.system.utils.DskOpenApiUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* @ClassName CompanyRelationTableV1Controller
* @Description
* @Author Dgm
* @Date 2023/12/13 11:28
* @Version
*/
@Slf4j
@Service
public class CompanyRelationTableV1Service {
@Autowired
private DskOpenApiUtil dskOpenApiUtil;
public TableDataInfo page(JskCompanyRelationTableV1Dto dto) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/consultancy/page", BeanUtil.beanToMap(dto, false, false));
return dskOpenApiUtil.responsePage(map);
}
public TableDataInfo detailPage(JskCompanyRelationTableV1Dto dto) throws Exception{
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/consultancy/detailPage", BeanUtil.beanToMap(dto, false, false));
return dskOpenApiUtil.responsePage(map);
}
/***
*@Description: -分页列表-下拉
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:29
*/
public R pageSelect(JskCompanyRelationTableV1Dto dto) throws Exception{
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/consultancy/pageSelect", BeanUtil.beanToMap(dto, false, false));
return BeanUtil.toBean(map, R.class);
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsk.cscec.mapper.AdvisoryBodyCustomFormMapper">
</mapper>
\ No newline at end of file
......@@ -14,7 +14,7 @@
abp.project_leader_phone,
ab.advisory_body_name,
dp.project_name,dp.project_code,dp.province_name,dp.city_name,dp.isinvestproject,dp.project_type1,
dp.project_type,dp.contract_orig_value,dp.owner_name,dp.contract_org_name,dp.load_time
dp.project_type,dp.contract_orig_value,dp.owner_name,dp.contract_org_name,dp.contract_sign_date
from advisory_body_project abp
left join advisory_body ab on ab.advisory_body_id = abp.advisory_body_id
left join d_project dp on dp.project_key = abp.project_key
......@@ -34,32 +34,31 @@
<if test="bo.contractOrgName != null and bo.contractOrgName != ''">
and dp.contract_org_name = #{bo.contractOrgName}
</if>
<if test="bo.province != null and bo.province.size > 0 and (bo.city == null or bo.city.size==0)">
and dp.province_name in
<foreach collection="bo.province" item="province" separator="," open="(" close=")">
#{province}
</foreach>
</if>
<if test="(bo.province == null or bo.province.size==0) and bo.city != null and bo.city.size > 0 ">
and dp.city_name in
<foreach collection="bo.city" item="city" separator="," open="(" close=")">
#{city}
</foreach>
</if>
<if test="bo.province != null and bo.province.size > 0 and bo.city != null and bo.city.size > 0 ">
and (
dp.province_name in
<foreach collection="bo.province" item="province" separator="," open="(" close=")">
#{province}
</foreach>
or dp.city_name in
<foreach collection="bo.city" item="city" separator="," open="(" close=")">
#{city}
</foreach>
)
<if test="bo.area != null and bo.area.size > 0 or (bo.province != null and bo.province.size > 0) or (bo.city != null and bo.city.size > 0)">
and
<trim prefix="(" suffix=")" prefixOverrides="or">
<if test="bo.area != null and bo.area.size > 0 ">
or dp.area_name in
<foreach collection="bo.area" item="areaName" open="(" close=")" separator=",">
#{areaName}
</foreach>
</if>
<if test="bo.province != null and bo.province.size > 0 ">
or dp.province_name in
<foreach collection="bo.province" item="provinceName" open="(" close=")" separator=",">
#{provinceName}
</foreach>
</if>
<if test="bo.city != null and bo.city.size > 0 ">
or dp.city_name in
<foreach collection="bo.city" item="cityName" open="(" close=")" separator=",">
#{cityName}
</foreach>
</if>
</trim>
</if>
</where>
order by dp.load_time desc
order by dp.contract_sign_date desc
</select>
<select id="selectAdvisoryBodyCidsByName" resultType="java.lang.Long">
......
......@@ -114,29 +114,28 @@
<if test="bo.customerName != null and bo.customerName != '' ">
and customer_name like concat('%',#{bo.customerName},'%')
</if>
<if test="bo.registerProvince != null and bo.registerCity == null">
and register_province in
<foreach collection="bo.registerProvince" item="registerProvince" separator="," open="(" close=")">
#{registerProvince}
</foreach>
</if>
<if test="bo.registerProvince == null and bo.registerCity != null ">
and register_city in
<foreach collection="bo.registerCity" item="registerCity" separator="," open="(" close=")">
#{registerCity}
</foreach>
</if>
<if test="bo.registerProvince != null and bo.registerCity != null ">
and (
register_province in
<foreach collection="bo.registerProvince" item="registerProvince" separator="," open="(" close=")">
#{registerProvince}
</foreach>
or register_city in
<foreach collection="bo.registerCity" item="registerCity" separator="," open="(" close=")">
#{registerCity}
</foreach>
)
<if test="bo.registerRegion != null and bo.registerRegion.size > 0 or (bo.registerProvince != null and bo.registerProvince.size > 0) or (bo.registerCity != null and bo.registerCity.size > 0)">
and
<trim prefix="(" suffix=")" prefixOverrides="or">
<if test="bo.registerRegion != null and bo.registerRegion.size > 0 ">
or register_region in
<foreach collection="bo.registerRegion" item="registerRegion" open="(" close=")" separator=",">
#{registerRegion}
</foreach>
</if>
<if test="bo.registerProvince != null and bo.registerProvince.size > 0 ">
or register_province in
<foreach collection="bo.registerProvince" item="registerProvince" open="(" close=")" separator=",">
#{registerProvince}
</foreach>
</if>
<if test="bo.registerCity != null and bo.registerCity.size > 0 ">
or register_city in
<foreach collection="bo.registerCity" item="registerCity" open="(" close=")" separator=",">
#{registerCity}
</foreach>
</if>
</trim>
</if>
<if test="bo.groupSpecialtyId != null ">
<foreach collection="bo.groupSpecialtyId" item="groupSpecialtyId">
......
......@@ -19,8 +19,8 @@
<select id="selectStatisticByCustomerId" resultType="com.dsk.cscec.domain.vo.DCustomerListVo">
select
count(DISTINCT org.customer_id) enterpriseCooperationCount,
count(DISTINCT project.customer_id) projectCooperationCount
count(DISTINCT org.sign_org_id) enterpriseCooperationCount,
count(DISTINCT project.project_id) projectCooperationCount
from d_customer dc
left join d_subcontract org on org.customer_id = dc.customer_id
left join d_subcontract project on project.customer_id = dc.customer_id
......
......@@ -41,3 +41,9 @@ export const getAreaListApi = () => request({
url: "/area/all/withoutRegion",
method: "get"
});
//获取地区树
export const getAllAreaApi = () => request({
url: '/area/all',
method: 'get',
});
import request from '@/utils/request';
/**
* 获取(常合作业主单位、常合作施工单位、常合作集团)列表
* @param {*} data
* @returns
*/
export const getCooperativeOwnerUnitsListApi = (data) => request({
url: "/consultancy/detailPage",
method: "post",
data
});
\ No newline at end of file
import request from '@/utils/request';
/**
* 获取咨询机构合作列表
* @param {*} data
* @returns
*/
export const getConsultingAgencyCooperationListApi = (data) => request({
url: "/customerInfo/advisoryList",
method: "get",
data
});
/**
* 供应商准入情况
* @param {*} params
* @returns
*/
export const getSupplierAccessInfoApi = (params) => request({
url: "/customerInfo/approveInfo",
method: "get",
params
});
/**
* 导出咨询机构合作记录excel文件
* @param {*} params
* @returns
*/
export const exportRecordOfCooperationExcelApi = (params) => request({
url: "/customerInfo/advisoryExport",
method: "get",
params,
responseType: "blob"
});
/**
* 供应商合作记录列表
* @param {*} params
* @returns
*/
export const getSupplierCooperationRecordListApi = (params) => request({
url: "/customerInfo/cooperationList",
method: "get",
params,
});
\ No newline at end of file
import request from '@/utils/request'
export function zjyjAptitude (data) {
return request({
url: '/enterprise/zjyjAptitude',
method: 'post',
data
})
}
export function enterpriseAptitude (data) {
return request({
url: '/enterprise/zjyj/enterpriseAptitude',
method: 'post',
data
})
}
export function importTemplate (data) {
return request({
url: '/export/aptitude/importTemplate',
method: 'post',
responseType: "blob",
data
})
}
export function list (data) {
return request({
url: '/user/file/record/list',
method: 'get',
params:data
})
}
//资质标准
export function standard (data) {
return request({
url: '/enterprise/zjyj/cert/standard',
method: 'post',
data
})
}
<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_181_024631"><rect x="0" y="0" width="16" height="16" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_181_024631)"><g><g><g><rect x="0" y="0" width="16" height="16" rx="0" fill="#FFFFFF" fill-opacity="0.009999999776482582"/></g><g><path d="M3.9996778125,11.500654375L14.6663078125,11.500654375Q14.7156078125,11.500654375,14.7639078125,11.491044375Q14.8122078125,11.481434375,14.8577078125,11.462594375Q14.9032078125,11.443744375,14.9441078125,11.416384375Q14.9851078125,11.389024375,15.0199078125,11.354204375Q15.0547078125,11.319384375,15.0821078125,11.278434375Q15.1094078125,11.237494375,15.1283078125,11.191994375Q15.1471078125,11.146494375,15.1567078125,11.098194375Q15.1663078125,11.049894375,15.1663078125,11.000654375L15.1663078125,2.333984375Q15.1663078125,2.284738675,15.1567078125,2.236439275Q15.1471078125,2.188139375,15.1283078125,2.142642375Q15.1094078125,2.097145375,15.0821078125,2.056199375Q15.0547078125,2.015253375,15.0199078125,1.980431375Q14.9851078125,1.945609375,14.9441078125,1.918249375Q14.9032078125,1.8908903750000001,14.8577078125,1.872044375Q14.8122078125,1.853199375,14.7639078125,1.843591375Q14.7156078125,1.833984375,14.6663078125,1.833984375L1.3330078125,1.833984375Q1.2837621125,1.833984375,1.2354627125,1.843591375Q1.1871628125,1.853199375,1.1416658124999999,1.872044375Q1.0961688125,1.8908903750000001,1.0552228125,1.918249375Q1.0142768125,1.945609375,0.9794548125,1.980431375Q0.9446328125,2.015253375,0.9172728125,2.056199375Q0.8899138125,2.097145375,0.8710678125,2.142642375Q0.8522228125,2.188139375,0.8426148124999999,2.236439275Q0.8330078125,2.284738675,0.8330078125,2.333984375L0.8330078125,11.000654375Q0.8330078125,11.049894375,0.8426148124999999,11.098194375Q0.8522228125,11.146494375,0.8710678125,11.191994375Q0.8899138125,11.237484375,0.9172728125,11.278434375Q0.9446328125,11.319384375,0.9794548125,11.354204375Q1.0142768125,11.389024375,1.0552228125,11.416384375Q1.0961688125,11.443744375,1.1416658124999999,11.462584375Q1.1871628125,11.481434375,1.2354627125,11.491044375Q1.2837621125,11.500654375,1.3330078125,11.500654375L3.9996778125,11.500654375ZM14.1663078125,10.500654375L1.8330078125,10.500654375L1.8330078125,2.833984375L14.1663078125,2.833984375L14.1663078125,10.500654375Z" fill-rule="evenodd" fill="#232323" fill-opacity="1"/></g><g><path d="M4.8330078125,7.333984375L4.8330078125,8.667314375Q4.8330078125,8.716564375,4.8426148125,8.764864375Q4.8522228125,8.813164375,4.8710678125,8.858664375Q4.8899138125,8.904154375000001,4.9172728125,8.945104375Q4.9446328125,8.986044375,4.9794548125,9.020874375Q5.0142768125,9.055694375,5.0552228125,9.083054375Q5.0961688125,9.110414375,5.1416658125,9.129254375Q5.1871628125,9.148104374999999,5.2354627125,9.157714375Q5.2837621125,9.167314375,5.3330078125,9.167314375Q5.3822535125,9.167314375,5.4305529125,9.157714375Q5.4788528125,9.148104374999999,5.5243498125,9.129254375Q5.5698468125,9.110414375,5.6107928125,9.083054375Q5.6517388125,9.055694375,5.6865608125,9.020874375Q5.7213828125,8.986044375,5.7487428125,8.945104375Q5.7761018125,8.904154375000001,5.7949478125,8.858664375Q5.8137928125,8.813164375,5.8234008125,8.764864375Q5.8330078125,8.716564375,5.8330078125,8.667314375L5.8330078125,7.333984375Q5.8330078125,7.284738675,5.8234008125,7.236439275Q5.8137928125,7.188139375,5.7949478125,7.142642375Q5.7761018125,7.097145375,5.7487428125,7.056199375Q5.7213828125,7.015253375,5.6865608125,6.980431375Q5.6517388125,6.945609375,5.6107928125,6.918249375Q5.5698468125,6.890890375,5.5243498125,6.872044375Q5.4788528125,6.853199375,5.4305529125,6.843591375Q5.3822535125,6.833984375,5.3330078125,6.833984375Q5.2837621125,6.833984375,5.2354627125,6.843591375Q5.1871628125,6.853199375,5.1416658125,6.872044375Q5.0961688125,6.890890375,5.0552228125,6.918249375Q5.0142768125,6.945609375,4.9794548125,6.980431375Q4.9446328125,7.015253375,4.9172728125,7.056199375Q4.8899138125,7.097145375,4.8710678125,7.142642375Q4.8522228125,7.188139375,4.8426148125,7.236439275Q4.8330078125,7.284738675,4.8330078125,7.333984375Z" fill-rule="evenodd" fill="#232323" fill-opacity="1"/></g><g><path d="M7.5,11L7.5,13Q7.5,13.04925,7.509607,13.09754Q7.519215,13.14584,7.53806,13.19134Q7.556906,13.23684,7.584265,13.27778Q7.611625,13.31873,7.646447,13.35355Q7.681269,13.38838,7.722215,13.41573Q7.763161,13.44309,7.808658,13.46194Q7.854155,13.48078,7.9024549,13.49039Q7.9507543,13.5,8,13.5Q8.0492457,13.5,8.0975451,13.49039Q8.145845,13.48078,8.191342,13.46194Q8.236839,13.44309,8.277785,13.41573Q8.318731,13.38838,8.353553,13.35355Q8.388375,13.31873,8.415735,13.27779Q8.443094,13.23684,8.46194,13.19134Q8.480785000000001,13.14584,8.490393,13.09754Q8.5,13.04925,8.5,13L8.5,11Q8.5,10.9507543,8.490393,10.9024549Q8.480785000000001,10.854155,8.46194,10.808658Q8.443094,10.763161,8.415735,10.722215Q8.388375,10.681269,8.353553,10.646447Q8.318731,10.611625,8.277785,10.584265Q8.236839,10.556906,8.191342,10.53806Q8.145845,10.519214999999999,8.0975451,10.509607Q8.0492457,10.5,8,10.5Q7.9507543,10.5,7.9024549,10.509607Q7.854155,10.519214999999999,7.808658,10.53806Q7.763161,10.556906,7.722215,10.584265Q7.681269,10.611625,7.646447,10.646447Q7.611625,10.681269,7.584265,10.722215Q7.556906,10.763161,7.53806,10.808658Q7.519215,10.854155,7.509607,10.9024549Q7.5,10.9507543,7.5,11Z" fill-rule="evenodd" fill="#232323" fill-opacity="1"/></g><g><path d="M7.5,6L7.5,8.66667Q7.5,8.715910000000001,7.509607,8.76421Q7.519215,8.81251,7.53806,8.85801Q7.556906,8.90351,7.584265,8.94445Q7.611625,8.9854,7.646447,9.02022Q7.681269,9.05504,7.722215,9.0824Q7.763161,9.10976,7.808658,9.12861Q7.854155,9.14745,7.9024549,9.15706Q7.9507543,9.16667,8,9.16667Q8.0492457,9.16667,8.0975451,9.15706Q8.145845,9.14745,8.191342,9.12861Q8.236839,9.10976,8.277785,9.0824Q8.318731,9.05504,8.353553,9.02022Q8.388375,8.9854,8.415735,8.94445Q8.443094,8.90351,8.46194,8.85801Q8.480785000000001,8.81251,8.490393,8.76421Q8.5,8.715910000000001,8.5,8.66667L8.5,6Q8.5,5.9507543,8.490393,5.9024549Q8.480785000000001,5.854155,8.46194,5.808658Q8.443094,5.763161,8.415735,5.722215Q8.388375,5.681269,8.353553,5.646447Q8.318731,5.611625,8.277785,5.584265Q8.236839,5.556906,8.191342,5.53806Q8.145845,5.519215,8.0975451,5.509607Q8.0492457,5.5,8,5.5Q7.9507543,5.5,7.9024549,5.509607Q7.854155,5.519215,7.808658,5.53806Q7.763161,5.556906,7.722215,5.584265Q7.681269,5.611625,7.646447,5.646447Q7.611625,5.681269,7.584265,5.722215Q7.556906,5.763161,7.53806,5.808658Q7.519215,5.854155,7.509607,5.9024549Q7.5,5.9507543,7.5,6Z" fill-rule="evenodd" fill="#232323" fill-opacity="1"/></g><g><path d="M10.1669921875,4.666015625L10.1669921875,8.666015625Q10.1669921875,8.715265625,10.1765991875,8.763565625Q10.186207187499999,8.811855625,10.2050521875,8.857355625Q10.2238981875,8.902855625,10.2512571875,8.943795625Q10.2786171875,8.984745625,10.3134391875,9.019565625Q10.3482611875,9.054385625,10.3892071875,9.081745625Q10.4301531875,9.109105625,10.4756501875,9.127955625Q10.5211471875,9.146795625,10.5694470875,9.156405625Q10.6177464875,9.166015625,10.6669921875,9.166015625Q10.7162378875,9.166015625,10.7645372875,9.156405625Q10.8128371875,9.146795625,10.8583341875,9.127955625Q10.9038311875,9.109105625,10.9447771875,9.081745625Q10.9857231875,9.054385625,11.0205451875,9.019565625Q11.0553671875,8.984745625,11.0827271875,8.943795625Q11.1100861875,8.902855625,11.1289321875,8.857355625Q11.147777187500001,8.811855625,11.1573851875,8.763565625Q11.1669921875,8.715265625,11.1669921875,8.666015625L11.1669921875,4.666015625Q11.1669921875,4.616769925,11.1573851875,4.568470525Q11.147777187500001,4.520170625,11.1289321875,4.474673625Q11.1100861875,4.429176625,11.0827271875,4.388230625Q11.0553671875,4.347284625,11.0205451875,4.312462625Q10.9857231875,4.277640625,10.9447771875,4.250280625Q10.9038311875,4.222921625,10.8583341875,4.204075625Q10.8128371875,4.185230625,10.7645372875,4.175622625Q10.7162378875,4.166015625,10.6669921875,4.166015625Q10.6177464875,4.166015625,10.5694470875,4.175622625Q10.5211471875,4.185230625,10.4756501875,4.204075625Q10.4301531875,4.222921625,10.3892071875,4.250280625Q10.3482611875,4.277640625,10.3134391875,4.312462625Q10.2786171875,4.347284625,10.2512571875,4.388230625Q10.2238981875,4.429176625,10.2050521875,4.474673625Q10.186207187499999,4.520170625,10.1765991875,4.568470525Q10.1669921875,4.616769925,10.1669921875,4.666015625Z" fill-rule="evenodd" fill="#232323" fill-opacity="1"/></g><g><path d="M4,14.166015625L12.00001,14.166015625Q12.04926,14.166015625,12.09756,14.156408625Q12.14586,14.146800625000001,12.19135,14.127955625Q12.23685,14.109109625,12.2778,14.081750625Q12.31874,14.054390625,12.35357,14.019568625Q12.38839,13.984746625,12.41575,13.943800625Q12.44311,13.902854625,12.46195,13.857357625Q12.4808,13.811860625,12.49041,13.763560725Q12.50001,13.715261325,12.50001,13.666015625Q12.50001,13.616769925,12.49041,13.568470525Q12.4808,13.520170625,12.46195,13.474673625Q12.44311,13.429176625,12.41575,13.388230625Q12.38839,13.347284625,12.35357,13.312462625Q12.31874,13.277640625,12.2778,13.250280625Q12.23685,13.222921625,12.19135,13.204075625Q12.14586,13.185230624999999,12.09756,13.175622625Q12.04926,13.166015625,12.00001,13.166015625L4,13.166015625Q3.9507543,13.166015625,3.9024549,13.175622625Q3.854155,13.185230624999999,3.808658,13.204075625Q3.763161,13.222921625,3.722215,13.250280625Q3.681269,13.277640625,3.646447,13.312462625Q3.611625,13.347284625,3.584265,13.388230625Q3.556906,13.429176625,3.5380599999999998,13.474673625Q3.519215,13.520170625,3.509607,13.568470525Q3.5,13.616769925,3.5,13.666015625Q3.5,13.715261325,3.509607,13.763560725Q3.519215,13.811860625,3.5380599999999998,13.857357625Q3.556906,13.902854625,3.584265,13.943800625Q3.611625,13.984746625,3.646447,14.019568625Q3.681269,14.054390625,3.722215,14.081750625Q3.763161,14.109109625,3.808658,14.127955625Q3.854155,14.146800625000001,3.9024549,14.156408625Q3.9507543,14.166015625,4,14.166015625Z" fill-rule="evenodd" fill="#232323" fill-opacity="1"/></g></g></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" fill="none" version="1.1" width="16" height="16" viewBox="0 0 16 16"><defs><clipPath id="master_svg0_181_024594"><rect x="0" y="0" width="16" height="16" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_181_024594)"><g><path d="M6.8151546875,5.021609375000001L5.7810546875,5.241409375Q5.7393446875,5.250279375,5.6997346875,5.266079375Q5.6601246875,5.281879375,5.6237646875,5.304169375Q5.5874046875,5.326449375,5.5553346875,5.3545693750000005Q5.5232746875,5.382679375,5.4964346875,5.4158293749999995Q5.4696046875,5.448969375,5.448764687500001,5.486179375Q5.4279246875,5.523379375,5.4136946875,5.563579375Q5.3994546875000005,5.603779375,5.3922346875,5.645809375Q5.3850146875,5.687839374999999,5.3850146875,5.730489374999999L5.3850146875,5.7318693750000005Q5.3851546875,5.783719375,5.3959346875000005,5.8344393750000005Q5.4048046875,5.876149375,5.4206046875,5.915759375Q5.4364046875,5.955369375,5.4586946874999995,5.991729375Q5.4809746875,6.028099375,5.5090946875,6.060159375Q5.5372046875,6.092219375,5.5703546875,6.119059375Q5.6034946875,6.145899375,5.6407046875,6.166729375Q5.6779046875,6.187569375,5.7181046875,6.201809375Q5.7583046875,6.216039374999999,5.8003346875,6.223259375Q5.8423646875,6.230489374999999,5.8850146875,6.230489374999999L5.8863946875,6.230489374999999Q5.9382446875,6.230339375,5.9889646875,6.219559374999999L7.0230646875,5.999759375Q7.0905646875,5.985409375,7.1485046875,6.023029375L9.8481246875,7.776189375Q10.2535446875,8.039359375,10.7261246875,7.938889375L13.0644046875,7.441899375Q13.5371046875,7.341399375,13.8003046875,6.936109375Q14.0635046875,6.530819375,13.9630046875,6.058119375L13.7551046875,5.079999375Q13.6546046875,4.607329375,13.2493046875,4.344119375Q12.8440046875,4.080929375,12.3714046875,4.181379375L11.0112246875,4.470479375Q10.9436646875,4.484839375,10.8858246875,4.447269375L8.1861646875,2.694081375Q7.7808446875,2.4308843749999998,7.3081846875,2.531356375L1.3833496875,3.790712375Q1.3416356875,3.799578375,1.3020266875,3.815381375Q1.2624166875,3.831183375,1.2260556875,3.853465375Q1.1896946875,3.875748375,1.1576316875,3.9038663749999998Q1.1255696875,3.931984375,1.0987316875,3.965125375Q1.0718946875,3.998267375,1.0510566875,4.0354793749999995Q1.0302196875,4.072679375,1.0159836875,4.112879375Q1.0017486875000001,4.153079375,0.9945266875000001,4.1951093749999995Q0.9873046875,4.237139375,0.9873046875,4.279789375L0.9873066875000001,4.281169375Q0.9874496875000001,4.333019375,0.9982306875,4.383739375Q1.0189086875,4.481019375,1.0752416875,4.562989375Q1.1315736875,4.6449493749999995,1.2149846874999999,4.699119375Q1.3391976875,4.779789375,1.4873046875,4.779789375L1.4948042575,4.7797293750000005Q1.5435621875,4.778999375,1.5912596875,4.768859375L7.5161046875,3.509502375Q7.5836246875,3.495150375,7.6415246875,3.532750375L10.3411246875,5.285899375Q10.7463846875,5.549119375,11.2191346875,5.448629374999999L12.5792046875,5.159529375Q12.7423046875,5.124879375,12.7769046875,5.287899375L12.9848046875,6.266059375Q13.0195046875,6.429089375,12.8565046875,6.463749375L10.5181646875,6.960749375Q10.4506646875,6.975099375,10.3927646875,6.937519375L7.6931146875,5.184339375Q7.2877746875,4.921129375,6.8151546875,5.021609375000001Z" fill-rule="evenodd" fill="#232323" fill-opacity="1"/></g><g><path d="M10.21899875,10.092180625000001L10.21929875,10.092120625Q10.316588750000001,10.071440625000001,10.39854875,10.015110625Q10.48050875,9.958780625,10.53467875,9.875370625Q10.61534875,9.751150625,10.61534875,9.603040625L10.61528875,9.595550625Q10.61455875,9.546790625,10.60441875,9.499090625000001Q10.58374875,9.401810625,10.52740875,9.319840625Q10.47107875,9.237880625,10.38766875,9.183710625Q10.26345875,9.103050625,10.115348749999999,9.103040625L10.107848749999999,9.103100625Q10.05908875,9.103830625,10.01139875,9.113970625L8.97728875,9.333770625Q8.909738749999999,9.348130625,8.85189875,9.310560625L6.15223875,7.557376625Q5.7468787500000005,7.294155625,5.27423875,7.394642625L2.93595875,7.891671725Q2.46328005,7.992118625,2.20007175,8.397427625Q1.93687575,8.802718625,2.03734975,9.275400625L2.24526375,10.253540625Q2.34573175,10.726240624999999,2.75102175,10.989440625Q3.1563197499999998,11.252640625,3.62901875,11.152150625L4.98913875,10.863050625Q5.05667875,10.848690625,5.11457875,10.886290625L7.81418875,12.639450625Q8.219548750000001,12.902670624999999,8.69219875,12.802180625L14.61701875,11.542820625000001Q14.65871875,11.533950625,14.69831875,11.518150625Q14.73791875,11.502350625,14.77431875,11.480060625Q14.81061875,11.457780625,14.84271875,11.429660625Q14.87481875,11.401550625,14.90161875,11.368400625Q14.92841875,11.335260625,14.94931875,11.298060625Q14.97011875,11.260850625,14.98431875,11.220650625000001Q14.99861875,11.180450625,15.00581875,11.138420625Q15.01301875,11.096390625,15.01301875,11.053750625L15.01301875,11.052360625Q15.01291875,11.000510625,15.00211875,10.949790625Q14.99321875,10.908070625,14.97741875,10.868470625Q14.96161875,10.828860625,14.93931875,10.792490625Q14.91711875,10.756130625,14.88891875,10.724070625Q14.86081875,10.692010625,14.82771875,10.665170625Q14.79451875,10.638330625,14.75731875,10.617500625Q14.72011875,10.596660625,14.67991875,10.582420625000001Q14.63971875,10.568190625,14.59771875,10.560970625Q14.55571875,10.553740625,14.51301875,10.553740625L14.51161875,10.553750625Q14.45981875,10.553890625000001,14.40911875,10.564670625L8.48423875,11.824040625Q8.41675875,11.838390625,8.35882875,11.800780625L5.65918875,10.047600625Q5.25388875,9.784410625,4.78122875,9.884900625L3.42107175,10.174010625000001Q3.35355375,10.188360625,3.2956647500000003,10.150770625Q3.23776675,10.113170625,3.22340975,10.045620625L3.01549675,9.067490625Q3.0011437499999998,8.999960625,3.03874575,8.942060625Q3.07634075,8.884170625,3.14387575,8.869820625L5.482188750000001,8.372780625Q5.54966875,8.358433625,5.60759875,8.396046625L8.307198750000001,10.149190625Q8.71244875,10.412410625,9.18519875,10.311920624999999L10.21899875,10.092180625000001Z" fill-rule="evenodd" fill="#232323" fill-opacity="1"/></g></g></svg>
\ No newline at end of file
[
{
"name": "建筑业企业资质",
"id": 209,
"type": 0,
"list": [
{
"name": "施工总承包",
"id": 1,
"type": 1,
"list": [
{
"name": "建筑工程施工总承包",
"id": 4,
"type": 2,
"parentId": 1
},
{
"name": "公路工程施工总承包",
"id": 5,
"type": 2,
"parentId": 1
},
{
"name": "铁路工程施工总承包",
"id": 6,
"type": 2,
"parentId": 1
},
{
"name": "港口与航道工程施工总承包",
"id": 7,
"type": 2,
"parentId": 1
},
{
"name": "水利水电工程施工总承包",
"id": 8,
"type": 2,
"parentId": 1
},
{
"name": "电力工程施工总承包",
"id": 9,
"type": 2,
"parentId": 1
},
{
"name": "矿山工程施工总承包",
"id": 10,
"type": 2,
"parentId": 1
},
{
"name": "冶金工程施工总承包",
"id": 11,
"type": 2,
"parentId": 1
},
{
"name": "石油化工工程施工总承包",
"id": 12,
"type": 2,
"parentId": 1
},
{
"name": "市政公用工程施工总承包",
"id": 13,
"type": 2,
"parentId": 1
},
{
"name": "通信工程施工总承包",
"id": 14,
"type": 2,
"parentId": 1
},
{
"name": "机电工程施工总承包",
"id": 15,
"type": 2,
"parentId": 1
}
],
"parentId": 209
},
{
"name": "专业承包",
"id": 2,
"type": 1,
"list": [
{
"name": "地基基础工程专业承包",
"id": 16,
"type": 2,
"parentId": 2
},
{
"name": "起重设备安装工程专业承包",
"id": 17,
"type": 2,
"parentId": 2
},
{
"name": "预拌混凝土专业承包",
"id": 18,
"type": 2,
"parentId": 2
},
{
"name": "电子与智能化工程专业承包",
"id": 19,
"type": 2,
"parentId": 2
},
{
"name": "消防设施工程专业承包",
"id": 20,
"type": 2,
"parentId": 2
},
{
"name": "防水防腐保温工程专业承包",
"id": 21,
"type": 2,
"parentId": 2
},
{
"name": "桥梁工程专业承包",
"id": 22,
"type": 2,
"parentId": 2
},
{
"name": "隧道工程专业承包",
"id": 23,
"type": 2,
"parentId": 2
},
{
"name": "钢结构工程专业承包",
"id": 24,
"type": 2,
"parentId": 2
},
{
"name": "模板脚手架专业承包",
"id": 25,
"type": 2,
"parentId": 2
},
{
"name": "建筑装修装饰工程专业承包",
"id": 26,
"type": 2,
"parentId": 2
},
{
"name": "建筑机电安装工程专业承包",
"id": 27,
"type": 2,
"parentId": 2
},
{
"name": "建筑幕墙工程专业承包",
"id": 28,
"type": 2,
"parentId": 2
},
{
"name": "古建筑工程专业承包",
"id": 29,
"type": 2,
"parentId": 2
},
{
"name": "城市及道路照明工程专业承包",
"id": 30,
"type": 2,
"parentId": 2
},
{
"name": "公路路面工程专业承包",
"id": 31,
"type": 2,
"parentId": 2
},
{
"name": "公路路基工程专业承包",
"id": 32,
"type": 2,
"parentId": 2
},
{
"name": "公路交通工程专业承包",
"id": 33,
"type": 2,
"list": [
{
"name": "公路交通工程公路安全设施专业承包",
"id": 1663,
"type": 6,
"parentId": 33
},
{
"name": "公路交通工程公路机电工程专业承包",
"id": 1665,
"type": 6,
"parentId": 33
}
],
"parentId": 2
},
{
"name": "铁路电务工程专业承包",
"id": 34,
"type": 2,
"parentId": 2
},
{
"name": "铁路铺轨架梁工程专业承包",
"id": 35,
"type": 2,
"parentId": 2
},
{
"name": "铁路电气化工程专业承包",
"id": 36,
"type": 2,
"parentId": 2
},
{
"name": "机场场道工程专业承包",
"id": 37,
"type": 2,
"parentId": 2
},
{
"name": "民航空管工程及机场弱电系统工程专业承包",
"id": 38,
"type": 2,
"parentId": 2
},
{
"name": "机场目视助航工程专业承包",
"id": 39,
"type": 2,
"parentId": 2
},
{
"name": "港口与海岸工程专业承包",
"id": 40,
"type": 2,
"parentId": 2
},
{
"name": "航道工程专业承包",
"id": 41,
"type": 2,
"parentId": 2
},
{
"name": "通航建筑物工程专业承包",
"id": 42,
"type": 2,
"parentId": 2
},
{
"name": "港航设备安装及水上交管工程专业承包",
"id": 43,
"type": 2,
"parentId": 2
},
{
"name": "水工金属结构制作与安装工程专业承包",
"id": 44,
"type": 2,
"parentId": 2
},
{
"name": "水利水电机电安装工程专业承包",
"id": 45,
"type": 2,
"parentId": 2
},
{
"name": "河湖整治工程专业承包",
"id": 46,
"type": 2,
"parentId": 2
},
{
"name": "输变电工程专业承包",
"id": 47,
"type": 2,
"parentId": 2
},
{
"name": "核工程专业承包",
"id": 48,
"type": 2,
"parentId": 2
},
{
"name": "海洋石油工程专业承包",
"id": 49,
"type": 2,
"parentId": 2
},
{
"name": "环保工程专业承包",
"id": 50,
"type": 2,
"parentId": 2
},
{
"name": "特种工程专业承包",
"id": 51,
"type": 2,
"parentId": 2
}
],
"parentId": 209
}
],
"parentId": 0
},
{
"name": "工程勘察",
"id": 211,
"type": 0,
"list": [
{
"name": "工程勘察综合资质",
"id": 223,
"type": 1,
"parentId": 211
},
{
"name": "工程勘察专业资质",
"id": 225,
"type": 1,
"list": [
{
"name": "工程勘察岩土工程专业",
"id": 257,
"type": 2,
"list": [
{
"name": "工程勘察岩土工程专业",
"id": 404,
"type": 6,
"parentId": 257
},
{
"name": "工程勘察岩土工程专业(岩土工程勘察)",
"id": 405,
"type": 6,
"parentId": 257
},
{
"name": "岩土工程专业(岩土工程设计)",
"id": 407,
"type": 6,
"parentId": 257
},
{
"name": "岩土工程专业(岩土工程物探测试检测监测)",
"id": 409,
"type": 6,
"parentId": 257
}
],
"parentId": 225
},
{
"name": "工程勘察水文地质勘察专业",
"id": 259,
"type": 2,
"parentId": 225
},
{
"name": "工程勘察工程测量专业",
"id": 261,
"type": 2,
"parentId": 225
},
{
"name": "工程勘察海洋工程勘察专业",
"id": 263,
"type": 2,
"list": [
{
"name": "海洋工程勘察专业(海洋工程测量)",
"id": 411,
"type": 6,
"parentId": 263
},
{
"name": "海洋工程勘察专业(海洋岩土工程勘察)",
"id": 413,
"type": 6,
"parentId": 263
},
{
"name": "海洋工程勘察专业(海洋工程环境调查)",
"id": 415,
"type": 6,
"parentId": 263
}
],
"parentId": 225
}
],
"parentId": 211
},
{
"name": "工程勘察劳务资质",
"id": 227,
"type": 1,
"list": [
{
"name": "工程勘察工程钻探劳务",
"id": 265,
"type": 2,
"parentId": 227
},
{
"name": "工程勘察凿井劳务",
"id": 267,
"type": 2,
"parentId": 227
},
{
"name": "工程勘察劳务",
"id": 267,
"type": 2,
"parentId": 227
}
],
"parentId": 211
}
],
"parentId": 0
},
{
"name": "工程设计",
"id": 213,
"type": 0,
"list": [
{
"name": "工程设计综合资质",
"id": 229,
"type": 1,
"parentId": 213
},
{
"name": "工程设计行业资质",
"id": 231,
"type": 1,
"list": [
{
"name": "工程设计煤炭行业",
"id": 269,
"type": 2,
"parentId": 231
},
{
"name": "工程设计化工石化医药行业",
"id": 271,
"type": 2,
"parentId": 231
},
{
"name": "工程设计石油天然气(海洋石油)行业",
"id": 273,
"type": 2,
"parentId": 231
},
{
"name": "工程设计电力行业",
"id": 275,
"type": 2,
"parentId": 231
},
{
"name": "工程设计冶金行业",
"id": 277,
"type": 2,
"parentId": 231
},
{
"name": "工程设计军工行业",
"id": 279,
"type": 2,
"parentId": 231
},
{
"name": "工程设计机械行业",
"id": 281,
"type": 2,
"parentId": 231
},
{
"name": "工程设计商物粮行业",
"id": 283,
"type": 2,
"parentId": 231
},
{
"name": "工程设计核工业行业",
"id": 285,
"type": 2,
"parentId": 231
},
{
"name": "工程设计电子通信广电行业",
"id": 287,
"type": 2,
"list": [
{
"name": "工程设计电子通信广电行业(电子工程)",
"id": 417,
"type": 6,
"parentId": 287
},
{
"name": "工程设计电子通信广电行业(通信工程)",
"id": 419,
"type": 6,
"parentId": 287
},
{
"name": "工程设计电子通信广电行业(广电工程)",
"id": 421,
"type": 6,
"parentId": 287
}
],
"parentId": 231
},
{
"name": "工程设计轻纺行业",
"id": 289,
"type": 2,
"list": [
{
"name": "工程设计轻纺行业(轻工工程)",
"id": 423,
"type": 6,
"parentId": 289
},
{
"name": "工程设计轻纺行业(纺织工程)",
"id": 425,
"type": 6,
"parentId": 289
}
],
"parentId": 231
},
{
"name": "工程设计建材行业",
"id": 291,
"type": 2,
"parentId": 231
},
{
"name": "工程设计铁道行业",
"id": 293,
"type": 2,
"parentId": 231
},
{
"name": "工程设计公路行业",
"id": 295,
"type": 2,
"parentId": 231
},
{
"name": "工程设计水运行业",
"id": 297,
"type": 2,
"parentId": 231
},
{
"name": "工程设计民航行业",
"id": 299,
"type": 2,
"parentId": 231
},
{
"name": "工程设计市政行业",
"id": 301,
"type": 2,
"list": [
{
"name": "工程设计市政行业",
"id": 429,
"type": 6,
"parentId": 301
}
],
"parentId": 231
},
{
"name": "工程设计农林行业",
"id": 303,
"type": 2,
"list": [
{
"name": "工程设计农林行业(农业工程)",
"id": 431,
"type": 6,
"parentId": 303
},
{
"name": "工程设计农林行业(林业工程)",
"id": 433,
"type": 6,
"parentId": 303
}
],
"parentId": 231
},
{
"name": "工程设计水利行业",
"id": 305,
"type": 2,
"parentId": 231
},
{
"name": "工程设计海洋行业",
"id": 307,
"type": 2,
"parentId": 231
},
{
"name": "工程设计建筑行业",
"id": 309,
"type": 2,
"parentId": 231
}
],
"parentId": 213
},
{
"name": "工程设计专业资质",
"id": 233,
"type": 1,
"list": [
{
"name": "工程设计煤炭行业",
"id": 311,
"type": 2,
"list": [
{
"name": "工程设计煤炭行业矿井专业",
"id": 435,
"type": 6,
"parentId": 311
},
{
"name": "工程设计煤炭行业露天矿专业",
"id": 437,
"type": 6,
"parentId": 311
},
{
"name": "工程设计煤炭行业选煤厂专业",
"id": 439,
"type": 6,
"parentId": 311
}
],
"parentId": 233
},
{
"name": "工程设计化工石化医药行业",
"id": 313,
"type": 2,
"list": [
{
"name": "工程设计化工石化医药行业炼油工程专业",
"id": 441,
"type": 6,
"parentId": 313
},
{
"name": "工程设计化工石化医药行业化工工程专业",
"id": 443,
"type": 6,
"parentId": 313
},
{
"name": "工程设计化工石化医药行业石油及化工产品储运专业",
"id": 445,
"type": 6,
"parentId": 313
},
{
"name": "工程设计化工石化医药行业化工矿山专业",
"id": 447,
"type": 6,
"parentId": 313
},
{
"name": "工程设计化工石化医药行业生化、生物药专业",
"id": 449,
"type": 6,
"parentId": 313
},
{
"name": "工程设计化工石化医药行业中成药专业",
"id": 451,
"type": 6,
"parentId": 313
},
{
"name": "工程设计化工石化医药行业化学原料药专业",
"id": 453,
"type": 6,
"parentId": 313
},
{
"name": "工程设计化工石化医药行业药物制剂专业",
"id": 455,
"type": 6,
"parentId": 313
},
{
"name": "工程设计化工石化医药行业医疗器械(含药品内包装)专业",
"id": 457,
"type": 6,
"parentId": 313
}
],
"parentId": 233
},
{
"name": "工程设计石油天然气(海洋石油)行业",
"id": 315,
"type": 2,
"list": [
{
"name": "工程设计石油天然气(海洋石油)行业油田地面专业",
"id": 459,
"type": 6,
"parentId": 315
},
{
"name": "工程设计石油天然气(海洋石油)行业气田地面专业",
"id": 461,
"type": 6,
"parentId": 315
},
{
"name": "工程设计石油天然气(海洋石油)行业管道输送专业",
"id": 463,
"type": 6,
"parentId": 315
},
{
"name": "工程设计石油天然气(海洋石油)行业海洋石油专业",
"id": 465,
"type": 6,
"parentId": 315
},
{
"name": "工程设计石油天然气(海洋石油)行业油气库专业",
"id": 467,
"type": 6,
"parentId": 315
},
{
"name": "工程设计石油天然气(海洋石油)行业油气加工专业",
"id": 469,
"type": 6,
"parentId": 315
},
{
"name": "工程设计石油天然气(海洋石油)行业石油机械制造与修理专业",
"id": 471,
"type": 6,
"parentId": 315
}
],
"parentId": 233
},
{
"name": "工程设计电力行业",
"id": 317,
"type": 2,
"list": [
{
"name": "工程设计电力行业火力发电(含核电站常规岛设计)专业",
"id": 473,
"type": 6,
"parentId": 317
},
{
"name": "工程设计电力行业水力发电(含抽水蓄能、潮汐)专业",
"id": 475,
"type": 6,
"parentId": 317
},
{
"name": "工程设计电力行业风力发电专业",
"id": 477,
"type": 6,
"parentId": 317
},
{
"name": "工程设计电力行业新能源发电专业",
"id": 479,
"type": 6,
"parentId": 317
},
{
"name": "工程设计电力行业送电工程专业",
"id": 481,
"type": 6,
"parentId": 317
},
{
"name": "工程设计电力行业变电工程专业",
"id": 483,
"type": 6,
"parentId": 317
}
],
"parentId": 233
},
{
"name": "工程设计冶金行业",
"id": 319,
"type": 2,
"list": [
{
"name": "工程设计冶金行业金属冶炼工程专业",
"id": 485,
"type": 6,
"parentId": 319
},
{
"name": "工程设计冶金行业金属材料工程专业",
"id": 487,
"type": 6,
"parentId": 319
},
{
"name": "工程设计冶金行业焦化和耐火材料工程专业",
"id": 489,
"type": 6,
"parentId": 319
},
{
"name": "工程设计冶金行业冶金矿山工程专业",
"id": 491,
"type": 6,
"parentId": 319
}
],
"parentId": 233
},
{
"name": "工程设计军工行业",
"id": 321,
"type": 2,
"list": [
{
"name": "工程设计军工行业导弹及火箭弹工程专业",
"id": 493,
"type": 6,
"parentId": 321
},
{
"name": "工程设计军工行业弹、火工品及固体发动机工程专业",
"id": 495,
"type": 6,
"parentId": 321
},
{
"name": "工程设计军工行业燃机、动力装置及航天发动机工程专业",
"id": 497,
"type": 6,
"parentId": 321
},
{
"name": "工程设计军工行业控制系统、光学、光电、电子、仪表工程专业",
"id": 499,
"type": 6,
"parentId": 321
},
{
"name": "工程设计军工行业科研、靶场、试验、教育培训工程专业",
"id": 501,
"type": 6,
"parentId": 321
},
{
"name": "工程设计军工行业地面设备工程专业",
"id": 503,
"type": 6,
"parentId": 321
},
{
"name": "工程设计军工行业航天空间飞行器工程专业",
"id": 505,
"type": 6,
"parentId": 321
},
{
"name": "工程设计军工行业运载火箭制造工程专业",
"id": 507,
"type": 6,
"parentId": 321
},
{
"name": "工程设计军工行业地面制导站工程专业",
"id": 509,
"type": 6,
"parentId": 321
},
{
"name": "工程设计军工行业航空飞行器工程专业",
"id": 511,
"type": 6,
"parentId": 321
},
{
"name": "工程设计军工行业机场工程专业",
"id": 513,
"type": 6,
"parentId": 321
},
{
"name": "工程设计军工行业船舶制造工程专业",
"id": 515,
"type": 6,
"parentId": 321
},
{
"name": "工程设计军工行业船舶机械工程专业",
"id": 517,
"type": 6,
"parentId": 321
},
{
"name": "工程设计军工行业船舶水工工程专业",
"id": 519,
"type": 6,
"parentId": 321
},
{
"name": "工程设计军工行业坦克、装甲车辆工程专业",
"id": 521,
"type": 6,
"parentId": 321
},
{
"name": "工程设计军工行业枪、炮工程专业",
"id": 523,
"type": 6,
"parentId": 321
},
{
"name": "工程设计军工行业火、炸药工程专业",
"id": 525,
"type": 6,
"parentId": 321
},
{
"name": "工程设计军工行业防化、民爆器材工程专业",
"id": 1721,
"type": 6,
"parentId": 321
}
],
"parentId": 233
},
{
"name": "工程设计机械行业",
"id": 323,
"type": 2,
"list": [
{
"name": "工程设计机械行业通用设备制造业工程专业",
"id": 527,
"type": 6,
"parentId": 323
},
{
"name": "工程设计机械行业专用设备制造业工程专业",
"id": 529,
"type": 6,
"parentId": 323
},
{
"name": "工程设计机械行业交通运输设备制造业工程专业",
"id": 531,
"type": 6,
"parentId": 323
},
{
"name": "工程设计机械行业电气机械设备制造业工程专业",
"id": 533,
"type": 6,
"parentId": 323
},
{
"name": "工程设计机械行业金属制品业工程专业",
"id": 535,
"type": 6,
"parentId": 323
},
{
"name": "工程设计机械行业仪器仪表及文化办公机械制造业工程专业",
"id": 537,
"type": 6,
"parentId": 323
},
{
"name": "工程设计机械行业机械加工专业",
"id": 539,
"type": 6,
"parentId": 323
},
{
"name": "工程设计机械行业热加工专业",
"id": 541,
"type": 6,
"parentId": 323
},
{
"name": "工程设计机械行业表面处理专业",
"id": 543,
"type": 6,
"parentId": 323
},
{
"name": "工程设计机械行业检测专业",
"id": 545,
"type": 6,
"parentId": 323
},
{
"name": "工程设计机械行业物料搬运及仓储专业",
"id": 547,
"type": 6,
"parentId": 323
}
],
"parentId": 233
},
{
"name": "工程设计商物粮行业",
"id": 325,
"type": 2,
"list": [
{
"name": "工程设计商物粮行业冷冻冷藏工程专业",
"id": 549,
"type": 6,
"parentId": 325
},
{
"name": "工程设计商物粮行业肉食品加工工程专业",
"id": 551,
"type": 6,
"parentId": 325
},
{
"name": "工程设计商物粮行业批发配送与物流仓储工程专业",
"id": 553,
"type": 6,
"parentId": 325
},
{
"name": "工程设计商物粮行业成品油储运工程专业",
"id": 555,
"type": 6,
"parentId": 325
},
{
"name": "工程设计商物粮行业粮食工程专业",
"id": 557,
"type": 6,
"parentId": 325
},
{
"name": "工程设计商物粮行业油脂工程专业",
"id": 559,
"type": 6,
"parentId": 325
}
],
"parentId": 233
},
{
"name": "工程设计核工业行业",
"id": 327,
"type": 2,
"list": [
{
"name": "工程设计核工业行业反应堆工程设计(含核电站反应堆工程)专业",
"id": 561,
"type": 6,
"parentId": 327
},
{
"name": "工程设计核工业行业核燃料加工制造及处理工程专业",
"id": 563,
"type": 6,
"parentId": 327
},
{
"name": "工程设计核工业行业铀矿山及选冶工程专业",
"id": 565,
"type": 6,
"parentId": 327
},
{
"name": "工程设计核工业行业核设施退役及放射性三废处理处置工程专业",
"id": 567,
"type": 6,
"parentId": 327
},
{
"name": "工程设计核工业行业核技术及同位素应用工程专业",
"id": 569,
"type": 6,
"parentId": 327
}
],
"parentId": 233
},
{
"name": "工程设计电子通信广电行业",
"id": 329,
"type": 2,
"list": [
{
"name": "工程设计电子通信广电行业电子整机产品项目工程专业",
"id": 571,
"type": 6,
"parentId": 329
},
{
"name": "工程设计电子通信广电行业电子基础产品项目工程专业",
"id": 573,
"type": 6,
"parentId": 329
},
{
"name": "工程设计电子通信广电行业显示器件项目工程专业",
"id": 575,
"type": 6,
"parentId": 329
},
{
"name": "工程设计电子通信广电行业微电子产品项目工程专业",
"id": 577,
"type": 6,
"parentId": 329
},
{
"name": "工程设计电子通信广电行业电子特种环境工程专业",
"id": 579,
"type": 6,
"parentId": 329
},
{
"name": "工程设计电子通信广电行业电子系统工程专业",
"id": 581,
"type": 6,
"parentId": 329
},
{
"name": "工程设计电子通信广电行业有线通信专业",
"id": 583,
"type": 6,
"parentId": 329
},
{
"name": "工程设计电子通信广电行业通信铁塔专业",
"id": 585,
"type": 6,
"parentId": 329
},
{
"name": "工程设计电子通信广电行业广播电视中心专业",
"id": 587,
"type": 6,
"parentId": 329
},
{
"name": "工程设计电子通信广电行业广播电视发射专业",
"id": 589,
"type": 6,
"parentId": 329
},
{
"name": "工程设计电子通信广电行业广播电视传输专业",
"id": 591,
"type": 6,
"parentId": 329
},
{
"name": "工程设计电子通信广电行业电影工程专业",
"id": 593,
"type": 6,
"parentId": 329
},
{
"name": "工程设计电子通信广电行业无线通信专业",
"id": 1689,
"type": 6,
"parentId": 329
},
{
"name": "工程设计电子通信广电行业邮政工程专业",
"id": 1691,
"type": 6,
"parentId": 329
}
],
"parentId": 233
},
{
"name": "工程设计轻纺行业",
"id": 331,
"type": 2,
"list": [
{
"name": "工程设计轻纺行业制浆造纸工程专业",
"id": 595,
"type": 6,
"parentId": 331
},
{
"name": "工程设计轻纺行业食品发酵烟草工程专业",
"id": 597,
"type": 6,
"parentId": 331
},
{
"name": "工程设计轻纺行业制糖工程专业",
"id": 599,
"type": 6,
"parentId": 331
},
{
"name": "工程设计轻纺行业日化及塑料工程专业",
"id": 601,
"type": 6,
"parentId": 331
},
{
"name": "工程设计轻纺行业日用硅酸盐工程专业",
"id": 603,
"type": 6,
"parentId": 331
},
{
"name": "工程设计轻纺行业制盐及盐化工程专业",
"id": 605,
"type": 6,
"parentId": 331
},
{
"name": "工程设计轻纺行业皮革毛皮及制品专业",
"id": 607,
"type": 6,
"parentId": 331
},
{
"name": "工程设计轻纺行业家电电子及日用机械专业",
"id": 609,
"type": 6,
"parentId": 331
},
{
"name": "工程设计轻纺行业纺织工程专业",
"id": 611,
"type": 6,
"parentId": 331
},
{
"name": "工程设计轻纺行业印染工程专业",
"id": 613,
"type": 6,
"parentId": 331
},
{
"name": "工程设计轻纺行业服装工程专业",
"id": 615,
"type": 6,
"parentId": 331
},
{
"name": "工程设计轻纺行业化纤原料工程专业",
"id": 617,
"type": 6,
"parentId": 331
},
{
"name": "工程设计轻纺行业化纤工程专业",
"id": 619,
"type": 6,
"parentId": 331
}
],
"parentId": 233
},
{
"name": "工程设计建材行业",
"id": 333,
"type": 2,
"list": [
{
"name": "工程设计建材行业水泥工程专业",
"id": 621,
"type": 6,
"parentId": 333
},
{
"name": "工程设计建材行业玻璃、陶瓷、耐火材料工程专业",
"id": 623,
"type": 6,
"parentId": 333
},
{
"name": "工程设计建材行业新型建筑材料工程专业",
"id": 625,
"type": 6,
"parentId": 333
},
{
"name": "工程设计建材行业非金属矿及原料制备工程专业",
"id": 627,
"type": 6,
"parentId": 333
},
{
"name": "工程设计建材行业无机非金属材料及制品工程专业",
"id": 629,
"type": 6,
"parentId": 333
}
],
"parentId": 233
},
{
"name": "工程设计铁道行业",
"id": 335,
"type": 2,
"list": [
{
"name": "工程设计铁道行业桥梁专业",
"id": 631,
"type": 6,
"parentId": 335
},
{
"name": "工程设计铁道行业轨道专业",
"id": 633,
"type": 6,
"parentId": 335
},
{
"name": "工程设计铁道行业隧道专业",
"id": 635,
"type": 6,
"parentId": 335
},
{
"name": "工程设计铁道行业电气化专业",
"id": 637,
"type": 6,
"parentId": 335
},
{
"name": "工程设计铁道行业通信信号专业",
"id": 639,
"type": 6,
"parentId": 335
}
],
"parentId": 233
},
{
"name": "工程设计公路行业",
"id": 337,
"type": 2,
"list": [
{
"name": "工程设计公路行业公路专业",
"id": 641,
"type": 6,
"parentId": 337
},
{
"name": "工程设计公路行业特大桥梁专业",
"id": 643,
"type": 6,
"parentId": 337
},
{
"name": "工程设计公路行业特长隧道专业",
"id": 645,
"type": 6,
"parentId": 337
},
{
"name": "工程设计公路行业交通工程专业",
"id": 647,
"type": 6,
"parentId": 337
}
],
"parentId": 233
},
{
"name": "工程设计水运行业",
"id": 339,
"type": 2,
"list": [
{
"name": "工程设计水运行业港口工程专业",
"id": 649,
"type": 6,
"parentId": 339
},
{
"name": "工程设计水运行业航道工程专业",
"id": 651,
"type": 6,
"parentId": 339
},
{
"name": "工程设计水运行业通航建筑工程专业",
"id": 653,
"type": 6,
"parentId": 339
},
{
"name": "工程设计水运行业修造船厂水工工程专业",
"id": 655,
"type": 6,
"parentId": 339
},
{
"name": "工程设计水运行业港口装卸工艺专业",
"id": 657,
"type": 6,
"parentId": 339
},
{
"name": "工程设计水运行业水上交通管制工程专业",
"id": 659,
"type": 6,
"parentId": 339
}
],
"parentId": 233
},
{
"name": "工程设计民航行业",
"id": 341,
"type": 2,
"list": [
{
"name": "工程设计民航行业机场总体规划工程专业",
"id": 661,
"type": 6,
"parentId": 341
},
{
"name": "工程设计民航行业场道、目视助航工程专业",
"id": 663,
"type": 6,
"parentId": 341
},
{
"name": "工程设计民航行业通信、导航、航管及航站楼弱电工程专业",
"id": 665,
"type": 6,
"parentId": 341
},
{
"name": "工程设计民航行业供油工程专业",
"id": 667,
"type": 6,
"parentId": 341
}
],
"parentId": 233
},
{
"name": "工程设计市政行业",
"id": 343,
"type": 2,
"list": [
{
"name": "工程设计市政行业给水工程专业",
"id": 669,
"type": 6,
"parentId": 343
},
{
"name": "工程设计市政行业排水工程专业",
"id": 671,
"type": 6,
"parentId": 343
},
{
"name": "工程设计市政行业城镇燃气工程专业",
"id": 673,
"type": 6,
"parentId": 343
},
{
"name": "工程设计市政行业热力工程专业",
"id": 675,
"type": 6,
"parentId": 343
},
{
"name": "工程设计市政行业道路工程专业",
"id": 677,
"type": 6,
"parentId": 343
},
{
"name": "工程设计市政行业桥梁工程专业",
"id": 679,
"type": 6,
"parentId": 343
},
{
"name": "工程设计市政行业城市隧道工程专业",
"id": 681,
"type": 6,
"parentId": 343
},
{
"name": "工程设计市政行业公共交通工程专业",
"id": 683,
"type": 6,
"parentId": 343
},
{
"name": "工程设计市政行业载人索道专业",
"id": 685,
"type": 6,
"parentId": 343
},
{
"name": "工程设计市政行业轨道交通工程专业",
"id": 687,
"type": 6,
"parentId": 343
},
{
"name": "工程设计市政行业环境卫生工程专业",
"id": 689,
"type": 6,
"parentId": 343
}
],
"parentId": 233
},
{
"name": "工程设计农林行业",
"id": 345,
"type": 2,
"list": [
{
"name": "工程设计农林行业农业综合开发生态工程专业",
"id": 691,
"type": 6,
"parentId": 345
},
{
"name": "工程设计农林行业种植业工程专业",
"id": 693,
"type": 6,
"parentId": 345
},
{
"name": "工程设计农林行业兽医/畜牧工程专业",
"id": 695,
"type": 6,
"parentId": 345
},
{
"name": "工程设计农林行业渔港/渔业工程专业",
"id": 697,
"type": 6,
"parentId": 345
},
{
"name": "工程设计农林行业设施农业工程专业",
"id": 699,
"type": 6,
"parentId": 345
},
{
"name": "工程设计农林行业林产工业工程专业",
"id": 701,
"type": 6,
"parentId": 345
},
{
"name": "工程设计农林行业林产化学工程专业",
"id": 703,
"type": 6,
"parentId": 345
},
{
"name": "工程设计农林行业营造林工程专业",
"id": 705,
"type": 6,
"parentId": 345
},
{
"name": "工程设计农林行业森林资源环境工程专业",
"id": 707,
"type": 6,
"parentId": 345
},
{
"name": "工程设计农林行业森林工业工程专业",
"id": 709,
"type": 6,
"parentId": 345
}
],
"parentId": 233
},
{
"name": "工程设计水利行业",
"id": 347,
"type": 2,
"list": [
{
"name": "工程设计水利行业水库枢纽专业",
"id": 711,
"type": 6,
"parentId": 347
},
{
"name": "工程设计水利行业引调水专业",
"id": 713,
"type": 6,
"parentId": 347
},
{
"name": "工程设计水利行业灌溉排涝专业",
"id": 715,
"type": 6,
"parentId": 347
},
{
"name": "工程设计水利行业河道整治专业",
"id": 717,
"type": 6,
"parentId": 347
},
{
"name": "工程设计水利行业城市防洪专业",
"id": 719,
"type": 6,
"parentId": 347
},
{
"name": "工程设计水利行业围垦专业",
"id": 721,
"type": 6,
"parentId": 347
},
{
"name": "工程设计水利行业水土保持专业",
"id": 723,
"type": 6,
"parentId": 347
},
{
"name": "工程设计水利行业水文设施专业",
"id": 725,
"type": 6,
"parentId": 347
}
],
"parentId": 233
},
{
"name": "工程设计海洋行业",
"id": 349,
"type": 2,
"list": [
{
"name": "工程设计海洋行业沿岸工程专业",
"id": 727,
"type": 6,
"parentId": 349
},
{
"name": "工程设计海洋行业离岸工程专业",
"id": 729,
"type": 6,
"parentId": 349
},
{
"name": "工程设计海洋行业海水利用专业",
"id": 731,
"type": 6,
"parentId": 349
},
{
"name": "工程设计海洋行业海洋能利用专业",
"id": 733,
"type": 6,
"parentId": 349
}
],
"parentId": 233
},
{
"name": "工程设计建筑行业",
"id": 351,
"type": 2,
"list": [
{
"name": "工程设计建筑行业(建筑工程)",
"id": 735,
"type": 6,
"parentId": 351
},
{
"name": "工程设计建筑行业(人防工程)",
"id": 737,
"type": 6,
"parentId": 351
}
],
"parentId": 233
}
],
"parentId": 213
},
{
"name": "建筑工程设计事务所",
"id": 235,
"type": 1,
"list": [
{
"name": "工程设计建筑设计事务所",
"id": 353,
"type": 2,
"parentId": 235
},
{
"name": "工程设计结构设计事务所",
"id": 355,
"type": 2,
"parentId": 235
},
{
"name": "工程设计机电设计事务所",
"id": 357,
"type": 2,
"parentId": 235
}
],
"parentId": 213
},
{
"name": "工程设计专项资质",
"id": 237,
"type": 1,
"list": [
{
"name": "工程设计建筑装饰工程专项",
"id": 359,
"type": 2,
"parentId": 237
},
{
"name": "工程设计建筑智能化系统专项",
"id": 361,
"type": 2,
"parentId": 237
},
{
"name": "工程设计建筑幕墙工程专项",
"id": 363,
"type": 2,
"parentId": 237
},
{
"name": "工程设计轻型钢结构工程专项",
"id": 365,
"type": 2,
"parentId": 237
},
{
"name": "工程设计风景园林工程专项",
"id": 367,
"type": 2,
"parentId": 237
},
{
"name": "工程设计消防设施工程专项",
"id": 369,
"type": 2,
"parentId": 237
},
{
"name": "工程设计环境工程专项",
"id": 371,
"type": 2,
"list": [
{
"name": "工程设计环境工程专项(水污染防治工程)",
"id": 739,
"type": 6,
"parentId": 371
},
{
"name": "工程设计环境工程专项(大气污染防治工程)",
"id": 741,
"type": 6,
"parentId": 371
},
{
"name": "工程设计环境工程专项(固体废物处理处置工程)",
"id": 743,
"type": 6,
"parentId": 371
},
{
"name": "工程设计环境工程专项(物理污染防治工程)",
"id": 745,
"type": 6,
"parentId": 371
},
{
"name": "工程设计环境工程专项(污染修复工程)",
"id": 747,
"type": 6,
"parentId": 371
}
],
"parentId": 237
},
{
"name": "工程设计照明工程专项",
"id": 373,
"type": 2,
"parentId": 237
}
],
"parentId": 213
}
],
"parentId": 0
},
{
"name": "工程监理",
"id": 215,
"type": 0,
"list": [
{
"name": "工程监理综合资质",
"id": 239,
"type": 1,
"parentId": 215
},
{
"name": "工程监理专业资质",
"id": 241,
"type": 1,
"list": [
{
"name": "工程监理房屋建筑工程专业",
"id": 375,
"type": 2,
"parentId": 241
},
{
"name": "工程监理冶炼工程专业",
"id": 377,
"type": 2,
"parentId": 241
},
{
"name": "工程监理矿山工程专业",
"id": 379,
"type": 2,
"parentId": 241
},
{
"name": "工程监理化工石油工程专业",
"id": 381,
"type": 2,
"parentId": 241
},
{
"name": "工程监理水利水电工程专业",
"id": 383,
"type": 2,
"parentId": 241
},
{
"name": "工程监理电力工程专业",
"id": 385,
"type": 2,
"parentId": 241
},
{
"name": "工程监理农林工程专业",
"id": 387,
"type": 2,
"parentId": 241
},
{
"name": "工程监理铁路工程专业",
"id": 389,
"type": 2,
"parentId": 241
},
{
"name": "工程监理公路工程专业",
"id": 391,
"type": 2,
"parentId": 241
},
{
"name": "工程监理港口与航道工程专业",
"id": 393,
"type": 2,
"parentId": 241
},
{
"name": "工程监理航天航空工程专业",
"id": 395,
"type": 2,
"parentId": 241
},
{
"name": "工程监理通信工程专业",
"id": 397,
"type": 2,
"parentId": 241
},
{
"name": "工程监理市政公用工程专业",
"id": 399,
"type": 2,
"parentId": 241
},
{
"name": "工程监理机电安装工程专业",
"id": 401,
"type": 2,
"parentId": 241
}
],
"parentId": 215
},
{
"name": "工程监理事务所资质",
"id": 243,
"type": 1,
"list": [
{
"name": "工程监理事务所",
"id": 403,
"type": 2,
"parentId": 243
}
],
"parentId": 215
},
{
"name": "交通部监理",
"id": 3250,
"type": 1,
"list": [
{
"name": "公路工程监理",
"id": 3251,
"type": 2,
"list": [
{
"name": "公路工程专业",
"id": 3252,
"type": 6,
"parentId": 3251
},
{
"name": "公路工程特殊独立大桥专项",
"id": 3256,
"type": 6,
"parentId": 3251
},
{
"name": "公路工程特殊独立隧道专项",
"id": 3258,
"type": 6,
"parentId": 3251
},
{
"name": "公路工程公路机电工程专项",
"id": 3260,
"type": 6,
"parentId": 3251
}
],
"parentId": 3250
},
{
"name": "水运工程监理",
"id": 3262,
"type": 2,
"list": [
{
"name": "水运工程专业",
"id": 3263,
"type": 6,
"parentId": 3262
},
{
"name": "水运机电工程专项监理",
"id": 3267,
"type": 6,
"parentId": 3262
}
],
"parentId": 3250
}
],
"parentId": 215
},
{
"name": "水利部监理",
"id": 3269,
"type": 1,
"list": [
{
"name": "水利工程施工监理",
"id": 3270,
"type": 2,
"parentId": 3269
},
{
"name": "水土保持工程施工监理",
"id": 3274,
"type": 2,
"parentId": 3269
},
{
"name": "机电及金属结构设备制造监理",
"id": 3278,
"type": 2,
"parentId": 3269
},
{
"name": "水利工程建设环境保护监理",
"id": 3281,
"type": 2,
"parentId": 3269
}
],
"parentId": 215
},
{
"name": "住建部监理",
"id": 3300,
"type": 1,
"list": [
{
"name": "人防工程施工监理",
"id": 3301,
"type": 2,
"parentId": 3300
}
],
"parentId": 215
}
],
"parentId": 0
},
{
"name": "造价咨询企业资质",
"id": 221,
"type": 0,
"list": [
{
"name": "工程造价咨询",
"id": 255,
"type": 1,
"parentId": 221
}
],
"parentId": 0
}
]
\ No newline at end of file
......@@ -976,3 +976,9 @@ li {
.min1370 {
min-width: 1370px;
}
// 重置全局 溢出弹出提示宽度
.el-tooltip__popper {
max-width: 70%;
}
......@@ -64,6 +64,7 @@ export default {
}
},
tabChoose(item) {
if (item.value == this.currentValue) return;
this.$emit("currentTabChange", item.value);
this.$emit("tabToggle", item.value);
this.initSlidingBar();
......
......@@ -634,14 +634,19 @@ export function getTreeSelectAreaList(nodeList = [], tree, idkey = "id") {
try {
if (Object.prototype.toString.call(nodeList) != "[object Array]") throw new Error("传入参数不是一个节点数组");
const _result = [];
// 克隆源数据
const _tempTree = JSON.parse(JSON.stringify(tree));
let _tempTree = JSON.parse(JSON.stringify(tree));
if (_tempTree instanceof Array) {
_tempTree = { childrenLength: _tempTree.length, children: _tempTree, level: 0 };
}
// 根据所选节点生成tree
const newTree = generateDirectSubtreeAndRemove(nodeList, _tempTree, idkey);
if (newTree) {
// 循环找到每个节点的父节点 的选中状态
return findParentStatus(nodeList, newTree, idkey);
const result = nodeList.map(item => {
return createAreaSelect(item, newTree, idkey);
});
}
} catch (error) {
......@@ -653,46 +658,67 @@ export function getTreeSelectAreaList(nodeList = [], tree, idkey = "id") {
/**
*
*/
export function findParentStatus(nodeList, tree, idkey) {
const _temp = nodeList.map(item => {
// 找节点parent
const parent = findParentNode(tree, item, idkey);
// 有parent
if (parent) {
const count = parent.childrenLength;
const len = parent.children?.length;
// 比较 count 跟 length 看子节点是否全选中
const flag = count == len && parent.children?.every(childItem => nodeList.includes(childItem[idkey])) ? true : false;
// flag为true 当前节点下的子节点全选中返回父节点id 没有则是根节点 根节点返回所有child id
if (flag) {
return parent[idkey] ? parent[idkey] : parent.children?.map(childItem => childItem[idkey]);
} else {
console.log("没有全选中");
// 没有全选中 看当前子节点是否有选中状态
const itemNode = findNodeFromTree(tree, item, [], idkey);
console.log(itemNode);
// 当前节点有子节点
if (itemNode?.children?.length) {
// 当前节点的子节点选中结果 子节点是全选状态 传递自身 否则传递子节点
const childResult = itemNode?.children?.every(childItem => nodeList.includes(childItem[idkey])) && itemNode?.children?.length == itemNode?.childrenLength;
if (childResult) {
return item;
}
const childNodes = itemNode?.children?.filter(childItem => nodeList.includes(childItem[idkey]));
return childNodes ? childNodes.map(childItem => childItem[idkey]) : [];
}
// 当前节点没有子节点 看父节点是否全选 父节点全选 返回父节点
const childResult = parent.children?.every(childItem => nodeList.includes(childItem[idkey])) && parent.children?.length == parent?.childrenLength;
if (childResult) {
return item;
}
const childNodes = parent.children?.filter(childItem => nodeList.includes(childItem[idkey]));
return childNodes ? childNodes.map(childItem => childItem[idkey]) : [];
}
export function createAreaSelect(node, tree, idkey) {
// console.log(node, tree, idkey);
const selfNode = findNodeFromTree(tree, node, [], idkey);
console.log(selfNode);
// 查找chidren
if (selfNode?.children?.length) {
const childTempArray = [];
for (const child of selfNode?.children) {
const _temp = createAreaSelect(child[idkey], tree, idkey);
if (_temp) childTempArray.push(childTempArray);
}
});
return childTempArray;
}
return Array.from(new Set(_temp.flat()));
// 没有children 已经是最底层 看parent
const parentNode = findParentNode(tree, node, idkey);
console.log(parentNode,"没有children");
// const _temp = nodeList.map(item => {
// // 找节点parent
// const parent = findParentNode(tree, item, idkey);
// console.log("父节点", parent);
// // 有parent
// if (parent) {
// const count = parent.childrenLength;
// const len = parent.children?.length;
// // 比较 count 跟 length 看子节点是否全选中
// const flag = count == len && parent.children?.every(childItem => nodeList.includes(childItem[idkey])) ? true : false;
// // flag为true 当前节点下的子节点全选中返回父节点id 没有则是根节点 根节点返回所有child id
// if (flag) {
// return parent[idkey] ? parent[idkey] : parent.children?.map(childItem => childItem[idkey]);
// } else {
// console.log("没有全选中");
// // 没有全选中 看当前子节点是否有选中状态
// const itemNode = findNodeFromTree(tree, item, [], idkey);
// console.log(itemNode);
// // 当前节点有子节点
// if (itemNode?.children?.length) {
// // 当前节点的子节点选中结果 子节点是全选状态 传递自身 否则传递子节点
// const childResult = itemNode?.children?.every(childItem => nodeList.includes(childItem[idkey])) && itemNode?.children?.length == itemNode?.childrenLength;
// if (childResult) {
// return item;
// }
// const childNodes = itemNode?.children?.filter(childItem => nodeList.includes(childItem[idkey]));
// return childNodes ? childNodes.map(childItem => childItem[idkey]) : [];
// }
// // 当前节点没有子节点 看父节点是否全选 父节点全选 返回父节点
// const childResult = parent.children?.every(childItem => nodeList.includes(childItem[idkey])) && parent.children?.length == parent?.childrenLength;
// if (childResult) {
// return item;
// }
// const childNodes = parent.children?.filter(childItem => nodeList.includes(childItem[idkey]));
// return childNodes ? childNodes.map(childItem => childItem[idkey]) : [];
// }
// }
// });
// return Array.from(new Set(_temp.flat()));
}
......
<template>
<div v-loading="loading" class="market-container">
<iframe id="companyIframe" class="market-iframe" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" width="100%" :src="src" />
<div v-loading="loading" class="advisoryOrgan-container">
<iframe id="companyIframe" class="advisoryOrgan-iframe" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" width="100%" :src="src" />
</div>
</template>
......@@ -81,7 +81,7 @@ export default {
async iframeObserver() {
try {
await this.$nextTick();
this.iframeIns = document.querySelector(".market-iframe");
this.iframeIns = document.querySelector(".advisoryOrgan-iframe");
} catch (error) {
console.log(error);
}
......@@ -101,7 +101,7 @@ export default {
if (res.code == 200) {
this.timelongs = res.data.expire;
this.ak = res.data.accessToken;
this.src = `${this.domain}/search/market?ak=${this.ak}&initTime=${new Date().getTime()}&uid=${this.ak}&origin=${window.location.origin}`;
this.src = `${this.domain}/search/advisoryOrgan?ak=${this.ak}&initTime=${new Date().getTime()}&uid=${this.ak}&origin=${window.location.origin}`;
this.refreshtoken();
} else {
clearTimeout(this.tokentimer);
......@@ -140,7 +140,7 @@ export default {
</script>
<style lang="scss" scoped>
.market-container {
.advisoryOrgan-container {
width: 100%;
height: 100%;
padding: 16px 24px;
......@@ -150,7 +150,7 @@ export default {
left: 0;
top: 0;
.market-iframe {
.advisoryOrgan-iframe {
width: 100%;
height: 100%;
}
......
......@@ -164,8 +164,8 @@ export default {
methods: {
async init() {
try {
if (!this.$routes?.params?.advisoryBodyCid) return this.$message.error("缺少咨询机构Id");
this.queryParams.advisoryBodyCid = !this.$routes?.params?.advisoryBodyCid;
if (!this.$route?.params?.advisoryBodyCid) return this.$message.error("缺少咨询机构Id");
this.queryParams.advisoryBodyCid = this.$route?.params?.advisoryBodyCid;
await this.getList(this.queryParams);
} catch (error) {
......@@ -262,7 +262,7 @@ export default {
if (selectNode?.length) {
const nodeValueList = selectNode.map(item => item.value);
console.log(nodeValueList);
console.log(getTreeSelectAreaList(nodeValueList, { childrenLength: this.areaDataList.length, children: this.areaDataList }, "value"));
console.log(getTreeSelectAreaList(nodeValueList, this.areaDataList, "value"));
}
}
},
......
......@@ -48,6 +48,16 @@
</div>
<span v-else>-</span>
</template>
<!-- 经营范围 -->
<template slot="businessScope" scope="{data,row}">
<el-tooltip effect="dark" placement="top" v-if="row.businessScope" class="business-text-tooltip">
<template slot="content">
<div class="business-text-line">{{row.businessScope}}</div>
</template>
<div class="business-text-line">{{row.businessScope}}</div>
</el-tooltip>
<span v-else>-</span>
</template>
</table-list-com>
</div>
......@@ -87,12 +97,12 @@ export default {
{ label: '序号', prop: "staticSerialNumber", type: "index", lock: true, fixed: false, uid: v4() },
{ label: '咨询机构名称', prop: 'advisoryBodyName', width: "198px", lock: true, fixed: false, slot: true, uid: v4(), showOverflowTooltip: true },
{ label: '最近一次合作时间', prop: 'lastCooperateTime', width: "201px", uid: v4() },
{ label: '经营状态', prop: 'businessStatus', width: "74px", uid: v4() },
{ label: '经营状态', prop: 'businessStatus', minWidth: "74px", uid: v4(), showOverflowTooltip: true },
{ label: '法定代表人', prop: 'corporatePerson', width: "86px", uid: v4() },
{ label: '注册资本', prop: 'regCapital', width: "107px", uid: v4() },
{ label: '注册资本', prop: 'regCapital', width: "120px", uid: v4() },
{ label: '注册地区', prop: 'regArea', width: "149px", uid: v4() },
{ label: '成立日期', prop: 'registeredDate', width: "97px", uid: v4() },
{ label: '经营范围', prop: 'businessScope', width: "417px", uid: v4() },
{ label: '经营范围', prop: 'businessScope', width: "417px", uid: v4(), slot: true },
{ label: '合作项目数量', prop: 'cooperateProjectCount', width: "98px", uid: v4(), slot: true },
],
queryParams: {
......@@ -274,6 +284,16 @@ export default {
padding: 0px;
margin-top: 16px;
}
.business-text-line {
text-overflow: -o-ellipsis-lastline;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
}
}
}
}
......
......@@ -74,22 +74,22 @@
v-else-if="!tableLoading" :height="'100%'" @handle-current-change="handleCurrentChange">
<!-- 项目列表 -->
<template slot="projectName" slot-scope="{data,row}">
<div v-if="row.projectName" class="no-line-feed ">{{row.projectName}}</div>
<div v-if="row.projectName" class="no-line-feed" v-html="row.projectName">{{row.projectName}}</div>
<span v-else>-</span>
</template>
<!-- 业主单位 -->
<template slot="ownerName" slot-scope="{data,row}">
<div v-if="row.ownerName" class="no-line-feed ">{{row.ownerName}}</div>
<div v-if="row.ownerName" class="no-line-feed">{{row.ownerName}}</div>
<span v-else>-</span>
</template>
<!-- 项目承接单位 -->
<template slot="contractOrgName" slot-scope="{data,row}">
<div v-if="row.contractOrgName" class="no-line-feed ">{{row.contractOrgName}}</div>
<div v-if="row.contractOrgName" class="no-line-feed">{{row.contractOrgName}}</div>
<span v-else>-</span>
</template>
<!-- 咨询机构名称 -->
<template slot="advisoryBodyName" slot-scope="{data,row}">
<div v-if="row.advisoryBodyName" class="no-line-feed ">{{row.advisoryBodyName}}</div>
<div v-if="row.advisoryBodyName" class="no-line-feed">{{row.advisoryBodyName}}</div>
<span v-else>-</span>
</template>
</table-list-com>
......
......@@ -44,7 +44,10 @@ export default {
},
//可访问data属性
created() {
const target = this.$route.query.target;
if (target && ["project", "enterprise"].includes(target)) {
this.currentList = target;
}
},
//计算集
computed: {
......@@ -52,7 +55,6 @@ export default {
},
//方法集
methods: {
},
}
</script>
......
......@@ -80,7 +80,7 @@
<span class="flex-box ability-total" v-if="isTotal">共有{{ total }}条</span>
<span class="flex-box ability-excel" v-hasPermi="['combine:info:export:win:bid','combine:info:export:bid']"
v-if="isExcel && title ==='集团业绩'|| title ==='集团招标' " @click="clickEXCEL"><img src="@/assets/images/ability_excel.png">导出EXCEL</span>
<span class="flex-box ability-excel" v-else @click="clickEXCEL"><img src="@/assets/images/ability_excel.png">导出EXCEL</span>
<span class="flex-box ability-excel" v-else-if="isExcel" @click="clickEXCEL"><img src="@/assets/images/ability_excel.png">导出EXCEL</span>
</div>
</div>
</div>
......@@ -297,14 +297,7 @@ export default {
this.$emit('handle-search');
},
clickEXCEL() {
if (this.title === '集团业绩' || this.title === '集团招标' || this.title === '集团成员') {
this.$emit('handle-excel');
} else {
this.$message({
message: '功能正在开发中',
type: 'warning'
});
}
this.$emit('handle-excel');
},
clickFocus(e) {
document.getElementById(e).classList.toggle('span-ba');
......
<template>
<div id="detailPart" class="sides-container">
<el-input placeholder="搜索" class="side-input" v-model="searchText" clearable @input="handleSearch(true)" @keyup.enter.native="handleSearch()">
<i slot="prefix" class="el-input__icon el-icon-search" @click="handleSearch()"></i>
</el-input>
<el-menu ref="sideMenu" :unique-opened="true" :default-active="searchIndex?searchIndex:routeIndex" class="detail-menu" @open="handleOpen">
<!-- 搜索栏 -->
<div class="search-bar-container">
<el-input placeholder="请输入内容" class="side-input" v-model="searchText" clearable @input="handleSearch(true)"
@keyup.enter.native="handleSearch()">
<i slot="prefix" class="el-input__icon el-icon-search" @click="handleSearch()"></i>
</el-input>
</div>
<el-menu ref="sideMenu" :unique-opened="true" :default-active="searchIndex" class="detail-menu" @open="handleOpen">
<template v-for="(item, index) in sideRoute">
<el-submenu :index="index.toString()" v-if="item.children"
:disabled="!isCompanyId(item.title) || (item.title=='项目商机'&&statisticObj.business.landInfo<1&&statisticObj.business.busProposedProjectV1<1&&statisticObj.performance.specialDebt<1&&statisticObj.performance.bidPlan<1&&statisticObj.business.biddingAnnouncement<1&&statisticObj.business.proBiddingAnnouncement<1&&statisticObj.business.adminLicensing<1)">
<!-- 一级菜单 -->
<el-submenu :index="item.index" :key="item.index" v-if="item.children" class="top-level-menu"
:disabled="item.disabled || !isCompanyId(item.title) || (item.title=='项目商机'&&statisticObj.business.landInfo<1&&statisticObj.business.busProposedProjectV1<1&&statisticObj.performance.specialDebt<1&&statisticObj.performance.bidPlan<1&&statisticObj.business.biddingAnnouncement<1&&statisticObj.business.proBiddingAnnouncement<1&&statisticObj.business.adminLicensing<1)">
<template slot="title">
<span>{{item.title}}</span>
<div class="top-level-menu-title">
<svg-icon :iconClass="item.icon"></svg-icon>
<span>{{item.title}}</span>
</div>
</template>
<template v-for="(subItem,subIndex) of item.children">
<!-- 二级菜单 -->
<template v-if="subItem.children && subItem.children.length">
<el-submenu :index="subItem.index" :key="subItem.index" class="second-level-menu-has-children">
<template slot="title">
<span>{{subItem.title}}</span>
</template>
<!-- 三级菜单 -->
<template v-for="(threeLevelMenu,threeLevelIndex) of subItem.children">
<el-menu-item :index="threeLevelMenu.index" :key="threeLevelMenu.index" @click="handleItem(threeLevelMenu)"
:disabled="!isCompanyId(threeLevelMenu.title) || threeLevelMenu.disabled" v-if="isCustomerId(threeLevelMenu.pathName)">
<span>{{threeLevelMenu.title}}</span>
</el-menu-item>
</template>
</el-submenu>
</template>
<template v-else>
<el-menu-item class="second-level-menu-no-children" :index="subItem.index" @click="handleItem(subItem)"
:disabled="!isCompanyId(subItem.title) || subItem.disabled" v-if="isCustomerId(subItem.pathName)">{{subItem.title}}</el-menu-item>
</template>
</template>
<el-menu-item :index="index+'-'+idx" v-for="(it, idx) in item.children" :key="idx" @click="handleItem(it)"
:disabled="it.disabled">{{it.title}}</el-menu-item>
</el-submenu>
<template v-else>
<el-menu-item :index="index.toString()" @click="handleItem(item)" :disabled="!isCompanyId(item.title) || item.disabled"
v-if="isCustomerId(item.pathName)">{{item.title}}</el-menu-item>
<el-menu-item class="top-level-menu-no-children" :index="item.index" @click="handleItem(item)"
:disabled="!isCompanyId(item.title) || item.disabled" v-if="isCustomerId(item.pathName)">{{item.title}}</el-menu-item>
</template>
</template>
</el-menu>
......@@ -25,6 +58,8 @@
<script>
import { financial } from '@/api/detail/party-a/financial';
import { detailSideBar } from "@/utils";
import { v4 } from "uuid";
import SvgIcon from "@/components/SvgIcon";
export default {
name: 'Sidebar',
props: {
......@@ -53,128 +88,179 @@ export default {
default: false
}
},
components: {
SvgIcon
},
data() {
return {
searchText: '',
sideRoute: [
{
title: '企业概要', pathName: '', children: [
{ title: '企业速览', pathName: 'overview' },
{ title: '工商信息', pathName: 'businfo' },
{ title: '股东信息', pathName: 'holderinfo' },
{ title: '高管信息', pathName: 'execuinfo' },
{ title: '对外投资', pathName: 'overseas' },
{ title: '分支机构', pathName: 'branch' }
title: "企业经营", icon: "enterprise-management-detail-side", pathName: "", children: [
{
title: '企业概要', pathName: '', children: [
{ title: '企业速览', pathName: 'overview' },
{ title: '工商信息', pathName: 'businfo' },
{ title: '股东信息', pathName: 'holderinfo' },
{ title: '高管信息', pathName: 'execuinfo' },
{ title: '对外投资', pathName: 'overseas' },
{ title: '分支机构', pathName: 'branch' }
]
},
{ title: '财务简析', pathName: 'financial' },
{
title: '项目商机', pathName: '', children: [
{ title: '重点项目', pathName: 'majorProject' },
{ title: '土地交易', pathName: 'landtransaction' },
{ title: '拟建项目', pathName: 'proposed' },
{ title: '专项债项目', pathName: 'bond' },
{ title: '招标计划', pathName: 'biddingplan' },
{ title: '招标公告', pathName: 'announcement' },
{ title: '标讯Pro', pathName: 'tencent' },
{ title: '行政许可', pathName: 'administrative' }
]
},
{
title: '业务往来', pathName: '', children: [
{ title: '客户', pathName: 'custom' },
{ title: '供应商', pathName: 'supplier' },
{ title: '招标代理', pathName: 'bidagency' },
{ title: '历史发包', pathName: 'hiscontract' },
{ title: '开标记录', pathName: 'bidrecords' }
]
},
{
title: '咨询业务往来', pathName: '', children: [
{ title: '常合作业主单位', pathName: 'cooperativeOwnerUnits' },
{ title: '常合作施工单位', pathName: 'cooperativeConstructionUnit' },
{ title: '常合作集团', pathName: 'cooperativeGroup' },
]
},
{
title: '城投分析', pathName: '', children: [
{ title: '区域经济', pathName: 'regionalEconomies' },
{ title: '城投拿地', pathName: 'landAcquisition' },
{ title: '同地区城投', pathName: 'sameRegion' }
]
},
{
title: '风险信息', pathName: '', children: [
{ title: '行政处罚', pathName: 'punish' },
{ title: '经营异常', pathName: 'businessAnomaly' },
{ title: '被执行人', pathName: 'ifThePerson' },
{ title: '失信被执行人', pathName: 'dishonesty' },
{ title: '限制高消费', pathName: 'limitHighConsumption' },
{ title: '股权冻结', pathName: 'equityFreezing' },
// { title: '裁判文书', pathName: 'judgment' },
// { title: '法院公告', pathName: 'courtNotice' },
// { title: '开庭公告', pathName: 'openacourtsessionNotice' },
// {title: '信用中国', pathName: ''}
]
},
{ title: '商务信息', pathName: 'business' },
{ title: '招标偏好', pathName: 'preference' },
{ title: '合作情况', pathName: 'cooperate' },
{ title: '联系人', pathName: 'decisionMaking' },
{ title: '跟进记录', pathName: 'gjjl' }
]
},
{ title: '财务简析', pathName: 'financial' },
{
title: '项目商机', pathName: '', children: [
{ title: '重点项目', pathName: 'majorProject' },
{ title: '土地交易', pathName: 'landtransaction' },
{ title: '拟建项目', pathName: 'proposed' },
{ title: '专项债项目', pathName: 'bond' },
{ title: '招标计划', pathName: 'biddingplan' },
{ title: '招标公告', pathName: 'announcement' },
{ title: '标讯Pro', pathName: 'tencent' },
{ title: '行政许可', pathName: 'administrative' }
title: "内部合作", icon: "internal-cooperation-detail-side", pathName: "", children: [
{ title: '咨询机构合作', pathName: 'consultingAgencyCooperation' },
{
title: '供应商合作记录', pathName: '', children: [
{ title: '准入情况', pathName: 'accessCondition' },
{ title: '施工业绩', pathName: 'constructionPerformance' },
{ title: '在施工程情况', pathName: 'constructionSituation' },
{ title: '合作记录', pathName: 'cooperationRecord' },
]
},
]
},
{
title: '业务往来', pathName: '', children: [
{ title: '客户', pathName: 'custom' },
{ title: '供应商', pathName: 'supplier' },
{ title: '招标代理', pathName: 'bidagency' },
{ title: '历史发包', pathName: 'hiscontract' },
{ title: '开标记录', pathName: 'bidrecords' }
]
},
{
title: '城投分析', pathName: '', children: [
{ title: '区域经济', pathName: 'regionalEconomies' },
{ title: '城投拿地', pathName: 'landAcquisition' },
{ title: '同地区城投', pathName: 'sameRegion' }
]
},
{
title: '风险信息', pathName: '', children: [
{ title: '行政处罚', pathName: 'punish' },
{ title: '经营异常', pathName: 'businessAnomaly' },
{ title: '被执行人', pathName: 'ifThePerson' },
{ title: '失信被执行人', pathName: 'dishonesty' },
{ title: '限制高消费', pathName: 'limitHighConsumption' },
{ title: '股权冻结', pathName: 'equityFreezing' },
// { title: '裁判文书', pathName: 'judgment' },
// { title: '法院公告', pathName: 'courtNotice' },
// { title: '开庭公告', pathName: 'openacourtsessionNotice' },
// {title: '信用中国', pathName: ''}
]
},
{ title: '商务信息', pathName: 'business' },
{ title: '招标偏好', pathName: 'preference' },
{ title: '合作情况', pathName: 'cooperate' },
{ title: '联系人', pathName: 'decisionMaking' },
{ title: '跟进记录', pathName: 'gjjl' }
}
],
sideRoute1: [
{
title: '企业概要', pathName: '', children: [
{ title: '企业速览', pathName: 'overview' },
{ title: '工商信息', pathName: 'businfo' },
{ title: '股东信息', pathName: 'holderinfo' },
{ title: '高管信息', pathName: 'execuinfo' },
{ title: '对外投资', pathName: 'overseas' },
{ title: '分支机构', pathName: 'branch' }
title: "企业经营", pathName: "", children: [
{
title: '企业概要', pathName: '', children: [
{ title: '企业速览', pathName: 'overview' },
{ title: '工商信息', pathName: 'businfo' },
{ title: '股东信息', pathName: 'holderinfo' },
{ title: '高管信息', pathName: 'execuinfo' },
{ title: '对外投资', pathName: 'overseas' },
{ title: '分支机构', pathName: 'branch' }
]
},
{ title: '财务简析', pathName: 'financial' },
{
title: '项目商机', pathName: '', children: [
{ title: '重点项目', pathName: 'majorProject' },
{ title: '土地交易', pathName: 'landtransaction' },
{ title: '拟建项目', pathName: 'proposed' },
{ title: '专项债项目', pathName: 'bond' },
{ title: '招标计划', pathName: 'biddingplan' },
{ title: '招标公告', pathName: 'announcement' },
{ title: '标讯Pro', pathName: 'tencent' },
{ title: '行政许可', pathName: 'administrative' }
]
},
{
title: '业务往来', pathName: '', children: [
{ title: '客户', pathName: 'custom' },
{ title: '供应商', pathName: 'supplier' },
{ title: '招标代理', pathName: 'bidagency' },
{ title: '历史发包', pathName: 'hiscontract' },
{ title: '开标记录', pathName: 'bidrecords' }
]
},
{
title: '咨询业务往来', pathName: '', children: [
{ title: '常合作业主单位', pathName: 'cooperativeOwnerUnits' },
{ title: '常合作施工单位', pathName: 'cooperativeConstructionUnit' },
{ title: '常合作集团', pathName: 'cooperativeGroup' },
]
},
{
title: '城投分析', pathName: '', children: [
{ title: '区域经济', pathName: 'regionalEconomies' },
{ title: '城投拿地', pathName: 'landAcquisition' },
{ title: '同地区城投', pathName: 'sameRegion' }
]
},
{
title: '风险信息', pathName: '', children: [
{ title: '行政处罚', pathName: 'punish' },
{ title: '经营异常', pathName: 'businessAnomaly' },
{ title: '被执行人', pathName: 'ifThePerson' },
{ title: '失信被执行人', pathName: 'dishonesty' },
{ title: '限制高消费', pathName: 'limitHighConsumption' },
{ title: '股权冻结', pathName: 'equityFreezing' },
// { title: '裁判文书', pathName: 'judgment' },
// { title: '法院公告', pathName: 'courtNotice' },
// { title: '开庭公告', pathName: 'openacourtsessionNotice' },
// {title: '信用中国', pathName: ''}
]
},
{ title: '商务信息', pathName: 'business' },
{ title: '招标偏好', pathName: 'preference' },
{ title: '合作情况', pathName: 'cooperate' },
{ title: '联系人', pathName: 'decisionMaking' },
{ title: '跟进记录', pathName: 'gjjl' }
]
},
{ title: '财务简析', pathName: 'financial' },
{
title: '项目商机', pathName: '', children: [
{ title: '重点项目', pathName: 'majorProject' },
{ title: '土地交易', pathName: 'landtransaction' },
{ title: '拟建项目', pathName: 'proposed' },
{ title: '专项债项目', pathName: 'bond' },
{ title: '招标计划', pathName: 'biddingplan' },
{ title: '招标公告', pathName: 'announcement' },
{ title: '标讯Pro', pathName: 'tencent' },
{ title: '行政许可', pathName: 'administrative' }
title: "内部合作", icon: "internal-cooperation-detail-side", pathName: "", children: [
{ title: '咨询机构合作', pathName: 'consultingAgencyCooperation' },
{
title: '供应商合作记录', pathName: '', children: [
{ title: '准入情况', pathName: 'accessCondition' },
{ title: '施工业绩', pathName: 'constructionPerformance' },
{ title: '在施工程情况', pathName: 'constructionSituation' },
{ title: '合作记录', pathName: 'cooperationRecord' },
]
},
]
},
{
title: '业务往来', pathName: '', children: [
{ title: '客户', pathName: 'custom' },
{ title: '供应商', pathName: 'supplier' },
{ title: '招标代理', pathName: 'bidagency' },
{ title: '历史发包', pathName: 'hiscontract' },
{ title: '开标记录', pathName: 'bidrecords' }
]
},
{
title: '城投分析', pathName: '', children: [
{ title: '区域经济', pathName: 'regionalEconomies' },
{ title: '城投拿地', pathName: 'landAcquisition' },
{ title: '同地区城投', pathName: 'sameRegion' }
]
},
{
title: '风险信息', pathName: '', children: [
{ title: '行政处罚', pathName: 'punish' },
{ title: '经营异常', pathName: 'businessAnomaly' },
{ title: '被执行人', pathName: 'ifThePerson' },
{ title: '失信被执行人', pathName: 'dishonesty' },
{ title: '限制高消费', pathName: 'limitHighConsumption' },
{ title: '股权冻结', pathName: 'equityFreezing' },
// { title: '裁判文书', pathName: 'judgment' },
// { title: '法院公告', pathName: 'courtNotice' },
// { title: '开庭公告', pathName: 'openacourtsessionNotice' },
// {title: '信用中国', pathName: ''}
]
},
{ title: '商务信息', pathName: 'business' },
{ title: '招标偏好', pathName: 'preference' },
{ title: '合作情况', pathName: 'cooperate' },
{ title: '联系人', pathName: 'decisionMaking' },
{ title: '跟进记录', pathName: 'gjjl' }
}
],
defaultRoute: [],
customer: [
......@@ -197,13 +283,10 @@ export default {
};
},
computed: {
routeIndex() {
let idx = this.getRouteIdx('', this.pathName) || '0-0';
return idx;
}
},
created() {
this.defaultRoute = JSON.parse(JSON.stringify(this.sideRoute));
this.sideBarInit();
},
watch: {
statisticObj: {
......@@ -211,16 +294,52 @@ export default {
this.createSideBarWithServerData(val);
}
},
pathName: {
handler(newValue) {
this.searchIndex = this.findNodeIndex(this.sideRoute, newValue).index;
}
}
},
methods: {
financial(id) {
sideBarInit() {
const _temp = this.sideAddUid(JSON.parse(JSON.stringify(this.sideRoute)));
this.sideRoute = _temp;
this.defaultRoute = JSON.parse(JSON.stringify(this.sideRoute));
this.searchIndex = this.findNodeIndex(this.defaultRoute, "overview").index;
},
// 查找菜单中的元素
findNodeIndex(tree, key, findKey = "pathName", findParent = false, parenNode = null) {
let len = tree.length;
for (let index = 0; index < len; index++) {
if (tree[index][findKey] === key) {
console.log(tree[index][findKey], key, "匹配成功");
return findParent ? parenNode : tree[index];
};
if (tree[index]?.children?.length) {
const result = this.findNodeIndex(tree[index]?.children, key, findKey, findParent, tree[index]);
if (result) return result;
}
}
},
sideAddUid(array) {
return array.map(item => {
item.index = v4();
if (item?.children?.length) {
item.children = this.sideAddUid(item?.children);
}
return item;
});
},
getFinancial(id) {
financial({ cid: String(id) }).then(res => {
if ((res.code == 200 && !res.data) || !res.data?.totalAssets) {
this.sideRoute[1].disabled = true;
this.$set(this.sideRoute[0], "disabled", true);
this.$set(this.sideRoute[1], "disabled", true);
this.defaultRoute = JSON.parse(JSON.stringify(this.sideRoute));
}
});
},
// 菜单关联服务端数据
createSideBarWithServerData(value) {
this.sideRoute = JSON.parse(JSON.stringify(this.defaultRoute));
......@@ -308,40 +427,46 @@ export default {
}
this.$emit("currentPath", obj);
},
handleSearch(flag) {
if ((this.searchText && !flag) || (!this.searchText && flag)) {
let idx = this.getRouteIdx(this.searchText);
if (idx) {
if (idx.includes('-')) {
let openIdx = idx.slice(0, 1);
this.sideRoute = [this.defaultRoute[openIdx]];
this.$refs.sideMenu.open(openIdx);
} else {
this.sideRoute = [this.defaultRoute[idx]];
}
this.searchIndex = '-1';
} else {
this.sideRoute = this.defaultRoute;
this.searchIndex = '';
}
}
},
getRouteIdx(pathTitle, pathName) {
let idx = '', sideArr = this.sideRoute == this.defaultRoute ? this.sideRoute : this.defaultRoute;
for (let i = 0; i < sideArr.length; i++) {
if (sideArr[i].title == pathTitle || sideArr[i].pathName == pathName) {
idx = i.toString();
break;
} else if (sideArr[i].children) {
for (let j = 0; j < sideArr[i].children.length; j++) {
if (sideArr[i].children[j].title == pathTitle || sideArr[i].children[j].pathName == pathName) {
idx = i + '-' + j;
break;
async handleSearch(flag) {
try {
// 手动输入时 flag 为true
if ((this.searchText && !flag) || (!this.searchText && flag)) {
// 找到唯一标识
let side = this.findNodeIndex(this.defaultRoute, this.searchText, "title");
// 需要打开菜单的唯一标识
let openIndex = null;
// 右侧打开的菜单对应对象
let openSide = null;
// 菜单高亮命中
let hightLightSide = null;
if (side) {
// 判断是否是子级菜单 有children 直接使用当前层级 没有找父级
if (side?.children?.length) {
openIndex = side.index;
openSide = side?.children[0];
// 打开的菜单有children 表示目录 不高亮显示
hightLightSide = openSide?.children?.length ? null : side?.children[0]?.index;
this.sideRoute = [JSON.parse(JSON.stringify(side))];
} else {
// 找父节点
const parent = this.findNodeIndex(this.defaultRoute, side.pathName, "pathName", true);
openIndex = parent.index;
hightLightSide = side.index;
openSide = side;
this.sideRoute = [JSON.parse(JSON.stringify(parent))];
}
await this.$nextTick();
this.$refs.sideMenu.open(openIndex);
// 打开查找到的菜单 禁用则不打开
openSide?.disabled ? null : (hightLightSide ? (this.searchIndex = hightLightSide) : null) && this.handleItem(openSide);
} else {
this.sideRoute = JSON.parse(JSON.stringify(this.defaultRoute));
this.searchText = "";
}
}
} catch (err) {
console.log(err);
}
return idx;
},
isCustomerId(name) {
if (this.customer.indexOf(name) != -1) {
......@@ -368,33 +493,37 @@ export default {
<style lang="scss" scoped>
#app {
.sides-container {
width: 144px;
width: 160px;
min-height: calc(100vh - 170px);
padding-bottom: 20px;
background: #ffffff;
border-radius: 4px;
.side-input {
width: 128px;
margin-top: 16px;
margin-left: 8px;
border: 0;
::v-deep .el-input__inner {
height: 32px;
background: #f3f3f4;
border-radius: 20px;
.search-bar-container {
padding: 9px 8px;
box-sizing: border-box;
::v-deep .side-input {
width: 100%;
border: 0;
&::placeholder {
color: #3d3d3d;
.el-input__inner {
height: 32px;
background: #f3f3f4;
border-radius: 20px;
border: 0;
&::placeholder {
color: #3d3d3d;
}
}
.el-icon-search {
line-height: 34px;
color: #0081ff;
cursor: pointer;
}
}
.el-icon-search {
line-height: 34px;
color: #0081ff;
cursor: pointer;
}
}
.detail-menu {
margin-top: 20px;
margin-top: 9px;
border-right: 0;
::v-deep .el-menu-item,
::v-deep .el-submenu__title {
......@@ -443,6 +572,79 @@ export default {
border-radius: 50%;
}
}
::v-deep .top-level-menu {
// 重置展开图标位置
.el-submenu__icon-arrow {
position: static;
margin-top: 0px;
}
// 顶级菜单标题
& > .el-submenu__title {
font-weight: bold;
color: #232323;
font-size: 14px;
height: 40px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 9px 8px !important;
box-sizing: border-box;
.top-level-menu-title {
display: flex;
align-items: center;
& > span {
margin-left: 4px;
}
}
}
// 二级菜单
& > .el-menu {
.second-level-menu-no-children,
.second-level-menu-has-children .el-submenu__title {
font-size: 14px;
height: 38px;
color: #232323;
font-weight: 400;
display: flex;
align-items: center;
justify-content: space-between;
padding: 9px 8px 9px 32px !important;
box-sizing: border-box;
&::before {
display: none;
}
}
.second-level-menu-has-children {
// 三级菜单
& > .el-menu {
& > .el-menu-item {
font-size: 12px;
height: 32px;
color: rgba(35, 35, 35, 0.8);
font-weight: 400;
display: flex;
align-items: center;
padding: 9px 8px 9px 32px !important;
box-sizing: border-box;
& > span {
margin-left: 8px;
}
&::before {
position: static;
}
}
}
}
}
}
}
}
}
......
<template>
<div class="Tables">
<div class="table-item">
<el-table v-if="tableDataTotal>0" class="fixed-table" :class="headerFixed ? 'headerFixed':''"
v-loading="tableLoading"
:data="tableData"
element-loading-text="Loading"
ref="tableRef"
v-horizontal-scroll="'hover'"
border
fit
highlight-current-row
:default-sort = "defaultSort?defaultSort:{}"
@sort-change="sortChange"
>
<el-table-column
v-if="isIndex"
label="序号"
:width="flexWidth(tableData)"
align="left"
:fixed="indexFixed"
:resizable="false">
<el-table v-if="tableDataTotal>0" class="fixed-table" :class="headerFixed ? 'headerFixed':''" v-loading="tableLoading" :data="tableData"
element-loading-text="Loading" ref="tableRef" v-horizontal-scroll="'hover'" border fit highlight-current-row
:default-sort="defaultSort?defaultSort:{}" @sort-change="sortChange">
<el-table-column v-if="isIndex" label="序号" :width="flexWidth(tableData)" align="left" :fixed="indexFixed" :resizable="false">
<template slot-scope="scope">{{ queryParams.pageNum * queryParams.pageSize - queryParams.pageSize + scope.$index + 1 }}</template>
</el-table-column>
<template >
<el-table-column
v-for="(item,index) in forData"
:key="index"
:label="item.label"
:prop="item.prop"
:width="item.width"
:min-width="item.minWidth"
:align="item.align?item.align:'left'"
:fixed="item.fixed"
:sortable="item.sortable ?item.sortable=='custom'? 'custom':true : false"
<template>
<el-table-column v-for="(item,index) in forData" :key="index" :label="item.label" :prop="item.prop" :width="item.width"
:min-width="item.minWidth" :align="item.align?item.align:'left'" :fixed="item.fixed"
:sortable="item.sortable ?item.sortable=='custom'? 'custom':true : false" :show-overflow-tooltip="item.showOverflowTooltip"
:resizable="false">
<template v-if="item.children&&item.children.length">
<el-table-column
v-for="(cld, i) in item.children"
:key="i"
:prop="cld.prop"
:label="cld.label"
:width="cld.width"
:resizable="false">
<el-table-column v-for="(cld, i) in item.children" :key="i" :prop="cld.prop" :label="cld.label" :width="cld.width" :resizable="false">
<template slot-scope="cldscope">
<template v-if="cld.slot">
<slot :name="cld.prop" :row="cldscope.row" :data="cld"></slot>
......@@ -58,8 +30,8 @@
<template slot-scope="scope">
<slot v-if="item.slot" :name="item.prop" :row="scope.row" :index="scope.$index" :data="item"></slot>
<span v-else>
{{ scope.row[item.prop] || '-' }}
</span>
{{ scope.row[item.prop] || '-' }}
</span>
</template>
</el-table-column>
......@@ -73,13 +45,14 @@
</div>
</div>
<div class="pagination-box" v-if="show_page && tableDataTotal>queryParams.pageSize">
<el-pagination background :current-page="current_page" :page-size="queryParams.pageSize" :total="tableDataTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
<el-pagination background :current-page="current_page" :page-size="queryParams.pageSize" :total="tableDataTotal"
layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div>
</div>
</template>
<script>
import NoData from '../component/noData'
import NoData from '../component/noData';
export default {
name: "Tables",
props: {
......@@ -135,128 +108,132 @@ export default {
return {
current_page: this.queryParams.pageNum,
show_page: this.paging
}
};
},
watch:{
'queryParams.pageNum'(newVal,oldVal){
this.current_page=newVal
watch: {
'queryParams.pageNum'(newVal, oldVal) {
this.current_page = newVal;
}
},
created() {
},
methods:{
handleCurrentChange(e){
if(this.MaxPage<e){
this.show_page = false
methods: {
handleCurrentChange(e) {
if (this.MaxPage < e) {
this.show_page = false;
this.$nextTick(() => {
this.current_page = this.queryParams.pageNum
this.$message.warning(`对不起,最多只能访问${this.MaxPage}页`)
this.show_page = true
})
}else{
this.$emit('handle-current-change',e)
this.current_page = this.queryParams.pageNum;
this.$message.warning(`对不起,最多只能访问${this.MaxPage}页`);
this.show_page = true;
});
} else {
this.$emit('handle-current-change', e);
}
},
handleSizeChange(e){
this.$emit('handle-current-change',e)
handleSizeChange(e) {
this.$emit('handle-current-change', e);
},
sortChange(e){
this.$emit('sort-change',e)
sortChange(e) {
this.$emit('sort-change', e);
},
flexWidth(tableData) {
let currentMax = this.queryParams.pageNum*this.queryParams.pageSize - this.queryParams.pageSize + tableData.length, wdth = 59
let currentMax = this.queryParams.pageNum * this.queryParams.pageSize - this.queryParams.pageSize + tableData.length, wdth = 59;
// return currentMax.toString().length*25 + 'px'
if(currentMax.toString().length>3){
wdth = wdth + (currentMax.toString().length-3)*10
if (currentMax.toString().length > 3) {
wdth = wdth + (currentMax.toString().length - 3) * 10;
}
return wdth+'px'
return wdth + 'px';
}
}
}
</script>
<style lang="scss" scoped>
.Tables{
::v-deep .el-table__body tr.current-row > td.el-table__cell{
background-color: #ffffff;
}
/*::v-deep .el-table__fixed{
.Tables {
::v-deep .el-table__body tr.current-row > td.el-table__cell {
background-color: #ffffff;
}
/*::v-deep .el-table__fixed{
height: calc(100% - 16px) !important;
}*/
::v-deep .el-table__row{
&:nth-child(even){
background-color: #F9FCFF;
.more{
background: #F8FBFF;
span{
color: #0081FF;
}
}
}
&:nth-child(odd){
.more{
span{
color: #0081FF;
}
::v-deep .el-table__row {
&:nth-child(even) {
background-color: #f9fcff;
.more {
background: #f8fbff;
span {
color: #0081ff;
}
}
}
.table-item{
::v-deep .el-table td.el-table__cell{
border-bottom: 0;
&:nth-child(odd) {
.more {
span {
color: #0081ff;
}
}
}
::v-deep .el-table th.el-table__cell.is-leaf,::v-deep .el-table td.el-table__cell {
border-bottom: 1px solid #E6EAF1;
}
::v-deep .el-table--border .el-table__cell {
border-right: 1px solid #E6EAF1;
}
::v-deep .table-item {
.el-table td.el-table__cell {
border-bottom: 0;
}
::v-deep .el-table__body tr.hover-row.current-row>td,
::v-deep .el-table__body tr.hover-row.el-table__row--striped.current-row>td,
::v-deep .el-table__body tr.hover-row.el-table__row--striped>td,
::v-deep .el-table__body tr.hover-row>td{
background-color:#DCEBFF !important;
.more{
background: #DCEBFF;
.el-table {
.cell {
font-size: 12px;
}
}
::v-deep .el-table--enable-row-hover .el-table__body tr:hover > td {
background-color: #DCEBFF;
}
::v-deep .fixed-table{
overflow: visible;
}
::v-deep .el-table th.el-table__cell.is-leaf,
::v-deep .el-table td.el-table__cell {
border-bottom: 1px solid #e6eaf1;
}
::v-deep .el-table--border .el-table__cell {
border-right: 1px solid #e6eaf1;
}
::v-deep .el-table__body tr.hover-row.current-row > td,
::v-deep .el-table__body tr.hover-row.el-table__row--striped.current-row > td,
::v-deep .el-table__body tr.hover-row.el-table__row--striped > td,
::v-deep .el-table__body tr.hover-row > td {
background-color: #dcebff !important;
.more {
background: #dcebff;
}
::v-deep .el-table__header-wrapper{
}
::v-deep .el-table--enable-row-hover .el-table__body tr:hover > td {
background-color: #dcebff;
}
::v-deep .fixed-table {
overflow: visible;
}
::v-deep .el-table__header-wrapper {
position: sticky;
top: 0;
z-index: 9;
}
::v-deep .el-table__fixed-header-wrapper {
position: sticky;
z-index: 9;
top: 0;
}
.headerFixed {
::v-deep .el-table__header-wrapper {
position: sticky;
top:0;
top: 80px;
z-index: 9;
}
::v-deep .el-table__fixed-header-wrapper{
::v-deep .el-table__fixed-header-wrapper {
position: sticky;
z-index: 9;
top: 0;
top: 80px;
}
.headerFixed{
::v-deep .el-table__header-wrapper{
position: sticky;
top:80px;
z-index: 9;
}
::v-deep .el-table__fixed-header-wrapper{
position: sticky;
z-index: 9;
top:80px;
}
}
::v-deep .el-table__fixed{
overflow-x: clip;
overflow-y: clip;
}
}
::v-deep .el-table__fixed {
overflow-x: clip;
overflow-y: clip;
}
}
</style>
<template>
<div class="cooperative-owner-units">
<head-form-new title="常合作业主单位" :form-data="formData" :query-params="queryParams" :total="tableDataTotal" :isExcel="true"
@handle-search="handleSearch" />
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<tables v-if="!isSkeleton" :indexFixed="true" :tableData="tableData" :forData="forData" :tableDataTotal="tableDataTotal"
:queryParams="queryParams" @handle-current-change="handleCurrentChange">
</tables>
</div>
</template>
<script>
import skeleton from '../component/skeleton';
import mixin from '@/views/detail/party-a/mixins/mixin';
import { getCooperativeOwnerUnitsListApi } from "@/api/consultingTransaction";
export default {
name: "cooperativeOwnerUnits",
mixins: [mixin],
components: {
skeleton
},
props: ['companyId'],
data() {
return {
queryParams: {
cid: this.companyId,
pageNum: 1,
pageSize: 10,
companyType: 1
},
forData: [
{ label: '限消令对象', prop: 'name', width: '215' },
],
formData: [
{ type: 4, fieldName: 'businessTypes', value: '', placeholder: '咨询机构业务', uid: this.getUid() },
{ type: 5, fieldName: 'time', value: '', placeholder: '合作频率', startTime: 'dateFrom', endTime: 'dateTo', uid: this.getUid() },
],
//列表
tableLoading: false,
tableData: [],
tableDataTotal: 0,
isSkeleton: true
};
},
//可访问data属性
created() {
this.initDetail();
},
//计算集
computed: {
},
//方法集
methods: {
async initDetail() {
try {
await this.handleQuery();
} catch (error) {
}
},
async handleQuery(params) {
try {
let data = params ? params : this.queryParams;
this.isSkeleton = true;
const res = await getCooperativeOwnerUnitsListApi(data);
this.tableData = res.rows ? res.rows : [];
this.tableDataTotal = res.total ? res.total : 0;
} catch (error) {
console.log(error);
} finally {
this.isSkeleton = false;
}
},
},
}
</script>
<style lang="scss" scoped>
.cooperative-owner-units {
background: #ffffff;
border-radius: 4px;
padding: 16px;
input {
border: 1px solid #efefef;
}
::v-deep .el-form-item {
margin-right: 8px !important;
}
.query-box {
margin: 10px 0 20px;
}
.cell-span {
display: inline-block;
position: relative;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 4;
cursor: pointer;
> span {
display: inline-block;
width: 37px;
position: absolute;
right: 0;
bottom: 0;
background-color: #fff;
z-index: 1;
}
}
@import "@/assets/styles/search-common.scss";
}
</style>
......@@ -32,6 +32,9 @@
<Bidagency v-if="currentPath.pathName=='bidagency'" :company-id="companyId" />
<Hiscontract v-if="currentPath.pathName=='hiscontract'" :company-id="companyId" />
<Bidrecords v-if="currentPath.pathName=='bidrecords'" :company-id="companyId" />
<!-- 咨询业务往来 -->
<!-- 1.常合作业主单位 -->
<cooperative-owner-units v-if="currentPath.pathName=='cooperativeOwnerUnits'" :company-id="companyId"></cooperative-owner-units>
<!-- 投诚分析 -->
<RegionalEconomies v-if="currentPath.pathName=='regionalEconomies'" :company-id="companyId" :companyInfo="companyInfo" />
<LandAcquisition v-if="currentPath.pathName=='landAcquisition'" :company-id="companyId" />
......@@ -48,6 +51,15 @@
<!-- <Judgment v-if="currentPath.pathName=='judgment'" :company-id="companyId" />
<CourtNotice v-if="currentPath.pathName=='courtNotice'" :company-id="companyId" />
<OpenacourtsessionNotice v-if="currentPath.pathName=='openacourtsessionNotice'" :company-id="companyId" /> -->
<!-- 内部合作 -->
<!-- 1、咨询机构合作 -->
<consulting-agency-cooperation v-if="currentPath.pathName=='consultingAgencyCooperation'"
:company-id="companyId"></consulting-agency-cooperation>
<!-- 2、准入情况 -->
<access-condition v-if="currentPath.pathName=='accessCondition'" :company-id="companyId" :companyInfo="companyInfo"></access-condition>
<!-- 3、供应商合作记录 -->
<cooperation-record v-if="currentPath.pathName=='cooperationRecord'" :company-id="companyId"></cooperation-record>
</template>
<template v-if="customerId && isCustomer">
<!-- 商务信息 -->
......@@ -98,6 +110,7 @@ import Supplier from "./dealings/supplier"; //业务往来-供应商
import Bidagency from "./dealings/bidagency"; //业务往来-招标代理
import Hiscontract from "./dealings/hiscontract"; //业务往来-历史发包
import Bidrecords from "./dealings/bidrecords"; //业务往来-开标记录
import CooperativeOwnerUnits from "@/views/detail/party-a/consultingTransaction/cooperativeOwnerUnits"; //咨询业务往来 常合作业主单位
import LandAcquisition from "./urbanLnvestment/landAcquisition"; //投诚分析-城投拿地
import RegionalEconomies from "./urbanLnvestment/regionalEconomies"; //投诚分析-区域经济
import SameRegion from "./urbanLnvestment/sameRegion"; //投诚分析-同地区城投
......@@ -115,6 +128,9 @@ import Preference from "./preference"; //招标偏好
import Cooperate from "./cooperate"; //合作情况
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 CooperationRecord from "@/views/detail/party-a/internalCooperation/cooperationRecord"; //内部合作 准入情况
import {
urbanInvestmentPage,
} from '@/api/detail/party-a/urbanLnvestment';
......@@ -160,7 +176,11 @@ export default {
Preference,
Cooperate,
DecisionMaking,
Gjjl
Gjjl,
CooperativeOwnerUnits,
ConsultingAgencyCooperation,
AccessCondition,
CooperationRecord
},
data() {
return {
......@@ -217,8 +237,6 @@ export default {
if (titlename) {
titlename.innerText = this.customerInfo.companyName;
}
// }
// })
});
}
}
......@@ -249,9 +267,6 @@ export default {
let companyId = this.$route.params.id;
await this.getCompanyId(companyId);
}
if (this.$route.query.path) { // 获取跳转对应板块
this.currentPath.pathName = this.$route.query.path;
}
} catch (error) {
console.log(error);
}
......@@ -269,7 +284,7 @@ export default {
await this.getStatistic();
await this.handleQuery();
await this.association(this.$route.query.customerId);
this.$refs.sidebar.financial(data);
this.$refs.sidebar.getFinancial(data);
}
},
async getStatistic() {
......@@ -294,18 +309,17 @@ export default {
if (result.code == 200) {
if (result.data.totalCount < 1) {
let arr = JSON.parse(JSON.stringify(this.$refs.sidebar.sideRoute));
arr[4].children[2].disabled = true;
arr[1].children[5].children[2].disabled = true;
this.$refs.sidebar.sideRoute = arr;
}
}
if (this.companyInfo && this.companyInfo.companyName) {
this.$nextTick(() => {
document.getElementById('tagTitle').innerText = this.companyInfo.companyName;
let titlename = document.getElementById('tagTitles');
if (titlename) {
titlename.innerText = this.companyInfo.companyName;
}
});
await this.$nextTick();
document.getElementById('tagTitle').innerText = this.companyInfo.companyName;
let titlename = document.getElementById('tagTitles');
if (titlename) {
titlename.innerText = this.companyInfo.companyName;
}
}
}
},
......@@ -353,7 +367,7 @@ export default {
await this.$nextTick();
this.isCustomer = true;
this.isCompany = true;
this.currentPath.pathName = 'overview';
this.currentPath.pathName = this.$route.query.path ? this.$route.query.path : 'overview';
}
}
} catch (err) {
......@@ -364,7 +378,7 @@ export default {
} else {
await this.$nextTick();
this.isCompany = true;
this.currentPath.pathName = 'overview';
this.currentPath.pathName = this.$route.query.path ? this.$route.query.path : 'overview';
}
},
......@@ -390,7 +404,7 @@ export default {
width: 100%;
background: #ffffff;
border-radius: 4px;
margin-left: 160px;
margin-left: 176px;
::v-deep .el-table__header-wrapper {
position: sticky;
top: 0;
......@@ -421,7 +435,7 @@ export default {
margin-right: 16px;
position: fixed;
background: #ffffff;
width: 144px;
width: 160px;
height: calc(100% - 156px);
#detailPart {
......@@ -432,9 +446,9 @@ export default {
}
.part-right {
margin-left: 160px;
margin-left: 176px;
height: 100%;
width: calc(100% - 160px);
width: calc(100% - 176px);
overflow: hidden;
.part-common-container-style {
......
<template>
<div class="access-condition">
<!-- 基本信息 -->
<div class="basic-information">
<div class="info-module-title"><span>基本信息</span></div>
<!-- 基本信息表格 -->
<table>
<tr>
<td class="table-key">资源平台分类</td>
<td colspan="3">-</td>
</tr>
<tr>
<td class="table-key">公司名称</td>
<td>-</td>
<td class="table-key">注册资本(万元)</td>
<td>-</td>
</tr>
<tr>
<td class="table-key">证件选择</td>
<td>-</td>
<td class="table-key">统一社会信用代码</td>
<td>-</td>
</tr>
<tr>
<td class="table-key">工商注册号</td>
<td>-</td>
<td class="table-key">组织机构代码证号</td>
<td>-</td>
</tr>
<tr>
<td class="table-key">税务登记号</td>
<td colspan="3">-</td>
</tr>
<tr>
<td class="table-key">身份选择</td>
<td>-</td>
<td class="table-key">法人身份证号/护照...</td>
<td>-</td>
</tr>
<tr>
<td class="table-key">纳税人身份</td>
<td>-</td>
<td class="table-key">纳税人税率</td>
<td>-</td>
</tr>
<tr>
<td class="table-key lot">享受优惠政策说明</td>
<td colspan="3">-</td>
</tr>
</table>
<table style="margin-top:16px;">
<tr>
<td class="table-key">法人代表</td>
<td>-</td>
<td class="table-key">公司联系人</td>
<td>-</td>
</tr>
<tr>
<td class="table-key">公司联系人电话</td>
<td>-</td>
<td class="table-key">主项资质</td>
<td>-</td>
</tr>
<tr>
<td class="table-key">公司性质</td>
<td>-</td>
<td class="table-key">资质等级</td>
<td>-</td>
</tr>
<tr>
<td class="table-key">施工承包范围</td>
<td>-</td>
<td class="table-key">专业类别</td>
<td>-</td>
</tr>
<tr>
<td class="table-key">公司注册地所属区域</td>
<td>-</td>
<td class="table-key">公司注册地所属省</td>
<td>-</td>
</tr>
<tr>
<td class="table-key">公司注册地所属城市</td>
<td>-</td>
<td class="table-key">注册地址</td>
<td>-</td>
</tr>
<tr>
<td class="table-key">开户行</td>
<td>-</td>
<td class="table-key">银行账号</td>
<td>-</td>
</tr>
</table>
</div>
<!-- 上传证书及其他信息 -->
<div class="certificate-details table-item">
<div class="info-module-title"><span>上传证书及其他信息</span></div>
<el-table :data="textTabel" border stripe>
<el-table-column label="证书类型" width="194px">
</el-table-column>
<el-table-column label="到期时间" width="194px">
</el-table-column>
<el-table-column label="状态" width="194px">
</el-table-column>
<el-table-column label="查看" min-width="194px">
</el-table-column>
<el-table-column label="操作" width="194px">
</el-table-column>
</el-table>
</div>
<!-- 审批意见 -->
<div class="approval-opinions">
<div class="info-module-title"><span>审批意见</span></div>
<!-- 项目部意见 -->
<div class="project-opinion">
<div class="opinion-title">项目部意见</div>
<table>
<tr>
<td class="table-key">准入情况</td>
<td colspan="3">-</td>
</tr>
<tr>
<td class="table-key">经办人</td>
<td>-</td>
<td class="table-key">准入时间</td>
<td>-</td>
</tr>
<tr>
<td class="table-key">商务经理</td>
<td>-</td>
<td class="table-key">准入时间</td>
<td>-</td>
</tr>
<tr>
<td class="table-key">项目经理</td>
<td>-</td>
<td class="table-key">准入时间</td>
<td>-</td>
</tr>
</table>
</div>
<!-- 公司意见 -->
<div class="company-opinion">
<div class="opinion-title">公司意见</div>
<table>
<tr>
<td class="table-key">公司意见</td>
<td>-</td>
<td class="table-key">准入时间</td>
<td>-</td>
</tr>
</table>
</div>
</div>
</div>
</template>
<script>
import { getSupplierAccessInfoApi } from "@/api/internalCooperation";
export default {
name: "accessCondition",
props: ['companyId', "companyInfo"],
data() {
return {
comCompanyInfo: this.companyInfo,
queryParams: {
advisoryBodyCid: this.companyId,
},
supplierAccessInfo: {},
textTabel: []
};
},
//可访问data属性
created() {
this.init();
},
//计算集
computed: {
},
//方法集
methods: {
async init() {
try {
const result = await getSupplierAccessInfoApi({
customerName: this.comCompanyInfo.companyName
});
if (result.code == 200 && result.data) {
this.supplierAccessInfo = { ...this.supplierAccessInfo, ...result.data };
}
console.log(result);
} catch (error) {
}
}
},
}
</script>
<style lang="scss" scoped>
.access-condition {
width: 100%;
height: 100%;
padding: 16px;
box-sizing: border-box;
overflow: auto;
.info-module-title {
line-height: 24px;
color: #232323;
font-weight: bold;
font-size: 16px;
margin-bottom: 16px;
display: flex;
align-items: center;
& > span {
display: inline-block;
position: relative;
padding-left: 8px;
box-sizing: border-box;
&::before {
content: "";
position: absolute;
left: 0px;
top: 50%;
transform: translateY(-50%);
background: rgba(35, 35, 35, 0.8);
width: 2px;
height: 14px;
}
}
}
table {
width: 100%;
border-spacing: 0;
border-collapse: collapse;
&,
th,
td {
border: 1px solid #e6eaf1;
box-sizing: border-box;
}
td {
padding: 9px 12px;
line-height: 22px;
color: #232323;
font-size: 12px;
}
.table-key {
width: 140px;
background: #f0f3fa;
color: rgba(35, 35, 35, 0.8);
&.lot {
height: 62px;
}
}
}
.approval-opinions,
.certificate-details {
margin-top: 32px;
}
.certificate-details {
&.table-item {
::v-deep .el-table {
.el-table__header-wrapper {
position: static;
}
}
}
}
.approval-opinions {
.company-opinion,
.project-opinion {
margin-top: 16px;
.opinion-title {
color: #232323;
font-size: 14px;
line-height: 24px;
margin-bottom: 16px;
}
}
}
}
</style>
<template>
<div class="consulting-agency-cooperation">
<head-form-new title="咨询机构合作" :form-data="formData" :query-params="queryParams" :total="tableDataTotal" :isExcel="true"
@handle-search="handleSearch" ref="searchFormNew" @handle-excel="handleExcel" />
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<tables v-if="!isSkeleton" :indexFixed="true" :tableData="tableData" :forData="forData" :tableDataTotal="tableDataTotal"
:queryParams="queryParams" @handle-current-change="handleCurrentChange">
<!-- 项目列表 -->
<template slot="projectName" slot-scope="scope">
<span v-if="scope.row.projectName" style="color: #0081FF;cursor: pointer;"
@click="viewProjectDetail(scope.row)">{{scope.row.projectName}}</span>
<span v-else>-</span>
</template>
<!-- 省市区 -->
<template slot="provinceName" slot-scope="scope">
<span>{{`${scope.row.provinceName}${scope.row.provinceName || scope.row.cityName ? " - " : ""}${scope.row.cityName}`}}</span>
</template>
<!-- 业主单位 -->
<template slot="ownerName" slot-scope="scope">
<span v-if="scope.row.ownerName" style="color: #0081FF;cursor: pointer;" @click="viewEnterprise(scope.row)">{{scope.row.ownerName}}</span>
<span v-else>-</span>
</template>
<!-- 项目承接单位 -->
<template slot="contractOrgName" slot-scope="scope">
<span v-if="scope.row.contractOrgName" style="color: #0081FF;cursor: pointer;"
@click="viewEnterprise(scope.row)">{{scope.row.contractOrgName}}</span>
<span v-else>-</span>
</template>
<!-- 咨询机构名称 -->
<template slot="advisoryBodyName" slot-scope="scope">
<span v-if="scope.row.advisoryBodyName" style="color: #0081FF;cursor: pointer;"
@click="viewEnterprise(scope.row)">{{scope.row.advisoryBodyName}}</span>
<span v-else>-</span>
</template>
</tables>
</div>
</template>
<script>
import skeleton from '../component/skeleton';
import mixin from '@/views/detail/party-a/mixins/mixin';
import { getConsultingAgencyCooperationListApi, exportRecordOfCooperationExcelApi } from "@/api/internalCooperation";
import { getAllAreaApi } from "@/api/common";
import { getTreeSelectAreaList } from "@/utils";
export default {
name: "consultingAgencyCooperation",
mixins: [mixin],
components: {
skeleton
},
props: ['companyId'],
data() {
return {
queryParams: {
advisoryBodyCid: this.companyId,
pageNum: 1,
pageSize: 10,
},
forData: [
{ label: '项目列表', prop: 'projectName', width: '222', slot: true, showOverflowTooltip: true },
{ label: '项目编码', prop: 'projectCode', width: '123' },
{ label: '省市', prop: 'provinceName', minWidth: '110', slot: true },
{ label: '项目承接类型', prop: 'isinvestproject', width: '102', showOverflowTooltip: true },
{ label: '工程基础大类', prop: 'projectType1', width: '98', showOverflowTooltip: true },
{ label: '工程类别明细', prop: 'projectType', width: '98', showOverflowTooltip: true },
{ label: '项目负责人姓名', prop: 'projectLeader', width: '110' },
{ label: '项目负责人专业', prop: 'projectLeaderMajor', width: "110" },
{ label: '项目负责人联系电话', prop: 'projectLeaderPhone', width: "135" },
{ label: '合同金额(元)', prop: 'contractOrigValue', width: "110", align: "right" },
{ label: '业主单位', prop: 'ownerName', slot: true, width: "185", showOverflowTooltip: true },
{ label: '项目承接单位', prop: 'contractOrgName', width: "196", slot: true },
{ label: '咨询机构名称', prop: 'advisoryBodyName', width: "172", slot: true },
{ label: '创建时间', prop: 'loadTime', width: "172" },
],
formData: [
{
type: 7, fieldName: 'businessTypes', value: '', placeholder: '项目省市', uid: this.getUid(), options: [], props: {
multiple: true,
value: "value",
label: "value",
// checkStrictly: true
}
},
{ type: 4, fieldName: 'causeAction', value: '', placeholder: '项目承接类型', options: [], uid: this.getUid() },
{ type: 4, fieldName: 'causeAction', value: '', placeholder: '工程类别明细', options: [], uid: this.getUid() },
{ type: 3, fieldName: 'advisoryBodyName', value: '', placeholder: '请输入', uid: this.getUid() },
],
//列表
tableLoading: false,
tableData: [],
tableDataTotal: 0,
isSkeleton: true,
areaList: []
};
},
//可访问data属性
created() {
this.initDetail();
},
//计算集
computed: {
},
//方法集
methods: {
async initDetail() {
try {
await this.handleQuery();
await this.getAllArea();
} catch (error) {
}
},
async getAllArea() {
try {
const area = await getAllAreaApi();
if (area.code == 200) {
this.areaList = area.data;
this.$set(this.formData[0], "options", this.areaList);
console.log();
}
} catch (error) {
}
},
async handleQuery(params) {
try {
let data = params ? params : this.queryParams;
this.isSkeleton = true;
const res = await getConsultingAgencyCooperationListApi(data);
this.tableData = res.rows ? res.rows : [];
this.tableDataTotal = res.total ? res.total : 0;
} catch (error) {
console.log(error);
} finally {
this.isSkeleton = false;
}
},
async handleSearch() {
try {
const areaSearchList = this.$refs["searchFormNew"].$refs["cascader"][0].getCheckedNodes();
if (areaSearchList?.length) {
const valueList = areaSearchList.map(item => item.value);
const result = getTreeSelectAreaList(valueList, this.areaList, "value");
console.log(result);
}
} catch (error) {
}
},
// 导出excel
async handleExcel() {
try {
const result = await exportRecordOfCooperationExcelApi(this.queryParams);
this.$download.saveAs(result);
} catch (error) {
}
},
// 跳转项目详情
viewProjectDetail(row) {
},
viewEnterprise(row) {
}
}
}
</script>
<style lang="scss" scoped>
.consulting-agency-cooperation {
background: #ffffff;
border-radius: 4px;
padding: 16px;
input {
border: 1px solid #efefef;
}
::v-deep .el-form-item {
margin-right: 8px !important;
}
.query-box {
margin: 10px 0 20px;
}
.cell-span {
display: inline-block;
position: relative;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 4;
cursor: pointer;
> span {
display: inline-block;
width: 37px;
position: absolute;
right: 0;
bottom: 0;
background-color: #fff;
z-index: 1;
}
}
@import "@/assets/styles/search-common.scss";
}
</style>
<template>
<div class="cooperation-record">
<head-form-new title="供应商合作记录" :form-data="formData" :query-params="queryParams" :total="tableDataTotal" :isExcel="true"
@handle-search="handleSearch" ref="searchFormNew" @handle-excel="handleExcel" />
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<tables v-if="!isSkeleton" :indexFixed="true" :tableData="tableData" :forData="forData" :tableDataTotal="tableDataTotal"
:queryParams="queryParams" @handle-current-change="handleCurrentChange">
<!-- 项目列表 -->
<template slot="projectName" slot-scope="scope">
<span v-if="scope.row.projectName" style="color: #0081FF;cursor: pointer;"
@click="viewProjectDetail(scope.row)">{{scope.row.projectName}}</span>
<span v-else>-</span>
</template>
</tables>
<el-dialog :title="dialogTitle" :visible.sync="cooperationRecordDialog" width="1100px" @close="dialogClose"
class="cooperation-record-dialog-container" custom-class="cooperation-record-dialog">
<div class="cooperation-record-dialog-innner">
<dialog-head-form-new title="" :form-data="dialogFormData" :query-params="dialogQueryParams" :total="dialogtableDataTotal" :isExcel="false"
@handle-search="dialogHandleSearch" ref="dialogSearchFormNew" />
<skeleton v-if="dialogIsSkeleton" style="padding: 16px"></skeleton>
<!-- 列表 -->
<dialog-tables v-if="!dialogIsSkeleton" :indexFixed="true" :tableData="dialogTableData" :forData="forData"
:tableDataTotal="dialogtableDataTotal" :queryParams="dialogQueryParams" @handle-current-change="dialogCurrentChange">
</dialog-tables>
</div>
</el-dialog>
</div>
</template>
<script>
import skeleton from '../component/skeleton';
import mixin from '@/views/detail/party-a/mixins/mixin';
import { getSupplierCooperationRecordListApi } from "@/api/internalCooperation";
import { getAllAreaApi } from "@/api/common";
import { getTreeSelectAreaList } from "@/utils";
import DialogHeadFormNew from "../component/HeadFormNew";
import DialogTables from "../component/Tables";
export default {
name: "cooperationRecord",
mixins: [mixin],
components: {
skeleton,
DialogHeadFormNew,
DialogTables
},
props: ['companyId'],
data() {
return {
queryParams: {
customerId: this.companyId,
pageNum: 1,
pageSize: 10,
},
forData: [
{ label: '工程名称', prop: 'projectName', width: '244', slot: true, showOverflowTooltip: true },
{ label: '合作区域', prop: 'areaName', width: '102' },
{ label: '省份', prop: 'provinceName', width: '102' },
{ label: '城市', prop: 'cityName', width: '102' },
{ label: '项目联系人', prop: 'projectManagerName', width: '86' },
{ label: '联系电话', prop: 'projectManagerPhone', width: '102' },
{ label: '资源平台类型', prop: 'projectType2', width: '98' },
{ label: '合同签订日期', prop: 'signDate', width: '149' },
{ label: '合同总价', prop: 'subcontractValue', width: '79' },
{ label: '结算总价', prop: 'settleValue', width: '79' },
{ label: '分包内容', prop: 'jobScope', width: '126' },
{ label: '工程类型', prop: 'projectType2', width: '78' },
{ label: '队伍完工评价', prop: '', minWidth: '98' },
{ label: '合同完工评价', prop: '', minWidth: '98' },
{ label: '评价有效性', prop: '', minWidth: '86' },
{ label: '无效原因', prop: '', minWidth: '74' },
],
formData: [
{
type: 7, fieldName: 'businessTypes', value: '', placeholder: '项目地区', uid: this.getUid(), options: [], props: {
multiple: true,
value: "value",
label: "value",
// checkStrictly: true
}
},
{ type: 4, fieldName: 'causeAction', value: '', placeholder: '招标品类', options: [], uid: this.getUid() },
{ type: 4, fieldName: 'causeAction', value: '', placeholder: '采购类型', options: [], uid: this.getUid() },
{ type: 3, fieldName: 'advisoryBodyName', value: '', placeholder: '请输入', uid: this.getUid() },
],
//列表
tableLoading: false,
tableData: [],
tableDataTotal: 0,
isSkeleton: true,
areaList: [],
// 合作记录弹窗
cooperationRecordDialog: true,
dialogTitle: "",
dialogQueryParams: {
},
dialogFormData: [
{ type: 4, fieldName: 'causeAction', value: '', placeholder: '合作项目类型', options: [], uid: this.getUid() },
{ type: 6, fieldName: 'causeAction', value: '', placeholder: '合作金额', options: [], uid: this.getUid() },
{ type: 4, fieldName: 'causeAction', value: '', placeholder: '数据来源', options: [], uid: this.getUid() },
{ type: 3, fieldName: 'advisoryBodyName', value: '', placeholder: '请输入', uid: this.getUid() },
],
dialogIsSkeleton: true,
dialogtableDataTotal: 0,
dialogTableData: [],
};
},
//可访问data属性
created() {
this.initDetail();
},
//计算集
computed: {
},
//方法集
methods: {
async initDetail() {
try {
await this.handleQuery();
await this.getAllArea();
} catch (error) {
}
},
async getAllArea() {
try {
const area = await getAllAreaApi();
if (area.code == 200) {
this.areaList = area.data;
this.$set(this.formData[0], "options", this.areaList);
console.log();
}
} catch (error) {
}
},
async handleQuery(params) {
try {
let data = params ? params : this.queryParams;
this.isSkeleton = true;
const res = await getSupplierCooperationRecordListApi(data);
this.tableData = res.rows ? res.rows : [];
this.tableDataTotal = res.total ? res.total : 0;
} catch (error) {
console.log(error);
} finally {
this.isSkeleton = false;
}
},
async handleSearch() {
try {
const areaSearchList = this.$refs["searchFormNew"].$refs["cascader"][0].getCheckedNodes();
if (areaSearchList?.length) {
const valueList = areaSearchList.map(item => item.value);
const result = getTreeSelectAreaList(valueList, this.areaList, "value");
console.log(result);
}
} catch (error) {
}
},
handleExcel() {
},
dialogClose() {
},
dialogHandleSearch() {
},
dialogCurrentChange() {
}
},
}
</script>
<style lang="scss" scoped>
.cooperation-record {
background: #ffffff;
border-radius: 4px;
padding: 16px;
input {
border: 1px solid #efefef;
}
::v-deep .el-form-item {
margin-right: 8px !important;
}
.query-box {
margin: 10px 0 20px;
}
.cell-span {
display: inline-block;
position: relative;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 4;
cursor: pointer;
> span {
display: inline-block;
width: 37px;
position: absolute;
right: 0;
bottom: 0;
background-color: #fff;
z-index: 1;
}
}
@import "@/assets/styles/search-common.scss";
::v-deep .cooperation-record-dialog-container {
.cooperation-record-dialog {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
border-radius: 4px;
margin: 0px !important;
.el-dialog__header {
padding: 20px;
height: 56px;
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
border-bottom: 1px solid #eeeeee;
.el-dialog__title {
color: #232323;
font-weight: bold;
line-height: 16px;
}
.el-dialog__headerbtn {
position: static;
width: 16px;
height: 16px;
}
}
.el-dialog__body {
padding: 24px 20px;
box-sizing: border-box;
.cooperation-record-dialog-innner {
width: 100%;
height: 100%;
}
}
}
}
}
</style>
......@@ -72,7 +72,7 @@ export default {
let res = await projectTenderDataGroup({ cid: this.companyId, type: this.activeIndex });
if (res.code == 200 && res.data) {
this.isSkeleton = false;
let data = res.data, totalVal = data.map(item => item.value).reduce((prev, cur) => {prev + cur},0);
let data = res.data, totalVal = data.map(item => item.value).reduce((prev, cur) => prev + cur, 0);
this.viewData = data.map(item => {
let it = { name: item.name, value: item.value, percent: parseFloat(Number(Number(item.value) / Number(totalVal) * 100).toFixed(2)) };
return it;
......
......@@ -13,10 +13,68 @@
<tables v-if="!isSkeleton" :indexFixed="true" :tableData="tableData" :forData="forData" :tableDataTotal="tableDataTotal"
:queryParams="queryParams" @handle-current-change="handleCurrentChange">
<!-- 冻结起止日期 -->
<template slot="freezeStartDate" slot-scope="scope">
<span v-if="scope.row.freezeStartDate || scope.row.freezeEndDate">
{{`${scope.row.freezeStartDate ? scope.row.freezeStartDate : "-"}至${scope.row.freezeEndDate ? scope.row.freezeEndDate : "-"}`}}
</span>
<span v-else>-</span>
</template>
<!-- 操作 -->
<template slot="operation-table" slot-scope="scope">
<span style="color: #0081FF;cursor: pointer;" @click="viewDetail(scope.row)">操作</span>
</template>
</tables>
<!-- 股权冻结详情 -->
<el-dialog title="股权冻结详情" :visible.sync="equityFreezingDetailDialog" width="720px" @close="dialogClose" class="equity-freezing-dialog-container"
custom-class="equity-freezing-dialog">
<div class="equity-freezing-dialog-inner">
<table>
<tr>
<td class="table-key">执行通知书文号</td>
<td colspan="3">{{detailTemp.number ? detailTemp.number : "-"}}</td>
</tr>
<tr>
<td class="table-key">执行裁定书文号</td>
<td>{{detailTemp.adjudicateNo ? detailTemp.adjudicateNo : "-"}}</td>
<td class="table-key">执行事项</td>
<td>{{detailTemp.assistItem ? detailTemp.assistItem : "-"}}</td>
</tr>
<tr>
<td class="table-key">被执行人</td>
<td>{{detailTemp.beExecutedPerson ? detailTemp.beExecutedPerson : "-"}}</td>
<td class="table-key">被执行人证件种类</td>
<td>{{detailTemp.assistIdentType ? detailTemp.assistIdentType : "-"}}</td>
</tr>
<tr>
<td class="table-key">被执行人证照号</td>
<td>{{detailTemp.assistIdentNo ? detailTemp.assistIdentNo : "-"}}</td>
<td class="table-key">冻结状态</td>
<td>{{detailTemp.status ? detailTemp.status : "-"}}</td>
</tr>
<tr>
<td class="table-key">被执行人持有股权、其他收益的数额</td>
<td>{{detailTemp.freezeAmount ? detailTemp.freezeAmount : "-"}}</td>
<td class="table-key">执行法院</td>
<td>{{detailTemp.executiveCourt ? detailTemp.executiveCourt : "-"}}</td>
</tr>
<tr>
<td class="table-key">冻结日期自</td>
<td>{{detailTemp.freezeStartDate ? detailTemp.freezeStartDate : "-"}}</td>
<td class="table-key">冻结日期至</td>
<td>{{detailTemp.freezeEndDate ? detailTemp.freezeEndDate : "-"}}</td>
</tr>
<tr>
<td class="table-key">冻结期限</td>
<td>{{detailTemp.freezeYearMonth ? detailTemp.freezeYearMonth : "-"}}</td>
<td class="table-key">公示日期</td>
<td>{{detailTemp.publicDate ? detailTemp.publicDate : "-"}}</td>
</tr>
</table>
</div>
</el-dialog>
</div>
</template>
<script>
......@@ -39,12 +97,12 @@ export default {
type: "0"
},
forData: [
{ label: '执行通知书文号', prop: 'name', width: '164' },
{ label: '被执行人', prop: 'companyName', minWidth: '146' },
{ label: '股权数额', prop: 'executionApplicant', width: '113' },
{ label: '执行法院', prop: 'court', minWidth: '146' },
{ label: '状态', prop: 'releaseDate', width: '50' },
{ label: '冻结起止日期', prop: 'source', width: '171' },
{ label: '执行通知书文号', prop: 'number', width: '164' },
{ label: '被执行人', prop: 'beExecutedPerson', minWidth: '146' },
{ label: '股权数额', prop: 'amount', width: '113' },
{ label: '执行法院', prop: 'executiveCourt', minWidth: '146' },
{ label: '状态', prop: 'status', width: '50' },
{ label: '冻结起止日期', prop: 'freezeStartDate', width: '171', slot: true },
{ label: '公式时间', prop: 'source', width: '93' },
{ label: '操作', prop: 'operation-table', width: '50', slot: true },
],
......@@ -56,8 +114,12 @@ export default {
tableData: [],
tableDataTotal: 0,
showList: [],
isSkeleton: true,
resetStatus: false
isSkeleton: false,
resetStatus: false,
// 股权冻结详情
equityFreezingDetailDialog: false,
// 详情缓存
detailTemp: {}
};
},
//可访问data属性
......@@ -84,7 +146,7 @@ export default {
},
async handleQuery(params) {
try {
let data = params ? params : this.queryParams;
let data = params ? { ...params, type: parseInt(params.type) } : { ...this.queryParams, type: parseInt(this.queryParams.type) };
this.isSkeleton = true;
const res = await getEquityFreezingApi(data);
this.tableData = res.rows ? res.rows : [];
......@@ -102,7 +164,11 @@ export default {
},
// 查看详情
viewDetail(row) {
this.detailTemp = row;
this.equityFreezingDetailDialog = true;
},
dialogClose() {
this.detailTemp = {};
}
},
}
......@@ -159,5 +225,73 @@ export default {
}
}
@import "@/assets/styles/search-common.scss";
::v-deep .equity-freezing-dialog-container {
.equity-freezing-dialog {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
border-radius: 4px;
margin: 0px !important;
.el-dialog__header {
padding: 20px;
height: 56px;
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
border-bottom: 1px solid #eeeeee;
.el-dialog__title {
color: #232323;
font-weight: bold;
line-height: 16px;
}
.el-dialog__headerbtn {
position: static;
width: 16px;
height: 16px;
}
}
.el-dialog__body {
padding: 24px 20px;
box-sizing: border-box;
.equity-freezing-dialog-inner {
width: 100%;
height: 100%;
& > table {
width: 100%;
border-spacing: 0;
border-collapse: collapse;
&,
th,
td {
border: 1px solid #e6eaf1;
box-sizing: border-box;
}
td {
padding: 9px 12px;
line-height: 22px;
color: #232323;
font-size: 12px;
}
.table-key {
width: 140px;
background: #f0f3fa;
color: rgba(35, 35, 35, 0.8);
}
}
}
}
}
}
}
</style>
......@@ -45,7 +45,6 @@ export default {
tableLoading: false,
tableData: [],
tableDataTotal: 0,
showList: [],
isSkeleton: true
};
},
......
......@@ -3,7 +3,7 @@
<div class="app-container EnterpriseMonitoring">
<div class="header">
<div class="search">
<div class="label">监控维度</div>
<div class="label">风险动态时间</div>
<div class="checkbox">
<el-radio-group v-model="radio" @change="radioBtn">
<el-radio v-for="item in radioList" :label="item.type">{{item.label}}</el-radio>
......@@ -53,11 +53,11 @@
<span class="color5 span">正向 {{scope.row.positiveCount}}</span>
</template>
</el-table-column>
<el-table-column label="监控时间" width="240" align="left" prop="createTime"></el-table-column>
<el-table-column label="监控时间" width="200" align="left" prop="createTime"></el-table-column>
<el-table-column
label="操作"
align="left"
width="180"
width="160"
class-name="small-padding fixed-width"
fixed="right"
>
......@@ -79,14 +79,14 @@
</div>
</div>
<el-dialog :visible.sync="jkVisible" custom-class='dialog-claim' title="提示" width="480px" >
<el-dialog :visible.sync="jkVisible" custom-class='dialog-claim' title="提示" width="480px" :close-on-click-modal="false">
<div class="dialog-content"><i class="el-icon-warning"></i>取消后将错过企业最新动态</div>
<div slot="footer" class="dialog-footer">
<el-button @click="jkVisible===false">我再想想</el-button>
<el-button @click="jkVisible=false">我再想想</el-button>
<el-button type="primary" @click="handleConfirm">确定取消</el-button>
</div>
</el-dialog>
<el-dialog :visible.sync="qyVisible" custom-class='dialog-claim dialogAdd' title="添加监控企业" width="480px" >
<el-dialog :visible.sync="qyVisible" custom-class='dialog-claim dialogAdd' title="添加监控企业" width="480px" :close-on-click-modal="false">
<div class="add-content">
<div class="enterprise">
<div class="label">企业名称</div>
......@@ -115,7 +115,7 @@
<el-button type="primary" @click="handleAdd">确定</el-button>
</div>
</el-dialog>
<el-dialog :visible.sync="pldrVisible" custom-class='dialog-claim' title="批量导入监控企业" width="480px" >
<el-dialog :visible.sync="pldrVisible" custom-class='dialog-claim' title="批量导入监控企业" width="480px" :close-on-click-modal="false">
<div class="upload-content">
<el-upload
class="upload-demo"
......@@ -137,7 +137,7 @@
</div>
<div slot="footer" class="dialog-footer">
<el-button class="download" icon="el-icon-download">下载模版</el-button>
<el-button>取消</el-button>
<el-button @click="handleUploadCancel1">取消</el-button>
<el-button type="primary" @click="submitUpload">确定</el-button>
</div>
</el-dialog>
......@@ -244,13 +244,15 @@
}
companyAdd(data).then(res => {
this.qyVisible=false;
this.$modal.success("新增成功");
this.$message.success("新增成功");
this.querySubmit()
})
},
radioBtn(val){
let endTime = new Date()
this.queryParams.pageNum=1
this.queryParams.pageSize=10
switch (val) {
case 1:
this.queryParams.condition.beginTime=this.formatDate(endTime)
......@@ -322,7 +324,7 @@
handleConfirm(){
companyCancel({cid:[this.companyId]}).then(res => {
this.jkVisible=false;
this.$modal.success("取消成功");
this.$message.success("取消成功");
this.querySubmit()
})
},
......@@ -361,6 +363,10 @@
else
this.$message.error({message:res.msg,showClose:true})
},
handleUploadCancel1(){
this.fileList=[]
this.pldrVisible=false;
},
submitUpload() {
this.$refs.upload.submit();
},
......@@ -389,6 +395,9 @@
align-items: flex-start;
padding-left: 12px;
position: relative;
::v-deep .el-radio{
margin-right:16px;
}
::v-deep .el-date-editor{
position: absolute;
left: 602px;
......
......@@ -80,7 +80,7 @@
</div>
<div class="search">
<span class="btn1" @click="handleAdd">保存</span>
<span class="btn2">重置</span>
<span class="btn2" @click="handleResetting">重置</span>
</div>
</div>
......@@ -126,19 +126,21 @@
}
rulesDetail({}).then(res => {
console.log(res)
let dimension=res.data.dimension.split(',');
this.queryParams={
pushFrequency:res.data.pushFrequency.toString(),
receiveMode:res.data.receiveMode.toString(),
phones:res.data.phones
}
this.startTime =res.data.timePeriodStart
this.endTime = res.data.timePeriodEnd
for(let item in dimension){
if (this.arr.indexOf(dimension[item]) == -1) {
this.gsfx.push(dimension[item])
} else {
this.sffx.push(dimension[item])
if(res.data){
let dimension=res.data.dimension.split(',');
this.queryParams={
pushFrequency:res.data.pushFrequency.toString(),
receiveMode:res.data.receiveMode.toString(),
phones:res.data.phones
}
this.startTime =res.data.timePeriodStart
this.endTime = res.data.timePeriodEnd
for(let item in dimension){
if (this.arr.indexOf(dimension[item]) == -1) {
this.gsfx.push(dimension[item])
} else {
this.sffx.push(dimension[item])
}
}
}
})
......@@ -201,6 +203,17 @@
this.$modal.success(res.msg);
})
},
handleResetting(){
this.sffx=[];
this.gsfx=[];
this.startTime =''
this.endTime = ''
this.queryParams={
pushFrequency:'0',
receiveMode:'0',
phones:''
}
},
changeTime(val){
console.log(val)
},
......
......@@ -3,7 +3,7 @@
<div class="app-container MonitoringDynamics">
<div class="search">
<div class="search-item" style="line-height: 32px;margin-top: 0;padding-bottom: 8px;">
<div class="label">监控维度</div>
<div class="label">监控动态</div>
<el-input class="name" placeholder="请输入监控对象名称" v-model="companyName">
<el-button slot="append" @click="handleKeyword()">搜索</el-button>
</el-input>
......@@ -100,7 +100,7 @@
fixed="right"
>
<template slot-scope="scope">
<span style="cursor: pointer;" @click="handleDetail">查看详情</span>
<span style="cursor: pointer;" @click="handleDetail(scope.row)">查看详情</span>
</template>
</el-table-column>
</el-table>
......@@ -116,7 +116,7 @@
<el-pagination background :current-page="queryParams.pageNum" :page-size="queryParams.pageSize" :total="tableDataTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div>
</div>
<el-dialog :visible.sync="dialogVisible" custom-class='dialog-claim' :title="title" width="720px" >
<el-dialog :visible.sync="dialogVisible" custom-class='dialog-claim' :title="title" width="720px" :close-on-click-modal="false">
<div class="dialog-content">
<template v-if="title=='开庭公告详情'">
<info-table class="info-tab" :list="defaultList0" :obj="detail" :labelWidth="labelWidth">
......@@ -339,17 +339,34 @@
methods: {
async querySubmit() {
let endTime = new Date()
let params={
pageNum:this.queryParams.pageNum,
pageSize:this.queryParams.pageSize,
condition:this.queryParams.condition
}
if(this.radio === 1){
this.queryParams.condition.beginTime=this.formatDate(endTime)
this.queryParams.condition.endTime=this.formatDate(endTime)
params.condition.beginTime=this.formatDate(endTime)
params.condition.endTime=this.formatDate(endTime)
}
if(this.companyName){
this.queryParams.condition.companyName=this.companyName
params.condition.companyName=this.companyName
}
if(this.fxjbType.length > 0){
this.queryParams.condition.fxjbType=this.riskLevel.join()
params.condition.fxjbType=this.fxjbType.join()
}
if(this.sffx.length > 0 && this.gsfx.length > 0){
params.riskType='司法风险,工商风险'
params.dimension=this.sffx.join()+','+this.gsfx.join()
}
if(this.sffx.length > 0 && this.gsfx.length === 0){
params.riskType='司法风险'
params.dimension=this.sffx.join()
}
if(this.sffx.length === 0 && this.gsfx.length > 0){
params.riskType='工商风险'
params.dimension=this.gsfx.join()
}
dynamicPage(this.queryParams).then(res => {
dynamicPage(params).then(res => {
this.isSkeleton = false;
this.tableData=res.rows;
this.tableDataTotal=res.total;
......@@ -368,8 +385,8 @@
console.log(this.tableData)
})
},
getDetail() {
companyDetail({dimensionName:'新增法院公告',sourceId:'0001c8e8-183f-48b5-a8ce-575b5c214b1a_65250c621707e177f7983cbf_'}).then(res => {
getDetail(name,id) {
companyDetail({dimensionName:name,sourceId:id}).then(res => {
console.log(res)
this.detail=res.data;
})
......@@ -380,6 +397,9 @@
} else {
this.sffx.splice(this.sffx.indexOf(val.dimensionName), 1)
}
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
changeGsfx(val) {
if (this.gsfx.indexOf(val.dimensionName) == -1) {
......@@ -387,10 +407,15 @@
} else {
this.gsfx.splice(this.gsfx.indexOf(val.dimensionName), 1)
}
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
checkFxjbBtn(val) {
this.fxjbType = [];
this.checkFx = true;
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
checkFxjb1Btn(val){
......@@ -400,17 +425,50 @@
this.checkFx = true;
this.fxjbType = [];
}
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
handleDetail(){
this.dialogVisible=true;
this.getDetail()
handleDetail(item){
switch (item.dimensionName) {
case '新增开庭公告':
this.title='开庭公告详情'
this.dialogVisible=true;
break;
case '新增法院公告':
this.title='法院公告详情'
this.dialogVisible=true;
break;
case '新增裁判文书':
this.title='裁判文书详情'
this.dialogVisible=true;
break;
case '新增经营异常':
this.title='经营异常详情'
this.dialogVisible=true;
break;
case '新增失信被执行人':
this.title='失信被执行人详情'
this.dialogVisible=true;
break;
case '新增股权冻结':
this.title='股权冻结详情'
this.dialogVisible=true;
break;
default:
break;
}
this.getDetail(item.dimensionName,item.sourceId)
},
handleKeyword(){
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
radioBtn(val){
let endTime = new Date()
this.queryParams.pageNum=1
this.queryParams.pageSize=10
switch (val) {
case 1:
this.queryParams.condition.beginTime=this.formatDate(endTime)
......@@ -465,6 +523,8 @@
this.queryParams.condition.beginTime = value[0]
this.queryParams.condition.endTime = value[1]
}
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
// 时间格式化
......@@ -607,6 +667,9 @@
font-size: 14px;
color: rgba(35,35,35,0.8);
}
.color_text {
color: #0081ff;
}
::v-deep .name{
width: 405px;
height: 32px;
......
......@@ -96,7 +96,9 @@
})
},
handleClick() {
this.queryParams.condition.reportType=Number(this.activeName)
this.queryParams.condition.reportType=Number(this.activeName);
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
}
}
......
......@@ -123,7 +123,7 @@
<el-pagination background :current-page="queryParams.pageNum" :page-size="queryParams.pageSize" :total="tableDataTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div>
</div>
<el-dialog :visible.sync="dialogVisible" custom-class='dialog-claim' :title="title" width="720px" >
<el-dialog :visible.sync="dialogVisible" custom-class='dialog-claim' :title="title" width="720px" :close-on-click-modal="false">
<div class="dialog-content">
<template v-if="title=='开庭公告详情'">
<info-table class="info-tab" :list="defaultList0" :obj="detail" :labelWidth="labelWidth"></info-table>
......@@ -163,9 +163,13 @@
return {
changeTime,
isSkeleton:true,
radio:0,
radio:null,
date:'',
radioList:[
{
type:null,
label:'全部'
},
{
type:1,
label:'今天'
......@@ -319,6 +323,9 @@
} else {
this.sffx.splice(this.sffx.indexOf(val.dimensionName), 1)
}
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
changeGsfx(val) {
if (this.gsfx.indexOf(val.dimensionName) == -1) {
......@@ -326,20 +333,40 @@
} else {
this.gsfx.splice(this.gsfx.indexOf(val.dimensionName), 1)
}
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
async querySubmit() {
let endTime = new Date()
let params={
pageNum:this.queryParams.pageNum,
pageSize:this.queryParams.pageSize,
condition:this.queryParams.condition
}
if(this.radio === 1){
this.queryParams.condition.beginTime=this.formatDate(endTime)
this.queryParams.condition.endTime=this.formatDate(endTime)
params.condition.beginTime=this.formatDate(endTime)
params.condition.endTime=this.formatDate(endTime)
}
if(this.companyName){
this.queryParams.condition.companyName=this.companyName
params.condition.companyName=this.companyName
}
if(this.fxjbType.length > 0){
this.queryParams.condition.fxjbType=this.riskLevel.join()
params.condition.fxjbType=this.fxjbType.join()
}
dynamicPage(this.queryParams).then(res => {
if(this.sffx.length > 0 && this.gsfx.length > 0){
params.riskType='司法风险,工商风险'
params.dimension=this.sffx.join()+','+this.gsfx.join()
}
if(this.sffx.length > 0 && this.gsfx.length === 0){
params.riskType='司法风险'
params.dimension=this.sffx.join()
}
if(this.sffx.length === 0 && this.gsfx.length > 0){
params.riskType='工商风险'
params.dimension=this.gsfx.join()
}
dynamicPage(params).then(res => {
this.isSkeleton = false;
this.object=res.object;
this.tableData=res.rows;
......@@ -358,8 +385,8 @@
})
})
},
getDetail() {
companyDetail({dimensionName:'新增法院公告',sourceId:'0001c8e8-183f-48b5-a8ce-575b5c214b1a_65250c621707e177f7983cbf_'}).then(res => {
getDetail(name,id) {
companyDetail({dimensionName:name,sourceId:id}).then(res => {
console.log(res)
this.detail=res.data;
})
......@@ -367,9 +394,13 @@
checkFxjbBtn(val) {
this.fxjbType = [];
this.checkFx = true;
this.queryParams.pageNum=1
this.queryParams.pageSize=10
this.querySubmit()
},
checkFxjb1Btn(val){
this.queryParams.pageNum=1
this.queryParams.pageSize=10
if (val.length > 0) {
this.checkFx = false;
} else if (val.length == 0) {
......@@ -378,8 +409,36 @@
}
this.querySubmit()
},
handleDetail(){
this.dialogVisible=true;
handleDetail(item){
switch (item.dimensionName) {
case '新增开庭公告':
this.title='开庭公告详情'
this.dialogVisible=true;
break;
case '新增法院公告':
this.title='法院公告详情'
this.dialogVisible=true;
break;
case '新增裁判文书':
this.title='裁判文书详情'
this.dialogVisible=true;
break;
case '新增经营异常':
this.title='经营异常详情'
this.dialogVisible=true;
break;
case '新增失信被执行人':
this.title='失信被执行人详情'
this.dialogVisible=true;
break;
case '新增股权冻结':
this.title='股权冻结详情'
this.dialogVisible=true;
break;
default:
break;
}
this.getDetail(item.dimensionName,item.sourceId)
},
// 重置页数
handleSizeChange(val) {
......@@ -558,6 +617,9 @@
font-size: 14px;
color: rgba(35,35,35,0.8);
}
.color_text {
color: #0081ff;
}
.main-right {
width: calc(100% - 112px);
.select-popper {
......
......@@ -7,7 +7,7 @@
<el-tab-pane label="历史批量查询结果" name="third"></el-tab-pane>
</el-tabs>
</div>
<SearchAptitude v-if="activeName === 'first'"></SearchAptitude>
<SearchAptitude @changeActiveName="activeName = 'third'" v-if="activeName === 'first'"></SearchAptitude>
<AptitudeStandard v-if="activeName === 'second'"></AptitudeStandard>
<SearchResult v-if="activeName === 'third'"></SearchResult>
......
<template>
<div>
<div class="apt_stan_header">
<span v-for="(item,index) in list" class="apt_stan_header_span" :class="activeIndex==index?'active_span':''" :key="index" @click="activeIndex=index">{{item}}</span>
<span v-for="(item,index) in list" class="apt_stan_header_span" :class="activeIndex==index?'active_span':''" :key="index" @click="changeActiveIndex(index)">{{item.name}}</span>
</div>
<div class="apt_stan_content">
<div class="apt_stan_content_header">
<el-select v-model="value" placeholder="请选择">
<el-select v-model="value" value-key="id" @change="selectChange" placeholder="请选择">
<el-option
v-for="item in list[activeIndex].list"
:key="item.id"
:label="item.name"
:value="item">
</el-option>
</el-select>
<el-select v-model="value1" @change="selectChange1" v-if="options.length>0" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
:key="item.name"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
<div style="padding:16px;">
<el-table :data="tableData" :header-cell-style="{ background:'#f0f3fa',color: 'rgba(35,35,35,0.8)'}" v-horizontal-scroll="'hover'"
<el-table :data="info.list" :span-method="objectSpanMethod" :header-cell-style="{ background:'#f0f3fa',color: 'rgba(35,35,35,0.8)'}" v-horizontal-scroll="'hover'"
class="table-item1 fixed-table" border highlight-current-row>
<el-table-column label="资质名称" fixed >
<template slot-scope="scope">
{{scope.row.province}}
{{scope.row.name}}
</template>
</el-table-column>
<el-table-column label="等级" width="274">
<template slot-scope="scope">
{{scope.row.biddingCount||"--"}}
{{scope.row.level||"--"}}
</template>
</el-table-column>
<el-table-column label="经营范围" >
<template slot-scope="scope">
{{scope.row.landInfoCount||"--"}}
{{scope.row.contractScope||"--"}}
</template>
</el-table-column>
</el-table>
<div class="apt_stan_content_text_box">·建筑工程是指各类结构形式的民用建筑工程、工业建筑工程、构筑物工程以及相配套的道路、通信、管网管线等设施工程。工程内容包括地基与基础、主体结构、建筑屋面、装修装饰、建筑幕墙、附建人防工程以及给水排水及供暖、通风与空调、电气、消防、智能化、防雷等配套工程;</div>
<div class="apt_stan_content_text_box" v-html="info.remark||'--'"></div>
</div>
</div>
......@@ -44,33 +52,75 @@
</template>
<script>
import list from "@/assets/json/certs.json"
import {standard} from '@/api/supplier/assistant.js';
export default {
data(){
return{
tableData:[],
list,
activeIndex:0,
list:['建筑业企业资质','工程监理','工程设计','工程勘察','工程造价咨询'],
options: [
{
value: '选项1',
label: '黄金糕'
}, {
value: '选项2',
label: '双皮奶'
}, {
value: '选项3',
label: '蚵仔煎'
}, {
value: '选项4',
label: '龙须面'
}, {
value: '选项5',
label: '北京烤鸭'
}
],
value: ''
options: [],
value: '',
value1: '',
info:"",
}
},
methods:{
flitterData(arr) {
let spanOneArr = [];
let concatOne = 0;
arr.forEach((item, index) => {
if (index === 0) {
spanOneArr.push(1);
} else {
if (item.name === arr[index - 1].name) {
spanOneArr[concatOne] += 1;
spanOneArr.push(0);
} else {
spanOneArr.push(1);
concatOne = index;
}
}
});
return {
one: spanOneArr,
};
},
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
const _row = this.flitterData(this.info.list).one[rowIndex];
const _col = _row > 0 ? 1 : 0;
return {
rowspan: _row,
colspan: _col,
};
}
},
selectChange(){
if(this.value.list&&this.value.list.length>0){
this.options = this.value.list;
this.value1 = ""
}else{
this.options = []
standard({id:this.value.id}).then(res=>{
this.info = res.data
})
}
},
selectChange1(){
standard({id:this.value1}).then(res=>{
this.info = res.data
})
},
changeActiveIndex(index){
this.activeIndex=index;
this.value = '';
this.options = []
},
}
}
</script>
......
<template>
<el-dialog title="批量查资质" custom-class="batch_import_dialog" :visible.sync="visible">
<div class="upload" v-if="addfile==false">
<div class="upload" >
<div class="up_title">导入Excel文件,高效查询或导出企业信息;查询成功后可使用筛选项二次筛选</div>
<div>
<div class="step_box" v-for="(item,index) in list" :key="index">
......@@ -34,28 +34,14 @@
<div class="btn btn_default fr" @click="importCancel">取消</div>
</div>
</div>
<div class="success" v-if="addfile==true">
<div v-if="addsuccess==false">
<img class="img" src="@/assets/images/project/clock.png">
<div class="p1">查询客户中...</div>
<div class="p2">请耐心等待,过程大概30秒</div>
</div>
<div v-if="addsuccess == true">
<div class="p3">
<img src="@/assets/images/project/success.png">查询成功
</div>
<div class="p2">{{messages}}</div>
<div class="btns">
<div class="btn btn_primary h32" @click="getmsg">查看</div>
</div>
</div>
</div>
</el-dialog>
</template>
<script>
import { getToken } from "@/utils/auth";
import "@/assets/styles/project.scss"
import {importTemplate} from '@/api/supplier/assistant.js';
import {importData} from '@/api/custom/custom'
export default {
name: 'batchImport',
......@@ -67,7 +53,6 @@
list:['下载模版','按要求在模板内填写企业全称名录','上传文件','查询结果'],
visible:false,
isUpload:false,//有上传的文件
addfile:false,//已上传文件
addsuccess:false,//已成功加入数据
//批量导入
action:"",
......@@ -76,19 +61,11 @@
Authorization: "Bearer " + getToken(),
},
downloadhref:'',//样例地址
successCount:0,//成功条数
messages:'',
}
},
created(){
if(this.importtype == 'project'){//项目管理
this.downloadhref = '/file/projectTemplate.xlsx'
this.action = process.env.VUE_APP_BASE_API + '/business/info/upload'
}
if(this.importtype == 'custom'){//客户管理
this.downloadhref = '/file/Template.xlsx'
this.action = process.env.VUE_APP_BASE_API + "/customer/importData"
}
this.downloadhref = importTemplate
this.action = process.env.VUE_APP_BASE_API + '/export/aptitude/file'
},
methods:{
getmsg(){
......@@ -122,17 +99,10 @@
},
onSuccess(res, file, fileList) {
if (res.code == 200) {
this.successCount = res.successCount
if(this.importtype == 'project'){//项目管理
this.messages = res.msg
}
if(this.importtype == 'custom'){//客户管理
let num = res.data?res.data.length:0
let str = '成功导入客户条数'+res.successCount+',客户去重条数'+ num
this.messages = str
}
this.addsuccess = true
this.addsuccess = true;
this.$emit("loadingFn",true);
this.$refs["upload"].clearFiles();
this.isUpload = false;
}else {
this.importCancel()
this.$message.error({ message: res.msg, showClose: true })
......@@ -140,27 +110,29 @@
},
downloadClick() {
let a = document.createElement("a");
a.setAttribute("href", this.downloadhref);
a.setAttribute("download", "批量导入模版.xlsx");
document.body.appendChild(a);
a.click();
a.remove();
importTemplate().then(res=>{
const link = document.createElement('a')
const blob = new Blob([res])
link.href = window.URL.createObjectURL(blob)
link.download = '批量导入模版.xlsx'
link.click()
})
},
// 批量导入
importConfirmClick() {
if (this.fileList.length > 0) {
this.$refs["upload"].submit();
this.addfile = true
this.visible = false;
this.$emit("loadingFn")
} else {
this.$message("请先选择文件");
}
},
importCancel(){
this.addfile = false
this.isUpload = false
this.addsuccess = false
this.fileList = []
this.isUpload = false;
this.visible = false;
this.addsuccess = false;
this.fileList = [];
this.$emit('cancels')
},
}
......
<template>
<div>
<div v-loading="loading">
<div class="content">
<div class="content_item content_item_padding0">
<div class="label">企业名称</div>
<div class="content_right item_ckquery_list">
<el-input class="ename_input" clearable placeholder="多个企业用空格隔开" v-model="ename" @input="projectNamebtn('ename',ename,'关键字:')">
<div slot="append" class="btn-search" @click="search()">搜索</div>
<el-input class="ename_input" clearable placeholder="多个企业用空格隔开" v-model="keyword" >
<div slot="append" class="btn-search" @click="search(1)">搜索</div>
</el-input>
</div>
</div>
......@@ -34,7 +34,7 @@
</div>
</div>
</div>
<div class="content_item" style="margin-left:68px;">
<div class="content_item" v-if="aptitudeDtoList.length>1" style="margin-left:68px;">
<span v-for=" (kitme,k) in queryTypelist" :key="k">
<el-radio v-model="queryType" :label="kitme.key">
{{kitme.value}}
......@@ -43,12 +43,9 @@
</div>
<div class="content_item content_item1">
<div class="search-new">
<span @click="search()">查询</span>
<span style="color:#5B5B5B" @click="reset()">重置</span>
<span @click="$refs.batchImport.visible = true">批量查询</span>
</div>
<el-button type="primary" size="small" @click="search(1)">查询</el-button>
<el-button size="small" @click="reset()">重置</el-button>
<el-button size="small" @click="$refs.batchImport.visible = true">批量查询</el-button>
</div>
</div>
<div class="bottomlist">
......@@ -58,12 +55,12 @@
<span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}
</p>
</div>
<div class="title-right">
<!-- <div class="title-right">
<p>
<img src="@/assets/images/EXCEL.png" alt="">
<span class="excel" @click="clickDialog">导出EXCEL</span>
</p>
</div>
</div> -->
</div>
<div class="bd"></div>
<div class="table-item-jf table-item-jf1" v-if="tableData.length==0&& !isSkeleton">
......@@ -76,50 +73,52 @@
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<div class=" table-item-jf table-item " >
<div class="title_box">
<img src="@/assets/images/enterprise.png" >
<span class="name_box">{{ item.name }}</span>
<span class="float_r">符合条件资质({{ item.total }}<span v-if="item.total>5" class="show_more" @click="showClick(item)">查看所有 ></span></span></span>
<img :src="item.logoUrl?item.logoUrl:require('@/assets/images/enterprise.png')" >
<router-link v-if="item.jskEid" :to="`/enterprise/${encodeStr(item.jskEid)}`" tag="a" class="name_box" v-html="item.ename"></router-link>
<span v-else class="name_box" v-html="item.ename" ></span>
<span class="float_r">符合条件资质({{ item.size }}<span v-if="item.size>5" class="show_more" @click="showClick(item)">查看所有 ></span></span>
</div>
<el-table :data="item.list" :header-cell-style="{ background:'#f0f3fa',color: 'rgba(35,35,35,0.8)'}" v-horizontal-scroll="'hover'"
<el-table :data="item.aptitudeListude" :header-cell-style="{ background:'#f0f3fa',color: 'rgba(35,35,35,0.8)'}" v-horizontal-scroll="'hover'"
class="table-item1 fixed-table" border highlight-current-row>
<el-table-column label="证书编号" width="119">
<el-table-column label="证书编号" fixed width="119">
<template slot-scope="scope">
{{scope.row.supplierCount||"--"}}
{{scope.row.serial||"--"}}
</template>
</el-table-column>
<el-table-column label="资质名称" width="273">
<el-table-column label="资质名称" fixed width="273">
<template slot-scope="scope">
{{scope.row.biddingCount||"--"}}
{{scope.row.name||"--"}}
</template>
</el-table-column>
<el-table-column label="承包工程范围" width="415">
<template slot-scope="scope">
{{scope.row.landInfoCount||"--"}}
{{scope.row.contractScope||"--"}}
</template>
</el-table-column>
<el-table-column label="发证日期" width="119">
<template slot-scope="scope">
{{scope.row.bratingSubjectLevel||"--"}}
{{scope.row.issuTime||"--"}}
</template>
</el-table-column>
<el-table-column label="有效期至" width="119">
<template slot-scope="scope">
{{scope.row.bondBalance||"--"}}
{{scope.row.validate||"--"}}
</template>
</el-table-column>
<el-table-column label="发证机关" width="204">
<template slot-scope="scope">
{{scope.row.bondBalance1||"--"}}
{{scope.row.organ||"--"}}
</template>
</el-table-column>
<el-table-column label="经营范围" width="415">
<template slot-scope="scope">
<span class="line_2"> {{scope.row.bondBalance2||"--"}}</span>
<el-tooltip class="item" effect="light" :content="scope.row.businessScope" placement="bottom">
<span class="line_2"> {{scope.row.businessScope||"--"}}</span>
</el-tooltip>
</template>
</el-table-column>
</el-table>
......@@ -135,73 +134,99 @@
<el-dialog title="所有符合条件资质" custom-class="show_more_dialog" :visible.sync="showMore">
<div class=" table-item-jf table-item " >
<div class="title_box">
<img src="@/assets/images/enterprise.png" >
<span class="name_box">{{ dialogData.name }}</span>
<span class="float_r">共有 <span style="color: #0081FF;">{{ dialogData.total }}</span> 个资质</span>
</div>
<img src="@/assets/images/enterprise.png" >
<span v-if="jskEid" @click="linkTo(`/enterprise/${encodeStr(jskEid)}`)" class="name_box" v-html="ename"></span>
<span v-else class="name_box" v-html="ename" ></span>
<span class="float_r">共有 <span style="color: #0081FF;">{{ dialogData.total }}</span> 个资质</span>
</div>
<el-table :data="dialogData.list" :header-cell-style="{ background:'#f0f3fa',color: 'rgba(35,35,35,0.8)'}" v-horizontal-scroll="'hover'" class="table-item1 fixed-table" border highlight-current-row>
<el-table-column label="证书编号" width="119">
<el-table-column label="证书编号" fixed width="119">
<template slot-scope="scope">
{{scope.row.supplierCount||"--"}}
{{scope.row.serial||"--"}}
</template>
</el-table-column>
<el-table-column label="资质名称" width="273">
<el-table-column label="资质名称" fixed width="273">
<template slot-scope="scope">
{{scope.row.biddingCount||"--"}}
{{scope.row.name||"--"}}
</template>
</el-table-column>
<el-table-column label="承包工程范围" width="415">
<template slot-scope="scope">
{{scope.row.landInfoCount||"--"}}
{{scope.row.contractScope||"--"}}
</template>
</el-table-column>
<el-table-column label="发证日期" width="119">
<template slot-scope="scope">
{{scope.row.bratingSubjectLevel||"--"}}
{{scope.row.issuTime||"--"}}
</template>
</el-table-column>
<el-table-column label="有效期至" width="119">
<template slot-scope="scope">
{{scope.row.bondBalance||"--"}}
{{scope.row.validate||"--"}}
</template>
</el-table-column>
<el-table-column label="发证机关" width="204">
<template slot-scope="scope">
{{scope.row.bondBalance1||"--"}}
{{scope.row.organ||"--"}}
</template>
</el-table-column>
<el-table-column label="经营范围" width="415">
<template slot-scope="scope">
<span class="line_2"> {{scope.row.bondBalance2||"--"}}</span>
<el-tooltip class="item" effect="light" :content="scope.row.businessScope" placement="bottom">
<span class="line_2"> {{scope.row.businessScope||"--"}}</span>
</el-tooltip>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination clearfix" v-show="dialogData.total>5">
<el-pagination background :current-page="pageNum1" :page-size="pageSize" @current-change="handleCurrentChange1" layout="prev, pager, next"
:total="total">
<el-pagination background :current-page="pageNum1" :page-size="pageSize1" @current-change="handleCurrentChange1" layout="prev, pager, next"
:total="dialogData.total">
</el-pagination>
</div>
</el-dialog>
<BatchImport ref="batchImport"></BatchImport>
<ExportDialog :data="exportData" v-if="exportData.dialogExportVisible" @clickEXCEL="clickEXCEL"></ExportDialog>
<BatchImport ref="batchImport" @loadingFn="loadingFn"></BatchImport>
<ExportDialog :data="exportData" v-if="exportData.dialogExportVisible" @clickEXCEL="clickEXCEL"></ExportDialog>
<el-dialog
:visible.sync="successDialog"
:show-close="false"
custom-class="search_aptittude_success_dialog"
width="384px">
<div><img src="@/assets/images/success.png" alt=""><b>查询成功</b></div>
<div class="text">返回列表可查看批量查询结果</div>
<span slot="footer" class="dialog-footer">
<el-button @click="reUpload">重新上传</el-button>
<el-button type="primary" @click="toResult">查看结果</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import "@/assets/styles/public.scss";
import api from '@/api/enterpriseData/enterpriseData.js';
import {zjyjAptitude,enterpriseAptitude} from '@/api/supplier/assistant.js';
import skeleton from '@/views/project/projectList/component/skeleton';
import ExportDialog from "@/views/component/export-dialog"
import BatchImport from "./BatchImport"
import aptitudeCode from '@/assets/json/aptitudeCode.json';
import { encodeStr } from "@/assets/js/common.js";
export default {
components: { skeleton,ExportDialog,BatchImport },
data(){
return{
encodeStr,
params:{},
successDialog:false,
loading:false,
batchImport:false,
ename: '',
jskEid:'',
aptitudeDtoList: [
{
nameStr: '',
......@@ -221,45 +246,15 @@ export default {
value: '同时具备'
},
],
queryType: 'and',
queryType: 'or',
optionss: [],
dialogData:{},
tableData: [
{
name:'中交第二航务工程局有限公司',
list:[
{
biddingCount:'工程勘察岩土工程专业(岩土工程勘察)甲级',
landInfoCount:'可承担一级以下公路,单座桥长 1000 米以下、单跨跨度 150 米以下的桥梁,长度 1000 米以下的隧道工程的施工。',
supplierCount:'B233000514',
bratingSubjectLevel:'2021-12-27',
bondBalance:'2021-12-27',
bondBalance1:'浙江省住房和城乡建设厅',
bondBalance2:'经营范围包含许可项目:建设工程设计;建设工程勘察;建设工程监理;建设工程施工;测绘服务;国土空间规划编制;水利工程建设监理(依法...',
}
],
total:10
},
{
name:'中交第二航务工程局有限公司',
list:[
{
biddingCount:'工程勘察岩土工程专业(岩土工程勘察)甲级',
landInfoCount:'可承担一级以下公路,单座桥长 1000 米以下、单跨跨度 150 米以下的桥梁,长度 1000 米以下的隧道工程的施工。',
supplierCount:'B233000514',
bratingSubjectLevel:'2021-12-27',
bondBalance:'2021-12-27',
bondBalance1:'浙江省住房和城乡建设厅',
bondBalance2:'经营范围包含许可项目:建设工程设计;建设工程勘察;建设工程监理;建设工程施工;测绘服务;国土空间规划编制;水利工程建设监理(依法...',
}
],
total:10
},
],
tableData: [],
total: 0,
pageNum: 1,
pageNum1: 1,
pageSize: 5,
pageSize1: 5,
dataEXCEL:{},
isSkeleton: false,
exportData:{
......@@ -287,6 +282,8 @@ export default {
exportEXCEL:{}
},
showMore:false,
keyword:"",
params1:{},
}
},
created(){
......@@ -301,25 +298,97 @@ export default {
}).catch(error => {
this.optionss = aptitudeCode;
});
this.search(1)
},
methods:{
projectNamebtn(){},
search(){},
linkTo(url){
this.showMore = false;
this.$router.push(url)
},
reUpload(){
this.$refs.batchImport.visible = true;
this.successDialog = false
},
toResult(){
this.successDialog = false;
this.$emit("changeActiveName")
},
loadingFn(flag){
this.loading = !this.loading
if(flag){
this.successDialog = true
}
},
search(pageNum){
if(pageNum){
this.pageNum = pageNum
}
var aptitudeDtoList = [];
var dataList = {
codeStr: [],
};
for (let i = 0; i < this.aptitudeDtoList.length; i++) {
if (this.aptitudeDtoList[i].codeStr && this.aptitudeDtoList[i].codeStr.length > 0) {
dataList.codeStr.push(this.aptitudeDtoList[i].codeStr[this.aptitudeDtoList[i].codeStr.length -
1]);
}
dataList.queryType = this.queryType;
}
dataList.codeStr = dataList.codeStr.join(',');
aptitudeDtoList.push(dataList);
let params = {
"page": {
"page": this.pageNum,
"limit": this.pageSize
}
}
if(aptitudeDtoList.length>0){
params.aptitudeQueryDto = {aptitudeDtoList:aptitudeDtoList}
}
this.params = params
params.keyword = this.keyword
zjyjAptitude(params).then(res=>{
if(res.code==200){
this.tableData = res.data.list
this.total = res.data.total
}
})
},
showClick(item){
this.pageNum1 = 1
this.showMore = true;
this.dialogData = item
let params = {aptitudeQueryDto:this.params.aptitudeQueryDto};
params.page={
"page": this.pageNum1,
"limit": this.pageSize1
}
this.ename = item.ename;
this.jskEid = item.jskEid;
params.eid=item.jskEid;
this.params1 = params
enterpriseAptitude(params).then(res=>{
if(res.code==200){
this.dialogData = res.data
}
})
},
handleCurrentChange(pageNum) {
this.pageNum = pageNum;
this.search(pageNum, this.pageSize);
this.search();
},
handleCurrentChange1(pageNum) {
this.pageNum1 = pageNum;
this.search(pageNum, this.pageSize);
this.params1.page.page = pageNum
enterpriseAptitude(this.params1).then(res=>{
if(res.code==200){
this.dialogData = res.data
}
})
},
handleSizeChange(pageSize) {
this.pageSize = pageSize;
this.search(this.pageNum, pageSize);
this.search(1);
},
reloadPage() {
this.pageFlag = false;
......@@ -328,10 +397,6 @@ export default {
});
},
optionsbtn(i) {
if (this.aptitudeDtoList.length > 1 && this.aptitudeDtoList[i].codeStr.length < 1) {
this.aptitudeDtoList.splice(i, 1);
i--;
}
this.$refs[i] && this.$refs[i][0].toggleDropDownVisible(false);
var _this = this;
//延迟500毫秒执行
......@@ -339,6 +404,7 @@ export default {
setTimeout(function () {
_this.aptitudeDtoList[i].nameStr = _this.$refs[i][0].$refs.input.$options.propsData.value;
}, 100);
console.log(_this.aptitudeDtoList)
}
},
addAptitudeDtoList(){
......@@ -351,10 +417,14 @@ export default {
if (n > 0) {
this.$message.warning("请选择资质条件后,增加资质!");
} else {
this.aptitudeDtoList.push({
nameStr: '',
codeStr: [],
});
if(this.aptitudeDtoList.length<6){
this.aptitudeDtoList.push({
nameStr: '',
codeStr: [],
});
}else{
this.$message.warning("最多可添加6组资质条!");
}
}
},
reset(){
......@@ -370,6 +440,7 @@ export default {
}).catch(error => {
this.optionss = aptitudeCode;
});
this.search(1)
},
clickDialog(){
this.exportData.dialogExportVisible=true;
......@@ -397,14 +468,49 @@ export default {
})
},
cancel(){
this.exportData.dialogExportVisible=false;
this.exportData.exportEXCEL={}
this.exportData.dialogExportVisible=false;
this.exportData.exportEXCEL={}
},
}
}
</script>
<style lang="scss" scoped>
<style lang="scss">
.el-tooltip__popper{
margin: 30px;
}
</style>
<style lang="scss" scoped>
::v-deep .search_aptittude_success_dialog{
border-radius: 4px;
.el-dialog__header{
display: none;
}
.el-dialog__body{
padding: 20px;
}
.el-dialog__footer{
padding-top: 4px;
}
img{
width: 24px;
height: 24px;
margin-right: 12px;
}
b{
color: #232323;
font-size: 16px;
}
.text{
margin-left: 36px;
}
.el-button{
border-radius: 2px;
}
.el-button--default{
color:#232323;
}
}
.content {
padding: 0px 16px;
padding-top: 16px;
......@@ -485,8 +591,8 @@ export default {
}
}
.content_item_list {
width: 280px;
::v-deep .content_item_list {
width: 405px;
height: 32px;
line-height: 32px;
}
......@@ -505,6 +611,7 @@ export default {
.item_ckquery_btn{
height: 32px;
line-height: 32px;
margin-left: 12px;
top: 1px;
border-color: #DCDFE6;
color: rgba(35, 35, 35, 0.8);
......@@ -550,7 +657,7 @@ export default {
}
.content_item1{
margin-top: 16px;
padding-top: 16px;
padding: 16px 0;
border-top: 1px solid #EEEEEE;
padding-left: 64px;
.search-new{
......@@ -663,6 +770,7 @@ export default {
.title_box{
font-size: 14px;
color: #232323;
margin-bottom: 12px;
.name_box{
font-size: 16px;
font-weight: 700;
......@@ -707,9 +815,6 @@ export default {
overflow-y: clip;
}
}
.table-item-jf1 {
border-top: 1px solid #efefef;
}
.pagination {
padding: 14px;
.el-pagination {
......
......@@ -9,41 +9,61 @@
</el-table-column>
<el-table-column label="表格名称" >
<template slot-scope="scope">
{{scope.row.biddingCount||"--"}}
{{scope.row.fileName||"--"}}
</template>
</el-table-column>
<el-table-column label="查询时间" width="189">
<template slot-scope="scope">
{{scope.row.landInfoCount||"--"}}
{{scope.row.createTime||"--"}}
</template>
</el-table-column>
<el-table-column label="操作" width="154">
<template slot-scope="scope">
{{scope.row.bondBalance||"--"}}
<a class="download_span" :href="scope.row.url" v-if="scope.row.url">下载</a>
<span v-else >--</span>
</template>
</el-table-column>
</el-table>
<el-pagination background :current-page="pageNum" @current-change="handleCurrentChange" layout="prev, pager, next"
<el-pagination background v-if="total>0" :current-page="pageNum" @current-change="handleCurrentChange" layout="prev, pager, next"
:total="total">
</el-pagination>
</div>
</template>
<script>
import {list} from '@/api/supplier/assistant.js';
export default {
data(){
return{
tableData:[],
total: 0,
pageNum: 1,
pageSize:10,
}
},
created(){
this.getList()
},
methods:{
handleCurrentChange(pageNum) {
this.pageNum = pageNum;
this.getList()
},
getList(){
let params = {
pageNum:this.pageNum,
pageSize:this.pageSize,
}
list(params).then(res=>{
if(res.code==200){
this.tableData = res.rows
this.total = res.total
}
})
},
}
}
......@@ -60,6 +80,10 @@ export default {
margin-right: -5px;
margin-top: 16px;
}
.download_span{
color: #0081FF;
cursor: pointer;
}
}
</style>
\ No newline at end of file
......@@ -21,7 +21,6 @@ import com.dsk.common.core.service.UserService;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.helper.DataBaseHelper;
import com.dsk.common.helper.LoginHelper;
import com.dsk.common.tenant.helper.TenantHelper;
import com.dsk.common.utils.PasswordUtils;
import com.dsk.common.utils.StreamUtils;
import com.dsk.common.utils.StringUtils;
......@@ -515,8 +514,11 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/
@Override
public int updateUserStatus(SysUser user) {
Set<String> rolePermission = Objects.requireNonNull(LoginHelper.getLoginUser()).getRolePermission();
//如果禁用用户
if (UserConstants.USER_DISABLE.equals(user.getStatus())) {
if (UserConstants.USER_DISABLE.equals(user.getStatus())
&& (rolePermission.contains(TenantConstants.TENANT_SUPER_ADMIN_ROLE_KEY)
|| rolePermission.contains(TenantConstants.TENANT_ADMIN_ROLE_KEY))) {
//校验企业管理员角色下是否至少有一个可用账号
checkAdminHasUsers(baseMapper.selectUserById(user.getUserId()));
}
......
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