Commit 3286a077 authored by danfuman's avatar danfuman
parents c56948d5 c57d3a6b
......@@ -89,8 +89,7 @@ public class BusinessFileController extends BaseController {
@PostMapping("/upload")
public AjaxResult uploadFolder(@RequestPart("file") MultipartFile file,HttpServletRequest request){
try {
// String businessFileName = request.getHeader("FilePath");
String businessFileName = "10";
String businessFileName = request.getHeader("FilePath");
// 上传文件路径
String filePath = RuoYiConfig.getUploadPath()+businessFileName+"/";
// 上传并返回文件全路径
......
......@@ -27,6 +27,24 @@ public class BusinessFollowRecordController extends BaseController
/**
* 查询关联项目
*/
@GetMapping("/relate/project/{userId}")
public AjaxResult selectRelateProject(@PathVariable("userId") Integer userId)
{
return success(businessFollowRecordService.selectRelateProject(userId));
}
/**
* 查询关联业主企业
*/
@GetMapping("/relate/company/{userId}")
public AjaxResult selectRelateCompany(@PathVariable("userId") Integer userId)
{
return success(businessFollowRecordService.selectRelateCompany(userId));
}
/**
* 新增项目跟进记录
*/
......
......@@ -117,4 +117,10 @@ public class EnterpriseController {
return enterpriseService.uipGroupData();
}
@ApiOperation(value = "建设库企业id解码)")
@PostMapping(value = "remark")
public R remark(@RequestBody @Valid EnterpriseRemarkBody vo) throws Exception {
return enterpriseService.remark(vo);
}
}
......@@ -115,13 +115,13 @@ public class EnterpriseProjectController {
@ApiOperation(value = "招标计划列表")
@RequestMapping(value = "/bidPlanPage",method = RequestMethod.POST)
public TableDataInfo bidPlanPage(@RequestBody @Valid Object body) throws Exception {
public TableDataInfo bidPlanPage(@RequestBody @Valid EnterpriseProjectBidPlanPageBody body) throws Exception {
return enterpriseProjectService.bidPlanPage(body);
}
@ApiOperation(value = "招标计划详情")
@RequestMapping(value = "/bidPlanDetail", method = RequestMethod.POST)
public R bidPlanDetail(@RequestBody @Valid Object body) throws Exception {
public R bidPlanDetail(@RequestBody @Valid EnterpriseProjectBidPlanDetailBody body) throws Exception {
return enterpriseProjectService.bidPlanDetail(body);
}
......
......@@ -40,7 +40,7 @@ public class CompanySearchController {
/*
* 完全匹配企业名称
*/
@GetMapping("/page")
@PostMapping("/page")
public AjaxResult page(@RequestBody ComposeQueryDto 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,9 +3,11 @@ package com.dsk.web.controller.search.macroMarket;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.*;
import com.dsk.system.service.EconomicService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
......@@ -16,6 +18,7 @@ import javax.validation.Valid;
* @Date 2023/5/18 10:09
* @Version 1.0.0
*/
@Slf4j
@RestController
@RequestMapping(value ="/economic")
public class RegionalEconomicDataController {
......@@ -60,6 +63,21 @@ public class RegionalEconomicDataController {
return economicService.details(detailsDto);
}
/***
*@Description: 获取当前地区
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:29
*/
@PostMapping(value = "location")
public AjaxResult location(@RequestBody OpRegionalLocalDto vo, HttpServletRequest request){
String ip = IpUtil.getIpAddr(request);
vo.setIp(ip);
log.info("location====================================>" +ip);
return economicService.location(vo);
}
/***
*@Description: 地区经济-统计
......@@ -85,5 +103,16 @@ public class RegionalEconomicDataController {
return economicService.regionalList(dto);
}
/***
*@Description: 地区经济
*@Param:
*@return: com.dsk.acc.security.common.msg.RestResponse
*@Author: Dgm
*@date: 2023/5/18 10:29
*/
@PostMapping("/regional/compare")
public AjaxResult regionalCompare(@RequestBody OpRegionalEconomicDataStatisticsRegionalDto dto) {
return economicService.regionalCompare(dto);
}
}
package com.dsk.common.core.domain.entity;
import lombok.Data;
/**
* @author lxl
* @Description:
* @Date 2023/6/7 上午 11:05
**/
@Data
public class BusinessFileVo {
private String filePath;
private String creatTime;
public BusinessFileVo(String filePath, String creatTime) {
this.filePath = filePath;
this.creatTime = creatTime;
}
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Data
@ToString
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseProjectBidPlanDetailBody {
/**
* id
*/
@NotNull(message = "id不能为空")
private String id;
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@ToString
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseProjectBidPlanPageBody extends BasePage {
/**
* 企业id
*/
@NotNull(message = "企业id不能为空")
private Integer cid;
/**
* 查询关键字
*/
private String keys;
/*
* 排序字段:1金额倒序,2金额正序,3发布时间倒序,4发布时间正序,15预计招标时间倒序,16预计招标时间正序
*/
@NotNull(message = "排序条件不能为空")
private Integer sort;
}
package com.dsk.common.core.domain.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseRemarkBody {
@NotNull(message = "解码值不能为空")
public String mark;
}
......@@ -41,6 +41,11 @@ public class EnterpriseUipSearchBody extends BasePage {
*/
private List<Integer> areaIds;
/**
* 行政级别
*/
private List<String> uipExecutiveLevel;
/**
* 城投业务类型
*/
......
package com.dsk.common.dtos;
import lombok.Data;
/**
* @ClassName OpRegionalLocalDto
* @Description 获取当前地区
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class OpRegionalLocalDto {
/**
* 省Id
*/
private Integer provinceId;
private String ip;
}
package com.dsk.common.utils;
import java.util.HashMap;
public class EncodeIdUtil {
private static String table = "VyB2Kz79QWYjpiD5lRCIMwJEhqFSx0GN1cveZfU4gs6rk8dPbLtAomOnT3";
private static HashMap<String, Integer> mp = new HashMap<>();
private static HashMap<Integer, String> mp2 = new HashMap<>();
static int[] ss = {2, 7, 5, 1, 4, 8, 3, 0, 6};
static long xor = 177451812;
static long add = 8728348608L;
/**
* 解码
* @param s 编码的随机字符串
* @return 原自增ID
*/
public static String avDecode(String s) {
long r = 0;
for (int i = 0; i < table.length(); i++) {
String s1 = table.substring(i, i + 1);
mp.put(s1, i);
}
for (int i = 0; i < 9; i++) {
r = r + mp.get(s.substring(ss[i], ss[i] + 1)) * power(58, i);
}
return String.valueOf((r - add) ^ xor);
}
/**
* 编码
* @param st 原自增ID
* @return 编码后的随机字符串
*/
public static String bvEncode(String st) {
StringBuilder sb = new StringBuilder(" ");
long s = Long.parseLong(st);
s = (s ^ xor) + add;
for (int i = 0; i < table.length(); i++) {
String s1 = table.substring(i, i + 1);
mp2.put(i, s1);
}
// mp2.forEach((inx, str) -> System.out.print(str));
for (int i = 0; i < 9; i++) {
String r = mp2.get((int) (s / power(table.length(), i) % table.length()));
sb.replace(ss[i], ss[i] + 1, r);
}
return sb.toString();
}
private static long power(int a, int b) {
long power = 1;
for (int c = 0; c < b; c++)
power *= a;
return power;
}
/**
* 把unicode编码转换成正常字符
*
* @param hex
* @return
*/
public static String binaryToUnicode(String hex) {
int i;
int n;
int j;
n = hex.length() / 2;
j = 0;
char[] content = new char[n];
for (i = 0; i < n; i++) {
j = i * 2;
content[i] = (char) Integer.parseInt(hex.substring(j, j + 2), 16);
}
return new String(content);
}
/**
* 把字符转换成unicode编码
*
* @param content
* @return
*/
public static String unicodeToBinary(String content) {
String hexStr = "";
char[] contentBuffer = content.toCharArray();
String s;
int n;
for (int i = 0; i < content.length(); i++) {
n = (int) contentBuffer[i];
s = Integer.toHexString(n);
// if (s.length() > 4) {
// s = s.substring(0, 4);
// } else {
// s = "0000".substring(0, 4 - s.length()) + s;
// }
hexStr = hexStr + s;
}
return hexStr;
}
}
package com.dsk.framework.config;
import com.dsk.framework.config.properties.PermitAllUrlProperties;
import com.dsk.framework.security.filter.JwtAuthenticationTokenFilter;
import com.dsk.framework.security.handle.AuthenticationEntryPointImpl;
import com.dsk.framework.security.handle.LogoutSuccessHandlerImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpMethod;
......@@ -16,9 +19,6 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.security.web.authentication.logout.LogoutFilter;
import org.springframework.web.filter.CorsFilter;
import com.dsk.framework.security.filter.JwtAuthenticationTokenFilter;
import com.dsk.framework.security.handle.AuthenticationEntryPointImpl;
import com.dsk.framework.security.handle.LogoutSuccessHandlerImpl;
/**
* spring security配置
......@@ -111,10 +111,11 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
// 过滤请求
.authorizeRequests()
// 对于登录login 注册register 验证码captchaImage 允许匿名访问
.antMatchers("/login", "/register", "/captchaImage","/economic/**","/enterprises/**","/specialPurposeBonds/**","/urbanInvestment/**").permitAll()
.antMatchers("/login", "/register", "/captchaImage","/economic/**","/enterprises/**","/specialPurposeBonds/**","/urbanInvestment/**","/enterprise/**").permitAll()
// 静态资源,可匿名访问
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
.antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
// .antMatchers("/business/**").permitAll()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated()
.and()
......
......@@ -3,7 +3,7 @@ import request from '@/utils/request'
// id解密
export const idRemark = (data) => {
return request({
url: '/user/jsk/change/remark',
url: '/enterprise/remark',
method: 'post',
data: data
})
......
import request from "@/utils/request";
// 企业头部信息
// 甲方详情-公司概要
export function infoHeader(data) {
return request({
url: '/api-module-data/enterprise/infoHeader',
url: '/enterprise/infoHeader',
method: 'post',
data: data
})
......
......@@ -54,24 +54,6 @@ export function approvalProjectPage(data) {
})
}
// 拟建项目立项审批列表
export function approvalExaminePage(data) {
return request({
url: '/enterpriseProject/approvalExaminePage',
method: 'post',
data: data
})
}
// 拟建项目民间推介列表
export function approvalMarketingPage(data) {
return request({
url: '/enterpriseProject/approvalMarketingPage',
method: 'post',
data: data
})
}
// 标讯PRO招标公告列表
export function bidNoticeProPage(data) {
return request({
......@@ -126,10 +108,10 @@ export function specialDebtProjectPage(data) {
})
}
// 专项债列表
export function specialDebtPage(data) {
// 招标计划列表
export function bidPlanPage(data) {
return request({
url: '/enterpriseProject/specialDebtPage',
url: '/enterpriseProject/bidPlanPage',
method: 'post',
data: data
})
......
import request from "@/utils/request";
// 甲方详情-公司概要
export function infoHeader(data) {
return request({
url: '/enterprise/infoHeader',
method: 'post',
data: data
})
}
// 企业数据统计
export function statistic(data) {
return request({
......
......@@ -108,9 +108,8 @@ export function addGJJL(param) {
//删除跟进记录
export function delGJJL(param) {
return request({
url: '/business/record/remove/',
url: '/business/record/remove/'+param,
method: 'DELETE',
params:param
})
}
......@@ -183,3 +182,20 @@ export function delZLWD(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 @@
}
}
.el-input__prefix{
left: 8px;
.el-input__prefix .el-input__icon{
//left: 8px;
top: -2px;
position: absolute;
}
......@@ -869,6 +869,7 @@
.img{
float: left;
margin-right: 8px;
margin-top: -2px;
}
}
}
......
......@@ -62,11 +62,25 @@ export default {
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) {
const resText = await data.text();
const rspObj = JSON.parse(resText);
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
Message.error(errMsg);
}
},
}
......@@ -5,12 +5,12 @@ import { parseTime } from './ruoyi'
*/
export function formatDate(cellValue) {
if (cellValue == null || cellValue == "") return "";
var date = new Date(cellValue)
var date = new Date(cellValue)
var year = date.getFullYear()
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds
}
......@@ -330,7 +330,7 @@ export function makeMap(str, expectsLowerCase) {
? val => map[val.toLowerCase()]
: val => map[val]
}
export const exportDefault = 'export default '
export const beautifierConf = {
......@@ -387,4 +387,4 @@ export function camelCase(str) {
export function isNumberStr(str) {
return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str)
}
......@@ -35,8 +35,8 @@
<!-- 输入框 -->
<template v-if="form.type==3">
<div class="cooperate-name">
<el-input v-model="form.value" :placeholder="form.placeholder"></el-input>
<span @click="changeSelect">搜索</span>
<el-input @focus="clickFocus('focus'+i)" @blur="clickFocus('focus'+i)" v-model="form.value" :placeholder="form.placeholder"></el-input>
<span :id="'focus'+i" @click="changeSelect">搜索</span>
</div>
</template>
<!-- 多选 -->
......@@ -70,6 +70,18 @@
:placeholder="form.placeholder"
@handle-search="changeSelect" />
</template>
<!-- 地区选择 -->
<template v-else-if="form.type==7">
<el-cascader
:options="form.options"
:props="form.props"
v-model="form.value"
@change="changeSelect"
:placeholder="form.placeholder"
collapse-tags
style="margin-top: -1px;"
clearable></el-cascader>
</template>
<!-- 自定义 -->
<template v-if="form.type==0">
<slot name="slot"></slot>
......@@ -143,6 +155,9 @@ export default {
message: '功能正在开发中',
type: 'warning'
});
},
clickFocus(e){
document.getElementById(e).classList.toggle('span-ba')
}
}
}
......@@ -165,6 +180,22 @@ export default {
::v-deep .el-input--medium .el-input__icon{
line-height: 32px;
}
::v-deep .el-cascader{
height: 32px;
line-height: 32px;
.el-input{
input{
height: 32px !important;
}
}
.el-cascader__tags{
flex-wrap: inherit;
margin-top: 1px;
.el-tag{
max-width: 120px;
}
}
}
.headForm-from {
display: flex;
.from-item{
......@@ -186,13 +217,18 @@ export default {
border-left: 0;
cursor: pointer;
}
.span-ba{
color: #ffffff;
background: #0081FF;
border: 1px solid #0081FF;
}
::v-deep .el-input{
flex: 1;
}
::v-deep .el-input__inner {
border-right: 0;
border-radius: 2px 0 2px 0;
width: 259px;
width: 180px;
}
}
.fromTime{
......
......@@ -17,7 +17,10 @@
</template>
<el-menu-item :index="index+'-'+idx" v-for="(it, idx) in item.children" :key="idx" @click="handleItem(it)" :disabled="it.disabled">{{it.title}}</el-menu-item>
</el-submenu>
<el-menu-item :index="index.toString()" @click="handleItem(item)" :disabled="item.disabled" v-else>{{item.title}}</el-menu-item>
<template v-else>
<el-menu-item :index="index.toString()" @click="handleItem(item)" :disabled="item.disabled" v-if="isCustomerId(item.pathName)">{{item.title}}</el-menu-item>
</template>
</template>
</el-menu>
</div>
......@@ -35,6 +38,10 @@ export default {
type: String,
default: null
},
customerId: {
type: String,
default: ''
}
},
data() {
return {
......@@ -78,14 +85,20 @@ export default {
{title: '裁判文书', pathName: 'judgment'},
{title: '法院公告', pathName: 'courtNotice'},
{title: '开庭公告', pathName: 'openacourtsessionNotice'},
{title: '信用中国', pathName: ''}
// {title: '信用中国', pathName: ''}
]},
// {title: '商务信息', pathName: 'business'},
{title: '招标偏好', pathName: 'preference'},
{title: '合作情况', pathName: 'cooperate'},
{title: '决策链条', pathName: 'decisionMaking'},
{title: '跟进记录', pathName: 'gjjl'}
]
],
customer:[
'preference',
'cooperate',
'decisionMaking',
'gjjl'
],
}
},
computed: {
......@@ -127,6 +140,15 @@ export default {
},
handleSearch(){
console.log('开始搜索了')
},
isCustomerId(name){
if(this.customer.indexOf(name) != -1){
if(this.customerId){
return true
}
return false
}
return true
}
}
}
......
......@@ -8,7 +8,7 @@
border
fit
highlight-current-row
:default-sort = 'defaultSort'
:default-sort = "defaultSort?defaultSort:{}"
@sort-change="sortChange"
>
<el-table-column
......@@ -30,15 +30,33 @@
:fixed="item.fixed"
:sortable="item.sortable ? 'custom' : false"
:resizable="false">
<template v-if="item.slotHeader" slot="header">
<slot :name="item.slotName"></slot>
</template>
<template slot-scope="scope">
<slot v-if="item.slot" :name="item.prop" :row="scope.row" :index="scope.$index" :data="item"></slot>
<span v-else>
<template v-if="item.children&&item.children.length">
<el-table-column
v-for="(cld, i) in item.children"
:key="i"
:prop="cld.prop"
:label="cld.label"
:width="cld.width"
:resizable="false">
<template slot-scope="cldscope">
<template v-if="cld.slot">
<slot :name="cld.prop" :row="cldscope.row" :data="cld"></slot>
</template>
<template v-else>
<span>{{cldscope.row[cld.prop] || '--'}}</span>
</template>
</template>
</el-table-column>
</template>
<template v-else-if="item.slotHeader" slot="header">
<slot :name="item.slotName"></slot>
</template>
<template slot-scope="scope">
<slot v-if="item.slot" :name="item.prop" :row="scope.row" :index="scope.$index" :data="item"></slot>
<span v-else>
{{ scope.row[item.prop] || '--' }}
</span>
</template>
</template>
</el-table-column>
</template>
......@@ -51,6 +69,7 @@
</template>
<script>
import { tabFixed } from '@/utils'
export default {
name: "Tables",
props: {
......@@ -114,7 +133,7 @@ export default {
::v-deep .el-table__body tr.current-row > td.el-table__cell{
background-color: #ffffff;
}
::v-deep .el-table__fixed{
/*::v-deep .el-table__fixed{
height: calc(100% - 16px) !important;
}
}*/
</style>
<template>
<div class="cooperate">
<div>
<template v-if="ifEmpty">
<head-form
:form-data="formData"
:query-params="queryParams"
:total="tableDataTotal"
:isExcel="true"
:slots="true"
@handle-search="handleSearch"
>
<template slot="slot">
<div class="flex-box query-add">
<el-button type="primary" icon="el-icon-plus" @click="drawer = true">添加商务信息</el-button>
</div>
</template>
</head-form>
<tables
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
>
<template slot="projcetName" slot-scope="scope">
{{scope}}
<!-- <router-link :to="'' + scope.row.dictId" class="link-type">-->
<!-- <span>{{ scope.row.dictType }}</span>-->
<!-- </router-link>-->
</template>
</tables>
</template>
<template v-else>
<div class="cooperate_empty">
<img src="@/assets/images/project/empty.png"/>
<div class="empty-t">暂无合作情况数据</div>
<div class="empty-d">抱歉,你还未合作情况数据,快去添加吧</div>
<el-button type="primary" class="empty-b" @click="drawer = true">添加合作情况</el-button>
</div>
</template>
<template v-if="!isDetailId">
<div class="cooperate">
<template v-if="ifEmpty">
<head-form
:form-data="formData"
:query-params="queryParams"
:total="tableDataTotal"
:isExcel="true"
:slots="true"
@handle-search="handleSearch"
>
<template slot="slot">
<div class="flex-box query-add">
<el-button type="primary" icon="el-icon-plus" @click="drawer = true">添加商务信息</el-button>
</div>
</template>
</head-form>
<!-- <Detail />-->
<tables
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
>
<template slot="projectName" slot-scope="scope">
<span class="link-type" @click="clickDetail(scope.row.id)">
{{ scope.row.projectName }}
</span>
</template>
</tables>
<!-- 弹窗关联项目 -->
<el-drawer
title="添加合作情况"
size="40%"
:visible.sync="drawer"
:direction="direction"
:with-header="false"
:before-close="handleClose">
<div class="cooperate_addhzqk">
<div class="addhzqk_top">
<div class="addhzqk_top_t">
<div class="top_t_h1">
<img src="@/assets/images/economies/icon.png" />{{ info.companyName }}
</div>
<div class="top_t_close"><i class="el-icon-close" @click="handleClose"></i></div>
</div>
<div class="addhzqk_top_d">
<div class="top_d_item">
法定代表人:<span>{{ info.legalPerson }}</span>
</div>
<div class="top_d_item">
注册资本:<span>{{ info.registerCapital }}万</span>
</div>
<div class="top_d_item">
注册地址:<span>{{ info.registerAddress }}</span>
</div>
</template>
<template v-else>
<div class="cooperate_empty">
<img src="@/assets/images/project/empty.png"/>
<div class="empty-t">暂无合作情况数据</div>
<div class="empty-d">抱歉,你还未合作情况数据,快去添加吧</div>
<el-button type="primary" class="empty-b" @click="drawer = true">添加合作情况</el-button>
</div>
</div>
<div class="addhzqk_from">
<el-form :model="addParam" :rules="rules" ref="addParam" size="small" label-width="126px">
<el-form-item label="项目名称:" prop="projectName">
<el-input v-model="addParam.projectName" placeholder="请输入项目名称" @input="getCompany1"></el-input>
<div class="resultlist" v-if="showlist1">
<div v-for="(item,index) in companData1" @click="selCompany1(item)"><span v-html="item"></span></div>
</template>
<!-- 弹窗关联项目 -->
<el-drawer
title="添加合作情况"
size="40%"
:visible.sync="drawer"
:direction="direction"
:with-header="false"
:before-close="handleClose">
<div class="cooperate_addhzqk">
<div class="addhzqk_top">
<div class="addhzqk_top_t">
<div class="top_t_h1">
<img src="@/assets/images/economies/icon.png" />{{ info.companyName }}
</div>
<div class="top_t_close"><i class="el-icon-close" @click="handleClose"></i></div>
</div>
</el-form-item>
<el-form-item label="业主单位:" prop="ownerCompany">
<el-input v-model="addParam.ownerCompany" placeholder="请输入业主单位" @input="getCompany"></el-input>
<div class="resultlist" v-if="showlist">
<div v-for="(item,index) in companData" @click="selCompany(item)"><span v-html="item.name"></span></div>
<div class="addhzqk_top_d">
<div class="top_d_item">
法定代表人:<span>{{ info.legalPerson }}</span>
</div>
<div class="top_d_item">
注册资本:<span>{{ info.registerCapital }}万</span>
</div>
<div class="top_d_item">
注册地址:<span>{{ info.registerAddress }}</span>
</div>
</div>
</el-form-item>
<el-form-item label="项目阶段:" prop="projectStage">
<el-select v-model="addParam.projectStage" style="width: 100%" class="form-content-width" placeholder="请选择项目状态">
<el-option v-for="(item, index) in projectStage" :key="index" :label="item.dictLabel" :value="item.dictValue" />
</el-select>
</el-form-item>
<el-form-item label="项目类型:" prop="projectType">
<el-select v-model="addParam.projectType" style="width: 100%" class="form-content-width" placeholder="请选择项目阶段">
<el-option v-for="(item, index) in projectType" :key="index" :label="item.dictLabel" :value="item.dictValue" />
</el-select>
</el-form-item>
<el-form-item label="项目类别:" prop="projectCategory">
<el-select v-model="addParam.projectCategory" style="width: 100%" class="form-content-width" placeholder="请选择项目阶段">
<el-option v-for="(item, index) in projectCategory" :key="index" :label="item.dictLabel" :value="item.dictValue" />
</el-select>
</el-form-item>
<el-form-item label="投资估算(万):" prop="investmentAmount">
<el-input v-model="addParam.investmentAmount" placeholder="请输入投资估算" @input="number"></el-input>
</el-form-item>
<el-form-item label="可见范围:" prop="isPrivate">
<el-select v-model="addParam.isPrivate" style="width: 100%" class="form-content-width" placeholder="请选择">
<el-option v-for="(item, index) in isPrivate" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item style="text-align: right;">
<el-button @click="handleClose">关闭</el-button>
<el-button type="primary" @click="submitForm">添加</el-button>
</el-form-item>
</div>
<div class="addhzqk_from">
<el-form :model="addParam" :rules="rules" ref="addParam" size="small" label-width="126px">
<el-form-item label="项目名称:" prop="projectName">
<el-input v-model="addParam.projectName" placeholder="请输入项目名称" @input="getCompany1"></el-input>
<div class="resultlist" v-if="showlist1">
<div v-for="(item,index) in companData1" @click="selCompany1(item)"><span v-html="item"></span></div>
</div>
</el-form-item>
<el-form-item label="业主单位:" prop="ownerCompany">
<el-input v-model="addParam.ownerCompany" placeholder="请输入业主单位" @input="getCompany"></el-input>
<div class="resultlist" v-if="showlist">
<div v-for="(item,index) in companData" @click="selCompany(item)"><span v-html="item.name"></span></div>
</div>
</el-form-item>
<el-form-item label="项目阶段:" prop="projectStage">
<el-select v-model="addParam.projectStage" style="width: 100%" class="form-content-width" placeholder="请选择项目状态">
<el-option v-for="(item, index) in projectStage" :key="index" :label="item.dictLabel" :value="item.dictValue" />
</el-select>
</el-form-item>
<el-form-item label="项目类型:" prop="projectType">
<el-select v-model="addParam.projectType" style="width: 100%" class="form-content-width" placeholder="请选择项目阶段">
<el-option v-for="(item, index) in projectType" :key="index" :label="item.dictLabel" :value="item.dictValue" />
</el-select>
</el-form-item>
<el-form-item label="项目类别:" prop="projectCategory">
<el-select v-model="addParam.projectCategory" style="width: 100%" class="form-content-width" placeholder="请选择项目阶段">
<el-option v-for="(item, index) in projectCategory" :key="index" :label="item.dictLabel" :value="item.dictValue" />
</el-select>
</el-form-item>
<el-form-item label="投资估算(万):" prop="investmentAmount">
<el-input v-model="addParam.investmentAmount" placeholder="请输入投资估算" @input="number"></el-input>
</el-form-item>
<el-form-item label="可见范围:" prop="isPrivate">
<el-select v-model="addParam.isPrivate" style="width: 100%" class="form-content-width" placeholder="请选择">
<el-option v-for="(item, index) in isPrivate" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item style="text-align: right;">
<el-button @click="handleClose">关闭</el-button>
<el-button type="primary" @click="submitForm">添加</el-button>
</el-form-item>
</el-form>
</div>
</el-form>
</div>
</div>
</el-drawer>
</div>
</el-drawer>
</template>
<div v-else class="cooperate-detail">
<Detail :detailId="detailId" @close-detail="closeDetail" />
</div>
</div>
</template>
......@@ -139,16 +143,22 @@ export default {
components: {
Detail
},
props: {
customerIds: {
type: String,
default: ''
}
},
data() {
return {
ifEmpty:false,
queryParams: {
customerId: 'f25219e73249eea0d9fddc5c7f04f97f',
customerId: this.customerIds,
pageNum: 1,
pageSize: 10
},
forData: [
{label: '项目名称', prop: 'projcetName'},
{label: '项目名称', prop: 'projectName', slot: true},
{label: '项目阶段', prop: 'projectStage', width: '120'},
{label: '投资金额(万元)', prop: 'investmentAmount', width: '140'},
{label: '项目状态', prop: 'status', width: '90'}
......@@ -208,7 +218,10 @@ export default {
}
],//可见访问
//客户详情
info: {}
info: {},
//
detailId: null,
isDetailId: false,
}
},
created() {
......@@ -273,7 +286,6 @@ export default {
this.addParam.customerId = this.queryParams.customerId
this.addParam.companyId = this.info.companyId
this.addParam.userId = this.info.userId
console.log(this.addParam)
addProject(this.addParam).then(result=>{
if(result.code == 200){
this.$message.success('添加成功!')
......@@ -346,7 +358,18 @@ export default {
//输入数字
number(value){
this.addParam.investmentAmount = value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g, '$1')//输入2位小数
},
//打开详情
clickDetail(id){
this.detailId = id
this.isDetailId = true
},
//关闭详情
closeDetail(){
this.isDetailId = false
this.detailId = ''
}
}
}
</script>
......@@ -497,4 +520,10 @@ export default {
}
}
::v-deep .cooperate-detail{
.miantitle, .app-container{
margin: 12px 0;
}
}
</style>
......@@ -55,7 +55,7 @@ export default {
cid: this.companyId,
sort: 3,
pageNum: 1,
pageSize: 10
pageSize: 20
},
defaultSort: {prop: 'issueTime', order: 'descending'},
forData: [
......
......@@ -45,7 +45,7 @@ export default {
queryParams: {
cid: this.companyId,
pageNum: 1,
pageSize: 10
pageSize: 20
},
forData: [
{label: '项目名称', prop: 'name', minWidth: '320', slot: true},
......
......@@ -70,7 +70,7 @@ export default {
tendereeId: this.data.tendereeId,
agencyId: this.data.agencyId,
pageNum: 1,
pageSize: 10
pageSize: 20
},
formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入合作项目/工程名称查询', options: []},
......
......@@ -76,7 +76,7 @@ export default {
cid: this.companyId,
unitId: this.data.projectUnitId,
pageNum: 1,
pageSize: 10
pageSize: 20
},
formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入项目/工程名称查询', options: []},
......
......@@ -76,7 +76,7 @@ export default {
cid: this.data.companyId,
unitId: this.companyId,
pageNum: 1,
pageSize: 10
pageSize: 20
},
formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入合作项目/工程名称查询', options: []},
......
......@@ -56,7 +56,7 @@ export default {
cid: this.companyId,
sort: 3,
pageNum: 1,
pageSize: 10
pageSize: 20
},
defaultSort: {prop: 'time', order: 'descending'},
forData: [
......
......@@ -48,7 +48,7 @@ export default {
cid: this.companyId,
sort: 3,
pageNum: 1,
pageSize: 10
pageSize: 20
},
defaultSort: {prop: 'winBidTime', order: 'descending'},
forData: [
......
......@@ -56,7 +56,7 @@ export default {
cid: this.companyId,
sort: 3,
pageNum: 1,
pageSize: 10
pageSize: 20
},
defaultSort: {prop: 'time', order: 'descending'},
forData: [
......
......@@ -81,11 +81,17 @@ export default {
components: {
Tables
},
props: {
customerIds: {
type: String,
default: ''
}
},
data() {
return {
ifEmpty:false,
queryParams:{
customerId:'f25219e73249eea0d9fddc5c7f04f97f',
customerId:this.customerIds,
pageNum:1,
pageSize:10,
},
......@@ -316,5 +322,8 @@ export default {
}
}
}
::v-deep .el-table__fixed::before, ::v-deep .el-table__fixed-right::before{
background-color:unset;
}
</style>
......@@ -3,10 +3,10 @@
<div class="financial-header">
<div class="common-title">财务简析</div>
<div class="flex-box header-box">
<div class="header-item">总资产<div class="header-item-amount"><span>9332.6</span>亿元</div><img src="@/assets/images/detail/financial/financial_header01_ico.png"></div>
<div class="header-item">净资产<div class="header-item-amount"><span>459.4</span>亿元</div><img src="@/assets/images/detail/financial/financial_header02_ico.png"></div>
<div class="header-item">营业收入<div class="header-item-amount"><span>150.0</span>亿元</div><img src="@/assets/images/detail/financial/financial_header03_ico.png"></div>
<div class="header-item">授信余额<div class="header-item-amount"><span>192.11</span>亿元</div><img src="@/assets/images/detail/financial/financial_header04_ico.png"></div>
<div class="header-item">总资产<div class="header-item-amount" v-if="financialDetail.totalAssets"><span>{{financialDetail.totalAssets || ''}}</span>亿元</div><img src="@/assets/images/detail/financial/financial_header01_ico.png"></div>
<div class="header-item">净资产<div class="header-item-amount" v-if="financialDetail.belongNetAssets"><span>{{financialDetail.belongNetAssets || ''}}</span>亿元</div><img src="@/assets/images/detail/financial/financial_header02_ico.png"></div>
<div class="header-item">营业收入<div class="header-item-amount" v-if="financialDetail.operatingIncome"><span>{{financialDetail.operatingIncome || ''}}</span>亿元</div><img src="@/assets/images/detail/financial/financial_header03_ico.png"></div>
<div class="header-item">授信余额<div class="header-item-amount" v-if="financialDetail.creditBalance"><span>{{financialDetail.creditBalance || ''}}</span>亿元</div><img src="@/assets/images/detail/financial/financial_header04_ico.png"></div>
</div>
</div>
<div class="financial-zcqk">
......@@ -14,7 +14,7 @@
<ul class="zcqk-list">
<li v-for="(item, index) in zcqkList" :key="index" :style="zcqkList.length==1?'border-right: 0;':''">
<div class="zcqk-list-box" :style="(parity(zcqkList) && index==zcqkList.length-2) || (index == zcqkList.length-1)?'border-bottom: 0':''">
<div class="flex-box zcqk-list-line"><span class="flex-box"><img :src="item.ico">{{item.name}}</span><span><i>{{item.amount}}</i>亿元</span></div>
<div class="flex-box zcqk-list-line"><span class="flex-box"><img :src="item.ico">{{item.name}}</span><span v-if="item.amount"><i>{{item.amount}}</i>亿元</span></div>
<div class="zcqk-list-intro">{{item.intro}}</div>
</div>
</li>
......@@ -25,8 +25,8 @@
<div class="flex-box zwqk-box">
<div class="zwqk-info">
<div class="zwqk-title">总负债</div>
<div class="zwqk-amount"><span>468.65</span>亿元</div>
<div class="zwqk-pro">资产负债率 50%</div>
<div class="zwqk-amount"><span>{{financialDetail.totalLiabilities || '0'}}</span>亿元</div>
<div class="zwqk-pro">资产负债率 {{financialDetail.tdr+'%' || '--'}}</div>
<img src="@/assets/images/detail/financial/zwqk_bg_ico.png">
</div>
<div id="myEcharts" style="width: 444px;height:250px; margin: 0 auto;"></div>
......@@ -34,8 +34,8 @@
<div class="flex-box zwqk-list">
<div class="list-item" v-for="(item, index) in zwqkList" :key="index">
<div class="flex-box list-item-all">{{item.name}}<img :src="item.ico"></div>
<div class="list-item-amount"><span>{{item.amount}}</span>{{item.unit}}</div>
<div class="list-item-pro">{{item.intro}}<span>{{item.introPro}}</span></div>
<div class="list-item-amount"><template v-if="item.amount"><span>{{item.amount}}</span>{{item.unit}}</template><template v-else>--</template></div>
<div class="list-item-pro">{{item.intro}}<span>{{item.introPro || '--'}}</span></div>
</div>
</div>
</div>
......@@ -44,7 +44,7 @@
<ul class="zcqk-list">
<li v-for="(item, index) in zjqkList" :key="index" :style="zjqkList.length==1?'border-right: 0;':''">
<div class="zcqk-list-box" :style="(parity(zjqkList) && index==zjqkList.length-2) || (index == zjqkList.length-1)?'border-bottom: 0':''">
<div class="flex-box zcqk-list-line"><span class="flex-box"><img :src="item.ico">{{item.name}}</span><span><i>{{item.amount}}</i>{{item.unit}}</span></div>
<div class="flex-box zcqk-list-line"><span class="flex-box"><img :src="item.ico">{{item.name}}</span><span v-if="item.amount"><i>{{item.amount}}</i>{{item.unit}}</span></div>
<div class="zcqk-list-intro">{{item.intro}}</div>
</div>
</li>
......@@ -54,41 +54,42 @@
</template>
<script>
import { getList } from '@/api/detail/party-a/financial'
import { financial } from '@/api/detail/party-a/financial'
import * as echarts from 'echarts'
export default {
name: 'Financial',
props: ['companyId'],
data() {
return {
financialDetail: {},
// 资产情况
zcqkList: [
{ name: '总资产', ico: require('@/assets/images/detail/financial/zcqk_ico1.png'), intro: '总资产越大,表示企业规模越大', amount: '99213', unit: '亿元'},
{ name: '净资产', ico: require('@/assets/images/detail/financial/zcqk_ico2.png'), intro: '该指标越大说明企业实力越强', amount: '99213', unit: '亿元'},
{ name: '货币资金', ico: require('@/assets/images/detail/financial/zcqk_ico3.png'), intro: '该指标越大说明企业越有活力、越有保障', amount: '99213', unit: '亿元'},
{ name: '应收账款', ico: require('@/assets/images/detail/financial/zcqk_ico4.png'), intro: '该指标越大说明企业实力越强', amount: '99213', unit: '亿元'},
{ name: '土地资产', ico: require('@/assets/images/detail/financial/zcqk_ico5.png'), intro: '该指标越大说明企业越有实力,但需要关注抵押情况', amount: '99213', unit: '亿元'},
{ name: '其它应收款', ico: require('@/assets/images/detail/financial/zcqk_ico6.png'), intro: '该指标越大说明企业实力越强', amount: '99213', unit: '亿元'},
{ name: '受限资产', ico: require('@/assets/images/detail/financial/zcqk_ico7.png'), intro: '该指标越大,资产流动性越差', amount: '99213', unit: '亿元'},
{ name: '应收类款项来自政府占比', ico: require('@/assets/images/detail/financial/zcqk_ico8.png'), intro: '该指标越大,说明企业资质及信用越好', amount: '99213', unit: '亿元'},
{ name: '政府补助', ico: require('@/assets/images/detail/financial/zcqk_ico9.png'), intro: '该指标越大,说明企业越被政府看好与扶持', amount: '99213', unit: '亿元'}
{ name: '总资产', ico: require('@/assets/images/detail/financial/zcqk_ico1.png'), intro: '总资产越大,表示企业规模越大', amount: '', unit: '亿元'},
{ name: '净资产', ico: require('@/assets/images/detail/financial/zcqk_ico2.png'), intro: '该指标越大说明企业实力越强', amount: '', unit: '亿元'},
{ name: '货币资金', ico: require('@/assets/images/detail/financial/zcqk_ico3.png'), intro: '该指标越大说明企业越有活力、越有保障', amount: '', unit: '亿元'},
{ name: '应收账款', ico: require('@/assets/images/detail/financial/zcqk_ico4.png'), intro: '该指标越大说明企业实力越强', amount: '', unit: '亿元'},
{ name: '土地资产', ico: require('@/assets/images/detail/financial/zcqk_ico5.png'), intro: '该指标越大说明企业越有实力,但需要关注抵押情况', amount: '', unit: '亿元'},
{ name: '其它应收款', ico: require('@/assets/images/detail/financial/zcqk_ico6.png'), intro: '该指标越大说明企业实力越强', amount: '', unit: '亿元'},
{ name: '受限资产', ico: require('@/assets/images/detail/financial/zcqk_ico7.png'), intro: '该指标越大,资产流动性越差', amount: '', unit: '亿元'},
{ name: '应收类款项来自政府占比', ico: require('@/assets/images/detail/financial/zcqk_ico8.png'), intro: '该指标越大,说明企业资质及信用越好', amount: '', unit: '%'},
{ name: '政府补助', ico: require('@/assets/images/detail/financial/zcqk_ico9.png'), intro: '该指标越大,说明企业越被政府看好与扶持', amount: '', unit: '亿元'}
],
// 负债情况及偿债能力
zwqkList: [
{ name: '借款总额', ico: require('@/assets/images/detail/financial/zwqk_ico1.png'), intro: '借款/有息债务', introPro: '95.19%', amount: '1699.7', unit: '亿元'},
{ name: '债券余额', ico: require('@/assets/images/detail/financial/zwqk_ico2.png'), intro: '债券余额/有息债务', introPro: '95.19%', amount: '1699.7', unit: '亿元'},
{ name: '非标余额', ico: require('@/assets/images/detail/financial/zwqk_ico3.png'), intro: '非标余额/有息债务', introPro: '95.19%', amount: '1699.7', unit: '亿元'},
{ name: '对外担保金额', ico: require('@/assets/images/detail/financial/zwqk_ico4.png'), intro: '对外担保比例', introPro: '95.19%', amount: '1699.7', unit: '亿元'}
{ name: '借款总额', ico: require('@/assets/images/detail/financial/zwqk_ico1.png'), intro: '借款/有息债务', introPro: '', amount: '', unit: '亿元'},
{ name: '债券余额', ico: require('@/assets/images/detail/financial/zwqk_ico2.png'), intro: '债券余额/有息债务', introPro: '', amount: '', unit: '亿元'},
{ name: '非标余额', ico: require('@/assets/images/detail/financial/zwqk_ico3.png'), intro: '非标余额/有息债务', introPro: '', amount: '', unit: '亿元'},
{ name: '对外担保金额', ico: require('@/assets/images/detail/financial/zwqk_ico4.png'), intro: '对外担保比例', introPro: '', amount: '', unit: '亿元'}
],
echartsData: [],
// 资金情况
zjqkList: [
{ name: '经营现金流', ico: require('@/assets/images/detail/financial/zjqk_ico1.png'), intro: '该指标越高,说明经营活动的造血能力越强', amount: '99213', unit: '亿元'},
{ name: '现金比率', ico: require('@/assets/images/detail/financial/zjqk_ico2.png'), intro: '该指标越高,风险越低', amount: '0.8', unit: '%'},
{ name: '筹资现金流', ico: require('@/assets/images/detail/financial/zjqk_ico3.png'), intro: '该指标越高,说明负债越高', amount: '99213', unit: '亿元'},
{ name: '现金流量比率', ico: require('@/assets/images/detail/financial/zjqk_ico4.png'), intro: '该指标越高,风险越低', amount: '0.8', unit: '%'},
{ name: '投资现金流', ico: require('@/assets/images/detail/financial/zjqk_ico5.png'), intro: '该指标越高,说明投资带来的收益越高', amount: '99213', unit: '亿元'},
{ name: '现金到期债务比', ico: require('@/assets/images/detail/financial/zjqk_ico6.png'), intro: '该指标越高,风险越低', amount: '0.8', unit: '%'}
{ name: '经营现金流', ico: require('@/assets/images/detail/financial/zjqk_ico1.png'), intro: '该指标越高,说明经营活动的造血能力越强', amount: '', unit: '亿元'},
{ name: '现金比率', ico: require('@/assets/images/detail/financial/zjqk_ico2.png'), intro: '该指标越高,风险越低', amount: '', unit: '%'},
{ name: '筹资现金流', ico: require('@/assets/images/detail/financial/zjqk_ico3.png'), intro: '该指标越高,说明负债越高', amount: '', unit: '亿元'},
{ name: '现金流量比率', ico: require('@/assets/images/detail/financial/zjqk_ico4.png'), intro: '该指标越高,风险越低', amount: '', unit: '%'},
{ name: '投资现金流', ico: require('@/assets/images/detail/financial/zjqk_ico5.png'), intro: '该指标越高,说明投资带来的收益越高', amount: '', unit: '亿元'},
{ name: '现金到期债务比', ico: require('@/assets/images/detail/financial/zjqk_ico6.png'), intro: '该指标越高,风险越低', amount: '', unit: '%'}
]
}
},
......@@ -112,19 +113,42 @@ export default {
this.handleQuery()
},
methods: {
handleQuery() {
let param = {}
getList(param).then((res) => {
async handleQuery() {
this.tableLoading = true
let res = await financial({cid:this.companyId})
this.tableLoading = false
if(res.code==200){
this.financialDetail = res.data
//资产情况
let { totalAssets, belongNetAssets, monetaryFunds, accountsReceivable, landAssets, otherReceivable, restrictedAssets, receivableFromGovRatio, govSubsidy } = this.financialDetail
let zcqkObj = { totalAssets, belongNetAssets, monetaryFunds, accountsReceivable, landAssets, otherReceivable, restrictedAssets, receivableFromGovRatio, govSubsidy }
this.zcqkList.forEach((item, index) => {
item.amount = zcqkObj[Object.keys(zcqkObj)[index]]
})
//负债情况及偿债能力
let { loan, econData_006, bondBalance, econData_005, nonStandardBalance, nonStandardRatio, guaranteeAmount, guaranteeRatio } = this.financialDetail
let zwAmountObj = { loan, bondBalance, nonStandardBalance, guaranteeAmount }
let zwPercentObj = { econData_006, econData_005, nonStandardRatio, guaranteeRatio }
this.zwqkList.forEach((item, index) => {
item.amount = zwAmountObj[Object.keys(zwAmountObj)[index]]
item.introPro = zwPercentObj[Object.keys(zwPercentObj)[index]]?zwPercentObj[Object.keys(zwPercentObj)[index]]+'%':''
})
//资金情况
let { netOperatingCashFlow, cashRatio, netFinancingCashFlow, cashFlowRatio, netInvestmentCashFlow, cashDebtRatio } = this.financialDetail
let zjqkObj = { netOperatingCashFlow, cashRatio, netFinancingCashFlow, cashFlowRatio, netInvestmentCashFlow, cashDebtRatio }
this.zjqkList.forEach((item, index) => {
item.amount = zjqkObj[Object.keys(zjqkObj)[index]]
})
this.echartsData = [
{ value: 1048, name: '有息债务' },
{ value: 735, name: '有息债务/总债务' },
{ value: 580, name: '综合融资成本' },
{ value: 484, name: 'EBITDA保障倍数' }
{ value: res.data.uipInterestBearingDebt, name: '有息债务' },
{ value: res.data.econData_002, name: '有息债务/总债务' },
{ value: res.data.ofcb, name: '综合融资成本' },
{ value: res.data.ebitdaIcr, name: 'EBITDA保障倍数' }
]
this.$nextTick(() => {
this.getEcharts()
})
})
}
},
getEcharts(){
let myChart = echarts.init(document.getElementById("myEcharts"));
......@@ -413,6 +437,7 @@ export default {
justify-content: space-between;
}
.list-item-amount{
height: 39px;
padding-top: 11px;
span{
font-size: 24px;
......
......@@ -3,7 +3,7 @@
<Header :company-id="companyId" v-if="companyId" />
<div class="flex-box part-main">
<div class="part-left">
<side-bar @currentPath="showPartPage" :pathName="currentPath.pathName" :partBoxHeight="partBoxHeight" />
<side-bar @currentPath="showPartPage" :pathName="currentPath.pathName" :partBoxHeight="partBoxHeight" :customerId="customerId" />
</div>
<div class="part-right">
<div id="partBox" v-if="companyId">
......@@ -42,14 +42,17 @@
<Judgment v-if="currentPath.pathName=='judgment'" :company-id="companyId" />
<CourtNotice v-if="currentPath.pathName=='courtNotice'" :company-id="companyId" />
<OpenacourtsessionNotice v-if="currentPath.pathName=='openacourtsessionNotice'" :company-id="companyId" />
<!-- 招标偏好 -->
<Preference v-if="currentPath.pathName=='preference'" :company-id="companyId" />
<!-- 合作情况 -->
<Cooperate v-if="currentPath.pathName=='cooperate'" :company-id="companyId" />
<!-- 决策链条 -->
<DecisionMaking v-if="currentPath.pathName=='decisionMaking'" :company-id="companyId" />
<!-- 跟进记录 -->
<Gjjl v-if="currentPath.pathName=='gjjl'" :company-id="companyId" />
<template v-if="customerId">
<!-- 招标偏好 -->
<Preference v-if="currentPath.pathName=='preference'" :customer-ids="customerId" />
<!-- 合作情况 -->
<Cooperate v-if="currentPath.pathName=='cooperate'" :customer-ids="customerId" />
<!-- 决策链条 -->
<DecisionMaking v-if="currentPath.pathName=='decisionMaking'" :customer-ids="customerId" />
<!-- 跟进记录 -->
<Gjjl v-if="currentPath.pathName=='gjjl'" types="gjdt" :customer-ids="customerId" />
</template>
</div>
</div>
</div>
......@@ -58,6 +61,7 @@
<script>
import { idRemark } from '@/api/common'
import { infoHeader } from '@/api/detail/party-a/index'
import elementResizeDetectorMaker from "element-resize-detector"
import Header from "./component/Header"
import SideBar from "./component/Sidebar"
......@@ -137,7 +141,9 @@ export default {
},
data() {
return {
companyId: 3068, //企业Id(测试默认3068)
companyInfo: {},
companyId: 10361319, //企业Id(测试默认3068)
customerId: '', //企业Id(测试默认'a00d582a6041f32c16aac804e4924736')
currentPath: {
pathName: 'overview' //默认展示页
},
......@@ -152,6 +158,9 @@ export default {
if (this.$route.query.path) { // 获取跳转对应板块
this.currentPath.pathName = this.$route.query.path
}
if (this.$route.query.customerId) { // 判断是否显示
this.customerId = this.$route.query.customerId
}
},
mounted() {
const _this = this, erd = elementResizeDetectorMaker(), partBox = document.getElementById("partBox")
......@@ -170,6 +179,13 @@ export default {
let { data } = await idRemark({companyId})
if( data.code == 200){
this.companyId = data.data
this.handleQuery()
}
},
async handleQuery() {
let res = await infoHeader({companyId:this.companyId})
if(res.code==200){
this.companyInfo = res.data
}
}
}
......
......@@ -24,7 +24,7 @@ export default {
let condtion = {}
let reqData = {}
this.formData.forEach(item => {
if(item.value || (item.value && item.value.length)) {
if(item.value || (item.value && item.value.length) || item.value===0) {
if(item.fieldName == 'time') {
condtion[item.startTime] = item.value[0];
condtion[item.endTime] = item.value[1];
......@@ -39,7 +39,7 @@ export default {
}
})
Object.keys(condtion).forEach(key => {
if(condtion[key]) {
if(condtion[key] || condtion[key]===0) {
if(Array.isArray(condtion[key]) && condtion[key].length == 0){
delete condtion[key]
}
......
......@@ -17,10 +17,10 @@
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
>
<template slot="porjectName" slot-scope="scope">
<span :class="[isOverHiddenFlag(scope.data.width, showList, scope.index, 0, scope.row.porjectName)?'cell-span':'']" :style="{'-webkit-line-clamp': 2}">
{{ scope.row.porjectName }}
<span v-if="isOverHiddenFlag(scope.data.width, showList, scope.index, 0, scope.row.porjectName)" @click="changeShowAll(scope.index, 0)">...<span style="color: #0081FF;">展开</span></span>
<template slot="content" slot-scope="scope">
<span :class="[isOverHiddenFlag(scope.data.width, showList, scope.index, 0, scope.row.content)?'cell-span':'']" :style="{'-webkit-line-clamp': 2}">
{{ scope.row.content }}
<span v-if="isOverHiddenFlag(scope.data.width, showList, scope.index, 0, scope.row.content)" @click="changeShowAll(scope.index, 0)">...<span style="color: #0081FF;">展开</span></span>
</span>
</template>
</tables>
......@@ -30,7 +30,7 @@
<script>
import mixin from '../mixins/mixin'
import { getList } from '@/api/detail/party-a/opport'
import {creditXzxkPage} from '@/api/detail/party-a/opport'
export default {
name: 'Administrative',
props: ['companyId'],
......@@ -42,22 +42,22 @@ export default {
queryParams: {
cid: this.companyId,
pageNum: 1,
pageSize: 10
pageSize: 20
},
forData: [
{label: '许可决定日期', prop: 'use', width: '100'},
{label: '决定文书号', prop: 'type', width: '200'},
{label: '许可编号', prop: 'type', width: '80'},
{label: '决定文书名称', prop: 'type', width: '190'},
{label: '许可内容', prop: 'porjectName', width: '300', slot: true},
{label: '有效期自', prop: 'type', width: '100'},
{label: '有效期至', prop: 'type', width: '100'},
{label: '行政许可类别', prop: 'type', width: '100'},
{label: '许可机关', prop: 'type', width: '180'},
{label: '行政许可机关统一社会信用代码', prop: 'type', width: '200'},
{label: '数据来源单位', prop: 'type', width: '110'},
{label: '数据来源单位统一社会信用代码', prop: 'type', width: '200'},
{label: '来源', prop: 'type', width: '80'}
{label: '许可决定日期', prop: 'deciTime', width: '100'},
{label: '决定文书号', prop: 'deciWritNo', width: '200'},
{label: '许可编号', prop: 'permitNo', width: '100'},
{label: '决定文书名称', prop: 'deciWritName', width: '190'},
{label: '许可内容', prop: 'content', width: '300', slot: true},
{label: '有效期自', prop: 'valiBegin', width: '100'},
{label: '有效期至', prop: 'valiEnd', width: '100'},
{label: '行政许可类别', prop: 'permitType', width: '100'},
{label: '许可机关', prop: 'office', width: '180'},
{label: '行政许可机关统一社会信用代码', prop: 'xxx', width: '200'},
{label: '数据来源单位', prop: 'dataSourceOffice', width: '110'},
{label: '数据来源单位统一社会信用代码', prop: 'dataSourceOfficeCreditCode', width: '200'},
{label: '来源', prop: 'dataSource', width: '80'}
],
formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入关键词查询', options: []},
......@@ -75,27 +75,15 @@ export default {
this.handleQuery()
},
methods: {
handleQuery(params) {
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
getList(param).then((res) => {
this.tableLoading = false
this.tableData = [
{
projectId: '1',
porjectName:'滨州医学院口腔医学大楼铝合金门窗供货及安装滨州医学院口腔医学大',
use:'城镇住宅用地',
type:'房地产业',
way:'挂牌出让',
state:'重庆',
money:'11234万元',
scale:'222平米',
unit:'江苏省住房和城乡建设厅',
date:'2015-08-06',
}
]
this.tableDataTotal = 100
})
let res = await creditXzxkPage(param)
this.tableLoading = false
if(res.code==200){
this.tableData = res.rows
}
this.tableDataTotal = res.total
},
changeShowAll(row, column) {
this.showList.push({
......
......@@ -11,15 +11,21 @@
<tables
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
@sort-change="sortChange"
>
<template slot="porjectName" slot-scope="scope">
<router-link to="" tag="a" class="a-link">{{ scope.row.porjectName }}</router-link>
<template slot="projectName" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.bid&&scope.row.projectName " v-html="scope.row.projectName"></router-link>
<div v-else v-html="scope.row.projectName || '--'"></div>
</template>
<template slot="province" slot-scope="scope">
{{scope.row.province}}{{`${scope.row.city?'-'+scope.row.city:''}`}}{{`${scope.row.area?'-'+scope.row.area:''}`}}
</template>
</tables>
......@@ -28,7 +34,7 @@
<script>
import mixin from '../mixins/mixin'
import {getList, getOption} from '@/api/detail/party-a/opport'
import {bidNoticeArea, bidNoticeTenderStage, bidNoticePage} from '@/api/detail/party-a/opport'
export default {
name: 'Announcement',
props: ['companyId'],
......@@ -39,25 +45,27 @@ export default {
return {
queryParams: {
cid: this.companyId,
sort: 3,
pageNum: 1,
pageSize: 10
pageSize: 20
},
defaultSort: {prop: 'issueTime', order: 'descending'},
forData: [
{label: '项目名称', prop: 'porjectName', minWidth: '300', slot: true},
{label: '发布日期', prop: 'use', sortable: 'custom', width: '120'},
{label: '预算金额(万元)', prop: 'type', sortable: 'custom', width: '140'},
{label: '项目地区', prop: 'way', width: '120'},
{label: '项目类别', prop: 'state', width: '90'},
{label: '招采单位联系人', prop: 'money', width: '110'},
{label: '招采单位联系方式', prop: 'money', width: '130'},
{label: '代理单位', prop: 'money', width: '170'},
{label: '代理单位联系人', prop: 'money', width: '110'},
{label: '代理单位联系方式', prop: 'money', width: '130'},
{label: '报名截止日期', prop: 'money', width: '100'}
{label: '项目名称', prop: 'projectName', minWidth: '300', slot: true},
{label: '发布日期', prop: 'issueTime', sortable: 'custom', descending: '3', ascending: '4', width: '120'},
{label: '预算金额(万元)', prop: 'projectAmount', sortable: 'custom', descending: '1', ascending: '2', width: '140'},
{label: '项目地区', prop: 'province', width: '120', slot: true},
{label: '项目类别', prop: 'tenderStage', width: '90'},
{label: '招采单位联系人', prop: 'contact', width: '110'},
{label: '招采单位联系方式', prop: 'contactTel', width: '130'},
{label: '代理单位', prop: 'agency', minWidth: '170'},
{label: '代理单位联系人', prop: 'agencyContact', width: '110'},
{label: '代理单位联系方式', prop: 'agencyContactTel', width: '130'},
{label: '报名截止日期', prop: 'overTime', width: '100'}
],
formData: [
{ type: 1, fieldName: 'projectStage', value: '', placeholder: '项目地区', options: []},
{ type: 1, fieldName: 'projectType', value: '', placeholder: '项目类型', options: []},
{ type: 7, fieldName: 'province', value: '',props: {multiple: true}, placeholder: '项目地区', options: []},
{ type: 4, fieldName: 'tenderStage', value: '', placeholder: '项目类型', options: []},
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入关键词查询', options: []}
],
//列表
......@@ -73,43 +81,72 @@ export default {
this.handleQuery()
},
methods: {
handleOption(){
getOption().then((res) => {
this.setFormData('projectStage', [
{ name: '类别1', value: '1' },
{ name: '类别2', value: '2' },
{ name: '类别3', value: '3' },
{ name: '类别4', value: '4' }
])
this.setFormData('projectType', [
{ name: '类别1', value: '1' },
{ name: '类别2', value: '2' },
{ name: '类别3', value: '3' },
{ name: '类别4', value: '4' }
])
})
async handleOption(){
let [area, tender] = await Promise.all([
bidNoticeArea({cid: this.companyId}),
bidNoticeTenderStage({cid: this.companyId})
])
if(area.code==200){
let region = area.data.map(item => {
let province = {label:item.province+'('+item.count+')',value:item.provinceId}
if(item.citys&&item.citys.length>0){
let city = [], citem = {}
for(let i=0;i<item.citys.length;i++){
citem = {label:item.citys[i].city, value:item.citys[i].cityId}
if(item.citys[i].areas&&item.citys[i].areas.length>0){
let area = [], aitem = {}
for(let j=0;j<item.citys[i].areas.length;j++){
aitem = {label:item.citys[i].areas[j].area, value:item.citys[i].areas[j].areaId}
area.push(aitem)
citem.children = area
}
}
city.push(citem)
}
city.length>0 ? province.children = city : ''
}
return province
})
this.setFormData('province', region)
}
if(tender.code==200){
let tenderStage = tender.data.map(item => {
let it = {name:item.tenderStage+'('+item.count+')',value:item.tenderStage}
return it
})
this.setFormData('tenderStage', tenderStage)
}
},
handleQuery(params) {
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
getList(param).then((res) => {
this.tableLoading = false
this.tableData = [
{
projectId: '1',
porjectName:'滨州医学院口腔医学大楼铝合金门窗供货及安装',
use:'城镇住宅用地',
type:'房地产业',
way:'挂牌出让',
state:'重庆',
money:'11234万元',
scale:'222平米',
unit:'江苏省住房和城乡建设厅',
date:'2015-08-06',
}
]
this.tableDataTotal = 100
})
let param = this.getAreaList(params || this.queryParams)
let res = await bidNoticePage(param)
this.tableLoading = false
if(res.code==200){
this.tableData = res.rows
}
this.tableDataTotal = res.total
},
getAreaList(params){
if(params.province&&params.province.length>0){
let provinceIds = [], cityIds = [], areaIds = []
for(let i=0;i<params.province.length;i++){
params.province[i][0]?provinceIds.push(params.province[i][0]):''
params.province[i][1]?cityIds.push(params.province[i][1]):''
params.province[i][2]?areaIds.push(params.province[i][2]):''
}
delete params.province
params.provinceIds = provinceIds.filter(function(value,index,self){
return self.indexOf(value) === index
})
params.cityIds = cityIds.filter(function(value,index,self){
return self.indexOf(value) === index
})
params.areaIds = areaIds.filter(function(value,index,self){
return self.indexOf(value) === index
})
}
return params
}
}
}
......
<template>
<div class="app-container detail-container">
biddingplan
<div class="detail-container">
<head-form
title="招标计划"
:form-data="formData"
:query-params="queryParams"
:isExcel="true"
:total="tableDataTotal"
/>
<tables
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
@sort-change="sortChange"
>
<template slot="projectName" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.id&&scope.row.projectName " v-html="scope.row.projectName"></router-link>
<div v-else v-html="scope.row.projectName || '--'"></div>
</template>
<template slot="province" slot-scope="scope">
{{scope.row.province}}{{`${scope.row.city?'-'+scope.row.city:''}`}}{{`${scope.row.area?'-'+scope.row.area:''}`}}
</template>
</tables>
</div>
</template>
<script>
import mixin from '../mixins/mixin'
import {bidPlanPage} from '@/api/detail/party-a/opport'
export default {
name: 'Biddingplan',
props: ['companyId'],
mixins: [mixin],
components: {
},
data() {
return {
queryParams: {
cid: this.companyId,
sort: 3,
pageNum: 1,
pageSize: 20
},
defaultSort: {prop: 'issueTime', order: 'descending'},
forData: [
{label: '项目名称', prop: 'projectName', minWidth: '400', slot: true},
{label: '发布日期', prop: 'issueTime', sortable: 'custom', descending: '3', ascending: '4', width: '120'},
{label: '合同预估金额(万元)', prop: 'planTenderAmount', sortable: 'custom', descending: '1', ascending: '2', width: '160'},
{label: '资金来源', prop: 'projecetCapitalSource', minWidth: '100'},
{label: '项目地区', prop: 'province', minWidth: '110', slot: true},
{label: '项目类型', prop: 'buildingProjectType', minWidth: '100'},
{label: '标的物类型', prop: 'objectType', minWidth: '100'},
{label: '预计招标日期', prop: 'planTenderDateStart', sortable: 'custom', descending: '15', ascending: '16', minWidth: '110'}
],
formData: [],
//列表
tableLoading:false,
tableData:[],
tableDataTotal:0
}
},
computed: {
},
created() {
this.handleQuery()
},
methods: {
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
let res = await bidPlanPage(param)
this.tableLoading = false
if(res.code==200){
this.tableData = res.rows
}
this.tableDataTotal = res.total
}
}
}
</script>
<style lang="scss" scoped>
.detail-container{
margin: 0;
background: #ffffff;
border-radius: 4px;
padding: 16px;
background: #FFFFFF;
}
</style>
......@@ -11,15 +11,18 @@
<tables
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
@sort-change="sortChange"
>
<template slot="porjectName" slot-scope="scope">
<router-link to="" tag="a" class="a-link">{{ scope.row.porjectName }}</router-link>
<template slot="projectName" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.id&&scope.row.projectName " v-html="scope.row.projectName"></router-link>
<div v-else v-html="scope.row.projectName || '--'"></div>
</template>
</tables>
......@@ -28,7 +31,7 @@
<script>
import mixin from '../mixins/mixin'
import { getList } from '@/api/detail/party-a/opport'
import {specialDebtProjectPage} from '@/api/detail/party-a/opport'
export default {
name: 'Bond',
props: ['companyId'],
......@@ -39,16 +42,16 @@ export default {
return {
queryParams: {
cid: this.companyId,
sort: 1,
pageNum: 1,
pageSize: 10
pageSize: 20
},
defaultSort: {prop: 'projectTotalInvestment', order: 'descending'},
forData: [
{label: '项目名称', prop: 'porjectName', minWidth: '300', slot: true},
{label: '项目总投资(亿元)', prop: 'use', sortable: 'custom', width: '150'},
{label: '项目资本金(亿元)', prop: 'type', sortable: 'custom', width: '150'},
{label: '项目收益倍数(倍)', prop: 'way', sortable: 'custom', width: '150'},
{label: '专项债金额(亿元)', prop: 'state', sortable: 'custom', width: '150'},
{label: '专项债用作资本金(亿元)', prop: 'money', sortable: 'custom', width: '200'}
{label: '项目名称', prop: 'projectName', minWidth: '300', slot: true},
{label: '项目总投资(亿元)', prop: 'projectTotalInvestment', sortable: 'custom', descending: '1', ascending: '2', width: '150'},
{label: '项目资本金(亿元)', prop: 'projectCapital', sortable: 'custom', descending: '17', ascending: '18', width: '150'},
{label: '专项债用作资本金(亿元)', prop: 'specialBondCapital', sortable: 'custom', descending: '19', ascending: '20', width: '200'}
],
formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入项目名称关键词查询', options: []},
......@@ -65,27 +68,15 @@ export default {
this.handleQuery()
},
methods: {
handleQuery(params) {
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
getList(param).then((res) => {
this.tableLoading = false
this.tableData = [
{
projectId: '1',
porjectName:'滨州医学院口腔医学大楼铝合金门窗供货及安装',
use:'城镇住宅用地',
type:'房地产业',
way:'挂牌出让',
state:'重庆',
money:'11234万元',
scale:'222平米',
unit:'江苏省住房和城乡建设厅',
date:'2015-08-06',
}
]
this.tableDataTotal = 100
})
let res = await specialDebtProjectPage(param)
this.tableLoading = false
if(res.code==200){
this.tableData = res.rows
}
this.tableDataTotal = res.total
}
}
}
......
......@@ -11,15 +11,18 @@
<tables
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
@sort-change="sortChange"
>
<template slot="porjectName" slot-scope="scope">
<router-link to="" tag="a" class="a-link">{{ scope.row.porjectName }}</router-link>
<template slot="projectName" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.id&&scope.row.projectName " v-html="scope.row.projectName"></router-link>
<div v-else v-html="scope.row.projectName || '--'"></div>
</template>
</tables>
......@@ -28,7 +31,7 @@
<script>
import mixin from '../mixins/mixin'
import { getOption, getList } from '@/api/detail/party-a/opport'
import {landUse, landTransactionPage} from '@/api/detail/party-a/opport'
export default {
name: 'Landtransaction',
props: ['companyId'],
......@@ -39,29 +42,30 @@ export default {
return {
queryParams: {
cid: this.companyId,
sort: 3,
pageNum: 1,
pageSize: 10
pageSize: 20
},
defaultSort: {prop: 'contractSignTime', order: 'descending'},
forData: [
{label: '项目名称', prop: 'porjectName', minWidth: '300', slot: true},
{label: '土地用途', prop: 'use', width: '130'},
{label: '行业分类', prop: 'type', width: '100'},
{label: '供地方式', prop: 'way', width: '100'},
{label: '土地坐落', prop: 'state', width: '130'},
{label: '成交金额(万元)', prop: 'money', sortable: 'custom', width: '140'},
{label: '总面积(㎡)', prop: 'scale', sortable: 'custom', width: '130'},
{label: '批准单位', prop: 'unit', width: '130'},
{label: '签订日期', prop: 'date', width: '130'}
{label: '项目名称', prop: 'projectName', minWidth: '300', slot: true},
{label: '土地用途', prop: 'landUse', width: '130'},
{label: '行业分类', prop: 'industry', width: '100'},
{label: '供地方式', prop: 'supplyLandWay', width: '100'},
{label: '土地坐落', prop: 'landAddr', minWidth: '130'},
{label: '成交金额(万元)', prop: 'transactionPrice', sortable: 'custom', descending: '3', ascending: '4', width: '140'},
{label: '总面积(㎡)', prop: 'acreage', sortable: 'custom', descending: '11', ascending: '12', width: '130'},
{label: '批准单位', prop: 'authority', width: '130'},
{label: '签订日期', prop: 'contractSignTime', sortable: 'custom', descending: '1', ascending: '2', width: '130'}
],
formData: [
{ type: 1, fieldName: 'penalizeReasonType', value: '', placeholder: '土地用途', options: []},
{ type: 4, fieldName: 'landUse', value: '', placeholder: '土地用途', options: []},
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入项目名称关键词查询', options: []}
],
//列表
tableLoading:false,
tableData:[],
tableDataTotal:0,
showList:[],
tableDataTotal:0
}
},
computed: {
......@@ -71,37 +75,25 @@ export default {
this.handleQuery()
},
methods: {
handleOption(){
getOption().then((res) => {
this.setFormData('penalizeReasonType', [
{ name: '类别1', value: '1' },
{ name: '类别2', value: '2' },
{ name: '类别3', value: '3' },
{ name: '类别4', value: '4' }
])
})
async handleOption(){
let res = await landUse({cid: this.companyId})
if(res.code==200){
let use = res.data.map(item => {
let it = {name:item.landUse+'('+item.count+')',value:item.landUse}
return it
})
this.setFormData('landUse', use)
}
},
handleQuery(params) {
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
getList(param).then((res) => {
this.tableLoading = false
this.tableData = [
{
projectId: '1',
porjectName:'滨州医学院口腔医学大楼铝合金门窗供货及安装',
use:'城镇住宅用地',
type:'房地产业',
way:'挂牌出让',
state:'重庆',
money:'11234万元',
scale:'222平米',
unit:'江苏省住房和城乡建设厅',
date:'2015-08-06',
}
]
this.tableDataTotal = 100
})
let res = await landTransactionPage(param)
this.tableLoading = false
if(res.code==200){
this.tableData = res.rows
}
this.tableDataTotal = res.total
}
}
}
......
......@@ -11,15 +11,21 @@
<tables
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
@sort-change="sortChange"
>
<template slot="porjectName" slot-scope="scope">
<router-link to="" tag="a" class="a-link">{{ scope.row.porjectName }}</router-link>
<template slot="projectName" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.id&&scope.row.projectName " v-html="scope.row.projectName"></router-link>
<div v-else v-html="scope.row.projectName || '--'"></div>
</template>
<template slot="isProjcet" slot-scope="scope">
<span>{{scope.row.isProjcet==1?'是':'否'}}</span>
</template>
</tables>
......@@ -28,7 +34,7 @@
<script>
import mixin from '../mixins/mixin'
import { getList } from '@/api/detail/party-a/opport'
import { approvalProjectPage } from '@/api/detail/party-a/opport'
export default {
name: 'Proposed',
props: ['companyId'],
......@@ -39,17 +45,19 @@ export default {
return {
queryParams: {
cid: this.companyId,
sort: 3,
pageNum: 1,
pageSize: 10
pageSize: 20
},
defaultSort: {prop: 'planStartTime', order: 'descending'},
forData: [
{label: '项目名称', prop: 'porjectName', minWidth: '300', slot: true},
{label: '成交金额(万元)', prop: 'use', sortable: 'custom', width: '150'},
{label: '项目类别', prop: 'type', width: '100'},
{label: '计划开工日期', prop: 'way', sortable: 'custom', width: '130'},
{label: '计划完工日期', prop: 'state', sortable: 'custom', width: '130'},
{label: '审批结果', prop: 'money', width: '100'},
{label: '是否为民间推介项目', prop: 'scale', width: '150'}
{label: '项目名称', prop: 'projectName', minWidth: '300', slot: true},
{label: '成交金额(万元)', prop: 'money', sortable: 'custom', descending: '1', ascending: '2', width: '150'},
{label: '项目类别', prop: 'projectCategories', width: '100'},
{label: '计划开工日期', prop: 'planStartTime', sortable: 'custom', descending: '3', ascending: '4', width: '130'},
{label: '计划完工日期', prop: 'planEndTime', sortable: 'custom', descending: '13', ascending: '14', width: '130'},
{label: '审批结果', prop: 'examineStatus', width: '100'},
{label: '是否为民间推介项目', prop: 'isProjcet', width: '150', slot: true}
],
formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入项目名称关键词查询', options: []},
......@@ -66,27 +74,15 @@ export default {
this.handleQuery()
},
methods: {
handleQuery(params) {
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
getList(param).then((res) => {
this.tableLoading = false
this.tableData = [
{
projectId: '1',
porjectName:'滨州医学院口腔医学大楼铝合金门窗供货及安装',
use:'城镇住宅用地',
type:'房地产业',
way:'挂牌出让',
state:'重庆',
money:'11234万元',
scale:'222平米',
unit:'江苏省住房和城乡建设厅',
date:'2015-08-06',
}
]
this.tableDataTotal = 100
})
let res = await approvalProjectPage(param)
this.tableLoading = false
if(res.code==200){
this.tableData = res.rows
}
this.tableDataTotal = res.total
}
}
}
......
<template>
<div class="app-container detail-container">
tencent
<div class="detail-container">
<head-form
title="标讯Pro"
:form-data="formData"
:query-params="queryParams"
:total="tableDataTotal"
:isExcel="true"
@handle-search="handleSearch"
/>
<tables
:indexFixed="true"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:tableDataTotal="tableDataTotal"
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
>
<template slot="projectName" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.id&&scope.row.projectName " v-html="scope.row.projectName"></router-link>
<div v-else v-html="scope.row.projectName || '--'"></div>
</template>
<template slot="tenderee" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.tendereeId&&scope.row.tenderee " v-html="scope.row.tenderee"></router-link>
<div v-else v-html="scope.row.tenderee || '--'"></div>
</template>
<template slot="agency" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.agencyId&&scope.row.agency " v-html="scope.row.agency"></router-link>
<div v-else v-html="scope.row.agency || '--'"></div>
</template>
<template slot="province" slot-scope="scope">
{{scope.row.province}}{{`${scope.row.city?'-'+scope.row.city:''}`}}{{`${scope.row.area?'-'+scope.row.area:''}`}}
</template>
</tables>
</div>
</template>
<script>
import mixin from '../mixins/mixin'
import { bidNoticeProProjectType, bidNoticeProProjectPurposes, bidNoticeProAssessmentWay, bidNoticeProPage } from '@/api/detail/party-a/opport'
export default {
name: 'Tencent',
props: ['companyId'],
mixins: [mixin],
components: {
},
data() {
return {
queryParams: {
cid: this.companyId,
pageNum: 1,
pageSize: 20
},
forData: [
{label: '项目名称', prop: 'projectName', minWidth: '320', slot: true},
{label: '金额(万元)', prop: '', children: [
{ label: '建安费暂估', prop: 'projectSafeAmount', width: '88px'},
{ label: '勘察费暂估', prop: 'projectSurveyAmount', width: '88px'},
{ label: '保证金', prop: 'projectEnsureAmount', width: '88px'}
]},
{label: '招标人及联系方式', prop: '', children: [
{ label: '招标人', prop: 'tenderee', width: '88px', slot: true},
{ label: '联系人', prop: 'tendereeTel', width: '88px'}
]},
{label: '代理机构及联系方式', prop: '', children: [
{ label: '代理机构', prop: 'agency', width: '88px', slot: true},
{ label: '联系人', prop: 'agencyTel', width: '88px'}
]},
{label: '项目分类', prop: 'projectType', width: '130'},
{label: '工程类别', prop: 'projectPurposes', width: '130'},
{label: '分部分项', prop: 'projectSub', width: '130'},
{label: '项目级别', prop: 'projectLevel', width: '130'},
{label: '评标办法', prop: 'bidAssessmentWay', width: '130'},
{label: '项目属地', prop: 'province', width: '130', slot: true},
{label: '发布日期', prop: 'pubdate', width: '130'}
],
formData: [
{ type: 1, fieldName: 'projectType', value: '', placeholder: '项目类别', options: []},
{ type: 1, fieldName: 'projectPurposes', value: '', placeholder: '工程类别', options: []},
{ type: 1, fieldName: 'bidAssessmentWay', value: '', placeholder: '评标办法', options: []},
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入关键词查询', options: []}
],
//列表
tableLoading:false,
tableData:[],
tableDataTotal:0
}
},
computed: {
},
created() {
this.handleOption()
this.handleQuery()
},
methods: {
async handleOption(){
let [projectType, projectPurposes, proAssessmentWay] = await Promise.all([
bidNoticeProProjectType({cid: this.companyId}),
bidNoticeProProjectPurposes({cid: this.companyId}),
bidNoticeProAssessmentWay({cid: this.companyId})
])
if(projectType.code==200){
let type = projectType.data.map(item => {
let it = {name:item.projectType+'('+item.count+')',value:item.projectType}
return it
})
this.setFormData('projectType', type)
}
if(projectPurposes.code==200){
let purposes = projectPurposes.data.map(item => {
let it = {name:item.projectPurposes+'('+item.count+')',value:item.projectPurposes}
return it
})
this.setFormData('projectPurposes', purposes)
}
if(proAssessmentWay.code==200){
let way = proAssessmentWay.data.map(item => {
let it = {name:item.bidAssessmentWay+'('+item.count+')',value:item.bidAssessmentWay}
return it
})
this.setFormData('bidAssessmentWay', way)
}
},
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
let res = await bidNoticeProPage(param)
this.tableLoading = false
if(res.code==200){
this.tableData = res.rows
}
this.tableDataTotal = res.total
}
}
}
</script>
<style lang="scss" scoped>
.detail-container{
margin: 0;
background: #ffffff;
border-radius: 4px;
padding: 16px;
background: #FFFFFF;
}
</style>
......@@ -18,10 +18,12 @@
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
>
<template slot="projectName" slot-scope="scope">
<router-link to="" tag="a" class="a-link">{{scope.row.projectName}}</router-link>
<div class="tags" v-if="scope.row.tag">
<span class="tag style1">{{scope.row.tag}}</span>
<template slot="name" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.id&&scope.row.name " v-html="scope.row.name"></router-link>
<div v-else v-html="scope.row.name || '--'"></div>
<div class="tags" v-if="scope.row.status || scope.row.biddingAnnouncement">
<span class="tag style1" v-if="scope.row.status">{{scope.row.status}}</span>
<span class="tag style1" v-if="scope.row.biddingAnnouncement">招标数{{scope.row.biddingAnnouncement}}</span>
</div>
</template>
</tables>
......@@ -30,7 +32,7 @@
<script>
import mixin from '../mixins/mixin'
import {getList, getOption} from '@/api/detail/party-a/overview'
import {affiliates} from '@/api/detail/party-a/overview'
export default {
name: 'Branch',
props: ['companyId'],
......@@ -40,15 +42,19 @@ export default {
queryParams: {
cid: this.companyId,
pageNum: 1,
pageSize: 10
pageSize: 20
},
forData: [
{label: '被投资企业名称', prop: 'projectName', slot: true},
{label: '负责人', prop: 'type'},
{label: '成立日期', prop: 'date'}
{label: '被投资企业名称', prop: 'name', slot: true},
{label: '负责人', prop: 'operName'},
{label: '成立日期', prop: 'startDate'}
],
formData: [
{ type: 1, fieldName: 'zbgg', value: '', placeholder: '招标公告', options: []
{ type: 1, fieldName: 'hasBid', value: '', placeholder: '招标公告', options: [
{name:'不限',value:''},
{name:'有招标公告',value:1},
{name:'无招标公告',value:0}
]
}
],
//列表
......@@ -58,42 +64,18 @@ export default {
}
},
created() {
this.handleOption()
this.handleQuery()
},
methods: {
handleOption(){
getOption().then((res) => {
this.setFormData('zbgg', [
{ name: '类别1', value: '1' },
{ name: '类别2', value: '2' },
{ name: '类别3', value: '3' },
{ name: '类别4', value: '4' }
])
})
},
handleQuery(params) {
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
getList(param).then((res) => {
this.tableLoading = false
this.tableData = [
{
projectId: '1',
tag: '在业',
projectName:'滨州医学院口腔医学大楼铝合金门窗供货及安装',
use:'城镇住宅用地',
type:'房地产业',
way:'挂牌出让',
state:'重庆',
money:'11234万元',
scale:'222平米',
unit:'江苏省住房和城乡建设厅',
date:'2015-08-06',
}
]
this.tableDataTotal = 100
})
let res = await affiliates(param)
this.tableLoading = false
if(res.code==200){
this.tableData = res.rows
}
this.tableDataTotal = res.total
}
}
}
......
......@@ -7,14 +7,15 @@
<info-table class="info-tab" :list="defaultList" :obj="forInfo" :labelWidth="labelWidth" v-if="activeName=='first'">
<template slot="provinceCode" slot-scope="scope">
<span>{{showRegion(scope.data.provinceCode)}}</span>
</template>
</info-table>
<tables
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:queryParams="queryParams"
:paging="false"
v-if="activeName=='second'"
/>
</div>
......@@ -22,8 +23,9 @@
<script>
import mixin from '../mixins/mixin'
import dataRegion from '@/assets/json/dataRegion'
import InfoTable from '../component/infoTable'
import {getList} from "@/api/detail/party-a/overview";
import {icInfo, changeInfo} from "@/api/detail/party-a/overview"
export default {
name: 'Businfo',
props: ['companyId'],
......@@ -34,39 +36,42 @@ export default {
data() {
return {
activeName: 'first',
baseParams: {
cid: this.companyId
},
queryParams: {
cid: this.companyId,
pageNum: 1,
pageSize: 10
pageSize: 20
},
labelWidth: 250,
forInfo: {projectType: 'aaa', projectPurposes: '222', projectInvestmentAmounts: '222'},
forInfo: {},
defaultList: [
{ name: '企业名称', prop: 'projectTypes' },
{ name: '社会信用代码', prop: 'projectPurposes' },
{ name: '法定代表人', prop: 'projectInvestmentAmounts' },
{ name: '登记状态', prop: 'projectInvestmentAmounts' },
{ name: '成立日期', prop: 'projectInvestmentAmounts' },
{ name: '注册资本', prop: 'projectInvestmentAmounts' },
{ name: '实缴资本', prop: 'projectInvestmentAmounts' },
{ name: '核准日期', prop: 'projectInvestmentAmounts' },
{ name: '组织机构代码', prop: 'projectInvestmentAmounts' },
{ name: '工商注册号', prop: 'projectInvestmentAmounts' },
{ name: '纳税人识别号', prop: 'projectInvestmentAmounts' },
{ name: '企业类型', prop: 'projectInvestmentAmounts' },
{ name: '营业期限', prop: 'projectInvestmentAmounts' },
{ name: '纳税人资质', prop: 'projectInvestmentAmounts' },
{ name: '所属地区', prop: 'projectInvestmentAmounts' },
{ name: '登记机关', prop: 'projectInvestmentAmounts' },
{ name: '人员规模', prop: 'projectInvestmentAmounts' },
{ name: '参保人数', prop: 'projectInvestmentAmounts' },
{ name: '经营范围', prop: 'projectInvestmentAmounts', style: true }
{ name: '企业名称', prop: 'name' },
{ name: '社会信用代码', prop: 'creditNo' },
{ name: '法定代表人', prop: 'operName' },
{ name: '登记状态', prop: 'status' },
{ name: '成立日期', prop: 'startDate' },
{ name: '注册资本', prop: 'registCapi' },
{ name: '实缴资本', prop: 'actualCapi' },
{ name: '核准日期', prop: 'checkDate' },
{ name: '组织机构代码', prop: 'orgNo' },
{ name: '工商注册号', prop: 'regNo' },
{ name: '纳税人识别号', prop: 'creditNo' },
{ name: '企业类型', prop: 'econKind' },
{ name: '营业期限', prop: 'termEnd' },
{ name: '纳税人资质', prop: 'qualification' },
{ name: '所属地区', prop: 'provinceCode', slot: true },
{ name: '登记机关', prop: 'belongOrg' },
{ name: '人员规模', prop: 'colleguesNum' },
{ name: '参保人数', prop: 'colleguesNum' },
{ name: '经营范围', prop: 'scope', style: true }
],
forData: [
{label: '变更日期', prop: 'inReason', width: '90', slot: true},
{label: '变更事项', prop: 'inDate'},
{label: '变更前', prop: 'department'},
{label: '变更后', prop: 'department'}
{label: '变更日期', prop: 'changeDate', width: '90'},
{label: '变更事项', prop: 'type'},
{label: '变更前', prop: 'beforeContent'},
{label: '变更后', prop: 'afterContent'}
],
//列表
tableLoading:false,
......@@ -80,28 +85,29 @@ export default {
handleClick(){
this.handleQuery()
},
handleQuery() {
console.log('索引:',this.activeName)
async handleQuery() {
this.tableLoading = true
getList(this.queryParams).then((res) => {
this.tableLoading = false
this.tableData = [
{
projectId: '1',
tag: '在业',
projectName:'滨州医学院口腔医学大楼铝合金门窗供货及安装',
use:'城镇住宅用地',
type:'房地产业',
way:'挂牌出让',
state:'重庆',
money:'11234万元',
scale:'222平米',
unit:'江苏省住房和城乡建设厅',
date:'2015-08-06',
let param = this.activeName == 'first' ? this.baseParams : this.queryParams
let res = this.activeName == 'first' ? await icInfo(param) : await changeInfo(param)
this.tableLoading = false
if(res.code==200){
this.activeName == 'first' ? this.forInfo = res.data : this.tableData = res.rows
}
this.activeName == 'first' ? '' : this.tableDataTotal = res.total
},
showRegion(region){
if(region) {
let list = dataRegion
let areaText = ''
list.forEach(item => {
if(item.id == region) {
areaText = item.regionName
}
]
this.tableDataTotal = 100
})
})
return areaText
}else {
return '--'
}
}
}
}
......
......@@ -19,7 +19,7 @@
<script>
import mixin from '../mixins/mixin'
import {getList} from '@/api/detail/party-a/overview'
import {keymembers} from '@/api/detail/party-a/overview'
export default {
name: 'Execuinfo',
props: ['companyId'],
......@@ -29,11 +29,11 @@ export default {
queryParams: {
cid: this.companyId,
pageNum: 1,
pageSize: 10
pageSize: 20
},
forData: [
{label: '姓名', prop: 'projectName'},
{label: '职位', prop: 'type'}
{label: '姓名', prop: 'name'},
{label: '职位', prop: 'jobTitle'}
],
formData: [],
//列表
......@@ -46,27 +46,15 @@ export default {
this.handleQuery()
},
methods: {
handleQuery() {
async handleQuery(params) {
this.tableLoading = true
getList(this.queryParams).then((res) => {
this.tableLoading = false
this.tableData = [
{
projectId: '1',
tag: '在业',
projectName:'滨州医学院口腔医学大楼铝合金门窗供货及安装',
use:'城镇住宅用地',
type:'房地产业',
way:'挂牌出让',
state:'重庆',
money:'11234万元',
scale:'222平米',
unit:'江苏省住房和城乡建设厅',
date:'2015-08-06',
}
]
this.tableDataTotal = 100
})
let param = params?params:this.queryParams
let res = await keymembers(param)
this.tableLoading = false
if(res.code==200){
this.tableData = res.rows
}
this.tableDataTotal = res.total
}
}
}
......
......@@ -19,19 +19,23 @@
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
>
<template slot="projectName" slot-scope="scope">
<router-link to="" tag="a" class="a-link">{{scope.row.projectName}}</router-link>
<div class="tags" v-if="scope.row.tag">
<span class="tag style1">{{scope.row.tag}}</span>
<template slot="stockName" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.stockId&&scope.row.stockName " v-html="scope.row.stockName"></router-link>
<div v-else v-html="scope.row.stockName || '--'"></div>
<div class="tags" v-if="scope.row.businessStatus">
<span class="tag style1" v-if="scope.row.businessStatus">{{scope.row.businessStatus}}</span>
</div>
</template>
<template slot="stockPercent" slot-scope="scope">
<span>{{scope.row.stockPercent?parseFloat(Number(scope.row.stockPercent*100).toFixed(4))+'%':'--'}}</span>
</template>
</tables>
</div>
</template>
<script>
import mixin from '../mixins/mixin'
import {getList} from '@/api/detail/party-a/overview'
import {bestStockPage} from '@/api/detail/party-a/overview'
export default {
name: 'Holderinfo',
props: ['companyId'],
......@@ -41,16 +45,17 @@ export default {
activeName: 'first',
queryParams: {
cid: this.companyId,
isHistory: 0,
pageNum: 1,
pageSize: 10
pageSize: 20
},
forData: [
{label: '发起人/股东', prop: 'projectName', minWidth: '230', slot: true},
{label: '持股比例', prop: 'inDate'},
{label: '认缴出资(万)', prop: 'department'},
{label: '实缴出资额', prop: 'department'},
{label: '认缴出资额', prop: 'department'},
{label: '参股日期', prop: 'department', width: '150'}
{label: '发起人/股东', prop: 'stockName', minWidth: '230', slot: true},
{label: '持股比例', prop: 'stockPercent', slot: true},
{label: '认缴出资(万)', prop: 'shouldCapiConv'},
{label: '实缴出资额', prop: 'realCapi'},
{label: '认缴出资日期', prop: 'conDate'},
{label: '参股日期', prop: 'realCapiDate', width: '150'}
],
formData: [],
//列表
......@@ -66,28 +71,16 @@ export default {
handleClick(){
this.handleQuery()
},
handleQuery() {
console.log('索引:',this.activeName)
async handleQuery(params) {
this.tableLoading = true
getList(this.queryParams).then((res) => {
this.tableLoading = false
this.tableData = [
{
projectId: '1',
tag: '在业',
projectName:'滨州医学院口腔医学大楼铝合金门窗供货及安装',
use:'城镇住宅用地',
type:'房地产业',
way:'挂牌出让',
state:'重庆',
money:'11234万元',
scale:'222平米',
unit:'江苏省住房和城乡建设厅',
date:'2015-08-06',
}
]
this.tableDataTotal = 100
})
let param = params?params:this.queryParams
param.isHistory = this.activeName == 'first' ? 0 : 1
let res = await bestStockPage(param)
this.tableLoading = false
if(res.code==200){
this.tableData = res.rows
}
this.tableDataTotal = res.total
}
}
}
......
......@@ -18,20 +18,25 @@
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
>
<template slot="gqzb">
<template slot="investName" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.id&&scope.row.investName " v-html="scope.row.investName"></router-link>
<div v-else v-html="scope.row.investName || '--'"></div>
<div class="tags" v-if="scope.row.businessStatus || scope.row.biddingAnnouncement">
<span class="tag style1" v-if="scope.row.businessStatus">{{scope.row.businessStatus}}</span>
<span class="tag style1" v-if="scope.row.biddingAnnouncement">招标数{{scope.row.biddingAnnouncement}}</span>
</div>
</template>
<template slot="proportion">
<div class="tab-header">股权占比 <el-popover placement="top-start" width="280" trigger="hover">
<div style="font-size: 12px;">
控股67%:绝对控制权67%,相当于100%的权力,修改公司章程/分立、合并、变更主营项目、重大决策<br />
控股51%:相对控制权51%,控制线,绝对控制公司<br />
控股34%:安全控制权,一票否决权</div>
<img src="@/assets/images/detail/overview/zbph_question.png" slot="reference">
</el-popover></div>
<img src="@/assets/images/detail/overview/zbph_question.png" slot="reference">
</el-popover></div>
</template>
<template slot="projectName" slot-scope="scope">
<router-link to="" tag="a" class="a-link">{{scope.row.projectName}}</router-link>
<div class="tags" v-if="scope.row.tag">
<span class="tag style1">{{scope.row.tag}}</span>
</div>
<template slot="stockPercentage" slot-scope="scope">
<span>{{scope.row.stockPercentage?parseFloat(Number(scope.row.stockPercentage*100).toFixed(4))+'%':'--'}}</span>
</template>
</tables>
</div>
......@@ -39,7 +44,7 @@
<script>
import mixin from '../mixins/mixin'
import {getList, getOption} from '@/api/detail/party-a/overview'
import {investment} from '@/api/detail/party-a/overview'
export default {
name: 'Overseas',
props: ['companyId'],
......@@ -49,19 +54,33 @@ export default {
queryParams: {
cid: this.companyId,
pageNum: 1,
pageSize: 10
pageSize: 20
},
forData: [
{label: '被投资企业名称', prop: 'projectName', minWidth: '180', slot: true},
{label: '法定代表人', prop: 'inDate'},
{label: '注册资本(万元)', prop: 'department'},
{label: '成立日期', prop: 'department'},
{label: '股权占比', prop: 'department', slotHeader: true, slotName: 'gqzb'},
{label: '认缴出资额(万元)', prop: 'department'}
{label: '被投资企业名称', prop: 'investName', minWidth: '180', slot: true},
{label: '法定代表人', prop: 'investOperName'},
{label: '注册资本(万元)', prop: 'investRegistCapi'},
{label: '成立日期', prop: 'investStartDate'},
{label: '股权占比', prop: 'stockPercentage', slot: true, slotHeader: true, slotName: 'proportion'},
{label: '认缴出资额(万元)', prop: 'shouldCapi'}
],
formData: [
{ type: 1, fieldName: 'zbgg', value: '', placeholder: '招标公告', options: [] },
{ type: 1, fieldName: 'gqzb', value: '', placeholder: '股权占比', options: [] }
{ type: 1, fieldName: 'hasBid', value: '', placeholder: '招标公告', options: [
{name:'不限',value:''},
{name:'有招标公告',value:1},
{name:'无招标公告',value:0}
]
},
{ type: 1, fieldName: 'proportion', value: '', placeholder: '股权占比', options: [
{name:'不限',value:''},
{name:'100%',value:'1~1'},
{name:'66.66%以上',value:'0.6666~1'},
{name:'50%以上',value:'0.4~1'},
{name:'33.33%以上',value:'0.3333~1'},
{name:'25%以上',value:'0.05~0.25'},
{name:'不到5%',value:'0~0.05'}
]
}
],
//列表
tableLoading:false,
......@@ -70,48 +89,29 @@ export default {
}
},
created() {
this.handleOption()
this.handleQuery()
},
methods: {
handleOption(){
getOption().then((res) => {
this.setFormData('zbgg', [
{ name: '类别1', value: '1' },
{ name: '类别2', value: '2' },
{ name: '类别3', value: '3' },
{ name: '类别4', value: '4' }
])
this.setFormData('gqzb', [
{ name: '类别1', value: '1' },
{ name: '类别2', value: '2' },
{ name: '类别3', value: '3' },
{ name: '类别4', value: '4' }
])
})
},
handleQuery(params) {
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
getList(param).then((res) => {
this.tableLoading = false
this.tableData = [
{
projectId: '1',
tag: '在业',
projectName:'滨州医学院口腔医学大楼铝合金门窗供货及安装',
use:'城镇住宅用地',
type:'房地产业',
way:'挂牌出让',
state:'重庆',
money:'11234万元',
scale:'222平米',
unit:'江苏省住房和城乡建设厅',
date:'2015-08-06',
}
]
this.tableDataTotal = 100
})
let res = await investment(param)
this.tableLoading = false
if(res.code==200){
this.tableData = res.rows
}
this.tableDataTotal = res.total
},
handleSearch(){
let params = this.formParams()
if(params.proportion){
params.stockPercentageMin = parseFloat(params.proportion.split('~')[0])
params.stockPercentageMax = parseFloat(params.proportion.split('~')[1])
delete params.proportion
}
params.pageNum = 1
this.queryParams.pageNum = 1
this.handleQuery(params)
}
}
}
......
......@@ -49,7 +49,7 @@ export default {
margin: 0;
padding: 0;
.view-content{
margin-top: 12px;
//margin-top: 12px;
}
}
</style>
......@@ -159,6 +159,12 @@ export default {
name: 'Preference',
components: {
},
props: {
customerIds: {
type: String,
default: ''
}
},
data() {
return {
......@@ -166,7 +172,7 @@ export default {
minRows: 8,
maxRows: 8
},
customerId: 'f25219e73249eea0d9fddc5c7f04f97f',
customerId: this.customerIds,
queryParams:{
customerId: '',
businessCharacteristic: '',
......
......@@ -42,7 +42,7 @@ export default {
data() {
return {
queryParams: {
cid: 382724726,
cid: this.companyId,//382724726
pageNum: 1,
pageSize: 10
},
......
......@@ -44,7 +44,7 @@ export default {
data() {
return {
queryParams: {
cid: 20734,
cid: this.companyId, //20734
pageNum: 1,
pageSize: 10
},
......@@ -52,7 +52,6 @@ export default {
{label: '案由', prop: 'caseReason'},
{label: '公告时间', prop: 'date', width: '95'},
{label: '当事人', prop: 'people', width: '240'},
{label: '案号', prop: 'objId', width: '210'},
{label: '公告类型', prop: 'type', width: '210'},
{label: '公告法院', prop: 'court', width: '280'}
],
......@@ -60,8 +59,7 @@ export default {
{ type: 1, fieldName: 'type', value: '', placeholder: '公告类型', options: []},
{ type: 1, fieldName: 'caseReason', value: '', placeholder: '案由', options: []},
{ type: 1, fieldName: 'role', value: '', placeholder: '身份', options: []},
{ type: 2, fieldName: 'time', value: '', placeholder: '',startTime: 'dateFrom',endTime: 'dateTo'},
{ type: 3, fieldName: 'keys', value: '', placeholder: '请输入关键词'},
{ type: 2, fieldName: 'time', value: '', placeholder: '',startTime: 'dateFrom',endTime: 'dateTo'}
],
//列表
tableLoading:false,
......
......@@ -42,7 +42,7 @@ export default {
data() {
return {
queryParams: {
cid: 5504335,
cid: this.companyId,//5504335
pageNum: 1,
pageSize: 10
},
......
......@@ -41,7 +41,7 @@ export default {
data() {
return {
queryParams: {
cid: 194738907,
cid: this.companyId,//194738907
pageNum: 1,
pageSize: 10
},
......
<template>
<div class="corePersonnel">
<head-form
title="判决文书"
title="裁判文书"
:form-data="formData"
:query-params="queryParams"
:total="tableDataTotal"
......@@ -50,7 +50,7 @@ export default {
data() {
return {
queryParams: {
cid: 5504335,
cid: this.companyId,//5504335
pageNum: 1,
pageSize: 10
},
......
......@@ -50,7 +50,7 @@ export default {
data() {
return {
queryParams: {
cid: 20734,
cid: this.companyId,//20734
pageNum: 1,
pageSize: 10
},
......@@ -59,12 +59,12 @@ export default {
{label: '开庭日期', prop: 'hearingDate', width: '95'},
{label: '当事人', prop: 'relatedCompanies', width: '428', slot: true},
{label: '身份', prop: 'pureRole', width: '120'},
{label: '公告内容', prop: '', width: '508'},
{label: '公告内容', prop: 'content', width: '508'},
{label: '案号', prop: 'caseNo', width: '210'},
{label: '法院', prop: 'court', width: '280'},
{label: '法庭', prop: '', width: '180'},
{label: '承办部门', prop: '', width: '280'},
{label: '审判长/主判人', prop: '', width: '106'}
{label: '法庭', prop: 'tribunal', width: '180'},
{label: '承办部门', prop: 'department', width: '280'},
{label: '审判长/主判人', prop: 'judge', width: '106'}
],
formData: [
{ type: 1, fieldName: 'causeAction', value: '', placeholder: '案由', options: []},
......
......@@ -59,9 +59,8 @@ export default {
{label: '决定日期', prop: 'punishBegin', width: '95'},
{label: '处罚结果', prop: 'punishResult', width: '264'},
{label: '处罚文书号', prop: 'fileNum', width: '200'},
{label: '相关人员', prop: '', width: '88'},
{label: '处罚机关', prop: 'office', width: '264'},
{label: '处罚结束日期', prop: '', width: '100'},
{label: '处罚结束日期', prop: 'punishEnd', width: '100'},
],
formData: [
{ type: 1, fieldName: 'penalizeReasonType', value: '', placeholder: '处罚类别', options: []},
......
......@@ -36,11 +36,17 @@ export default {
mixins: [mixin],
components: {
},
props: {
companyId: {
type: Number,
default: 0
}
},
data() {
return {
queryParams: {
cid: 3068,
cid: this.companyId,//3068
sort: 3,
pageNum: 1,
pageSize: 10
......
......@@ -4,7 +4,7 @@
<div class="flex-box query-params">
<span class="common-title">区域经济</span>
</div>
<div class="params-dw"><img src="@/assets/images/addree.png" />广东省-广州市</div>
<div class="params-dw"><img src="@/assets/images/addree.png" />{{ addressList }}</div>
</div>
<div class="table-item">
<el-table
......@@ -26,16 +26,27 @@
</template>
<script>
import dataRegion from '@/assets/json/dataRegion'
import {
regionalEconomy
} from '@/api/detail/party-a/urbanLnvestment'
import {
infoHeader
} from '@/api/detail/party-a/index'
export default {
name: 'regionalEconomies',
components: {
},
props: {
companyId: {
type: Number,
default: 0
}
},
data() {
return {
addressList:'',
params: {
provinceId: 500000,
cityId: 500100
......@@ -61,7 +72,7 @@ export default {
},
{
prop: 'gdpGrowth',
label: 'GDP增速',
label: 'GDP增速(%)',
},
{
prop: 'gdpPerCapita',
......@@ -117,7 +128,7 @@ export default {
},
{
prop: 'gbrGrowth',
label: '一般公共预算收入增速',
label: '一般公共预算收入增速(%)',
},
{
prop: 'taxIncome',
......@@ -181,30 +192,30 @@ export default {
},
{
prop: 'fiscalSelfSufficiencyRate',
label: '财政自给率',
label: '财政自给率(%)',
},
{
prop: 'govDebtToGdpRate',
label: '负债率',
label: '负债率(%)',
},
{
prop: 'govDebtToGdpRateWild',
label: '负债率-宽口径',
label: '负债率-宽口径(%)',
},
{
prop: 'govDebtRate',
label: '债务率',
label: '债务率(%)',
},
{
prop: 'govDebtRateWild',
label: '债务率-宽口径',
label: '债务率-宽口径(%)',
},
],
tableLoading: true
}
},
created() {
this.dataRegion()
this.regionalEconomys()
},
computed: {
getHeaders() {
......@@ -218,12 +229,36 @@ export default {
},
methods: {
//地区
dataRegion() {
regionalEconomy(this.params).then(res => {
this.tableData = res.data
this.tableLoading = false
regionalEconomys() {
this.tableLoading = true
infoHeader({companyId: this.companyId}).then(res => {
regionalEconomy({
provinceId: res.data.provinceId,
cityId: res.data.cityId
}).then(res => {
this.tableData = res.data
this.tableLoading = false
})
this.dataRegion(res.data.provinceId, res.data.cityId)
})
},
dataRegion(p,c) {
var str = [];
for (let x = 0; x < 2; x++) {
for (let i = 0; i < dataRegion.length; i++) {
if (dataRegion[i].regionLevel == x + 1 && x + 1 == 1) {
if(p == dataRegion[i].id){
str.push(dataRegion[i].regionName)
}
} else if (dataRegion[i].regionLevel == x + 1 && x + 1 == 2) {
if(c == dataRegion[i].id){
str.push(dataRegion[i].regionName)
}
}
}
}
this.addressList = str.join(' - ');
},
}
}
</script>
......
......@@ -112,17 +112,26 @@ import {
urbanInvestmentPage,
uipGroupData
} from '@/api/detail/party-a/urbanLnvestment'
import {
infoHeader
} from '@/api/detail/party-a/index'
export default {
name: 'SameRegion',
mixins: [mixin],
components: {
},
props: {
companyId: {
type: Number,
default: 0
}
},
data() {
return {
queryParams: {
provinceId: 500000,
cityId: 500100,
provinceId: '',
cityId: '',
uipExecutiveLevel: '',
uipBusinessType: [],
bratingSubjectLevel: [],
......@@ -191,23 +200,18 @@ export default {
}
},
created() {
this.handleQuery()
this.getScreen()
infoHeader({companyId: this.companyId}).then(res => {
this.queryParams.provinceId = res.data.provinceId
this.queryParams.cityId = res.data.cityId
this.handleQuery()
this.getScreen()
})
},
computed: {
},
methods: {
dataRegion() {
// await axios.post("https://files.jiansheku.com/file/json/common/dataRegion.json", {}, {
// headers: {
// 'Content-Type': 'application/json'
// }
// }).then(res => {
// if (res.data.code == 200) {
// console.log(res.data.data)
// }
// })
var str = [];
for (let x = 0; x < 3; x++) {
for (let i = 0; i < dataRegion.length; i++) {
......
<template>
<div>
<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="writeIn">
<div class="default" v-if="isEdit == false" @click="getEdit">
......@@ -18,9 +19,15 @@
<i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/ico_1.png"></i>
<el-option v-for="(item,index) in bffslist" :key="index" :label="item.dictLabel" :value="item.dictValue"></el-option>
</el-select>
<el-select v-if="showtype == 'gjdt'" v-model="addParam.customerId" class="w128" placeholder="关联企业">
<template v-if="!customerIds">
<el-select v-if="showtype == 'gjdt'" v-model="addParam.customerId" 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 glqylist" :key="index" :label="item.companyName" :value="item.customerId"></el-option>
</el-select>
</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 glqylist" :key="index" :label="item.companyName" :value="item.customerId"></el-option>
<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;">
<i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/ico_2.png"></i>
......@@ -55,7 +62,7 @@
<div><span>{{item.content}}</span></div>
<div class="rec_text">
<span v-if="item.name">拜访对象:{{item.name||'--'}}</span>
<span v-if="showtype == 'gjdt' && companyName != ''">关联企业:{{item.companyName}}</span>
<span v-if="showtype == 'gjdt' && item.companyName != ''">关联企业:{{item.companyName}}</span>
<span v-if="item.position">职位:{{item.position}}</span>
<span v-if="item.createTime">拜访时间:{{item.createTime.slice(0, 10)}}</span>
<span v-if="item.nextVisitTime">下次拜访时间:{{item.createTime.slice(0, 10)}}</span>
......@@ -63,7 +70,7 @@
</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_time">
......@@ -114,7 +121,7 @@
<script>
import "@/assets/styles/project.scss"
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'
export default {
props:{
......@@ -122,6 +129,14 @@
type: String,
default: ""
},
customerIds: { //客户id
type: String,
default: ""
},
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
},
datas:[],//数据源
},
name: 'gjjl',
......@@ -146,7 +161,9 @@
recordlist:[],//列表数据源
isdel:false,
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: {
......@@ -168,12 +185,29 @@
if(this.showtype == 'gjjl'){
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)
},
methods:{
//添加跟进动态
addFollow(){
if(this.types == 'projectgjdt'){
if(this.projectId == "" || this.projectId == null){
this.$message.error('请选择关联项目!')
return false
}
}
if(this.types == 'gjdt'){
if(this.customerIds){
this.addParam.customerId = this.customerIds
}
addFollowRecord(this.addParam).then(result=>{
if(result.code == 200){
this.$message.success(result.msg)
......@@ -184,7 +218,7 @@
}
})
}
if(this.types == 'gjjl'){
if(this.types == 'gjjl' || this.types == 'projectgjdt'){
let param = {
businessId:this.projectId,
userId:this.$store.state.user.userId,
......@@ -220,7 +254,7 @@
}
})
}
if(this.types == 'gjjl') {
if(this.types == 'gjjl' || this.types == 'projectgjdt') {
delGJJL(this.delID).then(result => {
if (result.code == 200) {
this.handleCurrentChange(1)
......@@ -231,11 +265,15 @@
}
},
//跟进动态列表
//客户管理跟进动态
getGJDTlist(){
let param = {
pageNum:this.pageNum,//页码
pageSize:this.pageSize,
}
if(this.customerIds){
param.customerId = this.customerIds
}
getFollowList(param).then(result=>{
this.recordlist = result.code == 200?result:[]
this.recordlist.rows.forEach(item=>{
......@@ -244,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(){
let param = {
pageNum:this.pageNum,//页码
......@@ -262,12 +316,15 @@
if(this.showtype == 'gjjl'){
this.getGJJL()
}
if(this.showtype == 'projectgjdt'){
this.getGJDT()
}
},
getEdit(){
this.isEdit = true;
this.value = ""
this.addParam={
customerId:'', //客户id
customerId:'', //客户id
visitMode:'',//拜访方式
nextVisitTime:'',//下次拜访时间
name:'',//拜访对象姓名
......
......@@ -70,19 +70,25 @@
export default {
name: 'gjjl',
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){
return{
isEdit:false,
value:'',
status:0,
queryParam:{
businessId:parseInt(this.$route.query.id),//项目详情id
businessId:this.detailId ? this.detailId : parseInt(this.$route.query.id),//项目详情id
target:'',
task:'',
finishTime:'',
},
searchPram:{
businessId:parseInt(this.$route.query.id),
businessId:this.detailId ? this.detailId : parseInt(this.$route.query.id),
pageSize:10,
pageNum:1,
state:null,
......
......@@ -203,10 +203,16 @@
import {getJSNR,editXMNR} from '@/api/project/project'
export default {
name: 'jsnr',
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){
return{
nowedit:-1,//当前正在编辑的文本
id:parseInt(this.$route.query.id),
id:this.detailId ? this.detailId : parseInt(this.$route.query.id),
investmentAmount: '',//总投资额
amountSource: '',//资金来源
buildProperty: '',//建设性质
......
......@@ -113,6 +113,12 @@
import {getLXR,editLXR,addLXR} from '@/api/project/project'
export default {
name: 'lxr',
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){
return{
dialogVisible:false,
......@@ -125,9 +131,9 @@
searchParam:{
pageNum:1,
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,
projectname:this.$route.query.projectname,
queryParam:[],
......
......@@ -139,6 +139,12 @@
import {getDictType} from '@/api/main'
export default {
name: 'xgqy',
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){
return{
types:1,
......@@ -175,7 +181,7 @@
companytype:[],
companyrole:[],
queryParam:{
businessId:this.$route.query.id,
businessId:this.detailId ? this.detailId : this.$route.query.id,
companyId:'',
companyName:'',
companyRole:'',
......@@ -186,7 +192,7 @@
searchParam:{
pageSize:20,
pageNum:1,
businessId:this.$route.query.id,
businessId:this.detailId ? this.detailId : this.$route.query.id,
companyType:"",
companyName:'',
},
......@@ -212,7 +218,7 @@
if(res.code == 200){
this.$message.success('删除成功')
this.ondel = -1
this.getlist()
this.handleCurrentChange(1)
}
})
},
......@@ -259,7 +265,7 @@
opennew(){
this.dialogVisible = true
this.queryParam={
businessId:this.$route.query.id,
businessId:this.detailId ? this.detailId : this.$route.query.id,
companyId:'',
companyName:'',
companyRole:'',
......
......@@ -175,6 +175,10 @@
name: 'xmsl',
props:{
datas:'',
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){
return{
......@@ -183,7 +187,7 @@
tipsvalue:"",//标签填写内容
xmjd:'待添加',
projectStage:[],//项目阶段
id: this.$route.query.id,
id: this.detailId ? this.detailId : this.$route.query.id,
xmsldata:this.datas,
}
},
......
......@@ -5,7 +5,7 @@
<div class="cardtitles">资料文档</div>
<div class="searchbtns">
<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>
<div class="btn btn_primary h32 b2" @click="getUP"><div class="img img2"></div>上传</div>
......@@ -20,14 +20,14 @@
:multiple="false"
ref="upload"
:file-list="fileList"
accept=".word,.pdf.excel,.xlsx"
accept=".word,.pdf.excel,.xlsx,.doc,.docx"
:headers="headers"
:show-file-list="false"
:on-success="onSuccess">
<div class="wj wj1"></div>上传文件
</el-upload>
</div>
<div>
<div style="display: none">
<el-upload
class="upload-demo"
:action="action"
......@@ -105,6 +105,13 @@
</el-pagination>
</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>
</el-card>
</div>
......@@ -116,6 +123,12 @@
import { getZLWD ,delZLWD} from "@/api/project/project";
export default {
name: 'zlwd',
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){
return{
isupload:false,
......@@ -125,15 +138,17 @@
fileList: [],
headers: {
Authorization: "Bearer " + getToken(),
filePath:this.$route.query.id,
filePath:this.detailId ? this.detailId : this.$route.query.id,
},
param:{
pageNum:1,
pagesize:20,
filePath:this.$route.query.id,
filePath:this.detailId ? this.detailId : this.$route.query.id,
keyword:'',
},
fileDatas:[],
filename:'',
ondel:"",
}
},
created(){
......@@ -142,20 +157,24 @@
},
methods:{
getall(){
this.param.filePath = this.$route.query.id
this.param.filePath = this.detailId ? this.detailId : this.$route.query.id
this.filename=''
this.headers.filePath = this.$route.query.id
this.headers.filePath = this.detailId ? this.detailId : this.$route.query.id
this.handleCurrentChange(1)
},
getList(){
getZLWD(this.param).then(res=>{
this.fileDatas = res
if(this.fileDatas.rows!=null && this.fileDatas .length>0){
this.fileDatas.forEach(item=>{
let names = item.filePath.split('\\')
if(this.fileDatas.rows!=null && this.fileDatas.rows.length>0){
this.fileDatas.rows.forEach(item=>{
let names = item.filePath.split('/')
item.name = names[names.length-1]
let types = item.name.split('.')
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 @@
getFile(row){
if(row.type == 'file'){
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.handleCurrentChange(1)
......@@ -178,20 +197,33 @@
})
},
downnlod(row){
let a = document.createElement("a");
a.setAttribute("href", row.filePath);
a.setAttribute("download", row.name);
document.body.appendChild(a);
a.click();
let param = {filePath:row.filePath}
// this.$download.saveAs(row.filePath,row.name);
this.$download.exportByPost('/business/file/download',param);
// // this.$download()
// 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){
this.$message.success('删除成功!')
this.handleCurrentChange(1)
this.ondel = ''
}
})
},
del(path){
this.ondel = path
},
handleFileListChange(file, fileList) {
if (fileList.length > 0) {
this.fileList = [fileList[fileList.length - 1]];
......@@ -225,7 +257,7 @@
//翻页
handleCurrentChange(val) {
this.param.pageNum(1)
this.param.pageNum=val
this.getList()
},
cancel(){
......@@ -240,6 +272,10 @@
</script>
<style lang="scss" scoped>
.delform{
position: fixed; left:50%; top:50%; transform:translate(-50%,-50%)
}
.filepath{
font-size: 12px;
height: 30px;
......@@ -274,7 +310,7 @@
.uploadbox{
position: absolute;
width: 124px;
height: 73px;
height: 36px;
background: #FFFFFF;
box-shadow: 0px 0px 4px 0px rgba(0,0,0,0.08);
border-radius: 2px;
......
<template>
<div>
<div class="miantitle">
<span>项目管理</span>
<span> / 商机列表</span>
<template v-if="!detailId">
<span>项目管理</span>
<span> / 商机列表</span>
</template>
<span v-else @click="cooperateList">合作情况</span>
<span> / 项目详情</span>
</div>
<div class="app-container" v-if="ProjectData">
......@@ -105,19 +108,19 @@
</div>
</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>
</template>
......@@ -138,6 +141,12 @@
export default {
name: 'detail',
components: {xmsl,jsnr,lxr,gjjl,gzdb,zlwd,xgqy},
props: {
detailId: { //从企业详情跳转过来ID
type: Number,
default: 0
}
},
data(){
return {
lastindex: 0,//上一个点击步骤
......@@ -171,7 +180,7 @@
},
created(){
this.prvinceTree()
this.id = this.$route.query.id
this.id = this.detailId ? this.detailId : this.$route.query.id
//项目阶段
getDictType('project_stage_type').then(result=>{
this.projectStage = result.code == 200 ? result.data:[]
......@@ -324,6 +333,11 @@
})
this.editXMSL(param)
},
// 跳转到企业详情合作情况
cooperateList(){
this.$emit('close-detail')
}
}
}
</script>
......
......@@ -113,12 +113,12 @@
</div>
<div class="datalist">
<div class="datali" v-for="(item,index) in datalist">
<div class="det-title" @click="toDetail(item.id)">{{item.projectName}}<span v-if="activeName!='first'" class="people"><i>{{item.nickName1}}</i>{{item.nickName}} <font color="#FA8A00" v-if="activeName!='first'">正在跟进</font></span></div>
<div class="det-title" @click="toDetail(item.id)">{{item.projectName}}<span v-if="activeName!='first' && item.followTime" class="people"><i>{{item.nickName1}}</i>{{item.nickName}} <font color="#FA8A00">正在跟进</font></span></div>
<div class="det-tips"><span class="tips tip1" v-if="item.label">{{item.label}}</span><span v-if="item.address" class="tips tip2">{{item.address}}</span></div>
<div class="det-contets">
<div class="det-con">
<span>项目类型:</span>
<span>轨道交通</span>
<span>{{item.projectType}}</span>
</div>
<div class="det-con">
<span>投资估算(万元):</span>
......
<template>
<div class="app-container">
跟进动态
<gjjl types="projectgjdt"></gjjl>
</div>
</template>
<script>
import gjjl from '../projectList/component/gjjl.vue'
export default {
name: 'Trends',
components: {gjjl,},
data() {
return {
}
......
......@@ -106,13 +106,13 @@ public class EnterpriseProjectService {
}
public TableDataInfo bidPlanPage(Object body) throws Exception {
public TableDataInfo bidPlanPage(EnterpriseProjectBidPlanPageBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/bidPlanPage", BeanUtil.beanToMap(body, false, false));
return dskOpenApiUtil.responsePage(map);
}
public R bidPlanDetail(Object body) throws Exception {
public R bidPlanDetail(EnterpriseProjectBidPlanDetailBody body) throws Exception {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/bidPlanDetail", BeanUtil.beanToMap(body, false, false));
Map data = MapUtils.getMap(map, "data", null);
String contentId = MapUtils.getString(data, "contentId");
......
......@@ -8,6 +8,7 @@ import com.dsk.common.core.domain.R;
import com.dsk.common.core.domain.model.*;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.common.utils.EncodeIdUtil;
import com.dsk.system.domain.customer.vo.CustomerStatusListVo;
import com.dsk.system.service.ICustomerService;
import org.apache.commons.collections4.CollectionUtils;
......@@ -188,4 +189,8 @@ public class EnterpriseService {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterprise/uipGroupData", null);
return BeanUtil.toBean(map, R.class);
}
public R remark(EnterpriseRemarkBody vo) throws Exception {
return R.ok(EncodeIdUtil.avDecode(EncodeIdUtil.binaryToUnicode(vo.mark)));
}
}
......@@ -14,6 +14,21 @@ import java.util.List;
*/
public interface BusinessFollowRecordMapper
{
/**
* 查询关联项目
* @param userId
* @return
*/
List<String> selectRelateProject (Integer userId);
/**
* 查询关联业主企业
* @param userId
* @return
*/
List<String> selectRelateCompany (Integer userId);
/**
* 查询项目跟进记录
*
......
......@@ -42,6 +42,16 @@ public interface EconomicService {
AjaxResult details(OpRegionalEconomicDataDetailsDto detailsDto);
/***
*@Description: 获取当前地区
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:25
*/
AjaxResult location(OpRegionalLocalDto detailsDto);
/***
*@Description: 地区经济统计
*@Param:
......@@ -61,12 +71,12 @@ public interface EconomicService {
AjaxResult regionalList(OpRegionalEconomicDataRegionalListDto dto);
/***
*@Description: 地区经济-分页列表
*@Description: 对比经济
*@Param:
*@return: com.dsk.common.core.domain.AjaxResult
*@Author: Dgm
*@date: 2023/5/18 10:25
*/
AjaxResult regionalComparison(OpRegionalEconomicDataV1Dto dto);
AjaxResult regionalCompare(OpRegionalEconomicDataStatisticsRegionalDto dto);
}
......@@ -54,6 +54,20 @@ public interface IBusinessFollowRecordService
*/
public int insertBusinessFollowRecord(BusinessFollowRecord businessFollowRecord);
/**
* 查询关联项目
* @param userId
* @return
*/
List<String> selectRelateProject (Integer userId);
/**
* 查询关联业主企业
* @param userId
* @return
*/
List<String> selectRelateCompany (Integer userId);
/**
* 修改项目跟进记录
*
......
......@@ -71,6 +71,16 @@ public class BusinessFollowRecordServiceImpl implements IBusinessFollowRecordSer
return businessFollowRecordMapper.insertBusinessFollowRecord(businessFollowRecord);
}
@Override
public List<String> selectRelateProject(Integer userId) {
return businessFollowRecordMapper.selectRelateProject(userId);
}
@Override
public List<String> selectRelateCompany(Integer userId) {
return businessFollowRecordMapper.selectRelateCompany(userId);
}
/**
* 修改项目跟进记录
*
......
......@@ -46,6 +46,12 @@ public class EconomicServiceImpl implements EconomicService {
return BeanUtil.toBean(map, AjaxResult.class);
}
@Override
public AjaxResult location(OpRegionalLocalDto detailsDto) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/economic/location", BeanUtil.beanToMap(detailsDto, false, false));
return BeanUtil.toBean(map, AjaxResult.class);
}
@Override
public AjaxResult statisticsRegional(OpRegionalEconomicDataStatisticsRegionalDto dto) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/economic/statistics/regional", BeanUtil.beanToMap(dto, false, false));
......@@ -59,8 +65,8 @@ public class EconomicServiceImpl implements EconomicService {
}
@Override
public AjaxResult regionalComparison(OpRegionalEconomicDataV1Dto dto) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/economic/xx", BeanUtil.beanToMap(dto, false, false));
public AjaxResult regionalCompare(OpRegionalEconomicDataStatisticsRegionalDto dto) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/economic/regional/compare", BeanUtil.beanToMap(dto, false, false));
return BeanUtil.toBean(map, AjaxResult.class);
}
......
......@@ -87,6 +87,18 @@
</where>
ORDER BY f.creat_time DESC
</select>
<select id="selectRelateProject" resultType="java.lang.String">
select i.project_name
from business_info i
left join business_follow_record f on f.business_id = i.id
where f.user_id = #{userId}
</select>
<select id="selectRelateCompany" resultType="java.lang.String">
select i.construction_unit
from business_info i
left join business_follow_record f on f.business_id = i.id
where f.user_id = #{userId}
</select>
<insert id="insertBusinessFollowRecord" parameterType="com.dsk.common.core.domain.entity.BusinessFollowRecord" useGeneratedKeys="true"
keyProperty="id">
......
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