Commit 648c0e1d authored by 远方不远's avatar 远方不远
parents c2f96d5c b40f2122
......@@ -33,7 +33,7 @@ public class BusinessBacklogController extends BaseController
*/
// @PreAuthorize("@ss.hasPermi('system:backlog:list')")
@GetMapping("/list")
public TableDataInfo list(@RequestBody(required=false) BusinessBacklog businessBacklog)
public TableDataInfo list(BusinessBacklog businessBacklog)
{
startPage();
List<BusinessBacklog> list = businessBacklogService.selectBusinessBacklogList(businessBacklog);
......
......@@ -28,7 +28,7 @@ public class BusinessContactsController extends BaseController
*/
// @PreAuthorize("@ss.hasPermi('system:contacts:list')")
@GetMapping("/list")
public TableDataInfo list(@RequestBody(required=false) BusinessContacts businessContacts)
public TableDataInfo list(BusinessContacts businessContacts)
{
startPage();
List<BusinessContacts> list = businessContactsService.selectBusinessContactsList(businessContacts);
......
......@@ -3,7 +3,9 @@ package com.dsk.web.controller.business;
import com.dsk.common.config.RuoYiConfig;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.domain.entity.BusinessFileVo;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.utils.StringUtils;
import com.dsk.common.utils.file.FileUploadUtils;
import com.dsk.common.utils.file.FileUtils;
import com.dsk.framework.config.ServerConfig;
......@@ -14,8 +16,10 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author lxl
......@@ -35,17 +39,17 @@ public class BusinessFileController extends BaseController {
*/
// @PreAuthorize("@ss.hasPermi('system:file:add')")
// @Log(title = "项目资料文档", businessType = BusinessType.INSERT)
@GetMapping("/new/{filePath}")
public AjaxResult newFolder(@PathVariable String filePath) {
return FileUtils.newFolder(RuoYiConfig.getProfile() + filePath) ? AjaxResult.success() : AjaxResult.error();
@PostMapping("/new")
public AjaxResult newFolder(@RequestBody(required=false) BusinessIdDto filePath) {
return FileUtils.newFolder(filePath.getFilePath()) ? AjaxResult.success() : AjaxResult.error();
}
/**
* 删除某个文件或整个文件夹
*/
@PostMapping("/remove")
public AjaxResult removeFile(@RequestBody(required=false) BusinessIdDto folderPath) {
return FileUtils.delFolder(RuoYiConfig.getProfile() + folderPath.getFolderPath()) ? AjaxResult.success() : AjaxResult.error();
public AjaxResult removeFile(@RequestBody(required=false) BusinessIdDto filePath) {
return FileUtils.delFolder(filePath.getFilePath()) ? AjaxResult.success() : AjaxResult.error();
}
/**
......@@ -53,43 +57,36 @@ public class BusinessFileController extends BaseController {
* 获取文件夹中所有文件
*/
@GetMapping(value = "/list")
public TableDataInfo getAllFiles(@RequestBody(required=false) BusinessIdDto folderPath) {
public TableDataInfo getAllFiles(BusinessIdDto filePath) {
startPage();
List<String> allFiles = FileUtils.getAllFiles(RuoYiConfig.getProfile() + folderPath.getFolderPath());
List<BusinessFileVo> allFiles;
if(StringUtils.isNumeric(filePath.getFilePath())) filePath.setFilePath(RuoYiConfig.getProfile() + filePath.getFilePath());
allFiles = FileUtils.getAllFiles(filePath.getFilePath());
//模糊查询文件
if(StringUtils.isNotEmpty(filePath.getKeyword())){
List<BusinessFileVo> allFileName = FileUtils.getAllFileNames(filePath.getFilePath());
allFiles = allFileName.stream().filter(p -> p.getFilePath().contains(filePath.getKeyword())).collect(Collectors.toList());
}
return getDataTable(allFiles);
}
/* *//**
* 上传文件及文件夹
* @param url
* @param folderPath
* @return
*//*
@GetMapping("/upload/{url}/{folderPath}")
public AjaxResult uploadFolder(@PathVariable("url") String url,@PathVariable("folderPath") String folderPath) throws IOException {
return toAjax(FileUtils.uploadFolder(url, LOCALPATH + folderPath));
}*/
/**
* 上传文件及文件夹
* @param file 文件流
* @param request 请求头参数
* @return
*/
@PostMapping("/upload/")
@PostMapping("/upload")
public AjaxResult uploadFolder(@RequestPart("file") MultipartFile file, HttpServletRequest request){
try {
String businessFileName = request.getParameter("filePath");
String businessFileName = request.getHeader("FilePath");
// 上传文件路径
String filePath = RuoYiConfig.getUploadPath()+businessFileName;
// 上传并返回新文件名称
String filePath = RuoYiConfig.getUploadPath()+businessFileName+"/";
// 上传并返回文件全路径
String fileName = FileUploadUtils.upload(filePath, file);
String url = serverConfig.getUrl() + fileName;
AjaxResult ajax = AjaxResult.success();
ajax.put("url", url);
ajax.put("fileName", fileName);
ajax.put("newFileName", FileUtils.getName(fileName));
ajax.put("originalFilename", file.getOriginalFilename());
ajax.put("url", fileName);
return ajax;
} catch (IOException e) {
return AjaxResult.error(e.getMessage());
......@@ -98,12 +95,11 @@ public class BusinessFileController extends BaseController {
/**
* 下载文件
* @param url
* @param targetFolder
* @return
* @param filePath 要下载的文件路径
* @param response 返回的响应
*/
@GetMapping("/download/{url}/{targetFolder}")
public AjaxResult downloadFolder(@PathVariable("url") String url,@PathVariable("targetFolder") String targetFolder) throws IOException {
return toAjax(FileUtils.downloadFolder(url, targetFolder));
@PostMapping("/download")
public void downloadFolder(@RequestBody BusinessIdDto filePath, HttpServletResponse response) {
FileUtils.downloadByFilePath(filePath.getFilePath(),response);
}
}
......@@ -5,6 +5,7 @@ import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.domain.entity.BusinessFollowRecord;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.system.domain.BusinessIdDto;
import com.dsk.system.domain.BusinessListDto;
import com.dsk.system.service.IBusinessFollowRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -24,16 +25,25 @@ public class BusinessFollowRecordController extends BaseController
@Autowired
private IBusinessFollowRecordService businessFollowRecordService;
/**
* 根据项目id查询项目跟进记录
* 查询关联项目
*/
// @PreAuthorize("@ss.hasPermi('system:record:list')")
// @GetMapping("/list/{businessId}")
// public TableDataInfo list(@PathVariable("businessId") Integer businessId)
// {
// startPage();
// return getDataTable(businessFollowRecordService.selectBusinessFollowRecordList(businessId));
// }
@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));
}
/**
* 新增项目跟进记录
......@@ -51,7 +61,7 @@ public class BusinessFollowRecordController extends BaseController
*/
// @PreAuthorize("@ss.hasPermi('system:record:list')")
@GetMapping("/list")
public TableDataInfo list(@RequestBody(required=false) BusinessIdDto businessId)
public TableDataInfo list(BusinessIdDto businessId)
{
startPage();
List<BusinessFollowRecord> list = businessFollowRecordService.selectBusinessFollowRecordList(businessId);
......@@ -69,6 +79,18 @@ public class BusinessFollowRecordController extends BaseController
return toAjax(businessFollowRecordService.deleteBusinessFollowRecordByIds(ids));
}
/**
* 分页查询跟进动态
*/
// @PreAuthorize("@ss.hasPermi('system:record:list')")
@GetMapping("all/list")
public TableDataInfo allFollow(BusinessListDto dto)
{
startPage();
List<BusinessFollowRecord> list = businessFollowRecordService.allFollow(dto);
return getDataTable(list);
}
// /**
// * 导出项目跟进记录列表
// */
......@@ -101,6 +123,17 @@ public class BusinessFollowRecordController extends BaseController
// public AjaxResult edit(@RequestBody BusinessFollowRecord businessFollowRecord)
// {
// return toAjax(businessFollowRecordService.updateBusinessFollowRecord(businessFollowRecord));
// }
// /**
// * 根据项目id查询项目跟进记录
// */
// @PreAuthorize("@ss.hasPermi('system:record:list')")
// @GetMapping("/list/{businessId}")
// public TableDataInfo list(@PathVariable("businessId") Integer businessId)
// {
// startPage();
// return getDataTable(businessFollowRecordService.selectBusinessFollowRecordList(businessId));
// }
}
......@@ -45,11 +45,11 @@ public class BusinessInfoController extends BaseController
}
/**
* 查询项目列表
* 分页查询项目列表
*/
// @PreAuthorize("@ss.hasPermi('system:business:list')")
@GetMapping("/list")
public TableDataInfo list(@RequestBody(required=false) BusinessListDto dto)
public TableDataInfo list(BusinessListDto dto)
{
startPage();
List<BusinessListVo> list = businessInfoService.selectBusinessInfoList(dto);
......
......@@ -37,7 +37,7 @@ public class BusinessRelateCompanyController extends BaseController
*/
// @PreAuthorize("@ss.hasPermi('system:company:list')")
@GetMapping("/list")
public TableDataInfo list(@RequestBody(required=false) BusinessRelateCompany businessRelateCompany)
public TableDataInfo list(BusinessRelateCompany businessRelateCompany)
{
startPage();
List<BusinessRelateCompany> list = businessRelateCompanyService.selectBusinessRelateCompanyList(businessRelateCompany);
......
......@@ -33,8 +33,8 @@ public class EnterpriseController {
return enterpriseService.infoHeader(body);
}
@ApiOperation(value = "企业统计信息")
@PostMapping(value = "statistic(建设库)")
@ApiOperation(value = "企业统计信息(建设库)")
@PostMapping(value = "statistic")
public R statistic(@RequestBody @Valid EnterpriseStatisticBody vo) throws Exception {
return enterpriseService.statistic(vo);
}
......@@ -117,4 +117,16 @@ 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);
}
@ApiOperation(value = "企业主体信用评级")
@PostMapping(value = "bondCreditRating")
public R remark(@RequestBody @Valid EnterpriseBondCreditRatingBody vo) throws Exception {
return enterpriseService.bondCreditRating(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 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.web.controller.search.macroMarket;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.dtos.ComposeQueryDto;
import com.dsk.system.service.RegionalEnterprisesService;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -24,7 +24,7 @@ public class RegionalEnterprisesController {
private RegionalEnterprisesService regionalEnterprisesService;
@PostMapping("regional/page")
public AjaxResult page(@RequestBody ComposeQueryDto compose) {
public TableDataInfo page(@RequestBody ComposeQueryDto compose) throws Exception{
return regionalEnterprisesService.page(compose);
}
}
......@@ -130,6 +130,6 @@ public class RuoYiConfig
*/
public static String getUploadPath()
{
return getProfile() + "/upload";
return getProfile();
}
}
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.entity;
import java.util.Date;
import com.dsk.common.annotation.Excel;
import com.dsk.common.core.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.dsk.common.annotation.Excel;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.util.Date;
/**
* 项目跟进记录对象 business_follow_record
*
......@@ -18,6 +18,16 @@ public class BusinessFollowRecord extends BaseEntity
{
private static final long serialVersionUID = 1L;
/**
* 项目名称
*/
private String projectName;
/**
* 业主单位
*/
private String ownerCompany;
/** $column.columnComment */
private Integer id;
......@@ -64,6 +74,22 @@ public class BusinessFollowRecord extends BaseEntity
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date creatTime;
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getOwnerCompany() {
return ownerCompany;
}
public void setOwnerCompany(String ownerCompany) {
this.ownerCompany = ownerCompany;
}
public String getNickName() {
return nickName;
}
......@@ -177,6 +203,8 @@ public class BusinessFollowRecord extends BaseEntity
.append("visitWay", getVisitWay())
.append("creatTime", getCreatTime())
.append("updateTime", getUpdateTime())
.append("projectName", getProjectName())
.append("ownerCompany(", getOwnerCompany())
.toString();
}
}
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 EnterpriseBondCreditRatingBody
{
/**
* 企业id
*/
@NotNull(message = "企业id不能为空")
private Integer cid;
}
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;
}
......@@ -18,5 +18,6 @@ public class EnterpriseStatisticBody
*/
@NotNull(message = "企业id不能为空")
private Integer companyId;
private Boolean isFy = false;
}
......@@ -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;
}
......@@ -12,6 +12,11 @@ import lombok.Data;
@Data
public class SpecialPurposeBondsDto {
/**
* 省Id
*/
private Integer provinceId;
/**
* 项目类型
*/
......
......@@ -12,4 +12,8 @@ import lombok.Data;
*/
@Data
public class SpecialPurposeBondsPageDto extends BasePage {
/**
* 省Id
*/
private Integer provinceId;
}
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.common.utils.file;
import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Objects;
import com.dsk.common.config.RuoYiConfig;
import com.dsk.common.constant.Constants;
import com.dsk.common.exception.file.FileNameLengthLimitExceededException;
import com.dsk.common.exception.file.FileSizeLimitExceededException;
import com.dsk.common.exception.file.InvalidExtensionException;
import com.dsk.common.utils.DateUtils;
import com.dsk.common.utils.StringUtils;
import com.dsk.common.utils.uuid.Seq;
import org.apache.commons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile;
import com.dsk.common.config.RuoYiConfig;
import com.dsk.common.utils.uuid.Seq;
import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Objects;
/**
* 文件上传工具类
......@@ -111,11 +111,13 @@ public class FileUploadUtils
assertAllowed(file, allowedExtension);
String fileName = extractFilename(file);
// String fileName = extractFilename(file);
String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath();
// String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath();
String absPath = getAbsoluteFile(baseDir, file.getOriginalFilename()).getAbsolutePath();
file.transferTo(Paths.get(absPath));
return getPathFileName(baseDir, fileName);
// return getPathFileName(baseDir, fileName);
return baseDir+file.getOriginalFilename();
}
/**
......
package com.dsk.common.utils.file;
import com.dsk.common.config.RuoYiConfig;
import com.dsk.common.core.domain.entity.BusinessFileVo;
import com.dsk.common.exception.base.BaseException;
import com.dsk.common.utils.DateUtils;
import com.dsk.common.utils.ServletUtils;
import com.dsk.common.utils.StringUtils;
import com.dsk.common.utils.uuid.IdUtils;
import lombok.extern.slf4j.Slf4j;
......@@ -25,10 +27,9 @@ import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
/**
* 文件处理工具类
......@@ -40,11 +41,6 @@ public class FileUtils
{
public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+";
public static void main(String[] args) {
System.out.println(RuoYiConfig.getProfile());
}
/**
* 检查目录是否存在,如果不存在,则创建目录,如果创建失败则返回false
*
......@@ -251,8 +247,8 @@ public class FileUtils
* @param filePath 全路径
* @return
*/
public static List<String> getAllFiles(String filePath) {
List<String> fileList = new ArrayList<String>();
public static List<BusinessFileVo> getAllFiles(String filePath) {
List<BusinessFileVo> fileList = new ArrayList<>();
File file = new File(filePath);
if (!file.exists()) {
......@@ -269,11 +265,11 @@ public class FileUtils
for (File directory : files) {
// 如果是文件夹则递归调用此方法
if (directory.isDirectory()) {
fileList.add(directory.getPath());
fileList.add(new BusinessFileVo(directory.getPath(),new SimpleDateFormat("yyyy-MM-dd").format(directory.lastModified())));
getAllFiles(directory.getPath());
} else {
// 如果是文件则直接输出路径
fileList.add(directory.getPath());
fileList.add(new BusinessFileVo(directory.getPath(),new SimpleDateFormat("yyyy-MM-dd").format(directory.lastModified())));
}
}
return fileList;
......@@ -287,8 +283,8 @@ public class FileUtils
* @param path 文件夹路径
* @return List<File>
*/
public static List<File> getAllFileNames(String path) {
List<File> fileList = new ArrayList<File>();
public static List<BusinessFileVo> getAllFileNames(String path) {
List<BusinessFileVo> fileList = new ArrayList<>();
File file = new File(path);
if (!file.exists()) {
return fileList;
......@@ -305,10 +301,10 @@ public class FileUtils
tempFile = new File(path + File.separator + fileName);
}
if (tempFile.isFile()) {
fileList.add(tempFile);
fileList.add(new BusinessFileVo(tempFile.getPath(),new SimpleDateFormat("yyyy-MM-dd").format(tempFile.lastModified())));
}
if (tempFile.isDirectory()) {
List<File> allFiles = getAllFileNames(tempFile.getAbsolutePath());
List<BusinessFileVo> allFiles = getAllFileNames(tempFile.getAbsolutePath());
fileList.addAll(allFiles);
}
}
......@@ -316,46 +312,95 @@ public class FileUtils
}
/**
* 下载文件
* @param url 要下载的文件链接
* @param targetFolder 目标文件
* 根据文件路径下载文件
* @param filePath 要下载的文件路径
* @param response 返回的响应
*/
public static void downloadByFilePath(String filePath, HttpServletResponse response) {
try {
// path是指想要下载的文件的路径
File file = new File(filePath);
// log.info(file.getPath());
if (!file.exists()) throw new BaseException("文件不存在!");
// 获取文件名
String filename = file.getName();
// log.info("文件名: "+filename);
// 获取文件后缀名
// String ext = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase();
// log.info("文件后缀名:" + ext);
// 将文件写入输入流
FileInputStream fileInputStream = new FileInputStream(file);
InputStream fis = new BufferedInputStream(fileInputStream);
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
// 清空response
response.reset();
// 设置response的Header
response.setCharacterEncoding("UTF-8");
//文件类型
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
//文件名称
response.addHeader("Download-filename", URLEncoder.encode(filename, "UTF-8"));
// 告知浏览器文件的大小
response.addHeader("Content-Length", "" + file.length());
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
outputStream.write(buffer);
fis.close();
outputStream.flush();
} catch (IOException ex) {
ex.printStackTrace();
}
}
/**
* 根据文件url下载文件
* @param filePath 要下载的文件链接
* @param response 响应体
* @return
* @throws IOException
*/
public static boolean downloadFolder(String url, String targetFolder) throws IOException {
URL downloadUrl = new URL(url);
HttpURLConnection connection = (HttpURLConnection) downloadUrl.openConnection();
connection.setRequestMethod("GET");
connection.connect();
if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
throw new RuntimeException("下载文件夹失败: " + connection.getResponseMessage());
}
try (ZipInputStream zipInputStream = new ZipInputStream(connection.getInputStream())) {
ZipEntry entry;
while ((entry = zipInputStream.getNextEntry()) != null) {
String entryName = entry.getName();
if (StringUtils.isBlank(entryName)) {
continue;
}
public static void downloadByUrl(String filePath, HttpServletResponse response){
// String fileUrl = request.getParameter("fileUrl"); // 获取文件链接
File entryFile = new File(targetFolder, entryName);
if (entry.isDirectory()) {
entryFile.mkdirs();
} else {
File parent = entryFile.getParentFile();
if (!parent.exists()) {
parent.mkdirs();
}
try (FileOutputStream outputStream = new FileOutputStream(entryFile)) {
IOUtils.copy(zipInputStream, outputStream);
}
}
try {
URL url = new URL(filePath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
// 设置响应头,告诉浏览器下载文件
String contentType = connection.getContentType(); // 获取文件类型
response.setContentType(contentType);
String filename = extractFilenameFromUrl(filePath); // 从链接中提取文件名
response.setHeader("Content-Disposition", "attachment; filename=" + filename + "");
// 将文件流写入响应输出流
InputStream inputStream = connection.getInputStream();
byte[] buffer = new byte[4096];
int bytesRead = -1;
while ((bytesRead = inputStream.read(buffer)) != -1) {
response.getOutputStream().write(buffer, 0, bytesRead);
}
inputStream.close();
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
// 从文件链接中提取文件名
public static String extractFilenameFromUrl(String url) {
int slashIndex = url.lastIndexOf('/');
int dotIndex = url.lastIndexOf('.');
if (dotIndex == -1 || dotIndex < slashIndex) {
return "download";
}
return url.substring(slashIndex + 1);
}
/**
......@@ -571,4 +616,17 @@ public class FileUtils
String baseName = FilenameUtils.getBaseName(fileName);
return baseName;
}
/**
* 获取本地服务的域名,端口
* @return
*/
public static String getUrl()
{
HttpServletRequest request = ServletUtils.getRequest();
StringBuffer url = request.getRequestURL();
String contextPath = request.getServletContext().getContextPath();
return url.delete(url.length() - request.getRequestURI().length(), url.length()).append(contextPath).toString();
}
}
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").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({
......
import request from '@/utils/request'
//全国经济大全列表
export function nationalPage(param) {
return request({
url: '/economic/national/nationalPage',
method: 'POST',
data: param
})
}
//全国经济大全详情
export function getNationalDetails(param) {
return request({
url: '/economic/details',
method: 'POST',
data: param
})
}
//获取年份-下拉
export function getYears(param) {
return request({
url: '/economic/years/list',
method: 'POST',
data: param
})
}
//全国按月招标统计
export function countGroupByMonth(param) {
return request({
url: '/marketAnalysis/countGroupByMonth',
method: 'POST',
data: param
})
}
//按属地统计招标数量
export function countGroupByProvince(param) {
return request({
url: '/marketAnalysis/countGroupByProvince',
method: 'POST',
data: param
})
}
//获取年份-下拉
export function getYear() {
return request({
url: '/marketAnalysis/getYear',
method: 'POST',
})
}
//全国建筑企业概览-资质等级按照行业、等级类型分组
export function certGroupByMajorAndLevel() {
return request({
url: '/marketAnalysis/certGroupByMajorAndLevel',
method: 'POST',
})
}
//全国建筑企业地区分布-资质等级按照行业、省份、等级类型分组
export function certGroupByMajorProvinceLevel() {
return request({
url: '/marketAnalysis/certGroupByMajorProvinceLevel',
method: 'POST',
})
}
//全国建筑企业备案分布-各省份备案企业统计
export function areaGroupByProvince() {
return request({
url: '/marketAnalysis/areaGroupByProvince',
method: 'POST',
})
}
//区域经济
//地区经济-统计
export function regional(param) {
return request({
url: '/economic/statistics/regional',
method: 'POST',
data: param
})
}
//地区经济-获取当前位置
export function location(param) {
return request({
url: '/economic/location',
method: 'POST',
data: param
})
}
//地区经济-主要指标列表
export function regionalList(param) {
return request({
url: '/economic/regional/list',
method: 'POST',
data: param
})
}
//产业结构-按年份选择 各个项目类型项目总数
export function bidGroupCountByProjectType(param) {
return request({
url: '/marketAnalysis/bidGroupCountByProjectType',
method: 'POST',
data: param
})
}
//产业结构-近两年各个项目类型项目总数及金额占比
export function bidMoneyGroupByProjectType(param) {
return request({
url: '/marketAnalysis/bidMoneyGroupByProjectType',
method: 'POST',
data: param
})
}
//对比经济
export function regionalCompare(param) {
return request({
url: '/economic/regional/compare',
method: 'POST',
data: param
})
}
//区域专项债-项目类别统计
export function statistics(param) {
return request({
url: '/specialPurposeBonds/bond/statistics',
method: 'POST',
data: param
})
}
//区域专项债-专项债项目分页列表
export function projectsPage(param) {
return request({
url: '/specialPurposeBonds/projects/page',
method: 'POST',
data: param
})
}
//区域专项债-专项债项目详情
export function details(param) {
return request({
url: '/specialPurposeBonds/details',
method: 'POST',
data: param
})
}
//区域专项债-专项债项目详情-专项债分页列表
export function bondPage(param) {
return request({
url: '/specialPurposeBonds/bond/page',
method: 'POST',
data: param
})
}
//区域企业
export function enterprise(param) {
return request({
url: '/enterprise/page',
method: 'POST',
data: param
})
}
......@@ -108,9 +108,8 @@ export function addGJJL(param) {
//删除跟进记录
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,
})
}
......@@ -40,6 +40,16 @@ function changeStr(str, index, changeStr) {
return str.substr(0, index) + changeStr + str.substr(index + changeStr.length)
}
//甲方详情子页面互跳
function changePath(that, pathName){
try {
that.$parent.showPartPage({pathName})
} catch {
that.$parent.$parent.showPartPage({pathName})
}
}
export {
encodeStr
encodeStr,
changePath
}
......@@ -10,6 +10,11 @@
>span{
opacity: 0.4;
&:last-child{opacity:0.8}
&.on:hover{
color: #0081FF;
opacity: 1;
cursor: pointer;
}
}
}
.overflows{
......@@ -71,6 +76,8 @@
.con{
>span{
opacity: 0.8;
float: left;
margin-top: 3px;
}
.inputxt{
display: inline-block;
......@@ -579,8 +586,8 @@
}
}
.el-input__prefix{
left: 8px;
.el-input__prefix .el-input__icon{
//left: 8px;
top: -2px;
position: absolute;
}
......@@ -869,6 +876,7 @@
.img{
float: left;
margin-right: 8px;
margin-top: -2px;
}
}
}
......
......@@ -42,7 +42,7 @@ export default {
.hasTagsView {
.app-main {
/* 84 = navbar + tags-view = 50 + 34 */
min-height: calc(100vh - 84px);
min-height: calc(100vh - 56px);
background: #F5F5F5;
}
......
......@@ -62,11 +62,26 @@ 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 => {
console.log(res)
const blob = new Blob([res.data], { type: 'application/octet-stream/pdf/doc/xlsx/xls/docx' })
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);
}
},
}
......@@ -89,28 +89,45 @@ export const constantRoutes = [
]
},
{
path: '/party',
path: '/enterprise',
component: Layout,
hidden: true,
name: 'Party',
name: 'Enterprise',
redirect: 'noredirect',
children: [
{
path: 'party-a',
path: '/enterprise/:id',
component: () => import('@/views/detail/party-a/index'),
name: 'PartyA',
meta: { title: '甲方详情' },
},
}
]
},
{
path: '/company',
component: Layout,
hidden: true,
name: 'Company',
redirect: 'noredirect',
children: [
{
path: 'party-b',
path: '/company/:id',
component: () => import('@/views/detail/party-b/index'),
name: 'PartyB',
meta: { title: '已方详情' }
},
}
]
},
{
path: '/structure',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: 'structure',
path: 'graph',
component: () => import('@/views/detail/structure/index'),
name: 'Structure',
name: 'Graph',
meta: { title: '企业链图' }
}
]
......@@ -125,7 +142,7 @@ export const constantRoutes = [
path: '/macro/financing/details/:id(\\d+)',
component: () => import('@/views/macro/financing/details'),
name: 'financingDetails',
meta: { title: '区域专项债详情'}
meta: { title: '区域专项债详情',icon: ''}
}
]
},
......@@ -227,9 +244,9 @@ export const constantRoutes = [
}
]
},
]
// 动态路由,基于用户权限动态去加载
......
......@@ -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)
}
......@@ -20,7 +20,7 @@
<div class="btn" @click="handleCurrentChange(1)">搜索</div>
</div>
<div class="dc">
<div class="total">126</div>
<div class="total">{{tableData.total}}</div>
<div class="btn-export" @click="pldrs"><img src="@/assets/images/project/import.png">批量导入</div>
<div class="btn btn_primary h32 p10" @click="opennew"><div class="img img1"></div>添加客户</div>
</div>
......@@ -47,8 +47,8 @@
<div class="ps1">
<div class="wordprimary ps2" @click="toDetail(scope.row.companyId,'')">{{scope.row.companyName}}</div>
<div class="ps3">
<div @click="toDetail(scope.row.companyId,1)">写跟进<img src="@/assets/images/project/edit_1.png"></div>
<div @click="toDetail(scope.row.companyId,2)">编辑信息<img src="@/assets/images/project/edit_2.png"></div>
<div @click="toDetail(scope.row,'gjjl')">写跟进<img src="@/assets/images/project/edit_1.png"></div>
<div @click="toDetail(scope.row,'preference')">编辑信息<img src="@/assets/images/project/edit_2.png"></div>
</div>
</div>
</template>
......@@ -99,7 +99,7 @@
label="注册资本金(万元)"
width="140">
<template slot-scope="scope">
{{scope.row.registerCapitalStr || '--'}}
{{scope.row.registerCapital || '--'}}
</template>
</el-table-column>
<el-table-column
......@@ -227,7 +227,7 @@
</el-dialog>
</el-card>
</div>
<batchimport v-if="pldr" :importtype="types" @cancels="importCancel" @getdatas="handleCurrentChange(1)"></batchimport>
<batchimport v-if="pldr" :importtype="types" @cancels="cancelimport" @getdatas="handleCurrentChange(1)"></batchimport>
</div>
</template>
......@@ -304,7 +304,7 @@ export default {
pldrs(){
this.pldr = true
},
importCancel(){
cancelimport(){
this.pldr = false
},
//获取客户列表
......@@ -314,12 +314,11 @@ export default {
})
},
//跳转到客户详情
toDetail(id,type){
if(type == 1){//跟进
}else if(type == 2){//编辑信息
}
toDetail(row,type){
let customerId = row.customerId
let companyId = row.companyId
let path = type
this.$router.push({path:'/party/party-a',query:{customerId:customerId,companyId:companyId,path:path}})
},
//翻页
handleCurrentChange(val) {
......
......@@ -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{
......
......@@ -4,36 +4,27 @@
<el-breadcrumb separator="/">
<el-breadcrumb-item :to="{ path: '/enterpriseData' }">企业数据</el-breadcrumb-item>
<el-breadcrumb-item :to="{ path: '/enterpriseData?tag=1' }">查企业</el-breadcrumb-item>
<el-breadcrumb-item>中铁一建</el-breadcrumb-item>
<el-breadcrumb-item>{{companyInfo.simpleName || companyInfo.companyName || '--'}}</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="flex-box part-header">
<img class="header-logo" src="@/assets/images/avatar.png">
中交第二航务工程局有限公司
<img class="header-logo" :src="companyInfo.logoUrl || require('@/assets/images/detail/company_logo.png')">
{{companyInfo.companyName || '--'}}
</div>
</div>
</template>
<script>
import { infoHeader } from '@/api/detail/party-a/index'
export default {
name: 'Header',
props: ['companyId'],
props: ['companyId', 'companyInfo'],
data() {
return {
enterprise: {}
}
},
created() {
this.getInfoHeader()
},
methods: {
async getInfoHeader(){
let { data } = await infoHeader({companyId:this.companyId})
if( data.code == 200){
this.enterprise = data.data
}
}
}
}
</script>
......
......@@ -8,6 +8,7 @@
</el-input>
<el-menu
:default-active="routeIndex"
:unique-opened="true"
class="detail-menu"
@open="handleOpen">
<template v-for="(item, index) in sideRoute">
......@@ -17,7 +18,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 +39,10 @@ export default {
type: String,
default: null
},
customerId: {
type: String,
default: ''
}
},
data() {
return {
......@@ -78,14 +86,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: {
......@@ -106,7 +120,7 @@ export default {
break
}else if(sideArr[i].children){
for(let j=0; j< sideArr[i].children.length ; j++){
if(sideArr[i].children.pathName == this.pathName){
if(sideArr[i].children[j].pathName == this.pathName){
idx = i+'-'+j
break
}
......@@ -127,6 +141,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>
......@@ -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>
<template>
<div class="app-container part-container">
<Header :company-id="companyId" v-if="companyId" />
<Header :company-id="companyId" :companyInfo="companyInfo" 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">
<!-- 企业概览 -->
<Overview v-if="currentPath.pathName=='overview'" :company-id="companyId" />
<Overview v-if="currentPath.pathName=='overview'" :company-id="companyId" :companyInfo="companyInfo" />
<Businfo v-if="currentPath.pathName=='businfo'" :company-id="companyId" />
<Holderinfo v-if="currentPath.pathName=='holderinfo'" :company-id="companyId" />
<Execuinfo v-if="currentPath.pathName=='execuinfo'" :company-id="companyId" />
......@@ -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: '', //企业Id(测试默认3068)
customerId: '', //企业Id(测试默认'a00d582a6041f32c16aac804e4924736')
currentPath: {
pathName: 'overview' //默认展示页
},
......@@ -145,21 +151,18 @@ export default {
}
},
created() {
if (this.$route.query.companyId) { // 获取companyId
let id = this.$route.query.companyId
this.getCompanyId(id)
if (this.$route.params.id) { // 获取companyId
let companyId = this.$route.params.id
this.getCompanyId(companyId)
}
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")
erd.listenTo(partBox, element => {
_this.$nextTick(() => {
_this.partBoxHeight = partBox.offsetHeight
})
})
},
methods: {
showPartPage(e){
......@@ -167,10 +170,26 @@ export default {
},
// 解密
async getCompanyId(companyId){
let { data } = await idRemark({companyId})
if( data.code == 200){
this.companyId = data.data
let { data } = await idRemark({mark:companyId})
if( data ){
this.companyId = data
this.$nextTick(() => {
this.listenSider()
})
this.handleQuery()
}
},
async handleQuery() {
let res = await infoHeader({companyId:this.companyId})
if(res.code==200){
this.companyInfo = res.data
}
},
listenSider(){
const _this = this, erd = elementResizeDetectorMaker(), partBox = document.getElementById("partBox")
erd.listenTo(partBox, element => {
_this.partBoxHeight = partBox.offsetHeight
})
}
}
}
......@@ -190,5 +209,6 @@ export default {
.part-right{
min-width: 1088px;
width: 100%;
background: #FFFFFF;
}
</style>
......@@ -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
}
}
}
......
<template>
<div class="app-container part-container">
<div class="view-content"><Infoheader /></div><!-- 企业信息 -->
<div class="view-content"><Infoheader :companyId="companyId" :companyInfo="companyInfo" /></div><!-- 企业信息 -->
<div class="view-content"><Operations /></div><!-- 公司经营 -->
<div class="view-content"><Bidding /></div><!--招标偏好、业务往来-->
<div class="view-content"><Busclue /></div><!--商机线索-->
......@@ -22,7 +22,7 @@ import Risk from './component/risk'
import Tender from "./component/tender"
export default {
name: 'Overview',
props: ['companyId'],
props: ['companyId', 'companyInfo'],
components: {
Infoheader,
Operations,
......@@ -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
},
......
......@@ -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: []},
......
......@@ -19,9 +19,9 @@ export default {
}
},
created() {
if (this.$route.query.companyId) { // 获取companyId
if (this.$route.params.id) { // 获取companyId
this.loading = true
this.src = `https://pre-plug.jiansheku.com/enterprise/${this.$route.query.companyId}?secretId=${this.secretId}`
this.src = `https://pre-plug.jiansheku.com/enterprise/${this.$route.params.id}?secretId=${this.secretId}`
}
},
mounted() {
......
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment