Commit 26282b9d authored by caixingbing's avatar caixingbing
parents a184427b 147b5941
...@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -69,17 +70,6 @@ public class BusinessFileController extends BaseController { ...@@ -69,17 +70,6 @@ public class BusinessFileController extends BaseController {
return getDataTable(allFiles); return getDataTable(allFiles);
} }
/* *//**
* 上传文件及文件夹
* @param url
* @param folderPath
* @return
*//*
@GetMapping("/upload/{url}/{folderPath}")
public AjaxResult uploadFolder(@PathVariable("url") String url,@PathVariable("folderPath") String folderPath) throws IOException {
return toAjax(FileUtils.uploadFolder(url, LOCALPATH + folderPath));
}*/
/** /**
* 上传文件及文件夹 * 上传文件及文件夹
* @param file 文件流 * @param file 文件流
...@@ -87,7 +77,7 @@ public class BusinessFileController extends BaseController { ...@@ -87,7 +77,7 @@ public class BusinessFileController extends BaseController {
* @return * @return
*/ */
@PostMapping("/upload") @PostMapping("/upload")
public AjaxResult uploadFolder(@RequestPart("file") MultipartFile file,HttpServletRequest request){ public AjaxResult uploadFolder(@RequestPart("file") MultipartFile file, HttpServletRequest request){
try { try {
String businessFileName = request.getHeader("FilePath"); String businessFileName = request.getHeader("FilePath");
// 上传文件路径 // 上传文件路径
...@@ -96,7 +86,7 @@ public class BusinessFileController extends BaseController { ...@@ -96,7 +86,7 @@ public class BusinessFileController extends BaseController {
String fileName = FileUploadUtils.upload(filePath, file); String fileName = FileUploadUtils.upload(filePath, file);
String url = serverConfig.getUrl() + fileName; String url = serverConfig.getUrl() + fileName;
AjaxResult ajax = AjaxResult.success(); AjaxResult ajax = AjaxResult.success();
ajax.put("url", url); ajax.put("url", fileName);
return ajax; return ajax;
} catch (IOException e) { } catch (IOException e) {
return AjaxResult.error(e.getMessage()); return AjaxResult.error(e.getMessage());
...@@ -105,12 +95,11 @@ public class BusinessFileController extends BaseController { ...@@ -105,12 +95,11 @@ public class BusinessFileController extends BaseController {
/** /**
* 下载文件 * 下载文件
* @param url * @param filePath 要下载的文件路径
* @param targetFolder * @param response 返回的响应
* @return
*/ */
@GetMapping("/download/{url}/{targetFolder}") @PostMapping("/download")
public AjaxResult downloadFolder(@PathVariable("url") String url,@PathVariable("targetFolder") String targetFolder) throws IOException { public void downloadFolder(@RequestBody BusinessIdDto filePath, HttpServletResponse response) {
return toAjax(FileUtils.downloadFolder(url, targetFolder)); FileUtils.downloadByFilePath(filePath.getFilePath(),response);
} }
} }
...@@ -40,7 +40,7 @@ public class CompanySearchController { ...@@ -40,7 +40,7 @@ public class CompanySearchController {
/* /*
* 完全匹配企业名称 * 完全匹配企业名称
*/ */
@GetMapping("/page") @PostMapping("/page")
public AjaxResult page(@RequestBody ComposeQueryDto compose) { public AjaxResult page(@RequestBody ComposeQueryDto compose) {
return opportunityRadarService.enterprisePage(compose); return opportunityRadarService.enterprisePage(compose);
} }
......
/**
*
*/
package com.dsk.web.controller.search.macroMarket;
import java.util.Arrays;
import java.util.List;
/**
* 常量类
* @author xiaofei.qin
*
*/
public final class BizConstant {
/**
* http header里的常量
*/
public final static String HEADER_KEY_TOKEN = "token";
/**
* 中国的省份编码
*/
public final static int PROVINCE_CHINA = 100000;
public static final Integer BASE_CERTIFICATE_PARENT_ID = 0;
public final static String PROJECT_DATE_GROUP = "project_date_group";
public final static String FEEDBACK_GROUP = "feedback_group";
public final static String PROJECT_AMOUNT = "project_amount";
public final static String PROJECT_AMOUNT_2 = "project_amount2";
public final static String SPLIT_CHAR = ",";
public final static String SIKUYI = "全国建筑市场监管公共服务平台";
public final static String OTHER = "其他建筑市场平台";
public final static Integer PAGE_ROW = 10;
//权限表基础保存功能
public final static String basicsave = "ROLE_SYS_PERMISSION_SAVE";
//权限表基础修改功能
public final static String basicupdate = "ROLE_SYS_PERMISSION_UPDATE";
//权限表基础删除功能
public final static String basicdelete = "ROLE_SYS_PERMISSION_DEL";
public final static List<String> SPECIAL_CHARACTER = Arrays.asList("有限", "限公", "公司", "限责", "责任", "任公", "股份", "份有", "有限公", "限公司", "有限责", "有限公司", "有限责任",
"责任公司", "有限公司", "有限责任公司", "股份有限公司", "监理", "工程", "建筑", "建设");
public final static List<String> COMPANY_NOT_CHARACTER = Arrays.asList("日期", "时间", "公告", "中标",
"候选人", "公示", "联合体", "公开");
public final static List<String> CONSTRUCTION = Arrays.asList("建设", "安装", "总承包", "EPC", "施工",
"工程", "项目", "升级", "改造", "拆除", "绿化", "楼", "路", "桥", "水", "建", "工程", "测", "房",
"改造", "路", "道", "施", "建", "处理", "地", "坡", "沟", "池", "场", "修", "设",
"舍", "标段", "城", "治", "期", "堂", "消防", "小区", "饰", "景观", "园", "栋", "馆", "站"
, "中心", "座", "规划", "殿", "厅", "库", "公寓", "厦", "车间", "院", "屋", "水利", "厕所"
, "宅", "管网", "学", "砖", "所", "点", "家", "EPC", "PMC", "DB", "DBB", "CM", "BOT", "PPP");
public final static List<String> SUPERVISION = Arrays.asList("监理");
public final static List<String> SURVEY = Arrays.asList("勘察", "设计", "测绘");
public final static List<String> CONSULTATION = Arrays.asList("咨询", "管理");
public final static List<String> OTHERBID = Arrays.asList("采购");
public final static int CONSTRUCTIONNO = 1;
public final static int SUPERVISIONNO = 2;
public final static int SURVEYNO = 3;
public final static int CONSULTATIONNO = 4;
public final static int OTHERBIDNO = 5;
/**
* 中标项目名不包含字符
*/
public final static List<String> PROJECT_NOT_CHARACTER = Arrays.asList("报价", "联合", "日期", "时间", "公告", "投标", "公开", "公布", "如下", "中标", "编号", "建造师", "元", "唱标");
public final static List<String> COMPANY_CHARACTER = Arrays.asList("公司", "局", "院", "集团",
"所", "中心", "处", "厂", "大学", "队", "部", "站", "室", "场", "合作社");
public final static List<String> COMPANY_BUILD_CHARACTER = Arrays.asList("施工", "工程", "实业", "建筑", "建设", "安装", "勘察", "设计", "监理", "技术", "科技");
public final static List<String> PROVINCE = Arrays.asList("北京", "天津", "河北",
"山西", "内蒙古", "辽宁", "吉林", "黑龙江", "上海", "江苏", "浙江", "安徽",
"福建", "江西", "山东", "河南", "湖北", "湖南", "广东", "广西", "海南",
"重庆", "四川", "贵州", "云南", "西藏", "陕西", "甘肃", "青海", "宁夏", "新疆"
);
public final static List<String> SPIDER = Arrays.asList("baidu.com", "google", "google.com", "googlebot","YisouSpider","Bytespider","bytedance.com",
"so", "so.com", "360spider", "sogou", "sogou.com", "msn", "msn.com", "bing", "bing.com", "sm.cn", "youdao");
public final static String PROVINCE_CODE = "[{\"Code\":\"CN\",\"ProvinceName\":\"全国\"},{\"Code\":\"BJ\",\"ProvinceName\":\"北京\"},{\"Code\":\"TJ\",\"ProvinceName\":\"天津\"},{\"Code\":\"HB\",\"ProvinceName\":\"河北\"},{\"Code\":\"SX\",\"ProvinceName\":\"山西\"},{\"Code\":\"NMG\",\"ProvinceName\":\"内蒙古\"},{\"Code\":\"LN\",\"ProvinceName\":\"辽宁\"},{\"Code\":\"JL\",\"ProvinceName\":\"吉林\"},{\"Code\":\"HLJ\",\"ProvinceName\":\"黑龙江\"},{\"Code\":\"SH\",\"ProvinceName\":\"上海\"},{\"Code\":\"JS\",\"ProvinceName\":\"江苏\"},{\"Code\":\"ZJ\",\"ProvinceName\":\"浙江\"},{\"Code\":\"AH\",\"ProvinceName\":\"安徽\"},{\"Code\":\"FJ\",\"ProvinceName\":\"福建\"},{\"Code\":\"JX\",\"ProvinceName\":\"江西\"},{\"Code\":\"SD\",\"ProvinceName\":\"山东\"},{\"Code\":\"HEN\",\"ProvinceName\":\"河南\"},{\"Code\":\"HUB\",\"ProvinceName\":\"湖北\"},{\"Code\":\"HUN\",\"ProvinceName\":\"湖南\"},{\"Code\":\"GD\",\"ProvinceName\":\"广东\"},{\"Code\":\"GX\",\"ProvinceName\":\"广西\"},{\"Code\":\"HAIN\",\"ProvinceName\":\"海南\"},{\"Code\":\"CQ\",\"ProvinceName\":\"重庆\"},{\"Code\":\"SC\",\"ProvinceName\":\"四川\"},{\"Code\":\"GZ\",\"ProvinceName\":\"贵州\"},{\"Code\":\"YN\",\"ProvinceName\":\"云南\"},{\"Code\":\"XZ\",\"ProvinceName\":\"西藏\"},{\"Code\":\"SAX\",\"ProvinceName\":\"陕西\"},{\"Code\":\"GS\",\"ProvinceName\":\"甘肃\"},{\"Code\":\"QH\",\"ProvinceName\":\"青海\"},{\"Code\":\"NX\",\"ProvinceName\":\"宁夏\"},{\"Code\":\"XJ\",\"ProvinceName\":\"新疆\"}]";
public final static String PROVINCE_SIMPLE_CODE = "{\"CN\":\"全国\",\"BJ\":\"北京\",\"TJ\":\"天津\",\"HB\":\"河北\",\"SX\":\"山西\",\"NMG\":\"内蒙古\",\"LN\":\"辽宁\",\"JL\":\"吉林\",\"HLJ\":\"黑龙江\",\"SH\":\"上海\",\"JS\":\"江苏\",\"ZJ\":\"浙江\",\"AH\":\"安徽\",\"FJ\":\"福建\",\"JX\":\"江西\",\"SD\":\"山东\",\"HEN\":\"河南\",\"HUB\":\"湖北\",\"HUN\":\"湖南\",\"GD\":\"广东\",\"GX\":\"广西\",\"HAIN\":\"海南\",\"CQ\":\"重庆\",\"SC\":\"四川\",\"GZ\":\"贵州\",\"YN\":\"云南\",\"XZ\":\"西藏\",\"SAX\":\"陕西\",\"GS\":\"甘肃\",\"QH\":\"青海\",\"NX\":\"宁夏\",\"XJ\":\"新疆\"}";
public final static List<String> MESSY_CODE = Arrays.asList("Ð", "Ï", "¹", "Ê", "Õ", "¡", "Ö", "±", "¾", "µ", "½", "�");
public final static String accessToken = "token";
/**
* 冻结
*/
public final static String FROZEN = "frozen";
/**
* 启用
*/
public final static String DEFROST = "defrost";
/**
* 验证码短信模板: 您的注册校验码是${code},10分钟内有效,请勿将校验码泄漏给他人。如非本人操作,请忽略本条消息。
*/
public final static String SMS_181860796 = "SMS_181860796";
/**
* 密码短信模板: 感谢您注册建设库平台!您的初始密码为“${name}”请您尽快修改密码,提高账号安全性。
*/
public final static String SMS_145500857 = "SMS_145500857";
/**
* 注册成功
*/
public final static String SMS_174024045 = "SMS_174024045";
/**
* vip赠送
*/
public final static String SMS_174024049 = "SMS_174024049";
/**
* 活动手机验证码
*/
public final static String SMS_174029192 = "SMS_174029192";
/**
* H5引流页注册成功提示下载
*/
public final static String SMS_176528768 = "SMS_176528768";
/**
* H5引流页短信验证码
*/
public final static String SMS_176936886 = "SMS_176936886";
/**
* 密码登录提醒
*/
public final static String SMS_176938027 = "SMS_176938027";
/**
* 向好友推送招标公告
*/
public final static String SMS_182541746 = "SMS_182541746";
/**
* 用户订阅招标公告推送
*/
public final static String SMS_182541747 = "SMS_182541747";
public final static String SMS_136390617 = "SMS_136390617";
public final static String PROJECT_SOURCE = "project_source";
public final static int china = 100000;
public final static String China = "全国";
/**
* 最大页数
*/
public final static int MAX_PAGE_INDEX = 100;
/**
* 每页条数
*/
public final static int MAX_PAGE_SIZE = 20;
/**
* 每页条数
*/
public final static int MOBILE_MAX_PAGE_SIZE = 20;
/**
* 游客及普通用户显示条数
*/
public final static int VISITOR_ACCOUNT_PAGE_SIZE = 10;
/**
* 最大记录数
*/
public final static int MAX_RECORD_SIZE = 2000;
/**
* 生成账号
*/
public static final Integer USER_ACOUNT_BASE = 10000;
public static final Integer SVIP_MAX_EXPORT_COUNT = 20000;
public static final Integer MAX_EXPORT_COUNT = 2000;
/**
* 最大标签数
*/
public final static int MAX_LEBEL_SIZE = 200;
public final static int MAX_PAGE_SIZE_PC = 201;
/**
* 水滴信用信息更新时间
*/
public static final Integer SHUIDI_DATA_UPDATE_TIME = 2;
/**
* 水滴信用信息更新时间
*/
public static final Integer SHUIDI_DATA_UPDATE_TIME_ONE = 1;
public final static String CLIENT_IOS = "IOS";
public final static String CLIENT_MP = "mp";
public final static String CLIENT_NODEJS = "nodejs";
public final static String CLIENT_WRAP = "wrap";
public final static String CLIENT_ANDROID = "ANDROID";
public static final String MUNICIPALITY = "北京上海重庆天津";
public static final String NORTHCHINA = "北京市天津市河北省山西省内蒙古自治区";
public static final String SOUTHCHINA = "广东省海南省广西壮族自治区";
public static final String EASTCHINA = "上海市江苏省浙江省安徽省福建省江西省山东省";
public static final String MIDCHINA = "河南省湖北省湖南省";
public static final String WESTSOUTH = "重庆市四川省贵州省云南省西藏自治区";
public static final String EASTNORTH = "黑龙江省辽宁省吉林省";
public static final String WESTNORTH = "陕西省甘肃省青海省宁夏回族自治区新疆维吾尔自治区";
public final static String SERVICE_TYPE_VIP_CODE = "VIP";
public final static String SERVICE_TYPE_BZ = "BZ";
public final static String SERVICE_TYPE_PT = "PT";
public final static String SERVICE_TYPE_SD = "SD";
public final static String VIP_MVIP = "MVIP";
public final static String VIP_QVIP = "QVIP";
public final static String VIP_HYVIP = "HYVIP";
public final static String VIP_YVIP = "YVIP";
public final static String ONE_YEAR_VIP = "1YVIP";
public final static String TWO_YEAR_VIP = "2YVIP";
public final static String THREE_YEAR_VIP = "3YVIP";
public final static String STORE_NEW_CODE = "storeNew";
public final static String STORE_NEW_GROUP = "store";
public final static String SERVICE_TYPE_VIP = "2";
public final static String SERVICE_TYPE_BG = "1";
public final static String VIP = "vip";
public final static String START_TIME = "startTime";
public final static String END_TIME = "endTime";
public final static String VIP_TYPE_3_HOUR = "HOURVIP";
// 信用报告类型
public final static String GROUP_SERVICE_TYPE = "serviceType";
public final static String CODE_PT = "PT";
public final static String CODE_BZ = "BZ";
public final static String PT_USER = "pt_user";
public final static String VIP_USER = "vip_user";
/**
* 支付宝正式环境网关地址
*/
public static final String PAY_ALI_GATEURL = "https://openapi.alipay.com/gateway.do";
/**
* 支付宝正式环境APPID
*/
public static final String PAY_ALI_APPID = "2018103161911828";
public static final String RSA_PRIVATE_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDbCQx2tczOecOJ4weztxnamFkNDX2ng0t/UKNwZzi2huEh621cN772ck2yO72/rfyioCSHPAg86XPCtjxaAbIKVRR+w1AC5oG6foUl9H+Mu2lvd9d6hIUzl0mSH4MaHgT21BO6oYE9E4IvDcy5kWfdor46tqDd4Md6gXle79/pgIP2P/xV106mZ1DP8V4G0yopa1DZ1xmMyrJZryy/oRs44u2j75l6Xz551K/lGyh96GPW8X46Ar7iLTajx8tf3H1ssgxudEqYYBlFtwryPWwoQdWawK9uJmFKw73BplhpStQSHokmVwFsXPPLyT/GtWTVUd7dyvEKGXs86B7jkhXtAgMBAAECggEAB83Put8JWAXwmJYVLSsF6crpyVREuNYtt3CJEjUrSR2PIeVAdTurOx6hdAs63Hx3dtfb1VGnPXxX2oUhq1dKH6IeY9HTpPbPgnSFi++lJ795pzYO4FeeY1MtlN44jpKpPJ4bwdeFQkbSqZiFRctPdw8YVgExxBYBJXU9fMtxH+GacV0koZmI4DGxo4fv0LhT2M+8rG6584vP8mly0jji/rCVzh6LapTPNV1QHRWx5d4r6aAghQ4DxBx+WaFhq1j9NV2NgLhfflt+2NNlmJ4xD3sGAXrzPqolS3cGb4BR9jq2v6v1Qs1F7nsp0DzSI3FLuht0VluiIWj7e3fR2Bt1hQKBgQDx26A/dU2yLF8nRbG69XrHteL0ATYa6nrNa3EPze2vyLMLRTfA0Ocao8u7FyuhQA0mA0DIzT6mwvnEIKlGKC3/XRqqKZw5GdVq0BpDjvLhPg3cOVHxefogcM0AiBJzEgmXG8gUxgpUCL2mKpZO9HeEF3h9yay5m1uam/rjG5MISwKBgQDn18qbIy2TE+X5YptdRGuCOwGRH70hB6RCiQFZY8EZsjvj0+FzBAD9HZHy5aNVS6m1ynn8ArB9MUMvLp6K1rDz/YcQAxN3tF/KmcP7dpxBtsZI68xKqLNUTLe1mjGce3hjLtUXbmJOCGUN4yFbk+u98VuwCXyPPwml0HnAqwTnpwKBgQCbfc3avnnDMQ/D2eTYA/Z56xAMO7MjPtjQtGCt/oDvYKLrfgbIKgZKdEAI+m6MbveFFtZRwtKit/uIAk+R0UcxRBRejf3oIBm7YCtif8ba1OBoU1nBW+BZduv1iYYDAPe1dKD/6gq92BjFed/ExxsHi2dlx4EKmz0be2ijFhlDXQKBgAgYEIq5/61S1ISQXLw010wEo1ldskyk56crAVENmoA7KLwbeZN6YE516dKBEeK4cYRXPUr/DQpR3faXuhE+zY63GzAD63oSYgXAuIbe7TWeG+4PzWIN4bTfuMouR+0eomVUDTx0LhprUJvbgh6gW2qWMo1Cx4Z4vO19CcMgNVuhAoGAfJfl0gWBtc4rJ/mLz1YD08X0oEcTUvw+HSQTjtG4BHa1aI1jHXe9h1+uZm9eacxzqdJ03zfWThV66SAsKjXrbIrb9e2x2OcT9DdXoqF9R5aSQzpTdvK3NMmnE4AKbb32xrGlBgINCFvxcCRRlkPK0jwl8D3IrWE/+YAXhGGAcC8=";
public static final String RSA_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2wkMdrXMznnDieMHs7cZ2phZDQ19p4NLf1CjcGc4tobhIettXDe+9nJNsju9v638oqAkhzwIPOlzwrY8WgGyClUUfsNQAuaBun6FJfR/jLtpb3fXeoSFM5dJkh+DGh4E9tQTuqGBPROCLw3MuZFn3aK+Orag3eDHeoF5Xu/f6YCD9j/8VddOpmdQz/FeBtMqKWtQ2dcZjMqyWa8sv6EbOOLto++Zel8+edSv5Rsofehj1vF+OgK+4i02o8fLX9x9bLIMbnRKmGAZRbcK8j1sKEHVmsCvbiZhSsO9waZYaUrUEh6JJlcBbFzzy8k/xrVk1VHe3crxChl7POge45IV7QIDAQAB";
/**
* 微信支付分配的商户号
*/
public static final String PAY_WX_MCHID = "1555277781";
/**
* trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。
*/
public static final String PAY_WX_PRODUCTID = "69641265";
/**
* 微信公众号appID
*/
public static final String WX_APPID = "wx3516e7f1706ef4f2";
/**
* 微信公众号appSecret
*/
public static final String WX_APPSECRET = "577265a4db8549fb275d84380ac782f9";
/**
* 微信分配的APP账号ID
*/
public static final String PAY_WX_APPID = "wx0bb7f3c347631215";
/**
* 微信分配的小程序账号ID
*/
public static final String PAY_WX_XCX_APPID = "wx34e8004a2b6c8f4b";
/**
* 微信分配的小程序商户号
*/
public static final String PAY_WX_XCX_MCHID = "wx34e8004a2b6c8f4b";
/**
* https://open.weixin.qq.com/
* 开发者平台app应用得secret:APP_SECRET
*/
public static final String PAY_WX_APP_SECRET = "daddb90bd88cb56e437ae2cecf0e8dd7";
/**
* 微信支付相关
* <p>
* 财付通商户号对应的密钥 <br/>
* 具体获得途径如下:<br/>
* 微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置
* </p>
*/
public static final String PAY_WX_SECRET = "hhFbrSQQ9W6rDxfn75C52zjTLjdFrYTg";
/**
* 微信支付网关地址
*/
public static final String PAY_WX_GATEURL = "https://api.mch.weixin.qq.com/pay/unifiedorder";
/**
* 调用微信PC端的交易类型
*/
public static final String PAY_WX_PC_TRADETYPE = "NATIVE";
/**
* 调用微信Wrap端的交易类型
*/
public static final String PAY_WX_WRAP_TRADETYPE = "MWEB";
/**
* 调用微信Wrap端的交易类型
*/
public static final String PAY_WX_JSAPI_TRADETYPE = "JSAPI";
/**
* 调用微信APP端的交易类型
*/
public static final String PAY_WX_APP_TRADETYPE = "APP";
}
package com.dsk.web.controller.search.macroMarket;
import org.apache.commons.lang3.StringUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.Closeable;
import java.io.File;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
/**
* IP校验
*/
public class IpUtil {
public final static List<String> qihooSpider = Arrays.asList("180.153.232","180.153.234","180.153.236","180.163.220","42.236.101","42.236.102","42.236.103","42.236.10","42.236.12","42.236.13","42.236.14","42.236.15","42.236.16","42.236.17","42.236.46","42.236.48","42.236.49","42.236.50","42.236.51","42.236.52","42.236.53","42.236.54","42.236.55","42.236.99");
public final static List<String> YisouSpider = Arrays.asList("106.11.152","106.11.153","106.11.154","106.11.155","106.11.156","106.11.157","106.11.158","106.11.159","42.120.160","42.120.161","42.156.136","42.156.137","42.156.138","42.156.139","42.156.254");
public final static List<String> ByteSpider = Arrays.asList("110.249.201","110.249.202","111.225.147","111.225.148","111.225.149","220.243.135","220.243.136","60.8.165","60.8.9");
/**获取访问用户的客户端IP(适用于公网与局域网)*/
public static final String getIpAddr(final HttpServletRequest request){
try{
if (request == null) return null;
String ipString = request.getHeader("ali-cdn-real-ip");
if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
ipString = request.getHeader("x-forwarded-for");
}
if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
ipString = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
ipString = request.getHeader("X-Forwarded-For");
}
if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
ipString = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
ipString = request.getHeader("X-Real-IP");
}
if (StringUtils.isBlank(ipString) || "unknown".equalsIgnoreCase(ipString)) {
ipString = request.getRemoteAddr();
}
// 多个路由时,取第一个非unknown的ip
final String[] arr = ipString.split(",");
for (final String str : arr) {
if (!"unknown".equalsIgnoreCase(str)) {
ipString = str;
break;
}
}
return ipString;
}catch(Exception e){
return null;
}
}
/**
* write specfield bytes to a byte array start from offset
*
* @param b
* @param offset
* @param v
* @param bytes
*/
public static void write( byte[] b, int offset, long v, int bytes) {
for ( int i = 0; i < bytes; i++ ) {
b[offset++] = (byte)((v >>> (8 * i)) & 0xFF);
}
}
/**
* write a int to a byte array
*
* @param b
* @param offset
* @param v
*/
public static void writeIntLong( byte[] b, int offset, long v ) {
b[offset++] = (byte)((v >> 0) & 0xFF);
b[offset++] = (byte)((v >> 8) & 0xFF);
b[offset++] = (byte)((v >> 16) & 0xFF);
b[offset ] = (byte)((v >> 24) & 0xFF);
}
/**
* get a int from a byte array start from the specifiled offset
*
* @param b
* @param offset
*/
public static long getIntLong( byte[] b, int offset ) {
return (
((b[offset++] & 0x000000FFL)) |
((b[offset++] << 8) & 0x0000FF00L) |
((b[offset++] << 16) & 0x00FF0000L) |
((b[offset ] << 24) & 0xFF000000L)
);
}
/**
* get a int from a byte array start from the specifield offset
*
* @param b
* @param offset
*/
public static int getInt3( byte[] b, int offset ) {
return (
(b[offset++] & 0x000000FF) |
(b[offset++] & 0x0000FF00) |
(b[offset ] & 0x00FF0000)
);
}
public static int getInt2( byte[] b, int offset ) {
return (
(b[offset++] & 0x000000FF) |
(b[offset ] & 0x0000FF00)
);
}
public static int getInt1( byte[] b, int offset ) {
return (
(b[offset] & 0x000000FF)
);
}
/**
* string ip to long ip
*
* @param ip
* @return long
*/
public static long ip2long( String ip ) {
String[] p = ip.split("\\.");
if ( p.length != 4 ) return 0;
int p1 = ((Integer.valueOf(p[0]) << 24) & 0xFF000000);
int p2 = ((Integer.valueOf(p[1]) << 16) & 0x00FF0000);
int p3 = ((Integer.valueOf(p[2]) << 8) & 0x0000FF00);
int p4 = ((Integer.valueOf(p[3]) << 0) & 0x000000FF);
return ((p1 | p2 | p3 | p4) & 0xFFFFFFFFL);
}
/**
* int to ip string
*
* @param ip
* @return string
*/
public static String long2ip( long ip ) {
StringBuilder sb = new StringBuilder();
sb
.append((ip >> 24) & 0xFF).append('.')
.append((ip >> 16) & 0xFF).append('.')
.append((ip >> 8) & 0xFF).append('.')
.append((ip >> 0) & 0xFF);
return sb.toString();
}
/**
* check the validate of the specifeld ip address
*
* @param ip
* @return boolean
*/
public static boolean isIpAddress( String ip ) {
String[] p = ip.split("\\.");
if ( p.length != 4 ) return false;
for ( String pp : p ) {
if ( pp.length() > 3 ) return false;
int val = Integer.valueOf(pp);
if ( val > 255 ) return false;
}
return true;
}
public static String execHostCmd(String ip) throws Exception {
return execCmd("host "+ip, null);
}
public static String isSpider(String ip) throws Exception {
String result = execCmd("host "+ip, null);
if(StringUtils.isNotBlank(ip)&&!isSpiderUa(result)){
for (String s : qihooSpider) {
if(ip.startsWith(s)){
return "so.com";
}
}
for (String s : YisouSpider) {
if(ip.startsWith(s)){
return "sm.cn";
}
}
for (String s : ByteSpider) {
if(ip.startsWith(s)){
return "bytedance.com";
}
}
}
return result;
}
/**
* 执行系统命令, 返回执行结果
*
* @param cmd 需要执行的命令
* @param dir 执行命令的子进程的工作目录, null 表示和当前主进程工作目录相同
*/
private static String execCmd(String cmd, File dir) throws Exception {
StringBuilder result = new StringBuilder();
Process process = null;
BufferedReader bufrIn = null;
BufferedReader bufrError = null;
try {
// 执行命令, 返回一个子进程对象(命令在子进程中执行)
process = Runtime.getRuntime().exec(cmd, null, dir);
// 方法阻塞, 等待命令执行完成(成功会返回0)
process.waitFor();
// 获取命令执行结果, 有两个结果: 正常的输出 和 错误的输出(PS: 子进程的输出就是主进程的输入)
bufrIn = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8"));
bufrError = new BufferedReader(new InputStreamReader(process.getErrorStream(), "UTF-8"));
// 读取输出
String line = null;
while ((line = bufrIn.readLine()) != null) {
result.append(line).append('n');
}
while ((line = bufrError.readLine()) != null) {
result.append(line).append('n');
}
} finally {
closeStream(bufrIn);
closeStream(bufrError);
// 销毁子进程
if (process != null) {
process.destroy();
}
}
// 返回执行结果
return result.toString();
}
private static void closeStream(Closeable stream) {
if (stream != null) {
try {
stream.close();
} catch (Exception e) {
// nothing
}
}
}
private static boolean isSpiderUa(String hostname){
List<String> spiders = BizConstant.SPIDER;
for (String spider : spiders) {
if (hostname.toLowerCase().contains(spider)){
return true;
}
}
return false;
}
}
...@@ -3,6 +3,7 @@ package com.dsk.web.controller.search.macroMarket; ...@@ -3,6 +3,7 @@ package com.dsk.web.controller.search.macroMarket;
import com.dsk.common.core.domain.AjaxResult; import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.*; import com.dsk.common.dtos.*;
import com.dsk.system.service.EconomicService; import com.dsk.system.service.EconomicService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -17,6 +18,7 @@ import javax.validation.Valid; ...@@ -17,6 +18,7 @@ import javax.validation.Valid;
* @Date 2023/5/18 10:09 * @Date 2023/5/18 10:09
* @Version 1.0.0 * @Version 1.0.0
*/ */
@Slf4j
@RestController @RestController
@RequestMapping(value ="/economic") @RequestMapping(value ="/economic")
public class RegionalEconomicDataController { public class RegionalEconomicDataController {
...@@ -70,7 +72,9 @@ public class RegionalEconomicDataController { ...@@ -70,7 +72,9 @@ public class RegionalEconomicDataController {
*/ */
@PostMapping(value = "location") @PostMapping(value = "location")
public AjaxResult location(@RequestBody OpRegionalLocalDto vo, HttpServletRequest request){ public AjaxResult location(@RequestBody OpRegionalLocalDto vo, HttpServletRequest request){
// String ip = IpUtil.getIpAddr(request); String ip = IpUtil.getIpAddr(request);
vo.setIp(ip);
log.info("location====================================>" +ip);
return economicService.location(vo); return economicService.location(vo);
} }
......
package com.dsk.web.controller.search.macroMarket; package com.dsk.web.controller.search.macroMarket;
import com.dsk.common.core.domain.AjaxResult; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.dtos.ComposeQueryDto; import com.dsk.common.dtos.ComposeQueryDto;
import com.dsk.system.service.RegionalEnterprisesService; import com.dsk.system.service.RegionalEnterprisesService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -24,7 +24,7 @@ public class RegionalEnterprisesController { ...@@ -24,7 +24,7 @@ public class RegionalEnterprisesController {
private RegionalEnterprisesService regionalEnterprisesService; private RegionalEnterprisesService regionalEnterprisesService;
@PostMapping("regional/page") @PostMapping("regional/page")
public AjaxResult page(@RequestBody ComposeQueryDto compose) { public TableDataInfo page(@RequestBody ComposeQueryDto compose) throws Exception{
return regionalEnterprisesService.page(compose); return regionalEnterprisesService.page(compose);
} }
} }
...@@ -18,5 +18,6 @@ public class EnterpriseStatisticBody ...@@ -18,5 +18,6 @@ public class EnterpriseStatisticBody
*/ */
@NotNull(message = "企业id不能为空") @NotNull(message = "企业id不能为空")
private Integer companyId; private Integer companyId;
private Boolean isFy = false;
} }
...@@ -15,4 +15,6 @@ public class OpRegionalLocalDto { ...@@ -15,4 +15,6 @@ public class OpRegionalLocalDto {
* 省Id * 省Id
*/ */
private Integer provinceId; private Integer provinceId;
private String ip;
} }
...@@ -4,6 +4,7 @@ import com.dsk.common.config.RuoYiConfig; ...@@ -4,6 +4,7 @@ import com.dsk.common.config.RuoYiConfig;
import com.dsk.common.core.domain.entity.BusinessFileVo; import com.dsk.common.core.domain.entity.BusinessFileVo;
import com.dsk.common.exception.base.BaseException; import com.dsk.common.exception.base.BaseException;
import com.dsk.common.utils.DateUtils; import com.dsk.common.utils.DateUtils;
import com.dsk.common.utils.ServletUtils;
import com.dsk.common.utils.StringUtils; import com.dsk.common.utils.StringUtils;
import com.dsk.common.utils.uuid.IdUtils; import com.dsk.common.utils.uuid.IdUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -29,8 +30,6 @@ import java.nio.charset.StandardCharsets; ...@@ -29,8 +30,6 @@ import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
/** /**
* 文件处理工具类 * 文件处理工具类
...@@ -313,46 +312,95 @@ public class FileUtils ...@@ -313,46 +312,95 @@ public class FileUtils
} }
/** /**
* 下载文件 * 根据文件路径下载文件
* @param url 要下载的文件链接 * @param filePath 要下载的文件路径
* @param targetFolder 目标文件 * @param response 返回的响应
*/
public static void downloadByFilePath(String filePath, HttpServletResponse response) {
try {
// path是指想要下载的文件的路径
File file = new File(filePath);
// log.info(file.getPath());
if (!file.exists()) throw new BaseException("文件不存在!");
// 获取文件名
String filename = file.getName();
// log.info("文件名: "+filename);
// 获取文件后缀名
// String ext = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase();
// log.info("文件后缀名:" + ext);
// 将文件写入输入流
FileInputStream fileInputStream = new FileInputStream(file);
InputStream fis = new BufferedInputStream(fileInputStream);
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
// 清空response
response.reset();
// 设置response的Header
response.setCharacterEncoding("UTF-8");
//文件类型
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
//文件名称
response.addHeader("Download-filename", URLEncoder.encode(filename, "UTF-8"));
// 告知浏览器文件的大小
response.addHeader("Content-Length", "" + file.length());
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
outputStream.write(buffer);
fis.close();
outputStream.flush();
} catch (IOException ex) {
ex.printStackTrace();
}
}
/**
* 根据文件url下载文件
* @param filePath 要下载的文件链接
* @param response 响应体
* @return * @return
* @throws IOException * @throws IOException
*/ */
public static boolean downloadFolder(String url, String targetFolder) throws IOException { public static void downloadByUrl(String filePath, HttpServletResponse response){
URL downloadUrl = new URL(url); // String fileUrl = request.getParameter("fileUrl"); // 获取文件链接
HttpURLConnection connection = (HttpURLConnection) downloadUrl.openConnection();
connection.setRequestMethod("GET");
connection.connect();
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { try {
throw new RuntimeException("下载文件夹失败: " + connection.getResponseMessage()); URL url = new URL(filePath);
} HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
try (ZipInputStream zipInputStream = new ZipInputStream(connection.getInputStream())) { // 设置响应头,告诉浏览器下载文件
ZipEntry entry; String contentType = connection.getContentType(); // 获取文件类型
while ((entry = zipInputStream.getNextEntry()) != null) { response.setContentType(contentType);
String entryName = entry.getName(); String filename = extractFilenameFromUrl(filePath); // 从链接中提取文件名
if (StringUtils.isBlank(entryName)) { response.setHeader("Content-Disposition", "attachment; filename=" + filename + "");
continue;
}
File entryFile = new File(targetFolder, entryName); // 将文件流写入响应输出流
if (entry.isDirectory()) { InputStream inputStream = connection.getInputStream();
entryFile.mkdirs(); byte[] buffer = new byte[4096];
} else { int bytesRead = -1;
File parent = entryFile.getParentFile(); while ((bytesRead = inputStream.read(buffer)) != -1) {
if (!parent.exists()) { response.getOutputStream().write(buffer, 0, bytesRead);
parent.mkdirs();
} }
inputStream.close();
try (FileOutputStream outputStream = new FileOutputStream(entryFile)) { connection.disconnect();
IOUtils.copy(zipInputStream, outputStream); } catch (Exception e) {
} e.printStackTrace();
} }
} }
// 从文件链接中提取文件名
public static String extractFilenameFromUrl(String url) {
int slashIndex = url.lastIndexOf('/');
int dotIndex = url.lastIndexOf('.');
if (dotIndex == -1 || dotIndex < slashIndex) {
return "download";
} }
return true; return url.substring(slashIndex + 1);
} }
/** /**
...@@ -568,4 +616,17 @@ public class FileUtils ...@@ -568,4 +616,17 @@ public class FileUtils
String baseName = FilenameUtils.getBaseName(fileName); String baseName = FilenameUtils.getBaseName(fileName);
return baseName; return baseName;
} }
/**
* 获取本地服务的域名,端口
* @return
*/
public static String getUrl()
{
HttpServletRequest request = ServletUtils.getRequest();
StringBuffer url = request.getRequestURL();
String contextPath = request.getServletContext().getContextPath();
return url.delete(url.length() - request.getRequestURI().length(), url.length()).append(contextPath).toString();
}
} }
...@@ -111,7 +111,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter ...@@ -111,7 +111,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
// 过滤请求 // 过滤请求
.authorizeRequests() .authorizeRequests()
// 对于登录login 注册register 验证码captchaImage 允许匿名访问 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
.antMatchers("/login", "/register", "/captchaImage","/economic/**","/enterprises/**","/specialPurposeBonds/**","/urbanInvestment/**").permitAll() .antMatchers("/login", "/register", "/captchaImage").permitAll()
// 静态资源,可匿名访问 // 静态资源,可匿名访问
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
.antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll() .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
......
...@@ -85,6 +85,14 @@ export function regional(param) { ...@@ -85,6 +85,14 @@ export function regional(param) {
data: param data: param
}) })
} }
//地区经济-获取当前位置
export function location(param) {
return request({
url: '/economic/location',
method: 'POST',
data: param
})
}
//地区经济-主要指标列表 //地区经济-主要指标列表
export function regionalList(param) { export function regionalList(param) {
return request({ return request({
...@@ -94,5 +102,79 @@ export function regionalList(param) { ...@@ -94,5 +102,79 @@ export function regionalList(param) {
}) })
} }
//产业结构-按年份选择 各个项目类型项目总数
export function bidGroupCountByProjectType(param) {
return request({
url: '/marketAnalysis/bidGroupCountByProjectType',
method: 'POST',
data: param
})
}
//产业结构-近两年各个项目类型项目总数及金额占比
export function bidMoneyGroupByProjectType(param) {
return request({
url: '/marketAnalysis/bidMoneyGroupByProjectType',
method: 'POST',
data: param
})
}
//对比经济
export function regionalCompare(param) {
return request({
url: '/economic/regional/compare',
method: 'POST',
data: param
})
}
//区域专项债-项目类别统计
export function statistics(param) {
return request({
url: '/specialPurposeBonds/bond/statistics',
method: 'POST',
data: param
})
}
//区域专项债-专项债项目分页列表
export function projectsPage(param) {
return request({
url: '/specialPurposeBonds/projects/page',
method: 'POST',
data: param
})
}
//区域专项债-专项债项目详情
export function details(param) {
return request({
url: '/specialPurposeBonds/details',
method: 'POST',
data: param
})
}
//区域专项债-专项债项目详情-专项债分页列表
export function bondPage(param) {
return request({
url: '/specialPurposeBonds/bond/page',
method: 'POST',
data: param
})
}
//区域企业
export function enterprise(param) {
return request({
url: '/enterprise/page',
method: 'POST',
data: param
})
}
...@@ -108,9 +108,8 @@ export function addGJJL(param) { ...@@ -108,9 +108,8 @@ export function addGJJL(param) {
//删除跟进记录 //删除跟进记录
export function delGJJL(param) { export function delGJJL(param) {
return request({ return request({
url: '/business/record/remove/', url: '/business/record/remove/'+param,
method: 'DELETE', method: 'DELETE',
params:param
}) })
} }
...@@ -183,3 +182,20 @@ export function delZLWD(param) { ...@@ -183,3 +182,20 @@ export function delZLWD(param) {
data:param data:param
}) })
} }
//查询关联项目
export function relateProject(param) {
return request({
url: '/business/record/relate/project/'+param,
method: 'get',
})
}
//查询跟进动态
export function allRecord(param) {
return request({
url: '/business/record/all/list',
method: 'get',
params:param,
})
}
...@@ -579,8 +579,8 @@ ...@@ -579,8 +579,8 @@
} }
} }
.el-input__prefix{ .el-input__prefix .el-input__icon{
left: 8px; //left: 8px;
top: -2px; top: -2px;
position: absolute; position: absolute;
} }
...@@ -869,6 +869,7 @@ ...@@ -869,6 +869,7 @@
.img{ .img{
float: left; float: left;
margin-right: 8px; margin-right: 8px;
margin-top: -2px;
} }
} }
} }
......
...@@ -62,11 +62,25 @@ export default { ...@@ -62,11 +62,25 @@ export default {
saveAs(text, name, opts) { saveAs(text, name, opts) {
saveAs(text, name, opts); saveAs(text, name, opts);
}, },
exportByPost(url, params){
var url = baseURL + url
axios({
method: 'post',
url: url,
responseType: 'blob',
data: params,
headers: { 'Authorization': 'Bearer ' + getToken() }
}).then(res => {
const blob = new Blob([res.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
this.saveAs(blob, decodeURI(res.headers['download-filename']))
})
},
async printErrMsg(data) { async printErrMsg(data) {
const resText = await data.text(); const resText = await data.text();
const rspObj = JSON.parse(resText); const rspObj = JSON.parse(resText);
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
Message.error(errMsg); Message.error(errMsg);
} },
} }
...@@ -125,7 +125,7 @@ export const constantRoutes = [ ...@@ -125,7 +125,7 @@ export const constantRoutes = [
path: '/macro/financing/details/:id(\\d+)', path: '/macro/financing/details/:id(\\d+)',
component: () => import('@/views/macro/financing/details'), component: () => import('@/views/macro/financing/details'),
name: 'financingDetails', name: 'financingDetails',
meta: { title: '区域专项债详情'} meta: { title: '区域专项债详情',icon: ''}
} }
] ]
}, },
......
...@@ -35,8 +35,8 @@ ...@@ -35,8 +35,8 @@
<!-- 输入框 --> <!-- 输入框 -->
<template v-if="form.type==3"> <template v-if="form.type==3">
<div class="cooperate-name"> <div class="cooperate-name">
<el-input v-model="form.value" :placeholder="form.placeholder"></el-input> <el-input @focus="clickFocus('focus'+i)" @blur="clickFocus('focus'+i)" v-model="form.value" :placeholder="form.placeholder"></el-input>
<span @click="changeSelect">搜索</span> <span :id="'focus'+i" @click="changeSelect">搜索</span>
</div> </div>
</template> </template>
<!-- 多选 --> <!-- 多选 -->
...@@ -155,6 +155,9 @@ export default { ...@@ -155,6 +155,9 @@ export default {
message: '功能正在开发中', message: '功能正在开发中',
type: 'warning' type: 'warning'
}); });
},
clickFocus(e){
document.getElementById(e).classList.toggle('span-ba')
} }
} }
} }
...@@ -214,13 +217,18 @@ export default { ...@@ -214,13 +217,18 @@ export default {
border-left: 0; border-left: 0;
cursor: pointer; cursor: pointer;
} }
.span-ba{
color: #ffffff;
background: #0081FF;
border: 1px solid #0081FF;
}
::v-deep .el-input{ ::v-deep .el-input{
flex: 1; flex: 1;
} }
::v-deep .el-input__inner { ::v-deep .el-input__inner {
border-right: 0; border-right: 0;
border-radius: 2px 0 2px 0; border-radius: 2px 0 2px 0;
width: 259px; width: 180px;
} }
} }
.fromTime{ .fromTime{
......
<template> <template>
<div class="cooperate"> <div>
<template v-if="!isDetailId">
<div class="cooperate">
<template v-if="ifEmpty"> <template v-if="ifEmpty">
<head-form <head-form
:form-data="formData" :form-data="formData"
...@@ -29,9 +31,6 @@ ...@@ -29,9 +31,6 @@
<span class="link-type" @click="clickDetail(scope.row.id)"> <span class="link-type" @click="clickDetail(scope.row.id)">
{{ scope.row.projectName }} {{ scope.row.projectName }}
</span> </span>
<!-- <router-link :to="'' + scope.row.dictId" class="link-type">-->
<!-- <span>{{ scope.row.dictType }}</span>-->
<!-- </router-link>-->
</template> </template>
</tables> </tables>
...@@ -118,8 +117,12 @@ ...@@ -118,8 +117,12 @@
</div> </div>
</div> </div>
</el-drawer> </el-drawer>
</div>
</template>
<!-- <Detail :detailId="detailId" v-if="isDetailId" />--> <div v-else class="cooperate-detail">
<Detail :detailId="detailId" @close-detail="closeDetail" />
</div>
</div> </div>
</template> </template>
...@@ -360,7 +363,13 @@ export default { ...@@ -360,7 +363,13 @@ export default {
clickDetail(id){ clickDetail(id){
this.detailId = id this.detailId = id
this.isDetailId = true this.isDetailId = true
},
//关闭详情
closeDetail(){
this.isDetailId = false
this.detailId = ''
} }
} }
} }
</script> </script>
...@@ -511,4 +520,10 @@ export default { ...@@ -511,4 +520,10 @@ export default {
} }
} }
::v-deep .cooperate-detail{
.miantitle, .app-container{
margin: 12px 0;
}
}
</style> </style>
...@@ -72,7 +72,7 @@ export default { ...@@ -72,7 +72,7 @@ export default {
}, },
{ {
prop: 'gdpGrowth', prop: 'gdpGrowth',
label: 'GDP增速', label: 'GDP增速(%)',
}, },
{ {
prop: 'gdpPerCapita', prop: 'gdpPerCapita',
...@@ -128,7 +128,7 @@ export default { ...@@ -128,7 +128,7 @@ export default {
}, },
{ {
prop: 'gbrGrowth', prop: 'gbrGrowth',
label: '一般公共预算收入增速', label: '一般公共预算收入增速(%)',
}, },
{ {
prop: 'taxIncome', prop: 'taxIncome',
...@@ -192,23 +192,23 @@ export default { ...@@ -192,23 +192,23 @@ export default {
}, },
{ {
prop: 'fiscalSelfSufficiencyRate', prop: 'fiscalSelfSufficiencyRate',
label: '财政自给率', label: '财政自给率(%)',
}, },
{ {
prop: 'govDebtToGdpRate', prop: 'govDebtToGdpRate',
label: '负债率', label: '负债率(%)',
}, },
{ {
prop: 'govDebtToGdpRateWild', prop: 'govDebtToGdpRateWild',
label: '负债率-宽口径', label: '负债率-宽口径(%)',
}, },
{ {
prop: 'govDebtRate', prop: 'govDebtRate',
label: '债务率', label: '债务率(%)',
}, },
{ {
prop: 'govDebtRateWild', prop: 'govDebtRateWild',
label: '债务率-宽口径', label: '债务率-宽口径(%)',
}, },
], ],
tableLoading: true tableLoading: true
......
...@@ -83,6 +83,7 @@ ...@@ -83,6 +83,7 @@
<el-table <el-table
:data="getValues" :data="getValues"
:show-header="false" :show-header="false"
:cell-style="rowStyle"
border border
> >
<el-table-column <el-table-column
...@@ -100,7 +101,7 @@ ...@@ -100,7 +101,7 @@
<script> <script>
import dataRegion from '@/assets/json/dataRegion' import dataRegion from '@/assets/json/dataRegion'
import { nationalPage,getYears } from '@/api/macro/macro' import { regionalCompare,getYears } from '@/api/macro/macro'
export default { export default {
name: 'comparison', name: 'comparison',
props:{ props:{
...@@ -112,18 +113,8 @@ export default { ...@@ -112,18 +113,8 @@ export default {
year: '', year: '',
}, },
yearOptions: [], yearOptions: [],
tableData: [ tableData: [{},{},{},{},{}],
{index:0},
{index:1},
{index:2},
{index:3},
{index:4},
],
headers: [ headers: [
{
prop: 'year',
label: '指标',
},
{ {
prop: 'name', prop: 'name',
label: '经济', label: '经济',
...@@ -190,7 +181,7 @@ export default { ...@@ -190,7 +181,7 @@ export default {
}, },
{ {
prop: 'gbrGrowth', prop: 'gbrGrowth',
label: '般公共预算收入增速', label: '一般公共预算收入增速(%)',
}, },
{ {
prop: 'taxIncome', prop: 'taxIncome',
...@@ -254,23 +245,23 @@ export default { ...@@ -254,23 +245,23 @@ export default {
}, },
{ {
prop: 'fiscalSelfSufficiencyRate', prop: 'fiscalSelfSufficiencyRate',
label: '财政自给率', label: '财政自给率(%)',
}, },
{ {
prop: 'govDebtToGdpRate', prop: 'govDebtToGdpRate',
label: '负债率', label: '负债率(%)',
}, },
{ {
prop: 'govDebtToGdpRateWild', prop: 'govDebtToGdpRateWild',
label: '负债率-宽口径', label: '负债率(宽口径)(%)',
}, },
{ {
prop: 'govDebtRate', prop: 'govDebtRate',
label: '债务率', label: '债务率(%)',
}, },
{ {
prop: 'govDebtRateWild', prop: 'govDebtRateWild',
label: '债务率-宽口径', label: '债务率(宽口径)(%)',
}, },
], ],
props: { props: {
...@@ -293,6 +284,7 @@ export default { ...@@ -293,6 +284,7 @@ export default {
value3Flag:false, value3Flag:false,
value4Flag:false, value4Flag:false,
value5Flag:false, value5Flag:false,
regionData:[]
} }
}, },
created() { created() {
...@@ -314,10 +306,13 @@ export default { ...@@ -314,10 +306,13 @@ export default {
} }
}, },
methods: { methods: {
getData(params){ getData(params,index){
nationalPage(params).then(res => { if(this.dataQuery.id){
console.log(res.data) params.id=this.dataQuery.id
// this.tableData = res.data.list }
regionalCompare(params).then(res => {
this.tableData.splice(index-1,1,res.data)
this.$forceUpdate();
}) })
}, },
//地区 //地区
...@@ -392,7 +387,22 @@ export default { ...@@ -392,7 +387,22 @@ export default {
this.value5Flag=true this.value5Flag=true
break; break;
} }
const params = { pageNum: this.pageIndex, pageSize: this.pageSize, year: this.queryParams.year,type:3 }
let code=[];
for (var i in this.regionData) {
code=this.regionData[i].path
}
if(code.length >= 1){
params.provinceId=code[0]
}
if(code.length >= 2){
params.cityId=code[1]
}
if(code.length >= 3){
params.areaId=code[2]
}
this.getData(params,index)
} }
}, },
handleChange(index) { handleChange(index) {
...@@ -435,29 +445,42 @@ export default { ...@@ -435,29 +445,42 @@ export default {
} }
} }
const params = { pageNum: this.pageIndex, pageSize: this.pageSize, year: this.queryParams.year,type:3 } this.regionData=arr;
let provinceCode = [],cityCode = [],countyCode = [];
for (var i in arr) {
if (arr[i].parent) {
if (!arr[i].parent.checked) {
arr[i].hasChildren && cityCode.push(arr[i].value);
!arr[i].hasChildren && countyCode.push(arr[i].value);
}
} else {
provinceCode.push(arr[i].value)
}
}
if(provinceCode.length > 0){
params.provinceIds=provinceCode
}
if(cityCode.length > 0){
params.cityIds=cityCode
}
if(countyCode.length > 0){
params.areaIds=countyCode
}
this.getData(params) // const params = { pageNum: this.pageIndex, pageSize: this.pageSize, year: this.queryParams.year,type:3 }
// let provinceCode = [],cityCode = [],countyCode = [];
// let code=[];
// for (var i in arr) {
// code=arr[i].path
// if (arr[i].parent) {
// if (!arr[i].parent.checked) {
// arr[i].hasChildren && cityCode.push(arr[i].value);
// !arr[i].hasChildren && countyCode.push(arr[i].value);
// }
// } else {
// provinceCode.push(arr[i].value)
// }
// }
// if(provinceCode.length > 0){
// params.provinceIds=provinceCode
// }
// if(cityCode.length > 0){
// params.cityIds=cityCode
// }
// if(countyCode.length > 0){
// params.areaIds=countyCode
// }
// if(code.length >= 1){
// params.provinceId=code[0]
// }
// if(code.length >= 2){
// params.cityId=code[1]
// }
// if(code.length >= 3){
// params.areaId=code[2]
// }
// this.getData(params)
}, },
handleDelete(index){ handleDelete(index){
...@@ -479,6 +502,22 @@ export default { ...@@ -479,6 +502,22 @@ export default {
break; break;
} }
}, },
formatStatus: function(row, column, cellValue) {
if(row.title === '经济'||row.title === '财政'||row.title === '债务'){
return cellValue
}else {
return cellValue? cellValue : '-'
}
},
rowStyle(row){
if (row.row.title === '经济'||row.row.title === '财政'||row.row.title === '债务'){
return {
// background: '#FAF5EB',
color:'#232323',
fontWeight: 'bold'
}
}
}
} }
} }
</script> </script>
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<span class="common-title">主要指标</span> <span class="common-title">主要指标</span>
<el-form ref="queryForm" :model="queryParams" :inline="true" size="small"> <el-form ref="queryForm" :model="queryParams" :inline="true" size="small">
<el-form-item prop="year"> <el-form-item prop="year">
<el-select v-model="queryParams.year" filterable class="form-content-width" placeholder="请选择年度"> <el-select v-model="queryParams.year" filterable class="form-content-width" placeholder="请选择年度" @change="getGroupCount">
<el-option v-for="(item, index) in yearOptions" :key="index" :label="item.year" :value="item.year" /> <el-option v-for="(item, index) in yearOptions" :key="index" :label="item.year" :value="item.year" />
</el-select> </el-select>
</el-form-item> </el-form-item>
...@@ -29,16 +29,16 @@ ...@@ -29,16 +29,16 @@
highlight-current-row highlight-current-row
> >
<el-table-column label="序号" width="60" align="left"> <el-table-column label="序号" width="60" align="left">
<template slot-scope="scope">{{ pageIndex * pageSize - pageSize + scope.$index + 1 }}</template> <template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column> </el-table-column>
<el-table-column label="产业类型" prop="type"></el-table-column> <el-table-column label="产业类型" prop="projectType"></el-table-column>
<el-table-column label="2022年"> <el-table-column :label="oneYear">
<el-table-column prop="je" label="金额(亿元)"> </el-table-column> <el-table-column prop="money" label="金额(亿元)"> </el-table-column>
<el-table-column prop="zb" label="占比" sortable> </el-table-column> <el-table-column prop="rate" label="占比"> </el-table-column>
</el-table-column> </el-table-column>
<el-table-column label="2021年"> <el-table-column :label="twoYear">
<el-table-column prop="province" label="金额(亿元)" sortable> </el-table-column> <el-table-column prop="lastMoney" label="金额(亿元)"> </el-table-column>
<el-table-column prop="province" label="占比" sortable > </el-table-column> <el-table-column prop="lastRate" label="占比" > </el-table-column>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
...@@ -48,11 +48,14 @@ ...@@ -48,11 +48,14 @@
<script> <script>
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import { nationalPage,getYears } from '@/api/macro/macro' import { bidGroupCountByProjectType,bidMoneyGroupByProjectType,getYears } from '@/api/macro/macro'
export default { export default {
name: 'industrialStructure', name: 'industrialStructure',
props:{ props:{
dataQuery:{} dataQuery: {
type: Object,
default: {}
},
}, },
data() { data() {
return { return {
...@@ -61,46 +64,11 @@ export default { ...@@ -61,46 +64,11 @@ export default {
address: '' address: ''
}, },
yearOptions: [], yearOptions: [],
tableData:[ tableData:[],
{
type:'房建工程',
je:'29,175.61',
zb:'26%'
},
{
type:'市政工程',
je:'29,175.61',
zb:'26%'
},
{
type:'公路工程',
je:'29,175.61',
zb:'26%'
},
{
type:'机电工程',
je:'29,175.61',
zb:'26%'
},
],
tableLoading: false, tableLoading: false,
pageIndex: 1, data:[],
pageSize: 10, oneYear:'',
tableDataTotal: 0, twoYear:'',
data:[
{
name: '房建工程',
value: 11
},
{
name: '市政工程',
value: 22
},
{
name: '公路工程',
value: 33
}
]
} }
}, },
created() { created() {
...@@ -108,14 +76,60 @@ export default { ...@@ -108,14 +76,60 @@ export default {
this.yearOptions=res.data.reverse(); this.yearOptions=res.data.reverse();
this.queryParams.year = this.yearOptions[0].year; this.queryParams.year = this.yearOptions[0].year;
}) })
this.getData()
this.getGroupCount()
this.$nextTick(()=>{ this.$nextTick(()=>{
this.initChart()
}) })
}, },
methods: { methods: {
handleClick() { getData(){
let mydate=new Date();
var startTime, endTime, Year
Year = mydate.getFullYear();
startTime=mydate.getFullYear()-2+'-01-01';
endTime=mydate.getFullYear()-1+'-12-31';
this.oneYear=mydate.getFullYear()-1+'年';
this.twoYear=mydate.getFullYear()-2+'年';
let params={startDate:startTime,endDate:endTime,province:this.dataQuery.provinceId}
bidMoneyGroupByProjectType(params).then(res => {
let list=res.data[1].type
for (let i=0; i<res.data[0].type.length; i++){
for (let j=0; j<list.length; j++){
if(res.data[0].type[i].projectType === list[j].projectType){
list[j].lastMoney=res.data[0].type[i].money;
list[j].lastRate=res.data[0].type[i].rate;
}
}
}
this.tableData=list.reverse()
})
},
getGroupCount(){
let mydate=new Date();
let startTime=''
let endTime=''
if(!this.queryParams.year){
startTime=mydate.getFullYear()-1+'-01-01';
endTime=mydate.getFullYear()-1+'-12-31';
}else {
startTime=this.queryParams.year+'-01-01';
endTime=this.queryParams.year+'-12-31';
}
bidGroupCountByProjectType({startDate:startTime,endDate:endTime}).then(res => {
let list=[]
for(let i=0; i<res.data.length; i++){
let item={};
item.name=res.data[i].type
item.value=res.data[i].count
list.push(item);
}
this.data=list;
this.initChart()
})
}, },
initChart() { initChart() {
let myChart = echarts.init(document.getElementById("echarts")) let myChart = echarts.init(document.getElementById("echarts"))
let option ={ let option ={
...@@ -134,7 +148,7 @@ export default { ...@@ -134,7 +148,7 @@ export default {
}, },
//鼠标悬停时显示的样式 //鼠标悬停时显示的样式
tooltip: { tooltip: {
extraCssText:'width:100px!important;', extraCssText:'width:120px!important;',
formatter: function (params){ formatter: function (params){
var result = '' var result = ''
result+='<p style="color: rgba(35,35,35,0.8);padding: 0;margin: 0;">'+ params.name +'</p>' result+='<p style="color: rgba(35,35,35,0.8);padding: 0;margin: 0;">'+ params.name +'</p>'
...@@ -157,7 +171,8 @@ export default { ...@@ -157,7 +171,8 @@ export default {
] ]
} }
myChart.setOption(option); myChart.setOption(option);
} },
} }
} }
</script> </script>
......
...@@ -52,7 +52,10 @@ ...@@ -52,7 +52,10 @@
export default { export default {
name: 'localEconomy', name: 'localEconomy',
props:{ props:{
dataQuery:{} dataQuery: {
type: Object,
default: {}
},
}, },
data() { data() {
return { return {
......
...@@ -4,45 +4,71 @@ ...@@ -4,45 +4,71 @@
<div class="common-title">经济数据</div> <div class="common-title">经济数据</div>
<div class="content-box"> <div class="content-box">
<div class="item"> <div class="item">
<div class="item-title"><i style="background: #4E8EFF;"></i>2022年GDP</div> <div class="item-title"><i style="background: #4E8EFF;"></i>{{recentlyYear.year}}年GDP</div>
<div class="item-count"><span>29,129.03 </span>亿<img src="@/assets/images/economies/icon_up.png"></div> <div class="item-count">
<span>{{recentlyYear.gdp}}</span>亿
<img v-if="recentlyYear.gdpGrowth > 0" src="@/assets/images/economies/icon_up.png">
<img v-else src="@/assets/images/economies/icon_down.png">
</div>
<div id="echartsGDP" style="height: 75px;"></div> <div id="echartsGDP" style="height: 75px;"></div>
<div class="item-text up">较2021年上升<span>26.7%</span></div> <div class="item-text up" v-if="recentlyYear.gdpGrowth > 0">{{nextYearMap.year}}年上升<span>{{recentlyYear.gdpGrowth}}%</span></div>
<div class="item-text down" v-else>{{nextYearMap.year}}年下降<span>{{Number(recentlyYear.gdpGrowth).toString().substring(1)}}%</span></div>
</div> </div>
<div class="item"> <div class="item">
<div class="item-title"><i style="background: #718AFF;"></i>2022年GDP增速</div> <div class="item-title"><i style="background: #718AFF;"></i>{{recentlyYear.year}}年GDP增速</div>
<div class="item-count"><span>29,129.03 </span>亿<img src="@/assets/images/economies/icon_down.png"></div> <div class="item-count">
<span>{{recentlyYear.gdpGrowth}}</span>%
<img v-if="(recentlyYear.gdpGrowth-nextYearMap.gdpGrowth) > 0" src="@/assets/images/economies/icon_up.png">
<img v-else src="@/assets/images/economies/icon_down.png">
</div>
<div id="echartsZS" style="height: 75px;"></div> <div id="echartsZS" style="height: 75px;"></div>
<div class="item-text down">较2021年下降<span>26.7%</span></div> <div class="item-text up" v-if="(recentlyYear.gdpGrowth-nextYearMap.gdpGrowth) > 0">{{nextYearMap.year}}年上升<span>{{recentlyYear.gdpGrowth-nextYearMap.gdpGrowth}}%</span></div>
<div class="item-text down" v-else>{{nextYearMap.year}}年下降<span>{{(this.recentlyYear.gdpGrowth-this.nextYearMap.gdpGrowth).toFixed(2).toString().substring(1)}}%</span></div>
</div> </div>
<div class="item"> <div class="item">
<div class="item-title"><i style="background: #3AD0D1;"></i>2022年人口</div> <div class="item-title"><i style="background: #3AD0D1;"></i>{{recentlyYear.year}}年人口</div>
<div class="item-count"><span>29,129.03 </span>亿<img src="@/assets/images/economies/icon_down.png"></div> <div class="item-count">
<span>{{recentlyYear.population}}</span>
<img v-if="recentlyYear.populationGrowthRate > 0" src="@/assets/images/economies/icon_up.png">
<img v-else src="@/assets/images/economies/icon_down.png">
</div>
<div id="echartsRK" style="height: 75px;"></div> <div id="echartsRK" style="height: 75px;"></div>
<div class="item-text down">较2021年下降<span>26.7%</span></div> <div class="item-text up" v-if="recentlyYear.populationGrowthRate > 0">{{nextYearMap.year}}年上升<span>{{recentlyYear.populationGrowthRate}}%</span></div>
<div class="item-text down" v-else>{{nextYearMap.year}}年下降<span>{{recentlyYear.populationGrowthRate}}%</span></div>
</div> </div>
<div class="item"> <div class="item">
<div class="item-title"><i style="background: #FFBE5D;"></i>2022年一般公共预算收入</div> <div class="item-title"><i style="background: #FFBE5D;"></i>{{recentlyYear.year}}年一般公共预算收入</div>
<div class="item-count"><span>29,129.03 </span>亿<img src="@/assets/images/economies/icon_up.png"></div> <div class="item-count">
<span>{{recentlyYear.gbr}}</span>亿
<img v-if="recentlyYear.gbrGrowth > 0" src="@/assets/images/economies/icon_up.png">
<img v-else src="@/assets/images/economies/icon_down.png">
</div>
<div id="echartsSR" style="height: 75px;"></div> <div id="echartsSR" style="height: 75px;"></div>
<div class="item-text up">较2021年上升<span>26.7%</span></div> <div class="item-text up" v-if="recentlyYear.gbrGrowth > 0">{{nextYearMap.year}}年上升<span>{{recentlyYear.gbrGrowth}}%</span></div>
<div class="item-text down" v-else>{{nextYearMap.year}}年下降<span>{{Number(recentlyYear.gbrGrowth).toString().substring(1)}}%</span></div>
</div> </div>
<div class="item"> <div class="item">
<div class="item-title"><i style="background: #FF8935;"></i>2000年地方政府债务余额</div> <div class="item-title"><i style="background: #FF8935;"></i>{{recentlyYear.year}}年地方政府债务余额</div>
<div class="item-count"><span>29,129.03 </span>亿<img src="@/assets/images/economies/icon_up.png"></div> <div class="item-count">
<span>{{recentlyYear.govDebtBalance}}</span>亿
<img v-if="recentlyYear.govDebtBalance > nextYearMap.govDebtBalance" src="@/assets/images/economies/icon_up.png">
<img v-else src="@/assets/images/economies/icon_down.png">
</div>
<div id="echartsYE" style="height: 75px;"></div> <div id="echartsYE" style="height: 75px;"></div>
<div class="item-text up">较2021年上升<span>26.7%</span></div> <div class="item-text up" v-if="recentlyYear.govDebtBalance > nextYearMap.govDebtBalance">
{{nextYearMap.year}}年上升<span>{{((recentlyYear.govDebtBalance - nextYearMap.govDebtBalance)/nextYearMap.govDebtBalance*100).toFixed(2)}}%</span></div>
<div class="item-text down" v-else>{{nextYearMap.year}}年下降<span>{{((recentlyYear.govDebtBalance - nextYearMap.govDebtBalance)/nextYearMap.govDebtBalance*100).toFixed(2).toString().substring(1)}}%</span></div>
</div> </div>
</div> </div>
</div> </div>
<div class="content content2"> <div class="content content2">
<div class="common-title">经济信息</div> <div class="common-title">经济信息</div>
<div class="content-box"> <div class="content-box">
<span><img src="@/assets/images/economies/icon_1.png">下属辖区 <label>38</label><i></i></span> <span><img src="@/assets/images/economies/icon_1.png">下属辖区 <label>{{recentlyYear.subordinateJurisdiction}}<i></i></label></span>
<span><img src="@/assets/images/economies/icon_2.png">地方债余额 <label>10,567.32</label><i>亿</i></span> <span><img src="@/assets/images/economies/icon_2.png">城投平台 <label>{{recentlyYear.urbanInvestmentPlatform}}<i>亿</i></label></span>
<span><img src="@/assets/images/economies/icon_3.png">专项债项目 <label>10</label><i></i></span> <span><img src="@/assets/images/economies/icon_3.png">城投平台授信余额 <label>{{recentlyYear.creditBalance}}<i></i></label></span>
<span><img src="@/assets/images/economies/icon_4.png">城投平台 <label>17</label><i></i></span> <span><img src="@/assets/images/economies/icon_4.png">城投平台营收账款 <label>{{recentlyYear.accountsReceivable}}<i></i></label></span>
<span><img src="@/assets/images/economies/icon_5.png">城投平台有息债务 <label>17,710.19</label><i>亿</i></span> <span><img src="@/assets/images/economies/icon_5.png">城投平台有息债务 <label>{{recentlyYear.uipInterestBearingDebt}}<i>亿</i></label></span>
</div> </div>
</div> </div>
<div class="content content3"> <div class="content content3">
...@@ -77,15 +103,17 @@ ...@@ -77,15 +103,17 @@
<script> <script>
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import { regional,regionalList } from '@/api/macro/macro' import { regional,regionalList,location } from '@/api/macro/macro'
export default { export default {
name: 'regionalEconomy', name: 'regionalEconomy',
props:{ props:{
dataQuery:{} dataQuery: {
type: Object,
default: {}
},
}, },
data() { data() {
return { return {
activeName: 'first',
tableData: [], tableData: [],
headers: [ headers: [
{ {
...@@ -158,7 +186,7 @@ export default { ...@@ -158,7 +186,7 @@ export default {
}, },
{ {
prop: 'gbrGrowth', prop: 'gbrGrowth',
label: '般公共预算收入增速', label: '一般公共预算收入增速(%)',
}, },
{ {
prop: 'taxIncome', prop: 'taxIncome',
...@@ -222,23 +250,23 @@ export default { ...@@ -222,23 +250,23 @@ export default {
}, },
{ {
prop: 'fiscalSelfSufficiencyRate', prop: 'fiscalSelfSufficiencyRate',
label: '财政自给率', label: '财政自给率(%)',
}, },
{ {
prop: 'govDebtToGdpRate', prop: 'govDebtToGdpRate',
label: '负债率', label: '负债率(%)',
}, },
{ {
prop: 'govDebtToGdpRateWild', prop: 'govDebtToGdpRateWild',
label: '负债率-宽口径', label: '负债率(宽口径)(%)',
}, },
{ {
prop: 'govDebtRate', prop: 'govDebtRate',
label: '债务率', label: '债务率(%)',
}, },
{ {
prop: 'govDebtRateWild', prop: 'govDebtRateWild',
label: '债务率-宽口径', label: '债务率(宽口径)(%)',
}, },
], ],
tableLoading: false, tableLoading: false,
...@@ -246,18 +274,19 @@ export default { ...@@ -246,18 +274,19 @@ export default {
pageSize: 10, pageSize: 10,
tableDataTotal: 0, tableDataTotal: 0,
labelData:[2021,2022], labelData:[2021,2022],
valData:[23201,35201] valData:[],
valData1:[],
valData2:[],
valData3:[],
valData4:[],
recentlyYear:{},
nextYearMap:{},
} }
}, },
created() { created() {
console.log(this.dataQuery)
this.getData() this.getData()
this.$nextTick(()=>{ this.$nextTick(()=>{
this.initChart()
this.initChart1()
this.initChart2()
this.initChart3()
this.initChart4()
}) })
}, },
computed: { computed: {
...@@ -280,7 +309,18 @@ export default { ...@@ -280,7 +309,18 @@ export default {
params.provinceId=this.dataQuery.provinceId params.provinceId=this.dataQuery.provinceId
} }
regional(params).then(res => { regional(params).then(res => {
console.log(res.data) this.recentlyYear=res.data[0].recentlyYear;
this.nextYearMap=res.data[0].nextYearMap;
this.valData=[this.nextYearMap.gdp,this.recentlyYear.gdp]
this.valData1=[this.nextYearMap.gdpGrowth,this.recentlyYear.gdpGrowth]
this.valData2=[this.nextYearMap.population,this.recentlyYear.population]
this.valData3=[this.nextYearMap.gbr,this.recentlyYear.gbr]
this.valData4=[this.nextYearMap.govDebtBalance,this.recentlyYear.govDebtBalance]
this.initChart()
this.initChart1()
this.initChart2()
this.initChart3()
this.initChart4()
}) })
regionalList(params).then(res => { regionalList(params).then(res => {
this.tableData=res.data; this.tableData=res.data;
...@@ -369,7 +409,7 @@ export default { ...@@ -369,7 +409,7 @@ export default {
}, },
series: [ series: [
{ {
data: this.valData, data: this.valData1,
type: 'line', type: 'line',
smooth: true, smooth: true,
emphasis: { emphasis: {
...@@ -428,7 +468,7 @@ export default { ...@@ -428,7 +468,7 @@ export default {
}, },
series: [ series: [
{ {
data: this.valData, data: this.valData2,
type: 'line', type: 'line',
smooth: true, smooth: true,
emphasis: { emphasis: {
...@@ -487,7 +527,7 @@ export default { ...@@ -487,7 +527,7 @@ export default {
}, },
series: [ series: [
{ {
data: this.valData, data: this.valData3,
type: 'line', type: 'line',
smooth: true, smooth: true,
emphasis: { emphasis: {
...@@ -546,7 +586,7 @@ export default { ...@@ -546,7 +586,7 @@ export default {
}, },
series: [ series: [
{ {
data: this.valData, data: this.valData4,
type: 'line', type: 'line',
smooth: true, smooth: true,
emphasis: { emphasis: {
...@@ -671,6 +711,8 @@ export default { ...@@ -671,6 +711,8 @@ export default {
color: rgba(35,35,35,0.8); color: rgba(35,35,35,0.8);
font-size: 12px; font-size: 12px;
padding-left: 16px; padding-left: 16px;
width: 20%;
line-height: 26px;
img{ img{
width: 12px; width: 12px;
height: 12px; height: 12px;
...@@ -682,12 +724,15 @@ export default { ...@@ -682,12 +724,15 @@ export default {
color: #232323; color: #232323;
font-size: 20px; font-size: 20px;
margin-left: 12px; margin-left: 12px;
float: right;
} }
i{ i{
color: #232323; color: #232323;
margin-right: 16px; margin-right: 16px;
font-style: normal; font-style: normal;
margin-left: 4px; margin-left: 4px;
font-weight: 400;
font-size: 12px;
} }
} }
span:last-child{ span:last-child{
......
...@@ -7,12 +7,12 @@ ...@@ -7,12 +7,12 @@
<el-tab-pane label="产业结构" name="third"></el-tab-pane> <el-tab-pane label="产业结构" name="third"></el-tab-pane>
<el-tab-pane label="地区经济对比" name="four"></el-tab-pane> <el-tab-pane label="地区经济对比" name="four"></el-tab-pane>
</el-tabs> </el-tabs>
<div class="location"><i class="el-icon-location"></i>重庆市</div> <div class="location"><i class="el-icon-location"></i>{{province}}</div>
</div> </div>
<RegionalEconomy v-if="activeName === 'first'" :dataQuery="dataQuery"></RegionalEconomy> <RegionalEconomy v-if="activeName === 'first' && province" :dataQuery="dataQuery"></RegionalEconomy>
<LocalEconomy v-if="activeName === 'second'" :dataQuery="dataQuery"></LocalEconomy> <LocalEconomy v-if="activeName === 'second' && province" :dataQuery="dataQuery"></LocalEconomy>
<IndustrialStructure v-if="activeName === 'third'" :dataQuery="dataQuery"></IndustrialStructure> <IndustrialStructure v-if="activeName === 'third' && province" :dataQuery="dataQuery"></IndustrialStructure>
<Comparison v-if="activeName === 'four'" :dataQuery="dataQuery"></Comparison> <Comparison v-if="activeName === 'four' && province" :dataQuery="dataQuery"></Comparison>
</div> </div>
</template> </template>
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
import LocalEconomy from './component/localEconomy' import LocalEconomy from './component/localEconomy'
import Comparison from './component/comparison' import Comparison from './component/comparison'
import IndustrialStructure from './component/industrialStructure' import IndustrialStructure from './component/industrialStructure'
import { location } from '@/api/macro/macro'
export default { export default {
name: 'Economies', name: 'Economies',
components: { components: {
...@@ -31,12 +32,20 @@ export default { ...@@ -31,12 +32,20 @@ export default {
}, },
data() { data() {
return { return {
activeName: 'third', activeName: 'first',
dataQuery:{} dataQuery:{},
province:''
} }
}, },
created() { created() {
this.dataQuery=this.$route.query this.dataQuery=this.$route.query;
location({provinceId:'500000'}).then(res => {
this.province=res.data.currentProvince.regionName;
this.provinceId=res.data.currentProvince.id;
if(!this.dataQuery.provinceId){
this.dataQuery.provinceId=this.provinceId
}
})
// let name = sessionStorage.getItem('currentTab') // let name = sessionStorage.getItem('currentTab')
// if (name != "undefined" && name){ // if (name != "undefined" && name){
// this.activeName = name; // this.activeName = name;
......
<template>
<div class="localEnterprises">
<div class="content">
<div class="search">
<el-cascader
ref="address"
:options="aptitudeCodeList"
:props="props"
v-model="queryParams.codeStr"
placeholder="资质资格"
collapse-tags
clearable></el-cascader>
<el-input placeholder="输入企业名称关键词" v-model="queryParams.key">
<el-button slot="append">搜索</el-button>
</el-input>
<span class="total">{{tableDataTotal}}</span>
</div>
<div class="table-item">
<el-table
v-loading="tableLoading"
:data="tableData"
element-loading-text="Loading"
border
fit
highlight-current-row
>
<el-table-column label="序号" width="50" align="left" fixed>
<template slot-scope="scope">{{ pageIndex * pageSize - pageSize + scope.$index + 1 }}</template>
</el-table-column>
<el-table-column label="公司名称" align="left" width="300">
<template slot-scope="scope">
<router-link to="" tag="a" class="a-link">{{ scope.row.name}}</router-link>
</template>
</el-table-column>
<el-table-column label="注册地区" prop="address" width="80"/>
<el-table-column label="资质资格" prop="aptitudeCountNew" sortable width="120" align="right" />
<el-table-column label="专业人员" prop="persionCount" sortable width="130" align="right" />
<el-table-column label="中标业绩" prop="recentlyCount" sortable width="130" align="right" />
<el-table-column label="最大中标金额(万元)" prop="cgfs" sortable width="160" align="right" />
<el-table-column label="中标总金额(万元)" prop="cgfs" sortable width="160" align="right" />
<el-table-column label="四库业绩" prop="skyCount" sortable width="130" align="right" />
<el-table-column label="公路业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="水利业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="常合作业主" prop="cgfs" width="280" align="right" />
<el-table-column label="客户(个)" prop="customerCount" sortable width="130" align="right" />
<el-table-column label="供应商(个)" prop="supplierCount" sortable width="130" align="right" />
<el-table-column label="常合作供应商" prop="cgfs" width="280" align="right" />
</el-table>
</div>
<div class="pagination-box">
<el-pagination background :current-page="pageIndex" :page-size="pageSize" :total="tableDataTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div>
</div>
</div>
</template>
<script>
import * as echarts from 'echarts';
import aptitudeCode from '@/assets/json/aptitudeCode'
import { countGroupByMonth,countGroupByProvince,getYear } from '@/api/macro/macro'
export default {
name: 'localEnterprises',
data() {
return {
queryParams:{
key:'',
codeStr:''
},
props: {
value: 'id',
multiple: true,
// checkStrictly:true,
label:'name',
children:'list',
expandTrigger:'hover'
},
tableData: [
{
dataId:'1',
cgrssqy:'100',
cgfs:'200',
address:'江北区',
name:'重庆市江北区国有资本投资运营管理集团有限公司'
}
],
tableLoading: false,
pageIndex: 1,
pageSize: 10,
tableDataTotal: 1,
aptitudeCodeList:[],
}
},
created() {
this.aptitudeCode()
this.querySubmit()
},
methods: {
//资质Json
async aptitudeCode() {
// await axios.post("https://files.jiansheku.com/file/json/common/aptitudeCode.json", {}, {
// headers: {
// 'Content-Type': 'application/json'
// }
// }).then(res => {
// if (res.data.code == 200) {
// console.log(res.data.data)
// }
// })
this.aptitudeCodeList=aptitudeCode
},
async querySubmit(){
const params = { pageNum: this.pageIndex, pageSize: this.pageSize}
if(this.queryParams.field){
params.field=this.queryParams.field
}
if(this.queryParams.order){
params.order=this.queryParams.order
}
enterprise(params).then(res => {
console.log(res.data)
})
},
// 重置页数
handleSizeChange(val) {
this.pageIndex = 1
this.pageSize = val
this.querySubmit()
},
// 跳转指定页数
handleCurrentChange(val) {
this.pageIndex = val
this.querySubmit()
},
}
}
</script>
<style lang="scss" scoped>
.localEnterprises{
.content{
background: #FFFFFF;
border-radius: 4px;
margin-top: 12px;
padding: 16px;
.search{
::v-deep .el-cascader{
width: 180px;
margin-right: 12px;
height: 32px;
.el-input{
width: 100%;
height: 32px;
.el-input__inner{
height: 32px !important;
}
}
.el-cascader__tags{
flex-wrap: inherit;
.el-tag{
max-width: 100px;
margin: 5px 0 2px 6px;
}
}
}
::v-deep .el-input{
width: 250px;
height: 32px;
.el-input__inner{
height: 32px;
}
.el-input-group__append{
width: 59px;
background: #F5F5F5;
color:#0081FF;
border-left: 0;
}
}
.total{
float: right;
color: #3D3D3D;
font-size: 12px;
line-height: 36px;
}
}
.table-item{
margin-top: 14px;
}
}
}
</style>
<template>
<div class="offsite">
<div class="content">
<div class="search">
<el-cascader
ref="address"
:options="aptitudeCodeList"
:props="props"
v-model="queryParams.codeStr"
placeholder="资质资格"
collapse-tags
clearable></el-cascader>
<el-input placeholder="输入企业名称关键词" v-model="queryParams.key">
<el-button slot="append">搜索</el-button>
</el-input>
<span class="total">{{tableDataTotal}}</span>
</div>
<div class="table-item">
<el-table
v-loading="tableLoading"
:data="tableData"
element-loading-text="Loading"
border
fit
highlight-current-row
>
<el-table-column label="序号" width="50" align="left" fixed>
<template slot-scope="scope">{{ pageIndex * pageSize - pageSize + scope.$index + 1 }}</template>
</el-table-column>
<el-table-column label="公司名称" align="left" width="300">
<template slot-scope="scope">
<router-link to="" tag="a" class="a-link">{{ scope.row.name}}</router-link>
</template>
</el-table-column>
<el-table-column label="注册地区" prop="address" width="80"/>
<el-table-column label="资质资格" prop="aptitudeCountNew" sortable width="120" align="right" />
<el-table-column label="专业人员" prop="persionCount" sortable width="130" align="right" />
<el-table-column label="中标业绩" prop="recentlyCount" sortable width="130" align="right" />
<el-table-column label="最大中标金额(万元)" prop="cgfs" sortable width="160" align="right" />
<el-table-column label="中标总金额(万元)" prop="cgfs" sortable width="160" align="right" />
<el-table-column label="四库业绩" prop="skyCount" sortable width="130" align="right" />
<el-table-column label="公路业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="水利业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="常合作业主" prop="cgfs" width="280" align="right" />
<el-table-column label="客户(个)" prop="customerCount" sortable width="130" align="right" />
<el-table-column label="供应商(个)" prop="supplierCount" sortable width="130" align="right" />
<el-table-column label="常合作供应商" prop="cgfs" width="280" align="right" />
</el-table>
</div>
</div>
</div>
</template>
<script>
import * as echarts from 'echarts';
import aptitudeCode from '@/assets/json/aptitudeCode'
import { countGroupByMonth,countGroupByProvince,getYear } from '@/api/macro/macro'
export default {
name: 'offsite',
data() {
return {
queryParams:{
key:'',
codeStr:''
},
props: {
value: 'id',
multiple: true,
// checkStrictly:true,
label:'name',
children:'list',
expandTrigger:'hover'
},
tableData: [
{
dataId:'1',
cgrssqy:'100',
cgfs:'200',
address:'江北区',
name:'重庆市江北区国有资本投资运营管理集团有限公司'
}
],
tableLoading: false,
pageIndex: 1,
pageSize: 10,
tableDataTotal: 1,
aptitudeCodeList:[],
}
},
created() {
this.aptitudeCode()
this.querySubmit()
},
methods: {
//资质Json
async aptitudeCode() {
// await axios.post("https://files.jiansheku.com/file/json/common/aptitudeCode.json", {}, {
// headers: {
// 'Content-Type': 'application/json'
// }
// }).then(res => {
// if (res.data.code == 200) {
// console.log(res.data.data)
// }
// })
this.aptitudeCodeList=aptitudeCode
},
async querySubmit(){
const params = { pageNum: this.pageIndex, pageSize: this.pageSize}
if(this.queryParams.field){
params.field=this.queryParams.field
}
if(this.queryParams.order){
params.order=this.queryParams.order
}
enterprise(params).then(res => {
console.log(res.data)
})
}
}
}
</script>
<style lang="scss" scoped>
.offsite{
.content{
background: #FFFFFF;
border-radius: 4px;
margin-top: 12px;
padding: 16px;
.search{
::v-deep .el-cascader{
width: 180px;
margin-right: 12px;
height: 32px;
.el-input{
width: 100%;
height: 32px;
.el-input__inner{
height: 32px !important;
}
}
.el-cascader__tags{
flex-wrap: inherit;
.el-tag{
max-width: 100px;
margin: 5px 0 2px 6px;
}
}
}
::v-deep .el-input{
width: 250px;
height: 32px;
.el-input__inner{
height: 32px;
}
.el-input-group__append{
width: 59px;
background: #F5F5F5;
color:#0081FF;
border-left: 0;
}
}
.total{
float: right;
color: #3D3D3D;
font-size: 12px;
line-height: 36px;
}
}
.table-item{
margin-top: 14px;
}
}
}
</style>
...@@ -40,28 +40,38 @@ ...@@ -40,28 +40,38 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="注册地区" prop="address" width="80"/> <el-table-column label="注册地区" prop="address" width="80"/>
<el-table-column label="资质资格" prop="cgfs" sortable width="120" align="right" /> <el-table-column label="资质资格" prop="aptitudeCountNew" sortable width="120" align="right" />
<el-table-column label="专业人员" prop="cgfs" sortable width="130" align="right" /> <el-table-column label="专业人员" prop="persionCount" sortable width="130" align="right" />
<el-table-column label="中标业绩" prop="cgfs" sortable width="130" align="right" /> <el-table-column label="中标业绩" prop="recentlyCount" sortable width="130" align="right" />
<el-table-column label="最大中标金额(万元)" prop="cgfs" sortable width="160" align="right" /> <el-table-column label="最大中标金额(万元)" prop="cgfs" sortable width="160" align="right" />
<el-table-column label="中标总金额(万元)" prop="cgfs" sortable width="160" align="right" /> <el-table-column label="中标总金额(万元)" prop="cgfs" sortable width="160" align="right" />
<el-table-column label="四库业绩" prop="cgfs" sortable width="130" align="right" /> <el-table-column label="四库业绩" prop="skyCount" sortable width="130" align="right" />
<el-table-column label="公路业绩" prop="cgfs" sortable width="130" align="right" /> <el-table-column label="公路业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="水利业绩" prop="cgfs" sortable width="130" align="right" /> <el-table-column label="水利业绩" prop="cgfs" sortable width="130" align="right" />
<el-table-column label="常合作业主" prop="cgfs" width="280" align="right" /> <el-table-column label="常合作业主" prop="cgfs" width="280" align="right" />
<el-table-column label="客户(个)" prop="cgfs" sortable width="130" align="right" /> <el-table-column label="客户(个)" prop="customerCount" sortable width="130" align="right" />
<el-table-column label="供应商(个)" prop="cgfs" sortable width="130" align="right" /> <el-table-column label="供应商(个)" prop="supplierCount" sortable width="130" align="right" />
<el-table-column label="常合作供应商" prop="cgfs" width="280" align="right" /> <el-table-column label="常合作供应商" prop="cgfs" width="280" align="right" />
</el-table> </el-table>
</div> </div>
<div class="pagination-box">
<el-pagination background :current-page="pageIndex" :page-size="pageSize" :total="tableDataTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div> </div>
</div> </div>
<!--<LocalEnterprises v-if="activeName === 'first'"></LocalEnterprises>-->
<!--<Offsite v-if="activeName === 'second'"></Offsite>-->
</div>
</template> </template>
<script> <script>
// import LocalEnterprises from './component/localEnterprises'
// import Offsite from './component/offsite'
import aptitudeCode from '@/assets/json/aptitudeCode' import aptitudeCode from '@/assets/json/aptitudeCode'
import { enterprise } from '@/api/macro/macro'
export default { export default {
name: 'Enterprises', name: 'Enterprises',
// components: {LocalEnterprises,Offsite},
data() { data() {
return { return {
activeName: 'first', activeName: 'first',
...@@ -72,7 +82,7 @@ export default { ...@@ -72,7 +82,7 @@ export default {
props: { props: {
value: 'id', value: 'id',
multiple: true, multiple: true,
checkStrictly:true, // checkStrictly:true,
label:'name', label:'name',
children:'list', children:'list',
expandTrigger:'hover' expandTrigger:'hover'
...@@ -90,14 +100,15 @@ export default { ...@@ -90,14 +100,15 @@ export default {
pageIndex: 1, pageIndex: 1,
pageSize: 10, pageSize: 10,
tableDataTotal: 1, tableDataTotal: 1,
aptitudeCodeList:[] aptitudeCodeList:[],
} }
}, },
created() { created() {
this.aptitudeCode() this.aptitudeCode()
this.querySubmit()
}, },
methods: { methods: {
//资质Json //资质Json
async aptitudeCode() { async aptitudeCode() {
// await axios.post("https://files.jiansheku.com/file/json/common/aptitudeCode.json", {}, { // await axios.post("https://files.jiansheku.com/file/json/common/aptitudeCode.json", {}, {
// headers: { // headers: {
...@@ -108,9 +119,30 @@ export default { ...@@ -108,9 +119,30 @@ export default {
// console.log(res.data.data) // console.log(res.data.data)
// } // }
// }) // })
console.log(aptitudeCode)
this.aptitudeCodeList=aptitudeCode this.aptitudeCodeList=aptitudeCode
},
async querySubmit(){
const params = { pageNum: this.pageIndex, pageSize: this.pageSize}
if(this.queryParams.field){
params.field=this.queryParams.field
}
if(this.queryParams.order){
params.order=this.queryParams.order
}
enterprise(params).then(res => {
console.log(res.data)
})
},
// 重置页数
handleSizeChange(val) {
this.pageIndex = 1
this.pageSize = val
this.querySubmit()
},
// 跳转指定页数
handleCurrentChange(val) {
this.pageIndex = val
this.querySubmit()
}, },
} }
} }
......
...@@ -11,14 +11,16 @@ ...@@ -11,14 +11,16 @@
:data="tableData" :data="tableData"
element-loading-text="Loading" element-loading-text="Loading"
border border
show-summary
height="360" height="360"
fit fit
@sort-change="sortChange"
highlight-current-row highlight-current-row
> >
<el-table-column prop="name" label="项目关系" width="150" /> <el-table-column prop="name" label="项目类型" width="150" />
<el-table-column prop="value" label="项目个数" width="140" /> <el-table-column prop="number" label="项目个数" sortable="custom" width="140" />
<el-table-column prop="tz" label="投资额(亿元)" width="140" /> <el-table-column prop="value" label="投资额(亿元)" sortable="custom" width="140" />
<el-table-column prop="bl" label="比例" width="140" /> <el-table-column prop="proportion" label="比例(%)" width="140" sortable="custom" />
</el-table> </el-table>
</div> </div>
</div> </div>
...@@ -33,8 +35,10 @@ ...@@ -33,8 +35,10 @@
</div> </div>
<div class="table-item"> <div class="table-item">
<el-table <el-table
v-loading="tableLoading"
:data="listData" :data="listData"
element-loading-text="Loading" element-loading-text="Loading"
@sort-change="sortChange1"
border border
fit fit
highlight-current-row highlight-current-row
...@@ -42,138 +46,107 @@ ...@@ -42,138 +46,107 @@
<el-table-column label="序号" width="55" align="left" fixed> <el-table-column label="序号" width="55" align="left" fixed>
<template slot-scope="scope">{{ pageIndex * pageSize - pageSize + scope.$index + 1 }}</template> <template slot-scope="scope">{{ pageIndex * pageSize - pageSize + scope.$index + 1 }}</template>
</el-table-column> </el-table-column>
<el-table-column prop="name" label="项目名称" width="290"> <el-table-column prop="projectName" label="项目名称">
<template slot-scope="scope"> <template slot-scope="scope">
<router-link :to="'/macro/financing/details/'+ scope.row.id" tag="a" class="a-link">{{ scope.row.name}}</router-link> <router-link :to="'/macro/financing/details/'+ scope.row.id" tag="a" class="a-link">{{ scope.row.projectName}}</router-link>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="tz" label="项目总投资(亿)" sortable width="155" /> <el-table-column prop="projectTotalInvestment" label="项目总投资(亿)" sortable="custom" width="155" />
<el-table-column prop="bj" label="项目资本金(亿)" sortable width="155" /> <el-table-column prop="projectCapital" label="项目资本金(亿)" sortable="custom" width="155" />
<el-table-column prop="sy" label="项目收益倍数(倍)" width="150" /> <el-table-column prop="econData007" label="项目收益倍数(倍)" sortable="custom" width="150" />
<el-table-column prop="zxz" label="专项债金额(亿)" width="150" /> <el-table-column prop="zxz" label="专项债金额(亿)" sortable="custom" width="150" />
<el-table-column prop="zxzzj" label="专项债用作资本金(亿)" width="170" /> <el-table-column prop="specialCapital" label="专项债用作资本金(亿)" width="170" />
<el-table-column prop="xmzt" label="项目主体"/> <el-table-column prop="projectEntity" label="项目主体">
<!--<template slot-scope="scope">-->
<!--<router-link :to="'/macro/financing/details/'+ scope.row.projectEntityId" tag="a" class="a-link">{{ scope.row.projectEntity}}</router-link>-->
<!--</template>-->
</el-table-column>
</el-table> </el-table>
</div> </div>
<div class="pagination-box">
<el-pagination background :current-page="pageIndex" :page-size="pageSize" :total="tableDataTotal" layout="prev, pager, next, jumper" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
</div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import { statistics,projectsPage } from '@/api/macro/macro'
export default { export default {
name: 'Financing', name: 'Financing',
data() { data() {
return { return {
tableData:[ queryParams:{},
{ tableParams:{},
name:'农业农村', tableData:[],
value:'2', listData:[],
tz:'50.01',
bl:'0.19%'
},
{
name:'乡村振兴',
value:'2',
tz:'50.01',
bl:'0.19%'
},
{
name:'农林水利',
value:'2',
tz:'50.01',
bl:'0.19%'
},
{
name:'交通',
value:'2',
tz:'50.01',
bl:'0.19%'
},
{
name:'轨道交通',
value:'2',
tz:'50.01',
bl:'0.19%'
},
{
name:'政府收费公路',
value:'2',
tz:'50.01',
bl:'0.19%'
},
{
name:'其他交通基础设施',
value:'2',
tz:'50.01',
bl:'0.19%'
},
{
name:'铁路',
value:'2',
tz:'50.01',
bl:'0.19%'
},
{
name:'养老',
value:'2',
tz:'50.01',
bl:'0.19%'
},
{
name:'生态环保',
value:'2',
tz:'50.01',
bl:'0.19%'
},
{
name:'职业教育',
value:'2',
tz:'50.01',
bl:'0.19%'
},
{
name:'能源',
value:'2',
tz:'50.01',
bl:'0.19%'
},
],
listData:[
{
id:1,
name:'涪陵高新产业园区总和配套项目',
tz:'535.00',
bj:'235.00',
sy:'3',
zxz:'230',
zxzzj:'423',
xmzt:'重庆市涪陵区新城区开发 (集团) 有限公司',
},
{
id:2,
name:'涪陵高新产业园区总和配套项目',
tz:'235.00',
bj:'435.00',
sy:'6',
zxz:'530',
zxzzj:'323',
xmzt:'重庆市涪陵区新城区开发 (集团) 有限公司',
}
],
tableLoading: false, tableLoading: false,
pageIndex: 1, pageIndex: 1,
pageSize: 10, pageSize: 10,
tableDataTotal: 120 tableDataTotal: 0
} }
}, },
created() { created() {
this.getStatistics()
this.getData()
this.$nextTick(()=>{ this.$nextTick(()=>{
this.initChart()
}) })
}, },
methods: { methods: {
initChart() { getData(){
this.tableLoading = true
let params={ pageNum: this.pageIndex, pageSize: this.pageSize}
if(this.tableParams.field){
params.field=this.tableParams.field
}
if(this.tableParams.order){
params.order=this.tableParams.order
}
projectsPage(params).then(res => {
this.tableLoading = false
this.listData=res.data.list;
this.tableDataTotal = res.data.totalCount
})
// 延迟关闭加载效果
// setTimeout(() => {
// this.tableLoading = false
// }, 200)
},
getStatistics(){
let params={};
if(this.queryParams.field){
params.field=this.queryParams.field
}
if(this.queryParams.order){
params.order=this.queryParams.order
}
statistics(params).then(res => {
var list=[];
for(var i=0;i<res.data.length;i++){
var obj={};
obj.name=res.data[i].projectType;
obj.value=res.data[i].totalInvestment;
obj.number=res.data[i].count;
// obj.totalInvestment=res.data[i].totalInvestment;
obj.proportion=res.data[i].proportion;
list.push(obj)
}
this.tableData=list;
let arr=this.tableData.sort((old,New)=>{
return New.value - old.value
})
let data=[]
for(let i=0; i<10; i++){
data.push(arr[i])
}
this.initChart(data)
})
},
initChart(data) {
let myChart = echarts.init(document.getElementById("echarts")) let myChart = echarts.init(document.getElementById("echarts"))
let option ={ let option ={
...@@ -184,9 +157,9 @@ export default { ...@@ -184,9 +157,9 @@ export default {
formatter: function (params) { formatter: function (params) {
var result = '' var result = ''
result+='<h3 style="color: #232226;padding: 0 0 5px 0;margin: 0;">'+ params.data.name +'</h3>' result+='<h3 style="color: #232226;padding: 0 0 5px 0;margin: 0;">'+ params.data.name +'</h3>'
result+='<p style="color: rgba(35,35,35,0.8);padding: 0;margin: 0;">'+ params.data.value +'个</p>' result+='<p style="color: rgba(35,35,35,0.8);padding: 0;margin: 0;">'+ params.data.number +'个</p>'
result+='<p style="color: rgba(35,35,35,0.8);padding: 0;margin: 0;">'+ params.data.tz +'亿元</p>' result+='<p style="color: rgba(35,35,35,0.8);padding: 0;margin: 0;">'+ params.data.value +'亿元</p>'
result+='<p style="color: rgba(35,35,35,0.8);padding: 0;margin: 0;">'+ params.data.bl +'%</p>' result+='<p style="color: rgba(35,35,35,0.8);padding: 0;margin: 0;">'+ params.data.proportion +'%</p>'
return result; return result;
}, },
extraCssText:'width:150px!important;', extraCssText:'width:150px!important;',
...@@ -194,8 +167,8 @@ export default { ...@@ -194,8 +167,8 @@ export default {
legend: { legend: {
type: 'scroll', type: 'scroll',
orient: 'horizontal', orient: 'horizontal',
bottom: 20, bottom: 0,
data: this.tableData, data: data,
pageButtonPosition: 'end', pageButtonPosition: 'end',
}, },
series: [ series: [
...@@ -203,7 +176,7 @@ export default { ...@@ -203,7 +176,7 @@ export default {
type: 'pie', type: 'pie',
radius: '55%', radius: '55%',
center: ['50%', '40%'], center: ['50%', '40%'],
data: this.tableData, data: data,
emphasis: { emphasis: {
itemStyle: { itemStyle: {
shadowBlur: 10, shadowBlur: 10,
...@@ -215,7 +188,67 @@ export default { ...@@ -215,7 +188,67 @@ export default {
] ]
} }
myChart.setOption(option); myChart.setOption(option);
},
sortChange({ column, prop, order }){
if(prop === 'number'){
this.queryParams.field = 'count'
}else if(prop === 'value'){
this.queryParams.field = 'totalInvestment '
}else {
this.queryParams.field = prop
}
if(column.order === "ascending"){
this.queryParams.order = 'asc'
}else if(column.order === "descending"){
this.queryParams.order = 'desc'
}else {
this.queryParams.order=''
this.queryParams.field=''
}
let params={
field:this.queryParams.field,
order:this.queryParams.order
};
statistics(params).then(res => {
var list=[];
for(var i=0;i<res.data.length;i++){
var obj={};
obj.name=res.data[i].projectType;
obj.value=res.data[i].count;
obj.totalInvestment=res.data[i].totalInvestment;
obj.proportion=res.data[i].proportion;
list.push(obj)
}
this.tableData=list;
})
},
// 重置页数
handleSizeChange(val) {
this.pageIndex = 1
this.pageSize = val
this.getData()
},
// 跳转指定页数
handleCurrentChange(val) {
this.pageIndex = val
this.getData()
},
sortChange1({ column, prop, order }){
this.tableParams.field = prop;
if(column.order === "ascending"){
this.tableParams.order = 'asc'
}else if(column.order === "descending"){
this.tableParams.order = 'desc'
}else {
this.tableParams.order=''
this.tableParams.field=''
} }
this.pageIndex=1;
this.getData()
},
} }
} }
</script> </script>
......
...@@ -201,7 +201,7 @@ ...@@ -201,7 +201,7 @@
}, },
// 查询提交 // 查询提交
async querySubmit() { async querySubmit() {
// this.tableLoading = true this.tableLoading = true
const params = { pageNum: this.pageIndex, pageSize: this.pageSize, year: this.queryParams.year,type:1 } const params = { pageNum: this.pageIndex, pageSize: this.pageSize, year: this.queryParams.year,type:1 }
if(this.queryParams.address){ if(this.queryParams.address){
let arr = this.$refs.address.getCheckedNodes(); let arr = this.$refs.address.getCheckedNodes();
...@@ -235,13 +235,14 @@ ...@@ -235,13 +235,14 @@
} }
nationalPage(params).then(res => { nationalPage(params).then(res => {
this.tableData = res.data.list this.tableLoading = false
this.tableData = res.data.list;
this.tableDataTotal = res.data.totalCount this.tableDataTotal = res.data.totalCount
}) })
// 延迟关闭加载效果 // 延迟关闭加载效果
setTimeout(() => { // setTimeout(() => {
this.tableLoading = false // this.tableLoading = false
}, 200) // }, 200)
}, },
// 明细 // 明细
handleDetail(row) { handleDetail(row) {
......
...@@ -139,69 +139,6 @@ export default { ...@@ -139,69 +139,6 @@ export default {
name: 'NationalEconomies', name: 'NationalEconomies',
data() { data() {
return { return {
tableData:[
{
area:'1月',
number:'123',
zb:'0.19%'
},
{
area:'2月',
number:'156',
zb:'0.29%'
},
{
area:'3月',
number:'236',
zb:'0.34%'
},
{
area:'4月',
number:'426',
zb:'0.34%'
},
{
area:'5月',
number:'412',
zb:'0.34%'
},
{
area:'6月',
number:'231',
zb:'0.34%'
},
{
area:'7月',
number:'96',
zb:'0.34%'
},
{
area:'8月',
number:'105',
zb:'0.34%'
},
{
area:'9月',
number:'210',
zb:'0.34%'
},
{
area:'10月',
number:'420',
zb:'0.34%'
},
{
area:'11月',
number:'213',
zb:'0.34%'
},
{
area:'12月',
number:'213',
zb:'0.34%'
},
],
typeIndex:0, typeIndex:0,
glData:[], glData:[],
jzglData:[], jzglData:[],
......
<template> <template>
<div> <div>
<el-card class="box-card noborder"> <el-card class="box-card noborder">
<div class="cardtitles">跟进记录</div> <div class="cardtitles" v-if="showtype != 'projectgjdt'">跟进记录</div>
<div style="height: 24px" v-if="showtype == 'projectgjdt'"></div>
<div class="records"> <div class="records">
<div class="writeIn"> <div class="writeIn">
<div class="default" v-if="isEdit == false" @click="getEdit"> <div class="default" v-if="isEdit == false" @click="getEdit">
...@@ -24,6 +25,10 @@ ...@@ -24,6 +25,10 @@
<el-option v-for="(item,index) in glqylist" :key="index" :label="item.companyName" :value="item.customerId"></el-option> <el-option v-for="(item,index) in glqylist" :key="index" :label="item.companyName" :value="item.customerId"></el-option>
</el-select> </el-select>
</template> </template>
<el-select v-if="showtype == 'projectgjdt'" v-model="projectId" class="w128" placeholder="关联项目">
<i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/ico_1.png"></i>
<el-option v-for="(item,index) in projectList" :key="index" :label="item.projectName" :value="item.id"></el-option>
</el-select>
<el-input v-model="addParam.name" placeholder="拜访对象" style="width: 100px;"> <el-input v-model="addParam.name" placeholder="拜访对象" style="width: 100px;">
<i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/ico_2.png"></i> <i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/ico_2.png"></i>
</el-input> </el-input>
...@@ -65,7 +70,7 @@ ...@@ -65,7 +70,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="recordlist" v-if="showtype=='gjjl' && recordlist.total>0"> <div class="recordlist" v-if="showtype=='gjjl' || showtype == 'projectgjdt' && recordlist.total>0">
<div class="rec_detail" v-for="(item,index) in recordlist.rows"> <div class="rec_detail" v-for="(item,index) in recordlist.rows">
<div class="rec_time"> <div class="rec_time">
...@@ -116,7 +121,7 @@ ...@@ -116,7 +121,7 @@
<script> <script>
import "@/assets/styles/project.scss" import "@/assets/styles/project.scss"
import {getFollowList,addFollowRecord,getUserList,delFollowRecord} from '@/api/custom/custom' import {getFollowList,addFollowRecord,getUserList,delFollowRecord} from '@/api/custom/custom'
import {getGJJL,addGJJL,delGJJL} from '@/api/project/project' import {getGJJL,addGJJL,delGJJL,relateProject,allRecord} from '@/api/project/project'
import {getEnterprise,getDictType,} from '@/api/main' import {getEnterprise,getDictType,} from '@/api/main'
export default { export default {
props:{ props:{
...@@ -128,6 +133,10 @@ ...@@ -128,6 +133,10 @@
type: String, type: String,
default: "" default: ""
}, },
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
},
datas:[],//数据源 datas:[],//数据源
}, },
name: 'gjjl', name: 'gjjl',
...@@ -152,7 +161,9 @@ ...@@ -152,7 +161,9 @@
recordlist:[],//列表数据源 recordlist:[],//列表数据源
isdel:false, isdel:false,
delID:'',//删除记录的ID delID:'',//删除记录的ID
projectId:parseInt(this.$route.query.id),//项目详情id projectId:this.detailId ? this.detailId : parseInt(this.$route.query.id),//项目详情id
userId:this.$store.state.user.userId,//当前用户id
projectList:[],//关联项目
} }
}, },
computed: { computed: {
...@@ -174,11 +185,25 @@ ...@@ -174,11 +185,25 @@
if(this.showtype == 'gjjl'){ if(this.showtype == 'gjjl'){
this.getGJJL() this.getGJJL()
} }
//项目管理跟进动态
if(this.showtype == 'projectgjdt'){
this.projectId = null//项目id暂时清空,必须手选id
relateProject(this.userId).then(res=>{
this.projectList = res.data
})
this.getGJDT()
}
console.log(this.types) console.log(this.types)
}, },
methods:{ methods:{
//添加跟进动态 //添加跟进动态
addFollow(){ addFollow(){
if(this.types == 'projectgjdt'){
if(this.projectId == "" || this.projectId == null){
this.$message.error('请选择关联项目!')
return false
}
}
if(this.types == 'gjdt'){ if(this.types == 'gjdt'){
if(this.customerIds){ if(this.customerIds){
this.addParam.customerId = this.customerIds this.addParam.customerId = this.customerIds
...@@ -193,7 +218,7 @@ ...@@ -193,7 +218,7 @@
} }
}) })
} }
if(this.types == 'gjjl'){ if(this.types == 'gjjl' || this.types == 'projectgjdt'){
let param = { let param = {
businessId:this.projectId, businessId:this.projectId,
userId:this.$store.state.user.userId, userId:this.$store.state.user.userId,
...@@ -229,7 +254,7 @@ ...@@ -229,7 +254,7 @@
} }
}) })
} }
if(this.types == 'gjjl') { if(this.types == 'gjjl' || this.types == 'projectgjdt') {
delGJJL(this.delID).then(result => { delGJJL(this.delID).then(result => {
if (result.code == 200) { if (result.code == 200) {
this.handleCurrentChange(1) this.handleCurrentChange(1)
...@@ -240,6 +265,7 @@ ...@@ -240,6 +265,7 @@
} }
}, },
//跟进动态列表 //跟进动态列表
//客户管理跟进动态
getGJDTlist(){ getGJDTlist(){
let param = { let param = {
pageNum:this.pageNum,//页码 pageNum:this.pageNum,//页码
...@@ -256,6 +282,22 @@ ...@@ -256,6 +282,22 @@
}) })
}) })
}, },
//项目管理跟进动态
getGJDT(){
let param = {
pageNum:this.pageNum,//页码
pageSize:this.pageSize,
userId: this.userId
}
allRecord(param).then(result=>{
this.recordlist = result.code == 200?result:[]
// this.recordlist.rows.forEach(item=>{
// item.createTime = this.gettime(item.createTime)
// item.nextVisitTime = this.gettime(item.nextVisitTime)
// })
})
},
//项目管理项目详情跟进记录
getGJJL(){ getGJJL(){
let param = { let param = {
pageNum:this.pageNum,//页码 pageNum:this.pageNum,//页码
...@@ -274,6 +316,9 @@ ...@@ -274,6 +316,9 @@
if(this.showtype == 'gjjl'){ if(this.showtype == 'gjjl'){
this.getGJJL() this.getGJJL()
} }
if(this.showtype == 'projectgjdt'){
this.getGJDT()
}
}, },
getEdit(){ getEdit(){
this.isEdit = true; this.isEdit = true;
......
...@@ -70,19 +70,25 @@ ...@@ -70,19 +70,25 @@
export default { export default {
name: 'gjjl', name: 'gjjl',
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){ data(){
return{ return{
isEdit:false, isEdit:false,
value:'', value:'',
status:0, status:0,
queryParam:{ queryParam:{
businessId:parseInt(this.$route.query.id),//项目详情id businessId:this.detailId ? this.detailId : parseInt(this.$route.query.id),//项目详情id
target:'', target:'',
task:'', task:'',
finishTime:'', finishTime:'',
}, },
searchPram:{ searchPram:{
businessId:parseInt(this.$route.query.id), businessId:this.detailId ? this.detailId : parseInt(this.$route.query.id),
pageSize:10, pageSize:10,
pageNum:1, pageNum:1,
state:null, state:null,
......
...@@ -203,10 +203,16 @@ ...@@ -203,10 +203,16 @@
import {getJSNR,editXMNR} from '@/api/project/project' import {getJSNR,editXMNR} from '@/api/project/project'
export default { export default {
name: 'jsnr', name: 'jsnr',
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){ data(){
return{ return{
nowedit:-1,//当前正在编辑的文本 nowedit:-1,//当前正在编辑的文本
id:parseInt(this.$route.query.id), id:this.detailId ? this.detailId : parseInt(this.$route.query.id),
investmentAmount: '',//总投资额 investmentAmount: '',//总投资额
amountSource: '',//资金来源 amountSource: '',//资金来源
buildProperty: '',//建设性质 buildProperty: '',//建设性质
......
...@@ -113,6 +113,12 @@ ...@@ -113,6 +113,12 @@
import {getLXR,editLXR,addLXR} from '@/api/project/project' import {getLXR,editLXR,addLXR} from '@/api/project/project'
export default { export default {
name: 'lxr', name: 'lxr',
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){ data(){
return{ return{
dialogVisible:false, dialogVisible:false,
...@@ -125,9 +131,9 @@ ...@@ -125,9 +131,9 @@
searchParam:{ searchParam:{
pageNum:1, pageNum:1,
pageSize:20, pageSize:20,
businessId:this.$route.query.id businessId:this.detailId ? this.detailId : this.$route.query.id
}, },
id:this.$route.query.id, id:this.detailId ? this.detailId : this.$route.query.id,
total:0, total:0,
projectname:this.$route.query.projectname, projectname:this.$route.query.projectname,
queryParam:[], queryParam:[],
......
...@@ -139,6 +139,12 @@ ...@@ -139,6 +139,12 @@
import {getDictType} from '@/api/main' import {getDictType} from '@/api/main'
export default { export default {
name: 'xgqy', name: 'xgqy',
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){ data(){
return{ return{
types:1, types:1,
...@@ -175,7 +181,7 @@ ...@@ -175,7 +181,7 @@
companytype:[], companytype:[],
companyrole:[], companyrole:[],
queryParam:{ queryParam:{
businessId:this.$route.query.id, businessId:this.detailId ? this.detailId : this.$route.query.id,
companyId:'', companyId:'',
companyName:'', companyName:'',
companyRole:'', companyRole:'',
...@@ -186,7 +192,7 @@ ...@@ -186,7 +192,7 @@
searchParam:{ searchParam:{
pageSize:20, pageSize:20,
pageNum:1, pageNum:1,
businessId:this.$route.query.id, businessId:this.detailId ? this.detailId : this.$route.query.id,
companyType:"", companyType:"",
companyName:'', companyName:'',
}, },
...@@ -212,7 +218,7 @@ ...@@ -212,7 +218,7 @@
if(res.code == 200){ if(res.code == 200){
this.$message.success('删除成功') this.$message.success('删除成功')
this.ondel = -1 this.ondel = -1
this.getlist() this.handleCurrentChange(1)
} }
}) })
}, },
...@@ -259,7 +265,7 @@ ...@@ -259,7 +265,7 @@
opennew(){ opennew(){
this.dialogVisible = true this.dialogVisible = true
this.queryParam={ this.queryParam={
businessId:this.$route.query.id, businessId:this.detailId ? this.detailId : this.$route.query.id,
companyId:'', companyId:'',
companyName:'', companyName:'',
companyRole:'', companyRole:'',
......
...@@ -175,6 +175,10 @@ ...@@ -175,6 +175,10 @@
name: 'xmsl', name: 'xmsl',
props:{ props:{
datas:'', datas:'',
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
}, },
data(){ data(){
return{ return{
...@@ -183,7 +187,7 @@ ...@@ -183,7 +187,7 @@
tipsvalue:"",//标签填写内容 tipsvalue:"",//标签填写内容
xmjd:'待添加', xmjd:'待添加',
projectStage:[],//项目阶段 projectStage:[],//项目阶段
id: this.$route.query.id, id: this.detailId ? this.detailId : this.$route.query.id,
xmsldata:this.datas, xmsldata:this.datas,
} }
}, },
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<div class="cardtitles">资料文档</div> <div class="cardtitles">资料文档</div>
<div class="searchbtns"> <div class="searchbtns">
<div class="searchInput"> <div class="searchInput">
<el-input type="text" placeholder="输入关键词查询"></el-input> <el-input type="text" v-model="param.keyword" placeholder="输入关键词查询"></el-input>
<div class="btn" @click="handleCurrentChange(1)">搜索</div> <div class="btn" @click="handleCurrentChange(1)">搜索</div>
</div> </div>
<div class="btn btn_primary h32 b2" @click="getUP"><div class="img img2"></div>上传</div> <div class="btn btn_primary h32 b2" @click="getUP"><div class="img img2"></div>上传</div>
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
:multiple="false" :multiple="false"
ref="upload" ref="upload"
:file-list="fileList" :file-list="fileList"
accept=".word,.pdf.excel,.xlsx" accept=".word,.pdf.excel,.xlsx,.doc,.docx"
:headers="headers" :headers="headers"
:show-file-list="false" :show-file-list="false"
:on-success="onSuccess"> :on-success="onSuccess">
...@@ -105,6 +105,13 @@ ...@@ -105,6 +105,13 @@
</el-pagination> </el-pagination>
</div> </div>
</div> </div>
<div class="delform" v-if="ondel != ''">
<div class="words">是否将文档删除</div>
<div>
<div class="btnsmall btn_primary h28" @click="delQY()">确定</div>
<div class="btnsmall btn_cancel h28" @click="ondel = ''">取消</div>
</div>
</div>
</div> </div>
</el-card> </el-card>
</div> </div>
...@@ -116,6 +123,12 @@ ...@@ -116,6 +123,12 @@
import { getZLWD ,delZLWD} from "@/api/project/project"; import { getZLWD ,delZLWD} from "@/api/project/project";
export default { export default {
name: 'zlwd', name: 'zlwd',
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){ data(){
return{ return{
isupload:false, isupload:false,
...@@ -125,15 +138,17 @@ ...@@ -125,15 +138,17 @@
fileList: [], fileList: [],
headers: { headers: {
Authorization: "Bearer " + getToken(), Authorization: "Bearer " + getToken(),
filePath:this.$route.query.id, filePath:this.detailId ? this.detailId : this.$route.query.id,
}, },
param:{ param:{
pageNum:1, pageNum:1,
pagesize:20, pagesize:20,
filePath:this.$route.query.id, filePath:this.detailId ? this.detailId : this.$route.query.id,
keyword:'',
}, },
fileDatas:[], fileDatas:[],
filename:'', filename:'',
ondel:"",
} }
}, },
created(){ created(){
...@@ -142,20 +157,24 @@ ...@@ -142,20 +157,24 @@
}, },
methods:{ methods:{
getall(){ getall(){
this.param.filePath = this.$route.query.id this.param.filePath = this.detailId ? this.detailId : this.$route.query.id
this.filename='' this.filename=''
this.headers.filePath = this.$route.query.id this.headers.filePath = this.detailId ? this.detailId : this.$route.query.id
this.handleCurrentChange(1) this.handleCurrentChange(1)
}, },
getList(){ getList(){
getZLWD(this.param).then(res=>{ getZLWD(this.param).then(res=>{
this.fileDatas = res this.fileDatas = res
if(this.fileDatas.rows!=null && this.fileDatas .length>0){ if(this.fileDatas.rows!=null && this.fileDatas.rows.length>0){
this.fileDatas.forEach(item=>{ this.fileDatas.rows.forEach(item=>{
let names = item.filePath.split('\\') let names = item.filePath.split('/')
item.name = names[names.length-1] item.name = names[names.length-1]
let types = item.name.split('.') let types = item.name.split('.')
item.type = types.length>1?types[1]:'file' item.type = types.length>1?types[1]:'file'
if(item.type == 'xls' || item.type == 'xlsx' )
item.type = 'excel'
if(item.type == 'doc' || item.type == 'docx' )
item.type = 'word'
}) })
} }
}) })
...@@ -163,7 +182,7 @@ ...@@ -163,7 +182,7 @@
getFile(row){ getFile(row){
if(row.type == 'file'){ if(row.type == 'file'){
this.filename = row.name this.filename = row.name
this.headers.filePath = this.$route.query.id+'\\'+row.name this.headers.filePath = this.detailId ? this.detailId : this.$route.query.id+'/'+row.name
this.param.filePath = row.filePath this.param.filePath = row.filePath
this.handleCurrentChange(1) this.handleCurrentChange(1)
...@@ -178,20 +197,33 @@ ...@@ -178,20 +197,33 @@
}) })
}, },
downnlod(row){ downnlod(row){
let a = document.createElement("a"); let param = {filePath:row.filePath}
a.setAttribute("href", row.filePath); // this.$download.saveAs(row.filePath,row.name);
a.setAttribute("download", row.name); this.$download.exportByPost('/business/file/download',param);
document.body.appendChild(a); // // this.$download()
a.click(); // let a = document.createElement("a");
// a.setAttribute("href", row.filePath);
// a.setAttribute("download", row.name);
// document.body.appendChild(a);
// a.click();
}, },
del(path){
delZLWD(path).then(res=>{ delQY(){
let param = {
filePath:this.ondel
}
delZLWD(JSON.stringify(param)).then(res=>{
if(res.code == 200){ if(res.code == 200){
this.$message.success('删除成功!') this.$message.success('删除成功!')
this.handleCurrentChange(1) this.handleCurrentChange(1)
this.ondel = ''
} }
}) })
}, },
del(path){
this.ondel = path
},
handleFileListChange(file, fileList) { handleFileListChange(file, fileList) {
if (fileList.length > 0) { if (fileList.length > 0) {
this.fileList = [fileList[fileList.length - 1]]; this.fileList = [fileList[fileList.length - 1]];
...@@ -225,7 +257,7 @@ ...@@ -225,7 +257,7 @@
//翻页 //翻页
handleCurrentChange(val) { handleCurrentChange(val) {
this.param.pageNum(1) this.param.pageNum=val
this.getList() this.getList()
}, },
cancel(){ cancel(){
...@@ -240,6 +272,10 @@ ...@@ -240,6 +272,10 @@
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.delform{
position: fixed; left:50%; top:50%; transform:translate(-50%,-50%)
}
.filepath{ .filepath{
font-size: 12px; font-size: 12px;
height: 30px; height: 30px;
......
<template> <template>
<div> <div>
<div class="miantitle"> <div class="miantitle">
<template v-if="!detailId">
<span>项目管理</span> <span>项目管理</span>
<span> / 商机列表</span> <span> / 商机列表</span>
</template>
<span v-else @click="cooperateList">合作情况</span>
<span> / 项目详情</span> <span> / 项目详情</span>
</div> </div>
<div class="app-container" v-if="ProjectData"> <div class="app-container" v-if="ProjectData">
...@@ -105,19 +108,19 @@ ...@@ -105,19 +108,19 @@
</div> </div>
</el-card> </el-card>
<!--项目概览--> <!--项目概览-->
<xmsl v-if="thistag == 'xmsl'" :datas="ProjectData"></xmsl> <xmsl v-if="thistag == 'xmsl'" :datas="ProjectData" :detailId="detailId"></xmsl>
<!--建设内容--> <!--建设内容-->
<jsnr v-if="thistag == 'jsnr'"></jsnr> <jsnr v-if="thistag == 'jsnr'" :detailId="detailId"></jsnr>
<!--联系人--> <!--联系人-->
<lxr v-if="thistag == 'lxr'"></lxr> <lxr v-if="thistag == 'lxr'" :detailId="detailId"></lxr>
<!--跟进记录--> <!--跟进记录-->
<gjjl v-if="thistag == 'gjjl'" types="gjjl"></gjjl> <gjjl v-if="thistag == 'gjjl'" types="gjjl" :detailId="detailId"></gjjl>
<!--工作待办--> <!--工作待办-->
<gzdb v-if="thistag == 'gzdb'"></gzdb> <gzdb v-if="thistag == 'gzdb'" :detailId="detailId"></gzdb>
<!--资料文档--> <!--资料文档-->
<zlwd v-if="thistag == 'zlwd'"></zlwd> <zlwd v-if="thistag == 'zlwd'" :detailId="detailId"></zlwd>
<!--相关企业--> <!--相关企业-->
<xgqy v-if="thistag == 'xgqy'"></xgqy> <xgqy v-if="thistag == 'xgqy'" :detailId="detailId"></xgqy>
</div> </div>
</div> </div>
</template> </template>
...@@ -138,6 +141,12 @@ ...@@ -138,6 +141,12 @@
export default { export default {
name: 'detail', name: 'detail',
components: {xmsl,jsnr,lxr,gjjl,gzdb,zlwd,xgqy}, components: {xmsl,jsnr,lxr,gjjl,gzdb,zlwd,xgqy},
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){ data(){
return { return {
lastindex: 0,//上一个点击步骤 lastindex: 0,//上一个点击步骤
...@@ -171,7 +180,7 @@ ...@@ -171,7 +180,7 @@
}, },
created(){ created(){
this.prvinceTree() this.prvinceTree()
this.id = this.$route.query.id this.id = this.detailId ? this.detailId : this.$route.query.id
//项目阶段 //项目阶段
getDictType('project_stage_type').then(result=>{ getDictType('project_stage_type').then(result=>{
this.projectStage = result.code == 200 ? result.data:[] this.projectStage = result.code == 200 ? result.data:[]
...@@ -324,6 +333,11 @@ ...@@ -324,6 +333,11 @@
}) })
this.editXMSL(param) this.editXMSL(param)
}, },
// 跳转到企业详情合作情况
cooperateList(){
this.$emit('close-detail')
}
} }
} }
</script> </script>
......
<template> <template>
<div class="app-container"> <div class="app-container">
跟进动态 <gjjl types="projectgjdt"></gjjl>
</div> </div>
</template> </template>
<script> <script>
import gjjl from '../projectList/component/gjjl.vue'
export default { export default {
name: 'Trends', name: 'Trends',
components: {gjjl,},
data() { data() {
return { return {
} }
......
...@@ -11,12 +11,6 @@ import java.util.List; ...@@ -11,12 +11,6 @@ import java.util.List;
**/ **/
@Data @Data
public class BusinessListDto { public class BusinessListDto {
/**
* 拜访方式
*/
private String visitWay;
/** /**
* 项目名称 * 项目名称
*/ */
......
...@@ -121,9 +121,14 @@ public class BusinessBrowseVo { ...@@ -121,9 +121,14 @@ public class BusinessBrowseVo {
private Integer backlogCount; private Integer backlogCount;
/** /**
* 资料文档统计 * 相关企业统计
*/ */
private Integer relateCompanyCount; private Integer relateCompanyCount;
/**
* 资料文档统计
*/
private Integer fileCount;
} }
...@@ -3,6 +3,7 @@ package com.dsk.system.mapper; ...@@ -3,6 +3,7 @@ package com.dsk.system.mapper;
import com.dsk.common.core.domain.entity.BusinessFollowRecord; import com.dsk.common.core.domain.entity.BusinessFollowRecord;
import com.dsk.system.domain.BusinessIdDto; import com.dsk.system.domain.BusinessIdDto;
import com.dsk.system.domain.BusinessListDto; import com.dsk.system.domain.BusinessListDto;
import com.dsk.system.domain.vo.BusinessListVo;
import java.util.List; import java.util.List;
...@@ -20,7 +21,7 @@ public interface BusinessFollowRecordMapper ...@@ -20,7 +21,7 @@ public interface BusinessFollowRecordMapper
* @param userId * @param userId
* @return * @return
*/ */
List<String> selectRelateProject (Integer userId); List<BusinessListVo> selectRelateProject (Integer userId);
/** /**
* 查询关联业主企业 * 查询关联业主企业
......
...@@ -3,6 +3,7 @@ package com.dsk.system.service; ...@@ -3,6 +3,7 @@ package com.dsk.system.service;
import com.dsk.common.core.domain.entity.BusinessFollowRecord; import com.dsk.common.core.domain.entity.BusinessFollowRecord;
import com.dsk.system.domain.BusinessIdDto; import com.dsk.system.domain.BusinessIdDto;
import com.dsk.system.domain.BusinessListDto; import com.dsk.system.domain.BusinessListDto;
import com.dsk.system.domain.vo.BusinessListVo;
import java.util.List; import java.util.List;
...@@ -59,7 +60,7 @@ public interface IBusinessFollowRecordService ...@@ -59,7 +60,7 @@ public interface IBusinessFollowRecordService
* @param userId * @param userId
* @return * @return
*/ */
List<String> selectRelateProject (Integer userId); List<BusinessListVo> selectRelateProject (Integer userId);
/** /**
* 查询关联业主企业 * 查询关联业主企业
......
package com.dsk.system.service; package com.dsk.system.service;
import com.dsk.common.core.domain.AjaxResult; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.dtos.ComposeQueryDto; import com.dsk.common.dtos.ComposeQueryDto;
/** /**
...@@ -19,5 +19,5 @@ public interface RegionalEnterprisesService { ...@@ -19,5 +19,5 @@ public interface RegionalEnterprisesService {
*@Author: Dgm *@Author: Dgm
*@date: 2023/5/18 10:25 *@date: 2023/5/18 10:25
*/ */
AjaxResult page(ComposeQueryDto compose); TableDataInfo page(ComposeQueryDto compose) throws Exception;
} }
package com.dsk.system.service.impl; package com.dsk.system.service.impl;
import com.dsk.common.core.domain.entity.BusinessFollowRecord; import com.dsk.common.core.domain.entity.BusinessFollowRecord;
import com.dsk.common.exception.base.BaseException;
import com.dsk.common.utils.DateUtils; import com.dsk.common.utils.DateUtils;
import com.dsk.common.utils.SecurityUtils;
import com.dsk.system.domain.BusinessIdDto; import com.dsk.system.domain.BusinessIdDto;
import com.dsk.system.domain.BusinessListDto; import com.dsk.system.domain.BusinessListDto;
import com.dsk.system.domain.vo.BusinessListVo;
import com.dsk.system.mapper.BusinessFollowRecordMapper; import com.dsk.system.mapper.BusinessFollowRecordMapper;
import com.dsk.system.service.IBusinessFollowRecordService; import com.dsk.system.service.IBusinessFollowRecordService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -45,11 +48,11 @@ public class BusinessFollowRecordServiceImpl implements IBusinessFollowRecordSer ...@@ -45,11 +48,11 @@ public class BusinessFollowRecordServiceImpl implements IBusinessFollowRecordSer
@Override @Override
public List<BusinessFollowRecord> allFollow(BusinessListDto dto) { public List<BusinessFollowRecord> allFollow(BusinessListDto dto) {
//userId不传值,就查询全部门项目 //userId不传值,就查询全部门项目
// if (dto.getUserId() == null) { if (dto.getUserId() == null) {
// Long deptId = SecurityUtils.getLoginUser().getDeptId(); Long deptId = SecurityUtils.getLoginUser().getDeptId();
// if (deptId == null) throw new BaseException("请登录"); if (deptId == null) throw new BaseException("请登录");
// dto.setDeptId(deptId.intValue()); dto.setDeptId(deptId.intValue());
// } }
return businessFollowRecordMapper.allFollow(dto); return businessFollowRecordMapper.allFollow(dto);
} }
...@@ -72,7 +75,7 @@ public class BusinessFollowRecordServiceImpl implements IBusinessFollowRecordSer ...@@ -72,7 +75,7 @@ public class BusinessFollowRecordServiceImpl implements IBusinessFollowRecordSer
} }
@Override @Override
public List<String> selectRelateProject(Integer userId) { public List<BusinessListVo> selectRelateProject(Integer userId) {
return businessFollowRecordMapper.selectRelateProject(userId); return businessFollowRecordMapper.selectRelateProject(userId);
} }
......
...@@ -80,11 +80,11 @@ public class BusinessInfoServiceImpl implements IBusinessInfoService { ...@@ -80,11 +80,11 @@ public class BusinessInfoServiceImpl implements IBusinessInfoService {
@Override @Override
public List<BusinessListVo> selectBusinessInfoList(BusinessListDto dto) { public List<BusinessListVo> selectBusinessInfoList(BusinessListDto dto) {
//userId不传值,就查询全部门项目 //userId不传值,就查询全部门项目
// if (dto.getUserId() == null) { if (dto.getUserId() == null) {
// Long deptId = SecurityUtils.getLoginUser().getDeptId(); Long deptId = SecurityUtils.getLoginUser().getDeptId();
// if (deptId == null) throw new BaseException("请登录"); if (deptId == null) throw new BaseException("请登录");
// dto.setDeptId(deptId.intValue()); dto.setDeptId(deptId.intValue());
// } }
return businessInfoMapper.selectBusinessInfoList(dto); return businessInfoMapper.selectBusinessInfoList(dto);
} }
...@@ -105,7 +105,7 @@ public class BusinessInfoServiceImpl implements IBusinessInfoService { ...@@ -105,7 +105,7 @@ public class BusinessInfoServiceImpl implements IBusinessInfoService {
businessBrowseVo.setFollowRecordCount(total.getFollowRecordCount()); businessBrowseVo.setFollowRecordCount(total.getFollowRecordCount());
businessBrowseVo.setRelateCompanyCount(total.getRelateCompanyCount()); businessBrowseVo.setRelateCompanyCount(total.getRelateCompanyCount());
//资料文档统计 //资料文档统计
businessBrowseVo.setRelateCompanyCount(FileUtils.getAllFileNames(RuoYiConfig.getProfile()+businessId).size()); businessBrowseVo.setFileCount(FileUtils.getAllFileNames(RuoYiConfig.getProfile()+businessId).size());
return businessBrowseVo; return businessBrowseVo;
} }
......
package com.dsk.system.service.impl; package com.dsk.system.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.dsk.common.core.domain.AjaxResult; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.dtos.ComposeQueryDto; import com.dsk.common.dtos.ComposeQueryDto;
import com.dsk.common.utils.DskOpenApiUtil; import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.system.service.RegionalEnterprisesService; import com.dsk.system.service.RegionalEnterprisesService;
...@@ -24,8 +24,8 @@ public class RegionalEnterprisesServiceImpl implements RegionalEnterprisesServic ...@@ -24,8 +24,8 @@ public class RegionalEnterprisesServiceImpl implements RegionalEnterprisesServic
private DskOpenApiUtil dskOpenApiUtil; private DskOpenApiUtil dskOpenApiUtil;
@Override @Override
public AjaxResult page(ComposeQueryDto compose) { public TableDataInfo page(ComposeQueryDto compose) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/page", BeanUtil.beanToMap(compose, false, false)); Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/page", BeanUtil.beanToMap(compose, false, false));
return BeanUtil.toBean(map, AjaxResult.class); return dskOpenApiUtil.responsePage(map);
} }
} }
...@@ -75,29 +75,20 @@ ...@@ -75,29 +75,20 @@
<if test="deptId != null"> <if test="deptId != null">
and u.dept_id = #{deptId} and u.dept_id = #{deptId}
</if> </if>
<if test="projectName != null and projectName != ''">
and i.project_name = #{projectName}
</if>
<if test="ownerCompany != null and ownerCompany != ''">
and i.construction_unit = #{ownerCompany}
</if>
<if test="visitWay != null and visitWay != ''">
and f.visit_way = #{visitWay}
</if>
</where> </where>
ORDER BY f.creat_time DESC ORDER BY f.creat_time DESC
</select> </select>
<select id="selectRelateProject" resultType="java.lang.String"> <select id="selectRelateProject" resultType="com.dsk.system.domain.vo.BusinessListVo">
select i.project_name select i.id,i.project_name as projectName
from business_info i from business_info i
left join business_follow_record f on f.business_id = i.id left join business_user u on u.business_id = i.id
where f.user_id = #{userId} where u.user_id = #{userId}
</select> </select>
<select id="selectRelateCompany" resultType="java.lang.String"> <select id="selectRelateCompany" resultType="java.lang.String">
select i.construction_unit select i.construction_unit
from business_info i from business_info i
left join business_follow_record f on f.business_id = i.id left join business_user u on u.business_id = i.id
where f.user_id = #{userId} where u.user_id = #{userId}
</select> </select>
<insert id="insertBusinessFollowRecord" parameterType="com.dsk.common.core.domain.entity.BusinessFollowRecord" useGeneratedKeys="true" <insert id="insertBusinessFollowRecord" parameterType="com.dsk.common.core.domain.entity.BusinessFollowRecord" useGeneratedKeys="true"
......
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