Commit e67fee39 authored by dengguangman's avatar dengguangman

Merge remote-tracking branch 'origin/master'

parents e55b489d 0cecd994
package com.dsk.web.controller.business;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletResponse;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult;
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 io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
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.domain.AjaxResult;
import com.dsk.common.enums.BusinessType;
import com.dsk.common.core.page.TableDataInfo;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 项目工作待办Controller
......@@ -46,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);
......
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.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.system.service.IBusinessContactsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 项目联系人Controller
......@@ -40,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);
......
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;
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;
import java.util.stream.Collectors;
/**
* @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)
@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 filePath) {
return FileUtils.delFolder(filePath.getFilePath()) ? AjaxResult.success() : AjaxResult.error();
}
/**
* 分页查询项目的所有文件
* 获取文件夹中所有文件
*/
@GetMapping(value = "/list")
public TableDataInfo getAllFiles(BusinessIdDto filePath) {
startPage();
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")
public AjaxResult uploadFolder(@RequestPart("file") MultipartFile file,HttpServletRequest request){
try {
// String businessFileName = request.getHeader("FilePath");
String businessFileName = "10";
// 上传文件路径
String filePath = RuoYiConfig.getUploadPath()+businessFileName+"/";
// 上传并返回文件全路径
String fileName = FileUploadUtils.upload(filePath, file);
String url = serverConfig.getUrl() + fileName;
AjaxResult ajax = AjaxResult.success();
ajax.put("url", url);
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;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.dsk.common.core.controller.BaseController;
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.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.domain.AjaxResult;
import com.dsk.common.enums.BusinessType;
import com.dsk.common.utils.poi.ExcelUtil;
import com.dsk.common.core.page.TableDataInfo;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 项目跟进记录Controller
......@@ -36,16 +25,7 @@ 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));
// }
/**
* 新增项目跟进记录
......@@ -63,7 +43,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);
......@@ -81,6 +61,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);
}
// /**
// * 导出项目跟进记录列表
// */
......@@ -113,6 +105,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));
// }
}
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.dtos.BusinessInfoDto;
import com.dsk.common.exception.base.BaseException;
import com.dsk.common.utils.CheckUtils;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.system.domain.BusinessAddDto;
import com.dsk.system.domain.BusinessListDto;
import com.dsk.system.domain.vo.BusinessBrowseVo;
import com.dsk.system.domain.vo.BusinessListVo;
import com.dsk.system.service.IBusinessInfoService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 项目详情Controller
......@@ -55,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);
......@@ -90,7 +80,7 @@ public class BusinessInfoController extends BaseController
* 删除项目列表
*/
// @PreAuthorize("@ss.hasPermi('system:business:remove')")
@Log(title = "项目管理", businessType = BusinessType.DELETE)
// @Log(title = "项目管理", businessType = BusinessType.DELETE)
@DeleteMapping("/remove/{ids}")
public AjaxResult remove(@PathVariable(value = "ids",required=false) Long[] ids)
{
......@@ -101,7 +91,7 @@ public class BusinessInfoController extends BaseController
* 新增项目详情
*/
// @PreAuthorize("@ss.hasPermi('system:business:add')")
@Log(title = "项目管理", businessType = BusinessType.INSERT)
// @Log(title = "项目管理", businessType = BusinessType.INSERT)
@PostMapping("/add")
public AjaxResult add(@RequestBody BusinessAddDto dto)
{
......@@ -112,7 +102,7 @@ public class BusinessInfoController extends BaseController
* 修改项目详情
*/
// @PreAuthorize("@ss.hasPermi('system:business:edit')")
@Log(title = "项目管理", businessType = BusinessType.UPDATE)
// @Log(title = "项目管理", businessType = BusinessType.UPDATE)
@PostMapping("/edit")
public AjaxResult edit(@RequestBody BusinessInfo businessInfo)
{
......
package com.dsk.web.controller.business;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult;
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.service.IBusinessLabelService;
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.domain.AjaxResult;
import com.dsk.common.enums.BusinessType;
import com.dsk.common.core.page.TableDataInfo;
/**
* 项目标签Controller
......
package com.dsk.web.controller.business;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.AjaxResult;
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.service.IBusinessRelateCompanyService;
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.domain.AjaxResult;
import com.dsk.common.enums.BusinessType;
import com.dsk.common.core.page.TableDataInfo;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 项目关联单位Controller
* 项目相关企业Controller
*
* @author lxl
* @date 2023-05-17
......@@ -37,7 +25,7 @@ public class BusinessRelateCompanyController extends BaseController
private IBusinessRelateCompanyService businessRelateCompanyService;
/**
* 查询关联单位角色
* 查询相关企业角色
*/
@PostMapping("/role/list")
public AjaxResult companyRoleList(@RequestBody BusinessIdDto dto){
......@@ -45,11 +33,11 @@ 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);
......@@ -78,6 +66,17 @@ public class BusinessRelateCompanyController extends BaseController
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
// 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));
// }
}
......@@ -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);
}
......
package com.dsk.web.controller.search.controller;
import com.alibaba.fastjson2.JSONObject;
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.dtos.ComposeQueryDto;
import com.dsk.web.controller.search.service.MarketAnalysisService;
import org.springframework.web.bind.annotation.RequestBody;
......@@ -9,6 +11,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
/**
......@@ -18,7 +23,7 @@ import javax.annotation.Resource;
*/
@RequestMapping("/marketAnalysis")
@RestController
public class MarketAnalysisController {
public class MarketAnalysisController extends BaseController {
@Resource
......@@ -46,9 +51,8 @@ public class MarketAnalysisController {
/*
* 资质等级按照大类、省份、等级类型分组
*/
@RequestMapping("/certGroupByCategoryProvinceLevel")
public AjaxResult certGroupByCategoryProvinceLevel() {
@RequestMapping("/certGroupByMajorProvinceLevel")
public AjaxResult certGroupByMajorProvinceLevel() {
return marketAnalysisService.certGroupByMajorProvinceLevel();
}
......@@ -82,15 +86,27 @@ public class MarketAnalysisController {
* 中标数量按省份分组
*/
@RequestMapping("/countGroupByProvince")
public AjaxResult countGroupByProvince(@RequestBody ComposeQueryDto compose) {
return marketAnalysisService.countGroupByProvince(compose);
public AjaxResult countGroupByProvince(@RequestBody JSONObject object) {
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")
public AjaxResult countGroupByMonth(@RequestBody ComposeQueryDto compose) {
return marketAnalysisService.countGroupByMonth(compose);
public AjaxResult countGroupByMonth(@RequestBody JSONObject object) {
return marketAnalysisService.countGroupByMonth(object);
}
}
......@@ -17,9 +17,9 @@ public interface MarketAnalysisService {
AjaxResult certGroupByMajorProvinceLevel();
AjaxResult countGroupByProvince(ComposeQueryDto compose);
AjaxResult countGroupByProvince(JSONObject object);
AjaxResult countGroupByMonth(ComposeQueryDto compose);
AjaxResult countGroupByMonth(JSONObject object);
AjaxResult bidMoneyGroupByProjectType(JSONObject object);
......
......@@ -56,14 +56,14 @@ public class MarketAnalysisServiceImpl implements MarketAnalysisService {
}
@Override
public AjaxResult countGroupByProvince(ComposeQueryDto compose) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/countGroupByProvince", BeanUtil.beanToMap(compose, false, false));
public AjaxResult countGroupByProvince(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/countGroupByProvince", object);
return BeanUtil.toBean(map, AjaxResult.class);
}
@Override
public AjaxResult countGroupByMonth(ComposeQueryDto compose) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/countGroupByDate", BeanUtil.beanToMap(compose, false, false));
public AjaxResult countGroupByMonth(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/countGroupByMonth", object);
return BeanUtil.toBean(map, AjaxResult.class);
}
}
......@@ -8,8 +8,9 @@ ruoyi:
copyrightYear: 2023
# 实例演示开关
demoEnabled: true
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
profile: D:/dsk-operate-sys/uploadPath/
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/server/dsk-operate-sys/uploadPath)
# profile: D:/dsk-operate-sys/uploadPath/
profile: /home/server/dsk-operate-sys/uploadPath/
# 获取ip地址开关
addressEnabled: false
# 验证码类型 math 数组计算 char 字符验证
......
......@@ -130,6 +130,6 @@ public class RuoYiConfig
*/
public static String getUploadPath()
{
return getProfile() + "/upload";
return getProfile();
}
}
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();
}
}
......@@ -53,6 +53,10 @@ public class BusinessRelateCompany extends BaseEntity
@Excel(name = "对接深度/竞争力度")
private String depth;
/** 企业类型 */
@Excel(name = "企业类型")
private String companyType;
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
......@@ -66,6 +70,7 @@ public class BusinessRelateCompany extends BaseEntity
.append("createTime", getCreateTime())
.append("updateTime", getUpdateTime())
.append("depth", getDepth())
.append("companyType", getCompanyType())
.toString();
}
......
......@@ -32,5 +32,15 @@ public class EnterpriseCreditLawsuitsPageBody extends BasePage {
*/
private String keys;
/**
* 开始时间(年月日)
*/
private String dateFrom;
/**
* 截止时间(年月日)
*/
private String dateTo;
}
......@@ -27,7 +27,7 @@ public class EnterpriseProjectBidNoticePageBody extends BasePage {
/**
* 类型
*/
private String tenderStage;
private List<String> tenderStage;
/*
* 1金额倒序,2金额正序,3时间倒序,4时间正序
......
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.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();
}
/**
......
......@@ -64,7 +64,7 @@ public class SysLoginService
public String login(String username, String password, String code, String uuid)
{
// 验证码校验
// validateCaptcha(username, code, uuid);
validateCaptcha(username, code, uuid);
// 登录前置校验
loginPreCheck(username, password);
// 用户验证
......
......@@ -71,3 +71,12 @@ export function historySendProvince(data) {
data: data
})
}
// 投标记录列表
export function tenderPage(data) {
return request({
url: '/enterpriseBussiness/tenderPage',
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
})
......
......@@ -32,3 +32,11 @@ export function urbanInvestmentPage(data) {
data
})
}
// 同地区城投-查询选项
export function uipGroupData(data) {
return request({
url: '/enterprise/uipGroupData',
method: 'post',
data
})
}
import request from '@/utils/request'
// 资质json数据
let aptitudeCode= function aptitudeCode(param) {
return request({
url: 'https://files.jiansheku.com/file/json/common/aptitudeCode.json',
method: 'get',
})
}
// 人员json数据
let personCert= function personCert(param) {
return request({
url: 'https://files.jiansheku.com/file/json/common/personCert.json',
method: 'get',
})
}
// 备案网站
let searchDic= function searchDic(param) {
return request({
url: 'https://files.jiansheku.com/file/json/common/searchDic.json',
method: 'get',
})
}
// 备案网站
let regionWebList= function regionWebList(param) {
return request({
url: '/nationzj/enterprice/regionWebList',
method: 'get',
})
}
export default {aptitudeCode,personCert,searchDic,regionWebList}
\ No newline at end of file
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 regionalList(param) {
return request({
url: '/economic/regional/list',
method: 'POST',
data: param
})
}
......@@ -44,6 +44,23 @@ export function editXMNR(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) {
......@@ -124,3 +141,45 @@ export function editGZDB(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
})
}
//删除相关企业
export function delXGQY(param) {
return request({
url: '/business/company/remove/'+param,
method: 'DELETE',
})
}
//查询资料文档
export function getZLWD(param) {
return request({
url: '/business/file/list',
method: 'GET',
params:param
})
}
//删除资料文档
export function delZLWD(param) {
return request({
url: '/business/file/remove',
method: 'POST',
data:param
})
}
import request from '@/utils/request'
// 导入客户列表
let importData= function importData(param) {
return request({
url: '/customer/importData',
method: 'POST',
data: param
})
}
export default {importData}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -656,6 +656,7 @@
background: #F6F9FD;
border-radius: 6px;
padding: 24px;
border: 1px solid #F6F9FD;
//box-sizing: content-box;
box-sizing: border-box;
>div{
......@@ -676,7 +677,6 @@
}
}
.rec_detail:hover{
.operate{
display: block;
......
......@@ -318,7 +318,7 @@ select {
.jabph_popper_box {
position: absolute;
left: 146px;
left: 144px;
bottom: -1px;
background: #ffffff;
width: 186px;
......@@ -507,4 +507,188 @@ select {
.viewlist-el-popover .pup_list_export li .lowerRate_imgzhc {
width: 39px;
height: 14px;
}
\ No newline at end of file
}
.content_item_ckquery .item_ckquery_list {
display: flex;
}
.content_item_ckquery .item_ckquery_list .el-input__icon {
position: relative;
top: 1px;
}
.content_item_ckquery .item_ckquery_distance {
margin-top: 8px;
}
.ckquery_list_right {
width: 716px;
}
.content_item_ckquery .item_ckquery_btn {
display: inline-block;
border-radius: 2px 2px 2px 2px;
cursor: pointer;
text-align: center;
color: #ffffff;
margin-left: 8px;
margin-right: 32px;
width: 115px;
height: 34px;
line-height: 34px;
border: 1px solid #0081FF;
font-weight: 400;
color: #0081FF;
}
.content_item_ckquery .item_ckquery_btn:hover {
background: #0074E5;
color: #fff;
}
.content_item_ckquery .el-radio__label {
margin-left: 0px;
padding-left: 4px;
margin-right: 24px;
}
.content_item_list {
line-height: 34px;
}
.content_item_zizi .el-radio__label {
margin-right: 0;
}
.content_item_zizi .el-cascader-node>.el-radio {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 40px;
opacity: 0;
}
.select-list {
color: #666;
line-height: 24px;
font-size: 14px;
padding: 0;
user-select: none;
min-width: 100px;
max-width: 380px;
max-height: 400px;
overflow: auto;
box-shadow: none;
border-radius: 0;
background-color: #fff;
padding: 6px 0px;
}
.select-radio::-webkit-scrollbar-thumb {
background-color: #b9b9b9 !important;
border-radius: 6px !important;
}
.select-radio::-webkit-scrollbar {
width: 6px !important;
height: 6px !important;
}
.select-radio::-webkit-scrollbar-track {
background: #fff !important;
}
.select-radio::-webkit-scrollbar-corner {
background: #fff !important;
}
.select-list li {
cursor: pointer;
display: block;
padding: 0;
}
.select-list li:hover {
color: #0381fa;
background: #f2f7ff;
}
.select-list li .el-icon--right {
float: right;
margin-top: 4px;
}
.select-list .el-dropdown-menu__item{
padding: 0;
}
.select-list .el-dropdown-menu__item :hover{
color: #0381fa;
background: #f2f7ff;
}
.select-list .select-list-li {
text-align: left;
padding: 0px 16px;
line-height: 32px;
position: relative;
}
.select-list-li .ivu-date-picker .ivu-select-dropdown {
/* position: absolute;
top: 0;
left: 0;
width: 96px;
opacity: 0; */
left: 120px !important;
z-index: 1000;
}
.ivu-select-dropdown {
z-index: 9000;
}
.select-list-li-span {
width: 96px;
}
.select-list .active {
color: #0381fa;
background: #f2f7ff;
}
.select-list .active .el-radio__label {
color: #0381fa;
}
.select-list-left {
border-left: 1px solid #ccc;
margin-left: 2px;
}
.select-list .el-radio {
display: block;
line-height: 36px;
margin: 0;
}
.select-list .el-radio .el-radio__label {
padding-left: 16px;
padding-right: 16px;
display: block;
margin: 0;
}
.select-list .el-radio .el-radio__label:hover {
/* color: #0381fa;
background: #f2f7ff; */
}
.select-list .el-radio__input.is-checked+.el-radio__label {
background: #f2f7ff;
}
.select-list .el-radio__input {
display: none;
}
......@@ -24,8 +24,8 @@
left: 0;
z-index: 1001;
// overflow: hidden;
-webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35);
box-shadow: 2px 0 6px rgba(0,21,41,.35);
// -webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35);
// box-shadow: 2px 0 6px rgba(0,21,41,.35);
//展开、收起箭头
.side-expand{
position: absolute;
......
......@@ -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;
}
......
......@@ -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' }
}
]
},
]
......
......@@ -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)
}
......@@ -173,7 +173,7 @@
</template>
</el-table-column>
</el-table>
<div class="bottems" v-if="tableData.total>0">
<div class="bottems" v-if="tableData.total>searchParam.pageSize">
<el-pagination
background
:page-size="searchParam.pageSize"
......
......@@ -99,7 +99,7 @@
<div class="trendcon">{{item.text}}</div>
<div class="time">{{item.time}}</div>
</div>
<div class="tables" style="width: 100%">
<div class="tables" style="width: 100%" v-if="datalist.length>10">
<div class="bottems">
<el-pagination
background
......@@ -236,7 +236,7 @@ export default {
{
name: '',
type: 'bar',
barWidth: '20%',
barWidth: '12px',
data: [100, 152, 200, 334, 390, 330, 220,256,178],
itemStyle:{
normal: {
......@@ -280,7 +280,7 @@ export default {
{
name: '',
type: 'bar',
barWidth: '20%',
barWidth: '12px',
data: [110, 112, 190, 234, 310, 350, 220,276,198],
itemStyle:{
normal:{
......@@ -551,6 +551,12 @@ export default {
line-height: 18px;
padding-bottom: 16px;
}
&:last-child{
.trendcon{
border: none;
}
}
.time{
position: absolute;
right: 16px;
......
<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,35 @@
<el-option v-for="(item, index) in form.options" :key="index" :label="item.name" :value="item.value" />
</el-select>
</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-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>
......@@ -74,6 +103,8 @@
</template>
<script>
import CustomTimeSelect from './CustomTimeSelect'
import CustomMoneySelect from './CustomMoneySelect'
export default {
name: "HeadForm",
props: {
......@@ -111,6 +142,10 @@ export default {
}
},
components: {
CustomTimeSelect,
CustomMoneySelect
},
methods: {
changeSelect(){
this.$emit('handle-search')
......@@ -142,6 +177,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{
......
......@@ -17,7 +17,10 @@
</template>
<el-menu-item :index="index+'-'+idx" v-for="(it, idx) in item.children" :key="idx" @click="handleItem(it)" :disabled="it.disabled">{{it.title}}</el-menu-item>
</el-submenu>
<el-menu-item :index="index.toString()" @click="handleItem(item)" :disabled="item.disabled" v-else>{{item.title}}</el-menu-item>
<template v-else>
<el-menu-item :index="index.toString()" @click="handleItem(item)" :disabled="item.disabled" v-if="isCustomerId(item.pathName)">{{item.title}}</el-menu-item>
</template>
</template>
</el-menu>
</div>
......@@ -35,6 +38,10 @@ export default {
type: String,
default: null
},
customerId: {
type: String,
default: ''
}
},
data() {
return {
......@@ -78,14 +85,20 @@ export default {
{title: '裁判文书', pathName: 'judgment'},
{title: '法院公告', pathName: 'courtNotice'},
{title: '开庭公告', pathName: 'openacourtsessionNotice'},
{title: '信用中国', pathName: ''}
// {title: '信用中国', pathName: ''}
]},
// {title: '商务信息', pathName: 'business'},
{title: '招标偏好', pathName: 'preference'},
{title: '合作情况', pathName: 'cooperate'},
{title: '决策链条', pathName: 'decisionMaking'},
{title: '跟进记录', pathName: 'gjjl'}
]
],
customer:[
'preference',
'cooperate',
'decisionMaking',
'gjjl'
],
}
},
computed: {
......@@ -127,6 +140,15 @@ export default {
},
handleSearch(){
console.log('开始搜索了')
},
isCustomerId(name){
if(this.customer.indexOf(name) != -1){
if(this.customerId){
return true
}
return false
}
return true
}
}
}
......
......@@ -8,6 +8,7 @@
border
fit
highlight-current-row
:default-sort = "defaultSort?defaultSort:{}"
@sort-change="sortChange"
>
<el-table-column
......@@ -27,17 +28,35 @@
:min-width="item.minWidth"
:align="item.align?item.align:'left'"
:fixed="item.fixed"
:sortable="item.sortable"
: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>
......@@ -50,6 +69,7 @@
</template>
<script>
import { tabFixed } from '@/utils'
export default {
name: "Tables",
props: {
......@@ -65,6 +85,10 @@ export default {
type: Boolean,
default: false
},
defaultSort: {
type: Object,
default: null
},
tableData: {
type: Array,
default: []
......@@ -109,4 +133,7 @@ export default {
::v-deep .el-table__body tr.current-row > td.el-table__cell{
background-color: #ffffff;
}
/*::v-deep .el-table__fixed{
height: calc(100% - 16px) !important;
}*/
</style>
......@@ -25,8 +25,10 @@
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
>
<template slot="projcetName" slot-scope="scope">
{{scope}}
<template slot="projectName" slot-scope="scope">
<span class="link-type" @click="clickDetail(scope.row.id)">
{{ scope.row.projectName }}
</span>
<!-- <router-link :to="'' + scope.row.dictId" class="link-type">-->
<!-- <span>{{ scope.row.dictType }}</span>-->
<!-- </router-link>-->
......@@ -42,9 +44,6 @@
<el-button type="primary" class="empty-b" @click="drawer = true">添加合作情况</el-button>
</div>
</template>
<!-- <Detail />-->
<!-- 弹窗关联项目 -->
<el-drawer
title="添加合作情况"
......@@ -120,6 +119,8 @@
</div>
</el-drawer>
<!-- <Detail :detailId="detailId" v-if="isDetailId" />-->
</div>
</template>
......@@ -139,16 +140,22 @@ export default {
components: {
Detail
},
props: {
customerIds: {
type: String,
default: ''
}
},
data() {
return {
ifEmpty:false,
queryParams: {
customerId: 'f25219e73249eea0d9fddc5c7f04f97f',
customerId: this.customerIds,
pageNum: 1,
pageSize: 10
},
forData: [
{label: '项目名称', prop: 'projcetName'},
{label: '项目名称', prop: 'projectName', slot: true},
{label: '项目阶段', prop: 'projectStage', width: '120'},
{label: '投资金额(万元)', prop: 'investmentAmount', width: '140'},
{label: '项目状态', prop: 'status', width: '90'}
......@@ -208,7 +215,10 @@ export default {
}
],//可见访问
//客户详情
info: {}
info: {},
//
detailId: null,
isDetailId: false,
}
},
created() {
......@@ -273,7 +283,6 @@ export default {
this.addParam.customerId = this.queryParams.customerId
this.addParam.companyId = this.info.companyId
this.addParam.userId = this.info.userId
console.log(this.addParam)
addProject(this.addParam).then(result=>{
if(result.code == 200){
this.$message.success('添加成功!')
......@@ -346,6 +355,11 @@ export default {
//输入数字
number(value){
this.addParam.investmentAmount = value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g, '$1')//输入2位小数
},
//打开详情
clickDetail(id){
this.detailId = id
this.isDetailId = true
}
}
}
......
......@@ -11,6 +11,7 @@
<tables
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
......@@ -54,12 +55,13 @@ export default {
cid: this.companyId,
sort: 3,
pageNum: 1,
pageSize: 10
pageSize: 20
},
defaultSort: {prop: 'issueTime', order: 'descending'},
forData: [
{label: '招标代理单位名称', prop: 'agency', minWidth: '350', slot: true},
{label: '合作项目/工程名称', prop: 'projectInfo', minWidth: '400', sortable: true, slot: true},
{label: '最近一次合作时间', prop: 'issueTime', minWidth: '140', sortable: true}
{label: '合作项目/工程名称', prop: 'projectInfo', minWidth: '400', slot: true, sortable: 'custom', descending: '5', ascending: '6'},
{label: '最近一次合作时间', prop: 'issueTime', minWidth: '140', sortable: 'custom', descending: '3', ascending: '4'}
],
formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []},
......
......@@ -6,6 +6,7 @@
:query-params="queryParams"
:total="tableDataTotal"
:isExcel="true"
@handle-search="handleSearch"
/>
<tables
......@@ -17,13 +18,13 @@
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
>
<template slot="customName" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.customId&&scope.row.customName">{{ scope.row.customName }}</router-link>
<div v-else>{{ scope.row.customName || '--' }}</div>
<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>
</template>
<template slot="use" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.useId&&scope.row.use">{{ scope.row.use }}</router-link>
<div v-else>{{ scope.row.use || '--' }}</div>
<template slot="source" slot-scope="scope">
<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.source || '--' }}</div>
</template>
</tables>
</div>
......@@ -31,7 +32,7 @@
<script>
import mixin from '../mixins/mixin'
import { getList } from '@/api/detail/party-a/dealings'
import {tenderPage} from '@/api/detail/party-a/dealings'
export default {
name: 'Bidrecords',
props: ['companyId'],
......@@ -44,16 +45,18 @@ export default {
queryParams: {
cid: this.companyId,
pageNum: 1,
pageSize: 10
pageSize: 20
},
forData: [
{label: '招标代理单位名称', prop: 'customName', minWidth: '320', slot: true},
{label: '本企业投标报价(万元)', prop: 'way', minWidth: '160'},
{label: '发布日期', prop: 'way', minWidth: '100'},
{label: '中标地区', prop: 'way', minWidth: '160'},
{label: '信息来源', prop: 'use', minWidth: '280', slot: true}
{label: '项目名称', prop: 'name', minWidth: '320', slot: true},
{label: '本企业投标报价(万元)', prop: 'tenderOffer', minWidth: '160'},
{label: '发布日期', prop: 'publishTime', minWidth: '100'},
{label: '项目地区', prop: 'province', minWidth: '160'},
{label: '信息来源', prop: 'source', minWidth: '280', slot: true}
],
formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入项目名称查询', options: []},
],
formData: [],
//列表
tableLoading:false,
tableData:[],
......@@ -66,22 +69,18 @@ export default {
this.handleQuery()
},
methods: {
handleQuery() {
async handleQuery(params) {
this.tableLoading = true
getList(this.queryParams).then((res) => {
this.tableLoading = false
this.tableData = [
{
customId: '1',
customName:'滨州医学院口腔医学大楼铝合金门窗供货及安装',
use:'城镇住宅用地',
type:'房地产业',
way:'挂牌出让',
count:4
}
]
this.tableDataTotal = 100
})
let param = params?params:this.queryParams
let res = await tenderPage(param)
this.tableLoading = false
if(res.code==200){
this.tableData = res.rows
}
this.tableDataTotal = res.total
},
handlePic(url){
window.open(url, "_blank")
}
}
}
......
......@@ -70,10 +70,10 @@ export default {
tendereeId: this.data.tendereeId,
agencyId: this.data.agencyId,
pageNum: 1,
pageSize: 10
pageSize: 20
},
formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []},
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入合作项目/工程名称查询', options: []},
],
forData: [
{label: '合作项目/工程名称', prop: 'dealTitle', width: '720', slot: true},
......
......@@ -76,13 +76,13 @@ export default {
cid: this.companyId,
unitId: this.data.projectUnitId,
pageNum: 1,
pageSize: 10
pageSize: 20
},
formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []},
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入项目/工程名称查询', options: []},
],
forData: [
{label: '合作项目/工程名称', prop: 'projectAllName', width: '720', slot: true},
{label: '合作项目/工程名称', prop: 'projectAllName', width: '720', fixed: true, slot: true},
{label: '项目/工程金额(万元)', prop: 'winBidAmount', width: '160'},
{label: '合作时间', prop: 'winBidTime', width: '100'},
{label: '项目地区', prop: 'province', width: '160', slot: true},
......
......@@ -76,13 +76,13 @@ export default {
cid: this.data.companyId,
unitId: this.companyId,
pageNum: 1,
pageSize: 10
pageSize: 20
},
formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []},
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入合作项目/工程名称查询', options: []},
],
forData: [
{label: '合作项目/工程名称', prop: 'projectAllName', width: '720', slot: true},
{label: '合作项目/工程名称', prop: 'projectAllName', width: '720', fixed: true, slot: true},
{label: '项目/工程金额(万元)', prop: 'winBidAmount', width: '160'},
{label: '合作时间', prop: 'winBidTime', width: '100'},
{label: '项目地区', prop: 'province', width: '160', slot: true},
......
......@@ -11,6 +11,7 @@
<tables
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
......@@ -55,13 +56,14 @@ export default {
cid: this.companyId,
sort: 3,
pageNum: 1,
pageSize: 10
pageSize: 20
},
defaultSort: {prop: 'time', order: 'descending'},
forData: [
{label: '客户名称', prop: 'companyName', minWidth: '350', slot: true},
{label: '合作项目/工程名称', prop: 'projectAllName', minWidth: '400', sortable: true, slot: true},
{label: '合作总金额(万元)', prop: 'amount', minWidth: '150', sortable: true},
{label: '最近一次合作时间', prop: 'time', minWidth: '140', sortable: true}
{label: '合作项目/工程名称', prop: 'projectAllName', minWidth: '400', slot: true, sortable: 'custom', descending: '5', ascending: '6'},
{label: '合作总金额(万元)', prop: 'amount', minWidth: '150', sortable: 'custom', descending: '1', ascending: '2'},
{label: '最近一次合作时间', prop: 'time', minWidth: '140', sortable: 'custom', descending: '3', ascending: '4'}
],
formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []},
......@@ -90,32 +92,6 @@ export default {
}
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) {
this.rowData = data
this.isDetails = true
......
......@@ -11,6 +11,7 @@
<tables
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
......@@ -19,13 +20,13 @@
@handle-current-change="handleCurrentChange"
@sort-change="sortChange"
>
<template slot="customName" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.customId&&scope.row.customName">{{ scope.row.customName }}</router-link>
<div v-else>{{ scope.row.customName || '--' }}</div>
<template slot="projectAllName" slot-scope="scope">
<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 v-html="scope.row.projectAllName || '--'"></div>
</template>
<template slot="use" slot-scope="scope">
<router-link to="" tag="a" class="a-link" v-if="scope.row.useId&&scope.row.use">{{ scope.row.use }}</router-link>
<div v-else>{{ scope.row.use || '--' }}</div>
<template slot="companyName" slot-scope="scope">
<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.companyName || '--' }}</div>
</template>
</tables>
</div>
......@@ -33,7 +34,7 @@
<script>
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 {
name: 'Hiscontract',
props: ['companyId'],
......@@ -45,25 +46,27 @@ export default {
return {
queryParams: {
cid: this.companyId,
sort: 3,
pageNum: 1,
pageSize: 10
pageSize: 20
},
defaultSort: {prop: 'winBidTime', order: 'descending'},
forData: [
{label: '项目名称', prop: 'customName', minWidth: '560', slot: true},
{label: '中标时间', prop: 'way', minWidth: '100', sortable: true},
{label: '中标企业', prop: 'use', minWidth: '320', slot: true},
{label: '中标金额(万元)', prop: 'way', minWidth: '140', sortable: true},
{label: '下浮率(%)', prop: 'way', minWidth: '120', sortable: true},
{label: '项目经理 / 负责人', prop: 'way', minWidth: '130'},
{label: '中标地区', prop: 'way', minWidth: '160'},
{label: '工期(天)', prop: 'way', minWidth: '110', sortable: true},
{label: '业绩类别', prop: 'way', minWidth: '110'}
{label: '项目名称', prop: 'projectAllName', minWidth: '560', slot: true},
{label: '中标时间', prop: 'winBidTime', minWidth: '100', sortable: 'custom', descending: '3', ascending: '4'},
{label: '中标企业', prop: 'companyName', minWidth: '320', slot: true},
{label: '中标金额(万元)', prop: 'winBidAmount', minWidth: '140', sortable: 'custom', descending: '1', ascending: '2'},
{label: '下浮率(%)', prop: 'lowerRate', minWidth: '120', sortable: 'custom', descending: '7', ascending: '8'},
{label: '项目经理 / 负责人', prop: 'staffName', minWidth: '130'},
{label: '中标地区', prop: 'region', minWidth: '160'},
{label: '工期(天)', prop: 'period', minWidth: '110', sortable: 'custom', descending: '9', ascending: '10'},
{label: '业绩类别', prop: 'boundType', minWidth: '110'}
],
formData: [
{ type: 1, fieldName: 'region', value: '', placeholder: '项目地区', options: []},
{ type: 1, fieldName: 'time', value: '', placeholder: '中标时间', options: []},
{ type: 1, fieldName: 'amount', value: '', placeholder: '中标金额', options: []},
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入关键词查询', options: []},
{ type: 1, fieldName: 'provinceId', value: '', placeholder: '项目地区', options: [] },
{ type: 5, fieldName: 'time', value: '', placeholder: '中标时间', startTime: 'dateFrom', endTime: 'dateTo' },
{ type: 6, fieldName: 'money', value: '', placeholder: '中标金额', startMoney: 'amountMin', endMoney: 'amountMax' },
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入项目名称查询', options: [] }
],
//列表
tableLoading:false,
......@@ -78,45 +81,26 @@ export default {
this.handleQuery()
},
methods: {
handleOption(){
getOption().then((res) => {
this.setFormData('region', [
{ name: '类别1', value: '1' },
{ name: '类别2', value: '2' },
{ name: '类别3', value: '3' },
{ name: '类别4', value: '4' }
])
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' }
])
})
async handleOption(){
let res = await historySendProvince({cid: this.companyId})
if(res.code==200){
let region = res.data.map(item => {
let it = {name:item.province+'('+item.count+')',value:item.provinceId}
return it
})
this.setFormData('provinceId', region)
}
},
handleQuery(params) {
async handleQuery(params) {
this.tableLoading = true
let param = params?params:this.queryParams
getList(param).then((res) => {
this.tableLoading = false
this.tableData = [
{
customId: '1',
customName:'滨州医学院口腔医学大楼铝合金门窗供货及安装',
use:'城镇住宅用地',
type:'房地产业',
way:'挂牌出让',
count:4
}
]
this.tableDataTotal = 100
})
let res = await historySendPage(param)
this.tableLoading = false
if(res.code==200){
this.tableData = res.rows
}
this.tableDataTotal = res.total
}
}
}
......
......@@ -11,6 +11,7 @@
<tables
:indexFixed="true"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
......@@ -55,13 +56,14 @@ export default {
cid: this.companyId,
sort: 3,
pageNum: 1,
pageSize: 10
pageSize: 20
},
defaultSort: {prop: 'time', order: 'descending'},
forData: [
{label: '供应商', prop: 'companyName', minWidth: '350', slot: true},
{label: '合作项目/工程名称', prop: 'projectAllName', minWidth: '400', sortable: true, slot: true},
{label: '合作总金额(万元)', prop: 'amount', minWidth: '150', sortable: true},
{label: '最近一次合作时间', prop: 'time', minWidth: '140', sortable: true}
{label: '合作项目/工程名称', prop: 'projectAllName', minWidth: '400', slot: true, sortable: 'custom', descending: '5', ascending: '6'},
{label: '合作总金额(万元)', prop: 'amount', minWidth: '150', sortable: 'custom', descending: '1', ascending: '2'},
{label: '最近一次合作时间', prop: 'time', minWidth: '140', sortable: 'custom', descending: '3', ascending: '4'}
],
formData: [
{ type: 3, fieldName: 'keys', value: '', placeholder: '输入企业名称查询', options: []},
......
......@@ -81,11 +81,17 @@ export default {
components: {
Tables
},
props: {
customerIds: {
type: String,
default: ''
}
},
data() {
return {
ifEmpty:false,
queryParams:{
customerId:'f25219e73249eea0d9fddc5c7f04f97f',
customerId:this.customerIds,
pageNum:1,
pageSize:10,
},
......@@ -316,5 +322,8 @@ export default {
}
}
}
::v-deep .el-table__fixed::before, ::v-deep .el-table__fixed-right::before{
background-color:unset;
}
</style>
......@@ -3,7 +3,7 @@
<Header :company-id="companyId" v-if="companyId" />
<div class="flex-box part-main">
<div class="part-left">
<side-bar @currentPath="showPartPage" :pathName="currentPath.pathName" :partBoxHeight="partBoxHeight" />
<side-bar @currentPath="showPartPage" :pathName="currentPath.pathName" :partBoxHeight="partBoxHeight" :customerId="customerId" />
</div>
<div class="part-right">
<div id="partBox" v-if="companyId">
......@@ -42,14 +42,17 @@
<Judgment v-if="currentPath.pathName=='judgment'" :company-id="companyId" />
<CourtNotice v-if="currentPath.pathName=='courtNotice'" :company-id="companyId" />
<OpenacourtsessionNotice v-if="currentPath.pathName=='openacourtsessionNotice'" :company-id="companyId" />
<!-- 招标偏好 -->
<Preference v-if="currentPath.pathName=='preference'" :company-id="companyId" />
<!-- 合作情况 -->
<Cooperate v-if="currentPath.pathName=='cooperate'" :company-id="companyId" />
<!-- 决策链条 -->
<DecisionMaking v-if="currentPath.pathName=='decisionMaking'" :company-id="companyId" />
<!-- 跟进记录 -->
<Gjjl v-if="currentPath.pathName=='gjjl'" :company-id="companyId" />
<template v-if="customerId">
<!-- 招标偏好 -->
<Preference v-if="currentPath.pathName=='preference'" :customer-ids="customerId" />
<!-- 合作情况 -->
<Cooperate v-if="currentPath.pathName=='cooperate'" :customer-ids="customerId" />
<!-- 决策链条 -->
<DecisionMaking v-if="currentPath.pathName=='decisionMaking'" :customer-ids="customerId" />
<!-- 跟进记录 -->
<Gjjl v-if="currentPath.pathName=='gjjl'" types="gjdt" :customer-ids="customerId" />
</template>
</div>
</div>
</div>
......@@ -137,7 +140,8 @@ export default {
},
data() {
return {
companyId: 3068, //企业Id(测试默认3068)
companyId: 10361319, //企业Id(测试默认3068)
customerId: '', //企业Id(测试默认'a00d582a6041f32c16aac804e4924736')
currentPath: {
pathName: 'overview' //默认展示页
},
......@@ -152,6 +156,9 @@ export default {
if (this.$route.query.path) { // 获取跳转对应板块
this.currentPath.pathName = this.$route.query.path
}
if (this.$route.query.customerId) { // 判断是否显示
this.customerId = this.$route.query.customerId
}
},
mounted() {
const _this = this, erd = elementResizeDetectorMaker(), partBox = document.getElementById("partBox")
......
......@@ -30,6 +30,11 @@ export default {
condtion[item.endTime] = item.value[1];
return
}
if(item.fieldName == 'money') {
condtion[item.startMoney] = item.value[0];
condtion[item.endMoney] = item.value[1];
return
}
condtion[item.fieldName] = item.value
}
})
......@@ -65,7 +70,9 @@ export default {
},
//排序
sortChange(e){
console.log(e)
let item = this.forData.find(item => item.prop === e.prop)
this.queryParams.sort = item[e.order]
this.handleSearch()
}
}
}
......@@ -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: 'xxx', width: '100'},
{label: '决定文书号', prop: 'deciWritNo', width: '200'},
{label: '许可编号', prop: 'xxx', 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: 'xxx', width: '100'},
{label: '许可机关', prop: 'office', width: '180'},
{label: '行政许可机关统一社会信用代码', prop: 'xxx', width: '200'},
{label: '数据来源单位', prop: 'xxx', width: '110'},
{label: '数据来源单位统一社会信用代码', prop: 'xxx', 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: true, width: '120'},
{label: '预算金额(万元)', prop: 'type', sortable: true, 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,74 @@ 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){
console.log('参数1:',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
})
}
console.log('参数2:',params)
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: true, width: '150'},
{label: '项目资本金(亿元)', prop: 'type', sortable: true, width: '150'},
{label: '项目收益倍数(倍)', prop: 'way', sortable: true, width: '150'},
{label: '专项债金额(亿元)', prop: 'state', sortable: true, width: '150'},
{label: '专项债用作资本金(亿元)', prop: 'money', sortable: true, 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: true, width: '140'},
{label: '总面积(㎡)', prop: 'scale', sortable: true, 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
}
}
}
......
......@@ -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
},
......@@ -60,8 +60,6 @@ export default {
//列表
tableLoading:false,
tableData:[],
pageIndex:1,
pageSize:10,
tableDataTotal:0,
}
},
......
......@@ -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
},
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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