Commit 7f8e47a7 authored by 375138141's avatar 375138141

ad

parents 0b094bd8 cee429b0
......@@ -5,6 +5,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* 启动程序
......@@ -12,6 +13,7 @@ import org.springframework.context.ConfigurableApplicationContext;
* @author dsk
*/
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableScheduling
public class DskOperateSysApplication {
public static void main(String[] args) {
// System.setProperty("spring.devtools.restart.enabled", "false");
......
......@@ -40,7 +40,7 @@ public class BusinessContactsController extends BaseController
*/
// @PreAuthorize("@ss.hasPermi('system:contacts:list')")
@GetMapping("/list")
public TableDataInfo list(BusinessContacts businessContacts)
public TableDataInfo list(@RequestBody BusinessContacts businessContacts)
{
startPage();
List<BusinessContacts> list = businessContactsService.selectBusinessContactsList(businessContacts);
......
package com.dsk.web.controller.customer;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.http.HttpException;
import com.dsk.common.annotation.Log;
import com.dsk.common.annotation.RepeatSubmit;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.domain.entity.SysRole;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.enums.BusinessType;
import com.dsk.common.utils.poi.ExcelUtil;
import com.dsk.system.domain.customer.Customer;
import com.dsk.system.domain.customer.dto.CustomerBusinessSearchDto;
import com.dsk.system.domain.customer.dto.CustomerSearchDto;
import com.dsk.system.service.ICustomerService;
import com.dsk.web.controller.search.service.BusinessOpportunityRadarService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 客户相关
......@@ -24,13 +40,15 @@ public class CustomerController extends BaseController {
@Autowired
private ICustomerService baseService;
@Autowired
private BusinessOpportunityRadarService opportunityRadarService;
/**
* 查询客户列表
*/
@PreAuthorize("@ss.hasPermi('customer:list')")
@GetMapping("/list")
public TableDataInfo selectPageList(CustomerSearchDto dto){
public TableDataInfo selectPageList(CustomerSearchDto dto) {
startPage();
return getDataTable(baseService.selectList(dto));
}
......@@ -40,7 +58,7 @@ public class CustomerController extends BaseController {
*/
@PreAuthorize("@ss.hasPermi('customer:info')")
@GetMapping("/{customerId}")
public AjaxResult info(@PathVariable("customerId") String customerId){
public AjaxResult info(@PathVariable("customerId") String customerId) {
return AjaxResult.success(baseService.info(customerId));
}
......@@ -50,7 +68,7 @@ public class CustomerController extends BaseController {
@PreAuthorize("@ss.hasPermi('customer:add')")
@PostMapping()
@RepeatSubmit
public AjaxResult add(@RequestBody Customer customer){
public AjaxResult add(@RequestBody Customer customer) {
return AjaxResult.success(baseService.add(customer));
}
......@@ -60,7 +78,7 @@ public class CustomerController extends BaseController {
@PreAuthorize("@ss.hasPermi('customer:edit')")
@PutMapping()
@RepeatSubmit
public AjaxResult edit(@RequestBody Customer customer){
public AjaxResult edit(@RequestBody Customer customer) {
return AjaxResult.success(baseService.edit(customer));
}
......@@ -68,7 +86,7 @@ public class CustomerController extends BaseController {
* 获取个人客户列表
*/
@GetMapping("/user/list")
public AjaxResult userList(){
public AjaxResult userList() {
return AjaxResult.success(baseService.selectUserList());
}
......@@ -77,9 +95,42 @@ public class CustomerController extends BaseController {
*/
// @PreAuthorize("@ss.hasPermi('customer:business:list')")
@GetMapping("/business/list")
public TableDataInfo businessList(CustomerBusinessSearchDto dto){
public TableDataInfo businessList(CustomerBusinessSearchDto dto) {
startPage();
return getDataTable(baseService.selectBusinessList(dto));
}
@Log(title = "客户数据导入", businessType = BusinessType.IMPORT)
//@PreAuthorize("@ss.hasPermi('customer:importData')")
@PostMapping("/importData")
public AjaxResult importData(@RequestPart("file") MultipartFile file) throws Exception {
List<Customer> customerList = new ExcelUtil<>(Customer.class).importExcel(file.getInputStream(), 2);
List<String> resultList = new ArrayList<>();
for (Customer customer : customerList) {
if (ObjectUtils.isEmpty(customer.getCompanyName())) {
continue;
}
try {
Map<String, Object> map = opportunityRadarService.enterpriseByName(customer.getCompanyName());
if(ObjectUtils.isEmpty(map)){
throw new HttpException("远程调用匹配接口失败!");
}
Map<String, Object> obj = BeanUtil.beanToMap(map.get("data"));
if(!ObjectUtils.isEmpty(obj)){
customer.setCompanyId(MapUtil.getInt(obj,"jskEid"));
customer.setLegalPerson(MapUtil.getStr(obj,"legalPerson"));
customer.setRegisterCapital(MapUtil.getStr(obj,"registeredCapital"));
customer.setProvinceId(MapUtil.getInt(obj,"provinceId"));
customer.setCityId(MapUtil.getInt(obj,"cityId"));
customer.setDistrictId(MapUtil.getInt(obj,"districtId"));
customer.setRegisterAddress(MapUtil.getStr(obj,"domicile"));
customer.setCreditCode(MapUtil.getStr(obj,"creditCode"));
}
baseService.add(customer);
} catch (Exception e) {
resultList.add(customer.getCompanyName().concat(":").concat(e.getMessage()));
}
}
return AjaxResult.success(resultList);
}
}
......@@ -58,4 +58,20 @@ public class BusinessOpportunityRadarController {
return opportunityRadarService.jskBidNewsPage(compose);
}
/*
* 专项债查询
*/
@RequestMapping("/bondProjectPage")
public AjaxResult bondProjectPage(@RequestBody ComposeQueryDto compose) {
return opportunityRadarService.bondProjectPage(compose);
}
/*
* 投标计划查询
*/
@RequestMapping("/jskBidPlanPage")
public AjaxResult jskBidPlanPage(@RequestBody ComposeQueryDto compose) {
return opportunityRadarService.jskBidPlanPage(compose);
}
}
......@@ -3,15 +3,13 @@ package com.dsk.web.controller.search.controller;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.ComposeQueryDto;
import com.dsk.web.controller.search.service.BusinessOpportunityRadarService;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* 模糊查企业
* 查企业
* @author Administrator
*
*/
......@@ -24,11 +22,18 @@ public class CompanySearchController {
BusinessOpportunityRadarService opportunityRadarService;
/*
* 土地交易
* 模糊查询企业名称
*/
@RequestMapping("/index")
public AjaxResult landMarketPage(@RequestBody ComposeQueryDto compose) {
return opportunityRadarService.enterprisePage(compose);
}
/*
* 完全匹配企业名称
*/
@GetMapping("/findByName/{keyword}")
public AjaxResult findByName(@PathVariable String keyword) {
return opportunityRadarService.enterpriseByName(keyword);
}
}
package com.dsk.web.controller.search.macroMarket;
import cn.hutool.core.bean.BeanUtil;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.OpRegionalEconomicDataV1Dto;
import com.dsk.system.domain.OpRegionalEconomicDataV1;
import com.dsk.system.service.EconomicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @ClassName EconomicController
......@@ -28,8 +35,84 @@ public class EconomicController {
*@Author: Dgm
*@date: 2023/5/18 10:29
*/
@GetMapping("/nationalPage")
public AjaxResult areaGroupByProvince() {
return economicService.nationalPage();
@PostMapping("/national/list")
public AjaxResult nationalList(@RequestBody OpRegionalEconomicDataV1Dto dto) {
// return economicService.nationalList(dto);
return new AjaxResult(HttpStatus.OK.value(), "", new OpRegionalEconomicDataV1());
}
/***
*@Description: 全国经济大全详情
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:29
*/
@GetMapping("/details/{id}")
public AjaxResult details(@PathVariable("id") Integer id) {
// return economicService.details(id);
return new AjaxResult(HttpStatus.OK.value(), "", new OpRegionalEconomicDataV1());
}
/***
*@Description: 地区经济-统计
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:29
*/
@PostMapping("/statistics/regional")
public AjaxResult statisticsRegional(@RequestBody OpRegionalEconomicDataV1Dto dto) {
// return economicService.regional(dto);
Map<String, Object> map = BeanUtil.beanToMap(new OpRegionalEconomicDataV1(), false, false);
// 下属辖区
map.put("subordinateJurisdiction", 38);
// 城投平台
map.put("urbanInvestmentPlatform", 365);
// 城投平台授信余额
map.put("creditBalance", 666.66);
// 城投平台营收账款
map.put("accountsReceivable", 888.88);
return new AjaxResult(HttpStatus.OK.value(), "", map);
}
/***
*@Description: 地区经济-主要指标列表
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:29
*/
@PostMapping("/regional/list")
public AjaxResult regionalList(@RequestBody OpRegionalEconomicDataV1Dto dto) {
// return economicService.regionalList(dto);
List<OpRegionalEconomicDataV1> opRegionalEconomicDataV1List= new ArrayList<>(5);
OpRegionalEconomicDataV1 dataV1 = new OpRegionalEconomicDataV1();
dataV1.setProvince("重庆");
dataV1.setYear(2022);
OpRegionalEconomicDataV1 dataV2 = new OpRegionalEconomicDataV1();
dataV2.setProvince("重庆");
dataV2.setYear(2021);
OpRegionalEconomicDataV1 dataV3 = new OpRegionalEconomicDataV1();
dataV3.setProvince("重庆");
dataV3.setYear(2020);
OpRegionalEconomicDataV1 dataV4 = new OpRegionalEconomicDataV1();
dataV4.setProvince("重庆");
dataV4.setYear(2019);
OpRegionalEconomicDataV1 dataV5 = new OpRegionalEconomicDataV1();
dataV5.setProvince("重庆");
dataV5.setYear(2018);
opRegionalEconomicDataV1List.add(dataV1);
opRegionalEconomicDataV1List.add(dataV2);
opRegionalEconomicDataV1List.add(dataV3);
opRegionalEconomicDataV1List.add(dataV4);
opRegionalEconomicDataV1List.add(dataV5);
return new AjaxResult(HttpStatus.OK.value(), "", opRegionalEconomicDataV1List);
}
}
package com.dsk.web.controller.search.macroMarket;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.ComposeQueryDto;
import com.dsk.system.service.RegionalEnterprisesService;
import org.springframework.beans.factory.annotation.Autowired;
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;
/**
* @ClassName RegionalEnterprisesController
* @Description 区域企业
* @Author Dgm
* @Date 2023/5/24 16:20
* @Version
*/
@RestController
@RequestMapping(value="/enterprises")
public class RegionalEnterprisesController {
@Autowired
private RegionalEnterprisesService regionalEnterprisesService;
@PostMapping("regional/page")
public AjaxResult page(@RequestBody ComposeQueryDto compose) {
return regionalEnterprisesService.page(compose);
}
}
package com.dsk.web.controller.search.macroMarket;
import cn.hutool.core.bean.BeanUtil;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.SpecialPurposeBondsDto;
import com.dsk.system.domain.SpecialBondInformationV1;
import com.dsk.system.domain.SpecialBondProjectsV1;
import com.dsk.system.service.SpecialPurposeBondsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @ClassName SpecialPurposeBondsController
* @Description 专项债项目
* @Author Dgm
* @Date 2023/5/18 10:09
* @Version 1.0.0
*/
@RestController
@RequestMapping(value ="/specialPurposeBonds")
public class SpecialPurposeBondsController {
@Autowired
private SpecialPurposeBondsService specialPurposeBondsService;
/***
*@Description: 专项债项目分页列表
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:29
*/
@PostMapping("/projects/page")
public AjaxResult page() {
// return specialPurposeBondsService.page();
Map<String, Object> map = BeanUtil.beanToMap(new SpecialBondProjectsV1(), false, false);
return new AjaxResult(HttpStatus.OK.value(), "", map);
}
/***
*@Description: 专项债项目详情
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:29
*/
@GetMapping("/details/{id}")
public AjaxResult details(@PathVariable("id") String id) {
return specialPurposeBondsService.details(id);
}
/***
*@Description: 专项债-项目类别统计
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:29
*/
@PostMapping("/bond/statistics")
public AjaxResult bondStatistics(@RequestBody SpecialPurposeBondsDto dto) {
// return specialPurposeBondsService.bondStatistics();
Map<String, Object> map = BeanUtil.beanToMap(new SpecialPurposeBondsDto(), false, false);
List<SpecialPurposeBondsDto> list = new ArrayList<>(4);
SpecialPurposeBondsDto one = new SpecialPurposeBondsDto();
one.setCount(3);
one.setProportion(55.55);
SpecialPurposeBondsDto two = new SpecialPurposeBondsDto();
two.setCount(8);
two.setProportion(0.12);
SpecialPurposeBondsDto three = new SpecialPurposeBondsDto();
three.setCount(1);
three.setProportion(33.33);
SpecialPurposeBondsDto four = new SpecialPurposeBondsDto();
four.setCount(5);
four.setProportion(11.11);
list.add(one);
list.add(two);
list.add(three);
list.add(four);
switch (dto.getField()) {
case "count": list = sortedCount(list, dto);
break;
case "totalInvestment": list = sortedTotalInvestment(list, dto);
break;
case "proportion": list = sortedProportion(list, dto);
break;
default:
break;
}
return new AjaxResult(HttpStatus.OK.value(), "", list);
}
/***
*@Description: 专项债分页列表
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:29
*/
@PostMapping("/bond/page")
public AjaxResult bondPage() {
// return specialPurposeBondsService.bondPage();
Map<String, Object> map = BeanUtil.beanToMap(new SpecialBondInformationV1(), false, false);
return new AjaxResult(HttpStatus.OK.value(), "", map);
}
/***
*@Description: 项目数量
*@Param:
*@return: void
*@Author: Dgm
*@date: 2023/5/25 11:26
*/
public List<SpecialPurposeBondsDto> sortedCount(List<SpecialPurposeBondsDto> list, SpecialPurposeBondsDto dto) {
if ("desc".equals(dto.getOrder())) {
list = list.stream().sorted(Comparator.comparing(SpecialPurposeBondsDto::getCount).reversed()).collect(Collectors.toList());
} else {
list = list.stream().sorted(Comparator.comparing(SpecialPurposeBondsDto::getCount)).collect(Collectors.toList());
}
return list;
}
/***
*@Description: 金额
*@Param:
*@return: void
*@Author: Dgm
*@date: 2023/5/25 11:26
*/
public List<SpecialPurposeBondsDto> sortedTotalInvestment(List<SpecialPurposeBondsDto> list, SpecialPurposeBondsDto dto) {
if ("desc".equals(dto.getOrder())) {
list = list.stream().sorted(Comparator.comparing(SpecialPurposeBondsDto::getTotalInvestment).reversed()).collect(Collectors.toList());
} else {
list = list.stream().sorted(Comparator.comparing(SpecialPurposeBondsDto::getTotalInvestment)).collect(Collectors.toList());
}
return list;
}
/***
*@Description: 比例
*@Param:
*@return: void
*@Author: Dgm
*@date: 2023/5/25 11:26
*/
public List<SpecialPurposeBondsDto> sortedProportion(List<SpecialPurposeBondsDto> list, SpecialPurposeBondsDto dto) {
if ("desc".equals(dto.getOrder())) {
list = list.stream().sorted(Comparator.comparing(SpecialPurposeBondsDto::getProportion).reversed()).collect(Collectors.toList());
} else {
list = list.stream().sorted(Comparator.comparing(SpecialPurposeBondsDto::getProportion)).collect(Collectors.toList());
}
return list;
}
}
package com.dsk.web.controller.search.macroMarket;
import cn.hutool.core.bean.BeanUtil;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.UrbanInvestmentPlatformDto;
import com.dsk.system.domain.OpUipFinancialData;
import com.dsk.system.service.UrbanInvestmentPlatformService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* @ClassName UrbanInvestmentPlatformController
* @Description 城投平台
* @Author Dgm
* @Date 2023/5/18 10:09
* @Version 1.0.0
*/
@RestController
@RequestMapping(value ="/urbanInvestment")
public class UrbanInvestmentPlatformController {
@Autowired
private UrbanInvestmentPlatformService urbanInvestmentPlatformService;
/***
*@Description: 城投平台分页列表
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:29
*/
@PostMapping("/page")
public AjaxResult page(@RequestBody UrbanInvestmentPlatformDto dto) {
// return urbanInvestmentPlatformService.page();
Map<String, Object> map = BeanUtil.beanToMap(new OpUipFinancialData(), false, false);
// 招标
map.put("biddingAnnouncement", 11);
// 供应商
map.put("supplier", 33);
// 土地
map.put("landInfo", 66);
return new AjaxResult(HttpStatus.OK.value(), "", map);
}
/***
*@Description: 城投平台详情
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:29
*/
@PostMapping("/details/{id}")
public AjaxResult details(@PathVariable("id") String id) {
return urbanInvestmentPlatformService.details(id);
}
}
......@@ -19,4 +19,10 @@ public interface BusinessOpportunityRadarService {
AjaxResult establishmentPage(ComposeQueryDto compose);
AjaxResult enterprisePage(ComposeQueryDto compose);
AjaxResult enterpriseByName(String keyword);
AjaxResult bondProjectPage(ComposeQueryDto compose);
AjaxResult jskBidPlanPage(ComposeQueryDto compose);
}
......@@ -10,6 +10,7 @@ import com.dsk.web.controller.search.service.MarketAnalysisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
......@@ -54,4 +55,24 @@ public class BusinessOpportunityRadarServiceImpl implements BusinessOpportunityR
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/index", BeanUtil.beanToMap(compose, false, false));
return BeanUtil.toBean(map, AjaxResult.class);
}
@Override
public AjaxResult enterpriseByName(String keyword){
Map<String,Object> params = new HashMap<>();
params.put("keyword",keyword);
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/findByName", params);
return BeanUtil.toBean(map, AjaxResult.class);
}
@Override
public AjaxResult bondProjectPage(ComposeQueryDto compose) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/bondProject/page", BeanUtil.beanToMap(compose, false, false));
return BeanUtil.toBean(map, AjaxResult.class);
}
@Override
public AjaxResult jskBidPlanPage(ComposeQueryDto compose) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/jskBidPlan/page", BeanUtil.beanToMap(compose, false, false));
return BeanUtil.toBean(map, AjaxResult.class);
}
}
......@@ -31,7 +31,7 @@ public class BusinessFollowRecord extends BaseEntity
/** 用户昵称 */
@Excel(name = "用户昵称")
private Integer userName;
private String nickName;
/** 拜访对象 */
@Excel(name = "拜访对象")
......@@ -64,8 +64,8 @@ public class BusinessFollowRecord extends BaseEntity
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date creatTime;
public Integer getUserName() {
return userName;
public String getNickName() {
return nickName;
}
public String getVisitPerson() {
......@@ -76,8 +76,8 @@ public class BusinessFollowRecord extends BaseEntity
return position;
}
public void setUserName(Integer userName) {
this.userName = userName;
public void setNickName(String nickName) {
this.nickName = nickName;
}
public void setVisitPerson(String visitPerson) {
......@@ -168,7 +168,7 @@ public class BusinessFollowRecord extends BaseEntity
.append("id", getId())
.append("businessId", getBusinessId())
.append("userId", getUserId())
.append("userName", getUserName())
.append("nickName", getNickName())
.append("visitPerson", getVisitPerson())
.append("position", getPosition())
.append("visitTime", getVisitTime())
......
......@@ -58,6 +58,10 @@ public class ComposeQueryDto {
JskBidCandidateDto jskBidCandidateDto;
//中标公示
JskBidWinListDto jskBidWinListDto;
//专项债项目
SpecialBondProjectDto specialBondProjectDto;
//投标计划
JskBidPlanDto jskBidPlanDto;
String achievementQueryType;
......
package com.dsk.common.dtos;
import lombok.Data;
/**
* 组合查询参数
* @author Administrator
*
*/
@Data
public class JskBidPlanDto {
String id;
String uuid;
String title;
String projectName;
String projectNumber;
//招标人
String tenderee;
String tendereeId;
String projectScale;
String province;
String city;
String area;
String domicile;
//标的物类型
String objectType;
//项目类型
String projectType;
//招标方式
String tenderWay;
//合同预估金额
Double planTenderAmount;
Double startPlanTenderAmount;
Double endPlanTenderAmount;
//资金来源
String projecetCapitalSource;
//发布时间
String issueTime;
//来源网站
String sourceName;
/**
* 修改时间
*/
String updateTime;
}
package com.dsk.common.dtos;
import lombok.Data;
import org.springframework.boot.context.event.SpringApplicationEvent;
/**
* @ClassName OpRegionalEconomicDataV1Dto
* @Description 专项债-项目类别统计
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class OpRegionalEconomicDataV1Dto {
/**
* 年份
*/
private Integer year;
/**
* 省
*/
private Integer provinceId;
/**
* 市
*/
private Integer cityId;
/**
* 区
*/
private Integer areaId;
/**
* 全国宏观经济:1 / 辖区经济:2 / 地区对比:3
*/
private Integer type;
}
package com.dsk.common.dtos;
import lombok.Data;
/**
* 组合查询参数
* @author Administrator
*
*/
@Data
public class SpecialBondProjectDto {
Long id;
String uuid;
String projectName;
String projectType;
//项目总投资
String projectTotalInvestment;
//项目资本金
String projectCapital;
//专项债金额
String specialCapital;
//项目主体
String projectEntity;
//项目主体id
Long projectEntityId;
//主管部门
String chargeDepartment;
//实施单位
String piu;
Long piuId;
String domicile;
String province;
String city;
String area;
}
package com.dsk.common.dtos;
import lombok.Data;
/**
* @ClassName SpecialPurposeBonds
* @Description 专项债-项目类别统计
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class SpecialPurposeBondsDto {
/**
* 项目类型
*/
private String projectType;
/**
* 项目个数
*/
private Integer count;
/**
* 投资金额
*/
private Double totalInvestment;
/**
* 比例(%)
*/
private Double proportion;
/**
* 排序字段
*/
private String field;
/**
* 排序 (降序desc 升序asc)
*/
private String order;
}
package com.dsk.common.dtos;
import com.dsk.common.core.domain.model.BasePage;
import lombok.Data;
/**
* @ClassName UrbanInvestmentPlatformDto
* @Description 城投平台参数对象
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class UrbanInvestmentPlatformDto extends BasePage {
/**
* 行政级别
*/
private String uipExecutiveLevel;
/**
* 城投业务类型
*/
private String uipBusinessType;
/**
* 主体评级
*/
private String bratingSubjectLevel;
/**
* 股东背景
*/
private String shareholderBg;
/**
* 股权关系
*/
private String equityRelationship;
/**
* 平台重要性
*/
private String platformImportance;
/**
* 所属开发区
*/
private String developmentZone;
/**
* 省
*/
private Integer provinceId;
/**
* 市
*/
private Integer cityId;
/**
* 区
*/
private Integer areaId;
}
......@@ -40,7 +40,7 @@
"axios": "0.24.0",
"clipboard": "2.0.8",
"core-js": "3.25.3",
"echarts": "5.4.0",
"echarts": "^5.4.0",
"element-resize-detector": "^1.2.4",
"element-ui": "2.15.12",
"file-saver": "2.0.5",
......
This source diff could not be displayed because it is too large. You can view the blob instead.
import request from '@/utils/request'
// 客户列表
export function getCustomerList(param) {
return request({
url: '/customer/list',
method: 'get',
params: param
})
}
//新增客户
export function addCustomer(param) {
return request({
url: '/customer',
method: 'POST',
data: param
})
}
import request from '@/utils/request'
// 获取客户决策链条列表
export function getList(data) {
return request({
url: '/customer/decision/chain/list',
method: 'get',
params: data
})
}
// 添加客户决策链条
export function addChain(data) {
return request({
url: '/customer/decision/chain',
method: 'post',
data:data
})
}
import request from '@/utils/request'
//根据字典类型查询字典数据信息
export function getDictType(dictType) {
return request({
url: '/system/dict/data/type/'+dictType,
method: 'get',
})
}
//模糊查询企业联想
export function getEnterprise(param) {
return request({
url: '/enterprise/index',
method: 'POST',
data: param
})
}
This source diff could not be displayed because it is too large. You can view the blob instead.
/**
* Swiper 7.2.0
* Most modern mobile touch slider and framework with hardware accelerated transitions
* https://swiperjs.com
*
* Copyright 2014-2021 Vladimir Kharlampidi
*
* Released under the MIT License
*
* Released on: October 27, 2021
*/
@font-face {
font-family: 'swiper-icons';
src: url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA');
font-weight: 400;
font-style: normal;
}
:root {
--swiper-theme-color: #007aff;
}
.swiper {
margin-left: auto;
margin-right: auto;
position: relative;
overflow: hidden;
list-style: none;
padding: 0;
/* Fix of Webkit flickering */
z-index: 1;
}
.swiper-vertical > .swiper-wrapper {
flex-direction: column;
}
.swiper-wrapper {
position: relative;
width: 100%;
height: 100%;
z-index: 1;
display: flex;
transition-property: transform;
box-sizing: content-box;
}
.swiper-android .swiper-slide,
.swiper-wrapper {
transform: translate3d(0px, 0, 0);
}
.swiper-pointer-events {
touch-action: pan-y;
}
.swiper-pointer-events.swiper-vertical {
touch-action: pan-x;
}
.swiper-slide {
flex-shrink: 0;
width: 100%;
height: 100%;
position: relative;
transition-property: transform;
}
.swiper-slide-invisible-blank {
visibility: hidden;
}
/* Auto Height */
.swiper-autoheight,
.swiper-autoheight .swiper-slide {
height: auto;
}
.swiper-autoheight .swiper-wrapper {
align-items: flex-start;
transition-property: transform, height;
}
/* 3D Effects */
.swiper-3d,
.swiper-3d.swiper-css-mode .swiper-wrapper {
perspective: 1200px;
}
.swiper-3d .swiper-wrapper,
.swiper-3d .swiper-slide,
.swiper-3d .swiper-slide-shadow,
.swiper-3d .swiper-slide-shadow-left,
.swiper-3d .swiper-slide-shadow-right,
.swiper-3d .swiper-slide-shadow-top,
.swiper-3d .swiper-slide-shadow-bottom,
.swiper-3d .swiper-cube-shadow {
transform-style: preserve-3d;
}
.swiper-3d .swiper-slide-shadow,
.swiper-3d .swiper-slide-shadow-left,
.swiper-3d .swiper-slide-shadow-right,
.swiper-3d .swiper-slide-shadow-top,
.swiper-3d .swiper-slide-shadow-bottom {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 10;
}
.swiper-3d .swiper-slide-shadow {
background: rgba(0, 0, 0, 0.15);
}
.swiper-3d .swiper-slide-shadow-left {
background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
}
.swiper-3d .swiper-slide-shadow-right {
background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
}
.swiper-3d .swiper-slide-shadow-top {
background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
}
.swiper-3d .swiper-slide-shadow-bottom {
background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
}
/* CSS Mode */
.swiper-css-mode > .swiper-wrapper {
overflow: auto;
scrollbar-width: none;
/* For Firefox */
-ms-overflow-style: none;
/* For Internet Explorer and Edge */
}
.swiper-css-mode > .swiper-wrapper::-webkit-scrollbar {
display: none;
}
.swiper-css-mode > .swiper-wrapper > .swiper-slide {
scroll-snap-align: start start;
}
.swiper-horizontal.swiper-css-mode > .swiper-wrapper {
scroll-snap-type: x mandatory;
}
.swiper-vertical.swiper-css-mode > .swiper-wrapper {
scroll-snap-type: y mandatory;
}
.swiper-centered > .swiper-wrapper::before {
content: '';
flex-shrink: 0;
order: 9999;
}
.swiper-centered.swiper-horizontal > .swiper-wrapper > .swiper-slide:first-child {
margin-inline-start: var(--swiper-centered-offset-before);
}
.swiper-centered.swiper-horizontal > .swiper-wrapper::before {
height: 100%;
min-height: 1px;
width: var(--swiper-centered-offset-after);
}
.swiper-centered.swiper-vertical > .swiper-wrapper > .swiper-slide:first-child {
margin-block-start: var(--swiper-centered-offset-before);
}
.swiper-centered.swiper-vertical > .swiper-wrapper::before {
width: 100%;
min-width: 1px;
height: var(--swiper-centered-offset-after);
}
.swiper-centered > .swiper-wrapper > .swiper-slide {
scroll-snap-align: center center;
}
.swiper-virtual.swiper-css-mode .swiper-wrapper::after {
content: '';
position: absolute;
left: 0;
top: 0;
pointer-events: none;
}
.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after {
height: 1px;
width: var(--swiper-virtual-size);
}
.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after {
width: 1px;
height: var(--swiper-virtual-size);
}
:root {
--swiper-navigation-size: 44px;
/*
--swiper-navigation-color: var(--swiper-theme-color);
*/
}
.swiper-button-prev,
.swiper-button-next {
position: absolute;
top: 50%;
width: calc(var(--swiper-navigation-size) / 44 * 27);
height: var(--swiper-navigation-size);
margin-top: calc(0px - (var(--swiper-navigation-size) / 2));
z-index: 10;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
color: var(--swiper-navigation-color, var(--swiper-theme-color));
}
.swiper-button-prev.swiper-button-disabled,
.swiper-button-next.swiper-button-disabled {
opacity: 0.35;
cursor: auto;
pointer-events: none;
}
.swiper-button-prev:after,
.swiper-button-next:after {
font-family: swiper-icons;
font-size: var(--swiper-navigation-size);
text-transform: none !important;
letter-spacing: 0;
text-transform: none;
font-variant: initial;
line-height: 1;
}
.swiper-button-prev,
.swiper-rtl .swiper-button-next {
left: 10px;
right: auto;
}
.swiper-button-prev:after,
.swiper-rtl .swiper-button-next:after {
content: 'prev';
}
.swiper-button-next,
.swiper-rtl .swiper-button-prev {
right: 10px;
left: auto;
}
.swiper-button-next:after,
.swiper-rtl .swiper-button-prev:after {
content: 'next';
}
.swiper-button-lock {
display: none;
}
:root {
/*
--swiper-pagination-color: var(--swiper-theme-color);
--swiper-pagination-bullet-size: 8px;
--swiper-pagination-bullet-width: 8px;
--swiper-pagination-bullet-height: 8px;
--swiper-pagination-bullet-inactive-color: #000;
--swiper-pagination-bullet-inactive-opacity: 0.2;
--swiper-pagination-bullet-opacity: 1;
--swiper-pagination-bullet-horizontal-gap: 4px;
--swiper-pagination-bullet-vertical-gap: 6px;
*/
}
.swiper-pagination {
position: absolute;
text-align: center;
transition: 300ms opacity;
transform: translate3d(0, 0, 0);
z-index: 10;
}
.swiper-pagination.swiper-pagination-hidden {
opacity: 0;
}
/* Common Styles */
.swiper-pagination-fraction,
.swiper-pagination-custom,
.swiper-horizontal > .swiper-pagination-bullets,
.swiper-pagination-bullets.swiper-pagination-horizontal {
bottom: 10px;
left: 0;
width: 100%;
}
/* Bullets */
.swiper-pagination-bullets-dynamic {
overflow: hidden;
font-size: 0;
}
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
transform: scale(0.33);
position: relative;
}
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {
transform: scale(1);
}
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {
transform: scale(1);
}
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {
transform: scale(0.66);
}
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {
transform: scale(0.33);
}
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {
transform: scale(0.66);
}
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {
transform: scale(0.33);
}
.swiper-pagination-bullet {
width: var(--swiper-pagination-bullet-width, var(--swiper-pagination-bullet-size, 8px));
height: var(--swiper-pagination-bullet-height, var(--swiper-pagination-bullet-size, 8px));
display: inline-block;
border-radius: 50%;
background: var(--swiper-pagination-bullet-inactive-color, #000);
opacity: var(--swiper-pagination-bullet-inactive-opacity, 0.2);
}
button.swiper-pagination-bullet {
border: none;
margin: 0;
padding: 0;
box-shadow: none;
-webkit-appearance: none;
appearance: none;
}
.swiper-pagination-clickable .swiper-pagination-bullet {
cursor: pointer;
}
.swiper-pagination-bullet:only-child {
display: none !important;
}
.swiper-pagination-bullet-active {
opacity: var(--swiper-pagination-bullet-opacity, 1);
background: var(--swiper-pagination-color, var(--swiper-theme-color));
}
.swiper-vertical > .swiper-pagination-bullets,
.swiper-pagination-vertical.swiper-pagination-bullets {
right: 10px;
top: 50%;
transform: translate3d(0px, -50%, 0);
}
.swiper-vertical > .swiper-pagination-bullets .swiper-pagination-bullet,
.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet {
margin: var(--swiper-pagination-bullet-vertical-gap, 6px) 0;
display: block;
}
.swiper-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic,
.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
top: 50%;
transform: translateY(-50%);
width: 8px;
}
.swiper-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,
.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
display: inline-block;
transition: 200ms transform, 200ms top;
}
.swiper-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet,
.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet {
margin: 0 var(--swiper-pagination-bullet-horizontal-gap, 4px);
}
.swiper-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic,
.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
left: 50%;
transform: translateX(-50%);
white-space: nowrap;
}
.swiper-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,
.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
transition: 200ms transform, 200ms left;
}
.swiper-horizontal.swiper-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
transition: 200ms transform, 200ms right;
}
/* Progress */
.swiper-pagination-progressbar {
background: rgba(0, 0, 0, 0.25);
position: absolute;
}
.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
background: var(--swiper-pagination-color, var(--swiper-theme-color));
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
transform: scale(0);
transform-origin: left top;
}
.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
transform-origin: right top;
}
.swiper-horizontal > .swiper-pagination-progressbar,
.swiper-pagination-progressbar.swiper-pagination-horizontal,
.swiper-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,
.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite {
width: 100%;
height: 4px;
left: 0;
top: 0;
}
.swiper-vertical > .swiper-pagination-progressbar,
.swiper-pagination-progressbar.swiper-pagination-vertical,
.swiper-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,
.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite {
width: 4px;
height: 100%;
left: 0;
top: 0;
}
.swiper-pagination-lock {
display: none;
}
/* Scrollbar */
.swiper-scrollbar {
border-radius: 10px;
position: relative;
-ms-touch-action: none;
background: rgba(0, 0, 0, 0.1);
}
.swiper-horizontal > .swiper-scrollbar {
position: absolute;
left: 1%;
bottom: 3px;
z-index: 50;
height: 5px;
width: 98%;
}
.swiper-vertical > .swiper-scrollbar {
position: absolute;
right: 3px;
top: 1%;
z-index: 50;
width: 5px;
height: 98%;
}
.swiper-scrollbar-drag {
height: 100%;
width: 100%;
position: relative;
background: rgba(0, 0, 0, 0.5);
border-radius: 10px;
left: 0;
top: 0;
}
.swiper-scrollbar-cursor-drag {
cursor: move;
}
.swiper-scrollbar-lock {
display: none;
}
.swiper-zoom-container {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
}
.swiper-zoom-container > img,
.swiper-zoom-container > svg,
.swiper-zoom-container > canvas {
max-width: 100%;
max-height: 100%;
object-fit: contain;
}
.swiper-slide-zoomed {
cursor: move;
}
/* Preloader */
:root {
/*
--swiper-preloader-color: var(--swiper-theme-color);
*/
}
.swiper-lazy-preloader {
width: 42px;
height: 42px;
position: absolute;
left: 50%;
top: 50%;
margin-left: -21px;
margin-top: -21px;
z-index: 10;
transform-origin: 50%;
animation: swiper-preloader-spin 1s infinite linear;
box-sizing: border-box;
border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color));
border-radius: 50%;
border-top-color: transparent;
}
.swiper-lazy-preloader-white {
--swiper-preloader-color: #fff;
}
.swiper-lazy-preloader-black {
--swiper-preloader-color: #000;
}
@keyframes swiper-preloader-spin {
100% {
transform: rotate(360deg);
}
}
/* a11y */
.swiper .swiper-notification {
position: absolute;
left: 0;
top: 0;
pointer-events: none;
opacity: 0;
z-index: -1000;
}
.swiper-free-mode > .swiper-wrapper {
transition-timing-function: ease-out;
margin: 0 auto;
}
.swiper-grid > .swiper-wrapper {
flex-wrap: wrap;
}
.swiper-grid-column > .swiper-wrapper {
flex-wrap: wrap;
flex-direction: column;
}
.swiper-fade.swiper-free-mode .swiper-slide {
transition-timing-function: ease-out;
}
.swiper-fade .swiper-slide {
pointer-events: none;
transition-property: opacity;
}
.swiper-fade .swiper-slide .swiper-slide {
pointer-events: none;
}
.swiper-fade .swiper-slide-active,
.swiper-fade .swiper-slide-active .swiper-slide-active {
pointer-events: auto;
}
.swiper-cube {
overflow: visible;
}
.swiper-cube .swiper-slide {
pointer-events: none;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
z-index: 1;
visibility: hidden;
transform-origin: 0 0;
width: 100%;
height: 100%;
}
.swiper-cube .swiper-slide .swiper-slide {
pointer-events: none;
}
.swiper-cube.swiper-rtl .swiper-slide {
transform-origin: 100% 0;
}
.swiper-cube .swiper-slide-active,
.swiper-cube .swiper-slide-active .swiper-slide-active {
pointer-events: auto;
}
.swiper-cube .swiper-slide-active,
.swiper-cube .swiper-slide-next,
.swiper-cube .swiper-slide-prev,
.swiper-cube .swiper-slide-next + .swiper-slide {
pointer-events: auto;
visibility: visible;
}
.swiper-cube .swiper-slide-shadow-top,
.swiper-cube .swiper-slide-shadow-bottom,
.swiper-cube .swiper-slide-shadow-left,
.swiper-cube .swiper-slide-shadow-right {
z-index: 0;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
}
.swiper-cube .swiper-cube-shadow {
position: absolute;
left: 0;
bottom: 0px;
width: 100%;
height: 100%;
opacity: 0.6;
z-index: 0;
}
.swiper-cube .swiper-cube-shadow:before {
content: '';
background: #000;
position: absolute;
left: 0;
top: 0;
bottom: 0;
right: 0;
filter: blur(50px);
}
.swiper-flip {
overflow: visible;
}
.swiper-flip .swiper-slide {
pointer-events: none;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
z-index: 1;
}
.swiper-flip .swiper-slide .swiper-slide {
pointer-events: none;
}
.swiper-flip .swiper-slide-active,
.swiper-flip .swiper-slide-active .swiper-slide-active {
pointer-events: auto;
}
.swiper-flip .swiper-slide-shadow-top,
.swiper-flip .swiper-slide-shadow-bottom,
.swiper-flip .swiper-slide-shadow-left,
.swiper-flip .swiper-slide-shadow-right {
z-index: 0;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
}
.swiper-creative .swiper-slide {
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
overflow: hidden;
transition-property: transform, opacity, height;
}
.swiper-cards {
overflow: visible;
}
.swiper-cards .swiper-slide {
transform-origin: center bottom;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
overflow: hidden;
}
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -519,6 +519,7 @@ ul, li {
.btn_default{
border: 1px solid #0081FF;
color: #0081FF;
background: #FFFFFF;
&.h28{
line-height: 26px;
}
......@@ -617,7 +618,8 @@ ul, li {
top: 0;
border-radius: 0;
&:hover{
color: #006AD1;
color: #FFFFFF;
background: #0081FF;
}
}
}
......
.app-container{
padding: 0;
}
//小导航
.miantitle{
color: #232323;
......@@ -388,6 +392,11 @@
content: "\e78f";
opacity: 0.4;
}
.el-icon-arrow-down:before{
content: "\e790";
opacity: 0.4;
color: #232323;
}
}
}
.popbot{
......@@ -410,10 +419,10 @@
}
.popform.j{
.left{
width: 116px;
width: 130px;
}
.el-input{
width: 374px;
width: 364px;
}
}
.types{
......@@ -693,12 +702,8 @@
font-size: 12px;
}
}
.b1{
padding: 0 5px;
border-radius: 2px;
}
.b2{
padding: 0 15px;
width: 80px;
border-radius: 2px;
}
.b3{
......@@ -744,6 +749,25 @@
.el-table--enable-row-hover .el-table__body tr:hover > td.el-table__cell{
background: #F6F9FC;;
}
.hoverbtn{
display: none;
>div{
cursor: pointer;
margin-right: 24px;
}
.xz{
opacity: 0.8;
}
.sc{
color: #FF3C3C;
}
}
tr:hover{
.hoverbtn{
display: flex;
justify-content: right;
}
}
.el-table__header-wrapper th{
background: #FFFFFF;
font-size: 12px;
......@@ -791,3 +815,183 @@
.p10{
padding: 0 10px;
}
.tips{
display: inline-block;
padding: 4px 8px;
border-radius: 2px;
font-size: 12px;
margin-right: 8px;
&.tip1{
background-color: #E4F3FD;
color: #41A1FD;
}
&.tip2{
background-color: #F3F3FF;
color: #8491E8;
}
&.tip3{
background-color: #DEF6F0;
color: #0BAE8D;
}
}
//批量导入
.uploadwin{
background: rgba(0,0,0,0.3);
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
z-index: 2;
.upload{
width: 528px;
height: 430px;
background: #F4F9FF;
border-radius: 4px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
.up_title{
font-size: 14px;
font-weight: 700;
text-align: center;
line-height: 50px;
}
.up_box{
margin: 0 24px;
width: 480px;
height: 296px;
background: #FFFFFF;
border-radius: 2px;
border: 1px dashed #0081FF;
position: relative;
.el-upload-dragger{
height: 294px;
width: 478px;
border: 0;
}
.up_img{
margin: 56px auto 13px;
}
.up_text{
color: #666;
font-size: 14px;
line-height: 18px;
padding-bottom: 12px;
}
.up_tip{
color: #999;
font-size: 12px;
line-height: 16px;
padding-bottom: 12px;
text-align: left;
padding-left: 82px;
&:before{
content: " ";
width: 4px;
height: 4px;
background: #D8D8D8;
border-radius: 50%;
float: left;
margin: 6px 6px 0 0;
}
}
.up_success{
padding-top: 135px;
font-size: 18px;
color: #46AF41;
font-weight: 700;
line-height: 24px;
>img{
float: left;
width: 24px;
margin-right: 10px;
margin-left: 187px;
}
}
}
.btn_download{
position: absolute;
width: 78px;
height: 22px;
background: #E2EEFF;
border-radius: 2px;
color: #0081FF;
background: rgba(0, 129, 255, 0.16);
font-size: 12px;
line-height: 22px;
top: 149px;
right: 61px;
cursor: pointer;
.img{
float: left;
background: url('../images/upload.png')no-repeat center center;
transform: rotateX(180deg);
width: 9px;
height: 11px;
margin: 4px 2px 0 10px;
}
}
}
.btns{
text-align: center;
.btn_primary,.btn_disabled,.btn_default{
border-radius: 2px;
margin: 24px 8px 0;
width: 104px;
}
.btn_disabled{
background: #999;
}
}
.success{
width: 240px;
height: 175px;
background: #FFFFFF;
border-radius: 4px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
text-align: center;
.img{
display: block;
margin: 24px auto 16px;
width: 60px;
}
.p1{
font-size: 16px;
font-family: Microsoft YaHei-Bold, Microsoft YaHei;
font-weight: 700;
color: rgba(35,35,35,0.8);
line-height: 21px;
}
.p2{
margin-top: 16px;
font-size: 14px;
font-family: Microsoft YaHei-Regular, Microsoft YaHei;
font-weight: 400;
color: rgba(35,35,35,0.4);
line-height: 14px;
}
.p3{
padding-top: 35px;
font-size: 18px;
color: #46AF41;
font-weight: 700;
line-height: 24px;
text-align: left;
>img{
float: left;
width: 24px;
margin-right: 10px;
margin-left: 67px;
}
}
.btn_primary{
margin-top: 16px;
}
}
}
* {
padding: 0;
margin: 0;
}
div,
dl,
dt,
dd,
form,
h1,
h2,
h3,
h4,
h5,
h6,
img,
ol,
ul,
li,
table,
th,
td,
p,
span,
a {
border: 0;
}
img,
input {
border: none;
vertical-align: middle;
background: none;
outline: none;
}
html {
height: 100%;
box-sizing: border-box;
}
body {
height: 100%;
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
}
ul,
ol {
list-style-type: none;
}
th,
td,
input {
font-size: 12px;
}
h3 {
font-size: 14px;
}
s,
i,
em {
font-style: normal;
text-decoration: none;
}
button {
border: none;
cursor: pointer;
font-size: 12px;
background-color: transparent;
}
select {
border-width: 1px;
_zoom: 1;
border-style: solid;
padding-top: 2px;
font-size: 12px;
}
.clear {
clear: both;
font-size: 1px;
height: 0;
visibility: hidden;
line-height: 0;
}
.clearfix:after {
content: "";
display: block;
clear: both;
}
.clearfix {
zoom: 1;
}
.float_left {
float: left;
}
.float_right {
float: right;
}
.el-input {
width: 100%;
}
.el-input .el-input__inner {
width: 100%;
height: 34px;
line-height: 34px;
background: #ffffff;
border: 1px solid #e0e0e0;
border-radius: 2px;
box-sizing: border-box;
}
.el-input__icon {
line-height: 34px;
}
.el-dropdown-link .el-input {
width: 100%;
}
.el-dropdown-link .el-input__inner {
width: 100%;
}
.el-input--suffix .el-input__inner {
padding-right: 15px;
}
.el-select .el-input.is-focus .el-input__inner,
.el-input.is-active .el-input__inner,
.el-input__inner:focus,
.el-select .el-input__inner:focus,
.el-range-editor.is-active:focus-within {
border-color: #3181fa;
}
.el-popper[x-placement^=top] {
margin-bottom: 12px;
}
.el-select-dropdown .popper__arrow {
display: none;
}
.el-popper .popper__arrow {
display: none;
}
.select-popper {
text-align: center;
display: inline-block;
position: relative;
color: #333333;
font-size: 14px;
cursor: pointer;
margin-right: 24px;
}
.select-popper .select-popper-img {
width: 24px;
height: 12px;
position: absolute;
top: -10px;
right: 2px;
}
.select-popper .el-select__tags,
.select-popper .el-cascader__tags,
.select-popper .el-input__suffix {
display: none;
}
.select-popper:hover {
color: #0381fa;
}
.select-popper-active {
color: #0381fa;
}
.select-popper-title {
padding: 4px 6px;
}
.select-popper-title .colorhover {
color: #0381fa;
}
.select-popper::-webkit-scrollbar-thumb {
background-color: #a1a3a9;
border-radius: 6px;
}
.select-popper::-webkit-scrollbar {
width: 6px;
height: 6px;
}
.select-popper::-webkit-scrollbar-track {
background: #fff;
}
.select-popper::-webkit-scrollbar-corner {
background: #fff;
}
.select-popper .el-select {
width: 100%;
}
.cascader-region {
position: absolute;
left: 0;
top: 0px;
opacity: 0;
line-height: 16px;
}
.cascader-region .el-input {
width: 100%;
line-height: 16px;
}
.cascader-region .el-input .el-input__inner {
width: 100%;
height: 16px !important;
}
.content_item .select-caret {
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
line-height: 16px;
font-weight: 400;
color: #333333;
cursor: pointer;
position: relative;
}
.content_item .select-popper:hover .select-caret {
color: #0074E5;
}
.content_item .select-caret:focus {
border: none;
outline: none;
}
.content_item .geduan{
width: 100%;
height: 0px;
opacity: 1;
border: 1px solid #EFEFEF;
margin: 16px 0px;
}
.content_item .search-new {
width: 100%;
padding-bottom: 16px;
}
.content_item .search-new span:last-child {
display: inline-block;
width: 80px;
text-align: center;
color: #5B5B5B;
line-height: 32px;
cursor: pointer;
border-radius: 2px 2px 2px 2px;
border: 1px solid #D4D4D4;
opacity: 1;
}
.content_item .search-new span:first-child {
margin-right: 12px;
display: inline-block;
width: 80px;
text-align: center;
cursor: pointer;
background: #0089ff;
color: #fff;
line-height: 34px;
border-radius: 2px 2px 2px 2px;
opacity: 1;
}
.content_item .search-new span:first-child:hover {
background: #0080FF;
}
.content_item .search-new span:last-child:hover {
background: #f5faff;
color: #0081FF;
border-color: #0081FF;
}
* {
padding: 0;
margin: 0;
}
div,
dl,
dt,
dd,
form,
h1,
h2,
h3,
h4,
h5,
h6,
img,
ol,
ul,
li,
table,
th,
td,
p,
span,
a {
border: 0;
}
img,
input {
border: none;
vertical-align: middle;
background: none;
outline: none;
}
html {
height: 100%;
box-sizing: border-box;
}
body {
height: 100%;
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
}
ul,
ol {
list-style-type: none;
}
th,
td,
input {
font-size: 12px;
}
h3 {
font-size: 14px;
}
s,
i,
em {
font-style: normal;
text-decoration: none;
}
button {
border: none;
cursor: pointer;
font-size: 12px;
background-color: transparent;
}
select {
border-width: 1px;
_zoom: 1;
border-style: solid;
padding-top: 2px;
font-size: 12px;
}
.clear {
clear: both;
font-size: 1px;
height: 0;
visibility: hidden;
line-height: 0;
}
.clearfix:after {
content: "";
display: block;
clear: both;
}
.clearfix {
zoom: 1;
}
.float_left {
float: left;
}
.float_right {
float: right;
}
......@@ -122,7 +122,21 @@ export const constantRoutes = [
meta: { title: '区域专项债详情', icon: 'user' }
}
]
}
},
{
path: '/debtProject',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/radar/debtProject/details/:id(\\d+)',
component: () => import('@/views/radar/debtProject/details'),
name: 'debtProjectDetails',
meta: { title: '企业专项债详情', icon: 'radar' }
}
]
}
]
// 动态路由,基于用户权限动态去加载
......
......@@ -7,26 +7,26 @@
<div class="app-container">
<el-card class="box-card noborder">
<div class="tables">
<div class="empty" v-if="tableData == null || tableData.length == 0">
<div class="empty" v-if="tableData.total==0">
<img src="@/assets/images/project/empty.png">
<div class="p1">添加你的第一位客户吧</div>
<div class="p2">抱歉,你还未添加客户,快去添加吧</div>
<div class="btn btn_primary h36 w88" @click="opennew">添加客户</div>
<div class="btn btn_primary btn_shallow h36 w88">批量导入</div>
<div class="btn btn_primary btn_shallow h36 w88" @click="pldrs">批量导入</div>
</div>
<div class="table_search">
<div class="searchInput">
<el-input type="text" placeholder="输入企业名称查询"></el-input>
<el-input type="text" v-model="serchParam.companyName" placeholder="输入企业名称查询"></el-input>
<div class="btn">搜索</div>
</div>
<div class="dc">
<div class="total">共126条</div>
<div class="btn-export"><img src="@/assets/images/project/import.png">批量导入</div>
<div class="btn-export" @click="pldrs"><img src="@/assets/images/project/import.png">批量导入</div>
<div class="btn btn_primary h32 p10" @click="opennew"><div class="img img1"></div>添加客户</div>
</div>
</div>
<el-table
:data="tableData"
<el-table v-if="tableData.total>0"
:data="tableData.rows"
stripe border
style="width: 100%"
:default-sort = "{prop: 'date', order: 'descending'}"
......@@ -35,38 +35,42 @@
prop="index"
label="序号"
width="47">
</el-table-column> <el-table-column
<template slot-scope='scope'>
<span>{{ (serchParam.pageNum - 1) * serchParam.pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column
prop="date"
label="企业名称"
width="441">
<template slot-scope="scope">
<div class="ps1">
<div class="wordprimary ps2">中国建筑第八工程局有限公司重庆至万州高铁</div>
<div class="wordprimary ps2" @click="toDetail(scope.row.companyId,'')">{{scope.row.companyName}}</div>
<div class="ps3">
<div>写跟进<img src="@/assets/images/project/edit_1.png"></div>
<div>编辑信息<img src="@/assets/images/project/edit_2.png"></div>
<div @click="toDetail(scope.row.companyId,1)">写跟进<img src="@/assets/images/project/edit_1.png"></div>
<div @click="toDetail(scope.row.companyId,2)">编辑信息<img src="@/assets/images/project/edit_2.png"></div>
</div>
</div>
</template>
</el-table-column>
<el-table-column
prop="name"
prop="cooperationProject"
label="合作项目"
width="76">
</el-table-column>
<el-table-column
prop="name"
prop="followProject"
label="跟进项目"
width="76">
</el-table-column>
<el-table-column
prop="name"
prop="reserveProject"
label="储备项目"
width="76">
</el-table-column>
<el-table-column
prop="name"
prop="legalPerson"
label="法定代表人"
width="110">
</el-table-column>
......@@ -76,62 +80,68 @@
width="160">
</el-table-column>
<el-table-column
prop="name"
prop="registerCapitalStr"
label="注册资本金(万元)"
width="140">
</el-table-column>
<el-table-column
prop="address"
prop="creditLevel"
label="企业主体评级" width="100">
</el-table-column>
<el-table-column
prop="address"
prop="isOn"
label="上市公司" width="76">
<template slot-scope="scope">
{{scope.row.isOn == 1?"是":"否"}}
</template>
</el-table-column>
<el-table-column
prop="address"
prop="isMajor"
label="局级大客户" width="88">
<template slot-scope="scope">
{{scope.row.isMajor == 1?"是":"否"}}
</template>
</el-table-column>
<el-table-column
prop="address"
prop="customerLevel"
label="客户等级" width="76">
</el-table-column>
<el-table-column
prop="address"
prop="companyNature"
label="客户性质" width="76">
</el-table-column>
<el-table-column
prop="address"
prop="companyLevel"
label="客户级别" width="76">
</el-table-column>
<el-table-column
prop="address"
label="企业母公司" width="268">
<template slot-scope="scope">
<div class="wordprimary">中国建筑第八工程局有限公司重庆至万州高铁</div>
<div class="wordprimary">{{scope.row.superCompany}}</div>
</template>
</el-table-column>
<el-table-column
prop="address"
prop="mainBusiness"
label="主营业务" width="120">
</el-table-column>
<el-table-column
prop="address"
prop="companyAttribute"
label="发包属性" width="120">
</el-table-column>
<el-table-column
prop="address"
prop="followUser"
label="跟进人" width="110">
</el-table-column>
</el-table>
<div class="bottems">
<div class="bottems" v-if="tableData.total>0">
<el-pagination
background
:page-size="20"
:page-size="serchParam.pageSize"
:current-page="1"
@current-change="handleCurrentChange"
layout="prev, pager, next"
:total="1000">
:total="tableData.total">
</el-pagination>
</div>
</div>
......@@ -148,6 +158,12 @@
<span class="left"><i>*</i>企业名称:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="row">
<span class="left">客户等级:</span>
<el-select placeholder="请选择">
<el-option v-for="(item,index) in customerLevel" :label="item.dictLabel" :value="item.dictValue"></el-option>
</el-select>
</div>
<div class="row">
<span class="left">法定代表人:</span>
<el-input type="text" placeholder="请输入"></el-input>
......@@ -158,10 +174,11 @@
</div>
<div class="row">
<span class="left">企业注册地:</span>
<el-select placeholder="请选择">
<el-option label="cccc" value="11"></el-option>
<el-option label="cccc" value="121"></el-option>
</el-select>
<el-cascader :options="addressList" clearable></el-cascader>
</div>
<div class="row">
<span class="left">统一社会信用代码:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="popbot">
<div class="wordprimary">前往城投平台寻找客户线索></div>
......@@ -172,16 +189,69 @@
</el-dialog>
</el-card>
</div>
<div class="uploadwin" v-if="pldr">
<div class="upload" v-if="addfile==false">
<div class="up_title">批量导入客户</div>
<div class="up_box">
<el-upload v-if="isUpload == false"
class="upload-demo"
drag
action="https://jsonplaceholder.typicode.com/posts/"
multiple>
<img class="up_img" src="@/assets/images/project/upload.png">
<div class="up_text">点击选择或将文件(xls,xlsx)拖拽至此上传成员名录</div>
<div class="up_tip">导入的文件内容必须依照下载模板的要求填写</div>
<div class="up_tip">上传文件最大为2M,仅支持Excel表格文件(xls,xlsx)</div>
<div class="up_tip">导入已存在的客户将自动跳过</div>
</el-upload>
<div class="up_success" v-else>
<img src="@/assets/images/project/success.png">上传成功
</div>
<div class="btn_download" v-if="isUpload == true"><div class="img"></div>点击下载</div>
</div>
<div class="btns">
<div class="btn btn_primary btn_disabled h34" v-if="isUpload==false">确定导入</div>
<div class="btn btn_primary h34" @click="qddr" v-else>确定导入</div>
<div class="btn btn_default h34">取消</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">成功导入32家客户信息</div>
<div class="btns">
<div class="btn btn_primary h32">查看</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import "@/assets/styles/project.scss"
import {getCustomerList} from '@/api/custom/custom'
import {getEnterprise,getDictType,} from '@/api/main'
import prvinceTree from '@/assets/json/provinceTree'
import axios from 'axios'
export default {
name: 'CustomList',
data() {
return{
pldr: false,
serchParam:{
companyName:'',
pageNum:1,
pageSize:20
},
dialogVisible:false,
textarea:"",
nowedit:-1,//当前正在编辑的文本
......@@ -205,14 +275,55 @@ export default {
name: '王小虎',
address: '上海市普陀区金沙江路 1516 弄'
}
]
],
isUpload:false,//有上传的文件
addfile:true,//已上传文件
addsuccess:true,//已成功加入数据
customerLevel:[],//客户等级
addressList:[],//地区
}
},
created() {
this.getCustomerList()
this.getDictType()
this.prvinceTree()
},
methods:{
getDictType(){
//获取客户等级
getDictType('customer_level_type').then(result=>{
this.customerLevel = result.code == 200 ? result.data:[]
})
},
pldrs(){
this.pldr = true
this.addfile = false
this.isUpload = false
this.addsuccess = false
},
qddr(){
this.addfile = true
this.addsuccess = false
},
//获取客户列表
getCustomerList(){
getCustomerList(this.serchParam).then(result=>{
this.tableData =result
})
},
//跳转到客户详情
toDetail(id,type){
if(type == 1){//跟进
}else if(type == 2){//编辑信息
}
},
//翻页
handleCurrentChange(val) {
this.serchParam.pageNum=val
console.log(`当前页: ${val}`);
},
cancel(){
......@@ -222,13 +333,39 @@ export default {
opennew(){
this.dialogVisible = true
},
//地区
async prvinceTree() {
// await axios.post("https://files.jiansheku.com/file/json/common/provinceTree.json", {}, {
// headers: {
// 'Content-Type': 'application/json'
// }
// }).then(res => {
// if (res.data.code == 200) {
// console.log(res.data.data)
// }
// })
// console.log(prvinceTree)
this.addressList = prvinceTree;
this.getadd(this.addressList)
},
getadd(row) {
this.addrcallback(row,this.getadd)
},
addrcallback(row,callback){
if(row){
row.forEach(item => {
item.value = item.id
callback && callback(item.children)
})
}
},
}
}
</script>
<style lang="scss" scoped>
.app-container{
padding: 0;
height: calc(100vh - 134px)
}
.box-card{
......@@ -283,9 +420,6 @@ export default {
justify-content: space-between;
.ps2{
width: 270px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.ps3{
width: 150px;
......
<template>
<div class="app-container">
客户概览
<div>
<div class="miantitle">
<span>客户管理</span>
<span> / 客户概览</span>
</div>
<div class="app-container">
<div class="topions">
<div class="icons">
<div class="name">客户总数</div>
<div class="count">120</div>
<img class="icon_img" src="@/assets/images/project/icon_1.png">
</div>
<div class="icons">
<div class="name">已合作客户</div>
<div class="count">56</div>
<img class="icon_img" src="@/assets/images/project/icon_2.png">
</div>
<div class="icons">
<div class="name">局级大客户</div>
<div class="count">50</div>
<img class="icon_img" src="@/assets/images/project/icon_3.png">
</div>
<div class="icons">
<div class="name">今日紧进客户</div>
<div class="count">30</div>
<img class="icon_img" src="@/assets/images/project/icon_4.png">
</div>
<div class="icons">
<div class="name">储备项目数</div>
<div class="count">33</div>
<img class="icon_img" src="@/assets/images/project/icon_5.png">
</div>
</div>
<div class="flex">
<el-card class="box-card noborder left" style="position: relative">
<div class="cardtitles">客户级别</div>
<div class="chartsum">
<div class="sum">23家</div>
<div>11%</div>
<div>有息债务/总负债</div>
</div>
<div class="flex">
<div id="khjb" class="chart1"></div>
<div class="tables">
<el-table
:data="tableData"
stripe border
style="width: 100%"
:default-sort = "{prop: 'date', order: 'descending'}"
>
<el-table-column
prop="name"
label="名称">
</el-table-column>
<el-table-column
prop="name"
label="数量(家)">
</el-table-column>
<el-table-column
prop="point"
label="占比">
</el-table-column>
</el-table>
</div>
</div>
</el-card>
<el-card class="box-card noborder right">
<div class="cardtitles">客户跟进动态
<div class="labels">
<div :class="{'on':datatype==1}" @click="getDT(1)">周</div>
<div :class="{'on':datatype==2}" @click="getDT(2)">月</div>
<div :class="{'on':datatype==3}" @click="getDT(3)">年</div>
</div>
</div>
<div id="khgjdt" class="chart2"></div>
</el-card>
</div>
<div class="flex">
<el-card class="box-card noborder left">
<div class="cardtitles">客户性质分析</div>
<div class="chart2" id="khxz"></div>
</el-card>
<el-card class="box-card noborder right">
<div class="cardtitles">客户资信评级</div>
<div class="chart2" id="khzxpj"></div>
</el-card>
</div>
<el-card class="box-card noborder">
<div class="cardtitles">客户动态</div>
<div class="trendslist">
<div class="trends" v-for="item in datalist">
<div class="names">{{item.name}}</div>
<div class="trendtips"><div class="tips tip3">{{item.tip1}}</div><div class="tips tip2">{{item.tip2}}</div></div>
<div class="trendcon">{{item.text}}</div>
<div class="time">{{item.time}}</div>
</div>
<div class="tables" style="width: 100%">
<div class="bottems">
<el-pagination
background
:page-size="10"
:current-page="1"
@current-change="handleCurrentChange"
layout="prev, pager, next"
:total="datalist.length">
</el-pagination>
</div>
</div>
</div>
</el-card>
</div>
</div>
</template>
<script>
import "@/assets/styles/project.scss"
import * as echarts from 'echarts'
export default {
name: 'Overview',
data() {
return {
//客户级别
chartDom: '',
myChart: '',
option: '',
//客户跟进
chartDom1: '',
myChart1: '',
option1: '',
//客户性质
chartDom2: '',
myChart2: '',
option2: '',
// 客户资信
chartDom3: '',
myChart3: '',
option3: '',
//表格数据
tableData:[
{name:'集团总部',sum:'23',point:'11%'},
{name:'一级单位',sum:'61',point:'29%'},
{name:'二级单位',sum:'60',point:'29%'},
{name:'三级单位',sum:'21',point:'10%'},
{name:'其他单位',sum:'44',point:'21%'},
],
datatype:'1',//切换类型
dtdata:[],//数据
dttime:[],//坐标
datalist:[
{name:'重庆市江北区国有资本投资运营管理集团有限公司',time:'2023-05-30',text:'新增招标公告:【江北房地产综合开发公司名下不动产鲤鱼池片区资产评估项目】 公开选取【资产评估】机构的公告',tip1:'正向',tip2:'招标公告'},
{name:'上海城投(集团)有限公司',time:'2023-05-29',text:'新增招标公告:北横通道新建工程——机电、装饰工程Ⅱ标段',tip1:'正向',tip2:'招标公告'},
{name:'上海申迪(集团)有限公司',time:'2023-5-27',text:'新增招标公告:上海国际旅游度假区核心区3.1平方公里绿地公园配套停车场项目',tip1:'正向',tip2:'招标公告'},
{name:'上海浦东建设股份有限公司',time:'2023-5-25',text:'新增招标公告:张村地块基础设施建设及上汽地块配套道路桥梁项目道路照明工程二标段',tip1:'正向',tip2:'招标公告'},
{name:'上海浦东建设股份有限公司',time:'2023-5-24',text:'新增供应商:江苏安神交通工程有限公司',tip1:'提示',tip2:'新增供应商'},
],
}
},
created() {
},
mounted(){
this.$nextTick(()=>{
this.chartDom = document.getElementById("khjb")
this.myChart = echarts.init(this.chartDom)
this.chartDom2 = document.getElementById("khxz")
this.myChart2 = echarts.init(this.chartDom2)
this.chartDom3 = document.getElementById("khzxpj")
this.myChart3 = echarts.init(this.chartDom3)
this.initChart()
this.getDT(1)
})
},
methods: {
initChart(){
//客户级别
this.option = {
tooltip: {
trigger: 'item'
},
color:['#8A82F3','#5B9CF7','#8DCF96','#FFDC6B','#FE9C77'],//修改配色
series: [
{
name: '',
type: 'pie',
radius: ['50%','70%'],
data: [
{ value: 23, name: '集团总部:11%' },
{ value: 61, name: '一级单位:29%' },
{ value: 60, name: '二级单位:29%' },
{ value: 21, name: '三级单位:10%' },
{ value: 44, name: '其他单位: 21%' }
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
}
this.option && this.myChart.setOption(this.option)
//客户性质分析
this.option2 = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
data: ['地方单位', '事业单位', '政府机关', '中央企业', '上市公司', '军队', '民营企业','其他'],
axisTick: {
alignWithLabel: true
}
}
],
yAxis: [
{
type: 'value'
}
],
series: [
{
name: '',
type: 'bar',
barWidth: '20%',
data: [100, 152, 200, 334, 390, 330, 220,256,178],
itemStyle:{
normal: {
barBorderRadius: [4, 4, 0, 0],
color: '#165DFF'
}
}
}
]
}
this.option2 && this.myChart2.setOption(this.option2)
//客户资质分析
this.option3 = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
data: ['AA', 'AA+', 'AA-', 'A', 'A+', 'A', 'A-','其他'],
axisTick: {
alignWithLabel: true
}
}
],
yAxis: [
{
type: 'value'
}
],
series: [
{
name: '',
type: 'bar',
barWidth: '20%',
data: [110, 112, 190, 234, 310, 350, 220,276,198],
itemStyle:{
normal:{
barBorderRadius:[4,4,0,0],
color:'#14C9C9'
},
}
}
]
}
this.option3 && this.myChart3.setOption(this.option3)
},
initDT(datas,labels){
this.chartDom1 = document.getElementById("khgjdt")
this.myChart1 = echarts.init(this.chartDom1)
//客户跟进动态
this.option1 = {
xAxis: {
type: 'category',
data: labels
},
yAxis: {
type: 'value'
},
grid:{
left:'8%',
top:'8%',
right:'5%',
bottom:'10%',
},
tooltip:{
axisPointer:{ //悬浮于圆点展示标签
type:'axis'
},
// trigger: 'axis'
},
series: [
{
name: '总跟进',
data: datas,
type: 'line',
smooth: true,
itemStyle: {
normal:{
color:'#0081FF'
}
},
label:{
normal:{
show:false
}
},
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: 'rgba(0, 129, 255, 0.5)'
}, {
offset: 1, color: 'rgba(0, 129, 255, 0)'
} ],
global: false
}
},
}
]
}
this.option1 && this.myChart1.setOption(this.option1)
},
getDT(type){
this.datatype = type
let time = new Date()
let week = ['周一','周二','周三','周四','周五','周六','周日']
let weekdata = [200,150,300,240,400,380,460]
let monthdata = [400,200,350,170,190,280,260,308,406,387,458,695,125,360,512,546,298,365,458,536,345,200,150,300,240,400,380,460,472,365,547]
let yeardata = [1908,1500,2300,1456,2354,2564,1254,1236,4561,4521,1236,4561,3521]
let datas = []
let labels = []
switch (type) {
case 1:
time = time.getDay()
// week.length = time
weekdata.length = time
for(var i=0;i<7;i++){
if(i > time){
weekdata.push('')
}
}
labels = week
datas = weekdata
break;
case 2:
let days = new Date(time.getFullYear(),time.getMonth()+1,0).getDate()//获取到本月天数
time = time.getDate()
monthdata.length = time
for(var i=1;i<days;i++){
labels.push(i+'日')
if(i > time){
monthdata.push("")
}
}
datas = monthdata
break;
case 3:
time = time.getMonth()+1
yeardata.length = time
for(var i=1;i<12;i++){
labels.push(i+'月')
if(i>time){
yeardata.push('')
}
}
datas = yeardata
break;
default:
break;
}
this.dtdata = datas
this.dttime = labels
this.initDT(datas,labels)
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
},
}
}
</script>
<style lang="scss" scoped>
.box-card{
margin: 12px 0 0;
padding-bottom: 24px;
&.left{
width: calc(62% - 16px);
margin-right: 14px;
}
&.right{
width: 40%;
}
}
.topions{
width: 100%;
display: flex;
.icons{
width: calc(20%);
margin-right: 16px;
height: 96px;
background: url("../../../assets/images/project/beijing.png") top center no-repeat;
background-size: 100% 100%;
position: relative;
padding: 24px;
&:last-child{
margin-right: 0;
}
.name{
font-size: 14px;
color: #3D3D3D;
line-height: 14px;
}
.count{
font-size: 26px;
font-weight: 700;
color: #0081FF;
padding-top: 14px;
line-height: 26px;
}
.icon_img{
width: 70px;
position: absolute;
right: 0;
bottom: 0;
}
}
}
.chart1{
width: 428px;
height: 240px;
}
.tables{
width: calc(100% - 428px);
}
.chartsum{
position: absolute;
color: #3D3D3D;
text-align: center;
top: 155px;
left: 168px;
>div{
font-size: 10px;
line-height: 18px;
padding: 0 2px;
&.sum{
font-size: 18px;
padding-bottom: 4px;
}
}
}
.chart2{
width: 100%;
height: 265px;
}
.cardtitles{
position: relative;
.labels{
width: 120px;
height: 22px;
position: absolute;
border-radius: 2px;
right: 24px;
top: 24px;
>div{
width: 40px;
height: 100%;
text-align: center;
line-height: 22px;
float: left;
opacity: 1;
border: 1px solid #EFEFEF;
margin-left: -1px;
font-weight: 400;
font-size: 12px;
color: rgba(35, 35, 35, 0.80);
cursor: pointer;
&.on{
background: #0081FF;
color: #FFFFFF;
}
&:first-child{
border-radius: 2px 0px 0px 2px;
}
&:last-child{
border-radius: 0px 2px 2px 0px;
}
}
}
}
.trendslist{
border-top: 1px solid #EFEFEF;
.trends{
position: relative;
padding: 16px 16px 0;
&:hover{
background: #F6F9FC;
}
.names{
width: calc(100% - 92px);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
height: 23px;
font-size: 16px;
font-family: Source Han Sans CN-Bold, Source Han Sans CN;
font-weight: 700;
color: #3D3D3D;
line-height: 23px;
}
.trendtips{
padding: 8px 0 12px;
}
.trendcon{
border-bottom: 1px solid #EFEFEF;
font-size: 14px;
font-family: MicrosoftYaHei-Regular, MicrosoftYaHei;
font-weight: 400;
color: rgba(35,35,35,0.8);
line-height: 18px;
padding-bottom: 16px;
}
.time{
position: absolute;
right: 16px;
top: 26px;
font-size: 14px;
opacity: 0.4;
}
}
}
</style>
<template>
<div class="app-container">
跟进动态
<div>
<div class="miantitle">
<span>客户管理</span>
<span> / 客户列表</span>
<span> / 跟进动态</span>
</div>
<div class="app-container">
<gjjl types="gjdt" :data="datas"></gjjl>
</div>
</div>
</template>
<script>
import gjjl from '../../project/projectList/component/gjjl.vue'
export default {
components:{
gjjl
},
name: 'Trends',
data() {
return {
datas:[]
}
},
created() {
......
......@@ -37,12 +37,12 @@ export default {
searchText: '',
sideRoute: [
{title: '企业概要', pathName: '', children: [
{title: '企业速览', pathName: ''},
{title: '工商信息', pathName: ''},
{title: '股东信息', pathName: ''},
{title: '高管信息', pathName: ''},
{title: '对外投资', pathName: ''},
{title: '分支机构', pathName: ''}
{title: '企业速览', pathName: 'overview'},
{title: '工商信息', pathName: 'businfo'},
{title: '股东信息', pathName: 'holderinfo'},
{title: '高管信息', pathName: 'execuinfo'},
{title: '对外投资', pathName: 'overseas'},
{title: '分支机构', pathName: 'branch'}
]},
{title: '财务简析', pathName: 'financial'},
{title: '项目商机', pathName: '', children: [
......@@ -77,10 +77,10 @@ export default {
{title: '信用中国', pathName: ''}
]},
{title: '商务信息', pathName: 'business'},
{title: '招标偏好', pathName: ''},
{title: '合作情况', pathName: ''},
{title: '决策链条', pathName: ''},
{title: '跟进记录', pathName: ''}
{title: '招标偏好', pathName: 'preference'},
{title: '合作情况', pathName: 'cooperate'},
{title: '决策链条', pathName: 'decisionMaking'},
{title: '跟进记录', pathName: 'gjjl'}
]
}
},
......@@ -112,62 +112,66 @@ export default {
</script>
<style lang="scss" scoped>
.detail-container{
width: 144px;
min-height: calc(100vh - 170px);
padding-bottom: 20px;
background: #FFFFFF;
.side-input{
width: 128px;
margin-top: 16px;
margin-left: 8px;
border: 0;
::v-deep .el-input__inner{
height: 32px;
background: #F3F3F4;
border-radius: 20px;
#app{
.detail-container{
width: 144px;
min-height: calc(100vh - 170px);
padding-bottom: 20px;
background: #FFFFFF;
.side-input{
width: 128px;
margin-top: 16px;
margin-left: 8px;
border: 0;
&::placeholder {
color: #3D3D3D;
::v-deep .el-input__inner{
height: 32px;
background: #F3F3F4;
border-radius: 20px;
border: 0;
&::placeholder {
color: #3D3D3D;
}
}
}
.el-icon-search{
color: #0081FF;
cursor: pointer;
}
}
.detail-menu{
margin-top: 20px;
border-right: 0;
::v-deep .el-menu-item, ::v-deep .el-submenu__title{
height: 30px;
line-height: 30px;
font-size: 14px;
color: #232323;
&:hover, &:focus{
background: linear-gradient(91deg, rgba(0,129,255,0.1) 0%, rgba(0,129,255,0) 100%);;
.el-icon-search{
color: #0081FF;
cursor: pointer;
}
.el-submenu__icon-arrow{
}
.detail-menu{
margin-top: 20px;
border-right: 0;
::v-deep .el-menu-item, ::v-deep .el-submenu__title{
height: 30px;
line-height: 30px;
font-size: 14px;
color: #232323;
right: 48px;
margin-top: -5px;
padding: 0 0 0 16px !important;
text-align: initial !important;
&:hover, &:focus, &.is-active{
background: linear-gradient(91deg, rgba(0,129,255,0.1) 0%, rgba(0,129,255,0) 100%);;
}
.el-submenu__icon-arrow{
color: #232323;
right: 48px;
margin-top: -5px;
}
}
}
::v-deep .el-submenu .el-menu-item{
font-size: 12px;
color: rgba(35,35,35,0.8);
padding: 0 0 0 27px !important;
min-width: 144px !important;
position: relative;
&:before {
content: "";
position: absolute;
top: 14px;
left: 21px;
width: 2px;
height: 2px;
background: rgba(35,35,35,0.8);
border-radius: 50%;
::v-deep .el-submenu .el-menu-item{
font-size: 12px;
color: rgba(35,35,35,0.8);
padding: 0 0 0 27px !important;
min-width: 144px !important;
position: relative;
&:before {
content: "";
position: absolute;
top: 14px;
left: 21px;
width: 2px;
height: 2px;
background: rgba(35,35,35,0.8);
border-radius: 50%;
}
}
}
}
......
<template>
<div class="cooperate">
<template v-if="ifEmpty">
<div class="flex-box query-box">
<div class="flex-box query-params">
<el-form ref="queryForm" :model="queryParams" :inline="true" size="small">
<el-form-item prop="stage">
<el-select v-model="queryParams.stage" clearable class="form-content-width" placeholder="请选择项目阶段">
<el-option v-for="(item, index) in stageOptions" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item prop="status">
<el-select v-model="queryParams.status" clearable class="form-content-width" placeholder="请选择项目状态">
<el-option v-for="(item, index) in statusOptions" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item class="cooperate-name">
<el-input v-model="queryParams.name" placeholder="输入企业名称查询"></el-input>
<span>搜索</span>
</el-form-item>
</el-form>
</div>
<div class="flex-box query-add">
<el-button type="primary" icon="el-icon-plus" @click="drawer = true">添加商务信息</el-button>
</div>
</div>
<div class="table-item">
<el-table
v-loading="tableLoading"
:data="tableData"
element-loading-text="Loading"
border
fit
highlight-current-row
>
<el-table-column label="序号" width="50" align="left">
<template slot-scope="scope">{{ pageIndex * pageSize - pageSize + scope.$index + 1 }}</template>
</el-table-column>
<el-table-column label="项目名称" prop="enterpriseName" min-width="70" align="left" />
<el-table-column label="项目阶段" prop="level" min-width="70" align="left" />
<el-table-column label="投资金额(万元)" prop="legalPerson" min-width="70" align="left" />
<el-table-column label="项目状态" prop="capital" min-width="115" align="right" />
</el-table>
</div>
<div class="pagination-box">
<el-pagination background :current-page="pageIndex" :page-size="pageSize" :total="tableDataTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div>
</template>
<template v-else>
<div class="cooperate_empty">
<img src="@/assets/images/project/empty.png"/>
<div class="empty-t">暂无合作情况数据</div>
<div class="empty-d">抱歉,你还未合作情况数据,快去添加吧</div>
<el-button type="primary" class="empty-b" @click="drawer = true">添加合作情况</el-button>
</div>
</template>
<!-- 弹窗添加合作情况 -->
<el-drawer
title="添加合作情况"
size="53%"
:visible.sync="drawer"
:direction="direction"
:with-header="false"
:before-close="handleClose">
<div class="cooperate_addhzqk">
<div class="addhzqk_top">
<div class="addhzqk_top_t">
<div class="top_t_h1">
<img src="@/assets/images/economies/icon.png" />重庆轨道交通(集团)有限公司
</div>
<div class="top_t_close"><i class="el-icon-close" @click="handleClose"></i></div>
</div>
<div class="addhzqk_top_d">
<div class="top_d_item">
法定代表人:<span>王志</span>
</div>
<div class="top_d_item">
注册资本:<span>356889.88万</span>
</div>
<div class="top_d_item">
注册地址:<span>重庆市渝北区财富大道19号1幢(财富三号A栋6楼1、2#-1)</span>
</div>
</div>
</div>
<div class="addhzqk_from">
<el-form ref="queryForm" :model="queryParams" size="small" label-width="126px">
<el-form-item label="项目名称:">
<el-input v-model="queryParams.name" placeholder="请输入项目名称"></el-input>
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="项目状态:">
<el-select v-model="queryParams.status" style="width: 100%" clearable class="form-content-width" placeholder="请选择项目状态">
<el-option v-for="(item, index) in statusOptions" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目阶段:">
<el-select v-model="queryParams.stage" style="width: 100%" clearable class="form-content-width" placeholder="请选择项目阶段">
<el-option v-for="(item, index) in stageOptions" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="投资金额(万元):">
<el-input v-model="queryParams.name" placeholder="请输入投资金额"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="关键决策人:">
<el-input v-model="queryParams.name" placeholder="请输入关键决策人名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="关键决策人电话:">
<el-input v-model="queryParams.name" placeholder="请输入关键决策人电话"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="竞争对手:">
<el-input v-model="queryParams.name" placeholder="请输入竞争对手名称"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="建设内容:">
<el-input v-model="queryParams.key"
type="textarea"
:autosize="{ minRows: 8, maxRows: 8}"
maxlength="500"
show-word-limit
placeholder="请输入建设内容">
</el-input>
</el-form-item>
<el-form-item style="text-align: right;">
<el-button @click="handleClose">关闭</el-button>
<el-button type="primary">保存内容</el-button>
</el-form-item>
</el-form>
</div>
</div>
</el-drawer>
</div>
</template>
<script>
export default {
name: 'Cooperate',
components: {
},
data() {
return {
ifEmpty:true,
queryParams:{
},
stageOptions:[],
statusOptions:[],
//列表
tableLoading:false,
tableData:[],
pageIndex:1,
pageSize:10,
tableDataTotal:0,
//弹窗
drawer: false,
direction: 'rtl',
}
},
created() {
},
computed: {
},
methods: {
resetQuery() {
},
//分页
handleCurrentChange(e){
},
handleSizeChange(e){
},
//弹窗
handleClose(done) {
this.drawer = false
}
}
}
</script>
<style lang="scss" scoped>
.cooperate{
background: #ffffff;
border-radius: 4px;
padding: 16px;
input{
border: 1px solid #EFEFEF;
}
::v-deep .el-form-item{
margin-right: 8px !important;
}
.cooperate-name{
::v-deep .el-form-item__content{
display: flex;
span{
width: 60px;
height: 32px;
background: #F5F5F5;
text-align: center;
color: #0081FF;
border: 1px solid #EFEFEF;
border-left: 0;
cursor: pointer;
}
}
::v-deep .el-input__inner{
border-right: 0;
border-radius: 2px 0 2px 0;
}
}
.query-add{
button{
width: 124px;
line-height: 32px;
height: 32px;
background: #0081FF;
border-radius: 2px 2px 2px 2px;
padding: 0;
color: #ffffff;
span{
color: #ffff;
margin-left: 4px;
}
}
}
.cooperate_empty{
text-align: center;
height: calc(100vh - 170px);
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
img{
width: 108px;
height: 108px;
border-radius: 50%;
margin-bottom: 24px;
}
.empty-t{
font-size: 16px;
color: #333333;
margin-bottom: 8px;
}
.empty-d{
font-size: 14px;
font-weight: 400;
color: #999999;
margin-bottom: 24px;
}
.empty-b{
width: 116px;
height: 36px;
background: #0081FF;
border-radius: 4px;
padding: 0;
}
}
.table-item{
margin-top: 10px;
}
// 弹窗
.cooperate_addhzqk{
.addhzqk_top{
padding: 14px 16px;
border-bottom: 1px solid #E1E1E1;
.addhzqk_top_t{
display: flex;
align-items: center;
justify-content: space-between;
.top_t_h1{
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
word-break: break-all;
display: flex;
align-items: center;
font-weight: 700;
img{
width: 17px;
height: 17px;
margin-right: 8px;
}
}
.top_t_close{
}
}
.addhzqk_top_d{
display: flex;
margin-top: 10px;
.top_d_item{
font-size: 14px;
color: rgba(35,35,35,0.4);
margin-left: 28px;
span{
color: rgba(35,35,35,0.8);
}
}
}
}
.addhzqk_from{
padding: 26px 16px;
::v-deep .el-form-item__label{
padding: 0;
font-weight: 400;
color: #232323;
}
::v-deep .el-icon-arrow-up:before {
content: "\e78f";
color: rgba(35,35,35,0.4);
}
}
}
}
</style>
<template>
<div class="decisionMaking">
<template v-if="ifEmpty">
<div class="flex-box query-box">
<div class="flex-box query-params"></div>
<div class="flex-box query-add">
<el-button type="primary" icon="el-icon-plus" @click="opennew">新增决策链条</el-button>
</div>
</div>
<div class="table-item">
<el-table
v-loading="tableLoading"
:data="tableData"
element-loading-text="Loading"
border
fit
highlight-current-row
>
<el-table-column label="序号" width="50" align="left">
<template slot-scope="scope">{{ pageIndex * pageSize - pageSize + scope.$index + 1 }}</template>
</el-table-column>
<el-table-column label="姓名" prop="enterpriseName" min-width="70" align="left" />
<el-table-column label="角色" prop="level" min-width="70" align="left" />
<el-table-column label="公司/机关" prop="legalPerson" min-width="70" align="left" />
<el-table-column label="职位" prop="capital" min-width="115" align="left" />
<el-table-column label="联系方式" prop="capital" min-width="115" align="left" />
<el-table-column label="内部维护人" prop="capital" min-width="115" align="left" />
<el-table-column label="备注" prop="capital" min-width="115" align="left" />
</el-table>
</div>
<div class="pagination-box">
<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>
</template>
<template v-else>
<div class="cooperate_empty">
<img src="@/assets/images/project/empty.png"/>
<div class="empty-t">暂无客户联系人数据</div>
<div class="empty-d">抱歉,你还未添加客户联系人,快去添加吧</div>
<el-button type="primary" class="empty-b" @click="opennew">添加联系人</el-button>
</div>
</template>
<!-- 弹窗添加联系人 -->
<el-dialog
class="popups"
:visible.sync="dialogVisible"
width="464px">
<div class="poptitle">
<img src="@/assets/images/economies/icon.png">
<span>重庆市轨道交通3号线二期工程4标段施工总承包</span>
</div>
<div class="popform">
<div class="row">
<span class="left">联系人姓名:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="row">
<span class="left">联系人角色:</span>
<el-select placeholder="请选择">
<el-option label="cccc" value="11"></el-option>
<el-option label="cccc" value="121"></el-option>
</el-select>
</div>
<div class="row">
<span class="left">联系人职位:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="row">
<span class="left">联系人公司/机关:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="row">
<span class="left">内部维护人:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="row">
<span class="left">联系方式:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="popbot">
<div class="btn btn_cancel h32" @click="cancel">返回</div>
<div class="btn btn_primary h32">保存</div>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import {
getList,
addChain
} from '@/api/decisionMaking/decisionMaking'
export default {
name: 'DecisionMaking',
components: {
},
data() {
return {
ifEmpty:true,
queryParams:{
customerId:null,
pageNum:1,
pageSize:10,
},
stageOptions:[],
statusOptions:[],
//列表
tableLoading:false,
tableData:[],
pageIndex:1,
pageSize:10,
tableDataTotal:0,
//弹窗
dialogVisible: false,
}
},
created() {
this.list();
},
computed: {
},
methods: {
list(){
getList(this.queryParams).then((res) => {
console.log(res)
})
},
resetQuery() {
},
//分页
handleCurrentChange(e){
},
handleSizeChange(e){
},
cancel(){
this.dialogVisible = false
},
//打开新建窗口
opennew(){
this.dialogVisible = true
},
}
}
</script>
<style lang="scss" scoped>
.decisionMaking{
background: #ffffff;
border-radius: 4px;
padding: 16px;
input{
border: 1px solid #EFEFEF;
}
::v-deep .el-form-item{
margin-right: 8px !important;
}
.cooperate-name{
::v-deep .el-form-item__content{
display: flex;
span{
width: 60px;
height: 32px;
background: #F5F5F5;
text-align: center;
color: #0081FF;
border: 1px solid #EFEFEF;
border-left: 0;
cursor: pointer;
}
}
::v-deep .el-input__inner{
border-right: 0;
border-radius: 2px 0 2px 0;
}
}
.query-add{
button{
width: 124px;
line-height: 32px;
height: 32px;
background: #0081FF;
border-radius: 2px 2px 2px 2px;
padding: 0;
color: #ffffff;
span{
color: #ffff;
margin-left: 4px;
}
}
}
.cooperate_empty{
text-align: center;
height: calc(100vh - 170px);
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
img{
width: 108px;
height: 108px;
border-radius: 50%;
margin-bottom: 24px;
}
.empty-t{
font-size: 16px;
color: #333333;
margin-bottom: 8px;
}
.empty-d{
font-size: 14px;
font-weight: 400;
color: #999999;
margin-bottom: 24px;
}
.empty-b{
width: 116px;
height: 36px;
background: #0081FF;
border-radius: 4px;
padding: 0;
}
}
.table-item{
margin-top: 10px;
}
// 弹窗
.popups{
.poptitle {
line-height: 48px;
border-bottom: 1px solid #E1E1E1;
height: 48px;
position: absolute;
top: 0;
left: 0;
width: 100%;
img {
width: 17px;
margin: 16px;
float: left;
}
span {
font-weight: bold;
font-size: 16px;
color: #232323;
font-family: Microsoft YaHei-Bold, Microsoft YaHei;
width: 385px;
display: block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
.popform {
padding-top: 24px;
.row {
padding-bottom: 16px;
.left {
width: 137px;
display: inline-block;
text-align: right;
opacity: 0.8;
}
::v-deep .el-input {
display: inline-block;
width: 240px;
}
}
.popbot {
text-align: right;
padding-top: 8px;
}
}
}
}
</style>
......@@ -7,8 +7,22 @@
</div>
<div class="part-right">
<div id="partBox">
<Overview v-if="currentPath.pathName=='overview'" />
<Businfo v-if="currentPath.pathName=='businfo'" />
<Holderinfo v-if="currentPath.pathName=='holderinfo'" />
<Execuinfo v-if="currentPath.pathName=='execuinfo'" />
<Overseas v-if="currentPath.pathName=='overseas'" />
<Branch v-if="currentPath.pathName=='branch'" />
<Financial v-if="currentPath.pathName=='financial'" />
<Business v-if="currentPath.pathName=='business'" />
<!-- 招标偏好 -->
<Preference v-if="currentPath.pathName=='preference'" />
<!-- 合作情况 -->
<Cooperate v-if="currentPath.pathName=='cooperate'" />
<!-- 决策链条 -->
<DecisionMaking v-if="currentPath.pathName=='decisionMaking'" />
<!-- 跟进记录 -->
<Gjjl v-if="currentPath.pathName=='gjjl'" />
</div>
</div>
</div>
......@@ -19,20 +33,40 @@
import elementResizeDetectorMaker from "element-resize-detector"
import Header from "./component/Header"
import SideBar from "./component/Sidebar"
import Financial from "./financial"
import Business from "./business"
import Overview from "./overview/overview" //企业概览-企业速览
import Businfo from "./overview/businfo" //企业概览-工商信息
import Holderinfo from "./overview/holderinfo" //企业概览-股东信息
import Execuinfo from "./overview/execuinfo" //企业概览-高管信息
import Overseas from "./overview/overseas" //企业概览-对外投资
import Branch from "./overview/branch" //企业概览-分支机构
import Financial from "./financial" //财务简析
import Business from "./business" //商务信息
import Preference from "./preference" //招标偏好
import Cooperate from "./cooperate" //合作情况
import DecisionMaking from "./decisionMaking" //决策链条
import Gjjl from "../../project/projectList/component/gjjl" //跟进记录
export default {
name: 'PartyA',
components: {
Header,
SideBar,
Overview,
Businfo,
Holderinfo,
Execuinfo,
Overseas,
Branch,
Financial,
Business
Business,
Preference,
Cooperate,
DecisionMaking,
Gjjl
},
data() {
return {
currentPath: {
pathName: 'financial' //默认展示页
pathName: 'overview' //默认展示页
},
partBoxHeight: null
}
......
<template>
<div class="app-container part-container">
企业速览
</div>
</template>
<script>
export default {
name: 'Overview',
data() {
return {
}
},
created() {
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.part-container{
margin: 0;
padding: 0;
}
</style>
<template>
<div class="app-container part-container">
企业速览
</div>
</template>
<script>
export default {
name: 'Overview',
data() {
return {
}
},
created() {
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.part-container{
margin: 0;
padding: 0;
}
</style>
<template>
<div class="app-container operations-container">
<div class="common-title">公司经营</div>
<div class="part-swiper">
<div class="swiper-containers">
<ul class="swiper-wrapper">
<li class="swiper-slide" v-for="(item, index) in operList" :key="index">
<div class="swiper-div">
<div class="operations-title">{{item.range}}-<span>{{item.year}}</span></div>
<div class="flex-box text-cl1 operations-info">
{{item.name}}
<span><img src="@/assets/images/detail/overview/oper_source.png">{{item.name}}</span>
</div>
</div>
</li>
</ul>
</div>
<div class="swiper-button-prev" slot="button-prev" style="left: 0;"><i class="el-icon-arrow-left"></i></div>
<div class="swiper-button-next" slot="button-next" style="right: 0"><i class="el-icon-arrow-right"></i></div>
</div>
<div class="flex-box operations-list">
<div class="list-item" v-for="(item, index) in gsjyList" :key="index">
<div class="flex-box list-item-all"><img :src="item.ico">{{item.name}}</div>
<div class="list-item-amount">{{item.amount}}</div>
</div>
</div>
</div>
</template>
<script>
var Swiper = require('@/assets/lib/swiper/swiper-bundle.min.js')
import "@/assets/lib/swiper/swiper-bundle.css"
export default {
name: 'Overview',
data() {
return {
operList: [
{name:'债务信用评级', rate:'中国标普信用', range:'AA', year:'2021'},
{name:'债务信用评级', rate:'中国标普信用', range:'AA', year:'2021'},
{name:'债务信用评级', rate:'中国标普信用', range:'AA', year:'2021'},
{name:'债务信用评级', rate:'中国标普信用', range:'AA', year:'2021'},
{name:'债务信用评级', rate:'中国标普信用', range:'AA', year:'2021'}
],
gsjyList: [
{ name: '总资产', ico: require('@/assets/images/detail/overview/gsjy_ico1.png'), amount: '1699.7'},
{ name: '净资产', ico: require('@/assets/images/detail/overview/gsjy_ico2.png'), amount: '1699.7'},
{ name: '授信余额', ico: require('@/assets/images/detail/overview/gsjy_ico3.png'), amount: '1699.7'},
{ name: '营业收入', ico: require('@/assets/images/detail/overview/gsjy_ico4.png'), amount: '1699.7'},
{ name: '总负债', ico: require('@/assets/images/detail/overview/gsjy_ico5.png'), amount: '1699.7'}
],
}
},
created() {
},
mounted() {
this.companySwiper()
},
methods: {
companySwiper(){
new Swiper('.swiper-containers', {
slidesPerView: 4,
// 设置点击箭头
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
}
})
}
}
}
</script>
<style lang="scss" scoped>
.operations-container{
margin: 0;
padding: 24px 16px;
background: #FFFFFF;
.part-swiper{
position: relative;
margin-top: 16px;
.swiper-containers{
width: calc(100% - 38px);
height: 96px;
margin-top: 8px;
margin-left: 25px;
overflow: hidden;
.swiper-slide{
.swiper-div{
width: calc(100% - 12px);
height: 96px;
background: url("~@/assets/images/detail/overview/swiper_bg.png") no-repeat;
background-size: 100% 100%;
.operations-title{
margin-right: 22px;
font-weight: bold;
font-size: 20px;
color: #0081FF;
padding: 24px 16px 0 16px;
span{
font-size: 16px;
}
}
.operations-info{
padding: 14px 16px 10px 16px;
justify-content: space-between;
font-size: 14px;
color: #416587;
span{
font-size: 12px;
img{
width: 10px;
height: 10px;
margin-right: 3px;
}
}
}
}
}
}
.swiper-button-prev, .swiper-button-next{
width: 16px;
height: 96px;
background: #F0F5FC;
top: 0;
margin-top: 0;
&.swiper-button-disabled{
opacity: 1;
color:#AAAAAA;
background: #F5F5F5;
}
i{
color: #AAAAAA;
}
&:hover i{
color:#667199;
}
&:after{
content: "";
}
}
}
.operations-list{
flex-wrap: wrap;
justify-content: space-between;
.list-item{
width: calc(20% - 12px);
height: 88px;
padding: 18px;
margin-top: 14px;
font-size: 14px;
color: #232323;
border: 1px solid #E2E7EE;
text-align: center;
.list-item-all{
justify-content: center;
img{
width: 24px;
height: 24px;
margin-right: 4px;
}
}
.list-item-amount{
padding-top: 6px;
font-weight: bold;
}
}
}
}
</style>
<template>
<div class="app-container part-container">
企业速览
</div>
</template>
<script>
export default {
name: 'Overview',
data() {
return {
}
},
created() {
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.part-container{
margin: 0;
padding: 0;
}
</style>
<template>
<div class="app-container part-container">
企业速览
</div>
</template>
<script>
export default {
name: 'Overview',
data() {
return {
}
},
created() {
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.part-container{
margin: 0;
padding: 0;
}
</style>
<template>
<div class="app-container part-container">
企业速览
</div>
</template>
<script>
export default {
name: 'Overview',
data() {
return {
}
},
created() {
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.part-container{
margin: 0;
padding: 0;
}
</style>
<template>
<div class="app-container part-container">
企业速览
<div class="gsjy">
<Operations />
</div>
</div>
</template>
<script>
import Operations from "./component/operations";
export default {
name: 'Overview',
components: {
Operations
},
data() {
return {
}
},
created() {
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.part-container{
margin: 0;
padding: 0;
.gsjy{
margin-top: 12px;
}
}
</style>
<template>
<div class="preference">
<div class="preference-item">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">商务条件特点</span>
</div>
</div>
<div class="query-params">
<el-form ref="queryForm" :model="queryParams" :inline="true" size="small">
<el-form-item>
<el-input v-model="queryParams.key"
type="textarea"
:autosize="{ minRows: 8, maxRows: 8}"
maxlength="500"
show-word-limit
placeholder="请输入商务条件特点">
</el-input>
</el-form-item>
</el-form>
</div>
</div>
<div class="preference-item">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">决策链条</span>
</div>
</div>
<div class="query-params">
<el-form ref="queryForm" :model="queryParams" :inline="true" size="small">
<el-form-item>
<el-input v-model="queryParams.key"
type="textarea"
:autosize="{ minRows: 8, maxRows: 8}"
maxlength="500"
show-word-limit
placeholder="请输入决策链条">
</el-input>
</el-form-item>
</el-form>
</div>
</div>
<div class="preference-item">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">招投标流程特点</span>
</div>
</div>
<div class="query-params">
<el-form ref="queryForm" :model="queryParams" :inline="true" size="small">
<el-form-item>
<el-input v-model="queryParams.key"
type="textarea"
:autosize="{ minRows: 8, maxRows: 8}"
maxlength="500"
show-word-limit
placeholder="请输入招投标流程特点">
</el-input>
</el-form-item>
</el-form>
</div>
</div>
<div class="preference-item">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">履约阶段特点</span>
</div>
</div>
<div class="query-params">
<el-form ref="queryForm" :model="queryParams" :inline="true" size="small">
<el-form-item>
<el-input v-model="queryParams.key"
type="textarea"
:autosize="{ minRows: 8, maxRows: 8}"
maxlength="500"
show-word-limit
placeholder="请输入履约阶段特点">
</el-input>
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'Preference',
components: {
},
data() {
return {
queryParams:{
}
}
},
created() {
},
computed: {
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.preference{
background: #ffffff;
border-radius: 4px;
padding: 16px;
.query-params{
margin-top:20px;
::v-deep .el-form-item{
width: 100%;
}
::v-deep .el-form-item__content{
width: 80%;
}
}
}
</style>
......@@ -19,6 +19,11 @@
<el-option label="cccc" value="11"></el-option>
<el-option label="cccc" value="121"></el-option>
</el-select>
<el-select v-if="showtype == 'gjdt'" v-model="value" class="w128" placeholder="关联企业">
<i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/ico_1.png"></i>
<el-option label="cccc" value="11"></el-option>
<el-option label="cccc" value="121"></el-option>
</el-select>
<el-input v-model="value" placeholder="拜访对象" style="width: 100px;">
<i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/ico_2.png"></i>
</el-input>
......@@ -96,13 +101,25 @@
<script>
import "@/assets/styles/project.scss"
export default {
props:{
types: { //当前组件展示类型
type: String,
default: ""
},
datas:[],//数据源
},
name: 'gjjl',
data(){
return{
showtype:'',
isEdit:false,
value:''
}
},
created(){
this.showtype = this.types
console.log(this.types)
},
methods:{
getEdit(){
this.isEdit = true;
......
......@@ -50,6 +50,17 @@
label="负责人"
width="">
</el-table-column>
<el-table-column
prop="name"
label=""
align="right"
width="">
<template slot-scope="scope">
<div class="hoverbtn">
<div class="sc">删除</div>
</div>
</template>
</el-table-column>
</el-table>
<div class="tables">
......
......@@ -8,8 +8,37 @@
<el-input type="text" placeholder="输入关键词查询"></el-input>
<div class="btn">搜索</div>
</div>
<div class="btn btn_primary h32 b1"><div class="img img1"></div>新建文件夹</div>
<div class="btn btn_default h32 b2"><div class="img img2"></div>上传</div>
<div class="btn btn_primary h32 b2" @click="isupload=true"><div class="img img2"></div>上传</div>
</div>
<div class="uploadbox" v-if="isupload">
<div>
<el-upload
class="upload-demo"
action="https://jsonplaceholder.typicode.com/posts/"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-remove="beforeRemove"
multiple
:limit="3"
:on-exceed="handleExceed"
:file-list="fileList">
<div class="wj wj1"></div>上传文件
</el-upload>
</div>
<div>
<el-upload
class="upload-demo"
action="https://jsonplaceholder.typicode.com/posts/"
:on-remove="fileRemove"
:on-change="fileChang"
multiple
:limit="3"
:on-exceed="handleExceed"
ref="uploadFile"
:file-list="fileList">
<div class="wj wj2"></div>上传文件夹
</el-upload>
</div>
</div>
<div class="document">
<el-table
......@@ -49,6 +78,18 @@
sortable
width="">
</el-table-column>
<el-table-column
prop=""
label=""
align="right"
width="">
<template slot-scope="scope">
<div class="hoverbtn">
<div class="xz">下载</div>
<div class="sc">删除</div>
</div>
</template>
</el-table-column>
</el-table>
<div class="tables">
<div class="bottems">
......@@ -115,6 +156,7 @@
name: 'zlwd',
data(){
return{
isupload:false,
dialogVisible:false,
textarea:"",
nowedit:-1,//当前正在编辑的文本
......@@ -138,10 +180,23 @@
name: '王小虎',
address: '上海市普陀区金沙江路 1516 弄'
}
]
],
fileList:[],//上传的文件
}
},
mounted(){
this.$refs.uploadFile.$children[0].$refs.input.webkitdirectory = true;
},
methods:{
//上传文件夹
fileChang(file, fileList, name) {
this.form.instFilePics = fileList;
},
fileRemove(file, fileList, name) {
this.form.instFilePics = fileList
},
//翻页
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
......@@ -162,15 +217,56 @@
width: 102px;
}
.img.img1{
margin-right: 4px;
background: url('../../../../../src/assets/images/project/add_2.png')no-repeat center center;
}
.img.img2{
margin-right: 4px;
background: url('../../../../../src/assets/images/upload.png')no-repeat center center;
transform: rotateX(180deg);
background: url('../../../../../src/assets/images/import.png')no-repeat center center;
}
.box-card{
position: relative;
}
.uploadbox{
position: absolute;
width: 124px;
height: 73px;
background: #FFFFFF;
box-shadow: 0px 0px 4px 0px rgba(0,0,0,0.08);
border-radius: 2px;
border: 1px solid #F0F0F0;
right: 16px;
top: 53px;
z-index: 2;
>div{
line-height: 35px;
height: 36px;
color: rgba(35, 35, 35, 0.80);
font-size: 14px;
.wj{
float: left;
margin: 10px 4px 10px 16px;
width: 16px;
height: 16px;
&.wj1{
background: url("../../../../assets/images/project/wj_1.png") top center;
background-size: 100%;
}
&.wj2{
background: url("../../../../assets/images/project/wj_3.png") top center;
background-size: 100%;
}
}
&:hover{
color: #0081FF;
background: #F4F6F9;
.wj1{
background: url("../../../../assets/images/project/wj_2.png") top center;
background-size: 100%;
}
.wj2{
background: url("../../../../assets/images/project/wj_4.png") top center;
background-size: 100%;
}
}
}
}
</style>
......@@ -27,7 +27,7 @@
<div class="contets">
<div class="det-con">
<span>项目类型:</span>
<span>轨道交通</span>
<span><el-select><option label="aaa" value="888"></option></el-select></span>
</div>
<div class="det-con">
<span>项目类别:</span>
......@@ -72,7 +72,7 @@
<!--联系人-->
<lxr v-if="thistag == 'lxr'"></lxr>
<!--跟进记录-->
<gjjl v-if="thistag == 'gjjl'"></gjjl>
<gjjl v-if="thistag == 'gjjl'" types="gjjl"></gjjl>
<!--工作待办-->
<gzdb v-if="thistag == 'gzdb'"></gzdb>
<!--资料文档-->
......@@ -132,9 +132,6 @@
</script>
<style lang="scss" scoped>
.app-container{
padding: 0;
}
.head{
.titles{
line-height: 31px;
......
......@@ -2,8 +2,8 @@
<div class="app-container">
<el-card class="box-card noborder">
<div class="btns">
<div class="btn btn_default h28"><div class="img img1"></div>新建项目商机</div>
<div class="btn btn_primary h28"><div class="img img2"></div>批量导</div>
<div class="btn btn_default h28" @click="showNew"><div class="img img1"></div>新建项目商机</div>
<div class="btn btn_primary h28"><div class="img img2"></div>批量导</div>
</div>
<el-tabs v-model="activeName" @tab-click="handleClick" class="tabpane w100">
<el-tab-pane label="我参与的项目" name="first"></el-tab-pane>
......@@ -82,6 +82,63 @@
</div>
</div>
</div>
<el-dialog
class="popups"
:visible.sync="dialogVisible"
width="464px">
<div class="poptitle">
<img src="@/assets/images/economies/icon.png">
<span>新建商机</span>
</div>
<div class="popform i">
<div class="row">
<span class="left"><i>*</i>项目名称:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="row">
<span class="left"><i>*</i>业主单位:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="row">
<span class="left">项目阶段:</span>
<el-select placeholder="请选择">
<el-option label="cccc" value="11"></el-option>
<el-option label="cccc" value="121"></el-option>
</el-select>
</div>
<div class="row">
<span class="left">项目类型:</span>
<el-select placeholder="请选择">
<el-option label="cccc" value="11"></el-option>
<el-option label="cccc" value="121"></el-option>
</el-select>
</div>
<div class="row">
<span class="left">项目类别:</span>
<el-select placeholder="请选择">
<el-option label="cccc" value="11"></el-option>
<el-option label="cccc" value="121"></el-option>
</el-select>
</div>
<div class="row">
<span class="left">投资估算:</span>
<el-input type="text" placeholder="请输入"></el-input>
</div>
<div class="row">
<span class="left">可见范围:</span>
<el-select placeholder="请选择">
<el-option label="cccc" value="11"></el-option>
<el-option label="cccc" value="121"></el-option>
</el-select>
</div>
<div class="popbot">
<div class="wordprimary">前往商机雷达寻找项目线索></div>
<div class="btn btn_cancel h32" @click="cancel">取消</div>
<div class="btn btn_primary h32">新建商机</div>
</div>
</div>
</el-dialog>
</el-card>
</div>
</template>
......@@ -292,13 +349,21 @@ export default {
value: 'jiaohu',
label: '组件交互文档'
}]
}]
}],
dialogVisible:false,
}
},
created() {
},
methods: {
//新建项目
showNew(){
this.dialogVisible = true
},
cancel(){
this.dialogVisible = false
},
toDetail(){
let Id = '111'
this.$router.push({ path: '/project/projectList/detail', query: Id });
......@@ -331,10 +396,6 @@ export default {
}
</script>
<style lang="scss" scoped>
.app-container{
padding: 0;
}
.noborder{
position: relative;
}
......@@ -484,21 +545,6 @@ export default {
}
.det-tips{
padding: 8px 0 ;
.tips{
display: inline-block;
padding: 4px 8px;
border-radius: 2px;
font-size: 12px;
margin-right: 8px;
&.tip1{
background-color: #E4F3FD;
color: #41A1FD;
}
&.tip2{
background-color: #F3F3FF;
color: #8491E8;
}
}
}
.det-contets{
padding: 4px 0 16px;
......@@ -536,4 +582,15 @@ export default {
height: 20px;
}
}
.popbot{
.wordprimary{
padding-right: 26px;
float: left;
margin-top: 6px;
}
.btn_primary{
padding: 0;
}
}
</style>
<template>
<div class="content">
<div>
<div class="content">
<div class="content_item">
<div class="label">项目名称</div>
<div class="content_right">
<el-input class="ename_input"
placeholder="请输入项目名称关键字" v-model="ename" @input="enamebtn('ename',ename)"></el-input>
<template v-if="ename">
<span v-for=" (item,k) in enameQueryTypeList" :key="k">
<el-radio v-model="enameQueryType" :label="item.key">{{item.value}}</el-radio>
</span>
</template>
</div>
</div>
<div class="content_item">
<div class="label">项目主体</div>
<div class="content_right">
<div class="item_ckquery_list" >
<div class="ckquery_list_right">
<el-input @input="registerIpt(registerCount)" ref="inp"
v-model="registerCount" autocomplete="off" type="text"
class="register_count_ipt" placeholder="请输入企业名称">
<el-dropdown trigger="click" slot="prepend" style="cursor:pointer;"
@command="changeCommand">
<span class="el-dropdown-link">
{{countType.value}}<i class="el-icon-caret-bottom"></i>
</span>
<el-dropdown-menu class="default_header_dropdown" slot="dropdown">
<el-dropdown-item v-for="(item,k) in countTypelist" :key="k" :command="item">{{item.value}}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</el-input>
</div>
</div>
</div>
</div>
<div class="content_item">
<div class="label">项目地区</div>
<div class="content_right">
<div class="select-popper">
<div class=" select-caret" :class="addressType.length>0?'select-active':''">
<span>
项目地区{{addressType.length>0?(addressType.length+'项'):''}}
</span>
<i class="el-icon-caret-bottom"></i>
</div>
<el-cascader ref="address" class="cascader-region select-location" @input="addressListbtn" v-model="addressType"
:options="addressList" :props="props" collapse-tags></el-cascader>
</div>
</div>
</div>
<div class="content_item">
<div class="label">项目类型</div>
<div class="content_right">
<div class="content-projecttype">
<template v-for="(item,i) in projectTypeList">
<span class="projecttype" :class="item.status?'activetype':''">
{{item.value}}
</span>
</template>
</div>
</div>
</div>
<div class="content_item content_item_padding0">
<div class="geduan">
</div>
</div>
<div class="content_item content_item_padding0">
<div class="search-new">
<span>查询</span>
<span>重置</span>
</div>
</div>
</div>
<div class="bottomlist">
<div class="bottomlist-title">
<p>共有{{total}}条</p>
<p>
<img src="@/assets/images/EXCEL.png" alt="">
<span>导出EXCEL</span>
</p>
</div>
<ul class="bottomlist-content">
<li class="bottomlist-list">
<p class="list-titel">
<router-link :to="'/radar/debtProject/details/'+ 1" tag="a" class="list-titel-a">轨道交通13号线扩能提升工程</router-link>
</p>
<div class="content-label">
<span class="list-label">江西省-南昌市</span>
</div>
<div class="list-content">
<p class="list-content-text">
<span>项目类型:</span>
<span>轨道交通</span>
</p>
<p class="list-content-text">
<span>项目总投资(亿):</span>
<span>26</span>
</p>
<p class="list-content-text">
<span>项目资本金(亿):</span>
<span>96</span>
</p>
<p class="list-content-text">
<span>专项债金额(亿):</span>
<span>200</span>
</p>
</div>
<div class="list-content">
<p class="list-content-text">
<span>项目主体:</span>
<span class="blue">江西合胜合招标咨询有限公司</span>
</p>
<p class="list-content-text">
<span>主管部门:</span>
<span class="blue">江西胜合招标咨询有限公司</span>
</p>
<p class="list-content-text">
<span>实施单位:</span>
<span class="blue">江西合胜合招标咨询有限公司</span>
</p>
</div>
</li>
</ul>
<div class="pagination clearfix" v-show="total>0">
<el-pagination
background
:page-size="pageSize"
:current-page="page"
@current-change="handleCurrentChange"
layout="prev, pager, next"
:total="total">
</el-pagination>
</div>
</div>
</div>
</template>
<script>
import jsk_data from '../../../../../public/jsk.json';
export default {
name: 'debtProject',
data() {
return {
ename:'',
enameQueryTypeList: [{
key: 'and',
status: false,
value: '模糊搜索',
keyid: 'businessScope'
},
{
key: 'or',
status: true,
value: '精准匹配',
keyid: 'businessScope'
},
],
enameQueryType: 'or',
registerCount:'',
countTypelist: [{
key: '1',
value: '项目主体'
},
{
key: '2',
value: '主管部门'
},
{
key: '3',
value: '实施单位'
}
],
countType: {
key: '3',
value: '实施单位'
},
addressList: [],
addressType: [],
props: {
multiple: true,
expandTrigger: "hover",
value: 'id'
},
projectTypeList: [
{
status: true,
value: '不限',
keyid: 'projectType',
key: '不限'
},
{
value: '房屋建筑工程',
status: false,
keyid: 'projectType',
key: '房屋建筑工程'
},
{
value: '市政基础设施工程',
status: false,
keyid: 'projectType',
key: '市政基础设施工程'
},
{
value: '其他',
status: false,
keyid: 'projectType',
key: '其他'
},
{
value: '空白',
status: false,
keyid: 'projectType',
key: '空白'
},
],
projectTypeText: ['不限'],
arrList:[],
total:6000,
page:1,
pageSize:20
}
},
created() {},
created() {
this.addressListfn();
},
methods: {
// 经营范围
enamebtn(key, text) {
var arr = this.ename.trim().split(' ')
for (var i = 0; i < arr.length; i++) {
if (!arr[i]) {
arr.splice(i, 1)
i--
}
}
var data = {
title:'项目名称:',
key: arr,
value: arr,
keyid: key
}
if (text.trim()) {
var n = -1;
for (let x = 0; x < this.arrList.length; x++) {
if (this.arrList[x].keyid == data.keyid) {
n = x;
}
}
if (n == -1) {
this.arrList.push(data)
} else {
this.arrList[n] = data;
}
} else {
for (let x = 0; x < this.arrList.length; x++) {
if (this.arrList[x].keyid == data.keyid) {
this.arrList.splice(x, 1);
x--;
}
}
}
},
registerIpt(registerCount){
},
changeCommand(str) {
this.countType=str;
},
addressListfn() {
var searchid;
if(this.$route.name=='search-combinedYN'){
searchid='530000'
}else{
searchid=''
}
var str = [];
for (let x = 0; x < 3; x++) {
for (let i = 0; i < jsk_data.length; i++) {
if (jsk_data[i].regionLevel == x + 1 && x + 1 == 1) {
if(searchid){
if (jsk_data[i].id == searchid) {
str.push({
id: jsk_data[i].id,
label: jsk_data[i].regionName,
short: jsk_data[i].short,
value: jsk_data[i].parentId,
children: jsk_data[i].id == 900000 ? undefined : [],
});
}
}else{
str.push({
id: jsk_data[i].id,
label: jsk_data[i].regionName,
short: jsk_data[i].short,
value: jsk_data[i].parentId,
children: jsk_data[i].id == 900000 ? undefined : [],
});
}
} else if (jsk_data[i].regionLevel == x + 1 && x + 1 == 2 && str) {
for (let j = 0; j < str.length; j++) {
if (str[j].id == jsk_data[i].parentId) {
str[j].children.push({
id: jsk_data[i].id,
label: jsk_data[i].regionName,
short: jsk_data[i].short,
value: jsk_data[i].parentId,
children: [],
});
}
}
} else if (jsk_data[i].regionLevel == x + 1 && x + 1 == 3) {
for (let j = 0; j < str.length; j++) {
if (str[j].children) {
for (let k = 0; k < str[j].children.length; k++) {
if (str[j].children[k].id == jsk_data[i].parentId) {
str[j].children[k].children.push({
id: jsk_data[i].id,
label: jsk_data[i].regionName,
short: jsk_data[i].short,
value: jsk_data[i].parentId,
});
}
}
}
}
}
}
}
this.addressList = str;
},
// 项目属地
addressListbtn() {
for (let i = 0; i < this.arrList.length; i++) {
if (this.arrList[i].keyid == 'address') {
this.arrList.splice(i, 1);
i--;
}
}
let arr = (this.$refs.address.getCheckedNodes())
let provinceCode = [],
cityCode = [],
countyCode = [];
let province = [],
city = [],
county = [];
for (var i in arr) {
if (arr[i].parent) {
if (!arr[i].parent.checked) {
arr[i].hasChildren && cityCode.push(arr[i].value);
!arr[i].hasChildren && countyCode.push(arr[i].value);
}
} else {
provinceCode.push(arr[i].value)
}
}
for (let j = 0; j < jsk_data.length; j++) {
if (provinceCode.length > 0) {
for (let i = 0; i < provinceCode.length; i++) {
if (provinceCode[i] == jsk_data[j].id) {
province.push({
value: jsk_data[j].regionName,
key: provinceCode[i]
})
}
}
}
if (cityCode.length > 0) {
for (let i = 0; i < cityCode.length; i++) {
if (cityCode[i] == jsk_data[j].id) {
city.push({
value: jsk_data[j].regionName,
key: cityCode[i]
})
}
}
}
if (countyCode.length > 0) {
for (let i = 0; i < countyCode.length; i++) {
if (countyCode[i] == jsk_data[j].id) {
county.push({
value: jsk_data[j].regionName,
key: countyCode[i]
})
}
}
}
}
if (province.length > 0 || city.length > 0 || county.length > 0) {
let arrlist = [];
if (province.length > 0) {
for (let i in province) {
arrlist.push(province[i].value)
}
}
if (city.length > 0) {
for (let i in city) {
arrlist.push(city[i].value)
}
}
if (county.length > 0) {
for (let i in county) {
arrlist.push(county[i].value)
}
}
console.log(this.addressType);
this.arrList.push({
value: arrlist,
keyid: 'address',
provinceCode: provinceCode,
cityCode: cityCode,
countyCode: countyCode,
title: '项目属地:',
key: '',
addressType:this.addressType
})
}
// this.landMarketDto = obj
},
handleCurrentChange(val){
}
}
}
</script>
......@@ -24,8 +455,194 @@
<style lang="scss" scoped>
.content{
padding: 0px 16px;
border-radius: 4px 4px 4px 4px;
background: #FFFFFF;
.content_item{
padding-top: 12px;
display: flex;
align-items: center;
.label{
width: 84px;
font-size: 14px;
font-weight: 400;
color: rgba(35,35,35,0.8);
}
.content_right{
.ename_input{
width: 640px;
margin-right: 20px;
}
}
.item_ckquery_list {
display: flex;
}
.item_ckquery_list .el-input__icon {
position: relative;
top: 1px;
}
.ckquery_list_right {
width: 640px;
}
.register_count_ipt{
margin-left: 0px;
}
.register_count_ipt .el-input__inner{
width: 174px;
}
::v-deep .el-input-group__prepend{
padding: 0 8px;
}
.content-projecttype{
display: flex;
align-items: center;
justify-content: center;
.projecttype{
font-weight: 400;
color: #232323;
padding: 1px 5px;
margin-right: 4px;
cursor: pointer;
border-radius: 3px 3px 3px 3px;
font-size: 14px;
}
.projecttype:first-child{
padding-left: 0px;
}
.projecttype:hover{
background: #F3F4F5;
padding: 1px 5px;
}
.activetype{
background: #F3F4F5;
padding: 1px 5px !important;
}
}
}
.content_item_padding0{
padding: 0;
}
}
.bottomlist{
width: 100%;
background-color: #FFFFFF;
border-radius: 4px 4px 4px 4px;
.bottomlist-title{
display: flex;
justify-content: end;
align-items: center;
margin-top: 12px;
padding: 24px ;
border-bottom: 1px solid #EFEFEF;
p:first-child{
font-size: 12px;
font-weight: 400;
color: #3D3D3D;
margin-right: 10px;
}
p:last-child{
font-size: 14px;
font-weight: 400;
color: rgba(35,35,35,0.8);
}
img{
width: 18px;
height: 18px;
}
}
.bottomlist-content{
padding: 14px;
padding-bottom: 0px;
}
.bottomlist-list{
font-size: 14px;
border-bottom: 1px solid #EFEFEF;
padding-bottom: 14px;
.list-titel{
font-size: 16px;
font-weight: 700;
color: #3D3D3D;
line-height: 19px;
.list-titel-a{
text-decoration: none;
color:#3D3D3D;
}
a:hover, a:visited, a:link, a:active{
color:#3D3D3D;
}
}
.content-label{
margin-top: 7px;
.list-label{
background: #F3F3FF;
color: #8491E8;
border-radius: 1px 1px 1px 1px;
padding: 3px 7px;
font-size: 12px;
}
}
.list-content{
margin-top: 3px;
display: flex;
justify-content: start;
align-items: center;
.list-content-text{
margin-top: 7px;
display: flex;
justify-content: start;
align-items: center;
margin-right: 27px;
font-size: 14px;
span:first-child{
font-weight: 400;
color: rgba(35,35,35,0.4);
line-height: 15px
}
span:last-child{
font-weight: 400;
color: rgba(35,35,35,0.8);
line-height: 15px
}
.blue{
color: #0081FF !important;
cursor: pointer;
}
}
}
}
.bottomlist-list:hover{
background: #F6F9FC;
cursor: pointer;
}
.pagination{
padding: 14px ;
.el-pagination{
float: right;
}
}
}
</style>
\ No newline at end of file
<template>
<div class="app-container qyzx-details">
<div class="content main1">
<div class="title"><img src="@/assets/images/financing/head_icon.png" />重庆至黔江高速铁路项目一项目详情</div>
<p>本项目是厦渝高铁通道的重要组成部分,是成渝地区、海西经济区间高速客运交流的主通道;是成渝地区与华南、华东地区间客运交流的辅助通道;是以重庆主城为核心的城际客流的快速客运通道;
是整合区域旅游资源,促进沿线旅游资源开发的黄金旅游通道。线路起自重庆站,经巴南、南川、武隆、彭水,终至江,正线全长265公里,设8座,其中新建6座。
同步建设重庆东动车所动车出入段,重庆枢纽东环联络线。</p>
</div>
<div class="content main2">
<div class="common-title">项目筹资</div>
<div class="main2-box">
<div class="list">
<div class="item color1">
<div class="item-left">
<h4>535.00<span>亿</span></h4>
<p>项目总投资额</p>
</div>
<img class="img" src="@/assets/images/financing/icon1.png" />
</div>
<div class="item color2">
<div class="item-left">
<h4>535.00<span>亿</span></h4>
<p>项目资本金</p>
</div>
<img class="img" src="@/assets/images/financing/icon2.png" />
</div>
<div class="item color3">
<div class="item-left">
<h4>535.00<span>亿</span></h4>
<p>专项债融资</p>
</div>
<img class="img" src="@/assets/images/financing/icon3.png" />
</div>
<div class="item color4">
<div class="item-left">
<h4>535.00<span>亿</span></h4>
<p>专项债用作资本金</p>
</div>
<img class="img" src="@/assets/images/financing/icon4.png" />
</div>
</div>
<div class="list">
<div class="item color4">
<div class="item-left">
<h4>535.00<span>亿</span></h4>
<p>其他资金</p>
</div>
<img class="img" src="@/assets/images/financing/icon5.png" />
</div>
<div class="item color3">
<div class="item-left">
<h4>535.00<span>亿 / 10只</span></h4>
<p>专项债融资额/专项债只数</p>
</div>
<img class="img" src="@/assets/images/financing/icon6.png" />
</div>
<div class="item color4">
<div class="item-left">
<h4>535.00<span>亿</span></h4>
<p>其他融资</p>
</div>
<img class="img" src="@/assets/images/financing/icon7.png" />
</div>
<div class="item color2">
<div class="item-left">
<h4>535.00<span>亿</span></h4>
<p>政府安排资金</p>
</div>
<img class="img" src="@/assets/images/financing/icon8.png" />
</div>
</div>
</div>
</div>
<div class="content main3">
<div class="common-title">项目保障</div>
<div class="main3-box">
<p>
<label class="label">项目总收益/项目总债务融资本息(覆盖倍数)</label>
<span>1.36倍</span>
</p>
<p>
<label class="label">项目总收益/项目总地方债券融资本息</label>
<span>1.96倍</span>
</p>
<p>
<label class="label">项目总收益/项目总投资</label>
<span>1.96倍</span>
</p>
<p>
<label class="label">项目总收益/项目总地方债券融资本金</label>
<span>1.96倍</span>
</p>
<p>
<label class="label">项目总收益/项目总债务融资本金</label>
<span>2.45倍</span>
</p>
<p>
<label class="label">项目预测总收益</label>
<span>2.45倍</span>
</p>
</div>
</div>
<div class="content main4">
<div class="common-title">项目当事人</div>
<div class="main4-box">
<label class="label">项目主体</label>
<span>重庆铁路投资集团有限公司</span>
<label class="label">主管部门</label>
<span>-</span>
<label class="label">实施单位</label>
<span>重庆铁路投资集团有限公司</span>
</div>
</div>
<div class="content main5">
<div class="common-title">专项债</div>
<div class="table-item">
<el-table
:data="tableData"
element-loading-text="Loading"
border
fit
highlight-current-row
>
<el-table-column prop="name" label="债券简称">
<template slot-scope="scope">
<router-link :to="'/macro/financing/details/'+ scope.row.id" tag="a" class="a-link">{{ scope.row.name}}</router-link>
</template>
</el-table-column>
<el-table-column prop="name" label="招标日期" width="220" />
<el-table-column prop="gm" label="专项债规模(亿)" width="260" />
<el-table-column prop="gm" label="用于项目规模(亿)" width="260" />
<el-table-column prop="zj" label="是否资本金" width="200" />
</el-table>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'debtProjectDetails',
data() {
return {
id:'',
tableData:[
{
id:0,
name:'20重庆债14(2005938)',
time:'2020-09-18',
gm:'285.24',
zj:'否',
}
]
}
},
created() {
console.log(this.$route.params)
this.id=this.$route.params.id
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.app-container{
padding: 0;
}
.qyzx-details{
.tab{
font-size: 12px;
color:#A1A1A1;
span{
color:#232323;
}
}
.content{
margin-top: 16px;
background: #FFFFFF;
padding: 16px;
border-radius: 4px;
}
.common-title{
margin-bottom: 8px;
}
.main1{
.title{
color: #232323;
font-size: 16px;
line-height: 28px;
font-weight: bold;
margin-bottom: 8px;
text-align: left;
img{
width: 28px;
height: 28px;
margin-bottom: -9px;
margin-right: 17px;
}
}
p{
color: #3D3D3D;
font-size: 14px;
margin: 0;
}
}
.main2{
.list{
display: flex;
margin: 16px 0;
}
.item{
width: 24.5%;
margin-right: 16px;
height: 100px;
display: flex;
justify-content: space-between;
border-radius: 8px;
.item-left{
margin-left: 16px;
margin-top: 24px;
h4{
color: #232323;
font-size: 22px;
line-height: 22px;
font-weight: bold;
margin: 0;
span{
font-weight: 400;
margin-left: 4px;
font-size: 18px;
}
}
p{
margin: 0;
color: #3D3D3D;
font-size: 14px;
padding-top: 8px;
}
}
.img{
width: 56px;
height: 56px;
margin-top: 22px;
margin-right: 12px;
}
}
.color1{
background: rgba(246,190,59,0.08);
border: 1px solid rgba(246,190,59,0.2);
}
.color2{
background: rgba(148,216,196,0.102);
border: 1px solid rgba(73,187,154,0.1);
}
.color3{
background: rgba(57,100,199,0.06);
border: 1px solid rgba(57,100,199,0.1);
}
.color4{
background: rgba(0,129,255,0.04);
border: 1px solid rgba(0,129,255,0.1);
}
}
.main3{
.main3-box{
margin-top: 22px;
p{
margin: 0;
display: inline-block;
width: 50%;
border-top: 1px solid #E6E9F0;
border-left: 1px solid #E6E9F0;
}
p:nth-child(2n){
border-right: 1px solid #E6E9F0;
}
p:nth-child(5){
border-bottom: 1px solid #E6E9F0;
}
p:last-child{
border-bottom: 1px solid #E6E9F0;
}
.label{
width: 60%;
background: #F0F3FA;
display: inline-block;
height: 40px;
font-weight: 400;
border-right: 1px solid #E6E9F0;
line-height: 40px;
font-size: 12px;
color: rgba(35,35,35,0.8);
padding-left: 12px;
}
span{
width: 40%;
display: inline-block;
height: 40px;
line-height: 40px;
padding-left: 12px;
font-size: 12px;
}
}
}
.main4{
.main4-box{
margin-top: 22px;
.label{
width: 14%;
background: #F0F3FA;
border: 1px solid #E6E9F0;
display: inline-block;
height: 40px;
line-height: 40px;
font-size: 12px;
color: rgba(35,35,35,0.8);
padding-left: 12px;
}
span{
width: 19%;
display: inline-block;
height: 40px;
line-height: 40px;
border-top: 1px solid #E6E9F0;
border-bottom: 1px solid #E6E9F0;
padding-left: 12px;
font-size: 12px;
}
span:last-child{
width: 20%;
border-right: 1px solid #E6E9F0;
}
}
}
.main5{
.table-item{
margin-top: 22px;
}
}
}
</style>
......@@ -20,6 +20,7 @@
</template>
<script>
import debtProject from "./components/debtProject/index.vue";
import "@/assets/styles/public.css";
export default {
name: 'radar',
components: { debtProject },
......@@ -87,7 +88,7 @@
</script>
<style lang="scss" scoped>
@import "~@/assets/styles/public.scss";
.app-container {
margin: 12px 24px;
padding: 0;
......@@ -116,7 +117,7 @@
.app-container .combined-title .title-right {
display: flex;
width: 1044px;
width: 100%;
position: relative;
height: 40px;
}
......@@ -150,7 +151,7 @@
height: 1px;
background-color: #EEEEEE;
position: absolute;
bottom: 0px;
bottom: -1px;
left: 0;
z-index: 1;
}
......@@ -168,7 +169,7 @@
.tab div {
cursor: pointer;
color: #666666;
font-size: 14px;
font-size: 16px;
text-align: center;
margin-right: 32px;
line-height: 40px;
......
package com.dsk.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 区域经济数据表
* </p>
*
* @author xzr
* @since 2023-05-19
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class OpRegionalEconomicDataV1 implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 年份
*/
private Integer year;
/**
* 省
*/
private String province;
/**
* 市
*/
private String city;
/**
* 区
*/
private String area;
/**
* GDP(亿元)
*/
private Double gdp;
/**
* GDP增长值
*/
private Double gdpAddValue;
/**
* GDP增速(%)
*/
private Double gdpGrowth;
/**
* 人均GDP(元)
*/
private Double gdpPerCapita;
/**
* 第一产业增加值(亿元)
*/
private Double piAddValue;
/**
* 第二产业增加值(亿元)
*/
private Double siAddValue;
/**
* 第三产业增加值(亿元)
*/
private Double tiAddValue;
/**
* 人口(万人)
*/
private Double population;
/**
* 人口增长率(%)
*/
private Double populationGrowthRate;
/**
* 人口增加值
*/
private String populationAddValue;
/**
* 工业增加值(亿元)
*/
private Double industryAddValue;
/**
* 工业总产值(亿元)
*/
private Double industryTotalValue;
/**
* 固定资产投资(亿元)
*/
private Double fixedInvestment;
/**
* 房地产开发投资(亿元)
*/
private Double realEstateInvestment;
/**
* 进出口总额(亿美元)
*/
private Double eximTotalValue;
/**
* 社会消费品零售总额(亿元)
*/
private Double trscg;
/**
* 城镇居民人均可支配收入(元)
*/
private Double urbanPcdi;
/**
* 一般公共预算收入(亿元)
*/
private Double gbr;
/**
* 一般公共预算收入增速(%)
*/
private Double gbrGrowth;
/**
* 税收收入(亿元)
*/
private Double taxIncome;
/**
* 转移性收入(亿元)
*/
private Double transferIncome;
/**
* 上级补助收入(亿元)
*/
private Double superiorSubsidyIncome;
/**
* 一般公共预算支出(亿元)
*/
private Double gbe;
/**
* 政府性基金收入(亿元)
*/
private Double govFundIncome;
/**
* 土地出让收入(亿元)
*/
private Double landTransferIncome;
/**
* 政府性基金支出(亿元)
*/
private Double govFundExpenditure;
/**
* 国有资本经营收入(亿元)
*/
private Double soecoi;
/**
* 国有资本经营支出(亿元)
*/
private Double soecoe;
/**
* 地方政府债务余额(亿元)
*/
private Double govDebtBalance;
/**
* 一般债余额(亿元)
*/
private Double generalDebtBalance;
/**
* 专项债余额(亿元)
*/
private Double specialDebtBalance;
/**
* 地方政府债务限额(亿元)
*/
private Double govDebtLimit;
/**
* 城投平台有息债务(亿元)
*/
private Double uipInterestBearingDebt;
/**
* 财政自给率(%)
*/
private Double fiscalSelfSufficiencyRate;
/**
* 负债率(%)政府负债率(%)
*/
private Double govDebtToGdpRate;
/**
* 负债率(宽口径)(%)政府负债率(宽口径)(%)
*/
private Double govDebtToGdpRateWild;
/**
* 债务率(%)政府债务率(%)
*/
private Double govDebtRate;
/**
* 债务率(宽口径)(%)政府债务率(宽口径)(%)
*/
private Double govDebtRateWild;
/**
* 状态码
*/
private Integer isDeal;
/**
* 状态码2
*/
private Integer isStatua;
/**
* 全字段生成md5
*/
private String md5;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
}
package com.dsk.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 城投平台财务数据表
* </p>
*
* @author xzr
* @since 2023-05-19
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class OpUipFinancialData implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 企业名称
*/
private String companyName;
/**
* 企业id
*/
private Long companyId;
/**
* 省
*/
private String province;
/**
* 省id
*/
private Integer provinceId;
/**
* 市
*/
private String city;
/**
* 市id
*/
private Integer cityId;
/**
* 区
*/
private String area;
/**
* 区id
*/
private Integer areaId;
/**
* 最新报告期
*/
private Date latestReportPeriod;
/**
* 最新评级
*/
private String bratingSubjectLevel;
/**
* 股东背景
*/
private String shareholderBg;
/**
* 实际控制人
*/
private String actualController;
/**
* 股权关系
*/
private String equityRelationship;
/**
* 行政级别
*/
private String uipExecutiveLevel;
/**
* 平台重要性
*/
private String platformImportance;
/**
* 债券余额(亿元)
*/
private Double bondBalance;
/**
* 所属开发区
*/
private String developmentZone;
/**
* 城投业务类型
*/
private String uipBusinessType;
/**
* 总资产(亿元)
*/
private Double totalAssets;
/**
* 归母净资产(亿元)
*/
private Double belongNetAssets;
/**
* 货币资金(亿元)
*/
private Double monetaryFunds;
/**
* 土地资产(亿元)
*/
private Double landAssets;
/**
* 受限资产(亿元)
*/
private Double restrictedAssets;
/**
* 应收账款(亿元)
*/
private Double accountsReceivable;
/**
* 其他应收款(亿元)
*/
private Double otherReceivable;
/**
* 公益性&准公益性主营占比(%)
*/
private Double econData001;
/**
* 应收账款来自政府占比(%)
*/
private Double receivableFromGovRatio;
/**
* 政府补助(亿元)
*/
private Double govSubsidy;
/**
* 专项应付款(亿元)
*/
private Double specialPayable;
/**
* 营业收入(亿元)
*/
private Double operatingIncome;
/**
* 归母净利润(亿元)
*/
private Double belongNetProfit;
/**
* 净资产收益率(%)
*/
private Double roe;
/**
* 经营现金流量净额(亿元)
*/
private Double netOperatingCashFlow;
/**
* 筹资现金流量净额(亿元)
*/
private Double netFinancingCashFlow;
/**
* 投资现金流量净额(亿元)
*/
private Double netInvestmentCashFlow;
/**
* 总负债(亿元)
*/
private Double totalLiabilities;
/**
* 城投平台有息债务(亿元)
*/
private Double uipInterestBearingDebt;
/**
* 有息债务/总负债(%)
*/
private Double econData002;
/**
* 资产负债率(%)
*/
private Double tdr;
/**
* 综合融资成本(%)
*/
private Double ofcb;
/**
* 现金比率
*/
private Double cashRatio;
/**
* 现金流量比率
*/
private Double cashFlowRatio;
/**
* 现金到期债务比
*/
private Double cashDebtRatio;
/**
* 授信余额(亿元)
*/
private Double creditBalance;
/**
* 授信余额/全部债务(%)
*/
private Double econData003;
/**
* EBITDA利息保障倍数
*/
private String ebitdaIcr;
/**
* 私募债余额占比(%)
*/
private Double ppnBalanceProp;
/**
* 一年内到期债券占比(%)
*/
private Double econData004;
/**
* 债券余额/有息债务(%)
*/
private Double econData005;
/**
* 借款(亿元)
*/
private Double loan;
/**
* 借款/有息债务(%)
*/
private Double econData006;
/**
* 非标余额(亿元)
*/
private Double nonStandardBalance;
/**
* 非标余额/有息债务(%)
*/
private Double nonStandardRatio;
/**
* 对外担保金额(亿元)
*/
private Double guaranteeAmount;
/**
* 对外担保比例(%)
*/
private Double guaranteeRatio;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 状态码1
*/
private Integer isDeal;
/**
* 状态码2
*/
private Integer isStatus;
/**
* 备用状态码1
*/
private Integer state1;
/**
* 备用状态2
*/
private Integer state2;
}
package com.dsk.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 专项债债券信息表
* </p>
*
* @author xzr
* @since 2023-05-19
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SpecialBondInformationV1 implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 项目表uuid
*/
@TableId(value = "project_uuid", type = IdType.ID_WORKER_STR)
private String projectUuid;
/**
* 专项债项目唯一标识
*/
private String specialBondUuid;
/**
* 债券名称
*/
private String bondName;
/**
* 债券简称
*/
private String bondAbbreviation;
/**
* 招标日期
*/
private Date tenderDate;
/**
* 债券发行规模
*/
private String actualBondIssueScale;
/**
* 专项债用于项目规模(亿)
*/
private String isUsedProjectScale;
/**
* 是否用资本金
*/
private String isUsedCapital;
/**
* 债券评级
*/
private String bondLevel;
/**
* 信用评级机构
*/
private String creditRatingAgency;
/**
* 债券期限
*/
private String actualBondDuration;
/**
* 发行利率
*/
private String bondIssueRate;
/**
* 发债主体
*/
private String ratingSubject;
/**
* 评级报告url(七牛云)
*/
private String ratingReportUrl;
}
package com.dsk.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* <p>
* 专项债项目表
* </p>
*
* @author xzr
* @since 2023-05-19
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SpecialBondProjectsV1 implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 专项债券唯一标识
*/
private String specialBondUuid;
/**
* 项目名称
*/
private String projectName;
/**
* 省
*/
private String province;
/**
* 省id
*/
private Integer provinceId;
/**
* 市
*/
private String city;
/**
* 市id
*/
private Integer cityId;
/**
* 区
*/
private String area;
/**
* 区id
*/
private Integer areaId;
/**
* 专项债项目类型
*/
private String specialBondProjectType;
/**
* 建设规模
*/
private String projectScale;
/**
* 偿债资金来源
*/
private String sourceOfRepayment;
/**
* 项目主体
*/
private String projectEntity;
/**
* 项目主体id
*/
private Long projectEntityId;
/**
* 主管部门
*/
private String chargeDepartment;
/**
* 实施单位
*/
private String piu;
/**
* 实施单位id
*/
private Long piuId;
/**
* 项目总投资
*/
private String projectTotalInvestment;
/**
* 项目资本金
*/
private String projectCapital;
/**
* 专项债融资
*/
private String specialBondFinancing;
/**
* 专项债用作资本金
*/
private String specialCapital;
/**
* 其他资金
*/
private String otherFunds;
/**
* 专项债融资额
*/
private String specialBondFinancingAmount;
/**
* 专项债只数
*/
private String specialBondIssueNumber;
/**
* 其他融资
*/
private String otherFinancing;
/**
* 政府安排资金
*/
private String govSupportFunds;
/**
* 项目总收益/项目总债务融资本息(覆盖倍数)
*/
private String econData007;
/**
* 项目总收益/项目总地方债券融资本息
*/
private String econData008;
/**
* 项目总收益/项目总投资
*/
private String econData009;
/**
* 项目总收益/项目总地方债券融资本金
*/
private String econData010;
/**
* 项目总收益/项目总债务融资本金
*/
private String econData011;
/**
* 项目预测总收益(亿)
*/
private String projectForecastTotalRevenue;
}
package com.dsk.system.domain.customer;
import com.baomidou.mybatisplus.annotation.*;
import com.dsk.common.annotation.Excel;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.context.annotation.Import;
import java.io.Serializable;
import java.util.Date;
......@@ -30,6 +32,7 @@ public class Customer implements Serializable {
/**
* 客户名称(企业名称)
*/
@Excel(name = "企业名称")
private String companyName;
/**
* 法定代表人
......@@ -39,6 +42,22 @@ public class Customer implements Serializable {
* 注册资本
*/
private String registerCapital;
/**
* 省id
*/
private Integer provinceId;
/**
* 市id
*/
private Integer cityId;
/**
* 区县id
*/
private Integer districtId;
/**
* 注册地址
*/
private String registerAddress;
/**
* 社会统一信用代码
*/
......@@ -52,9 +71,13 @@ public class Customer implements Serializable {
*/
private String companyLevel;
/**
* 信用等级(credit_level_type)
* 企业主体评级(credit_level_type)
*/
private String creditLevel;
/**
* 客户等级(customer_level_type)
*/
private String customerLevel;
/**
* 上级公司(控股单位)
*/
......
......@@ -38,7 +38,7 @@ public class CustomerUser implements Serializable {
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date careteTime;
private Date createTime;
/**
* 修改时间
*/
......
......@@ -38,6 +38,10 @@ public class CustomerListVo {
* 注册资本(字符串)
*/
private String registerCapital;
/**
* 注册地址
*/
private String registerAddress;
/**
* 社会统一信用代码
*/
......@@ -51,9 +55,13 @@ public class CustomerListVo {
*/
private String companyLevel;
/**
* 信用等
* 企业主体评
*/
private String creditLevel;
/**
* 客户等级
*/
private String customerLevel;
/**
* 上级公司
*/
......
......@@ -94,7 +94,7 @@ public class BusinessBrowseVo {
private Integer backlogCount;
/**
* 相关企业统计
* 资料文档统计
*/
private Integer relateCompanyCount;
......
......@@ -58,4 +58,10 @@ public interface BusinessBacklogMapper
* @return 结果
*/
public int deleteBusinessBacklogByIds(Long[] ids);
/**
* 修改工作待办逾期状态
* @return
*/
int updateBacklogState();
}
package com.dsk.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.system.domain.OpRegionalEconomicDataV1;
/**
* <p>
* 区域经济数据表 Mapper 接口
* </p>
*
* @author xzr
* @since 2023-05-19
*/
public interface OpRegionalEconomicDataV1Mapper extends BaseMapper<OpRegionalEconomicDataV1> {
}
package com.dsk.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.system.domain.OpUipFinancialData;
/**
* <p>
* 城投平台财务数据表 Mapper 接口
* </p>
*
* @author xzr
* @since 2023-05-19
*/
public interface OpUipFinancialDataMapper extends BaseMapper<OpUipFinancialData> {
}
package com.dsk.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.system.domain.SpecialBondInformationV1;
/**
* <p>
* 专项债债券信息表 Mapper 接口
* </p>
*
* @author xzr
* @since 2023-05-19
*/
public interface SpecialBondInformationV1Mapper extends BaseMapper<SpecialBondInformationV1> {
}
package com.dsk.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.system.domain.SpecialBondProjectsV1;
/**
* <p>
* 专项债项目表 Mapper 接口
* </p>
*
* @author xzr
* @since 2023-05-19
*/
public interface SpecialBondProjectsV1Mapper extends BaseMapper<SpecialBondProjectsV1> {
}
package com.dsk.system.service;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.OpRegionalEconomicDataV1Dto;
/**
* @ClassName EconomicService
......@@ -18,5 +19,43 @@ public interface EconomicService {
*@Author: Dgm
*@date: 2023/5/18 10:25
*/
AjaxResult nationalPage();
AjaxResult nationalList(OpRegionalEconomicDataV1Dto dto);
/***
*@Description: 全国经济大全详情
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:25
*/
AjaxResult details(Integer id);
/***
*@Description: 地区经济统计
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:25
*/
AjaxResult statisticsRegional(OpRegionalEconomicDataV1Dto dto);
/***
*@Description: 地区经济-分页列表
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:25
*/
AjaxResult regionalList(OpRegionalEconomicDataV1Dto dto);
/***
*@Description: 地区经济-分页列表
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:25
*/
AjaxResult regionalComparison(OpRegionalEconomicDataV1Dto dto);
}
package com.dsk.system.service;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.ComposeQueryDto;
/**
* @ClassName EconomicService
* @Description 区域企业业务层
* @Author Dgm
* @Date 2023/5/18 10:17
* @Version 1.00
*/
public interface RegionalEnterprisesService {
/***
*@Description: 区域企业分页列表
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:25
*/
AjaxResult page(ComposeQueryDto compose);
}
package com.dsk.system.service;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.SpecialPurposeBondsDto;
/**
* @ClassName EconomicService
* @Description 专项债项目业务层
* @Author Dgm
* @Date 2023/5/18 10:17
* @Version 1.00
*/
public interface SpecialPurposeBondsService {
/***
*@Description: 专项债项目分页列表
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:25
*/
AjaxResult page(SpecialPurposeBondsDto dto);
/***
*@Description: 专项债项目详情
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:25
*/
AjaxResult details(String id);
/***
*@Description: 项目类别统计
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:25
*/
AjaxResult bondStatistics(SpecialPurposeBondsDto dto);
}
package com.dsk.system.service;
import com.dsk.common.core.domain.AjaxResult;
/**
* @ClassName EconomicService
* @Description 城投平台业务层
* @Author Dgm
* @Date 2023/5/18 10:17
* @Version 1.00
*/
public interface UrbanInvestmentPlatformService {
/***
*@Description: 城投平台分页列表
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:25
*/
AjaxResult page();
/***
*@Description: 城投平台详情
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:25
*/
AjaxResult details(String id);
}
......@@ -4,7 +4,9 @@ import com.dsk.common.core.domain.entity.BusinessBacklog;
import com.dsk.common.utils.DateUtils;
import com.dsk.system.mapper.BusinessBacklogMapper;
import com.dsk.system.service.IBusinessBacklogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -17,6 +19,7 @@ import java.util.List;
* @date 2023-05-17
*/
@Service
@Slf4j
public class BusinessBacklogServiceImpl implements IBusinessBacklogService
{
@Autowired
......@@ -57,8 +60,8 @@ public class BusinessBacklogServiceImpl implements IBusinessBacklogService
public int insertBusinessBacklog(BusinessBacklog businessBacklog)
{
businessBacklog.setCreateTime(DateUtils.getNowDate());
//新增记录,默认未完成
businessBacklog.setState(0);
//新增记录,状态默认 进行中
businessBacklog.setState(1);
return businessBacklogMapper.insertBusinessBacklog(businessBacklog);
}
......@@ -99,4 +102,13 @@ public class BusinessBacklogServiceImpl implements IBusinessBacklogService
{
return businessBacklogMapper.deleteBusinessBacklogById(id);
}
/**
* 定时修改工作待办逾期状态
*/
@Scheduled(cron = "0 0 0 * * ?")//每天凌晨0点执行一次
public void judgeOverdue() {
int updateBacklogState = businessBacklogMapper.updateBacklogState();
if (updateBacklogState > 1) log.info("定时修改工作待办逾期状态");
}
}
......@@ -2,8 +2,10 @@ package com.dsk.system.service.impl;
import cn.hutool.core.bean.BeanException;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.map.MapUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.common.utils.SecurityUtils;
import com.dsk.system.domain.customer.Customer;
import com.dsk.system.domain.customer.CustomerUser;
......@@ -16,12 +18,15 @@ import com.dsk.system.mapper.CustomerMapper;
import com.dsk.system.mapper.CustomerUserMapper;
import com.dsk.system.service.IBusinessInfoService;
import com.dsk.system.service.ICustomerService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
......@@ -30,6 +35,7 @@ import java.util.List;
* @author makejava
* @since 2023-05-16 09:27:57
*/
@Slf4j
@Service
public class CustomerServiceImpl implements ICustomerService {
......@@ -108,4 +114,5 @@ public class CustomerServiceImpl implements ICustomerService {
dto.setUserId(SecurityUtils.getUserId());
return businessInfoService.selectCustomerBusinessList(dto);
}
}
......@@ -2,11 +2,14 @@ package com.dsk.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.OpRegionalEconomicDataV1Dto;
import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.system.mapper.OpRegionalEconomicDataV1Mapper;
import com.dsk.system.service.EconomicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
......@@ -22,9 +25,87 @@ public class EconomicServiceImpl implements EconomicService {
@Autowired
private DskOpenApiUtil dskOpenApiUtil;
@Autowired
private OpRegionalEconomicDataV1Mapper mapper;
@Override
public AjaxResult nationalList(OpRegionalEconomicDataV1Dto dto) {
// SELECT
// id,
// `year`,
// province,
// city,
// area,
// gdp,
// gdp_add_value,
// gdp_growth,
// gdp_per_capita,
// pi_add_value,
// si_add_value,
// ti_add_value,
// population,
// population_growth_rate,
// population_add_value,
// industry_add_value,
// industry_total_value,
// fixed_investment,
// real_estate_investment,
// exim_total_value,
// trscg,
// urban_pcdi,
// gbr,
// gbr_growth,
// tax_income,
// transfer_income,
// superior_subsidy_income,
// gbe,
// gov_fund_income,
// land_transfer_income,
// gov_fund_expenditure,
// soecoi,
// soecoe,
// gov_debt_balance,
// general_debt_balance,
// special_debt_balance,
// gov_debt_limit,
// uip_interest_bearing_debt,
// fiscal_self_sufficiency_rate,
// gov_debt_to_gdp_rate,
// gov_debt_to_gdp_rate_wild,
// gov_debt_rate,
// gov_debt_rate_wild,
// is_deal,
// is_statua
//FROM
// `op_regional_economic_data_v1`;
Map<String, Object> map = dskOpenApiUtil.requestBody("/xx", BeanUtil.beanToMap(dto, false, false));
return BeanUtil.toBean(map, AjaxResult.class);
}
@Override
public AjaxResult details(Integer id) {
Map<String, Object> bodyMap = new HashMap<>(1);
bodyMap.put("id", id);
Map<String, Object> map = dskOpenApiUtil.requestBody("/xx", bodyMap);
return BeanUtil.toBean(map, AjaxResult.class);
}
@Override
public AjaxResult nationalPage() {
Map<String, Object> map = dskOpenApiUtil.requestBody("/xx", null);
public AjaxResult statisticsRegional(OpRegionalEconomicDataV1Dto dto) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/xx", BeanUtil.beanToMap(dto, false, false));
return BeanUtil.toBean(map, AjaxResult.class);
}
@Override
public AjaxResult regionalList(OpRegionalEconomicDataV1Dto dto) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/xx", BeanUtil.beanToMap(dto, false, false));
return BeanUtil.toBean(map, AjaxResult.class);
}
@Override
public AjaxResult regionalComparison(OpRegionalEconomicDataV1Dto dto) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/xx", BeanUtil.beanToMap(dto, false, false));
return BeanUtil.toBean(map, AjaxResult.class);
}
}
package com.dsk.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.ComposeQueryDto;
import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.system.service.RegionalEnterprisesService;
import com.dsk.system.service.SpecialPurposeBondsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* @ClassName RegionalEnterprisesServiceImpl
* @Description 区域企业业务层实现
* @Author Dgm
* @Date 2023/5/18 10:23
* @Version
*/
@Service
public class RegionalEnterprisesServiceImpl implements RegionalEnterprisesService {
@Autowired
private DskOpenApiUtil dskOpenApiUtil;
@Override
public AjaxResult page(ComposeQueryDto compose) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/api/jsk/search/enterprisePage", BeanUtil.beanToMap(compose, false, false));
return BeanUtil.toBean(map, AjaxResult.class);
}
}
package com.dsk.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.SpecialPurposeBondsDto;
import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.system.service.EconomicService;
import com.dsk.system.service.SpecialPurposeBondsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
* @ClassName EconomicServiceImpl
* @Description 专项债项目业务层实现
* @Author Dgm
* @Date 2023/5/18 10:23
* @Version
*/
@Service
public class SpecialPurposeBondsServiceImpl implements SpecialPurposeBondsService {
@Autowired
private DskOpenApiUtil dskOpenApiUtil;
@Override
public AjaxResult page(SpecialPurposeBondsDto dto) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/xx", BeanUtil.beanToMap(dto, false, false));
return BeanUtil.toBean(map, AjaxResult.class);
}
@Override
public AjaxResult details(String id) {
Map<String, Object> bodyMap = new HashMap<>(1);
bodyMap.put("id", id);
Map<String, Object> map = dskOpenApiUtil.requestBody("/xx", bodyMap);
return BeanUtil.toBean(map, AjaxResult.class);
}
@Override
public AjaxResult bondStatistics(SpecialPurposeBondsDto dto) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/xx", BeanUtil.beanToMap(dto, false, false));
return BeanUtil.toBean(map, AjaxResult.class);
}
}
package com.dsk.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.system.service.EconomicService;
import com.dsk.system.service.UrbanInvestmentPlatformService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* @ClassName EconomicServiceImpl
* @Description 城投平台业务层实现
* @Author Dgm
* @Date 2023/5/18 10:23
* @Version
*/
@Service
public class UrbanInvestmentPlatformServiceImpl implements UrbanInvestmentPlatformService {
@Autowired
private DskOpenApiUtil dskOpenApiUtil;
@Override
public AjaxResult page() {
Map<String, Object> map = dskOpenApiUtil.requestBody("/xx", null);
return BeanUtil.toBean(map, AjaxResult.class);
}
@Override
public AjaxResult details(String id) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/xx", null);
return BeanUtil.toBean(map, AjaxResult.class);
}
}
......@@ -81,6 +81,11 @@
</trim>
where id = #{id}
</update>
<update id="updateBacklogState">
update business_backlog
set state = 0
where finish_time &lt; CURRENT_TIMESTAMP
</update>
<delete id="deleteBusinessBacklogById" parameterType="Long">
delete
......
......@@ -38,7 +38,7 @@
from business_follow_record f
left join sys_user u on f.user_id = u.user_id
where f.business_id = #{businessId}
ORDER BY create_time DESC
ORDER BY f.creat_time DESC
</select>
<select id="selectBusinessFollowRecordById" parameterType="Long" resultMap="BusinessFollowRecordResult">
......
......@@ -3,11 +3,11 @@
<mapper namespace="com.dsk.system.mapper.CustomerMapper">
<sql id="Base_Bean">
ct.customer_id, ct.company_id, ct.company_name, ct.legal_person, ct.credit_code,
ct.register_capital, ct.company_nature, ct.company_level, ct.credit_level, ct.super_company,
ct.is_on, ct.is_major, ct.company_attribute, ct.main_business, ct.business_scope,
ct.business_characteristic, ct.decision_chain, ct.bid_characteristic, ct.performance_characteristic,
ct.other_ms_characteistic, ct.create_id, ct.create_time, ct.update_id, ct.update_time
ct.customer_id, ct.company_id, ct.company_name, ct.legal_person, ct.credit_code, ct.register_capital,
ct.province_id, ct.city_id, ct.district_id, ct.register_address, ct.company_nature, ct.company_level,
ct.credit_level, ct.super_company, ct.is_on, ct.is_major, ct.company_attribute, ct.main_business,
ct.business_scope, ct.customer_level, ct.business_characteristic, ct.decision_chain, ct.bid_characteristic,
ct.performance_characteristic, ct.other_ms_characteistic, ct.create_id, ct.create_time, ct.update_id, ct.update_time
</sql>
<select id="selectList" resultType="com.dsk.system.domain.customer.vo.CustomerListVo">
......
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