Commit 715f3f0d authored by zhangyi's avatar zhangyi

Merge remote-tracking branch 'origin/master'

parents 4dbeb127 21bf2946
package com.dsk.web.controller.business; package com.dsk.web.controller.business;
import java.util.List; import com.dsk.common.core.controller.BaseController;
import javax.annotation.PostConstruct; import com.dsk.common.core.domain.AjaxResult;
import javax.servlet.http.HttpServletResponse;
import com.dsk.common.core.domain.entity.BusinessBacklog; import com.dsk.common.core.domain.entity.BusinessBacklog;
import com.dsk.common.utils.poi.ExcelUtil; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.system.service.IBusinessBacklogService; import com.dsk.system.service.IBusinessBacklogService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping; import java.util.List;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.dsk.common.annotation.Log;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.enums.BusinessType;
import com.dsk.common.core.page.TableDataInfo;
/** /**
* 项目工作待办Controller * 项目工作待办Controller
......
package com.dsk.web.controller.business; package com.dsk.web.controller.business;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.dsk.common.core.domain.entity.BusinessContacts;
import com.dsk.common.utils.poi.ExcelUtil;
import com.dsk.system.service.IBusinessContactsService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.dsk.common.annotation.Log;
import com.dsk.common.core.controller.BaseController; import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult; import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.enums.BusinessType; import com.dsk.common.core.domain.entity.BusinessContacts;
import com.dsk.common.core.page.TableDataInfo; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.system.service.IBusinessContactsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/** /**
* 项目联系人Controller * 项目联系人Controller
......
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.page.TableDataInfo;
import com.dsk.common.utils.file.FileUploadUtils;
import com.dsk.common.utils.file.FileUtils;
import com.dsk.framework.config.ServerConfig;
import com.dsk.system.domain.BusinessIdDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.List;
/**
* @author lxl
* @Description: 项目文件管理Controller
* @Date 2023/5/30 上午 8:44
**/
@Slf4j
@RestController
@RequestMapping("/business/file")
public class BusinessFileController extends BaseController {
@Autowired
private ServerConfig serverConfig;
/**
* 新建文件夹
*/
// @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("/remove")
public AjaxResult removeFile(@RequestBody(required=false) BusinessIdDto folderPath) {
return FileUtils.delFolder(RuoYiConfig.getProfile() + folderPath.getFolderPath()) ? AjaxResult.success() : AjaxResult.error();
}
/**
* 分页查询项目的所有文件
* 获取文件夹中所有文件
*/
@GetMapping(value = "/list")
public TableDataInfo getAllFiles(@RequestBody(required=false) BusinessIdDto folderPath) {
startPage();
List<String> allFiles = FileUtils.getAllFiles(RuoYiConfig.getProfile() + folderPath.getFolderPath());
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/")
public AjaxResult uploadFolder(@RequestPart("file") MultipartFile file, HttpServletRequest request){
try {
String businessFileName = request.getParameter("filePath");
// 上传文件路径
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());
return ajax;
} catch (IOException e) {
return AjaxResult.error(e.getMessage());
}
}
/**
* 下载文件
* @param url
* @param targetFolder
* @return
*/
@GetMapping("/download/{url}/{targetFolder}")
public AjaxResult downloadFolder(@PathVariable("url") String url,@PathVariable("targetFolder") String targetFolder) throws IOException {
return toAjax(FileUtils.downloadFolder(url, targetFolder));
}
}
package com.dsk.web.controller.business; package com.dsk.web.controller.business;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.dsk.common.core.domain.entity.BusinessFollowRecord;
import com.dsk.system.service.IBusinessFollowRecordService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.dsk.common.annotation.Log;
import com.dsk.common.core.controller.BaseController; import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult; import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.enums.BusinessType; import com.dsk.common.core.domain.entity.BusinessFollowRecord;
import com.dsk.common.utils.poi.ExcelUtil;
import com.dsk.common.core.page.TableDataInfo; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.system.domain.BusinessIdDto;
import com.dsk.system.service.IBusinessFollowRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/** /**
* 项目跟进记录Controller * 项目跟进记录Controller
...@@ -39,11 +28,12 @@ public class BusinessFollowRecordController extends BaseController ...@@ -39,11 +28,12 @@ public class BusinessFollowRecordController extends BaseController
* 根据项目id查询项目跟进记录 * 根据项目id查询项目跟进记录
*/ */
// @PreAuthorize("@ss.hasPermi('system:record:list')") // @PreAuthorize("@ss.hasPermi('system:record:list')")
@GetMapping("/list/{businessId}") // @GetMapping("/list/{businessId}")
public AjaxResult list(@PathVariable Integer businessId) // public TableDataInfo list(@PathVariable("businessId") Integer businessId)
{ // {
return success(businessFollowRecordService.selectBusinessFollowRecordList(businessId)); // startPage();
} // return getDataTable(businessFollowRecordService.selectBusinessFollowRecordList(businessId));
// }
/** /**
* 新增项目跟进记录 * 新增项目跟进记录
...@@ -60,13 +50,24 @@ public class BusinessFollowRecordController extends BaseController ...@@ -60,13 +50,24 @@ public class BusinessFollowRecordController extends BaseController
* 分页查询项目跟进记录 * 分页查询项目跟进记录
*/ */
// @PreAuthorize("@ss.hasPermi('system:record:list')") // @PreAuthorize("@ss.hasPermi('system:record:list')")
// @GetMapping("/list") @GetMapping("/list")
// public TableDataInfo list(BusinessFollowRecord businessFollowRecord) public TableDataInfo list(@RequestBody(required=false) BusinessIdDto businessId)
// { {
// startPage(); startPage();
// List<BusinessFollowRecord> list = businessFollowRecordService.selectBusinessFollowRecordList(businessFollowRecord); List<BusinessFollowRecord> list = businessFollowRecordService.selectBusinessFollowRecordList(businessId);
// return getDataTable(list); return getDataTable(list);
// } }
/**
* 删除项目跟进记录
*/
// @PreAuthorize("@ss.hasPermi('system:record:remove')")
// @Log(title = "项目跟进记录", businessType = BusinessType.DELETE)
@DeleteMapping("remove/{ids}")
public AjaxResult remove(@PathVariable(value = "ids",required=false) Long[] ids)
{
return toAjax(businessFollowRecordService.deleteBusinessFollowRecordByIds(ids));
}
// /** // /**
// * 导出项目跟进记录列表 // * 导出项目跟进记录列表
...@@ -102,14 +103,4 @@ public class BusinessFollowRecordController extends BaseController ...@@ -102,14 +103,4 @@ public class BusinessFollowRecordController extends BaseController
// return toAjax(businessFollowRecordService.updateBusinessFollowRecord(businessFollowRecord)); // return toAjax(businessFollowRecordService.updateBusinessFollowRecord(businessFollowRecord));
// } // }
// /**
// * 删除项目跟进记录
// */
// @PreAuthorize("@ss.hasPermi('system:record:remove')")
// @Log(title = "项目跟进记录", businessType = BusinessType.DELETE)
// @DeleteMapping("/{ids}")
// public AjaxResult remove(@PathVariable Long[] ids)
// {
// return toAjax(businessFollowRecordService.deleteBusinessFollowRecordByIds(ids));
// }
} }
package com.dsk.web.controller.business; package com.dsk.web.controller.business;
import java.util.List; import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.domain.entity.BusinessInfo; import com.dsk.common.core.domain.entity.BusinessInfo;
import com.dsk.common.dtos.BusinessInfoDto; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.system.domain.BusinessAddDto; import com.dsk.system.domain.BusinessAddDto;
import com.dsk.system.domain.BusinessListDto; import com.dsk.system.domain.BusinessListDto;
import com.dsk.system.domain.vo.BusinessBrowseVo;
import com.dsk.system.domain.vo.BusinessListVo; import com.dsk.system.domain.vo.BusinessListVo;
import com.dsk.system.service.IBusinessInfoService; import com.dsk.system.service.IBusinessInfoService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import com.dsk.common.annotation.Log;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.enums.BusinessType;
import com.dsk.common.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest; import java.util.List;
import javax.servlet.http.HttpServletResponse;
/** /**
* 项目详情Controller * 项目详情Controller
...@@ -69,9 +61,9 @@ public class BusinessInfoController extends BaseController ...@@ -69,9 +61,9 @@ public class BusinessInfoController extends BaseController
*/ */
// @PreAuthorize("@ss.hasPermi('system:business:query')") // @PreAuthorize("@ss.hasPermi('system:business:query')")
@GetMapping("/browse/{businessId}") @GetMapping("/browse/{businessId}")
public AjaxResult browse(@PathVariable Integer id) public AjaxResult browse(@PathVariable("businessId") Integer businessId)
{ {
return success(businessInfoService.browse(id)); return success(businessInfoService.browse(businessId));
} }
/** /**
...@@ -88,7 +80,7 @@ public class BusinessInfoController extends BaseController ...@@ -88,7 +80,7 @@ public class BusinessInfoController extends BaseController
* 删除项目列表 * 删除项目列表
*/ */
// @PreAuthorize("@ss.hasPermi('system:business:remove')") // @PreAuthorize("@ss.hasPermi('system:business:remove')")
@Log(title = "项目管理", businessType = BusinessType.DELETE) // @Log(title = "项目管理", businessType = BusinessType.DELETE)
@DeleteMapping("/remove/{ids}") @DeleteMapping("/remove/{ids}")
public AjaxResult remove(@PathVariable(value = "ids",required=false) Long[] ids) public AjaxResult remove(@PathVariable(value = "ids",required=false) Long[] ids)
{ {
...@@ -99,7 +91,7 @@ public class BusinessInfoController extends BaseController ...@@ -99,7 +91,7 @@ public class BusinessInfoController extends BaseController
* 新增项目详情 * 新增项目详情
*/ */
// @PreAuthorize("@ss.hasPermi('system:business:add')") // @PreAuthorize("@ss.hasPermi('system:business:add')")
@Log(title = "项目管理", businessType = BusinessType.INSERT) // @Log(title = "项目管理", businessType = BusinessType.INSERT)
@PostMapping("/add") @PostMapping("/add")
public AjaxResult add(@RequestBody BusinessAddDto dto) public AjaxResult add(@RequestBody BusinessAddDto dto)
{ {
...@@ -110,7 +102,7 @@ public class BusinessInfoController extends BaseController ...@@ -110,7 +102,7 @@ public class BusinessInfoController extends BaseController
* 修改项目详情 * 修改项目详情
*/ */
// @PreAuthorize("@ss.hasPermi('system:business:edit')") // @PreAuthorize("@ss.hasPermi('system:business:edit')")
@Log(title = "项目管理", businessType = BusinessType.UPDATE) // @Log(title = "项目管理", businessType = BusinessType.UPDATE)
@PostMapping("/edit") @PostMapping("/edit")
public AjaxResult edit(@RequestBody BusinessInfo businessInfo) public AjaxResult edit(@RequestBody BusinessInfo businessInfo)
{ {
......
package com.dsk.web.controller.business; package com.dsk.web.controller.business;
import java.util.List; import com.dsk.common.core.controller.BaseController;
import javax.servlet.http.HttpServletResponse; import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.domain.entity.BusinessLabel; import com.dsk.common.core.domain.entity.BusinessLabel;
import com.dsk.common.utils.poi.ExcelUtil;
import com.dsk.system.domain.BusinessIdDto; import com.dsk.system.domain.BusinessIdDto;
import com.dsk.system.service.IBusinessLabelService; import com.dsk.system.service.IBusinessLabelService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.dsk.common.annotation.Log;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.enums.BusinessType;
import com.dsk.common.core.page.TableDataInfo;
/** /**
* 项目标签Controller * 项目标签Controller
......
package com.dsk.web.controller.business; package com.dsk.web.controller.business;
import java.util.List; import com.dsk.common.core.controller.BaseController;
import javax.servlet.http.HttpServletResponse; import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.domain.entity.BusinessRelateCompany; import com.dsk.common.core.domain.entity.BusinessRelateCompany;
import com.dsk.common.utils.poi.ExcelUtil; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.system.domain.BusinessIdDto; import com.dsk.system.domain.BusinessIdDto;
import com.dsk.system.service.IBusinessRelateCompanyService; import com.dsk.system.service.IBusinessRelateCompanyService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping; import java.util.List;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.dsk.common.annotation.Log;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.enums.BusinessType;
import com.dsk.common.core.page.TableDataInfo;
/** /**
* 项目关联单位Controller * 项目相关企业Controller
* *
* @author lxl * @author lxl
* @date 2023-05-17 * @date 2023-05-17
...@@ -37,7 +25,7 @@ public class BusinessRelateCompanyController extends BaseController ...@@ -37,7 +25,7 @@ public class BusinessRelateCompanyController extends BaseController
private IBusinessRelateCompanyService businessRelateCompanyService; private IBusinessRelateCompanyService businessRelateCompanyService;
/** /**
* 查询关联单位角色 * 查询相关企业角色
*/ */
@PostMapping("/role/list") @PostMapping("/role/list")
public AjaxResult companyRoleList(@RequestBody BusinessIdDto dto){ public AjaxResult companyRoleList(@RequestBody BusinessIdDto dto){
...@@ -45,7 +33,7 @@ public class BusinessRelateCompanyController extends BaseController ...@@ -45,7 +33,7 @@ public class BusinessRelateCompanyController extends BaseController
} }
/** /**
* 查询项目关联单位列表 * 查询项目相关企业列表
*/ */
// @PreAuthorize("@ss.hasPermi('system:company:list')") // @PreAuthorize("@ss.hasPermi('system:company:list')")
@GetMapping("/list") @GetMapping("/list")
...@@ -78,6 +66,17 @@ public class BusinessRelateCompanyController extends BaseController ...@@ -78,6 +66,17 @@ public class BusinessRelateCompanyController extends BaseController
return toAjax(businessRelateCompanyService.updateBusinessRelateCompany(businessRelateCompany)); return toAjax(businessRelateCompanyService.updateBusinessRelateCompany(businessRelateCompany));
} }
/**
* 删除项目关联单位
*/
// @PreAuthorize("@ss.hasPermi('system:company:remove')")
// @Log(title = "项目关联单位", businessType = BusinessType.DELETE)
@DeleteMapping("/remove/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(businessRelateCompanyService.deleteBusinessRelateCompanyByIds(ids));
}
// /** // /**
// * 导出项目关联单位列表 // * 导出项目关联单位列表
// */ // */
...@@ -101,15 +100,4 @@ public class BusinessRelateCompanyController extends BaseController ...@@ -101,15 +100,4 @@ public class BusinessRelateCompanyController extends BaseController
// return success(businessRelateCompanyService.selectBusinessRelateCompanyById(id)); // return success(businessRelateCompanyService.selectBusinessRelateCompanyById(id));
// } // }
//
// /**
// * 删除项目关联单位
// */
// @PreAuthorize("@ss.hasPermi('system:company:remove')")
// @Log(title = "项目关联单位", businessType = BusinessType.DELETE)
// @DeleteMapping("/{ids}")
// public AjaxResult remove(@PathVariable Long[] ids)
// {
// return toAjax(businessRelateCompanyService.deleteBusinessRelateCompanyByIds(ids));
// }
} }
package com.dsk.web.controller.search.controller; package com.dsk.web.controller.search.controller;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult; import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.dtos.ComposeQueryDto; import com.dsk.common.dtos.ComposeQueryDto;
import com.dsk.web.controller.search.service.MarketAnalysisService; import com.dsk.web.controller.search.service.MarketAnalysisService;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -9,6 +11,9 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -9,6 +11,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
/** /**
...@@ -18,7 +23,7 @@ import javax.annotation.Resource; ...@@ -18,7 +23,7 @@ import javax.annotation.Resource;
*/ */
@RequestMapping("/marketAnalysis") @RequestMapping("/marketAnalysis")
@RestController @RestController
public class MarketAnalysisController { public class MarketAnalysisController extends BaseController {
@Resource @Resource
...@@ -46,9 +51,8 @@ public class MarketAnalysisController { ...@@ -46,9 +51,8 @@ public class MarketAnalysisController {
/* /*
* 资质等级按照大类、省份、等级类型分组 * 资质等级按照大类、省份、等级类型分组
*/ */
@RequestMapping("/certGroupByCategoryProvinceLevel") @RequestMapping("/certGroupByMajorProvinceLevel")
public AjaxResult certGroupByCategoryProvinceLevel() { public AjaxResult certGroupByMajorProvinceLevel() {
return marketAnalysisService.certGroupByMajorProvinceLevel(); return marketAnalysisService.certGroupByMajorProvinceLevel();
} }
...@@ -82,15 +86,27 @@ public class MarketAnalysisController { ...@@ -82,15 +86,27 @@ public class MarketAnalysisController {
* 中标数量按省份分组 * 中标数量按省份分组
*/ */
@RequestMapping("/countGroupByProvince") @RequestMapping("/countGroupByProvince")
public AjaxResult countGroupByProvince(@RequestBody ComposeQueryDto compose) { public AjaxResult countGroupByProvince(@RequestBody JSONObject object) {
return marketAnalysisService.countGroupByProvince(compose); return marketAnalysisService.countGroupByProvince(object);
}
@RequestMapping("/getYear")
public TableDataInfo getYear(){
List<Integer> list = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
int nowYear = calendar.get(Calendar.YEAR);
list.add(nowYear);
for (int i = 1; i < 5; i++) {
list.add(nowYear-i);
}
return getDataTable(list);
} }
/* /*
* 中标数量按月份分组 * 中标数量按月份分组
*/ */
@RequestMapping("/countGroupByMonth") @RequestMapping("/countGroupByMonth")
public AjaxResult countGroupByMonth(@RequestBody ComposeQueryDto compose) { public AjaxResult countGroupByMonth(@RequestBody JSONObject object) {
return marketAnalysisService.countGroupByMonth(compose); return marketAnalysisService.countGroupByMonth(object);
} }
} }
package com.dsk.web.controller.search.macroMarket; package com.dsk.web.controller.search.macroMarket;
import com.dsk.common.core.domain.AjaxResult; import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.OpRegionalEconomicDataRegionalListDto; import com.dsk.common.dtos.*;
import com.dsk.common.dtos.OpRegionalEconomicDataStatisticsRegionalDto;
import com.dsk.common.dtos.OpRegionalEconomicDataV1PageDto;
import com.dsk.system.service.EconomicService; import com.dsk.system.service.EconomicService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -44,9 +42,9 @@ public class RegionalEconomicDataController { ...@@ -44,9 +42,9 @@ public class RegionalEconomicDataController {
*@Author: Dgm *@Author: Dgm
*@date: 2023/5/18 10:29 *@date: 2023/5/18 10:29
*/ */
@GetMapping("/years/list") @PostMapping("/years/list")
public AjaxResult yearsList() { public AjaxResult yearsList(@RequestBody OpRegionalEconomicDataYearsListDto dto) {
return economicService.yearsList(); return economicService.yearsList(dto);
} }
...@@ -57,9 +55,9 @@ public class RegionalEconomicDataController { ...@@ -57,9 +55,9 @@ public class RegionalEconomicDataController {
*@Author: Dgm *@Author: Dgm
*@date: 2023/5/18 10:29 *@date: 2023/5/18 10:29
*/ */
@GetMapping("/details/{id}") @PostMapping("/details")
public AjaxResult details(@PathVariable("id") Integer id) { public AjaxResult details(@RequestBody @Valid OpRegionalEconomicDataDetailsDto detailsDto) {
return economicService.details(id); return economicService.details(detailsDto);
} }
......
package com.dsk.web.controller.search.macroMarket; package com.dsk.web.controller.search.macroMarket;
import com.dsk.common.core.domain.AjaxResult; import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.dtos.SpecialBondInformationDetailsDto;
import com.dsk.common.dtos.SpecialBondInformationPageDto; import com.dsk.common.dtos.SpecialBondInformationPageDto;
import com.dsk.common.dtos.SpecialPurposeBondsDto; import com.dsk.common.dtos.SpecialPurposeBondsDto;
import com.dsk.common.dtos.SpecialPurposeBondsPageDto; import com.dsk.common.dtos.SpecialPurposeBondsPageDto;
...@@ -8,6 +9,8 @@ import com.dsk.system.service.SpecialPurposeBondsService; ...@@ -8,6 +9,8 @@ import com.dsk.system.service.SpecialPurposeBondsService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/** /**
* @ClassName SpecialBondProjectsController * @ClassName SpecialBondProjectsController
* @Description 专项债项目 * @Description 专项债项目
...@@ -42,9 +45,9 @@ public class SpecialBondProjectsController { ...@@ -42,9 +45,9 @@ public class SpecialBondProjectsController {
*@Author: Dgm *@Author: Dgm
*@date: 2023/5/18 10:29 *@date: 2023/5/18 10:29
*/ */
@GetMapping("/details/{id}") @PostMapping("/details")
public AjaxResult details(@PathVariable("id") String id) { public AjaxResult details(@RequestBody @Valid SpecialBondInformationDetailsDto detailsDto) {
return specialPurposeBondsService.details(id); return specialPurposeBondsService.details(detailsDto);
} }
......
...@@ -17,9 +17,9 @@ public interface MarketAnalysisService { ...@@ -17,9 +17,9 @@ public interface MarketAnalysisService {
AjaxResult certGroupByMajorProvinceLevel(); AjaxResult certGroupByMajorProvinceLevel();
AjaxResult countGroupByProvince(ComposeQueryDto compose); AjaxResult countGroupByProvince(JSONObject object);
AjaxResult countGroupByMonth(ComposeQueryDto compose); AjaxResult countGroupByMonth(JSONObject object);
AjaxResult bidMoneyGroupByProjectType(JSONObject object); AjaxResult bidMoneyGroupByProjectType(JSONObject object);
......
...@@ -56,14 +56,14 @@ public class MarketAnalysisServiceImpl implements MarketAnalysisService { ...@@ -56,14 +56,14 @@ public class MarketAnalysisServiceImpl implements MarketAnalysisService {
} }
@Override @Override
public AjaxResult countGroupByProvince(ComposeQueryDto compose) { public AjaxResult countGroupByProvince(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/countGroupByProvince", BeanUtil.beanToMap(compose, false, false)); Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/countGroupByProvince", object);
return BeanUtil.toBean(map, AjaxResult.class); return BeanUtil.toBean(map, AjaxResult.class);
} }
@Override @Override
public AjaxResult countGroupByMonth(ComposeQueryDto compose) { public AjaxResult countGroupByMonth(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/countGroupByDate", BeanUtil.beanToMap(compose, false, false)); Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/countGroupByMonth", object);
return BeanUtil.toBean(map, AjaxResult.class); return BeanUtil.toBean(map, AjaxResult.class);
} }
} }
...@@ -8,8 +8,9 @@ ruoyi: ...@@ -8,8 +8,9 @@ ruoyi:
copyrightYear: 2023 copyrightYear: 2023
# 实例演示开关 # 实例演示开关
demoEnabled: true demoEnabled: true
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/server/dsk-operate-sys/uploadPath)
profile: D:/dsk-operate-sys/uploadPath # profile: D:/dsk-operate-sys/uploadPath/
profile: /home/server/dsk-operate-sys/uploadPath/
# 获取ip地址开关 # 获取ip地址开关
addressEnabled: false addressEnabled: false
# 验证码类型 math 数组计算 char 字符验证 # 验证码类型 math 数组计算 char 字符验证
......
...@@ -150,6 +150,18 @@ ...@@ -150,6 +150,18 @@
<artifactId>dsk-acc-open-sdk-java</artifactId> <artifactId>dsk-acc-open-sdk-java</artifactId>
<version>${dsk-openapi-sdk.version}</version> <version>${dsk-openapi-sdk.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5.13</version>
</dependency>
</dependencies> </dependencies>
</project> </project>
...@@ -142,6 +142,78 @@ public class BusinessInfo extends BaseEntity ...@@ -142,6 +142,78 @@ public class BusinessInfo extends BaseEntity
@Excel(name = "评标委员会") @Excel(name = "评标委员会")
private String evaluationBidCouncil; private String evaluationBidCouncil;
/** 建设单位 */
@Excel(name = "建设单位")
private String constructionUnit;
/** 建设单位负责人 */
@Excel(name = "建设单位负责人")
private String constructionPrincipal;
/** 建设单位联系电话 */
@Excel(name = "建设单位联系电话")
private String constructionPhone;
/** 主管单位 */
@Excel(name = "主管单位")
private String supervisorUnit;
/** 主管单位负责人 */
@Excel(name = "主管单位负责人")
private String supervisorPrincipal;
/** 主管单位联系电话 */
@Excel(name = "主管单位联系电话")
private String supervisorPhone;
public String getConstructionUnit() {
return constructionUnit;
}
public void setConstructionUnit(String constructionUnit) {
this.constructionUnit = constructionUnit;
}
public String getConstructionPrincipal() {
return constructionPrincipal;
}
public void setConstructionPrincipal(String constructionPrincipal) {
this.constructionPrincipal = constructionPrincipal;
}
public String getConstructionPhone() {
return constructionPhone;
}
public void setConstructionPhone(String constructionPhone) {
this.constructionPhone = constructionPhone;
}
public String getSupervisorUnit() {
return supervisorUnit;
}
public void setSupervisorUnit(String supervisorUnit) {
this.supervisorUnit = supervisorUnit;
}
public String getSupervisorPrincipal() {
return supervisorPrincipal;
}
public void setSupervisorPrincipal(String supervisorPrincipal) {
this.supervisorPrincipal = supervisorPrincipal;
}
public String getSupervisorPhone() {
return supervisorPhone;
}
public void setSupervisorPhone(String supervisorPhone) {
this.supervisorPhone = supervisorPhone;
}
public String getEvaluationBidWay() { public String getEvaluationBidWay() {
return evaluationBidWay; return evaluationBidWay;
} }
...@@ -437,6 +509,12 @@ public class BusinessInfo extends BaseEntity ...@@ -437,6 +509,12 @@ public class BusinessInfo extends BaseEntity
.append("earnestMoneyPay", getEarnestMoneyPay()) .append("earnestMoneyPay", getEarnestMoneyPay())
.append("earnestMoney", getEarnestMoney()) .append("earnestMoney", getEarnestMoney())
.append("evaluationBidCouncil", getEvaluationBidCouncil()) .append("evaluationBidCouncil", getEvaluationBidCouncil())
.append("constructionUnit", getConstructionUnit())
.append("constructionPrincipal", getConstructionPrincipal())
.append("constructionPhone", getConstructionPhone())
.append("supervisorUnit", getSupervisorUnit())
.append("supervisorPrincipal", getSupervisorPrincipal())
.append("supervisorPhone", getSupervisorPhone())
.toString(); .toString();
} }
} }
...@@ -53,6 +53,10 @@ public class BusinessRelateCompany extends BaseEntity ...@@ -53,6 +53,10 @@ public class BusinessRelateCompany extends BaseEntity
@Excel(name = "对接深度/竞争力度") @Excel(name = "对接深度/竞争力度")
private String depth; private String depth;
/** 企业类型 */
@Excel(name = "企业类型")
private String companyType;
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
...@@ -66,6 +70,7 @@ public class BusinessRelateCompany extends BaseEntity ...@@ -66,6 +70,7 @@ public class BusinessRelateCompany extends BaseEntity
.append("createTime", getCreateTime()) .append("createTime", getCreateTime())
.append("updateTime", getUpdateTime()) .append("updateTime", getUpdateTime())
.append("depth", getDepth()) .append("depth", getDepth())
.append("companyType", getCompanyType())
.toString(); .toString();
} }
......
package com.dsk.common.dtos;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @ClassName OpRegionalEconomicDataV1Dto
* @Description 区域经济大全-详情
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class OpRegionalEconomicDataDetailsDto {
/**
* id
*/
@NotNull(message = "id 不能为空")
private Integer id;
}
package com.dsk.common.dtos;
import lombok.Data;
/**
* @ClassName OpRegionalEconomicDataYearsListDto
* @Description 获取年份
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class OpRegionalEconomicDataYearsListDto {
private Integer year;
}
package com.dsk.common.dtos;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @ClassName SpecialBondInformationDetailsDto
* @Description 专项债-详情
* @Author Dgm
* @Date 2023/5/23 14:05
* @Version
*/
@Data
public class SpecialBondInformationDetailsDto {
/**
* 专项债券唯一标识
*/
@NotNull(message = "id 不能为空")
private Integer id;
}
...@@ -71,3 +71,12 @@ export function historySendProvince(data) { ...@@ -71,3 +71,12 @@ export function historySendProvince(data) {
data: data data: data
}) })
} }
// 投标记录列表
export function tenderPage(data) {
return request({
url: '/enterpriseBussiness/tenderPage',
method: 'post',
data: data
})
}
...@@ -32,3 +32,11 @@ export function urbanInvestmentPage(data) { ...@@ -32,3 +32,11 @@ export function urbanInvestmentPage(data) {
data data
}) })
} }
// 同地区城投-查询选项
export function uipGroupData(data) {
return request({
url: '/enterprise/uipGroupData',
method: 'post',
data
})
}
...@@ -44,6 +44,23 @@ export function editXMNR(param) { ...@@ -44,6 +44,23 @@ export function editXMNR(param) {
data:param data:param
}) })
} }
//项目标签新增
export function addLabel(param) {
return request({
url: '/business/label/add',
method: 'POST',
data:param
})
}
//项目标签删除
export function removeLabel(param) {
return request({
url: '/business/label/remove',
method: 'POST',
data:param
})
}
//查询项目联系人 //查询项目联系人
export function getLXR(param) { export function getLXR(param) {
...@@ -124,3 +141,20 @@ export function editGZDB(param) { ...@@ -124,3 +141,20 @@ export function editGZDB(param) {
data:param data:param
}) })
} }
//查询相关企业
export function getXGQY(param) {
return request({
url: '/business/company/list',
method: 'GET',
params:param
})
}
//新增相关企业
export function addXGQY(param) {
return request({
url: '/business/company/add',
method: 'POST',
data:param
})
}
...@@ -318,7 +318,7 @@ select { ...@@ -318,7 +318,7 @@ select {
.jabph_popper_box { .jabph_popper_box {
position: absolute; position: absolute;
left: 146px; left: 144px;
bottom: -1px; bottom: -1px;
background: #ffffff; background: #ffffff;
width: 186px; width: 186px;
......
...@@ -199,6 +199,36 @@ export const constantRoutes = [ ...@@ -199,6 +199,36 @@ export const constantRoutes = [
} }
] ]
}, },
{
path: '/BidRecord',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/radar/BidRecord/details/:id(\\d+)',
component: () => import('@/views/radar/BidRecord/details'),
name: 'BidRecordDetails',
meta: { title: '开标记录详情', icon: 'radar' }
}
]
},
{
path: '/Bidding',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/radar/Bidding/details/:id(\\d+)',
component: () => import('@/views/radar/Bidding/details'),
name: 'BiddingDetails',
meta: { title: '招标计划详情', icon: 'radar' }
}
]
},
] ]
......
<template>
<div :ref="refStr" class="custom-money-select screen-popper" id="custom-money-select">
<div :class="['input-block', isSelectOption?'rote':'']">
<div class="block" @click="isSelectOption=!isSelectOption" @mouseenter="handleMouseenter" @mouseleave="handleMouseleave">
<el-input class="custom-money-input" v-model="value" :placeholder="placeholder" readonly>
<template slot="suffix">
<span @click.stop="handleClear" :class="[isClear&&isHover?'el-icon-circle-close':'el-icon-arrow-down']"></span>
</template>
</el-input>
</div>
<div class="options-block" v-if="isSelectOption">
<div class="arrow"></div>
<div @click="handleClick(option)" :class="['option', value==option?'active':'']" :key="i" v-for="(option, i) in options">
<template v-if="option == '自定义'">
<div class="number-box">
<input type="number" v-model="startMoney" class="number-input" clearable>&nbsp;&nbsp;&nbsp;&nbsp;<input v-model="endMoney" class="number-input" type="text" clearable>&nbsp;&nbsp;万元&nbsp;&nbsp;<el-button @click.stop="handleConfirm" class="number-button" type="primary">确定</el-button>
</div>
</template>
<template v-else>
<span>{{option}}</span> <span v-if="value==option" class="el-icon-check"></span>
</template>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
'placeholder': {
type: String,
default: '请选择'
},
'ref-str': {
type: String,
default: `timeselect${String(Math.random(0, 100)).slice(2)}`,
},
permissions: { //文本权限相关字段
type: Array,
default: () => {},
},
powerLabel: {
type: String,
default: ''
},
moneyList: {
type: Array,
default: () => [],
}
},
computed: {
isClear() {
if(!this.isSelectOption && this.value) {
return true
}else {
return false
}
}
},
data() {
return {
value: '',
options: ['一亿以上', '5000万-1亿', '1000万-5000万', '1000万以下', '自定义'],
isSelectOption: false,
startMoney: '',
endMoney: '',
isHover: false
}
},
mounted() {
this.handleAppClick()
if(this.moneyList&&this.moneyList.length>0){
this.options = this.moneyList
}
},
destroyed() {
const app = document.getElementById('app')
app.removeEventListener('click', ()=>{}, true)
},
methods: {
// 判断是否点击的为组件内部
handleAppClick() {
const app = document.getElementById('app')
app.addEventListener('click', (e) => {
const dom = this.$refs[this.refStr]
const flag = dom && dom.contains(e.target)
// const flag = document.getElementById('custom-money-select').contains(e.target)
!flag ? this.isSelectOption = false : ''
if(this.value == '自定义' && !this.startMoney && !this.endMoney) {
this.value = ''
this.$emit('input', '')
this.$emit('handle-search')
}
}, true)
},
// 清除
handleClear() {
if(this.isClear && this.isHover) {
this.value = ''
this.startMoney = ''
this.endMoney = ''
this.$emit('input', '')
this.$emit('handle-search')
}else {
this.isSelectOption = true
}
},
// 鼠标移入后的回调
handleMouseenter() {
this.isHover = true
},
// 鼠标离开后的回调
handleMouseleave() {
this.isHover = false
},
// 选项点击后的回调
handleClick(value) {
this.value = value
let moneyStr = ''
if(value == '自定义') {
this.value = '自定义'
}else {
this.startMoney = ''
this.endMoney = ''
this.isSelectOption = false
switch (value) {
case '一亿以上':
moneyStr = [10000]
break;
case '5000万-1亿':
moneyStr = [5000, 10000]
break;
case '1000万-5000万':
moneyStr = [1000, 5000]
break;
case '10亿以上':
moneyStr = [100000]
break;
case '1亿-10亿':
moneyStr = [10000, 100000]
break;
case '2000万-1亿':
moneyStr = [2000, 10000]
break;
case '400万-2000万':
moneyStr = [400, 2000]
break;
case '400万以下':
moneyStr = [, 400]
break;
default:
moneyStr = [, 1000]
break;
}
this.$emit('input', moneyStr)
this.$emit('handle-search')
}
},
// 自定义确认点击后的回调
handleConfirm() {
this.isSelectOption = false
if(!this.startMoney && !this.endMoney) {
this.value = ''
this.$emit('input', '')
}else {
if(this.endMoney && this.startMoney) {
this.value = `${this.startMoney}-${this.endMoney}万`
}else {
if(this.startMoney) {
this.value = `大于等于${this.startMoney}万`
}
if(this.endMoney) {
this.value = `小于等于${this.endMoney}万`
}
}
let moneyStr = [this.startMoney, this.endMoney]
this.$emit('input', moneyStr)
}
this.$emit('handle-search')
}
}
}
</script>
<style lang="scss">
.custom-money-select {
width: 120px;
height: 34px;
position: relative;
.input-block {
margin: 0;
width: 100%;
height: 100%;
cursor: pointer;
.block {
width: 100%;
height: 100%;
>.custom-money-input.el-input {
width: 100%;
height: 100%;
>input {
width: 100%;
height: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
border-radius: 2px;
}
}
}
.el-input__suffix {
transform: rotateZ(0);
width: 25px;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
&.rote {
.el-input__suffix {
transform: rotateZ(180deg);
}
}
}
.options-block {
position: absolute;
margin-top: 12px;
min-width: 120px;
font-size: 14px;
color: #666666;
background-color: #fff;
border: 1px solid #E4E7ED;
padding: 6px 0;
border-radius: 4px;
z-index: 9;
// .arrow {
// position: absolute;
// width: 0;
// height: 0;
// top: -12px;
// left: 35px;
// border: 6px solid transparent;
// border-bottom-color: #E4E7ED;
// &::after {
// position: absolute;
// display: inline-block;
// left: -4px;
// top: -2px;
// content: '';
// width: 0;
// height: 0;
// border: 4px solid transparent;
// border-bottom-color: #fff;
// z-index: 9;
// }
// }
.option {
padding: 0 24px 0 16px;
box-sizing: border-box;
width: 400px;
height: 36px;
display: flex;
justify-content: space-between;
align-items: center;
.number-box {
display: flex;
align-items: center;
>span {
margin: 0 10px;
}
.number-input {
padding: 0 24px 0 10px;
width: 100px !important;
height: 30px;
line-height: 30px;
border: none;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
width: 206px;
border: 1px solid #DCDCDC;
border-radius: 2px;
&::-webkit-outer-spin-button,
&::-webkit-inner-spin-button {
-webkit-appearance: none;
}
&[type="number"]{
-moz-appearance: textfield;
}
}
.number-button {
padding: 0;
width: 60px;
height: 30px;
line-height: 30px;
margin-left: 10px;
}
}
>span {
display: inline-block;
}
&.active {
background-color: #F2F7FF;
color: #0381FA;
}
&:hover {
background-color: #F5F7FA;
}
}
}
.number-input {
padding: 0 24px 0 10px;
width: 60px !important;
height: 30px;
line-height: 30px;
border: none;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
width: 206px;
border: 1px solid #DCDCDC;
border-radius: 2px;
&::-webkit-outer-spin-button,
&::-webkit-inner-spin-button {
-webkit-appearance: none;
}
&[type="number"]{
-moz-appearance: textfield;
}
}
.number-button {
padding: 0;
width: 60px;
height: 30px;
line-height: 30px;
margin-left: 10px;
}
}
</style>
<template>
<div :ref="refStr" class="custom-time-select screen-popper" id="custom-time-select">
<div :class="['input-block', isSelectOption?'rote':'']">
<div class="block" @click="isSelectOption=!isSelectOption" @mouseenter="handleMouseenter" @mouseleave="handleMouseleave">
<el-input class="custom-time-input" v-model="value" :placeholder="placeholder" readonly>
<template slot="suffix">
<span @click.stop="handleClear" :class="[isClear&&isHover?'el-icon-circle-close':'el-icon-arrow-down']"></span>
</template>
</el-input>
</div>
<div class="options-block" v-if="isSelectOption">
<div class="arrow"></div>
<div @click="handleClick(option)" :class="['option', value==option?'active':'']" :key="i" v-for="(option, i) in options">
<template v-if="option == '自定义'">
<div style="position: relative">
自定义
<el-date-picker
ref="picker"
:default-value="defaultValue"
style="position: absolute;opacity: 0;"
v-model="pickerValue"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd"
:picker-options="pickerOptions"
@change="changePicker">
</el-date-picker>
</div>
</template>
<template v-else>
<span>{{option}}</span> <span v-if="value==option" class="el-icon-check"></span>
</template>
</div>
</div>
</div>
<div v-if="isSelectOption" class="picker-block" ref="picker-block"></div>
</div>
</template>
<script>
export default {
props: {
'placeholder': {
type: String,
default: '请选择',
},
'ref-str': {
type: String,
default: `timeselect${String(Math.random(0, 100)).slice(2)}`,
},
dateFrom: {
type: String,
default: ''
},
dateTo: {
type: String,
default: ''
}
},
computed: {
isClear() {
if(!this.isSelectOption && this.value) {
return true
}else {
return false
}
},
pickerOptions() {
// 用计算属性
let _this = this
// 此时 this指向的就是vue实例
return {
disabledDate(time) {
if(_this.dateFrom){
return time.getTime() < new Date(_this.dateFrom.replace(/-/g, '/')).getTime() - 8.64e6;//如果没有后面的-8.64e6就是不可以选择今天的
}
if(_this.dateTo){
return time.getTime() > new Date(_this.dateTo.replace(/-/g, '/')).getTime();//如果没有后面的-8.64e7就是不可以选择今天的
}
}
}
},
},
watch: {
refStr(refStr) {
return refStr
}
},
data() {
return {
value: '',
options: ['近1年', '近2年', '近3年', '近5年', '自定义',],
isSelectOption: false,
isHover: false,
pickerValue: [],
defaultValue:new Date()
}
},
mounted() {
if(this.dateTo){
this.defaultValue = new Date(this.dateTo)
}
this.handleAppClick()
},
methods: {
// 时间格式化
formatDate(timeStr) {
let date = new Date(Number(timeStr))
let year = date.getFullYear()
let month = String(date.getMonth() + 1).padStart(2, 0)
let day = String(date.getDate()).padStart(2, 0)
return `${year}-${month}-${day}`
},
// 判断是否点击的为组件内部
handleAppClick() {
const app = document.getElementById('app')
app.addEventListener('click', (e) => {
const dom = this.$refs[this.refStr]
const flag = dom && dom.contains(e.target)
// const flag = document.getElementById('custom-time-select').contains(e.target)
!flag ? this.isSelectOption = false : ''
if(this.value == '自定义' && (!this.pickerValue || !this.pickerValue.length)) {
this.value = ''
this.$emit('input', '')
this.$emit('handle-search')
}
}, true)
},
handleMouseenter() {
this.isHover = true
},
handleMouseleave() {
this.isHover = false
},
handleClear() {
if(this.isClear && this.isHover) {
this.value = ''
this.pickerValue = []
this.$emit('input', '')
this.$emit('handle-search')
}else {
this.isSelectOption = true
}
},
handleClick(value) {
this.value = value
if(value == '自定义') {
this.value = '自定义'
this.$refs.picker && this.$refs.picker.length && this.$refs.picker[0].focus()
this.$nextTick(() => {
this.$refs['picker-block'].appendChild(this.$refs.picker[0].popperElm)
})
}else {
this.pickerValue = []
this.isSelectOption = false
let timeStr = []
let startTime = ''
let endTime = new Date()
switch (value) {
case '近1年':
startTime = new Date().setFullYear(new Date().getFullYear() - 1)
if(this.dateTo){
startTime = new Date(this.dateTo).setFullYear(new Date(this.dateTo).getFullYear() - 1)
}
timeStr = [this.formatDate(startTime), this.formatDate(endTime)]
break;
case '近2年':
startTime = new Date().setFullYear(new Date().getFullYear() - 2)
if(this.dateTo){
startTime = new Date(this.dateTo).setFullYear(new Date(this.dateTo).getFullYear() - 2)
}
timeStr = [this.formatDate(startTime), this.formatDate(endTime)]
break;
case '近3年':
startTime = new Date().setFullYear(new Date().getFullYear() - 3)
if(this.dateTo){
startTime = new Date(this.dateTo).setFullYear(new Date(this.dateTo).getFullYear() - 3)
}
timeStr = [this.formatDate(startTime), this.formatDate(endTime)]
break;
case '近5年':
startTime = new Date().setFullYear(new Date().getFullYear() - 5)
if(this.dateTo){
startTime = new Date(this.dateTo).setFullYear(new Date(this.dateTo).getFullYear() - 5)
}
timeStr = [this.formatDate(startTime), this.formatDate(endTime)]
break;
default:
if(this.pickerValue && this.pickerValue.length) {
timeStr = this.pickerValue
}else {
timeStr = []
this.value = ''
}
break;
}
this.$emit('input', timeStr)
this.$emit('handle-search')
}
},
// 时间选择改变后的回调
changePicker(value) {
this.isSelectOption = false
if(value && value.length) {
// this.value = '自定义'
this.value = String(this.pickerValue)
this.$emit('input', this.pickerValue)
}else {
this.value = ''
this.$emit('input', '')
}
this.$emit('handle-search')
}
}
}
</script>
<style lang="scss">
.custom-time-select {
width: 120px;
height: 34px;
.input-block {
width: 100%;
height: 100%;
margin: 0;
cursor: pointer;
.block {
width: 100%;
height: 100%;
>.custom-time-input.el-input {
width: 100%;
height: 100%;
>input {
width: 100%;
height: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
border-radius: 2px;
}
}
}
.el-input__suffix {
transform: rotateZ(0);
width: 25px;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
&.rote {
.el-input__suffix {
transform: rotateZ(180deg);
}
}
}
.options-block {
position: absolute;
margin-top: 12px;
min-width: 120px;
font-size: 14px;
color: #666666;
background-color: #fff;
border: 1px solid #E4E7ED;
padding: 6px 0;
border-radius: 4px;
z-index: 9;
.option {
padding: 0 24px 0 16px;
box-sizing: border-box;
height: 36px;
display: flex;
justify-content: space-between;
align-items: center;
>span {
display: inline-block;
}
&.active {
background-color: #F2F7FF;
color: #0381FA;
}
&:hover {
background-color: #F5F7FA;
}
}
}
.picker-block {
position: relative;
&::after {
content:"";
display:block;
visibility:hidden;
clear:both;
}
.el-picker-panel.el-date-range-picker.el-popper {
left: 0 !important;
top: 205px !important;
}
.popper__arrow {
left: 30px !important;
}
}
}
</style>
...@@ -53,6 +53,23 @@ ...@@ -53,6 +53,23 @@
<el-option v-for="(item, index) in form.options" :key="index" :label="item.name" :value="item.value" /> <el-option v-for="(item, index) in form.options" :key="index" :label="item.name" :value="item.value" />
</el-select> </el-select>
</template> </template>
<!-- 时间、自定义 -->
<template v-else-if="form.type==5">
<custom-time-select
v-model="form.value"
:placeholder="form.placeholder"
:dateFrom="form.dateFrom ? form.dateFrom : ''"
:dateTo="form.dateTo ? form.dateTo : ''"
@handle-search="changeSelect" />
</template>
<!-- 金额 -->
<template v-else-if="form.type==6">
<custom-money-select
:moneyList="form.moneyList"
v-model="form.value"
:placeholder="form.placeholder"
@handle-search="changeSelect" />
</template>
<!-- 自定义 --> <!-- 自定义 -->
<template v-if="form.type==0"> <template v-if="form.type==0">
<slot name="slot"></slot> <slot name="slot"></slot>
...@@ -74,6 +91,8 @@ ...@@ -74,6 +91,8 @@
</template> </template>
<script> <script>
import CustomTimeSelect from './CustomTimeSelect'
import CustomMoneySelect from './CustomMoneySelect'
export default { export default {
name: "HeadForm", name: "HeadForm",
props: { props: {
...@@ -111,6 +130,10 @@ export default { ...@@ -111,6 +130,10 @@ export default {
} }
}, },
components: {
CustomTimeSelect,
CustomMoneySelect
},
methods: { methods: {
changeSelect(){ changeSelect(){
this.$emit('handle-search') this.$emit('handle-search')
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
border border
fit fit
highlight-current-row highlight-current-row
:default-sort = 'defaultSort'
@sort-change="sortChange" @sort-change="sortChange"
> >
<el-table-column <el-table-column
...@@ -27,7 +28,7 @@ ...@@ -27,7 +28,7 @@
:min-width="item.minWidth" :min-width="item.minWidth"
:align="item.align?item.align:'left'" :align="item.align?item.align:'left'"
:fixed="item.fixed" :fixed="item.fixed"
:sortable="item.sortable" :sortable="item.sortable ? 'custom' : false"
:resizable="false"> :resizable="false">
<template v-if="item.slotHeader" slot="header"> <template v-if="item.slotHeader" slot="header">
<slot :name="item.slotName"></slot> <slot :name="item.slotName"></slot>
...@@ -65,6 +66,10 @@ export default { ...@@ -65,6 +66,10 @@ export default {
type: Boolean, type: Boolean,
default: false default: false
}, },
defaultSort: {
type: Object,
default: null
},
tableData: { tableData: {
type: Array, type: Array,
default: [] default: []
...@@ -109,4 +114,7 @@ export default { ...@@ -109,4 +114,7 @@ export default {
::v-deep .el-table__body tr.current-row > td.el-table__cell{ ::v-deep .el-table__body tr.current-row > td.el-table__cell{
background-color: #ffffff; background-color: #ffffff;
} }
::v-deep .el-table__fixed{
height: calc(100% - 16px) !important;
}
</style> </style>
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
<tables <tables
:indexFixed="true" :indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading" :tableLoading="tableLoading"
:tableData="tableData" :tableData="tableData"
:forData="forData" :forData="forData"
...@@ -56,10 +57,11 @@ export default { ...@@ -56,10 +57,11 @@ export default {
pageNum: 1, pageNum: 1,
pageSize: 10 pageSize: 10
}, },
defaultSort: {prop: 'issueTime', order: 'descending'},
forData: [ forData: [
{label: '招标代理单位名称', prop: 'agency', minWidth: '350', slot: true}, {label: '招标代理单位名称', prop: 'agency', minWidth: '350', slot: true},
{label: '合作项目/工程名称', prop: 'projectInfo', minWidth: '400', sortable: true, slot: true}, {label: '合作项目/工程名称', prop: 'projectInfo', minWidth: '400', slot: true, sortable: 'custom', descending: '5', ascending: '6'},
{label: '最近一次合作时间', prop: 'issueTime', minWidth: '140', sortable: true} {label: '最近一次合作时间', prop: 'issueTime', minWidth: '140', sortable: 'custom', descending: '3', ascending: '4'}
], ],
formData: [ formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []}, { type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []},
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
:query-params="queryParams" :query-params="queryParams"
:total="tableDataTotal" :total="tableDataTotal"
:isExcel="true" :isExcel="true"
@handle-search="handleSearch"
/> />
<tables <tables
...@@ -17,13 +18,13 @@ ...@@ -17,13 +18,13 @@
:queryParams="queryParams" :queryParams="queryParams"
@handle-current-change="handleCurrentChange" @handle-current-change="handleCurrentChange"
> >
<template slot="customName" slot-scope="scope"> <template slot="name" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.customId&&scope.row.customName">{{ scope.row.customName }}</router-link> <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>{{ scope.row.customName || '--' }}</div> <div v-else v-html="scope.row.name || '--'"></div>
</template> </template>
<template slot="use" slot-scope="scope"> <template slot="source" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.useId&&scope.row.use">{{ scope.row.use }}</router-link> <span class="a-link" v-if="scope.row.url&&scope.row.source" @click="handlePic(scope.row.url)" style="cursor: pointer;">{{ scope.row.source }}</span>
<div v-else>{{ scope.row.use || '--' }}</div> <div v-else>{{ scope.row.source || '--' }}</div>
</template> </template>
</tables> </tables>
</div> </div>
...@@ -31,7 +32,7 @@ ...@@ -31,7 +32,7 @@
<script> <script>
import mixin from '../mixins/mixin' import mixin from '../mixins/mixin'
import { getList } from '@/api/detail/party-a/dealings' import {tenderPage} from '@/api/detail/party-a/dealings'
export default { export default {
name: 'Bidrecords', name: 'Bidrecords',
props: ['companyId'], props: ['companyId'],
...@@ -47,13 +48,15 @@ export default { ...@@ -47,13 +48,15 @@ export default {
pageSize: 10 pageSize: 10
}, },
forData: [ forData: [
{label: '招标代理单位名称', prop: 'customName', minWidth: '320', slot: true}, {label: '项目名称', prop: 'name', minWidth: '320', slot: true},
{label: '本企业投标报价(万元)', prop: 'way', minWidth: '160'}, {label: '本企业投标报价(万元)', prop: 'tenderOffer', minWidth: '160'},
{label: '发布日期', prop: 'way', minWidth: '100'}, {label: '发布日期', prop: 'publishTime', minWidth: '100'},
{label: '中标地区', prop: 'way', minWidth: '160'}, {label: '项目地区', prop: 'province', minWidth: '160'},
{label: '信息来源', prop: 'use', minWidth: '280', slot: true} {label: '信息来源', prop: 'source', minWidth: '280', slot: true}
],
formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入项目名称查询', options: []},
], ],
formData: [],
//列表 //列表
tableLoading:false, tableLoading:false,
tableData:[], tableData:[],
...@@ -66,22 +69,18 @@ export default { ...@@ -66,22 +69,18 @@ export default {
this.handleQuery() this.handleQuery()
}, },
methods: { methods: {
handleQuery() { async handleQuery(params) {
this.tableLoading = true this.tableLoading = true
getList(this.queryParams).then((res) => { let param = params?params:this.queryParams
this.tableLoading = false let res = await tenderPage(param)
this.tableData = [ this.tableLoading = false
{ if(res.code==200){
customId: '1', this.tableData = res.rows
customName:'滨州医学院口腔医学大楼铝合金门窗供货及安装', }
use:'城镇住宅用地', this.tableDataTotal = res.total
type:'房地产业', },
way:'挂牌出让', handlePic(url){
count:4 window.open(url, "_blank")
}
]
this.tableDataTotal = 100
})
} }
} }
} }
......
...@@ -73,7 +73,7 @@ export default { ...@@ -73,7 +73,7 @@ export default {
pageSize: 10 pageSize: 10
}, },
formData: [ formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []}, { type: 3, fieldName: 'keys', value: '', placeholder: '输入合作项目/工程名称查询', options: []},
], ],
forData: [ forData: [
{label: '合作项目/工程名称', prop: 'dealTitle', width: '720', slot: true}, {label: '合作项目/工程名称', prop: 'dealTitle', width: '720', slot: true},
......
...@@ -79,10 +79,10 @@ export default { ...@@ -79,10 +79,10 @@ export default {
pageSize: 10 pageSize: 10
}, },
formData: [ formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []}, { type: 3, fieldName: 'keys', value: '', placeholder: '输入项目/工程名称查询', options: []},
], ],
forData: [ forData: [
{label: '合作项目/工程名称', prop: 'projectAllName', width: '720', slot: true}, {label: '合作项目/工程名称', prop: 'projectAllName', width: '720', fixed: true, slot: true},
{label: '项目/工程金额(万元)', prop: 'winBidAmount', width: '160'}, {label: '项目/工程金额(万元)', prop: 'winBidAmount', width: '160'},
{label: '合作时间', prop: 'winBidTime', width: '100'}, {label: '合作时间', prop: 'winBidTime', width: '100'},
{label: '项目地区', prop: 'province', width: '160', slot: true}, {label: '项目地区', prop: 'province', width: '160', slot: true},
......
...@@ -79,10 +79,10 @@ export default { ...@@ -79,10 +79,10 @@ export default {
pageSize: 10 pageSize: 10
}, },
formData: [ formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []}, { type: 3, fieldName: 'keys', value: '', placeholder: '输入合作项目/工程名称查询', options: []},
], ],
forData: [ forData: [
{label: '合作项目/工程名称', prop: 'projectAllName', width: '720', slot: true}, {label: '合作项目/工程名称', prop: 'projectAllName', width: '720', fixed: true, slot: true},
{label: '项目/工程金额(万元)', prop: 'winBidAmount', width: '160'}, {label: '项目/工程金额(万元)', prop: 'winBidAmount', width: '160'},
{label: '合作时间', prop: 'winBidTime', width: '100'}, {label: '合作时间', prop: 'winBidTime', width: '100'},
{label: '项目地区', prop: 'province', width: '160', slot: true}, {label: '项目地区', prop: 'province', width: '160', slot: true},
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
<tables <tables
:indexFixed="true" :indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading" :tableLoading="tableLoading"
:tableData="tableData" :tableData="tableData"
:forData="forData" :forData="forData"
...@@ -57,11 +58,12 @@ export default { ...@@ -57,11 +58,12 @@ export default {
pageNum: 1, pageNum: 1,
pageSize: 10 pageSize: 10
}, },
defaultSort: {prop: 'time', order: 'descending'},
forData: [ forData: [
{label: '客户名称', prop: 'companyName', minWidth: '350', slot: true}, {label: '客户名称', prop: 'companyName', minWidth: '350', slot: true},
{label: '合作项目/工程名称', prop: 'projectAllName', minWidth: '400', sortable: true, slot: true}, {label: '合作项目/工程名称', prop: 'projectAllName', minWidth: '400', slot: true, sortable: 'custom', descending: '5', ascending: '6'},
{label: '合作总金额(万元)', prop: 'amount', minWidth: '150', sortable: true}, {label: '合作总金额(万元)', prop: 'amount', minWidth: '150', sortable: 'custom', descending: '1', ascending: '2'},
{label: '最近一次合作时间', prop: 'time', minWidth: '140', sortable: true} {label: '最近一次合作时间', prop: 'time', minWidth: '140', sortable: 'custom', descending: '3', ascending: '4'}
], ],
formData: [ formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []}, { type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []},
...@@ -90,32 +92,6 @@ export default { ...@@ -90,32 +92,6 @@ export default {
} }
this.tableDataTotal = res.total this.tableDataTotal = res.total
}, },
//排序-测试
sortChange(e){
this.tableData = []
let sortRule = e.prop+','+e.order
switch (sortRule){
case 'amount,descending':
this.queryParams.sort = 1
break
case 'amount,ascending':
this.queryParams.sort = 2
break
case 'time,descending':
this.queryParams.sort = 3
break
case 'time,ascending':
this.queryParams.sort = 4
break
case 'projectAllName,descending':
this.queryParams.sort = 5
break
case 'projectAllName,ascending':
this.queryParams.sort = 6
break
}
this.handleSearch()
},
handleClick(e, data) { handleClick(e, data) {
this.rowData = data this.rowData = data
this.isDetails = true this.isDetails = true
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
<tables <tables
:indexFixed="true" :indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading" :tableLoading="tableLoading"
:tableData="tableData" :tableData="tableData"
:forData="forData" :forData="forData"
...@@ -19,13 +20,13 @@ ...@@ -19,13 +20,13 @@
@handle-current-change="handleCurrentChange" @handle-current-change="handleCurrentChange"
@sort-change="sortChange" @sort-change="sortChange"
> >
<template slot="customName" slot-scope="scope"> <template slot="projectAllName" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.customId&&scope.row.customName">{{ scope.row.customName }}</router-link> <router-link to="" tag="a" class="a-link" v-if="scope.row.id&&scope.row.projectAllName " v-html="scope.row.projectAllName"></router-link>
<div v-else>{{ scope.row.customName || '--' }}</div> <div v-else v-html="scope.row.projectAllName || '--'"></div>
</template> </template>
<template slot="use" slot-scope="scope"> <template slot="companyName" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.useId&&scope.row.use">{{ scope.row.use }}</router-link> <router-link to="" tag="a" class="a-link" v-if="scope.row.companyId&&scope.row.companyName">{{ scope.row.companyName }}</router-link>
<div v-else>{{ scope.row.use || '--' }}</div> <div v-else>{{ scope.row.companyName || '--' }}</div>
</template> </template>
</tables> </tables>
</div> </div>
...@@ -33,7 +34,7 @@ ...@@ -33,7 +34,7 @@
<script> <script>
import mixin from '../mixins/mixin' import mixin from '../mixins/mixin'
import { getOption, getList } from '@/api/detail/party-a/dealings' import {historySendProvince, historySendPage} from '@/api/detail/party-a/dealings'
export default { export default {
name: 'Hiscontract', name: 'Hiscontract',
props: ['companyId'], props: ['companyId'],
...@@ -45,25 +46,27 @@ export default { ...@@ -45,25 +46,27 @@ export default {
return { return {
queryParams: { queryParams: {
cid: this.companyId, cid: this.companyId,
sort: 3,
pageNum: 1, pageNum: 1,
pageSize: 10 pageSize: 10
}, },
defaultSort: {prop: 'winBidTime', order: 'descending'},
forData: [ forData: [
{label: '项目名称', prop: 'customName', minWidth: '560', slot: true}, {label: '项目名称', prop: 'projectAllName', minWidth: '560', slot: true},
{label: '中标时间', prop: 'way', minWidth: '100', sortable: true}, {label: '中标时间', prop: 'winBidTime', minWidth: '100', sortable: 'custom', descending: '3', ascending: '4'},
{label: '中标企业', prop: 'use', minWidth: '320', slot: true}, {label: '中标企业', prop: 'companyName', minWidth: '320', slot: true},
{label: '中标金额(万元)', prop: 'way', minWidth: '140', sortable: true}, {label: '中标金额(万元)', prop: 'winBidAmount', minWidth: '140', sortable: 'custom', descending: '1', ascending: '2'},
{label: '下浮率(%)', prop: 'way', minWidth: '120', sortable: true}, {label: '下浮率(%)', prop: 'lowerRate', minWidth: '120', sortable: 'custom', descending: '7', ascending: '8'},
{label: '项目经理 / 负责人', prop: 'way', minWidth: '130'}, {label: '项目经理 / 负责人', prop: 'staffName', minWidth: '130'},
{label: '中标地区', prop: 'way', minWidth: '160'}, {label: '中标地区', prop: 'region', minWidth: '160'},
{label: '工期(天)', prop: 'way', minWidth: '110', sortable: true}, {label: '工期(天)', prop: 'period', minWidth: '110', sortable: 'custom', descending: '9', ascending: '10'},
{label: '业绩类别', prop: 'way', minWidth: '110'} {label: '业绩类别', prop: 'boundType', minWidth: '110'}
], ],
formData: [ formData: [
{ type: 1, fieldName: 'region', value: '', placeholder: '项目地区', options: []}, { type: 1, fieldName: 'provinceId', value: '', placeholder: '项目地区', options: [] },
{ type: 1, fieldName: 'time', value: '', placeholder: '中标时间', options: []}, { type: 5, fieldName: 'time', value: '', placeholder: '中标时间', startTime: 'dateFrom', endTime: 'dateTo' },
{ type: 1, fieldName: 'amount', value: '', placeholder: '中标金额', options: []}, { type: 6, fieldName: 'money', value: '', placeholder: '中标金额', startMoney: 'amountMin', endMoney: 'amountMax' },
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入关键词查询', options: []}, { type: 3, fieldName: 'keys', value: '', placeholder: '输入项目名称查询', options: [] }
], ],
//列表 //列表
tableLoading:false, tableLoading:false,
...@@ -78,45 +81,26 @@ export default { ...@@ -78,45 +81,26 @@ export default {
this.handleQuery() this.handleQuery()
}, },
methods: { methods: {
handleOption(){ async handleOption(){
getOption().then((res) => { let res = await historySendProvince({cid: this.companyId})
this.setFormData('region', [ if(res.code==200){
{ name: '类别1', value: '1' }, let region = res.data.map(item => {
{ name: '类别2', value: '2' }, let it = {name:item.province+'('+item.count+')',value:item.provinceId}
{ name: '类别3', value: '3' }, return it
{ name: '类别4', value: '4' } })
]) this.setFormData('provinceId', region)
this.setFormData('time', [ }
{ name: '类别1', value: '1' },
{ name: '类别2', value: '2' },
{ name: '类别3', value: '3' },
{ name: '类别4', value: '4' }
])
this.setFormData('amount', [
{ name: '类别1', value: '1' },
{ name: '类别2', value: '2' },
{ name: '类别3', value: '3' },
{ name: '类别4', value: '4' }
])
})
}, },
handleQuery(params) {
async handleQuery(params) {
this.tableLoading = true this.tableLoading = true
let param = params?params:this.queryParams let param = params?params:this.queryParams
getList(param).then((res) => { let res = await historySendPage(param)
this.tableLoading = false this.tableLoading = false
this.tableData = [ if(res.code==200){
{ this.tableData = res.rows
customId: '1', }
customName:'滨州医学院口腔医学大楼铝合金门窗供货及安装', this.tableDataTotal = res.total
use:'城镇住宅用地',
type:'房地产业',
way:'挂牌出让',
count:4
}
]
this.tableDataTotal = 100
})
} }
} }
} }
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
<tables <tables
:indexFixed="true" :indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading" :tableLoading="tableLoading"
:tableData="tableData" :tableData="tableData"
:forData="forData" :forData="forData"
...@@ -57,11 +58,12 @@ export default { ...@@ -57,11 +58,12 @@ export default {
pageNum: 1, pageNum: 1,
pageSize: 10 pageSize: 10
}, },
defaultSort: {prop: 'time', order: 'descending'},
forData: [ forData: [
{label: '供应商', prop: 'companyName', minWidth: '350', slot: true}, {label: '供应商', prop: 'companyName', minWidth: '350', slot: true},
{label: '合作项目/工程名称', prop: 'projectAllName', minWidth: '400', sortable: true, slot: true}, {label: '合作项目/工程名称', prop: 'projectAllName', minWidth: '400', slot: true, sortable: 'custom', descending: '5', ascending: '6'},
{label: '合作总金额(万元)', prop: 'amount', minWidth: '150', sortable: true}, {label: '合作总金额(万元)', prop: 'amount', minWidth: '150', sortable: 'custom', descending: '1', ascending: '2'},
{label: '最近一次合作时间', prop: 'time', minWidth: '140', sortable: true} {label: '最近一次合作时间', prop: 'time', minWidth: '140', sortable: 'custom', descending: '3', ascending: '4'}
], ],
formData: [ formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []}, { type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []},
......
...@@ -30,6 +30,11 @@ export default { ...@@ -30,6 +30,11 @@ export default {
condtion[item.endTime] = item.value[1]; condtion[item.endTime] = item.value[1];
return return
} }
if(item.fieldName == 'money') {
condtion[item.startMoney] = item.value[0];
condtion[item.endMoney] = item.value[1];
return
}
condtion[item.fieldName] = item.value condtion[item.fieldName] = item.value
} }
}) })
...@@ -65,7 +70,9 @@ export default { ...@@ -65,7 +70,9 @@ export default {
}, },
//排序 //排序
sortChange(e){ sortChange(e){
console.log(e) let item = this.forData.find(item => item.prop === e.prop)
this.queryParams.sort = item[e.order]
this.handleSearch()
} }
} }
} }
...@@ -44,8 +44,8 @@ export default { ...@@ -44,8 +44,8 @@ export default {
}, },
forData: [ forData: [
{label: '项目名称', prop: 'porjectName', minWidth: '300', slot: true}, {label: '项目名称', prop: 'porjectName', minWidth: '300', slot: true},
{label: '发布日期', prop: 'use', sortable: true, width: '120'}, {label: '发布日期', prop: 'use', sortable: 'custom', width: '120'},
{label: '预算金额(万元)', prop: 'type', sortable: true, width: '140'}, {label: '预算金额(万元)', prop: 'type', sortable: 'custom', width: '140'},
{label: '项目地区', prop: 'way', width: '120'}, {label: '项目地区', prop: 'way', width: '120'},
{label: '项目类别', prop: 'state', width: '90'}, {label: '项目类别', prop: 'state', width: '90'},
{label: '招采单位联系人', prop: 'money', width: '110'}, {label: '招采单位联系人', prop: 'money', width: '110'},
......
...@@ -44,11 +44,11 @@ export default { ...@@ -44,11 +44,11 @@ export default {
}, },
forData: [ forData: [
{label: '项目名称', prop: 'porjectName', minWidth: '300', slot: true}, {label: '项目名称', prop: 'porjectName', minWidth: '300', slot: true},
{label: '项目总投资(亿元)', prop: 'use', sortable: true, width: '150'}, {label: '项目总投资(亿元)', prop: 'use', sortable: 'custom', width: '150'},
{label: '项目资本金(亿元)', prop: 'type', sortable: true, width: '150'}, {label: '项目资本金(亿元)', prop: 'type', sortable: 'custom', width: '150'},
{label: '项目收益倍数(倍)', prop: 'way', sortable: true, width: '150'}, {label: '项目收益倍数(倍)', prop: 'way', sortable: 'custom', width: '150'},
{label: '专项债金额(亿元)', prop: 'state', sortable: true, width: '150'}, {label: '专项债金额(亿元)', prop: 'state', sortable: 'custom', width: '150'},
{label: '专项债用作资本金(亿元)', prop: 'money', sortable: true, width: '200'} {label: '专项债用作资本金(亿元)', prop: 'money', sortable: 'custom', width: '200'}
], ],
formData: [ formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入项目名称关键词查询', options: []}, { type: 3, fieldName: 'keys', value: '', placeholder: '输入项目名称关键词查询', options: []},
......
...@@ -48,8 +48,8 @@ export default { ...@@ -48,8 +48,8 @@ export default {
{label: '行业分类', prop: 'type', width: '100'}, {label: '行业分类', prop: 'type', width: '100'},
{label: '供地方式', prop: 'way', width: '100'}, {label: '供地方式', prop: 'way', width: '100'},
{label: '土地坐落', prop: 'state', width: '130'}, {label: '土地坐落', prop: 'state', width: '130'},
{label: '成交金额(万元)', prop: 'money', sortable: true, width: '140'}, {label: '成交金额(万元)', prop: 'money', sortable: 'custom', width: '140'},
{label: '总面积(㎡)', prop: 'scale', sortable: true, width: '130'}, {label: '总面积(㎡)', prop: 'scale', sortable: 'custom', width: '130'},
{label: '批准单位', prop: 'unit', width: '130'}, {label: '批准单位', prop: 'unit', width: '130'},
{label: '签订日期', prop: 'date', width: '130'} {label: '签订日期', prop: 'date', width: '130'}
], ],
......
...@@ -44,10 +44,10 @@ export default { ...@@ -44,10 +44,10 @@ export default {
}, },
forData: [ forData: [
{label: '项目名称', prop: 'porjectName', minWidth: '300', slot: true}, {label: '项目名称', prop: 'porjectName', minWidth: '300', slot: true},
{label: '成交金额(万元)', prop: 'use', sortable: true, width: '150'}, {label: '成交金额(万元)', prop: 'use', sortable: 'custom', width: '150'},
{label: '项目类别', prop: 'type', width: '100'}, {label: '项目类别', prop: 'type', width: '100'},
{label: '计划开工日期', prop: 'way', sortable: true, width: '130'}, {label: '计划开工日期', prop: 'way', sortable: 'custom', width: '130'},
{label: '计划完工日期', prop: 'state', sortable: true, width: '130'}, {label: '计划完工日期', prop: 'state', sortable: 'custom', width: '130'},
{label: '审批结果', prop: 'money', width: '100'}, {label: '审批结果', prop: 'money', width: '100'},
{label: '是否为民间推介项目', prop: 'scale', width: '150'} {label: '是否为民间推介项目', prop: 'scale', width: '150'}
], ],
......
...@@ -60,8 +60,6 @@ export default { ...@@ -60,8 +60,6 @@ export default {
//列表 //列表
tableLoading:false, tableLoading:false,
tableData:[], tableData:[],
pageIndex:1,
pageSize:10,
tableDataTotal:0, tableDataTotal:0,
} }
}, },
......
...@@ -75,8 +75,6 @@ export default { ...@@ -75,8 +75,6 @@ export default {
//列表 //列表
tableLoading:false, tableLoading:false,
tableData:[], tableData:[],
pageIndex:1,
pageSize:10,
tableDataTotal:0, tableDataTotal:0,
} }
}, },
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
<div class="flex-box query-params"> <div class="flex-box query-params">
<span class="common-title">区域经济</span> <span class="common-title">区域经济</span>
</div> </div>
<div class="params-dw"><img src="@/assets/images/addree.png" />广东省-广州市</div>
</div> </div>
<div class="table-item"> <div class="table-item">
<el-table <el-table
...@@ -253,6 +254,16 @@ export default { ...@@ -253,6 +254,16 @@ export default {
} }
.query-box{ .query-box{
margin: 10px 0 20px; margin: 10px 0 20px;
.params-dw{
font-size: 14px;
font-weight: 400;
color: #0081FF;
img{
width: 14px;
height: 14px;
margin-right: 5px;
}
}
} }
} }
......
<template> <template>
<div class="app-container"> <div class="app-container">
<iframe ref="companyIframe" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" width="100%" :height="iframeHight" src="https://pre.jiansheku.com/enterprise/56546856314e567a69/" /> <div class="content">
</div> <div class="combined-title">
</template> <div class="title-right">
<div class="tab">
<div style="position:relative" v-for="(itme,i) in personnelList"
:class="itme.status==true?'active':'' " :key='i' @click="personnelListbtn(i)">
<p>{{itme.value}}</p>
</div>
</div>
<p class="solid"></p>
</div>
</div>
</div>
<!-- 企业专项债 -->
<!-- <debtProject v-if="personnelHerf=='debtProject'" /> -->
<!-- 查企业 -->
<SearchEnterprise v-if="personnelHerf=='SearchEnterprise'" />
</div>
</template>
<script> <script>
import SearchEnterprise from "./components/SearchEnterprise/index.vue";
import "@/assets/styles/public.css";
export default {
name: 'enterpriseData',
components: { SearchEnterprise },
data() {
return {
// tablist
personnelList: [{
key: '1',
status: false,
value: '查业主单位',
},
{
key: 'SearchEnterprise',
status: true,
value: '查建筑企业',
},
export default { ],
name: 'EnterpriseData', personnelHerf:'SearchEnterprise'
components: { }
},
}, created() {},
data() { methods: {
return { personnelListbtn(index) {
iframeHight: null, for (var i = 0; i < this.personnelList.length; i++) {
iframeWin: {} this.personnelList[i].status = false;
} }
}, this.personnelList[index].status = true;
computed: { this.personnelHerf=this.personnelList[index].key;
}, },
created() { }
}, }
mounted() {
this.getInframeHight()
},
methods: {
getInframeHight() {
const _this = this
window.addEventListener('message', function(e) {
const data = e.data
if (data && typeof data === 'object' && data.height) {
_this.iframeHight = data.height
}
})
}
}
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.app-container {
margin: 12px 24px;
padding: 0;
}
.content{
padding: 0px 16px;
background: #FFFFFF;
}
.app-container .combined-title {
display: flex;
padding-top: 16px;
align-items: center
}
.app-container .combined-title .title-icon {
display: inline-block;
width: 6px;
height: 26px;
background: #0081FF;
border-radius: 0px 0px 0px 0px;
opacity: 1;
margin-right: 18px;
}
.app-container .combined-title .title-right {
display: flex;
width: 100%;
position: relative;
height: 40px;
}
.app-container .combined-title .title-right .title-text {
font-size: 16px;
font-weight: bold;
color: #333333;
line-height: 40px;
}
.app-container .combined-title .title-right .title-add {
color: #0081FF;
cursor: pointer;
position: absolute;
right: 0;
}
.app-container .combined-title .title-right .title-addyj {
top: 5px;
}
.app-container .combined-title .title-right .title-add .add-img {
position: relative;
top: -1px;
margin-right: 6px;
}
.app-container .combined-title .title-right .solid {
width: 100%;
height: 1px;
background-color: #EEEEEE;
position: absolute;
bottom: -1px;
left: 0;
z-index: 1;
}
.tab {
display: flex;
z-index: 2;
}
.tab_p_32 {
padding-right: 32px;
padding-left: 32px;
}
.tab div {
cursor: pointer;
color: #666666;
font-size: 16px;
text-align: center;
margin-right: 32px;
line-height: 40px;
}
.tab div p {
display: inline-block;
padding: 0px;
}
.tab div .logo {
color: #fff;
font-weight: 400;
font-size: 10px;
position: absolute;
top: -6px;
right: -24px;
display: inline-block;
line-height: 14px;
padding: 1px 2px;
text-align: center;
background: #3663DE;
border-radius: 2px 2px 2px 2px;
}
.tab div .triangle {
display: inline-block;
width: 0px;
height: 0px;
border-left: 3px solid transparent;
border-right: 3px solid transparent;
border-top: 4px solid #3663DE;
position: absolute;
top: 9.5px;
right: -3px;
}
.tab .active {
color: #0081FF;
}
.tab .active .triangle {
border-top: 4px solid #0081FF;
}
.tab .active .logo {
background: #0081FF;
}
</style> .tab .active p {
border-bottom: 2px solid #0081FF;
font-weight: bold;
}
</style>
\ No newline at end of file
...@@ -251,8 +251,9 @@ ...@@ -251,8 +251,9 @@
param.id = this.id param.id = this.id
editXMNR(param).then(result=>{ editXMNR(param).then(result=>{
if(result.code == 200) if(result.code == 200)
this.$message.success('修改成功') this.$message.success('修改成功!')
else{ else{
this.$message.error(res.msg)
this.getJSNR() this.getJSNR()
} }
}) })
......
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
</el-table> </el-table>
<div class="bottems"> <div class="bottems">
<div class="btn btn_primary h28" @click="opennew"><div class="img img1"></div>新增联系人</div> <div class="btn btn_primary h28" @click="opennew"><div class="img img1"></div>新增联系人</div>
<el-pagination <el-pagination v-if="total>searchParam.pageSize"
background background
:page-size="searchParam.pageSize" :page-size="searchParam.pageSize"
:current-page="searchParam.pageNum" :current-page="searchParam.pageNum"
......
...@@ -149,7 +149,7 @@ ...@@ -149,7 +149,7 @@
</div> </div>
</div> </div>
<div class="tables"> <div class="tables">
<div class="bottems" v-if="total>0"> <div class="bottems" v-if="total>searchParam.pageSize">
<el-pagination <el-pagination
background background
:page-size="searchParam.pageSize" :page-size="searchParam.pageSize"
......
This diff is collapsed.
...@@ -176,7 +176,7 @@ ...@@ -176,7 +176,7 @@
} }
.content-label { .content-label {
margin-top: 7px; margin-top: 12px;
.list-label { .list-label {
background: #F3F3FF; background: #F3F3FF;
...@@ -191,7 +191,7 @@ ...@@ -191,7 +191,7 @@
.list-content { .list-content {
margin-top: 3px; margin-top: 6px;
display: flex; display: flex;
justify-content: start; justify-content: start;
align-items: center; align-items: center;
...@@ -270,15 +270,6 @@ ...@@ -270,15 +270,6 @@
} }
.qyzx-details { .qyzx-details {
.tab {
font-size: 12px;
color: #A1A1A1;
span {
color: #232323;
}
}
.content { .content {
margin-top: 16px; margin-top: 16px;
background: #FFFFFF; background: #FFFFFF;
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
></el-cascader> ></el-cascader>
</div> </div>
<el-dropdown @command="punishDatehandleCommand" trigger="click" ref="punishDateShowPopper" :hide-on-click="false" > <el-dropdown @command="punishDatehandleCommand" trigger="click" class="el-dropdown-land" ref="punishDateShowPopper" :hide-on-click="false" >
<span class="el-dropdown-link" :class="punishDateValue ? 'color_text' : ''" > <span class="el-dropdown-link" :class="punishDateValue ? 'color_text' : ''" >
发布时间{{ punishDateValue ? " 1项" : ""}} 发布时间{{ punishDateValue ? " 1项" : ""}}
<i class="el-icon-caret-bottom"></i> <i class="el-icon-caret-bottom"></i>
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
</div> </div>
</el-dropdown> </el-dropdown>
<el-dropdown @command="tenderDatehandleCommand" trigger="click" ref="tenderDateShowPopper" :hide-on-click="false" > <el-dropdown @command="tenderDatehandleCommand" trigger="click" ref="tenderDateShowPopper" :hide-on-click="false" >
<span class="el-dropdown-link" :class="tenderDateValue ? 'color_text' : ''" >开标时间{{ tenderDateValue ? " 1项" : ""}}<i class="el-icon-caret-bottom"></i> <span class="el-dropdown-link" :class="tenderDateValue ? 'color_text' : ''" >开标时间{{ tenderDateValue ? " 1项" : ""}}<i class="el-icon-caret-bottom"></i>
</span> </span>
...@@ -132,7 +132,7 @@ ...@@ -132,7 +132,7 @@
<ul class="bottomlist-content"> <ul class="bottomlist-content">
<li class="bottomlist-list" > <li class="bottomlist-list" >
<p class="list-titel"> <p class="list-titel">
<router-link :to="'/radar/Establishment/details/'+ 1" tag="a" class="list-titel-a" >绿色节能型压缩机基础件、汽车零配件新建项目 (芜湖旭日机械制造有限公司)</router-link> <router-link :to="'/radar/BidRecord/details/'+ 1" tag="a" class="list-titel-a" >绿色节能型压缩机基础件、汽车零配件新建项目 (芜湖旭日机械制造有限公司)</router-link>
<!-- <div v-else-if="item.projectName" v-html="item.projectName"></div> --> <!-- <div v-else-if="item.projectName" v-html="item.projectName"></div> -->
</p> </p>
<div class="content-label"> <div class="content-label">
......
This diff is collapsed.
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<Land v-if="personnelHerf=='Land'" /> <Land v-if="personnelHerf=='Land'" />
<!-- 拟建项目 --> <!-- 拟建项目 -->
<Establishment v-if="personnelHerf=='Establishment'" /> <Establishment v-if="personnelHerf=='Establishment'" />
<!-- 招标计划 -->
<Bidding v-if="personnelHerf=='Bidding'" />
<!-- 标讯pro --> <!-- 标讯pro -->
<bxprozbgg v-if="personnelHerf=='bxprozbgg'" /> <bxprozbgg v-if="personnelHerf=='bxprozbgg'" />
<!-- 公招标讯 --> <!-- 公招标讯 -->
...@@ -37,11 +39,12 @@ ...@@ -37,11 +39,12 @@
import bxprozbgg from "./components/bxprozbgg/index.vue"; import bxprozbgg from "./components/bxprozbgg/index.vue";
import Tender from "./components/Tender/index.vue"; import Tender from "./components/Tender/index.vue";
import BidRecord from "./components/BidRecord/index.vue"; import BidRecord from "./components/BidRecord/index.vue";
import Bidding from "./components/Bidding/index.vue";
import "@/assets/styles/public.css"; import "@/assets/styles/public.css";
export default { export default {
name: 'radar', name: 'radar',
components: { debtProject,Land,Establishment,bxprozbgg,Tender,BidRecord }, components: { debtProject,Land,Establishment,bxprozbgg,Tender,BidRecord,Bidding },
data() { data() {
return { return {
// tablist // tablist
...@@ -64,7 +67,7 @@ ...@@ -64,7 +67,7 @@
}, },
{ {
key: 'KeyPersonnel', key: 'Bidding',
status: false, status: false,
value: '招标计划', value: '招标计划',
......
...@@ -35,6 +35,8 @@ module.exports = { ...@@ -35,6 +35,8 @@ module.exports = {
// detail: https://cli.vuejs.org/config/#devserver-proxy // detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: { [process.env.VUE_APP_BASE_API]: {
target: `http://122.9.160.122:9011`, target: `http://122.9.160.122:9011`,
// target: `http://192.168.60.126:9011`,
// target: `http://192.168.60.27:8766`,
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: '' ['^' + process.env.VUE_APP_BASE_API]: ''
......
...@@ -19,4 +19,9 @@ public class BusinessIdDto { ...@@ -19,4 +19,9 @@ public class BusinessIdDto {
* 项目标签名称 * 项目标签名称
*/ */
private String label; private String label;
/**
* 文件路径
*/
private String folderPath;
} }
package com.dsk.system.mapper; package com.dsk.system.mapper;
import com.dsk.common.core.domain.entity.BusinessFollowRecord; import com.dsk.common.core.domain.entity.BusinessFollowRecord;
import com.dsk.system.domain.BusinessIdDto;
import java.util.List; import java.util.List;
...@@ -34,7 +35,7 @@ public interface BusinessFollowRecordMapper ...@@ -34,7 +35,7 @@ public interface BusinessFollowRecordMapper
* @param businessId 项目id * @param businessId 项目id
* @return 项目跟进记录集合 * @return 项目跟进记录集合
*/ */
public List<BusinessFollowRecord> selectBusinessFollowRecordList(Integer businessId); public List<BusinessFollowRecord> selectBusinessFollowRecordList(BusinessIdDto businessId);
/** /**
* 新增项目跟进记录 * 新增项目跟进记录
......
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