Commit 1db9440a authored by danfuman's avatar danfuman

Merge branch 'dev20230707'

parents 34146c04 3eabf10c
......@@ -4,6 +4,7 @@ import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.system.domain.business.BusinessBacklog;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.system.domain.business.dto.BusinessBacklogListDto;
import com.dsk.system.service.IBusinessBacklogService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -31,10 +32,10 @@ public class BusinessBacklogController extends BaseController
*/
// @PreAuthorize("@ss.hasPermi('system:backlog:list')")
@GetMapping("/list")
public TableDataInfo list(BusinessBacklog businessBacklog)
public TableDataInfo list(BusinessBacklogListDto dto)
{
startPage();
return getDataTable(businessBacklogService.selectBusinessBacklogList(businessBacklog));
return getDataTable(businessBacklogService.selectBusinessBacklogList(dto));
}
/**
......
package com.dsk.web.controller.business;
import com.dsk.common.config.RuoYiConfig;
import com.dsk.common.config.ShuZhiHuaConfig;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.domain.entity.BusinessFileVo;
......@@ -62,7 +62,7 @@ public class BusinessFileController extends BaseController {
public TableDataInfo getAllFiles(BusinessIdDto filePath) {
startPage();
List<BusinessFileVo> allFiles;
if(StringUtils.isNumeric(filePath.getFilePath())) filePath.setFilePath(RuoYiConfig.getProfile() + filePath.getFilePath());
if(StringUtils.isNumeric(filePath.getFilePath())) filePath.setFilePath(ShuZhiHuaConfig.getProfile() + filePath.getFilePath());
allFiles = FileUtils.getAllFiles(filePath.getFilePath());
//模糊查询文件
if(StringUtils.isNotEmpty(filePath.getKeyword())){
......@@ -87,7 +87,7 @@ public class BusinessFileController extends BaseController {
String filename = file.getOriginalFilename();
String businessFileName = request.getHeader("FilePath");
// 上传文件路径
String filePath = RuoYiConfig.getUploadPath() + businessFileName + "/";
String filePath = ShuZhiHuaConfig.getUploadPath() + businessFileName + "/";
//校验是否上传同名文件
File newFile = new File(filePath);
......
......@@ -52,8 +52,7 @@ public class BusinessInfoController extends BaseController
public TableDataInfo list(BusinessListDto dto)
{
startPage();
List<BusinessListVo> list = businessInfoService.selectBusinessInfoList(dto);
return getDataTable(list);
return getDataTable(businessInfoService.selectBusinessInfoList(dto));
}
/**
......
......@@ -12,7 +12,7 @@ import org.springframework.util.FastByteArrayOutputStream;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.google.code.kaptcha.Producer;
import com.dsk.common.config.RuoYiConfig;
import com.dsk.common.config.ShuZhiHuaConfig;
import com.dsk.common.constant.CacheConstants;
import com.dsk.common.constant.Constants;
import com.dsk.common.core.domain.AjaxResult;
......@@ -62,7 +62,7 @@ public class CaptchaController
BufferedImage image = null;
// 生成验证码
String captchaType = RuoYiConfig.getCaptchaType();
String captchaType = ShuZhiHuaConfig.getCaptchaType();
if ("math".equals(captchaType))
{
String capText = captchaProducerMath.createText();
......
......@@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.dsk.common.config.RuoYiConfig;
import com.dsk.common.config.ShuZhiHuaConfig;
import com.dsk.common.constant.Constants;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.utils.StringUtils;
......@@ -53,7 +53,7 @@ public class CommonController
throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
}
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
String filePath = RuoYiConfig.getDownloadPath() + fileName;
String filePath = ShuZhiHuaConfig.getDownloadPath() + fileName;
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
FileUtils.setAttachmentResponseHeader(response, realFileName);
......@@ -78,7 +78,7 @@ public class CommonController
try
{
// 上传文件路径
String filePath = RuoYiConfig.getUploadPath();
String filePath = ShuZhiHuaConfig.getUploadPath();
// 上传并返回新文件名称
String fileName = FileUploadUtils.upload(filePath, file);
String url = serverConfig.getUrl() + fileName;
......@@ -104,7 +104,7 @@ public class CommonController
try
{
// 上传文件路径
String filePath = RuoYiConfig.getUploadPath();
String filePath = ShuZhiHuaConfig.getUploadPath();
List<String> urls = new ArrayList<String>();
List<String> fileNames = new ArrayList<String>();
List<String> newFileNames = new ArrayList<String>();
......@@ -146,7 +146,7 @@ public class CommonController
throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
}
// 本地资源路径
String localPath = RuoYiConfig.getProfile();
String localPath = ShuZhiHuaConfig.getProfile();
// 数据库资源地址
String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
// 下载名称
......
......@@ -28,7 +28,7 @@ public class ContactInfoController extends BaseController {
/**
* 联系人列表
*/
// @PreAuthorize("@ss.hasPermi('contact:list')")
// @PreAuthorize("@ss.hasPermi('contact:info:list')")
@GetMapping("/list")
public TableDataInfo selectPageList(ContactInfoSearchDto dto){
startPage();
......@@ -47,7 +47,7 @@ public class ContactInfoController extends BaseController {
/**
* 添加用户联系人
*/
// @PreAuthorize("@ss.hasPermi('contact:add')")
// @PreAuthorize("@ss.hasPermi('contact:info:add')")
@PostMapping()
@RepeatSubmit()
public AjaxResult add(@RequestBody ContactInfo baen){
......@@ -57,7 +57,7 @@ public class ContactInfoController extends BaseController {
/**
* 编辑用户联系人
*/
// @PreAuthorize("@ss.hasPermi('contact:edit')")
// @PreAuthorize("@ss.hasPermi('contact:info:edit')")
@PutMapping()
@RepeatSubmit()
public AjaxResult edit(@RequestBody ContactInfo baen){
......@@ -67,7 +67,7 @@ public class ContactInfoController extends BaseController {
/**
* 删除用户联系人
*/
// @PreAuthorize("@ss.hasPermi('contact:del')")
// @PreAuthorize("@ss.hasPermi('contact:info:del')")
@DeleteMapping("/{id}")
@RepeatSubmit()
public AjaxResult del(@PathVariable("id") Long id){
......
package com.dsk.web.controller.customer;
import cn.hutool.core.bean.BeanException;
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;
......@@ -14,7 +11,6 @@ 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.searchService.BusinessOpportunityRadarService;
import com.dsk.system.service.ICustomerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
......@@ -39,8 +35,6 @@ public class CustomerController extends BaseController {
@Autowired
private ICustomerService baseService;
// @Autowired
// private BusinessOpportunityRadarService opportunityRadarService;
/**
* 查询客户列表
......@@ -128,21 +122,6 @@ public class CustomerController extends BaseController {
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, "registeredCapitalStr"));
// customer.setProvinceId(MapUtil.getInt(obj, "provinceId"));
// customer.setCityId(MapUtil.getInt(obj, "cityId"));
// customer.setDistrictId(MapUtil.getInt(obj, "countyId"));
// customer.setRegisterAddress(MapUtil.getStr(obj, "domicile"));
// customer.setCreditCode(MapUtil.getStr(obj, "creditCode"));
// }
baseService.add(customer);
successCount++;
} catch (Exception e) {
......
......@@ -28,6 +28,13 @@ public class EnterpriseBussinessController {
@Autowired
EnterpriseBussinessService enterpriseBussinessService;
@ApiOperation(value = "客户-下拉选项(openApi)")
@RequestMapping(value = "/customSelect", method = RequestMethod.GET)
public R customSelect() throws Exception {
return enterpriseBussinessService.customSelect();
}
@ApiOperation(value = "客户信息列表(openApi)")
@RequestMapping(value = "/clientPage", method = RequestMethod.POST)
public TableDataInfo clientPage(@RequestBody @Valid EnterpriseBussinessClientPageBody paramMap) throws Exception {
......
......@@ -72,17 +72,53 @@ public class MarketAnalysisController extends BaseController {
return marketAnalysisService.bidMoneyGroupByProjectType(object);
}
/*
* 全国各地区中标统计TOP10
*/
@RequestMapping("/countBidGroupByProvince")
public AjaxResult countBidGroupByProvince(@RequestBody JSONObject object) {
return marketAnalysisService.countBidGroupByProvince(object);
}
//央企数字化经营系统 土地交易
@RequestMapping("/countLandMarketByType")
public AjaxResult countLandMarketByType(@RequestBody JSONObject object){
return marketAnalysisService.countLandMarketByType(object);
}
//央企数字化经营系统 全国土地交易项目地区
@RequestMapping("/countLandMarketByProvince")
public AjaxResult countLandMarketByProvince(@RequestBody JSONObject object){
return marketAnalysisService.countLandMarketByProvince(object);
}
//央企数字化经营系统 全国土地交易项目地区
@RequestMapping("/countLandMarketByYear")
public AjaxResult countLandMarketByYear(){
return marketAnalysisService.countLandMarketByYear();
}
//央企数字化经营系统 全国公招项目统计
@RequestMapping("/countNewsBidByYear")
public AjaxResult countNewsBidByYear(){
return marketAnalysisService.countNewsBidByYear();
}
//央企数字化经营系统 招标公告 全国各地区项目统计TOP10
@RequestMapping("/countNewsBidByProvince")
public AjaxResult countNewsBidByProvince(@RequestBody JSONObject object){
return marketAnalysisService.countNewsBidByProvince(object);
}
//央企数字化经营系统 招标公告 月度统计
@RequestMapping("/countNewsBidByMonth")
public AjaxResult countNewsBidByMonth(@RequestBody JSONObject object){
return marketAnalysisService.countNewsBidByMonth(object);
}
/*
* 标数量按省份分组
* 标数量按省份分组
*/
@RequestMapping("/countGroupByProvince")
public AjaxResult countGroupByProvince(@RequestBody JSONObject object) {
......
//package com.dsk.web.controller.search.service;
//
//import com.alibaba.fastjson2.JSONObject;
//import com.dsk.common.core.domain.AjaxResult;
//import com.dsk.common.dtos.ComposeQueryDto;
//
///**
// * @Author liujie
// * @ClassName MarketAnalysisService
// * @Date 2023/5/15 16:39
// **/
//public interface BusinessOpportunityRadarService {
//
//
// AjaxResult jskBidNewsPage(JSONObject object);
//
// AjaxResult jskBidTenderPage(JSONObject object);
//
// AjaxResult jskBidPage(JSONObject object);
//
// AjaxResult landMarketPage( JSONObject object);
//
// AjaxResult establishmentPage(JSONObject object);
//
// AjaxResult enterpriseIndex(JSONObject object);
//
// AjaxResult enterpriseByName(String keyword);
//
// AjaxResult enterprisePage(JSONObject object);
//
// AjaxResult bondProjectPage( JSONObject object);
//
// AjaxResult jskBidPlanPage( JSONObject object);
//
// AjaxResult getCapitalSourceSelect();
//
// AjaxResult keywordList();
//
// AjaxResult bidSourceList( JSONObject object);
//
//}
//package com.dsk.web.controller.search.service;
//
//import com.alibaba.fastjson2.JSONObject;
//import com.dsk.common.core.domain.AjaxResult;
//import com.dsk.common.dtos.ComposeQueryDto;
//
///**
// * @Author liujie
// * @ClassName MarketAnalysisService
// * @Date 2023/5/15 16:39
// **/
//public interface MarketAnalysisService {
//
// AjaxResult areaGroupByProvince();
//
// AjaxResult certGroupByMajorAndLevel();
//
// AjaxResult certGroupByMajorProvinceLevel();
//
// AjaxResult countGroupByProvince(JSONObject object);
//
// AjaxResult countGroupByMonth(JSONObject object);
//
// AjaxResult bidMoneyGroupByProjectType(JSONObject object);
//
// AjaxResult bidGroupCountByProjectType(JSONObject object);
//}
//package com.dsk.web.controller.search.service.impl;
//
//import cn.hutool.core.bean.BeanUtil;
//import com.alibaba.fastjson2.JSONObject;
//import com.dsk.common.core.domain.AjaxResult;
//import com.dsk.common.dtos.ComposeQueryDto;
//import com.dsk.common.utils.DskOpenApiUtil;
//import com.dsk.web.controller.search.service.BusinessOpportunityRadarService;
//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;
//
///**
// * @Author liujie
// * @ClassName MarketAnalysisServiceImpl
// * @Date 2023/5/15 16:40
// **/
//@Service
//public class BusinessOpportunityRadarServiceImpl implements BusinessOpportunityRadarService {
//
// @Autowired
// private DskOpenApiUtil dskOpenApiUtil;
//
//
// @Override
// public AjaxResult jskBidNewsPage(JSONObject object) {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/jskBid/news/page", object);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//
//
// @Override
// public AjaxResult jskBidTenderPage(JSONObject object) {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/jskBidTender/page", object);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//
// @Override
// public AjaxResult establishmentPage(JSONObject object) {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/establishment/page", object);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//
// @Override
// public AjaxResult jskBidPage(JSONObject object) {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/jskBid/page",object);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//
// @Override
// public AjaxResult landMarketPage(JSONObject object) {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/landMarket/page", object);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//
// @Override
// public AjaxResult enterpriseIndex(JSONObject object) {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/index", object);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//
// @Override
// public AjaxResult enterprisePage(JSONObject object) {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/page",object);
// 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(JSONObject object) {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/bondProject/page", object);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//
// @Override
// public AjaxResult jskBidPlanPage(JSONObject object) {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/jskBidPlan/page",object);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//
// @Override
// public AjaxResult getCapitalSourceSelect() {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/jskBidPlan/getCapitalSourceSelect", null);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//
// @Override
// public AjaxResult keywordList() {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/project/keywordList", null);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//
// @Override
// public AjaxResult bidSourceList(JSONObject object) {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/jskBid/source",object);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//}
//package com.dsk.web.controller.search.service.impl;
//
//import cn.hutool.core.bean.BeanUtil;
//import com.alibaba.fastjson2.JSONObject;
//import com.dsk.common.core.domain.AjaxResult;
//import com.dsk.common.core.domain.R;
//import com.dsk.common.dtos.ComposeQueryDto;
//import com.dsk.common.utils.DskOpenApiUtil;
//import com.dsk.common.utils.http.HttpUtils;
//import com.dsk.web.controller.search.service.MarketAnalysisService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.util.Map;
//
///**
// * @Author liujie
// * @ClassName MarketAnalysisServiceImpl
// * @Date 2023/5/15 16:40
// **/
//@Service
//public class MarketAnalysisServiceImpl implements MarketAnalysisService {
//
// @Autowired
// private DskOpenApiUtil dskOpenApiUtil;
// @Override
// public AjaxResult areaGroupByProvince() {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/areaGroupByProvince", null);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//
// @Override
// public AjaxResult certGroupByMajorAndLevel() {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/certGroupByMajorAndLevel", null);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//
//
// @Override
// public AjaxResult certGroupByMajorProvinceLevel() {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/certGroupByMajorProvinceLevel", null);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//
//
// @Override
// public AjaxResult bidMoneyGroupByProjectType(JSONObject object) {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/bidMoneyGroupByProjectType", object);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//
// @Override
// public AjaxResult bidGroupCountByProjectType(JSONObject object) {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/bidGroupCountByProjectType", object);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//
// @Override
// public AjaxResult countGroupByProvince(JSONObject object) {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/countGroupByProvince", object);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//
// @Override
// public AjaxResult countGroupByMonth(JSONObject object) {
// Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/countGroupByMonth", object);
// return BeanUtil.toBean(map, AjaxResult.class);
// }
//}
......@@ -3,7 +3,7 @@ package com.dsk.web.controller.system;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.dsk.common.config.RuoYiConfig;
import com.dsk.common.config.ShuZhiHuaConfig;
import com.dsk.common.utils.StringUtils;
/**
......@@ -16,7 +16,7 @@ public class SysIndexController
{
/** 系统基础配置 */
@Autowired
private RuoYiConfig ruoyiConfig;
private ShuZhiHuaConfig shuZhiHuaConfig;
/**
* 访问首页,提示语
......@@ -24,6 +24,6 @@ public class SysIndexController
@RequestMapping("/")
public String index()
{
return StringUtils.format("欢迎使用{}后台管理框架,当前版本:v{},请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion());
return StringUtils.format("欢迎使用{}后台管理框架,当前版本:v{},请通过前端地址访问。", shuZhiHuaConfig.getName(), shuZhiHuaConfig.getVersion());
}
}
......@@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.dsk.common.annotation.Log;
import com.dsk.common.config.RuoYiConfig;
import com.dsk.common.config.ShuZhiHuaConfig;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.domain.entity.SysUser;
......@@ -125,7 +125,7 @@ public class SysProfileController extends BaseController
if (!file.isEmpty())
{
LoginUser loginUser = getLoginUser();
String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION);
String avatar = FileUploadUtils.upload(ShuZhiHuaConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION);
if (userService.updateUserAvatar(loginUser.getUsername(), avatar))
{
AjaxResult ajax = AjaxResult.success();
......
......@@ -6,7 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.dsk.common.config.RuoYiConfig;
import com.dsk.common.config.ShuZhiHuaConfig;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import springfox.documentation.builders.ApiInfoBuilder;
......@@ -32,7 +32,7 @@ public class SwaggerConfig
{
/** 系统基础配置 */
@Autowired
private RuoYiConfig ruoyiConfig;
private ShuZhiHuaConfig shuZhiHuaConfig;
/** 是否开启swagger */
@Value("${swagger.enabled}")
......@@ -58,7 +58,7 @@ public class SwaggerConfig
// 扫描所有有注解的api,用这种方式更灵活
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
// 扫描指定包中的swagger注解
// .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger"))
// .apis(RequestHandlerSelectors.basePackage("com.dsk.project.tool.swagger"))
// 扫描所有 .apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
......@@ -117,9 +117,9 @@ public class SwaggerConfig
// 描述
.description("描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...")
// 作者信息
.contact(new Contact(ruoyiConfig.getName(), null, null))
.contact(new Contact(shuZhiHuaConfig.getName(), null, null))
// 版本
.version("版本号:" + ruoyiConfig.getVersion())
.version("版本号:" + shuZhiHuaConfig.getVersion())
.build();
}
}
# 项目相关配置
ruoyi:
shuzhihua:
# 名称
name: RuoYi
name: ShuZhiHua
# 版本
version: 3.8.5
# 版权年份
copyrightYear: 2023
# 实例演示开关
demoEnabled: true
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/server/dsk-operate-sys/uploadPath)
# 文件路径 示例( Windows配置D:/dsk/uploadPath,Linux配置 /home/server/dsk-operate-sys/uploadPath)
# profile: D:/dsk-operate-sys/uploadPath/
profile: /home/server/dsk-operate-sys/uploadPath/
# 获取ip地址开关
......@@ -37,7 +37,7 @@ server:
# 日志配置
logging:
level:
com.ruoyi: debug
com.dsk: debug
org.springframework: warn
# 用户配置
......@@ -97,7 +97,7 @@ spring:
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username: ruoyi
login-username: dskadmin
login-password: 123456
filter:
stat:
......
# 项目相关配置
ruoyi:
shuzhihua:
# 名称
name: RuoYi
name: ShuZhiHua
# 版本
version: 3.8.5
# 版权年份
copyrightYear: 2023
# 实例演示开关
demoEnabled: true
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/server/dsk-operate-sys/uploadPath)
# 文件路径 示例( Windows配置D:/dsk/uploadPath,Linux配置 /home/server/dsk-operate-sys/uploadPath)
# profile: D:/dsk-operate-sys/uploadPath/
profile: /home/server/dsk-operate-sys/uploadPath/
# 获取ip地址开关
......@@ -37,7 +37,7 @@ server:
# 日志配置
logging:
level:
com.ruoyi: debug
com.dsk: info
org.springframework: warn
# 用户配置
......@@ -97,7 +97,7 @@ spring:
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username: ruoyi
login-username: dskadmin
login-password: 123456
filter:
stat:
......
# 项目相关配置
ruoyi:
shuzhihua:
# 名称
name: RuoYi
name: ShuZhiHua
# 版本
version: 3.8.5
# 版权年份
copyrightYear: 2023
# 实例演示开关
demoEnabled: true
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/server/dsk-operate-sys/uploadPath)
# 文件路径 示例( Windows配置D:/dsk/uploadPath,Linux配置 /home/server/dsk-operate-sys/uploadPath)
# profile: D:/dsk-operate-sys/uploadPath/
profile: /home/server/dsk-operate-sys/uploadPath/
# 获取ip地址开关
......@@ -37,7 +37,7 @@ server:
# 日志配置
logging:
level:
com.ruoyi: debug
com.dsk: debug
org.springframework: warn
# 用户配置
......@@ -97,7 +97,7 @@ spring:
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username: ruoyi
login-username: dskadmin
login-password: 123456
filter:
stat:
......
Application Version: ${ruoyi.version}
Application Version: ${shuzhihua.version}
Spring Boot Version: ${spring-boot.version}
......@@ -9,8 +9,8 @@ import org.springframework.stereotype.Component;
* @author dsk
*/
@Component
@ConfigurationProperties(prefix = "ruoyi")
public class RuoYiConfig
@ConfigurationProperties(prefix = "shuzhihua")
public class ShuZhiHuaConfig
{
/** 项目名称 */
private String name;
......@@ -80,7 +80,7 @@ public class RuoYiConfig
public void setProfile(String profile)
{
RuoYiConfig.profile = profile;
ShuZhiHuaConfig.profile = profile;
}
public static boolean isAddressEnabled()
......@@ -90,7 +90,7 @@ public class RuoYiConfig
public void setAddressEnabled(boolean addressEnabled)
{
RuoYiConfig.addressEnabled = addressEnabled;
ShuZhiHuaConfig.addressEnabled = addressEnabled;
}
public static String getCaptchaType() {
......@@ -98,7 +98,7 @@ public class RuoYiConfig
}
public void setCaptchaType(String captchaType) {
RuoYiConfig.captchaType = captchaType;
ShuZhiHuaConfig.captchaType = captchaType;
}
/**
......
......@@ -58,5 +58,11 @@ public class CacheConstants
public static final String DATA_FINANCIAL = "data:financial";
/**
* 全国经济大全-默认
*/
public static final String DATA_ECONOMIC = "data:economic";
}
......@@ -132,11 +132,11 @@ public class Constants
/**
* 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加)
*/
public static final String[] JOB_WHITELIST_STR = { "com.ruoyi" };
public static final String[] JOB_WHITELIST_STR = { "com.dsk" };
/**
* 定时任务违规的字符
*/
public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
"org.springframework", "org.apache", "com.ruoyi.common.utils.file", "com.ruoyi.common.config" };
"org.springframework", "org.apache", "com.dsk.common.utils.file", "com.dsk.common.config" };
}
package com.dsk.common.dtos;
import lombok.Data;
import java.util.Objects;
/**
* @ClassName UrbanInvestmentPlatformSubjectLevelDto
* @Description 信用评级
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class UrbanInvestmentPlatformSubjectLevelDto {
/**
* 企业Id
*/
private Long companyId;
/**
* 主体评级
*/
private String bratingSubjectLevel;
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
UrbanInvestmentPlatformSubjectLevelDto that = (UrbanInvestmentPlatformSubjectLevelDto) o;
return Objects.equals(companyId, that.companyId);
}
@Override
public int hashCode() {
return Objects.hash(companyId);
}
}
......@@ -612,4 +612,9 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils
}
return sb.toString();
}
//字符串标红
public static String markInRed(String oldStr, String str) {
return oldStr.replace(str, "<font color='#FF204E'>" + str + "</font>");
}
}
......@@ -13,7 +13,7 @@ public class FileTypeUtils
/**
* 获取文件类型
* <p>
* 例如: ruoyi.txt, 返回: txt
* 例如: dsk.txt, 返回: txt
*
* @param file 文件名
* @return 后缀(不含".")
......@@ -30,7 +30,7 @@ public class FileTypeUtils
/**
* 获取文件类型
* <p>
* 例如: ruoyi.txt, 返回: txt
* 例如: dsk.txt, 返回: txt
*
* @param fileName 文件名
* @return 后缀(不含".")
......
package com.dsk.common.utils.file;
import com.dsk.common.config.RuoYiConfig;
import com.dsk.common.config.ShuZhiHuaConfig;
import com.dsk.common.constant.Constants;
import com.dsk.common.exception.file.FileNameLengthLimitExceededException;
import com.dsk.common.exception.file.FileSizeLimitExceededException;
......@@ -36,7 +36,7 @@ public class FileUploadUtils
/**
* 默认上传的地址
*/
private static String defaultBaseDir = RuoYiConfig.getProfile();
private static String defaultBaseDir = ShuZhiHuaConfig.getProfile();
public static void setDefaultBaseDir(String defaultBaseDir)
{
......@@ -145,7 +145,7 @@ public class FileUploadUtils
public static final String getPathFileName(String uploadDir, String fileName) throws IOException
{
int dirLastIndex = RuoYiConfig.getProfile().length() + 1;
int dirLastIndex = ShuZhiHuaConfig.getProfile().length() + 1;
String currentDir = StringUtils.substring(uploadDir, dirLastIndex);
return Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName;
}
......
package com.dsk.common.utils.file;
import com.dsk.common.config.RuoYiConfig;
import com.dsk.common.config.ShuZhiHuaConfig;
import com.dsk.common.core.domain.entity.BusinessFileVo;
import com.dsk.common.exception.base.BaseException;
import com.dsk.common.utils.DateUtils;
......@@ -127,7 +127,7 @@ public class FileUtils
*/
public static String writeImportBytes(byte[] data) throws IOException
{
return writeBytes(data, RuoYiConfig.getImportPath());
return writeBytes(data, ShuZhiHuaConfig.getImportPath());
}
/**
......@@ -584,7 +584,7 @@ public class FileUtils
}
/**
* 获取文件名称 /profile/upload/2022/04/16/ruoyi.png -- ruoyi.png
* 获取文件名称 /profile/upload/2022/04/16/dsk.png -- dsk.png
*
* @param fileName 路径名称
* @return 没有文件路径的名称
......@@ -602,7 +602,7 @@ public class FileUtils
}
/**
* 获取不带后缀文件名称 /profile/upload/2022/04/16/ruoyi.png -- ruoyi
* 获取不带后缀文件名称 /profile/upload/2022/04/16/dsk.png -- dsk
*
* @param fileName 路径名称
* @return 没有文件路径和后缀的名称
......
......@@ -12,7 +12,7 @@ import com.dsk.common.utils.StringUtils;
import org.apache.poi.util.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.dsk.common.config.RuoYiConfig;
import com.dsk.common.config.ShuZhiHuaConfig;
/**
* 图片处理工具类
......@@ -80,7 +80,7 @@ public class ImageUtils
else
{
// 本机地址
String localPath = RuoYiConfig.getProfile();
String localPath = ShuZhiHuaConfig.getProfile();
String downloadPath = localPath + StringUtils.substringAfter(url, Constants.RESOURCE_PREFIX);
in = new FileInputStream(downloadPath);
}
......
......@@ -4,7 +4,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.dsk.common.config.RuoYiConfig;
import com.dsk.common.config.ShuZhiHuaConfig;
import com.dsk.common.constant.Constants;
import com.dsk.common.utils.StringUtils;
import com.dsk.common.utils.http.HttpUtils;
......@@ -31,7 +31,7 @@ public class AddressUtils
{
return "内网IP";
}
if (RuoYiConfig.isAddressEnabled())
if (ShuZhiHuaConfig.isAddressEnabled())
{
try
{
......
......@@ -76,7 +76,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.dsk.common.config.RuoYiConfig;
import com.dsk.common.config.ShuZhiHuaConfig;
import com.dsk.common.exception.UtilException;
import com.dsk.common.utils.StringUtils;
import com.dsk.common.utils.file.FileTypeUtils;
......@@ -1341,7 +1341,7 @@ public class ExcelUtil<T>
*/
public String getAbsoluteFile(String filename)
{
String downloadPath = RuoYiConfig.getDownloadPath() + filename;
String downloadPath = ShuZhiHuaConfig.getDownloadPath() + filename;
File desc = new File(downloadPath);
if (!desc.getParentFile().exists())
{
......
......@@ -11,7 +11,7 @@ import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.dsk.common.config.RuoYiConfig;
import com.dsk.common.config.ShuZhiHuaConfig;
import com.dsk.common.constant.Constants;
import com.dsk.framework.interceptor.RepeatSubmitInterceptor;
......@@ -31,7 +31,7 @@ public class ResourcesConfig implements WebMvcConfigurer
{
/** 本地文件上传路径 */
registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**")
.addResourceLocations("file:" + RuoYiConfig.getProfile() + "/");
.addResourceLocations("file:" + ShuZhiHuaConfig.getProfile() + "/");
/** swagger配置 */
registry.addResourceHandler("/swagger-ui/**")
......
......@@ -10,7 +10,7 @@ import com.dsk.common.utils.StringUtils;
import com.dsk.framework.security.context.PermissionContextHolder;
/**
* RuoYi首创 自定义权限实现,ss取自SpringSecurity首字母
* 自定义权限实现,ss取自SpringSecurity首字母
*
* @author dsk
*/
......
......@@ -54,7 +54,7 @@
"nprogress": "0.2.0",
"quill": "1.3.7",
"screenfull": "5.0.2",
"sortablejs": "1.10.2",
"sortablejs": "^1.15.0",
"vue": "2.6.12",
"vue-count-to": "1.0.13",
"vue-cropper": "0.5.5",
......
......@@ -51,6 +51,65 @@ export function getYear() {
})
}
//全国商机项目分析-全国土地交易项目
export function countLandMarketByType(param) {
return request({
url: '/marketAnalysis/countLandMarketByType',
method: 'POST',
data: param
})
}
//全国商机项目分析-全国土地交易项目地区TOP10
export function countLandMarketByProvince(param) {
return request({
url: '/marketAnalysis/countLandMarketByProvince',
method: 'POST',
data: param
})
}
//全国商机项目分析-全国土地交易项目年份统计
export function countLandMarketByYear() {
return request({
url: '/marketAnalysis/countLandMarketByYear',
method: 'POST',
})
}
//全国商机项目分析-全国各地区招标统计TOP10
export function countNewsBidByProvince(param) {
return request({
url: '/marketAnalysis/countNewsBidByProvince',
method: 'POST',
data: param
})
}
//全国商机项目分析-全国公招项目统计
export function countNewsBidByYear() {
return request({
url: '/marketAnalysis/countNewsBidByYear',
method: 'POST',
})
}
//全国商机项目分析-全国各年度招标月份统计
export function countNewsBidByMonth(param) {
return request({
url: '/marketAnalysis/countNewsBidByMonth',
method: 'POST',
data: param
})
}
//全国商机项目分析-全国土地交易项目年份统计
export function countBidGroupByProvince(param) {
return request({
url: '/marketAnalysis/countBidGroupByProvince',
method: 'POST',
data: param
})
}
//全国建筑企业概览-资质等级按照行业、等级类型分组
export function certGroupByMajorAndLevel() {
......
......@@ -65,7 +65,8 @@ export function removeLabel(param) {
//查询项目联系人
export function getLXR(param) {
return request({
url: '/business/contacts/list',
// url: '/business/contacts/list',
url: '/contact/info/list',
method: 'GET',
params:param
})
......@@ -73,8 +74,9 @@ export function getLXR(param) {
//修改项目联系人
export function editLXR(param) {
return request({
url: '/business/contacts/edit',
method: 'POST',
// url: '/business/contacts/edit',
url: '/contact/info',
method: 'PUT',
data:param
})
}
......@@ -82,12 +84,21 @@ export function editLXR(param) {
//新增项目联系人
export function addLXR(param) {
return request({
url: '/business/contacts/add',
// url: '/business/contacts/add',
url: '/contact/info',
method: 'POST',
data:param
})
}
//删除项目联系人
export function delLXR(param) {
return request({
url: '/contact/info/'+param,
method: 'DELETE',
})
}
//跟进记录
export function getGJJL(param) {
return request({
......
......@@ -364,7 +364,10 @@ ul, li {
background: #DCEBFF;
}
.el-table__fixed{
bottom:0 !important;
//bottom:0 !important;
.el-table__body{
padding-bottom:16px;
}
tr:nth-child(2n){
background-color: #F8FBFF;
}
......
......@@ -1179,6 +1179,25 @@
}
.tables{
.el-table__body-wrapper{
&::-webkit-scrollbar {
width: 16px; //竖轴宽度
height: 16px; //横轴宽度
}
&::-webkit-scrollbar-track {
background-color: #F3F4F5;
border-radius: 0;
}
&::-webkit-scrollbar-thumb {
background-color: rgba(98,110,126,0.2);
border: 4px solid #F3F4F5;
border-radius: 10px;
}
&::-webkit-scrollbar-corner {
background: #F3F4F5;
/*border-left: 1px solid #E0EAF2;*/
}
}
::-webkit-scrollbar-track-piece {
//滚动条凹槽的颜色,还可以设置边框属性
background-color: #F3F4F5;
......@@ -1209,8 +1228,8 @@
line-height: 34px !important;
}
.el-table__fixed {
height: auto !important;
.tables .el-table__fixed {
// height: auto !important;
bottom: 17px !important;
//box-shadow: 4px 0 9px -5px rgba(0, 0, 0, 0.12);
//-webkit-box-shadow: 4px 0 9px -5px rgba(0, 0, 0, 0.12);
......@@ -1244,3 +1263,10 @@
overflow-y: clip;
}
}
.tables{
.el-table__fixed {
.el-table__body {
padding-bottom: 16px;
}
}
}
......@@ -11,7 +11,7 @@
<div class="flex-box avatar-wrapper">
<img v-if="avatar" class="pic-avatar" :src="avatar">
<span v-else class="user-avatar">{{ name&&name.slice(0, 1).toUpperCase() }}</span>
{{ name }}
{{ name.length>10?name.slice(0, 10)+'...':name}}
</div>
<el-dropdown-menu slot="dropdown" class="user-dropdown">
<router-link to="/user/profile">
......
......@@ -384,14 +384,14 @@ export default {
}
}
.alltags{
position: absolute;
position: fixed;
align-items: center;
border-radius: 9px;
height: 17px;
justify-content: center;
width: 36px;
right: -130px;
bottom: 0px;
right: 10px;
top: 37px;
cursor: pointer;
text-align: center;
&:hover{
......
......@@ -74,6 +74,19 @@ export const constantRoutes = [
}
]
},
{
path: '',
component: Layout,
redirect: 'urban',
children: [
{
path: '/macro/urban',
component: () => import('@/views/macro/urban'),
name: 'Urban',
meta: { title: '城投平台', icon: 'macro' }
}
]
},
{
path: '/user',
component: Layout,
......
......@@ -26,7 +26,7 @@
</div>
</div>
<skeleton v-if="isSkeleton"></skeleton>
<el-table v-if="!isSkeleton&&tableData.total > 0" class="fixed-table"
<el-table v-show="!isSkeleton&&tableData.total > 0" class="fixed-table" max-height="640" ref="thistables"
:data="tableData.rows"
stripe border
style="width: 100%">
......@@ -46,12 +46,12 @@
width="316">
<template slot-scope="scope">
<div class="ps1">
<div class="wordprimary ps2" @click="toDetail(scope.row,'')">{{scope.row.companyName}}</div>
<div class="wordprimary ps2" @click="toDetail(scope.row,'business')" v-html="scope.row.companyName"></div>
<div class="ps3">
<el-tooltip class="item" effect="dark" content="写跟进" placement="top">
<el-tooltip class="item" effect="dark" content="写跟进" placement="top" transition="" :open-delay="450">
<div @click="toDetail(scope.row,'gjjl')"><img class="i" src="@/assets/images/project/edit_1.png"><img class="o" src="@/assets/images/project/edit_11.png"></div>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="编辑信息" placement="top">
<el-tooltip class="item" effect="dark" content="编辑信息" placement="top" transition="" :open-delay="450">
<div @click="toDetail(scope.row,'business')"><img class="i" src="@/assets/images/project/edit_2.png"><img class="o" src="@/assets/images/project/edit_22.png"></div>
</el-tooltip>
</div>
......@@ -390,9 +390,9 @@
let customerId = row.customerId
let companyId = row.companyId
let path = type
if(type == "" && companyId == null){
path = 'business'
}
// if(type == "" && companyId == null){
// path = 'business'
// }
this.$router.push({path:'/enterprise/'+encodeStr(companyId),query:{customerId:customerId,path:path}})
},
clearname(value){
......
......@@ -18,7 +18,7 @@
</div>
</div>
<skeleton v-if="isSkeleton"></skeleton>
<el-table v-if="!isSkeleton&&tableData.total > 0" class="fixed-table"
<el-table v-if="!isSkeleton&&tableData.total > 0" class="fixed-table" max-height="640"
:data="tableData.rows"
stripe border
style="width: 100%">
......@@ -38,7 +38,7 @@
width="316">
<template slot-scope="scope">
<div class="ps1">
<div class="wordprimary ps2" @click="toDetail(scope.row,'')">{{scope.row.companyName}}</div>
<div class="wordprimary ps2" @click="toDetail(scope.row,'business')" v-html="scope.row.companyName"></div>
<div class="ps3">
<el-tooltip class="item" effect="dark" content="重新认领" placement="top">
<div @click="toRL(scope.row)"><img class="i" src="@/assets/images/project/khrl1.png"><img class="o" src="@/assets/images/project/khrl2.png"></div>
......@@ -308,14 +308,14 @@ export default {
let customerId = row.customerId
let companyId = row.companyId
let path = type
if(type == "" && companyId == null){
path = 'business'
}
// if(type == "" && companyId == null){
// path = 'business'
// }
this.$router.push({path:'/enterprise/'+encodeStr(companyId),query:{customerId:customerId,path:path}})
},
//认领客户
async toRL(row){
this.RLcompanyName = row.companyName
this.RLcompanyName = row.companyName.replace(/<[^>]+>/g, '')
},
async RL(){
let res = await historyClaim(this.RLcompanyName)
......@@ -377,6 +377,7 @@ export default {
color: #3D3D3D;
font-weight: 400;
position: relative;
line-height: 32px;
&::after{
content: ' ';
width: 2px;
......
......@@ -280,6 +280,7 @@ export default {
}
}
}
this.defaultRoute = JSON.parse(JSON.stringify(this.sideRoute))
}
}
},
......
<template>
<div class="Tables">
<div class="table-item">
<el-table v-if="tableDataTotal>0" class="fixed-table"
<el-table v-if="tableDataTotal>0" class="fixed-table" max-height="640"
v-loading="tableLoading"
:data="tableData"
element-loading-text="Loading"
......
<template>
<el-skeleton animated>
<template slot="template">
<el-skeleton-item variant="text" style="width: 60%;"/>
<el-skeleton-item variant="text" style="width: 100%;" />
<el-skeleton-item variant="text" style="width: 100%;" />
<el-skeleton-item variant="text" style="width: 100%;" />
<el-skeleton-item variant="text" style="width: 60%;" />
<el-skeleton-item variant="text" style="width: 100%;" />
<el-skeleton-item variant="text" style="width: 100%;" />
<el-skeleton-item variant="text" style="width: 100%;" />
</template>
</el-skeleton>
</template>
<script>
export default {
name: 'skeleton'
}
</script>
<style lang="scss" scoped>
.el-skeleton__item{
height: 20px;
border-radius: 0;
margin: 9px 0;
background: #f0f0f0;
}
</style>
......@@ -8,8 +8,9 @@
:isExcel="true"
@handle-search="handleSearch"
/>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables
v-else
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
......@@ -81,11 +82,13 @@ export default {
},
methods: {
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
let res = await oftenAgencyPage(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
this.tableData = res.rows.map((item)=>{
item.projectInfo = typeof item.projectInfo == 'string' ? JSON.parse(item.projectInfo) : item.projectInfo
return item
......
......@@ -8,8 +8,9 @@
:isExcel="true"
@handle-search="handleSearch"
/>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables
v-else
:indexFixed="true"
:tableLoading="tableLoading"
:tableData="tableData"
......@@ -70,11 +71,13 @@ export default {
},
methods: {
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
let res = await tenderPage(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
this.tableData = res.rows
}
this.tableDataTotal = res.total
......
......@@ -8,8 +8,9 @@
:isExcel="true"
@handle-search="handleSearch"
/>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables
v-else
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
......@@ -83,11 +84,13 @@ export default {
},
methods: {
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
let res = await clientPage(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
this.tableData = res.rows
if(this.tableData&&this.tableData.length>0){
this.tableData.forEach(item => {
......
......@@ -8,8 +8,9 @@
:isExcel="true"
@handle-search="handleSearch"
/>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables
v-else
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
......@@ -93,11 +94,13 @@ export default {
},
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
let res = await historySendPage(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
this.tableData = res.rows
}
this.tableDataTotal = res.total
......
......@@ -8,8 +8,9 @@
:isExcel="true"
@handle-search="handleSearch"
/>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables
v-else
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
......@@ -83,11 +84,13 @@ export default {
},
methods: {
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
let res = await supplierPage(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
this.tableData = res.rows
if(this.tableData&&this.tableData.length>0){
this.tableData.forEach(item => {
......
......@@ -2,7 +2,9 @@
<div class="app-container part-container">
<div class="financial-header">
<div class="common-title">财务简析</div>
<div class="flex-box header-box">
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<div class="flex-box header-box" v-else>
<div class="header-item">总资产<div class="header-item-amount"><template v-if="financialDetail.totalAssets"><span>{{saveFixed(financialDetail.totalAssets)}}</span>亿元</template><template v-else>--</template></div><img src="@/assets/images/detail/financial/financial_header01_ico.png"></div>
<div class="header-item">净资产<div class="header-item-amount"><template v-if="financialDetail.belongNetAssets"><span>{{saveFixed(financialDetail.belongNetAssets)}}</span>亿元</template><template v-else>--</template></div><img src="@/assets/images/detail/financial/financial_header02_ico.png"></div>
<div class="header-item">营业收入<div class="header-item-amount"><template v-if="financialDetail.operatingIncome"><span>{{saveFixed(financialDetail.operatingIncome)}}</span>亿元</template><template v-else>--</template></div><img src="@/assets/images/detail/financial/financial_header03_ico.png"></div>
......@@ -11,7 +13,9 @@
</div>
<div class="financial-zcqk">
<div class="common-title">资产情况</div>
<ul class="zcqk-list">
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<ul class="zcqk-list" v-else>
<li v-for="(item, index) in zcqkList" :key="index" :style="zcqkList.length==1?'border-right: 0;':''">
<div class="zcqk-list-box" :style="(parity(zcqkList) && index==zcqkList.length-2) || (index == zcqkList.length-1)?'border-bottom: 0':''">
<div class="flex-box zcqk-list-line"><span class="flex-box"><img :src="item.ico">{{item.name}}</span><span v-if="item.amount"><i>{{saveFixed(item.amount)}}</i>{{item.unit}}</span><span v-else>--</span></div>
......@@ -22,7 +26,9 @@
</div>
<div class="financial-ylnl">
<div class="common-title">盈利能力</div>
<ul class="flex-box ylnl-list">
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<ul class="flex-box ylnl-list" v-else>
<li v-for="(item, index) in ylnlList" :key="index" :style="index===0?'border-left: 0;':''">
<div class="ylnl-amount"><template v-if="item.amount"><span>{{saveFixed(item.amount)}}</span>{{item.unit}}</template><template v-else>--</template></div>
<div class="ylnl-title">{{item.name}}</div>
......@@ -31,7 +37,9 @@
</div>
<div class="financial-zwqk">
<div class="common-title">负债情况及偿债能力</div>
<div class="flex-box zwqk-box">
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<div class="flex-box zwqk-box" v-else>
<div class="zwqk-info">
<div class="zwqk-title">总负债</div>
<div class="zwqk-amount"><template v-if="financialDetail.totalLiabilities"><span>{{saveFixed(financialDetail.totalLiabilities)}}</span>亿元</template><template v-else><span>--</span></template></div>
......@@ -53,7 +61,9 @@
</div>
<div class="financial-zcqk">
<div class="common-title">资金情况</div>
<ul class="zcqk-list">
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<ul class="zcqk-list" v-else>
<li v-for="(item, index) in zjqkList" :key="index" :style="zjqkList.length==1?'border-right: 0;':''">
<div class="zcqk-list-box" :style="(parity(zjqkList) && index==zjqkList.length-2) || (index == zjqkList.length-1)?'border-bottom: 0':''">
<div class="flex-box zcqk-list-line"><span class="flex-box"><img :src="item.ico">{{item.name}}</span><span v-if="item.amount"><i>{{saveFixed(item.amount)}}</i>{{item.unit}}</span></div>
......@@ -69,15 +79,17 @@
import {saveFixed} from "@/assets/js/common"
import { financial } from '@/api/detail/party-a/financial'
import * as echarts from 'echarts'
import skeleton from '@/views/project/projectList/component/skeleton'
import NoData from '../component/noData'
export default {
name: 'Financial',
props: ['companyId'],
components: {
NoData
NoData,skeleton
},
data() {
return {
isSkeleton:true,
saveFixed,
financialDetail: {},
// 资产情况
......@@ -138,10 +150,12 @@ export default {
},
methods: {
async handleQuery() {
this.isSkeleton = true;
this.tableLoading = true
let res = await financial({cid:this.companyId})
this.tableLoading = false
if(res.code==200 && res.data){
this.isSkeleton = false;
this.financialDetail = res.data
//资产情况
let { totalAssets, belongNetAssets, monetaryFunds, accountsReceivable, landAssets, otherReceivable, restrictedAssets, receivableFromGovRatio, govSubsidy } = this.financialDetail
......
......@@ -9,7 +9,7 @@
<div id="partBox" v-if="companyId">
<template v-if="isCompany">
<!-- 企业概览 -->
<Overview v-if="currentPath.pathName=='overview'" :company-id="companyId" :companyInfo="companyInfo" />
<Overview v-if="currentPath.pathName=='overview'" :company-id="companyId" :isSkeleton="isSkeleton" :companyInfo="companyInfo" />
<Businfo v-if="currentPath.pathName=='businfo'" :company-id="companyId" />
<Holderinfo v-if="currentPath.pathName=='holderinfo'" :company-id="companyId" />
<Execuinfo v-if="currentPath.pathName=='execuinfo'" :company-id="companyId" />
......@@ -150,6 +150,7 @@ export default {
},
data() {
return {
isSkeleton:true,
companyInfo: {},
customerInfo: {},
companyId: '', //企业Id(测试默认3068)
......@@ -250,8 +251,10 @@ export default {
}
},
async handleQuery() {
this.isSkeleton = true;
let res = await infoHeader({companyId:this.companyId})
if(res.code==200){
this.isSkeleton = false;
this.companyInfo = res.data || {}
let data = {
pageNum: 1,
......
import {encodeStr} from "@/assets/js/common"
import HeadForm from "../component/HeadForm"
import Tables from "../component/Tables"
import skeleton from '@/views/project/projectList/component/skeleton'
export default {
components: {
HeadForm,
Tables
Tables,
skeleton
},
data() {
return {
isSkeleton:true,
encodeStr
}
},
......
......@@ -7,8 +7,9 @@
:total="tableDataTotal"
@handle-search="handleSearch"
/>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables
v-else
:indexFixed="true"
:tableLoading="tableLoading"
:tableData="tableData"
......@@ -33,15 +34,18 @@
<script>
import mixin from '../mixins/mixin'
import skeleton from '@/views/project/projectList/component/skeleton'
import {creditXzxkPage} from '@/api/detail/party-a/opport'
export default {
name: 'Administrative',
props: ['companyId'],
mixins: [mixin],
components: {
skeleton
},
data() {
return {
isSkeleton:true,
queryParams: {
cid: this.companyId,
pageNum: 1,
......@@ -79,11 +83,13 @@ export default {
},
methods: {
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
let res = await creditXzxkPage(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
if(res.rows&&res.rows.length>0){
res.rows.forEach(item => {
item.smallContent = item.content.replace(/<.*?>/ig,"")
......
......@@ -9,8 +9,9 @@
:isExcel="true"
@handle-search="handleSearch"
/>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables
v-else
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
......@@ -35,15 +36,18 @@
<script>
import mixin from '../mixins/mixin'
import skeleton from '@/views/project/projectList/component/skeleton'
import {bidNoticeArea, bidNoticeTenderStage, bidNoticePage} from '@/api/detail/party-a/opport'
export default {
name: 'Announcement',
props: ['companyId'],
mixins: [mixin],
components: {
skeleton
},
data() {
return {
isSkeleton:true,
queryParams: {
cid: this.companyId,
sort: 3,
......@@ -119,11 +123,13 @@ export default {
}
},
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = this.getAreaList(params || this.queryParams)
let res = await bidNoticePage(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
this.tableData = res.rows
}
this.tableDataTotal = res.total
......
......@@ -8,8 +8,9 @@
@handle-search="handleSearch"
:total="tableDataTotal"
/>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables
v-else
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
......@@ -35,14 +36,17 @@
<script>
import mixin from '../mixins/mixin'
import {bidPlanPage,bidPlanProjectType} from '@/api/detail/party-a/opport'
import skeleton from '@/views/project/projectList/component/skeleton'
export default {
name: 'Biddingplan',
props: ['companyId'],
mixins: [mixin],
components: {
skeleton
},
data() {
return {
isSkeleton:true,
queryParams: {
cid: this.companyId,
sort: 3,
......@@ -88,11 +92,13 @@ export default {
}
},
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
let res = await bidPlanPage(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
this.tableData = res.rows
}
this.tableDataTotal = res.total
......
......@@ -8,8 +8,9 @@
:isExcel="true"
@handle-search="handleSearch"
/>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables
v-else
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
......@@ -32,14 +33,17 @@
<script>
import mixin from '../mixins/mixin'
import {specialDebtProjectPage} from '@/api/detail/party-a/opport'
import skeleton from '@/views/project/projectList/component/skeleton'
export default {
name: 'Bond',
props: ['companyId'],
mixins: [mixin],
components: {
skeleton
},
data() {
return {
isSkeleton:true,
queryParams: {
cid: this.companyId,
sort: 1,
......@@ -69,11 +73,13 @@ export default {
},
methods: {
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
let res = await specialDebtProjectPage(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
this.tableData = res.rows
}
this.tableDataTotal = res.total
......
......@@ -8,8 +8,9 @@
:isExcel="true"
@handle-search="handleSearch"
/>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables
v-else
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
......@@ -32,14 +33,17 @@
<script>
import mixin from '../mixins/mixin'
import {landUse, landTransactionPage} from '@/api/detail/party-a/opport'
import skeleton from '@/views/project/projectList/component/skeleton'
export default {
name: 'Landtransaction',
props: ['companyId'],
mixins: [mixin],
components: {
skeleton
},
data() {
return {
isSkeleton:true,
queryParams: {
cid: this.companyId,
sort: 3,
......@@ -86,11 +90,13 @@ export default {
}
},
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
let res = await landTransactionPage(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
this.tableData = res.rows
if(this.tableData.length>0){
this.tableData.map(item=>{
......
......@@ -8,8 +8,9 @@
:isExcel="true"
@handle-search="handleSearch"
/>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables
v-else
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
......@@ -35,11 +36,13 @@
<script>
import mixin from '../mixins/mixin'
import { approvalProjectPage } from '@/api/detail/party-a/opport'
import skeleton from '@/views/project/projectList/component/skeleton'
export default {
name: 'Proposed',
props: ['companyId'],
mixins: [mixin],
components: {
skeleton
},
data() {
return {
......@@ -66,7 +69,8 @@ export default {
//列表
tableLoading:false,
tableData:[],
tableDataTotal:0
tableDataTotal:0,
isSkeleton:true,
}
},
computed: {
......@@ -76,11 +80,13 @@ export default {
},
methods: {
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
let res = await approvalProjectPage(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
this.tableData = res.rows
}
this.tableDataTotal = res.total
......
......@@ -8,8 +8,9 @@
:isExcel="true"
@handle-search="handleSearch"
/>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables
v-else
:indexFixed="true"
:tableLoading="tableLoading"
:tableData="tableData"
......@@ -40,12 +41,14 @@
<script>
import mixin from '../mixins/mixin'
import skeleton from '@/views/project/projectList/component/skeleton'
import { bidNoticeProProjectType, bidNoticeProProjectPurposes, bidNoticeProAssessmentWay, bidNoticeProPage } from '@/api/detail/party-a/opport'
export default {
name: 'Tencent',
props: ['companyId'],
mixins: [mixin],
components: {
skeleton
},
data() {
return {
......@@ -86,7 +89,8 @@ export default {
//列表
tableLoading:false,
tableData:[],
tableDataTotal:0
tableDataTotal:0,
isSkeleton:true,
}
},
computed: {
......@@ -125,11 +129,13 @@ export default {
}
},
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
let res = await bidNoticeProPage(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
this.tableData = res.rows
if(this.tableData&&this.tableData.length>0){
this.tableData.forEach(item => {
......
<template>
<div class="app-container detail-container">
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<div class="app-container detail-container" v-else>
<head-form
title="分支机构"
:form-data="formData"
......@@ -68,6 +69,7 @@ export default {
},
methods: {
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
if(param.hasBid=='noLimit'){
......@@ -76,6 +78,7 @@ export default {
let res = await affiliates(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
this.tableData = res.rows
}
this.tableDataTotal = res.total
......
<template xmlns="http://www.w3.org/1999/html">
<div class="app-container detail-container">
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<div class="app-container detail-container" v-else>
<el-tabs v-model="activeName" @tab-click="handleClick" class="detail-tab">
<el-tab-pane label="工商信息" name="first"></el-tab-pane>
<el-tab-pane label="工商变更" :disabled="tableDataTotal>0" name="second"></el-tab-pane>
......@@ -104,11 +105,13 @@ export default {
this.handleQuery()
},
async handleQuery() {
this.isSkeleton = true;
this.tableLoading = true
let param = this.baseParams;
let res = await icInfo(param);
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
this.forInfo = res.data
}
},
......
......@@ -2,7 +2,8 @@
<div class="flex-box app-container part-container">
<div class="bid-zbph">
<div class="common-title">招标偏好</div>
<template v-if="dataAll.totalCount||dataAll.lastYearCount||dataAll.bidAmount||this.dtdata.length>0">
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<template v-if="(dataAll.totalCount||dataAll.lastYearCount||dataAll.bidAmount||this.dtdata.length>0)&& !isSkeleton">
<div class="flex-box zbph-item">
<div>历史招标总数
<el-popover
......@@ -45,9 +46,10 @@
</div>
<div class="bid-ywwl">
<div class="common-title">业务往来供应商TOP5</div>
<skeleton style="margin-left:16px;" v-if="isSkeleton1"></skeleton>
<div class="table-item">
<el-table
v-if="tableData.length>0"
v-if="tableData.length>0&& !isSkeleton1"
:data="tableData"
style="width: 100%"
>
......@@ -96,15 +98,18 @@ import {encodeStr} from "@/assets/js/common"
import {bidDataGroup, supplierPage} from '@/api/detail/party-a/overview'
import * as echarts from 'echarts'
import NoData from '../../component/noData'
import skeleton from '@/views/project/projectList/component/skeleton'
export default {
name: 'Bidding',
props: ['companyId'],
components: {
NoData
NoData,skeleton
},
data() {
return {
encodeStr,
isSkeleton:true,
isSkeleton1:true,
datatype:'1',//切换类型
dataAll: {},
dtdata:[],//数据
......@@ -121,8 +126,10 @@ export default {
},
methods: {
async handleBid(){
this.isSkeleton = true;
let res = await bidDataGroup({cid: this.companyId, spanId: this.datatype})
if(res.code==200 && res.data){
this.isSkeleton = false;
let {totalCount, lastYearCount, bidAmount} = res.data
this.dataAll = {totalCount, lastYearCount, bidAmount}
this.dtdata=res.data.groupCount.map(item=>{
......@@ -139,8 +146,10 @@ export default {
}
},
async handleSupplier() {
this.isSkeleton1 = true;
let res = await supplierPage({cid: this.companyId, sort: 1, pageNum: 1, pageSize: 5})
if(res.code==200){
this.isSkeleton1 = false;
this.tableData = res.rows
this.tableData.forEach((item, index) => {
item.amount = item.amount?parseFloat(item.amount.toFixed(6)):0
......
......@@ -5,7 +5,8 @@
<el-tab-pane label="按金额" name="0"></el-tab-pane>
<el-tab-pane label="按项目" name="1"></el-tab-pane>
</el-tabs>
<div class="flex-box clue-box">
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<div class="flex-box clue-box" v-else>
<div class="clue-echarts" v-if="viewData.length>0"><div id="echartsClue" style="width: 100%;height:300px; margin: 0 auto;"></div></div>
<div class="table-item" v-if="viewData.length>0">
......@@ -43,6 +44,7 @@
</template>
<script>
import skeleton from '@/views/project/projectList/component/skeleton'
import {projectTenderDataGroup} from '@/api/detail/party-a/overview'
import * as echarts from 'echarts'
import {changePath} from "@/assets/js/common"
......@@ -51,11 +53,12 @@ export default {
name: 'Busclue',
props: ['companyId', 'statistic'],
components: {
NoData
NoData,skeleton
},
data() {
return {
viewData:[],
isSkeleton:true,
activeIndex:0,
typeList:[
{name: '土地交易', pathName: 'landtransaction', ico: require("@/assets/images/detail/overview/clue_ico1.png"), count: 0, category:'global', field:'landInfo', dis_ico: require("@/assets/images/detail/overview/clue_dis_ico1.png")},
......@@ -75,8 +78,10 @@ export default {
},
methods: {
async handleQuery(){
this.isSkeleton = true;
let res = await projectTenderDataGroup({cid: this.companyId, type: this.activeIndex})
if(res.code==200 && res.data){
this.isSkeleton = false;
let data = res.data, totalVal = data.map(item => item.value).reduce((prev, cur) => prev + cur)
this.viewData = data.map(item => {
let it = {name:item.name, value:item.value, percent:parseFloat(Number(Number(item.value)/Number(totalVal)*100).toFixed(2))}
......
......@@ -12,7 +12,8 @@
<el-tab-pane label="总资产" name="2"></el-tab-pane>
<el-tab-pane label="净资产" name="3"></el-tab-pane>
</el-tabs>
<div class="flex-box finance-box">
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<div class="flex-box finance-box" v-else>
<div class="finance-echarts" v-if="viewData.length>0"><div id="echartsFinance" style="width: 100%;height:300px; margin: 0 auto;"></div></div>
<div class="finance-no-data" v-else>
<no-data />
......@@ -61,6 +62,7 @@
</template>
<script>
import skeleton from '@/views/project/projectList/component/skeleton'
import {financialData} from '@/api/detail/party-a/overview'
import * as echarts from 'echarts'
import NoData from '../../component/noData'
......@@ -68,11 +70,12 @@ export default {
name: 'Finance',
props: ['companyId'],
components: {
NoData
NoData,skeleton
},
data() {
return {
viewData:[],
isSkeleton:true,
activeIndex:0,
vals:['operatingIncome','netProfit','totalAssets','netAssets'],
names:['营业收入(亿)','净利润(亿)','总资产(亿)','净资产(亿)'],
......@@ -85,8 +88,10 @@ export default {
},
methods: {
async handleQuery(val){
this.isSkeleton = true;
let res = await financialData({cid: this.companyId})
if(res.code==200 && res.data){
this.isSkeleton = false;
this.viewData = res.data
if(this.viewData.length>0){
this.$nextTick(() => {
......
......@@ -66,7 +66,7 @@
</div>
</div>
<div class="company-menu">
<el-button v-if="companyInfo.claimStatus==1" @click="cancelClaimClick()" class="hasClaim"><i class="el-ico-claim" alt="已认领" title="已认领"></i> 已认领</el-button>
<el-button v-if="companyInfo.claimStatus==0" @click="cancelClaimClick()" class="hasClaim"><i class="el-ico-claim" alt="已认领" title="已认领"></i> 已认领</el-button>
<el-button @click="handleClaim" v-else class="claim" v-loading="claimLoading"><i class="el-ico-claim" alt="认领客户" title="认领客户"></i> 认领客户</el-button>
</div>
......@@ -231,7 +231,7 @@ export default {
this.claimLoading = false
if(res.code==200){
this.dialogVisible=true
this.companyInfo.claimStatus = 1
this.companyInfo.claimStatus = 0
this.customerId = res.data.customerId
}
}else{
......@@ -252,7 +252,7 @@ export default {
let res = await api.historyClaim(this.companyInfo.companyName)
if(res.code==200){
this.dialogVisible2 = false;
this.companyInfo.claimStatus = 1
this.companyInfo.claimStatus = 0
}else{
this.$message.error(res.msg)
}
......@@ -261,7 +261,7 @@ export default {
let res = await api.cancelClaim(this.companyInfo.companyName)
if(res.code==200){
this.dialogVisible1 = false;
this.companyInfo.claimStatus = 0
this.companyInfo.claimStatus = 1
}else{
this.$message.error(res.msg)
}
......
<template>
<div class="app-container operations-container">
<div class="common-title">公司经营</div>
<div class="part-swiper" v-if="operList.length>0">
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<div class="part-swiper" v-if="operList.length>0&&!isSkeleton">
<div class="swiper-containers swiper-oper" :style="operList.length<=6?'margin-left:0px; width: 100%;':''">
<ul class="swiper-wrapper">
<li class="swiper-slide" v-for="(item, index) in operList" :key="index">
......@@ -18,7 +19,7 @@
<div class="swiper-button-prev swiper-oper-prev" slot="button-prev" style="left: 0;"><i class="el-icon-arrow-left"></i></div>
<div class="swiper-button-next swiper-oper-next" slot="button-next" style="right: 0"><i class="el-icon-arrow-right"></i></div>
</div>
<div class="part-swiper" v-else>
<div class="part-swiper" v-if="operList.length==0&&!isSkeleton">
<no-data />
</div>
<div class="flex-box operations-list">
......@@ -33,17 +34,19 @@
<script>
import {bondCreditRating} from '@/api/detail/party-a/overview'
var Swiper = require('@/assets/lib/swiper/swiper-bundle.min.js')
import skeleton from '@/views/project/projectList/component/skeleton'
import "@/assets/lib/swiper/swiper-bundle.css"
import NoData from '../../component/noData'
export default {
name: 'Overview',
props: ['companyId', 'financial'],
components: {
NoData
NoData,skeleton
},
data() {
return {
operList: [],
isSkeleton:true,
gsjyList: [
{ name: '总资产', ico: require('@/assets/images/detail/overview/gsjy_ico1.png'), amount: ''},
{ name: '净资产', ico: require('@/assets/images/detail/overview/gsjy_ico2.png'), amount: ''},
......@@ -71,8 +74,10 @@ export default {
})
},
async handleQuery() {
this.isSkeleton = true;
let res = await bondCreditRating({cid: this.companyId})
if(res.code==200){
this.isSkeleton = false;
this.operList = res.data || []
this.$nextTick(() => {
this.companySwiper()
......
......@@ -6,7 +6,8 @@
<el-tab-pane label="对外投资" :disabled="shipTotal<1" name="second"></el-tab-pane>
<el-tab-pane label="分支机构" :disabled="affiliatesTotal<1" name="third"></el-tab-pane>
</el-tabs>
<div class="table-item">
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<div class="table-item" v-else>
<div class="rela-person" v-show="activeName=='first'">实际控制人:{{financial&&financial.actualController || '--'}}</div>
<el-table :data="holderData" border style="width: 100%" v-show="activeName=='first'">
<el-table-column label="序号" width="55" align="left" fixed>
......@@ -103,14 +104,16 @@
import {encodeStr, changePath} from "@/assets/js/common"
import {bestStockPage, investment,affiliates} from '@/api/detail/party-a/overview'
import NoData from '../../component/noData'
import skeleton from '@/views/project/projectList/component/skeleton'
export default {
name: 'Relationship',
props: ['companyId', 'financial'],
components: {
NoData
NoData,skeleton
},
data() {
return {
isSkeleton:true,
encodeStr,
activeName:'first',
//表格数据
......@@ -147,8 +150,10 @@ export default {
},
methods: {
async handleQuery(){
this.isSkeleton = true;
let res = await bestStockPage(this.holderParams)
if(res.code==200){
this.isSkeleton = false;
if(res.rows&&res.rows.length>0){
res.rows.forEach(item => {
item.stockPercent?item.stockPercent = parseFloat(Number(item.stockPercent*100).toFixed(4))+'%':''
......
<template>
<div class="app-container rela-container">
<div class="common-title">高管</div>
<div class="table-item">
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<div class="table-item" v-else>
<el-table
v-if="tableData.length>0"
:data="tableData"
......@@ -36,12 +37,13 @@
<script>
import {keymembers} from "@/api/detail/party-a/overview"
import NoData from '../../component/noData'
import skeleton from '@/views/project/projectList/component/skeleton'
export default {
name: 'Senior',
props: ['companyId'],
data() {
return {
isSkeleton:true,
queryParams: {
cid: this.companyId,
pageNum: 1,
......@@ -52,7 +54,7 @@ export default {
}
},
components: {
NoData
NoData,skeleton
},
created() {
this.handleQuery()
......@@ -61,8 +63,10 @@ export default {
},
methods: {
async handleQuery(){
this.isSkeleton = true;
let res = await keymembers(this.queryParams)
if(res.code==200){
this.isSkeleton = false;
let tempRows = []
if(res.rows&&res.rows.length>0){
let arrLength = res.rows.length%2==0?(res.rows.length/2):(Math.floor(res.rows.length/2)+1)
......
<template>
<div class="flex-box app-container part-container">
<div class="tender-list" ref="zbggScroll" @scroll="scrollbottom()">
<div class="common-title">招标公告</div>
<template v-if="zbggList.length>0">
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<template v-if="zbggList.length>0&&!isSkeleton">
<div class="tender-item" v-for="(item, index) in zbggList" :key="index">
<div class="flex-box tender-title"><div class="text-cl2" :title="item.projectName"><router-link :to="'/radar/Notice/details/'+item.bid" tag="a" class="a-link">{{item.projectName}}</router-link></div><span :class="item.projectCategory=='项目动态'?'style2':item.tag=='招投标'?'style4':'style1'" v-if="item.projectCategory">{{item.projectCategory}}</span></div>
<span class="tender-time"><span @click="handleUrl(item.url)" style="cursor: pointer;">{{item.dataSource}}</span> {{item.issueTime}}</span>
</div>
</template>
<div class="tender-no-data" v-else>
<div class="tender-no-data" v-if="zbggList.length==0&&!isSkeleton">
<no-data />
</div>
</div>
<div class="tender-list" ref="trendScroll" @scroll="scrollbottom(true)">
<div class="tender-list" ref="trendScroll" @scroll="scrollbottom(true)" >
<div class="common-title">企业动态</div>
<template v-if="trendList.length>0">
<skeleton style="margin-left:16px;" v-if="isSkeleton1"></skeleton>
<template v-if="trendList.length>0&&!isSkeleton1">
<div class="tender-item" v-for="(item, index) in trendList" :key="index">
<div class="flex-box tender-title"><div class="text-cl2" :title="tendTitle(item.details)">{{tendTitle(item.details)}}</div><span :class="item.parentDimension=='新增分支机构'?'style2':item.parentDimension=='新增施工工法'?'style3':'style1'">{{item.parentDimension}}</span></div>
<span class="tender-time">{{item.createTime}}</span>
</div>
</template>
<div class="tender-no-data" v-else>
<div class="tender-no-data" v-if="trendList.length==0&&!isSkeleton1">
<no-data />
</div>
</div>
......@@ -30,14 +33,17 @@
<script>
import {bidNoticePage, dynamicPage} from "@/api/detail/party-a/overview"
import NoData from '../../component/noData'
import skeleton from '@/views/project/projectList/component/skeleton'
export default {
name: 'Tender',
props: ['companyId'],
components: {
NoData
NoData,skeleton
},
data() {
return {
isSkeleton:true,
isSkeleton1:true,
zbggParams: {
cid: this.companyId,
sort: 3,
......@@ -81,15 +87,19 @@ export default {
},
methods: {
async handleQuery() {
this.isSkeleton = true;
this.isSkeleton1 = true;
let [notice, namic] = await Promise.all([
bidNoticePage(this.zbggParams),
dynamicPage(this.trendParams)
])
if(notice.code==200){
this.isSkeleton = false;
this.zbggList = notice.rows;
this.zbggTotal = notice.total;
}
if(namic.code==200){
this.isSkeleton1 = false;
this.trendList = namic.rows;
this.trendTotal = namic.total;
}
......
<template>
<div class="app-container detail-container">
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<div class="app-container detail-container" v-else>
<head-form
title="高管信息"
:form-data="formData"
......@@ -66,11 +67,13 @@ export default {
},
methods: {
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
let res = await keymembers(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
let tempRows = []
if(res.rows&&res.rows.length>0){
let arrLength = res.rows.length%2==0?(res.rows.length/2):(Math.floor(res.rows.length/2)+1)
......
<template>
<div class="app-container detail-container">
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<div class="app-container detail-container" v-else>
<head-form
title=""
:form-data="formData"
......@@ -78,12 +79,14 @@ export default {
this.handleQuery()
},
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
param.isHistory = this.activeName == 'first' ? 0 : 1
let res = await bestStockPage(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
this.tableData = res.rows
}
this.tableDataTotal = res.total
......
<template>
<div class="app-container detail-container">
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<div class="app-container detail-container" v-else>
<head-form
title="对外投资"
:form-data="formData"
......@@ -97,11 +98,13 @@ export default {
},
methods: {
async handleQuery(params) {
this.isSkeleton = true;
this.tableLoading = true
let param = params?params:this.queryParams
let res = await investment(param)
this.tableLoading = false
if(res.code==200){
this.isSkeleton = false;
this.tableData = res.rows
}
this.tableDataTotal = res.total
......
<template>
<div class="app-container part-container">
<div class="view-content"><Infoheader :companyId="companyId" :companyInfo="companyInfo" :statistic="statistic" /></div><!-- 企业信息 -->
<div class="view-content"><skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton><Infoheader v-else :companyId="companyId" :companyInfo="companyInfo" :statistic="statistic" /></div><!-- 企业信息 -->
<div class="view-content"><Operations :companyId="companyId" :financial="financial" /></div><!-- 公司经营 -->
<div class="view-content"><Bidding :companyId="companyId" /></div><!--招标偏好、业务往来-->
<div class="view-content"><Busclue :companyId="companyId" :statistic="statistic" /></div><!--商机线索-->
......@@ -23,10 +23,11 @@ import Finance from './component/finance'
import Relationship from './component/relationship'
import Senior from './component/senior'
import Risk from './component/risk'
import skeleton from '@/views/project/projectList/component/skeleton'
import Tender from "./component/tender"
export default {
name: 'Overview',
props: ['companyId', 'companyInfo'],
props: ['companyId', 'companyInfo','isSkeleton'],
components: {
Infoheader,
Operations,
......@@ -36,6 +37,7 @@ export default {
Senior,
Risk,
Finance,
skeleton,
Tender
},
data() {
......
......@@ -8,9 +8,9 @@
:isExcel="true"
@handle-search="handleSearch"
/>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<tables
:tableLoading="tableLoading"
v-if="!isSkeleton"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
......@@ -27,11 +27,12 @@ import {
abnormalYears
} from '@/api/detail/party-a/riskInformation'
import mixin from '../mixins/mixin'
import skeleton from '../component/skeleton'
export default {
name: 'BusinessAnomaly',
mixins: [mixin],
components: {
skeleton
},
props: ['companyId'],
data() {
......@@ -56,6 +57,7 @@ export default {
tableLoading:false,
tableData:[],
tableDataTotal:0,
isSkeleton:true
}
},
created() {
......@@ -68,11 +70,11 @@ export default {
methods: {
handleQuery(params) {
let data = params ? params : this.queryParams
this.tableLoading = true
this.isSkeleton = true
abnormalPage(data).then(res => {
this.tableData = res.rows
this.tableDataTotal = res.total
this.tableLoading = false
this.isSkeleton = false
})
},
years(){
......
......@@ -8,9 +8,9 @@
:isExcel="true"
@handle-search="handleSearch"
/>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<tables
:tableLoading="tableLoading"
v-if="!isSkeleton"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
......@@ -29,11 +29,12 @@ import {
noticesCaseReason
} from '@/api/detail/party-a/riskInformation'
import mixin from '../mixins/mixin'
import skeleton from '../component/skeleton'
export default {
name: 'CourtNotice',
mixins: [mixin],
components: {
skeleton
},
props: ['companyId'],
data() {
......@@ -60,6 +61,7 @@ export default {
tableLoading:false,
tableData:[],
tableDataTotal:0,
isSkeleton:true
}
},
created() {
......@@ -74,11 +76,11 @@ export default {
methods: {
handleQuery(params) {
let data = params ? params : this.queryParams
this.tableLoading = true
this.isSkeleton = true
noticesPage(data).then(res => {
this.tableData = res.rows
this.tableDataTotal = res.total
this.tableLoading = false
this.isSkeleton = false
})
},
// 公告
......
......@@ -8,10 +8,10 @@
:isExcel="false"
@handle-search="handleSearch"
/>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<tables
v-if="!isSkeleton"
:index-fixed="true"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
......@@ -27,11 +27,12 @@ import {
executedPage
} from '@/api/detail/party-a/riskInformation'
import mixin from '../mixins/mixin'
import skeleton from '../component/skeleton'
export default {
name: 'Dishonesty',
mixins: [mixin],
components: {
skeleton
},
props: ['companyId'],
data() {
......@@ -56,6 +57,7 @@ export default {
tableLoading:false,
tableData:[],
tableDataTotal:0,
isSkeleton:true
}
},
created() {
......@@ -67,11 +69,11 @@ export default {
methods: {
handleQuery(params) {
let data = params ? params : this.queryParams
this.tableLoading = true
this.isSkeleton = true
executedPage(data).then(res => {
this.tableData = res.rows
this.tableDataTotal = res.total
this.tableLoading = false
this.isSkeleton = false
})
}
}
......
......@@ -8,9 +8,9 @@
:isExcel="false"
@handle-search="handleSearch"
/>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<tables
:tableLoading="tableLoading"
v-if="!isSkeleton"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
......@@ -26,11 +26,12 @@ import {
executedPersonsPage
} from '@/api/detail/party-a/riskInformation'
import mixin from '../mixins/mixin'
import skeleton from '../component/skeleton'
export default {
name: 'IfThePerson',
mixins: [mixin],
components: {
skeleton
},
props: ['companyId'],
data() {
......@@ -53,6 +54,7 @@ export default {
tableLoading:false,
tableData:[],
tableDataTotal:0,
isSkeleton:true
}
},
created() {
......@@ -64,11 +66,11 @@ export default {
methods: {
handleQuery(params) {
let data = params ? params : this.queryParams
this.tableLoading = true
this.isSkeleton = true
executedPersonsPage(data).then(res => {
this.tableData = res.rows
this.tableDataTotal = res.total
this.tableLoading = false
this.isSkeleton = false
})
}
}
......
......@@ -8,9 +8,9 @@
:isExcel="false"
@handle-search="handleSearch"
/>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<tables
:tableLoading="tableLoading"
v-if="!isSkeleton"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
......@@ -35,11 +35,12 @@ import {
lawsuitsRole
} from '@/api/detail/party-a/riskInformation'
import mixin from '../mixins/mixin'
import skeleton from '../component/skeleton'
export default {
name: 'Judgment',
mixins: [mixin],
components: {
skeleton
},
props: ['companyId'],
data() {
......@@ -68,6 +69,7 @@ export default {
tableLoading:false,
tableData:[],
tableDataTotal:0,
isSkeleton:true
}
},
created() {
......@@ -81,14 +83,14 @@ export default {
methods: {
handleQuery(params) {
let data = params ? params : this.queryParams
this.tableLoading = true
this.isSkeleton = true
lawsuitsPage(data).then(res => {
this.tableData = res.rows
for (var i=0;i<this.tableData.length;i++){
this.tableData[i].relatedCompanies = JSON.parse(this.tableData[i].relatedCompanies)
}
this.tableDataTotal = res.total
this.tableLoading = false
this.isSkeleton = false
})
},
lawsuitsCauseActions(){
......
......@@ -8,10 +8,10 @@
:isExcel="false"
@handle-search="handleSearch"
/>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<tables
:index-fixed="true"
:tableLoading="tableLoading"
v-if="!isSkeleton"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
......@@ -35,11 +35,12 @@ import {
kaitingPureRole
} from '@/api/detail/party-a/riskInformation'
import mixin from '../mixins/mixin'
import skeleton from '../component/skeleton'
export default {
name: 'OpenacourtsessionNotice',
mixins: [mixin],
components: {
skeleton
},
props: ['companyId'],
data() {
......@@ -71,6 +72,7 @@ export default {
tableLoading:false,
tableData:[],
tableDataTotal:0,
isSkeleton:true
}
},
created() {
......@@ -88,14 +90,14 @@ export default {
},
handleQuery(params) {
let data = params ? params : this.queryParams
this.tableLoading = true
this.isSkeleton = true
kaitingPage(data).then(res => {
this.tableData = res.rows
for (var i=0;i<this.tableData.length;i++){
this.tableData[i].relatedCompanies = JSON.parse(this.tableData[i].relatedCompanies)
}
this.tableDataTotal = res.total
this.tableLoading = false
this.isSkeleton = false
})
},
kaitingCauseActions(){
......
......@@ -8,10 +8,10 @@
:isExcel="true"
@handle-search="handleSearch"
/>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<tables
v-if="!isSkeleton"
:indexFixed="true"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
......@@ -35,11 +35,12 @@ import {
penalizePage,
penalizeReasonType
} from '@/api/detail/party-a/riskInformation'
import skeleton from '../component/skeleton'
export default {
name: 'Punish',
mixins: [mixin],
components: {
skeleton
},
props: ['companyId'],
data() {
......@@ -66,6 +67,7 @@ export default {
tableData:[],
tableDataTotal:0,
showList:[],
isSkeleton:true
}
},
created() {
......@@ -78,11 +80,11 @@ export default {
methods: {
handleQuery(params) {
let data = params ? params : this.queryParams
this.tableLoading = true
this.isSkeleton = true
penalizePage(data).then((res) => {
this.tableData = res.rows
this.tableDataTotal = res.total
this.tableLoading = false
this.isSkeleton = false
})
},
penalizeReasonTypeData(){
......
......@@ -8,8 +8,9 @@
:isExcel="true"
@handle-search="handleSearch"
/>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<tables
v-if="!isSkeleton"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
......@@ -32,11 +33,12 @@ import {
landUse
} from '@/api/detail/party-a/urbanLnvestment'
import mixin from '../mixins/mixin'
import skeleton from '../component/skeleton'
export default {
name: 'landAcquisition',
mixins: [mixin],
components: {
skeleton
},
props: ['companyId'],
data() {
......@@ -66,6 +68,7 @@ export default {
tableLoading:false,
tableData:[],
tableDataTotal:0,
isSkeleton:true
}
},
created() {
......@@ -78,11 +81,11 @@ export default {
methods: {
handleQuery(params) {
let data = params ? params : this.queryParams
this.tableLoading = true
this.isSkeleton = true
landTransactionPage(data).then(res=>{
this.tableData = res.rows
this.tableDataTotal = res.total
this.tableLoading = false
this.isSkeleton = false
})
},
//土地用途
......
......@@ -6,7 +6,8 @@
</div>
<div class="params-dw"><img src="@/assets/images/addree.png" />{{ addressList }}</div>
</div>
<div class="table-item">
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<div class="table-item" v-if="!isSkeleton">
<el-table
:tableLoading="tableLoading"
:data="getValues"
......@@ -29,13 +30,14 @@
<script>
import dataRegion from '@/assets/json/dataRegion'
import skeleton from '../component/skeleton'
import {
regionalEconomy
} from '@/api/detail/party-a/urbanLnvestment'
export default {
name: 'regionalEconomies',
components: {
skeleton
},
props: ['companyId','companyInfo'],
data() {
......@@ -209,7 +211,8 @@ export default {
label: '债务率-宽口径(%)',
},
],
tableLoading: true
tableLoading: true,
isSkeleton:true
}
},
created() {
......@@ -228,11 +231,11 @@ export default {
methods: {
//地区
regionalEconomys() {
this.tableLoading = true
this.isSkeleton = true
if(this.companyInfo){
regionalEconomy(this.params).then(res => {
this.tableData = res.data
this.tableLoading = false
this.isSkeleton = false
})
this.dataRegion(this.companyInfo.provinceId, this.companyInfo.cityId)
}
......
......@@ -87,8 +87,9 @@
</div>
</template>
</head-form>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<tables
v-if="!isSkeleton"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
......@@ -118,6 +119,7 @@
<script>
import mixin from '../mixins/mixin'
import skeleton from '../component/skeleton'
import dataRegion from '@/assets/json/dataRegion'
import {
urbanInvestmentPage,
......@@ -127,7 +129,7 @@ export default {
name: 'SameRegion',
mixins: [mixin],
components: {
skeleton
},
props: ['companyId', 'companyInfo'],
data() {
......@@ -200,6 +202,7 @@ export default {
tableLoading:false,
tableData:[],
tableDataTotal:0,
isSkeleton:true
}
},
watch:{
......@@ -338,12 +341,12 @@ export default {
},
handleQuery(params){
this.tableLoading = true
this.isSkeleton = true
let data = params ? params : this.queryParams
urbanInvestmentPage(data).then(res => {
this.tableData = res.data.list
this.tableDataTotal = res.data.totalCount
this.tableLoading = false
this.isSkeleton = false
})
},
//排序
......
......@@ -145,7 +145,7 @@
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<div class=" table-item-jf" v-if="!isSkeleton&&tableData.length>0">
<el-table :data="tableData" :header-cell-style="{ background:'#f0f3fa',color: 'rgba(35,35,35,0.8)'}" class="table-item1 fixed-table" border highlight-current-row>
<el-table :data="tableData" :header-cell-style="{ background:'#f0f3fa',color: 'rgba(35,35,35,0.8)'}" max-height="640" class="table-item1 fixed-table" border highlight-current-row>
<el-table-column type="index" label="序号" fixed width="60">
<template slot-scope="scope">
<span>{{(pageNum - 1) *20 + scope.$index + 1}}</span>
......@@ -156,13 +156,13 @@
<div class="renling">
<router-link :to="`/enterprise/${encodeStr(scope.row.companyId)}`" tag="a" class="list-titel-a" v-html="scope.row.companyName" ></router-link>
<div class="renling-btn" @click="claimbtn(scope.row)" >
<p v-if="scope.row.claimStatus" class="renling-img-true">
<p v-if="scope.row.claimStatus==0" class="renling-img-true">
</p>
<p v-else class="renling-img-false">
</p>
<span v-if="scope.row.claimStatus" @click="cancelClaim(scope.row.companyName)" class="renling-hui">
<span v-if="scope.row.claimStatus==0" @click="cancelClaim(scope.row.companyName)" class="renling-hui">
已认领
</span>
<span v-else class="renling-hei">
......@@ -480,6 +480,13 @@
<span class="dialog-footer-btn2" @click="dialogVisible1 = false">关闭</span>
</div>
</el-dialog>
<el-dialog :visible.sync="dialogVisible2" custom-class='dialog-renlin' title="重新认领" width="260px" :show-close="false">
<div>再次认领将会恢复客户数据</div>
<div slot="footer" class="dialog-footer">
<span class="dialog-footer-btn1" type="primary" @click="handleHistoryClaim()">确认</span>
<span class="dialog-footer-btn2" @click="dialogVisible2 = false">关闭</span>
</div>
</el-dialog>
</div>
</template>
......@@ -504,6 +511,7 @@ export default {
value: "id",
},
pageSize: 20,
dialogVisible2:false,
jskBidQueryDto: {
provinceIds: [],
cityIds: [],
......@@ -795,10 +803,19 @@ export default {
this.$nextTick(() => {
this.pageFlag = true;
});
},
async handleHistoryClaim(){
let res = await api.historyClaim(this.companyName)
if(res.code==200){
this.dialogVisible2 = false;
this.search();
}else{
this.$message.error(res.msg)
}
},
claimbtn(item){
if(item.claimStatus){
return ;
if(item.claimStatus==1){
return this.dialogVisible2=true;
}
this.companyId=item.companyId;
var info={};
......
......@@ -422,7 +422,6 @@ export default {
cbxmzs:'193',
cbxmzje:'123',
},
],
gjjlData:[
{
......@@ -672,7 +671,6 @@ export default {
global: false
}
},
},
{
data: this.jyfxData1.map(item => item.dcjzje),
......
......@@ -108,6 +108,9 @@
export default {
name: 'comparison',
props:['dataQuery','provinceId'],
components: {
},
data() {
return {
queryParams: {
......@@ -292,7 +295,8 @@ export default {
regionData:[],
compareList:[{},{},{},{},{}],
fixed: false,
StyWidth:null
StyWidth:null,
isSkeleton:true
}
},
watch: {
......
......@@ -15,7 +15,8 @@
<span class="flex-box" @click="handleMessage"><img src="@/assets/images/ability_excel.png">导出EXCEL</span>
</div>
</div>
<div class="content">
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<div class="content" v-if="data.length > 0 && !isSkeleton">
<div class="content-left">
<div id="echarts" style="height: 400px"></div>
<p class="tips"> 注:数据均来源于统计公报、统计年鉴,实际披露中由于部分地区最新年度数据不全,导致年份间数据差距较大</p>
......@@ -29,37 +30,40 @@
highlight-current-row
:summary-method="getSummaries"
show-summary
@sort-change="sortChange"
>
<el-table-column label="序号" width="60" align="left">
<template slot-scope="scope">{{ scope.$index + 2 }}</template>
</el-table-column>
<el-table-column label="产业类型" prop="projectType"></el-table-column>
<el-table-column :label="oneYear">
<el-table-column prop="money" label="金额(亿元)" sortable></el-table-column>
<el-table-column prop="rate" label="占比(%)"> </el-table-column>
<el-table-column prop="money" label="金额(亿元)" sortable="custom" :formatter="formatStatus"></el-table-column>
<el-table-column prop="rate" label="占比(%)" sortable> </el-table-column>
</el-table-column>
<el-table-column :label="twoYear">
<el-table-column prop="lastMoney" label="金额(亿元)" sortable> </el-table-column>
<el-table-column prop="lastRate" label="占比(%)" > </el-table-column>
<el-table-column prop="lastMoney" label="金额(亿元)" sortable="custom" :formatter="formatStatus"> </el-table-column>
<el-table-column prop="lastRate" label="占比(%)" sortable> </el-table-column>
</el-table-column>
</el-table>
</div>
</div>
<!--<div class="content content-box" v-else>-->
<!--<div class="empty">-->
<!--<img class="img" src="@/assets/images/project/empty.png">-->
<!--<div class="p1">抱歉,暂无专项债项目数据</div>-->
<!--</div>-->
<!--</div>-->
<div class="empty" v-if="data.length === 0 && !isSkeleton">
<img class="img" src="@/assets/images/project/empty.png">
<div class="p1">抱歉,暂无数据展示</div>
</div>
</div>
</template>
<script>
import * as echarts from 'echarts';
import { bidGroupCountByProjectType,bidMoneyGroupByProjectType,getYears } from '@/api/macro/macro'
import skeleton from '../../component/skeleton'
export default {
name: 'industrialStructure',
props:['dataQuery','provinceId'],
components: {
skeleton
},
data() {
return {
queryParams: {
......@@ -68,11 +72,13 @@ export default {
},
yearOptions: [],
tableData:[],
tabData:[],
tableLoading: false,
data:[],
oneYear:'',
twoYear:'',
state:false
state:false,
isSkeleton:true
}
},
watch: {
......@@ -86,11 +92,14 @@ export default {
this.yearOptions=res.data.reverse();
this.queryParams.year = this.yearOptions[0].year;
})
// setTimeout(() => {
// this.isSkeleton=false;
// this.getData()
// this.getGroupCount()
// }, 1000);
this.$nextTick(()=>{
this.getData()
this.getGroupCount()
this.$nextTick(()=>{
})
},
methods: {
......@@ -112,6 +121,7 @@ export default {
if(this.provinceId.length >= 2){
params.county=this.provinceId[2]
}
bidMoneyGroupByProjectType(params).then(res => {
if(res.data.length > 0){
let list=[]
......@@ -133,16 +143,21 @@ export default {
}
}
for(let i=0; i<list.length; i++){
list[i].money=list[i].money ? Number(list[i].money).toFixed(2) : '-';
// list[i].money=list[i].money ? Number(list[i].money).toFixed(2) : '-';
list[i].rate=list[i].rate ? Number(list[i].rate).toFixed(2) : '-';
list[i].lastMoney=list[i].lastMoney ? Number(list[i].lastMoney).toFixed(2) : '-';
// list[i].lastMoney=list[i].lastMoney ? Number(list[i].lastMoney).toFixed(2) : '-';
list[i].lastRate=list[i].lastRate ? Number(list[i].lastRate).toFixed(2) : '-';
}
this.tableData=list.reverse()
this.tabData=list.reverse()
}else {
this.tableData=[]
this.tabData=[]
}
})
},
getGroupCount(){
this.isSkeleton = true
let mydate=new Date();
let startTime=''
let endTime=''
......@@ -173,13 +188,17 @@ export default {
list.push(item);
}
this.data=list;
// if(list.length > 0){
if(list.length > 0){
this.$nextTick(() => {
this.initChart()
// }
})
}
}
this.isSkeleton = false
})
},
initChart() {
this.$nextTick(() => {
let myChart = echarts.init(document.getElementById("echarts"))
let option ={
label: {
......@@ -226,6 +245,7 @@ export default {
window.addEventListener("resize", function () {
myChart.resize();//图表跟随页面大小变化宽度
});
})
},
handleMessage(){
this.$message({
......@@ -270,6 +290,47 @@ export default {
});
return sums;
},
sortChange(column) {
if (column.order !== null && column.prop) {
let data1 = [];
let data2 = [];
for (let i = 0; i < this.tableData.length; i++) {
this.tableData[i].money=this.tableData[i].money ? Number(this.tableData[i].money) : 0
this.tableData[i].lastMoney=Number(this.tableData[i].lastMoney)
let temp = null;
temp = this.tableData[i][column.prop];
if (temp === null || typeof temp == "undefined") {
data2.push(this.tableData[i]);
} else {
data1.push(this.tableData[i]);
}
}
if (column.order === "ascending") {
data1 = data1.sort(this.compare(column.prop, "ascending"));
} else {
data1 = data1.sort(this.compare(column.prop, "descending"));
}
this.$nextTick(() => {
this.tableData = data1.concat(data2);
});
}
if (column.order === null) {
this.tableData = this.tabData; // tabData存放的是list副本,不排序时恢复到初始状态
}
this.$forceUpdate()
},
compare(property, type, prop) {
return function(obj1, obj2) {
if (type === "ascending") {
return obj1[property] - obj2[property];
} else {
return obj2[property] - obj1[property];
}
};
},
formatStatus: function(row, column, cellValue) {
return cellValue? Number(cellValue).toFixed(2) : '-'
},
}
}
......@@ -347,9 +408,10 @@ export default {
}
}
}
}
.empty{
margin: 0 auto;
height: 550px;
height: 400px;
text-align: center;
.img{
width: 108px;
......@@ -361,12 +423,6 @@ export default {
color: #333333;
font-size: 16px;
}
.p2{
color: #999999;
font-size: 14px;
margin-top: 8px;
}
}
}
}
</style>
<template>
<div class="regionalEconomy">
<div class="content">
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<div v-if="!isSkeleton" class="content">
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title">经济数据</span>
......@@ -35,12 +36,12 @@
</el-table-column>
<el-table-column prop="gdp" label="GDP(亿元)" sortable width="120" :formatter="formatStatus"/>
<el-table-column prop="gdpGrowth" label="GDP增速" sortable width="100" :formatter="formatStatus"/>
<el-table-column prop="gdpGrowth" label="GDP增速(%)" sortable width="100" :formatter="formatStatus"/>
<el-table-column prop="gdpPerCapita" label="人均GDP(元)" sortable width="130" :formatter="formatStatus"/>
<el-table-column prop="population" label="人口(万人)" sortable width="120" :formatter="formatStatus"/>
<el-table-column prop="fixedInvestment" label="固定资产投资 (亿元) " sortable width="200" :formatter="formatStatus"/>
<el-table-column prop="gbr" label="一般公共预算收入(亿元)" sortable width="200" :formatter="formatStatus"/>
<el-table-column prop="gbe" label="一般公共预算支出(亿 元)" sortable width="200" :formatter="formatStatus"/>
<el-table-column prop="gbe" label="一般公共预算支出(亿元)" sortable width="200" :formatter="formatStatus"/>
<el-table-column prop="govFundIncome" label="政府性基金收入(亿元)" sortable width="200" :formatter="formatStatus"/>
<el-table-column prop="govDebtBalance" label="地方政府债务余额(亿元)" sortable width="200" :formatter="formatStatus"/>
<el-table-column prop="uipInterestBearingDebt" label="城投平台有息债务(亿元)" sortable width="200" :formatter="formatStatus"/>
......@@ -52,15 +53,18 @@
<el-pagination background :current-page="pageIndex" :page-size="pageSize" :total="tableDataTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div>
</div>
</div>
</template>
<script>
import { nationalPage,getYears } from '@/api/macro/macro'
import skeleton from '../../component/skeleton'
export default {
name: 'localEconomy',
props:['dataQuery','provinceId'],
components: {
skeleton
},
data() {
return {
queryParams: {
......@@ -74,7 +78,8 @@ export default {
pageSize: 20,
tableDataTotal: 0,
show_page:true,
MaxPage:500
MaxPage:500,
isSkeleton:true
}
},
watch: {
......@@ -95,6 +100,7 @@ export default {
},
methods: {
getData(){
this.isSkeleton = true
const params = { pageNum: this.pageIndex, pageSize: this.pageSize, year: this.queryParams.year,type:2 }
if(this.queryParams.field){
params.field=this.queryParams.field
......@@ -113,6 +119,7 @@ export default {
}
// params.provinceIds=[this.dataQuery.provinceId]
nationalPage(params).then(res => {
this.isSkeleton = false
this.tableData = res.data.list
this.tableDataTotal = res.data.totalCount
})
......
......@@ -173,7 +173,7 @@ export default {
}
}
location(params).then(res => {
console.log(res.data)
// console.log(res.data)
})
}
}
......
......@@ -31,6 +31,7 @@
element-loading-text="Loading"
border
fit
height="640"
@sort-change="sortChange"
highlight-current-row
v-if="tableDataTotal > 0 && !isSkeleton"
......
......@@ -36,6 +36,7 @@
element-loading-text="Loading"
@sort-change="sortChange"
border
height="640"
highlight-current-row
v-if="tableDataTotal > 0 && !isSkeleton"
:default-sort = "{prop: 'gdp', order: 'descending'}"
......@@ -153,22 +154,12 @@
this.getYears()
},
mounted() {
// window.addEventListener("scroll",this.scrolling)
},
beforeDestroy() {
// window.removeEventListener("scroll", this.scrolling);
},
methods: {
scrolling() {
// let el = document.getElementsByClassName("el-table__fixed-header-wrapper")[0]
// let scrollTop =window.pageYOffset ||document.documentElement.scrollTop ||document.body.scrollTop;
// if (scrollTop>138){
// let top = scrollTop-138
// el.style.top = top+'px'
// }else{
// el.style.top = 0
// }
},
getYears(){
getYears({}).then(res => {
this.yearOptions=res.data.reverse();
......
<template>
<div class="shangji">
<div class="tabs">
<span :class="index === 0 ? 'color' : ''" @click="handleClick(0)">土地交易</span>
<span :class="index === 1 ? 'color' : ''" @click="handleClick(1)">招标公告</span>
</div>
<Tdjy v-if="index === 0"></Tdjy>
<Zhaobiao v-if="index === 1"></Zhaobiao>
</div>
</template>
<script>
import * as echarts from 'echarts';
import { countGroupByMonth,countGroupByProvince,getYear } from '@/api/macro/macro'
import Tdjy from './tdjy'
import Zhaobiao from './zhaobiao'
export default {
name: 'NationalEconomies',
components: {
Tdjy,Zhaobiao
},
data() {
return {
index:0,
}
},
created() {
},
methods: {
handleClick(key){
this.index=key
},
}
}
</script>
<style lang="scss" scoped>
.shangji{
.tabs{
.color{
background: linear-gradient(136deg, #3181FA 0%, #1371FD 100%);
box-shadow: 0px 0px 1px 0px rgba(49,129,250,0.4471);
color:#ffffff;
}
span{
display: inline-block;
width: 88px;
height: 32px;
line-height: 32px;
background: #FFFFFF;
box-shadow: 0px 0px 1px 0px rgba(49,129,250,0.4471);
border-radius: 2px;
border: 1px solid #0081FF;
color: #0081FF;
font-size: 14px;
text-align: center;
margin: 12px 16px 12px 0;
cursor: pointer;
}
}
}
</style>
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment