Commit 140d4633 authored by tianhongyang's avatar tianhongyang

Merge branch 'V20230915' of http://192.168.60.201/root/dsk-operate-sys into V20230915

parents dd64481b 6922af6c
...@@ -4,6 +4,7 @@ package com.dsk.jsk.controller; ...@@ -4,6 +4,7 @@ package com.dsk.jsk.controller;
import com.dsk.common.core.domain.R; import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.jsk.domain.*; import com.dsk.jsk.domain.*;
import com.dsk.jsk.domain.bo.EnterpriseProjectImportantListDto;
import com.dsk.jsk.service.EnterpriseProjectService; import com.dsk.jsk.service.EnterpriseProjectService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -163,4 +164,12 @@ public class EnterpriseProjectController { ...@@ -163,4 +164,12 @@ public class EnterpriseProjectController {
return enterpriseProjectService.projectProcess(body); return enterpriseProjectService.projectProcess(body);
} }
/**
* 企业重点项目列表
*/
@RequestMapping(value = "/importantList", method = RequestMethod.POST)
public TableDataInfo importantList(@RequestBody EnterpriseProjectImportantListDto dto) throws Exception {
return enterpriseProjectService.importantList(dto);
}
} }
package com.dsk.jsk.domain.bo;
import com.dsk.jsk.domain.BasePage;
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 EnterpriseProjectImportantListDto extends BasePage {
private Integer companyId;
private String keys;
private String projectLevel;
private String projectType;
}
package com.dsk.jsk.service; package com.dsk.jsk.service;
import cn.hutool.core.bean.BeanException;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
...@@ -7,6 +8,7 @@ import com.dsk.common.core.domain.R; ...@@ -7,6 +8,7 @@ import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo; import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.utils.DskOpenApiUtil; import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.jsk.domain.*; import com.dsk.jsk.domain.*;
import com.dsk.jsk.domain.bo.EnterpriseProjectImportantListDto;
import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.MapUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -217,4 +219,10 @@ public class EnterpriseProjectService { ...@@ -217,4 +219,10 @@ public class EnterpriseProjectService {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/recruitmentMarket/projectProcess", BeanUtil.beanToMap(body, false, false)); Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/recruitmentMarket/projectProcess", BeanUtil.beanToMap(body, false, false));
return BeanUtil.toBean(map, R.class); return BeanUtil.toBean(map, R.class);
} }
public TableDataInfo importantList(EnterpriseProjectImportantListDto dto) throws Exception{
if(ObjectUtil.isEmpty(dto.getCompanyId())) throw new BeanException("企业id不能为空!");
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseProject/importantList", BeanUtil.beanToMap(dto, false, false));
return dskOpenApiUtil.responsePage(map);
}
} }
...@@ -53,4 +53,12 @@ public class CompanySearchController { ...@@ -53,4 +53,12 @@ public class CompanySearchController {
} }
return opportunityRadarService.enterprisePage(object); return opportunityRadarService.enterprisePage(object);
} }
/*
* 查业主单位
*/
@RequestMapping("/bossCompany")
public AjaxResult bossCompany(@RequestBody JSONObject object) {
return opportunityRadarService.bossCompany(object);
}
} }
...@@ -163,4 +163,42 @@ public class MarketAnalysisController extends BaseController { ...@@ -163,4 +163,42 @@ public class MarketAnalysisController extends BaseController {
public AjaxResult countGroupByMonth(@RequestBody JSONObject object) { public AjaxResult countGroupByMonth(@RequestBody JSONObject object) {
return marketAnalysisService.countGroupByMonth(object); return marketAnalysisService.countGroupByMonth(object);
} }
//-----------------------------------集团概览----------------------------------
//集团概览 集团施工项目最新招标
@RequestMapping("/combine/recentlyBid")
public AjaxResult combineRecentlyBid(@RequestBody JSONObject object){
return marketAnalysisService.combineRecentlyBid(object);
}
//集团概览 集团施工项目年度招标
@RequestMapping("/combine/bidByYear")
public AjaxResult combineBidByYear(@RequestBody JSONObject object){
return marketAnalysisService.combineBidByYear(object);
}
//集团概览 集团施工项目发包金额统计
@RequestMapping("/combine/groupByMoney")
public AjaxResult combineGroupByMoney(@RequestBody JSONObject object){
return marketAnalysisService.combineGroupByMoney(object);
}
//集团概览 集团施工项目发包类型统计
@RequestMapping("/combine/groupByType")
public AjaxResult combineGroupByType(@RequestBody JSONObject object){
return marketAnalysisService.combineGroupByType(object);
}
//集团概览 施工项目下浮率统计
@RequestMapping("/combine/groupByLowerRate")
public AjaxResult combineGroupByLowerRate(@RequestBody JSONObject object){
return marketAnalysisService.combineGroupByLowerRate(object);
}
//集团概览 历史发包项目金额Top10
@RequestMapping("/combine/peojectTop")
public AjaxResult combinePeojectTop(@RequestBody JSONObject object){
return marketAnalysisService.combinePeojectTop(object);
}
} }
...@@ -4,11 +4,17 @@ import cn.hutool.core.bean.BeanUtil; ...@@ -4,11 +4,17 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.dsk.acc.openapi.client.util.CommonUtils;
import com.dsk.biz.domain.vo.CustomerStatusListVo;
import com.dsk.biz.service.ICustomerService;
import com.dsk.common.core.domain.AjaxResult; import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.exception.ServiceException; import com.dsk.common.exception.ServiceException;
import com.dsk.common.utils.DskOpenApiUtil; import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.common.utils.StringUtils; import com.dsk.common.utils.StringUtils;
import com.dsk.jsk.domain.vo.ImportantProjectExportVo; import com.dsk.jsk.domain.vo.ImportantProjectExportVo;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -28,6 +34,9 @@ public class BusinessOpportunityRadarService { ...@@ -28,6 +34,9 @@ public class BusinessOpportunityRadarService {
@Autowired @Autowired
private DskOpenApiUtil dskOpenApiUtil; private DskOpenApiUtil dskOpenApiUtil;
@Autowired
ICustomerService iCustomerService;
public AjaxResult jskBidNewsPage(JSONObject object) { public AjaxResult jskBidNewsPage(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/jskBid/news/page", object); Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/jskBid/news/page", object);
return BeanUtil.toBean(map, AjaxResult.class); return BeanUtil.toBean(map, AjaxResult.class);
...@@ -68,6 +77,53 @@ public class BusinessOpportunityRadarService { ...@@ -68,6 +77,53 @@ public class BusinessOpportunityRadarService {
return BeanUtil.toBean(map, AjaxResult.class); return BeanUtil.toBean(map, AjaxResult.class);
} }
public AjaxResult bossCompany(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/enterprice/bossCompany", object);
Integer code = MapUtils.getInteger(map, "code", 300);
if (200 != code) throw new RuntimeException();
Map data = MapUtils.getMap(map, "data", null);
List<Object> list = CommonUtils.assertAsArray(MapUtils.getObject(data, "list", ""));
if (CollectionUtils.isEmpty(list)) {
return BeanUtil.toBean(map, AjaxResult.class);
}
ArrayList<String> companyNames = new ArrayList<>();
ArrayList<Long> cIds = new ArrayList<>();
for (Object dataMap : list) {
String name = MapUtils.getString(CommonUtils.assertAsMap(dataMap), "companyName");
if (ObjectUtil.isNotEmpty(name) && name.contains("font")) {
name = name.replaceAll("<font color='red'>", "");
name = name.replaceAll("</font>", "");
companyNames.add(name);
} else {
companyNames.add(name);
}
cIds.add(MapUtils.getLong(CommonUtils.assertAsMap(dataMap), "companyId"));
}
List<CustomerStatusListVo> claimStatusList = iCustomerService.selectStatusListByCompanyName(companyNames);
for (Object enterprise : list) {
Map<String, Object> companyMap = CommonUtils.assertAsMap(enterprise);
String companyName = MapUtils.getString(companyMap, "companyName", "");
if (ObjectUtil.isNotEmpty(companyName) && companyName.contains("font")) {
companyName = companyName.replace("<font color='red'>", "");
companyName = companyName.replace("</font>", "");
}
companyMap.put("claimStatus", null);
for (CustomerStatusListVo vo : claimStatusList) {
if (companyName.equals(vo.getCompanyName())) {
companyMap.put("claimStatus", vo.getStatus());
}
}
}
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult enterpriseByName(String keyword) { public AjaxResult enterpriseByName(String keyword) {
Map<String, Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
params.put("keyword", keyword); params.put("keyword", keyword);
......
...@@ -4,9 +4,13 @@ import cn.hutool.core.bean.BeanUtil; ...@@ -4,9 +4,13 @@ import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.dsk.common.core.domain.AjaxResult; import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.utils.DskOpenApiUtil; import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.jsk.service.EnterpriseService;
import org.apache.commons.collections4.MapUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
...@@ -20,6 +24,9 @@ public class MarketAnalysisService { ...@@ -20,6 +24,9 @@ public class MarketAnalysisService {
@Autowired @Autowired
private DskOpenApiUtil dskOpenApiUtil; private DskOpenApiUtil dskOpenApiUtil;
@Autowired
private EnterpriseService enterpriseService;
public AjaxResult areaGroupByProvince() { public AjaxResult areaGroupByProvince() {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/areaGroupByProvince", new JSONObject()); Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/areaGroupByProvince", new JSONObject());
return BeanUtil.toBean(map, AjaxResult.class); return BeanUtil.toBean(map, AjaxResult.class);
...@@ -114,4 +121,66 @@ public class MarketAnalysisService { ...@@ -114,4 +121,66 @@ public class MarketAnalysisService {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/lowerRangeTenderType", object); Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/lowerRangeTenderType", object);
return BeanUtil.toBean(map, AjaxResult.class); return BeanUtil.toBean(map, AjaxResult.class);
} }
public AjaxResult combineRecentlyBid(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/combine/recentlyBid", object);
if (!ObjectUtils.isEmpty(map.get("data"))) {
List<Map<String, Object>> list = (List<Map<String, Object>>) map.get("data");
list.parallelStream().forEach(res -> {
Integer companyId = MapUtils.getInteger(res, "companyId");
String companyName = MapUtils.getString(res, "companyName");
res.put("uipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(companyName, companyId));
});
}
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult combineBidByYear(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/combine/bidByYear", object);
if (!ObjectUtils.isEmpty(map.get("data"))) {
List<Map<String, Object>> list = (List<Map<String, Object>>) map.get("data");
list.parallelStream().forEach(res -> {
Integer companyId = MapUtils.getInteger(res, "tendereeId");
String companyName = MapUtils.getString(res, "tenderee");
res.put("uipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(companyName, companyId));
});
}
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult combineGroupByMoney(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/combine/groupByMoney", object);
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult combineGroupByType(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/combine/groupByType", object);
if (!ObjectUtils.isEmpty(map.get("data"))) {
List<Map<String, Object>> list = (List<Map<String, Object>>) map.get("data");
list.parallelStream().forEach(res -> {
Integer companyId = MapUtils.getInteger(res, "companyId");
String companyName = MapUtils.getString(res, "companyName");
res.put("uipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(companyName, companyId));
});
}
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult combineGroupByLowerRate(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/combine/groupByLowerRate", object);
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult combinePeojectTop(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/combine/peojectTop", object);
if (!ObjectUtils.isEmpty(map.get("data"))) {
List<Map<String, Object>> list = (List<Map<String, Object>>) map.get("data");
list.parallelStream().forEach(res -> {
Integer companyId = MapUtils.getInteger(res, "projectUnitId");
String companyName = MapUtils.getString(res, "projectUnit");
res.put("uipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(companyName, companyId));
});
}
return BeanUtil.toBean(map, AjaxResult.class);
}
} }
...@@ -345,7 +345,10 @@ ul, li { ...@@ -345,7 +345,10 @@ ul, li {
} }
} }
.is-scrolling-left+.el-table__fixed,.is-scrolling-middle+.el-table__fixed,.is-scrolling-right+.el-table__fixed{ .is-scrolling-left+.el-table__fixed,.is-scrolling-middle+.el-table__fixed,.is-scrolling-right+.el-table__fixed{
box-shadow:none; //box-shadow:none;
//-webkit-box-shadow: 2px 0px 1px -2px #C3CBD5;
box-shadow: 2px 0 8px -7px #202020;
border-right: 1px solid #C3CBD5;
height: auto !important; height: auto !important;
bottom: 16px !important; bottom: 16px !important;
} }
...@@ -721,6 +724,29 @@ ul, li { ...@@ -721,6 +724,29 @@ ul, li {
} }
} }
} }
//无边框搜索框
.newSearch{
width: 238px;
height: 32px;
border-radius: 4px;
.el_input{
height: 32px !important;
}
.el-input__prefix{
left: 12px;
.el-input__icon{
img{
float: left;
margin-top: 7px;
}
}
}
.el-input__inner{
padding-left: 36px;
border-color: #fff !important;
height: 32px !important;
}
}
//导出EXCEL //导出EXCEL
.btn-export{ .btn-export{
display: inline-block; display: inline-block;
...@@ -766,3 +792,21 @@ ul, li { ...@@ -766,3 +792,21 @@ ul, li {
box-shadow: 4px 0 9px -5px rgba(0, 0, 0, 0.12); box-shadow: 4px 0 9px -5px rgba(0, 0, 0, 0.12);
-webkit-box-shadow: 4px 0 9px -5px rgba(0, 0, 0, 0.12); -webkit-box-shadow: 4px 0 9px -5px rgba(0, 0, 0, 0.12);
} }
//下拉选项样式
.el-select-dropdown {
box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.08);
border: 0;
.el-select-dropdown__list {
padding: 0;
.el-select-dropdown__item {
padding: 0 16px;
}
}
}
.min1370{
min-width: 1370px;
}
...@@ -836,19 +836,27 @@ ...@@ -836,19 +836,27 @@
} }
//资料文档、相关企业 //资料文档、相关企业
.searchbtns{ .searchbtns{
display: flex;
position: absolute; position: absolute;
right: 16px; left: 100px;
top: 17px; top: 17px;
width: calc(100% - 116px);
.searchInput, .el-select {
float: left;
}
.btn{
float: right;
}
.searchInput{ .searchInput{
position: relative;
&.small{ &.small{
border: 1px solid #d9d9d9; border: 1px solid #fff;
width: 240px; width: 240px;
.el-input{ .el-input{
width: 180px; //width: 180px;
} }
.el-input__inner{ .el-input__inner{
padding-right: 32px; //padding-right: 32px;
} }
.el-input__prefix{ .el-input__prefix{
left: 8px; left: 8px;
...@@ -868,19 +876,25 @@ ...@@ -868,19 +876,25 @@
border-radius: 2px; border-radius: 2px;
} }
.select{ .select{
width: 110px; width: 94px;
.el-input__inner{ .el-input__inner{
width: 110px; //width: 110px;
height: 32px; height: 32px;
background: #FFFFFF; background: #FFFFFF;
border-radius: 2px; border-radius: 4px;
border: 1px solid #D9D9D9; border: 0;
padding:5px 28px 5px 8px;
} }
.el-input--medium .el-input__icon{ .el-input--medium .el-input__icon{
line-height: 32px; line-height: 32px;
} }
margin-right: 10px; margin-right: 10px;
.is-focus{
.el-input__inner{
background: #F4F6F9;
}
}
} }
} }
.document{ .document{
...@@ -1273,3 +1287,6 @@ ...@@ -1273,3 +1287,6 @@
} }
} }
} }
.top12{
margin-top: 12px;
}
...@@ -441,14 +441,15 @@ select { ...@@ -441,14 +441,15 @@ select {
.toolbar-right-download { .toolbar-right-download {
padding: 6px 18px; padding: 6px 16px;
position: relative;
top: 1px;
margin: 0px; margin: 0px;
cursor: pointer; cursor: pointer;
font-weight: 400; font-weight: 400;
color: #232323; color: #232323;
background: #FFFFFF; background: #FFFFFF;
border-radius: 2px; border-radius: 2px;
border: 1px solid #D9D9D9;
text-align: center; text-align: center;
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div :class="classObj" class="app-wrapper" :style="{'--current-color': theme}"> <div :class="classObj" class="app-wrapper" :style="{'--current-color': theme}">
<div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside"/> <div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside"/>
<sidebar v-if="!sidebar.hide" class="sidebar-container" @handleBar="handleSideBar" id="sidebar"/> <sidebar v-if="!sidebar.hide" class="sidebar-container" @handleBar="handleSideBar" id="sidebar"/>
<div :class="{hasTagsView:needTagsView,sidebarHide:sidebar.hide,EnterpriseData:$route.name=='Group',width1350:$route.name=='Radar',width1240:$route.name=='Overview'}" class="main-container"> <div :class="{hasTagsView:needTagsView,sidebarHide:sidebar.hide,width1350:$route.name=='Radar'||$route.name=='Group',width1240:$route.name=='Overview'}" class="main-container">
<div :class="{'fixed-header':fixedHeader}" style="position: relative;z-index: 1000;"> <div :class="{'fixed-header':fixedHeader}" style="position: relative;z-index: 1000;">
<navbar :offsetWidth="offsetWidth"/> <navbar :offsetWidth="offsetWidth"/>
</div> </div>
...@@ -133,9 +133,6 @@ export default { ...@@ -133,9 +133,6 @@ export default {
.mobile .fixed-header { .mobile .fixed-header {
width: 100%; width: 100%;
} }
.EnterpriseData{
min-width: 1710px;
}
.width1350{ .width1350{
min-width: 1350px; min-width: 1350px;
} }
......
...@@ -242,7 +242,11 @@ export default { ...@@ -242,7 +242,11 @@ export default {
width: 120px; width: 120px;
height: 34px; height: 34px;
position: relative; position: relative;
.rote {
.el-input__inner{
background: #F4F6F9;
}
}
.input-block { .input-block {
margin: 0; margin: 0;
width: 100%; width: 100%;
...@@ -256,6 +260,9 @@ export default { ...@@ -256,6 +260,9 @@ export default {
>.custom-money-input.el-input { >.custom-money-input.el-input {
width: 100%; width: 100%;
height: 100%; height: 100%;
.el-input__inner{
border: 0;
}
>input { >input {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -290,10 +297,9 @@ export default { ...@@ -290,10 +297,9 @@ export default {
font-size: 14px; font-size: 14px;
color: #666666; color: #666666;
background-color: #fff; background-color: #fff;
border: 1px solid #E4E7ED;
padding: 6px 0;
border-radius: 4px; border-radius: 4px;
z-index: 10; z-index: 10;
box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.08);
// .arrow { // .arrow {
......
...@@ -248,6 +248,11 @@ export default { ...@@ -248,6 +248,11 @@ export default {
width: 120px; width: 120px;
height: 34px; height: 34px;
.rote {
.el-input__inner{
background: #F4F6F9;
}
}
.input-block { .input-block {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -261,6 +266,9 @@ export default { ...@@ -261,6 +266,9 @@ export default {
>.custom-time-input.el-input { >.custom-time-input.el-input {
width: 100%; width: 100%;
height: 100%; height: 100%;
.el-input__inner{
border: 0;
}
>input { >input {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -295,10 +303,9 @@ export default { ...@@ -295,10 +303,9 @@ export default {
font-size: 14px; font-size: 14px;
color: #666666; color: #666666;
background-color: #fff; background-color: #fff;
border: 1px solid #E4E7ED;
padding: 6px 0;
border-radius: 4px; border-radius: 4px;
z-index: 10; z-index: 10;
box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.08);
.option { .option {
padding: 0 24px 0 16px; padding: 0 24px 0 16px;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<span> / 客户列表</span> <span> / 客户列表</span>
</div> </div>
<div class="app-container"> <div class="app-container">
<el-card class="box-card noborder"> <el-card class="box-card noborder min1370">
<div class="tables "> <div class="tables ">
<div class="empty" v-if="tableData.total==0 && !isSkeleton"> <div class="empty" v-if="tableData.total==0 && !isSkeleton">
<img src="@/assets/images/project/empty.png"> <img src="@/assets/images/project/empty.png">
...@@ -18,10 +18,11 @@ ...@@ -18,10 +18,11 @@
<div> <div>
<el-form ref="queryForm" :model="searchParam" :inline="true" size="small"> <el-form ref="queryForm" :model="searchParam" :inline="true" size="small">
<el-form-item prop="companyName"> <el-form-item prop="companyName">
<div class="searchInput"> <div class="newSearch">
<el-input type="text" clearable v-model="searchParam.companyName" @change="clearname" placeholder="输入企业名称查询"></el-input> <el-input type="text" v-model="searchParam.companyName" clearable placeholder="输入企业名称查询" @change="clearname" >
<div class="btn" @click="handleCurrentChange(1)">搜索</div> <i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/sousuo.png" width="16px" @click="handleCurrentChange(1)"></i>
</div> </el-input>
</div>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-cascader <el-cascader
...@@ -839,8 +840,5 @@ ...@@ -839,8 +840,5 @@
} }
.searchInput{ .searchInput{
width: 240px; width: 240px;
.el-input{
/*width: 260px;*/
}
} }
</style> </style>
...@@ -9,9 +9,10 @@ ...@@ -9,9 +9,10 @@
<div class="p2">建议调整关键词或筛选条件,重新搜索</div> <div class="p2">建议调整关键词或筛选条件,重新搜索</div>
</div> </div>
<div class="table_search"> <div class="table_search">
<div class="searchInput"> <div class="newSearch">
<el-input type="text" clearable v-model="searchParam.companyName" @change="clearname" placeholder="输入企业名称查询"></el-input> <el-input type="text" v-model="searchParam.companyName" clearable placeholder="输入企业名称查询" @change="clearname" >
<div class="btn" @click="handleCurrentChange(1)">搜索</div> <i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/sousuo.png" width="16px" @click="handleCurrentChange(1)"></i>
</el-input>
</div> </div>
<div class="dc"> <div class="dc">
<div class="total">{{tableData.total}}</div> <div class="total">{{tableData.total}}</div>
......
...@@ -601,7 +601,7 @@ ...@@ -601,7 +601,7 @@
padding: 16px; padding: 16px;
background: #ffffff; background: #ffffff;
height: 152px; height: 152px;
margin-bottom: 22px; margin-bottom: 12px;
.item{ .item{
display: flex; display: flex;
.icons{ .icons{
...@@ -680,6 +680,9 @@ ...@@ -680,6 +680,9 @@
.el-input-group__append{ .el-input-group__append{
background: #F5F5F5; background: #F5F5F5;
color: #0081FF; color: #0081FF;
padding: 0;
width: 70px;
text-align: center;
} }
.el-input__inner:focus{ .el-input__inner:focus{
border-color: #3181fa; border-color: #3181fa;
......
...@@ -395,9 +395,6 @@ ...@@ -395,9 +395,6 @@
provinceIds.length>0?params.provinceIds = provinceIds:'' provinceIds.length>0?params.provinceIds = provinceIds:''
cityIds.length>0?params.cityIds = cityIds:'' cityIds.length>0?params.cityIds = cityIds:''
districtIds.length>0?params.districtIds = districtIds:'' districtIds.length>0?params.districtIds = districtIds:''
// provinceIds.length>0?this.queryParams.provinceIds = provinceIds:''
// cityIds.length>0?this.queryParams.cityIds = cityIds:''
// districtIds.length>0?this.queryParams.districtIds = districtIds:''
} }
return params return params
}, },
...@@ -450,8 +447,8 @@ ...@@ -450,8 +447,8 @@
.search-box { .search-box {
display: inline-block; display: inline-block;
border-radius: 4px; border-radius: 4px;
border: 1px solid #D9D9D9; /*border: 1px solid #D9D9D9;*/
width: 82px; width: 70px;
/*cursor: pointer;*/ /*cursor: pointer;*/
position: relative; position: relative;
.search-box-t { .search-box-t {
...@@ -461,7 +458,7 @@ ...@@ -461,7 +458,7 @@
color: #999999; color: #999999;
margin-right: 8px; margin-right: 8px;
text-align: center; text-align: center;
width: 82px; width: 70px;
display: inline-block; display: inline-block;
cursor: pointer; cursor: pointer;
i { i {
...@@ -479,7 +476,7 @@ ...@@ -479,7 +476,7 @@
background: #ffffff; background: #ffffff;
box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.1); box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.1);
border-radius: 4px; border-radius: 4px;
width: 640px; width: 500px;
//height: 337px; //height: 337px;
padding: 16px; padding: 16px;
position: absolute; position: absolute;
...@@ -501,7 +498,7 @@ ...@@ -501,7 +498,7 @@
} }
.item_ckquery{ .item_ckquery{
position: relative; position: relative;
width: 520px; width: 400px;
/*float: left;*/ /*float: left;*/
/*flex: 1;*/ /*flex: 1;*/
span{ span{
......
...@@ -90,7 +90,8 @@ ...@@ -90,7 +90,8 @@
{ type: 4, fieldName: 'boundTypes', value: '', placeholder: '业绩类型', options: [],width:150}, { type: 4, fieldName: 'boundTypes', value: '', placeholder: '业绩类型', options: [],width:150},
{ type: 4, fieldName: 'projectTypes', value: '', placeholder: '项目类型', options: [],width:150}, { type: 4, fieldName: 'projectTypes', value: '', placeholder: '项目类型', options: [],width:150},
{ type: 1, fieldName: 'cgbl', value: '', placeholder: '持股比例', options: [],width:100}, { type: 1, fieldName: 'cgbl', value: '', placeholder: '持股比例', options: [],width:100},
{ type: 3, fieldName: 'searchValue', value: '', placeholder: '搜索中标成员名称/项目名称'}, // { type: 3, fieldName: 'searchValue', value: '', placeholder: '搜索中标成员名称/项目名称'},
{ type: 3, fieldName: 'searchValue', value: '', placeholder: '查询'},
], ],
tableData:[], tableData:[],
tableDataTotal:0, tableDataTotal:0,
......
<template>
<div class="performance">
<div class="content">
<head-form
title="集团施工项目最新招标"
:form-data="formData"
:query-params="queryParams"
:slots="true"
:isExcel="false"
></head-form>
</div>
<div class="content">
<head-form
title="集团年度发包统计"
:slots="true"
:isExcel="false"
></head-form>
</div>
<div class="content">
<head-form
title="集团施工项目发包金额区间"
:slots="true"
:isExcel="false"
></head-form>
</div>
<div class="content">
<head-form
title="集团施工项目发包类型统计"
:slots="true"
:isExcel="false"
></head-form>
</div>
<div class="content">
<head-form
title="施工项目下浮率统计"
:slots="true"
:isExcel="false"
></head-form>
</div>
<div class="content">
<head-form
title="历史发包项目金额TOP10"
:form-data="formData"
:query-params="queryParams1"
:slots="true"
:isExcel="false"
></head-form>
</div>
</div>
</template>
<script>
import mixin from '../../party-a/mixins/mixin'
import { getDictType } from '@/api/main'
export default {
name: 'qualifications',
props: ['customerId','combineName'],
mixins: [mixin],
components:{},
data(){
return{
queryParams: {},
queryParams1: {},
forData: [
{label: '项目类型', prop: 'projectType',minWidth: '80',slot: true},
{label: '持股比例', prop: 'stockPercent',slot: true,minWidth: '80'},
],
formData: [
{ type: 4, fieldName: 'projectTypes', value: '', placeholder: '项目类型', options: [],width:150},
{ type: 1, fieldName: 'cgbl', value: '', placeholder: '持股比例', options: [],width:110},
],
cgblList: [
{name:'100%',value:'100%'},
{name:'50%以上',value:'50%以上'},
{name:'20%以上',value:'20%以上'},
{name:'5%以上',value:'5%以上'},
{name:'1%-5%',value:'1%-5%'},
],
}
},
created() {
this.formData[1].options=this.cgblList;
//项目类型
getDictType('project_type_new').then(result=>{
let data = result.code == 200 ? result.data:[];
if(data.length > 0){
for (var i=0;i<data.length;i++){
this.formData[0].options.push({
name: data[i].dictLabel,
value: data[i].dictValue,
})
}
}
})
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.performance{
height: calc(100% - 64px);
.content{
background: #ffffff;
border-radius: 4px;
padding: 16px;
margin-bottom: 16px;
}
}
</style>
<template>
<div class="performance">
<head-form
title=""
:form-data="formData"
:query-params="queryParams"
:total="tableDataTotal"
:isExcel="false"
@handle-search="handleSearch"
></head-form>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton>
<tables
v-if="!isSkeleton"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:MaxPage=500
:tableDataTotal="tableDataTotal"
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
@sort-change="sortChange"
>
<template slot="tenderee" slot-scope="scope">
<router-link :to="scope.row.tendereeUipId?`/enterprise/${encodeStr(scope.row.tendereeId)}`:`/company/${encodeStr(scope.row.tendereeId)}`" tag="a" class="a-link" v-if="scope.row.tendereeId&&scope.row.tenderee" v-html="scope.row.tenderee"></router-link>
<div v-else v-html="scope.row.tenderee || '--'"></div>
</template>
<template slot="projectName" slot-scope="scope">
<router-link :to="`/radar/Notice/details/${scope.row.bId}`" tag="a" class="a-link" v-if="scope.row.bId" v-html="scope.row.projectName"></router-link>
<div v-else v-html="scope.row.projectName || '--'"></div>
</template>
<template slot="agency" slot-scope="scope">
<router-link :to="scope.row.agencyUipId?`/enterprise/${encodeStr(scope.row.agencyId)}`:`/company/${encodeStr(scope.row.agencyId)}`" tag="a" class="a-link" v-if="scope.row.agencyId&&scope.row.agency" v-html="scope.row.agency"></router-link>
<div v-else v-html="scope.row.agency || '--'"></div>
</template>
<template slot="stockPercent" slot-scope="scope">
<div>{{scope.row.stockPercent || '--'}}{{scope.row.stockPercent ? '%':''}}</div>
</template>
<template slot="projectType" slot-scope="scope">
<div v-if="scope.row.projectType === '空白'">--</div>
<div v-else>{{scope.row.projectType || '--'}}</div>
</template>
<template slot="bidAmount" slot-scope="scope">
<div>{{scope.row.bidAmount || '--'}}{{scope.row.bidAmount ? '万元':''}}</div>
</template>
</tables>
<el-dialog :visible.sync="dialogExportVisible" width="640px" append-to-body class="dialogExport">
<template slot="title">
<img class="tip-img" src="@/assets/images/icon.png" />数据导出
</template>
<div class="table-item">
<el-table :data="exportTableData">
<el-table-column prop="issueTime" label="招标发布时间" width="110"></el-table-column>
<el-table-column prop="tenderee" label="招标成员" width="200"></el-table-column>
<el-table-column prop="stockPercent" label="持股比例" min-width="100"></el-table-column>
<el-table-column prop="projectName" label="项目名称" min-width="220"></el-table-column>
<el-table-column prop="bidAmount" label="预算金额" min-width="100"></el-table-column>
<el-table-column prop="address" label="项目地区" min-width="110"></el-table-column>
<el-table-column prop="subjectMatter" label="招标采购分类" min-width="130"></el-table-column>
<el-table-column prop="projectType" label="项目类型" min-width="100"></el-table-column>
<el-table-column prop="agency" label="代理单位" min-width="160"></el-table-column>
</el-table>
</div>
<div class="input">
导出数量:
<el-input placeholder="" v-model="value" oninput="value=value.replace(/[^\d]/g,'')">
<template slot="append"></template>
</el-input>
<p v-if="value > 2000"><i class="el-icon-error"></i>最多支持导出2000条,如需更多联系大司空客服人员</p>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="clickEXCEL">确认导出</el-button>
<el-button @click="cancel">取消</el-button>
</div>
</el-dialog>
<el-dialog :visible.sync="dialogExportVisible1" width="640px" append-to-body class="dialogExport">
<template slot="title">
<img class="tip-img" src="@/assets/images/icon.png" />
数据导出
</template>
<div class="content">
<img class="success" src="@/assets/images/success.png" />
<p class="p1">导出成功</p>
<p class="p2">
可在个人中心查看导出表格
<span @click="toUrl">前往个人中心</span>
</p>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="downloadFile(exportData.url,exportData.originalName)">下载表格</el-button>
<el-button @click="dialogExportVisible1 = false">取消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import mixin from '../../party-a/mixins/mixin'
import CustomTimeSelect from '../../party-a/component/CustomTimeSelect'
import CustomMoneySelect from '../../party-a/component/CustomMoneySelect'
import {bidPage,exportBid} from '@/api/detail/groupAccount/groupAccount'
import dataRegion from '@/assets/json/dataRegion1'
import { getDictType } from '@/api/main'
export default {
name: 'qualifications',
props: ['customerId','combineName'],
mixins: [mixin],
components:{CustomTimeSelect,CustomMoneySelect},
data(){
return{
isSkeleton:true,
tableLoading:false,
isDetails: false,
defaultSort: {prop: 'time', order: 'descending'},
queryParams: {
combineId: this.customerId,
pageNum: 1,
pageSize: 20,
},
forData: [
{label: '招标发布时间', prop: 'issueTime',minWidth: '90'},
{label: '招标成员', prop: 'tenderee', slot: true,minWidth: '190'},
{label: '持股比例', prop: 'stockPercent',slot: true,minWidth: '80'},
{label: '项目名称', prop: 'projectName', slot: true,minWidth: '220'},
{label: '预算金额', prop: 'bidAmount',slot: true,minWidth: '100'},
{label: '项目地区', prop: 'address',minWidth: '110'},
{label: '招标采购分类', prop: 'subjectMatter',minWidth: '90'},
{label: '项目类型', prop: 'projectType',minWidth: '80',slot: true},
{label: '代理单位', prop: 'agency',minWidth: '160',slot: true},
],
formData: [
{ type: 7, fieldName: 'province', value: '',props: {multiple: true,value: 'id',expandTrigger: 'hover'}, placeholder: '项目地区', options:[]},
{ type: 5, fieldName: 'time', value: '', placeholder: '招标发布时间', startTime: 'startTime', endTime: 'endTime',timeList:[] },
{ type: 6, fieldName: 'money', value: '', placeholder: '预算金额', startMoney: 'minAmount', endMoney: 'maxAmount',moneyList:[] },
{ type: 1, fieldName: 'subjectMatters', value: '', placeholder: '招标采购分类', options: [],width:125},
{ type: 4, fieldName: 'projectTypes', value: '', placeholder: '项目类型', options: [],width:150},
{ type: 1, fieldName: 'cgbl', value: '', placeholder: '持股比例', options: [],width:110},
{ type: 3, fieldName: 'keys', value: '', placeholder: '查询'},
],
tableData:[],
tableDataTotal:0,
addressList: [],
cgblList: [
{name:'100%',value:'100%'},
{name:'50%以上',value:'50%以上'},
{name:'20%以上',value:'20%以上'},
{name:'5%以上',value:'5%以上'},
{name:'1%-5%',value:'1%-5%'},
],
cgType: [
{name:'工程',value:'工程'},
{name:'货物',value:'货物'},
{name:'服务',value:'服务'},
{name:'其他',value:'其他'},
],
timeList: ['近三天', '近七天', '近半月', '自定义'],
moneyList: ['5000万以下', '5000万-1亿', '1亿-5亿', '5亿-10亿','10亿以上', '自定义'],
dataEXCEL:{},
dialogExportVisible:false,
dialogExportVisible1:false,
exportTableData:[
{
"address":"四川省-成都市",
"stockPercent":"18.43%",
"agency":'鞍钢股份有限公司',
"issueTime":"2023-09-22",
"subjectMatter":"其他",
"memberLevel":"二级企业",
"tenderee":"鞍钢冷轧钢板(莆田)有限公司综合部",
"projectType":"其他",
"bidAmount":"202万元",
"projectName":"2023年中铁一局集团第二工程有限公司江浙区域项目自购物资集中招标采购文件(一)(钢材)招标公告",
},
{
"address":"四川省-成都市",
"stockPercent":"18.43%",
"agency":'鞍钢股份有限公司',
"issueTime":"2023-09-22",
"subjectMatter":"其他",
"memberLevel":"二级企业",
"tenderee":"鞍钢股份有限公司",
"projectType":"其他",
"bidAmount":"202万元",
"projectName":"太极集团四川太极制药有限公司转让持有的成都市4套住宅-高新区玉虹巷2号1栋6单元7层13号",
},
],
value:'',
exportData:{}
}
},
created() {
this.dataRegion()
this.handleQuery()
this.formData[1].timeList=this.timeList;
this.formData[2].moneyList=this.moneyList;
this.formData[3].options=this.cgType;
this.formData[5].options=this.cgblList;
//项目类型
getDictType('project_type_new').then(result=>{
let data = result.code == 200 ? result.data:[];
if(data.length > 0){
for (var i=0;i<data.length;i++){
this.formData[4].options.push({
name: data[i].dictLabel,
value: data[i].dictValue,
})
}
}
})
},
methods: {
handleQuery(params){
this.isSkeleton = true
let data = this.getAreaList(params || this.queryParams)
if(data.cgbl){
if(data.cgbl === '100%'){
data.minStockPercent=1
}
if(data.cgbl === '50%以上'){
data.minStockPercent=0.5
}
if(data.cgbl === '20%以上'){
data.minStockPercent=0.2
}
if(data.cgbl === '5%以上'){
data.minStockPercent=0.05
}
if(data.cgbl === '1%-5%'){
data.minStockPercent=0.01
data.maxStockPercent=0.05
}
delete data.cgbl
}
if(data.subjectMatters){
data.subjectMatters=[data.subjectMatters]
}
if(!data.endTime){
data.endTime=this.formatDate(new Date())
}
this.dataEXCEL=JSON.parse(JSON.stringify(data));
bidPage(data).then(res=>{
this.tableData = res.code == 200 ? res.rows:[];
this.tableDataTotal = res.total
this.isSkeleton = false
this.tableLoading = false
})
},
formatDate(timestamp) {
var time = new Date(timestamp)
let year = time.getFullYear();
let month = time.getMonth() + 1 >= 10 ? parseInt(time.getMonth() + 1) : "0" + parseInt(time.getMonth() + 1);
let day = time.getDate() >= 10 ? time.getDate() : "0" + time.getDate();
return year + '-' + month + '-' + day
},
//地区
async dataRegion() {
var str = [];
for (let x = 0; x < 3; x++) {
for (let i = 0; i < dataRegion.length; i++) {
if (dataRegion[i].regionLevel == x + 1 && x + 1 == 1) {
str.push({
'id': dataRegion[i].id,
"label": dataRegion[i].regionName,
"short": dataRegion[i].short,
"value": dataRegion[i].parentId,
"children": []
});
}
}
}
for (var i=0; i<str.length; i++) {
if (str[i].children.length) {
} else {
delete str[i].children
}
}
this.addressList = str;
this.formData[0].options=str;
},
getAreaList(params){
if(params.province&&params.province.length>0){
let arr = this.$children[0].$refs.cascader[0].getCheckedNodes()
let provinceIds = [], cityIds = [], districtIds = []
for (var i in arr) {
if (arr[i].parent) {
if (!arr[i].parent.checked) {
if(arr[i].hasChildren || arr[i].level==2){
cityIds.push(arr[i].data.id)
}else{
districtIds.push(arr[i].data.id)
}
}
} else {
provinceIds.push(arr[i].data.id)
}
}
delete params.province
provinceIds.length>0?params.provinceIds = provinceIds:''
cityIds.length>0?params.cityIds = cityIds:''
districtIds.length>0?params.districtIds = districtIds:''
}
return params
},
//分页
handleCurrentChange(e){
let params = this.formParams()
params.pageNum = e
this.queryParams.pageNum = e
this.handleQuery(params)
this.$emit('handle-scroll')
},
changeSelect(){
this.handleSearch()
},
clickFocus(e){
document.getElementById(e).classList.toggle('span-ba')
},
clickDialog(){
this.dialogExportVisible=true;
},
clickEXCEL() {
if(this.value > 2000){
return
}
this.dialogExportVisible=false;
this.dataEXCEL.combineName=this.combineName;
if(this.value){
this.dataEXCEL.pageSize=this.value
}else {
this.dataEXCEL.pageSize=this.tableDataTotal > 2000 ? 2000 : this.tableDataTotal;
}
delete this.dataEXCEL.pageNum
exportBid(this.dataEXCEL).then(res=>{
if(res.code === 200){
this.dialogExportVisible1=true;
this.value=''
this.exportData=res.data;
}
})
},
cancel(){
this.dialogExportVisible=false
this.value=''
},
downloadFile(url, fileName) {
const x = new XMLHttpRequest()
x.open("GET", url, true)
x.responseType = 'blob'
x.onload=function(e) {
const url = window.URL.createObjectURL(x.response)
const a = document.createElement('a')
a.href = url
a.download = fileName
a.click()
a.remove()
}
x.send()
},
toUrl(){
this.dialogExportVisible1=false;
this.$router.push({
path: '/user/profile',
})
},
}
}
</script>
<style lang="scss" scoped>
.performance{
background: #ffffff;
border-radius: 4px;
padding: 16px;
height: calc(100% - 64px);
.headForm{
margin-bottom: 14px;
.common-title{
margin-right: 24px;
}
::v-deep .el-input__inner{
padding-right: 27px;
}
::v-deep .el-form-item{
margin-right: 8px !important;
}
::v-deep .el-input--medium .el-input__icon{
line-height: 34px;
}
::v-deep .el-cascader{
height: 34px;
line-height: 34px;
width: 190px;
.el-input{
input{
height: 34px !important;
}
}
.el-cascader__tags{
flex-wrap: inherit;
margin-top: 1px;
.el-tag{
max-width: 100px;
}
}
.el-input__suffix{
top: 1px;
}
}
.cooperate-name {
display: flex;
border-radius: 2px;
border: 1px solid #D9D9D9;
line-height: 34px;
height: 34px;
span {
width: 80px;
height: 32px;
line-height: 32px;
font-size: 14px;
background: #F5F5F5;
text-align: center;
color: #0081FF;
border: 1px solid #EFEFEF;
border-left: 0;
cursor: pointer;
}
&.span-ba{
/*border: 1px solid #0081FF;*/
span{
color: #ffffff;
background: #0081FF;
border: 1px solid #0081FF;
}
}
::v-deep .el-input{
flex: 1;
}
::v-deep .el-input__inner {
border: 0;
line-height: 32px;
height: 32px;
position: absolute;
top: 0;
padding-right: 22px;
font-size: 12px;
padding-left: 8px;
}
}
.headForm-from {
display: flex;
.from-item{
margin-right: 8px;
&:last-child{
margin-right: 0;
}
.fromTime{
::v-deep .el-range-input{
width: 100%;
}
::v-deep .el-range-separator, ::v-deep .el-range__close-icon{
line-height: 24px;
width: 20px;
}
}
.fromTime-icon {
display: none;
}
.el-select{
.el-input__suffix{
right: 10px;
}
}
}
::v-deep .form-content-width{
width: 170px;
}
::v-deep .selectTag{
.el-select__tags{
.el-tag{
&:first-child{
width: 70px;
}
}
}
}
::v-deep .el-select__tags{
.el-tag{
&:first-child{
//width: 100%;
}
}
}
}
.ability-total{
font-size: 12px;
color: #3D3D3D;
position: relative;
&:before{
content: '';
display: inline-block;
width: 2px;
height: 2px;
background: rgba(35,35,35,0.4);
margin-right: 4px;
}
}
.ability-excel{
font-size: 14px;
color: rgba(35,35,35,0.8);
margin-left: 16px;
cursor: pointer;
&:hover{
color: #0081FF;
}
img{
width: 18px;
height: 18px;
margin-right: 4px;
}
}
}
::v-deep .el-table{
.has-gutter{
tr{
th:nth-last-child(2){
border-right:0;
}
td:nth-last-child(2){
border-right:0;
}
}
}
.el-table__cell.gutter{
background: #F0F3FA;
}
}
.custom-time-select{
width: 150px;
}
}
.dialogExport{
::v-deep .el-dialog{
.el-dialog__header{
height: 48px;
line-height: 48px;
padding: 0 16px;
border-bottom: 1px solid #E1E1E1;
font-weight: bold;
color: #1D2129;
font-size: 16px;
.tip-img{
width: 18px;
height: 18px;
margin-right: 7px;
margin-bottom: -3px;
}
.el-dialog__headerbtn{
font-size: 20px;
font-weight: bold;
top: 15px;
.el-dialog__close{
color:#999999;
}
}
}
.el-dialog__body{
padding: 16px;
.input{
margin-top: 16px;
.el-input{
width: 160px;
border-radius: 2px;
height: 32px;
.el-input__inner{
height: 32px;
line-height: 32px;
}
}
.el-input-group__append{
padding: 0 14px;
}
p{
color: #FF3C3C;
font-size: 12px;
margin-left: 12px;
display: inline-block;
i{
font-size: 14px;
margin-right: 4px;
}
}
}
.content{
text-align: center;
margin-top: 36px;
.success{
width: 64px;
height: 64px;
margin-bottom: 16px;
}
p{
padding: 0;
margin: 0;
}
.p1{
color: #232323;
font-size: 16px;
margin-bottom: 8px;
}
.p2{
color: rgba(35,35,35,0.4);
font-size: 14px;
span{
color:#0081FF;
cursor: pointer;
}
}
}
}
.el-dialog__footer{
text-align: center;
padding-bottom: 24px;
}
}
}
</style>
<template> <template>
<div class="performance"> <div class="zhaobiao">
<div class="headForm"> <div class="header">
<div class="flex-box query-box" style="margin-bottom: 12px;"> <div class="header-tab">
<div class="flex-box query-params"> <el-tabs v-model="activeName" @tab-click="handleClick">
<span class="common-title">集团招标</span> <el-tab-pane label="招标项目分析" name="first"></el-tab-pane>
<div class="cooperate-name" id="focus00"> <el-tab-pane label="招标项目明细" name="second"></el-tab-pane>
<el-input clearable @clear="changeSelect" style="width: 300px;" @focus="clickFocus('focus00')" @blur="clickFocus('focus00')" v-model="queryParams.keys" placeholder="搜索招标成员名称/项目名称/代理单位"></el-input> </el-tabs>
<span @click="changeSelect">搜索</span>
</div>
</div>
</div>
<div class="flex-box query-box">
<div class="flex-box query-params">
<div class="headForm-from">
<div class="from-item" :key="i" v-for="(form, i) in formData">
<!-- 单选 -->
<template v-if="form.type==1">
<el-select
v-model="form.value"
clearable
class="form-content-width"
:style="form.width?'width:'+form.width+'px':'max-width: 110px'"
:placeholder="form.placeholder"
@change="changeSelect">
<el-option v-for="(item, index) in form.options" :key="index" :label="item.name" :value="item.value" :disabled="item.disabled"/>
</el-select>
</template>
<!-- 年月日 -->
<template v-if="form.type==2">
<el-date-picker
@change="changeSelect"
class="fromTime"
style="width: 210px"
v-model="form.value"
type="daterange"
prefix-icon="fromTime-icon"
value-format="yyyy-MM-dd"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</template>
<!-- 多选 -->
<template v-if="form.type==4">
<el-select
class="form-content-width"
:class="form.value.length > 1 ? 'selectTag' : ''"
v-model="form.value"
multiple
collapse-tags
clearable
:style="form.width?'width:'+form.width+'px':'max-width: 170px'"
:placeholder="form.placeholder"
@change="changeSelect">
<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
:timeList="form.timeList"
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
ref="cascader"
:options="form.options"
:props="form.props"
v-model="form.value"
@change="changeSelect"
:placeholder="form.placeholder"
collapse-tags
clearable></el-cascader>
</template>
</div>
</div>
</div>
<div class="flex-box">
<span class="flex-box ability-total">共{{ tableDataTotal }}条</span>
<span v-hasPermi="['combine:info:export:bid']" class="flex-box ability-excel" @click="clickEXCEL"><img src="@/assets/images/ability_excel.png">导出EXCEL</span>
</div>
</div> </div>
</div> </div>
<skeleton style="margin-left:16px;" v-if="isSkeleton"></skeleton> <Zbxmfx v-if="activeName === 'first'"></Zbxmfx>
<tables <Zbxmmx v-if="activeName === 'second'"></Zbxmmx>
v-if="!isSkeleton"
:defaultSort="defaultSort"
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:MaxPage=500
:tableDataTotal="tableDataTotal"
:queryParams="queryParams"
@handle-current-change="handleCurrentChange"
@sort-change="sortChange"
>
<template slot="tenderee" slot-scope="scope">
<router-link :to="scope.row.tendereeUipId?`/enterprise/${encodeStr(scope.row.tendereeId)}`:`/company/${encodeStr(scope.row.tendereeId)}`" tag="a" class="a-link" v-if="scope.row.tendereeId&&scope.row.tenderee" v-html="scope.row.tenderee"></router-link>
<div v-else v-html="scope.row.tenderee || '--'"></div>
</template>
<template slot="projectName" slot-scope="scope">
<router-link :to="`/radar/Notice/details/${scope.row.bId}`" tag="a" class="a-link" v-if="scope.row.bId" v-html="scope.row.projectName"></router-link>
<div v-else v-html="scope.row.projectName || '--'"></div>
</template>
<template slot="agency" slot-scope="scope">
<router-link :to="scope.row.agencyUipId?`/enterprise/${encodeStr(scope.row.agencyId)}`:`/company/${encodeStr(scope.row.agencyId)}`" tag="a" class="a-link" v-if="scope.row.agencyId&&scope.row.agency" v-html="scope.row.agency"></router-link>
<div v-else v-html="scope.row.agency || '--'"></div>
</template>
<template slot="stockPercent" slot-scope="scope">
<div>{{scope.row.stockPercent || '--'}}{{scope.row.stockPercent ? '%':''}}</div>
</template>
<template slot="projectType" slot-scope="scope">
<div v-if="scope.row.projectType === '空白'">--</div>
<div v-else>{{scope.row.projectType || '--'}}</div>
</template>
<template slot="bidAmount" slot-scope="scope">
<div>{{scope.row.bidAmount || '--'}}{{scope.row.bidAmount ? '万元':''}}</div>
</template>
</tables>
</div> </div>
</template> </template>
<script> <script>
import mixin from '../../party-a/mixins/mixin' import Zbxmfx from './zbxmfx'
import CustomTimeSelect from '../../party-a/component/CustomTimeSelect' import Zbxmmx from './zbxmmx'
import CustomMoneySelect from '../../party-a/component/CustomMoneySelect'
import {bidPage,exportBid} from '@/api/detail/groupAccount/groupAccount'
import dataRegion from '@/assets/json/dataRegion1'
import { getDictType } from '@/api/main'
export default { export default {
name: 'qualifications', name: 'qualifications',
props: ['customerId','combineName'], components:{Zbxmfx,Zbxmmx},
mixins: [mixin],
components:{CustomTimeSelect,CustomMoneySelect},
data(){ data(){
return{ return{
isSkeleton:true, activeName: 'first'
tableLoading:false,
isDetails: false,
defaultSort: {prop: 'time', order: 'descending'},
queryParams: {
combineId: this.customerId,
pageNum: 1,
pageSize: 20,
keys:''
},
forData: [
{label: '招标发布时间', prop: 'issueTime',minWidth: '90'},
{label: '招标成员', prop: 'tenderee', slot: true,minWidth: '190'},
{label: '持股比例', prop: 'stockPercent',slot: true,minWidth: '80'},
{label: '项目名称', prop: 'projectName', slot: true,minWidth: '220'},
{label: '预算金额', prop: 'bidAmount',slot: true,minWidth: '100'},
{label: '项目地区', prop: 'address',minWidth: '110'},
{label: '招标采购分类', prop: 'subjectMatter',minWidth: '90'},
{label: '项目类型', prop: 'projectType',minWidth: '80',slot: true},
{label: '代理单位', prop: 'agency',minWidth: '160',slot: true},
],
formData: [
{ type: 7, fieldName: 'province', value: '',props: {multiple: true,value: 'id',expandTrigger: 'hover'}, placeholder: '项目地区', options:[]},
{ type: 5, fieldName: 'time', value: '', placeholder: '招标发布时间', startTime: 'startTime', endTime: 'endTime',timeList:[] },
{ type: 6, fieldName: 'money', value: '', placeholder: '预算金额', startMoney: 'minAmount', endMoney: 'maxAmount',moneyList:[] },
{ type: 1, fieldName: 'subjectMatters', value: '', placeholder: '招标采购分类', options: [],width:140},
{ type: 4, fieldName: 'projectTypes', value: '', placeholder: '项目类型', options: [],width:150},
{ type: 1, fieldName: 'cgbl', value: '', placeholder: '持股比例', options: [],width:110},
],
tableData:[],
tableDataTotal:0,
addressList: [],
cgblList: [
{name:'100%',value:'100%'},
{name:'50%以上',value:'50%以上'},
{name:'20%以上',value:'20%以上'},
{name:'5%以上',value:'5%以上'},
{name:'1%-5%',value:'1%-5%'},
],
cgType: [
{name:'工程',value:'工程'},
{name:'货物',value:'货物'},
{name:'服务',value:'服务'},
{name:'其他',value:'其他'},
],
timeList: ['近三天', '近七天', '近半月', '自定义'],
moneyList: ['5000万以下', '5000万-1亿', '1亿-5亿', '5亿-10亿','10亿以上', '自定义'],
dataEXCEL:{},
} }
}, },
created() { created() {
this.dataRegion()
this.handleQuery()
this.formData[1].timeList=this.timeList;
this.formData[2].moneyList=this.moneyList;
this.formData[3].options=this.cgType;
this.formData[5].options=this.cgblList;
//项目类型
getDictType('project_type_new').then(result=>{
let data = result.code == 200 ? result.data:[];
if(data.length > 0){
for (var i=0;i<data.length;i++){
this.formData[4].options.push({
name: data[i].dictLabel,
value: data[i].dictValue,
})
}
}
})
}, },
methods: { methods: {
handleQuery(params){ handleClick() {
this.isSkeleton = true
let data = this.getAreaList(params || this.queryParams)
if(data.cgbl){
if(data.cgbl === '100%'){
data.minStockPercent=1
}
if(data.cgbl === '50%以上'){
data.minStockPercent=0.5
}
if(data.cgbl === '20%以上'){
data.minStockPercent=0.2
}
if(data.cgbl === '5%以上'){
data.minStockPercent=0.05
}
if(data.cgbl === '1%-5%'){
data.minStockPercent=0.01
data.maxStockPercent=0.05
}
delete data.cgbl
}
if(data.subjectMatters){
data.subjectMatters=[data.subjectMatters]
}
if(!data.endTime){
data.endTime=this.formatDate(new Date())
}
this.dataEXCEL=JSON.parse(JSON.stringify(data));
bidPage(data).then(res=>{
this.tableData = res.code == 200 ? res.rows:[];
console.log(res.total)
this.tableDataTotal = res.total
this.isSkeleton = false
this.tableLoading = false
})
},
formatDate(timestamp) {
var time = new Date(timestamp)
let year = time.getFullYear();
let month = time.getMonth() + 1 >= 10 ? parseInt(time.getMonth() + 1) : "0" + parseInt(time.getMonth() + 1);
let day = time.getDate() >= 10 ? time.getDate() : "0" + time.getDate();
return year + '-' + month + '-' + day
},
//地区
async dataRegion() {
var str = [];
for (let x = 0; x < 3; x++) {
for (let i = 0; i < dataRegion.length; i++) {
if (dataRegion[i].regionLevel == x + 1 && x + 1 == 1) {
str.push({
'id': dataRegion[i].id,
"label": dataRegion[i].regionName,
"short": dataRegion[i].short,
"value": dataRegion[i].parentId,
"children": []
});
}
// else if (dataRegion[i].regionLevel == x + 1 && x + 1 == 2) {
// for (let j = 0; j < str.length; j++) {
// if (str[j].id == dataRegion[i].parentId) {
// str[j].children.push({
// 'id': dataRegion[i].id,
// "label": dataRegion[i].regionName,
// "short": dataRegion[i].short,
// "value": dataRegion[i].parentId,
// "children": []
// });
// }
// }
// } else if (dataRegion[i].regionLevel == x + 1 && x + 1 == 3) {
// for (let j = 0; j < str.length; j++) {
// for (let k = 0; k < str[j].children.length; k++) {
// if (str[j].children[k].id == dataRegion[i].parentId) {
// str[j].children[k].children.push({
// 'id': dataRegion[i].id,
// "label": dataRegion[i].regionName,
// "short": dataRegion[i].short,
// "value": dataRegion[i].parentId
// // "children":[]
// });
// }
// }
// }
// }
}
}
for (var i=0; i<str.length; i++) {
if (str[i].children.length) {
} else {
delete str[i].children
}
}
this.addressList = str;
this.formData[0].options=str;
},
getAreaList(params){
if(params.province&&params.province.length>0){
let arr = this.$refs.cascader[0].getCheckedNodes()
let provinceIds = [], cityIds = [], districtIds = []
for (var i in arr) {
if (arr[i].parent) {
if (!arr[i].parent.checked) {
if(arr[i].hasChildren || arr[i].level==2){
cityIds.push(arr[i].data.id)
}else{
districtIds.push(arr[i].data.id)
}
}
} else {
provinceIds.push(arr[i].data.id)
}
}
delete params.province
provinceIds.length>0?params.provinceIds = provinceIds:''
cityIds.length>0?params.cityIds = cityIds:''
districtIds.length>0?params.districtIds = districtIds:''
}
return params
},
//分页
handleCurrentChange(e){
let params = this.formParams()
params.pageNum = e
this.queryParams.pageNum = e
this.handleQuery(params)
this.$emit('handle-scroll')
},
changeSelect(){
this.handleSearch()
},
clickEXCEL() {
this.dataEXCEL.combineName=this.combineName;
if(this.tableDataTotal > 2000){
this.dataEXCEL.pageSize=2000;
}else {
this.dataEXCEL.pageSize=this.tableDataTotal;
}
delete this.dataEXCEL.pageNum
exportBid(this.dataEXCEL).then(res=>{
if(res.code === 200){
this.downloadFile(res.data.url,res.data.originalName)
}
})
},
downloadFile(url, fileName) {
const x = new XMLHttpRequest()
x.open("GET", url, true)
x.responseType = 'blob'
x.onload=function(e) {
const url = window.URL.createObjectURL(x.response)
const a = document.createElement('a')
a.href = url
a.download = fileName
a.click()
a.remove()
}
x.send()
},
clickFocus(e){
document.getElementById(e).classList.toggle('span-ba')
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.performance{ .zhaobiao{
background: #ffffff; height: 100%;
border-radius: 4px; background: #F5F5F5;
padding: 16px; .header{
.headForm{ justify-content: space-between;
margin-bottom: 14px; background: #F5F5F5;
.common-title{ color: #232323;
margin-right: 24px; height: 64px;
} position: sticky;
::v-deep .el-input__inner{ top: 0;
border: 1px solid #D9D9D9; z-index: 999;
height: 34px; .header-tab{
line-height: 34px; background: #ffffff;
padding-right: 27px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
border-radius: 4px; border-radius: 4px;
} }
::v-deep .el-form-item{ ::v-deep .el-tabs{
margin-right: 8px !important; height: 48px;
} line-height: 48px;
::v-deep .el-input--medium .el-input__icon{ .el-tabs__nav-wrap::after {
line-height: 34px; position: static !important;
}
::v-deep .el-cascader{
height: 34px;
line-height: 34px;
width: 190px;
.el-input{
input{
height: 34px !important;
}
} }
.el-cascader__tags{ .el-tabs__header{
flex-wrap: inherit; margin: 0;
margin-top: 1px; .el-tabs__item{
.el-tag{ padding: 0 16px;
max-width: 100px; font-size: 16px;
} }
} .is-active{
.el-input__suffix{ font-weight: bold;
top: 1px;
}
}
.cooperate-name {
display: flex;
border-radius: 2px;
border: 1px solid #D9D9D9;
line-height: 34px;
height: 34px;
span {
width: 80px;
height: 32px;
line-height: 32px;
font-size: 14px;
background: #F5F5F5;
text-align: center;
color: #0081FF;
border: 1px solid #EFEFEF;
border-left: 0;
cursor: pointer;
}
&.span-ba{
/*border: 1px solid #0081FF;*/
span{
color: #ffffff;
background: #0081FF;
border: 1px solid #0081FF;
} }
} }
::v-deep .el-input{ .el-tabs__content{
flex: 1; width: 100%;
}
::v-deep .el-input__inner {
border: 0;
line-height: 32px;
height: 32px;
position: absolute;
top: 0;
padding-right: 22px;
font-size: 12px;
padding-left: 8px;
} }
} }
.headForm-from {
display: flex;
.from-item{
margin-right: 8px;
&:last-child{
margin-right: 0;
}
.fromTime{
::v-deep .el-range-input{
width: 100%;
}
::v-deep .el-range-separator, ::v-deep .el-range__close-icon{
line-height: 24px;
width: 20px;
}
}
.fromTime-icon {
display: none;
}
.el-select{
.el-input__suffix{
right: 10px;
}
}
}
::v-deep .form-content-width{
width: 170px;
}
::v-deep .selectTag{
.el-select__tags{
.el-tag{
&:first-child{
width: 70px;
}
}
}
}
::v-deep .el-select__tags{
.el-tag{
&:first-child{
//width: 100%;
}
}
}
}
.ability-total{
font-size: 12px;
color: #3D3D3D;
position: relative;
&:before{
content: '';
display: inline-block;
width: 2px;
height: 2px;
background: rgba(35,35,35,0.4);
margin-right: 4px;
}
}
.ability-excel{
font-size: 14px;
color: rgba(35,35,35,0.8);
margin-left: 16px;
cursor: pointer;
&:hover{
color: #0081FF;
}
img{
width: 18px;
height: 18px;
margin-right: 4px;
}
}
}
::v-deep .el-table{
.has-gutter{
tr{
th:nth-last-child(2){
border-right:0;
}
td:nth-last-child(2){
border-right:0;
}
}
}
.el-table__cell.gutter{
background: #F0F3FA;
}
}
.custom-time-select{
width: 150px;
} }
} }
</style> </style>
...@@ -115,6 +115,9 @@ ...@@ -115,6 +115,9 @@
top:0; top:0;
z-index: 9; z-index: 9;
} }
#groupBox{
height: 100%;
}
} }
.part-header{ .part-header{
font-size: 16px; font-size: 16px;
......
...@@ -229,7 +229,15 @@ export default { ...@@ -229,7 +229,15 @@ export default {
width: 120px; width: 120px;
height: 34px; height: 34px;
position: relative; position: relative;
.el-input__inner{
width: 100px !important;
}
.rote {
background: #F4F6F9;
.el-input__inner{
background: #F4F6F9;
}
}
.input-block { .input-block {
margin: 0; margin: 0;
width: 100%; width: 100%;
...@@ -243,6 +251,9 @@ export default { ...@@ -243,6 +251,9 @@ export default {
>.custom-money-input.el-input { >.custom-money-input.el-input {
width: 100%; width: 100%;
height: 100%; height: 100%;
.el-input__inner{
border: 0;
}
>input { >input {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -277,10 +288,10 @@ export default { ...@@ -277,10 +288,10 @@ export default {
font-size: 14px; font-size: 14px;
color: #666666; color: #666666;
background-color: #fff; background-color: #fff;
border: 1px solid #E4E7ED; /*padding: 6px 0;*/
padding: 6px 0;
border-radius: 4px; border-radius: 4px;
z-index: 10; z-index: 10;
box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.08);
// .arrow { // .arrow {
......
...@@ -241,6 +241,11 @@ export default { ...@@ -241,6 +241,11 @@ export default {
width: 120px; width: 120px;
height: 34px; height: 34px;
.rote {
.el-input__inner{
background: #F4F6F9;
}
}
.input-block { .input-block {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -254,13 +259,16 @@ export default { ...@@ -254,13 +259,16 @@ export default {
>.custom-time-input.el-input { >.custom-time-input.el-input {
width: 100%; width: 100%;
height: 100%; height: 100%;
.el-input__inner{
border: 0;
}
>input { >input {
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;
border-radius: 2px; border-radius: 4px;
} }
} }
} }
...@@ -283,15 +291,15 @@ export default { ...@@ -283,15 +291,15 @@ export default {
.options-block { .options-block {
position: absolute; position: absolute;
margin-top: 12px; margin-top: 6px;
min-width: 120px; min-width: 120px;
font-size: 14px; font-size: 14px;
color: #666666; color: #666666;
background-color: #fff; background-color: #fff;
border: 1px solid #E4E7ED;
padding: 6px 0;
border-radius: 4px; border-radius: 4px;
z-index: 10; z-index: 10;
overflow: hidden;
box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.08);
.option { .option {
padding: 0 24px 0 16px; padding: 0 24px 0 16px;
......
<template> <template>
<div> <div>
<div class="headForm" v-if="title === '集团业绩'"> <div class="headForm">
<div class="flex-box query-box" style="margin-bottom: 12px;"> <div class="flex-box query-box" v-if="title" style="margin-bottom: 12px;">
<div class="flex-box query-params"> <div class="flex-box query-params">
<span class="common-title" v-if="title">{{ title }}</span> <span class="common-title" v-if="title">{{ title }}</span>
</div> </div>
...@@ -10,11 +10,11 @@ ...@@ -10,11 +10,11 @@
</template> </template>
<div v-else class="flex-box"> <div v-else class="flex-box">
<span class="flex-box ability-total" v-if="isTotal">共{{ total }}条</span> <span class="flex-box ability-total" v-if="isTotal">共{{ total }}条</span>
<span class="flex-box ability-excel" v-hasPermi="['combine:info:export:win:bid']" v-if="isExcel && title ==='集团业绩'" @click="clickEXCEL"><img src="@/assets/images/ability_excel.png">导出EXCEL</span> <span class="flex-box ability-excel" v-hasPermi="['combine:info:export:win:bid','combine:info:export:bid']" v-if="isExcel" @click="clickEXCEL"><img src="@/assets/images/ability_excel.png">导出EXCEL</span>
<span class="flex-box ability-excel" v-else @click="clickEXCEL"><img src="@/assets/images/ability_excel.png">导出EXCEL</span> <span class="flex-box ability-excel" v-else @click="clickEXCEL"><img src="@/assets/images/ability_excel.png">导出EXCEL</span>
</div> </div>
</div> </div>
<div class="flex-box query-box"> <div class="flex-box query-box" v-if="formData.length > 0">
<div class="flex-box query-params"> <div class="flex-box query-params">
<div class="headForm-from"> <div class="headForm-from">
<div class="from-item" :key="i" v-for="(form, i) in formData"> <div class="from-item" :key="i" v-for="(form, i) in formData">
...@@ -48,8 +48,9 @@ ...@@ -48,8 +48,9 @@
<!-- 输入框 --> <!-- 输入框 -->
<template v-if="form.type==3"> <template v-if="form.type==3">
<div class="cooperate-name" :id="'focus'+i"> <div class="cooperate-name" :id="'focus'+i">
<el-input clearable @clear="changeSelect" @focus="clickFocus('focus'+i)" @blur="clickFocus('focus'+i)" v-model="form.value" :placeholder="form.placeholder" :style="form.width?'width:'+form.width+'px':'width:180px'"></el-input> <el-input clearable @clear="changeSelect" @focus="clickFocus('focus'+i)" @blur="clickFocus('focus'+i)" v-model="form.value" :placeholder="form.placeholder" :style="form.width?'width:'+form.width+'px':'width:200px'">
<span @click="changeSelect">搜索</span> <i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/sousuo.png" width="16px" @click="changeSelect"></i>
</el-input>
</div> </div>
</template> </template>
<!-- 多选 --> <!-- 多选 -->
...@@ -61,7 +62,7 @@ ...@@ -61,7 +62,7 @@
multiple multiple
collapse-tags collapse-tags
clearable clearable
:style="form.width?'width:'+form.width+'px':'max-width: 170px'" :style="form.width?'width:'+form.width+'px':'max-width: 150px'"
:placeholder="form.placeholder" :placeholder="form.placeholder"
@change="changeSelect"> @change="changeSelect">
<el-option v-for="(item, index) in form.options" :key="index" :label="item.name" :value="item.value"/> <el-option v-for="(item, index) in form.options" :key="index" :label="item.name" :value="item.value"/>
...@@ -101,118 +102,16 @@ ...@@ -101,118 +102,16 @@
<template v-if="form.type==0"> <template v-if="form.type==0">
<slot name="slot"></slot> <slot name="slot"></slot>
</template> </template>
</div>
</div>
</div>
</div>
</div>
<div class="headForm" v-else>
<div class="flex-box query-box">
<div class="flex-box query-params">
<span class="common-title" v-if="title">{{ title }}</span>
<div class="headForm-from">
<div class="from-item" :key="i" v-for="(form, i) in formData">
<!-- 单选 -->
<template v-if="form.type==1">
<el-select
v-model="form.value"
clearable
class="form-content-width"
:style="form.width?'width:'+form.width+'px':'max-width: 110px'"
:placeholder="form.placeholder"
@change="changeSelect">
<el-option v-for="(item, index) in form.options" :key="index" :label="item.name" :value="item.value" :disabled="item.disabled"/>
</el-select>
</template>
<!-- 年月日 -->
<template v-if="form.type==2">
<el-date-picker
@change="changeSelect"
class="fromTime"
style="width: 210px"
v-model="form.value"
type="daterange"
prefix-icon="fromTime-icon"
value-format="yyyy-MM-dd"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</template>
<!-- 输入框 -->
<template v-if="form.type==3">
<div class="cooperate-name" :id="'focus'+i">
<el-input clearable @clear="changeSelect" @focus="clickFocus('focus'+i)" @blur="clickFocus('focus'+i)" v-model="form.value" :placeholder="form.placeholder" :style="form.width?'width:'+form.width+'px':'width:180px'"></el-input>
<span @click="changeSelect">搜索</span>
</div>
</template>
<!-- 多选 -->
<template v-if="form.type==4">
<el-select
class="form-content-width"
:class="form.value.length > 1 ? 'selectTag' : ''"
v-model="form.value"
multiple
collapse-tags
clearable
:style="form.width?'width:'+form.width+'px':'max-width: 170px'"
:placeholder="form.placeholder"
@change="changeSelect">
<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
:timeList="form.timeList"
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
ref="cascader"
:options="form.options"
:props="form.props"
v-model="form.value"
@change="changeSelect"
:placeholder="form.placeholder"
collapse-tags
clearable></el-cascader>
</template>
<!-- 自定义 -->
<template v-if="form.type==0">
<slot name="slot"></slot>
</template>
</div> </div>
</div> </div>
</div> </div>
<template v-if="slots"> <div v-if="!title" class="flex-box">
<slot name="slot"></slot>
</template>
<div v-else class="flex-box">
<span class="flex-box ability-total" v-if="isTotal">共{{ total }}条</span> <span class="flex-box ability-total" v-if="isTotal">共{{ total }}条</span>
<span class="flex-box ability-excel" v-hasPermi="['combine:info:export:win:bid']" v-if="isExcel && title ==='集团业绩'" @click="clickEXCEL"><img src="@/assets/images/ability_excel.png">导出EXCEL</span> <span class="flex-box ability-excel" v-hasPermi="['combine:info:export:win:bid','combine:info:export:bid']" v-if="isExcel" @click="clickEXCEL"><img src="@/assets/images/ability_excel.png">导出EXCEL</span>
<span class="flex-box ability-excel" v-else @click="clickEXCEL"><img src="@/assets/images/ability_excel.png">导出EXCEL</span> <span class="flex-box ability-excel" v-else @click="clickEXCEL"><img src="@/assets/images/ability_excel.png">导出EXCEL</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
...@@ -299,14 +198,15 @@ export default { ...@@ -299,14 +198,15 @@ export default {
margin-right: 24px; margin-right: 24px;
} }
::v-deep .el-input__inner{ ::v-deep .el-input__inner{
border: 1px solid #D9D9D9; border: 0;
height: 34px; height: 32px;
line-height: 34px; line-height: 32px;
padding-right: 27px; /*padding-right: 27px;*/
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
border-radius: 4px; border-radius: 4px;
padding: 0 8px;
} }
::v-deep .el-form-item{ ::v-deep .el-form-item{
margin-right: 8px !important; margin-right: 8px !important;
...@@ -317,7 +217,14 @@ export default { ...@@ -317,7 +217,14 @@ export default {
::v-deep .el-cascader{ ::v-deep .el-cascader{
height: 34px; height: 34px;
line-height: 34px; line-height: 34px;
width: 190px; width: 150px;
.is-focus{
.el-input{
input{
background: #F4F6F9;
}
}
}
.el-input{ .el-input{
input{ input{
height: 34px !important; height: 34px !important;
...@@ -327,7 +234,10 @@ export default { ...@@ -327,7 +234,10 @@ export default {
flex-wrap: inherit; flex-wrap: inherit;
margin-top: 1px; margin-top: 1px;
.el-tag{ .el-tag{
max-width: 100px; max-width: 70px;
}
.el-tag:nth-child(2){
padding: 0 3px;
} }
} }
.el-input__suffix{ .el-input__suffix{
...@@ -343,10 +253,18 @@ export default { ...@@ -343,10 +253,18 @@ export default {
} }
.cooperate-name { .cooperate-name {
display: flex; display: flex;
border-radius: 2px; border-radius: 4px;
border: 1px solid #D9D9D9; border: 0;
line-height: 34px; line-height: 32px;
height: 34px; height: 32px;
width: 238px;
.el-input__icon{
>img{
position: absolute;
top: 7px;
left: 5px;
}
}
span { span {
width: 60px; width: 60px;
height: 32px; height: 32px;
...@@ -360,7 +278,7 @@ export default { ...@@ -360,7 +278,7 @@ export default {
cursor: pointer; cursor: pointer;
} }
&.span-ba{ &.span-ba{
border: 1px solid #0081FF; border-color: #0081FF;
span{ span{
color: #ffffff; color: #ffffff;
background: #0081FF; background: #0081FF;
...@@ -368,7 +286,7 @@ export default { ...@@ -368,7 +286,7 @@ export default {
} }
} }
::v-deep .el-input{ ::v-deep .el-input{
flex: 1; width: 100%;
} }
::v-deep .el-input__inner { ::v-deep .el-input__inner {
border: 0; border: 0;
...@@ -376,9 +294,8 @@ export default { ...@@ -376,9 +294,8 @@ export default {
height: 32px; height: 32px;
position: absolute; position: absolute;
top: 0; top: 0;
padding-right: 22px; padding-left: 36px;
font-size: 12px; padding-right: 25px;
padding-left: 8px;
} }
} }
.fromTime{ .fromTime{
...@@ -400,7 +317,26 @@ export default { ...@@ -400,7 +317,26 @@ export default {
} }
} }
::v-deep .form-content-width{ ::v-deep .form-content-width{
width: 170px; width: 150px;
.el_input{
background: #fff;
}
.el-input__inner{
border-color: #fff;
padding:5px 28px 5px 8px;
border-radius: 4px !important;
}
.el-input__suffix{
height: 32px;
.el-input__icon{
line-height: 32px;
}
}
.is-focus{
.el-input__inner{
background: #F4F6F9;
}
}
} }
::v-deep .selectTag{ ::v-deep .selectTag{
.el-select__tags{ .el-select__tags{
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<el-breadcrumb-item>{{companyInfo.simpleName || companyInfo.companyName || '&#45;&#45;'}}</el-breadcrumb-item> <el-breadcrumb-item>{{companyInfo.simpleName || companyInfo.companyName || '&#45;&#45;'}}</el-breadcrumb-item>
</el-breadcrumb> </el-breadcrumb>
</div>--> </div>-->
<div class="flex-box part-header"> <div class="flex-box part-header" style="min-width:1248px;">
<img class="header-logo" :src="companyInfo && companyInfo.logoUrl || require('@/assets/images/detail/company_logo.png')"> <img class="header-logo" :src="companyInfo && companyInfo.logoUrl || require('@/assets/images/detail/company_logo.png')">
{{companyInfo && companyInfo.companyName || '--'}} {{companyInfo && companyInfo.companyName || '--'}}
</div> </div>
......
...@@ -158,9 +158,9 @@ export default { ...@@ -158,9 +158,9 @@ export default {
{label: '项目状态', prop: 'status', width: '90', slot: true} {label: '项目状态', prop: 'status', width: '90', slot: true}
], ],
formData: [ formData: [
{ type: 1, fieldName: 'projectStage', value: '', placeholder: '项目阶段', options: []}, { type: 1, fieldName: 'projectStage',width:'94', value: '', placeholder: '项目阶段', options: []},
{ type: 1, fieldName: 'status', value: '', placeholder: '项目状态', options: []}, { type: 1, fieldName: 'status', width:'94',value: '', placeholder: '项目状态', options: []},
{ type: 3, fieldName: 'projectName', width:'200', value: '', placeholder: '输入项目名称关键字搜索'}, { type: 3, fieldName: 'projectName', width:'240', value: '', placeholder: '输入项目名称关键字搜索'},
], ],
stageOptions:[], stageOptions:[],
statusOptions:[], statusOptions:[],
......
...@@ -40,17 +40,17 @@ export default { ...@@ -40,17 +40,17 @@ export default {
}, },
defaultSort: { prop: 'issueTime', order: 'descending' }, defaultSort: { prop: 'issueTime', order: 'descending' },
forData: [ forData: [
{ label: '项目名称', prop: 'projectName', minWidth: '300', slot: true }, {label: '项目名称', prop: 'projectName', minWidth: '300', slot: true, fixed: true},
{ label: '发布日期', prop: 'issueTime', sortable: 'custom', descending: '3', ascending: '4', width: '120' }, {label: '发布日期', prop: 'issueTime', sortable: 'custom', descending: '3', ascending: '4', width: '120'},
{ label: '预算金额(万元)', prop: 'projectAmount', sortable: 'custom', descending: '1', ascending: '2', width: '140' }, {label: '预算金额(万元)', prop: 'projectAmount', sortable: 'custom', descending: '1', ascending: '2', width: '140'},
{ label: '项目地区', prop: 'province', width: '120', slot: true }, {label: '项目地区', prop: 'province', width: '120', slot: true},
{ label: '项目类别', prop: 'tenderStage', width: '90' }, {label: '招标阶段', prop: 'tenderStage', width: '90'},
{ label: '招采单位联系人', prop: 'contact', width: '120' }, {label: '招采单位联系人', prop: 'contact', width: '120'},
{ label: '招采单位联系方式', prop: 'contactTel', width: '130' }, {label: '招采单位联系方式', prop: 'contactTel', width: '130'},
{ label: '代理单位', prop: 'agency', minWidth: '170' }, {label: '代理单位', prop: 'agency', minWidth: '170'},
{ label: '代理单位联系人', prop: 'agencyContact', width: '120' }, {label: '代理单位联系人', prop: 'agencyContact', width: '120'},
{ label: '代理单位联系方式', prop: 'agencyContactTel', width: '130' }, {label: '代理单位联系方式', prop: 'agencyContactTel', width: '130'},
{ label: '报名截止日期', prop: 'overTime', width: '110' } {label: '报名截止日期', prop: 'overTime', width: '110'}
], ],
formData: [ formData: [
{ type: 7, fieldName: 'province', value: '', props: { multiple: true }, placeholder: '项目地区', options: [], uid: this.getUid() }, { type: 7, fieldName: 'province', value: '', props: { multiple: true }, placeholder: '项目地区', options: [], uid: this.getUid() },
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
<div> <div>
<span style="font-size: 14px;color: #0384FA;" v-html="item.combineName" ></span> <span style="font-size: 14px;color: #0384FA;" v-html="item.combineName" ></span>
<div style="height:22px;line-height: 22px;"><span class="infinite-label">集团成员:</span>{{ item.combineMemberNum }}</div> <div style="height:22px;line-height: 22px;"><span class="infinite-label">集团成员:</span>{{ item.combineMemberNum }}</div>
<div ><span class="infinite-label">集团本身:</span>{{ item.combineMemberName }}</div> <div ><span class="infinite-label">集团本身:</span><el-tooltip class="item" effect="dark" :content="item.combineMemberName" placement="bottom-start"><span>{{ item.combineMemberName }}</span></el-tooltip></div>
</div> </div>
</div> </div>
</div> </div>
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
<div style="float: left;"> <div style="float: left;">
<span class="name" v-html="item.combineName" ></span> <span class="name" v-html="item.combineName" ></span>
<div style="height:28px;line-height: 28px;"><span class="infinite-label">集团成员:</span>{{ item.combineMemberNum }}</div> <div style="height:28px;line-height: 28px;"><span class="infinite-label">集团成员:</span>{{ item.combineMemberNum }}</div>
<div class="name1"><span class="infinite-label">集团本身:</span>{{ item.combineMemberName }}</div> <div class="name1"><span class="infinite-label">集团本身:</span><el-tooltip class="item" effect="dark" :content="item.combineMemberName" placement="bottom-start"><span>{{ item.combineMemberName }}</span></el-tooltip></div>
</div> </div>
</div> </div>
</div> </div>
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
<div style="float: left;"> <div style="float: left;">
<span class="name" v-html="item.combineName" ></span> <span class="name" v-html="item.combineName" ></span>
<div style="height:28px;line-height: 28px;"><span class="infinite-label">集团成员:</span>{{ item.combineMemberNum }}</div> <div style="height:28px;line-height: 28px;"><span class="infinite-label">集团成员:</span>{{ item.combineMemberNum }}</div>
<div class="name1"><span class="infinite-label">集团本身:</span>{{ item.combineMemberName }}</div> <div class="name1"><span class="infinite-label">集团本身:</span><el-tooltip class="item" effect="dark" :content="item.combineMemberName" placement="bottom-start"><span>{{ item.combineMemberName }}</span></el-tooltip></div>
</div> </div>
</div> </div>
</div> </div>
...@@ -101,7 +101,7 @@ ...@@ -101,7 +101,7 @@
<div style="float: left;"> <div style="float: left;">
<span class="name" v-html="item.combineName" ></span> <span class="name" v-html="item.combineName" ></span>
<div style="height:28px;line-height: 28px;"><span class="infinite-label">集团成员:</span>{{ item.combineMemberNum }}</div> <div style="height:28px;line-height: 28px;"><span class="infinite-label">集团成员:</span>{{ item.combineMemberNum }}</div>
<div class="name1"><span class="infinite-label">集团本身:</span>{{ item.combineMemberName }}</div> <div class="name1"><span class="infinite-label">集团本身:</span><el-tooltip class="item" effect="dark" :content="item.combineMemberName" placement="bottom-start"><span>{{ item.combineMemberName }}</span></el-tooltip></div>
</div> </div>
</div> </div>
</template> </template>
...@@ -395,7 +395,7 @@ export default { ...@@ -395,7 +395,7 @@ export default {
border-radius: 4px 4px 4px 4px; border-radius: 4px 4px 4px 4px;
background: #FFFFFF; background: #FFFFFF;
font-size: 14px; font-size: 14px;
min-width: 1580px; min-width: 1280px;
.content_item{ .content_item{
.content_right{ .content_right{
...@@ -506,11 +506,11 @@ export default { ...@@ -506,11 +506,11 @@ export default {
} }
.contetn_wrap{ .contetn_wrap{
position: relative; position: relative;
min-width: 1668px; min-width: 1280px;
.wrap{ .wrap{
margin-top: 12px; margin-top: 12px;
min-width: 1628px; min-width: 1228px;
overflow: auto; overflow: auto;
background: #FFFFFF; background: #FFFFFF;
border-radius: 4px 4px 4px 4px; border-radius: 4px 4px 4px 4px;
...@@ -532,7 +532,7 @@ export default { ...@@ -532,7 +532,7 @@ export default {
.infinite-list-item{ .infinite-list-item{
margin-right: 16px; margin-right: 16px;
margin-top: 16px; margin-top: 16px;
width: 383px; width: 283px;
height: 90px; height: 90px;
background: #FFFFFF; background: #FFFFFF;
border-radius: 0px 0px 0px 0px; border-radius: 0px 0px 0px 0px;
...@@ -555,7 +555,7 @@ export default { ...@@ -555,7 +555,7 @@ export default {
float: left; float: left;
} }
.name{ .name{
width: 283px; width: 178px;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
...@@ -566,7 +566,7 @@ export default { ...@@ -566,7 +566,7 @@ export default {
display: inline-block; display: inline-block;
} }
.name1{ .name1{
width: 283px; width: 178px;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
......
...@@ -113,7 +113,7 @@ ...@@ -113,7 +113,7 @@
<div class="bottomlist-title"> <div class="bottomlist-title">
<div class="bottomlist-title-left" > <div class="bottomlist-title-left" >
<p class="title-left"> <p class="title-left">
查询结果列表 <span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}
</p> </p>
<el-popover v-model="fieldshow" placement="bottom-start" trigger="click" <el-popover v-model="fieldshow" placement="bottom-start" trigger="click"
popper-class="viewlist-el-popover"> popper-class="viewlist-el-popover">
...@@ -132,7 +132,6 @@ ...@@ -132,7 +132,6 @@
<div class="title-right"> <div class="title-right">
<p><span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}</p>
<p> <p>
<img src="@/assets/images/EXCEL.png" alt=""> <img src="@/assets/images/EXCEL.png" alt="">
<span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span> <span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span>
...@@ -1159,12 +1158,6 @@ ...@@ -1159,12 +1158,6 @@
.title-right{ .title-right{
display: flex; display: flex;
align-items: center; align-items: center;
p:first-child{
font-size: 12px;
font-weight: 400;
color: #3D3D3D;
margin-right: 10px;
}
p:last-child{ p:last-child{
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -1186,15 +1179,12 @@ ...@@ -1186,15 +1179,12 @@
display: inline-flex;; display: inline-flex;;
align-items: center; align-items: center;
.title-left{ .title-left{
border-left:2px solid #445781;
padding-left:8px;
padding-right:32px;
font-size: 16px;
height:16px; height:16px;
line-height: 16px; line-height: 16px;
font-weight: bold; font-size: 12px;
color: #232323; font-weight: 400;
} color: #3D3D3D;
}
} }
.bottomlist-content{ .bottomlist-content{
......
...@@ -432,6 +432,9 @@ ...@@ -432,6 +432,9 @@
<div class="bottomlist"> <div class="bottomlist">
<div class="bottomlist-title"> <div class="bottomlist-title">
<div class="bottomlist-title-left"> <div class="bottomlist-title-left">
<p class="title-left">
<span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}条
</p>
<el-popover v-model="fieldshow" placement="bottom-start" trigger="click" <el-popover v-model="fieldshow" placement="bottom-start" trigger="click"
popper-class="viewlist-el-popover"> popper-class="viewlist-el-popover">
<ul class="pup_list"> <ul class="pup_list">
...@@ -452,7 +455,6 @@ ...@@ -452,7 +455,6 @@
</div> </div>
</div> </div>
<div class="title-right"> <div class="title-right">
<p><span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}条</p>
<p> <p>
<img src="@/assets/images/EXCEL.png" alt=""> <img src="@/assets/images/EXCEL.png" alt="">
<span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span> <span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span>
...@@ -2989,16 +2991,16 @@ ...@@ -2989,16 +2991,16 @@
margin-top: 12px; margin-top: 12px;
padding: 16px 0px ; padding: 16px 0px ;
border-bottom: 1px solid #EFEFEF; border-bottom: 1px solid #EFEFEF;
.title-left{
height:16px;
line-height: 16px;
font-size: 12px;
font-weight: 400;
color: #3D3D3D;
}
.title-right{ .title-right{
display: flex; display: flex;
align-items: center; align-items: center;
p:first-child{
font-size: 12px;
font-weight: 400;
color: #3D3D3D;
margin-right: 10px;
}
p:last-child{ p:last-child{
display: flex; display: flex;
align-items: center; align-items: center;
......
...@@ -71,8 +71,16 @@ ...@@ -71,8 +71,16 @@
<router-link :to="`/groupAccount/${scope.row.combineId}?name=${scope.row.combineName}`" tag="a" class="a-link">{{scope.row.combineName}}</router-link> <router-link :to="`/groupAccount/${scope.row.combineId}?name=${scope.row.combineName}`" tag="a" class="a-link">{{scope.row.combineName}}</router-link>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="count" label="中标数量(个)" align="right" sortable width="150"/> <el-table-column prop="count" label="中标数量" align="right" sortable width="150">
<el-table-column prop="money" label="中标金额(万元)" align="right" :sort-method="(a,b)=>{return a.money - b.money}" sortable/> <template slot-scope="scope">
{{scope.row.count}}
</template>
</el-table-column>
<el-table-column prop="money" label="中标金额" align="right" :sort-method="(a,b)=>{return a.money - b.money}" sortable>
<template slot-scope="scope">
{{scope.row.money}}万元
</template>
</el-table-column>
</el-table> </el-table>
</div> </div>
</el-col> </el-col>
...@@ -140,8 +148,16 @@ ...@@ -140,8 +148,16 @@
<span style="cursor: pointer;" class="a-link companyName" @click="getUipIdByCid(scope.row.companyId)">{{scope.row.companyName}}</span> <span style="cursor: pointer;" class="a-link companyName" @click="getUipIdByCid(scope.row.companyId)">{{scope.row.companyName}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="count" label="中标数量(个)" align="right" sortable width="150"/> <el-table-column prop="count" label="中标数量" align="right" sortable width="150">
<el-table-column prop="money" label="中标金额(万元)" align="right" :sort-method="(a,b)=>{return a.money - b.money}" sortable/> <template slot-scope="scope">
{{scope.row.count}}
</template>
</el-table-column>
<el-table-column prop="money" label="中标金额" align="right" :sort-method="(a,b)=>{return a.money - b.money}" sortable>
<template slot-scope="scope">
{{scope.row.money}}万元
</template>
</el-table-column>
</el-table> </el-table>
</div> </div>
</el-col> </el-col>
...@@ -1578,7 +1594,13 @@ export default { ...@@ -1578,7 +1594,13 @@ export default {
.el-input__inner{ .el-input__inner{
height: 32px; height: 32px;
line-height: 32px; line-height: 32px;
border-radius: 4px border-radius: 4px;
border: 0;
}
}
.is-focus{
.el-input__inner{
background: #F4F6F9;
} }
} }
......
...@@ -256,6 +256,11 @@ export default { ...@@ -256,6 +256,11 @@ export default {
width: 120px; width: 120px;
height: 34px; height: 34px;
.rote {
.el-input__inner{
background: #F4F6F9;
}
}
.input-block { .input-block {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -269,6 +274,9 @@ export default { ...@@ -269,6 +274,9 @@ export default {
>.custom-time-input.el-input { >.custom-time-input.el-input {
width: 100%; width: 100%;
height: 100%; height: 100%;
.el-input__inner{
border: 0;
}
>input { >input {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -303,10 +311,9 @@ export default { ...@@ -303,10 +311,9 @@ export default {
font-size: 14px; font-size: 14px;
color: #666666; color: #666666;
background-color: #fff; background-color: #fff;
border: 1px solid #E4E7ED;
padding: 6px 0;
border-radius: 4px; border-radius: 4px;
z-index: 10; z-index: 10;
box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.08);
.option { .option {
padding: 0 24px 0 16px; padding: 0 24px 0 16px;
......
...@@ -32,17 +32,17 @@ ...@@ -32,17 +32,17 @@
show-summary show-summary
@sort-change="sortChange" @sort-change="sortChange"
> >
<el-table-column label="序号" width="60" align="left"> <el-table-column label="序号" width="55" align="left">
<template slot-scope="scope">{{ scope.$index + 2 }}</template> <template slot-scope="scope">{{ scope.$index + 2 }}</template>
</el-table-column> </el-table-column>
<el-table-column label="产业类型" prop="projectType"></el-table-column> <el-table-column label="产业类型" prop="projectType"></el-table-column>
<el-table-column :label="oneYear"> <el-table-column :label="oneYear">
<el-table-column prop="money" label="金额(亿元)" sortable="custom" :formatter="formatStatus"></el-table-column> <el-table-column prop="money" label="金额(亿元)" sortable="custom" :formatter="formatStatus" min-width="115"></el-table-column>
<el-table-column prop="rate" label="占比(%)" :sort-method="(a,b)=>{return a.rate - b.rate}" sortable> </el-table-column> <el-table-column prop="rate" label="占比(%)" :sort-method="(a,b)=>{return a.rate - b.rate}" sortable min-width="100"> </el-table-column>
</el-table-column> </el-table-column>
<el-table-column :label="twoYear"> <el-table-column :label="twoYear">
<el-table-column prop="lastMoney" label="金额(亿元)" sortable="custom" :formatter="formatStatus"> </el-table-column> <el-table-column prop="lastMoney" label="金额(亿元)" sortable="custom" :formatter="formatStatus" min-width="115"> </el-table-column>
<el-table-column prop="lastRate" label="占比(%)" :sort-method="(a,b)=>{return a.lastRate - b.lastRate}" sortable> </el-table-column> <el-table-column prop="lastRate" label="占比(%)" :sort-method="(a,b)=>{return a.lastRate - b.lastRate}" sortable min-width="100"> </el-table-column>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
...@@ -393,7 +393,7 @@ export default { ...@@ -393,7 +393,7 @@ export default {
th:nth-child(4){ th:nth-child(4){
border-right:0; border-right:0;
.cell{ .cell{
padding-right: 24px !important; /*padding-right: 24px !important;*/
} }
} }
td:nth-child(6){ td:nth-child(6){
......
...@@ -31,10 +31,10 @@ ...@@ -31,10 +31,10 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template> <template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column> </el-table-column>
<el-table-column prop="type" label="供应方式" :formatter="formatStatus"/> <el-table-column prop="type" label="供应方式" :formatter="formatStatus"/>
<el-table-column prop="count" label="土地交易项目" align="right" :formatter="formatStatus" sortable> <el-table-column prop="count" label="土地交易项目" align="right" :formatter="formatStatus" sortable min-width="120">
<template slot-scope="scope">{{ scope.row.count }}</template> <template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column> </el-table-column>
<el-table-column prop="rate" label="占比" align="right" :formatter="formatStatus" width="90"> <el-table-column prop="rate" label="占比" align="right" :formatter="formatStatus" width="80">
<template slot-scope="scope">{{ scope.row.rate }}%</template> <template slot-scope="scope">{{ scope.row.rate }}%</template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -74,10 +74,10 @@ ...@@ -74,10 +74,10 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template> <template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column> </el-table-column>
<el-table-column prop="type" label="供应方式" :formatter="formatStatus"/> <el-table-column prop="type" label="供应方式" :formatter="formatStatus"/>
<el-table-column prop="count" label="土地交易项目" align="right" :formatter="formatStatus" sortable> <el-table-column prop="count" label="土地交易项目" align="right" :formatter="formatStatus" sortable min-width="120">
<template slot-scope="scope">{{ scope.row.count }}</template> <template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column> </el-table-column>
<el-table-column prop="rate" label="占比" align="right" :formatter="formatStatus" width="90"> <el-table-column prop="rate" label="占比" align="right" :formatter="formatStatus" width="80">
<template slot-scope="scope">{{ scope.row.rate }}%</template> <template slot-scope="scope">{{ scope.row.rate }}%</template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -120,10 +120,10 @@ ...@@ -120,10 +120,10 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template> <template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column> </el-table-column>
<el-table-column prop="province" label="地区" :formatter="formatStatus"/> <el-table-column prop="province" label="地区" :formatter="formatStatus"/>
<el-table-column prop="count" label="土地交易项目" align="right" :formatter="formatStatus" sortable> <el-table-column prop="count" label="土地交易项目" align="right" :formatter="formatStatus" sortable min-width="120">
<template slot-scope="scope">{{ scope.row.count }}</template> <template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column> </el-table-column>
<el-table-column prop="rate" label="占比" align="right" :formatter="formatStatus" width="90"> <el-table-column prop="rate" label="占比" align="right" :formatter="formatStatus" width="80">
<template slot-scope="scope">{{ scope.row.rate }}%</template> <template slot-scope="scope">{{ scope.row.rate }}%</template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -159,10 +159,10 @@ ...@@ -159,10 +159,10 @@
<template slot-scope="scope">{{ scope.$index + 1 }}</template> <template slot-scope="scope">{{ scope.$index + 1 }}</template>
</el-table-column> </el-table-column>
<el-table-column prop="type" label="年份" :formatter="formatStatus"/> <el-table-column prop="type" label="年份" :formatter="formatStatus"/>
<el-table-column prop="count" label="土地交易项目" align="right" :formatter="formatStatus" sortable> <el-table-column prop="count" label="土地交易项目" align="right" :formatter="formatStatus" sortable min-width="120">
<template slot-scope="scope">{{ scope.row.count }}</template> <template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column> </el-table-column>
<el-table-column prop="rate" label="占比" align="right" :formatter="formatStatus" width="90"> <el-table-column prop="rate" label="占比" align="right" :formatter="formatStatus" width="80">
<template slot-scope="scope">{{ scope.row.rate }}%</template> <template slot-scope="scope">{{ scope.row.rate }}%</template>
</el-table-column> </el-table-column>
</el-table> </el-table>
......
...@@ -143,21 +143,22 @@ ...@@ -143,21 +143,22 @@
<el-radio label=0></el-radio> <el-radio label=0></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="联系人角色:" class="row"> <el-form-item label="联系方式:" class="row">
<el-input type="text" v-model="queryParam.role" placeholder="请输入"></el-input> <el-input type="text" maxlength="11" @input="inputphone" v-model="queryParam.contactInformation" placeholder="请输入"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="关联企业:" class="row" v-if="thistype == 'project'"> <!--<el-form-item label="关联企业:" class="row" v-if="thistype == 'project'">-->
<el-form-item label="关联企业:" class="row">
<el-input type="text" v-model="queryParam.companyName" placeholder="请输入"></el-input> <el-input type="text" v-model="queryParam.companyName" placeholder="请输入"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="联系人角色:" class="row">
<el-input type="text" v-model="queryParam.role" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="联系人职位:" class="row"> <el-form-item label="联系人职位:" class="row">
<el-input type="text" v-model="queryParam.position" placeholder="请输入"></el-input> <el-input type="text" v-model="queryParam.position" placeholder="请输入"></el-input>
</el-form-item> </el-form-item>
<!--<el-form-item label="内部维护人:" class="row">--> <!--<el-form-item label="内部维护人:" class="row">-->
<!--<el-input type="text" v-model="queryParam.accendant" placeholder="请输入"></el-input>--> <!--<el-input type="text" v-model="queryParam.accendant" placeholder="请输入"></el-input>-->
<!--</el-form-item>--> <!--</el-form-item>-->
<el-form-item label="联系方式:" class="row">
<el-input type="text" maxlength="11" @input="inputphone" v-model="queryParam.contactInformation" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="备注:" class="row"> <el-form-item label="备注:" class="row">
<el-input <el-input
type="textarea" type="textarea"
...@@ -339,14 +340,17 @@ ...@@ -339,14 +340,17 @@
position:"", position:"",
contactInformation:"", contactInformation:"",
remark:"", remark:"",
companyName:"",
// accendant:"", // accendant:"",
} }
if(this.thistype == 'project'){ if(this.thistype == 'project'){
this.queryParam.businessId = this.searchParam.businessId this.queryParam.businessId = this.searchParam.businessId
this.companyName = "" this.companyName = ""
this.queryParam.companyName=this.$route.query.projectname
} }
if(this.thistype == 'custom'){ if(this.thistype == 'custom'){
this.queryParam.customerId = this.searchParam.customerId this.queryParam.customerId = this.searchParam.customerId
this.queryParam.companyName=this.customname
} }
}, },
} }
......
<template> <template>
<div> <div>
<el-card class="box-card noborder"> <el-card class="box-card noborder" >
<div class="cardtitles">相关企业</div> <div class="cardtitles">相关企业</div>
<div class="searchbtns"> <div class="searchbtns">
<el-select class="select" placeholder="企业类型" clearable v-model="searchParam.companyRole" @change="handleCurrentChange(1)"> <el-select class="select" placeholder="企业类型" clearable v-model="searchParam.companyRole" @change="handleCurrentChange(1)">
...@@ -9,8 +9,8 @@ ...@@ -9,8 +9,8 @@
</el-select> </el-select>
<div class="searchInput small"> <div class="searchInput small">
<el-input type="text" placeholder="输入关键词查询" clearable v-model="searchParam.companyName"> <el-input type="text" placeholder="输入关键词查询" clearable v-model="searchParam.companyName">
<i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/sousuo.png"></i></el-input> <i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/sousuo.png" @click="handleCurrentChange(1)"></i></el-input>
<div class="btn" @click="handleCurrentChange(1)">搜索</div> <!--<div class="btn" @click="handleCurrentChange(1)">搜索</div>-->
</div> </div>
<div class="btn btn_primary h32 b3" @click="opennew" v-if="isDisableds == false"><div class="img img1"></div>添加相关企业</div> <div class="btn btn_primary h32 b3" @click="opennew" v-if="isDisableds == false"><div class="img img1"></div>添加相关企业</div>
</div> </div>
......
...@@ -7,9 +7,9 @@ ...@@ -7,9 +7,9 @@
<!--<div class="searchbtns" v-if="fileDatas.rows != null && fileDatas.rows.length>0">--> <!--<div class="searchbtns" v-if="fileDatas.rows != null && fileDatas.rows.length>0">-->
<div class="searchInput small"> <div class="searchInput small">
<el-input type="text" v-model="param.keyword" clearable placeholder="输入关键词查询"> <el-input type="text" v-model="param.keyword" clearable placeholder="输入关键词查询">
<i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/sousuo.png"></i> <i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/sousuo.png" @click="handleCurrentChange(1)"></i>
</el-input> </el-input>
<div class="btn" @click="handleCurrentChange(1)">搜索</div> <!--<div class="btn" @click="handleCurrentChange(1)">搜索</div>-->
</div> </div>
<!--<div class="btn btn_primary h32 b2" @click="getUP" v-if="fileDatas.total>0"><div class="img img2"></div>上传</div>--> <!--<div class="btn btn_primary h32 b2" @click="getUP" v-if="fileDatas.total>0"><div class="img img2"></div>上传</div>-->
......
...@@ -105,7 +105,7 @@ ...@@ -105,7 +105,7 @@
</div> </div>
</el-card> </el-card>
<el-card class="box-card noborder"> <el-card class="box-card noborder top12" style="margin-bottom: 12px">
<div class="tabslist"> <div class="tabslist">
<div class="tab" v-for="(item,index) in tabslist" :class="{'on':thistag == item.tag}" @click="getCom(item.tag)"> <div class="tab" v-for="(item,index) in tabslist" :class="{'on':thistag == item.tag}" @click="getCom(item.tag)">
<span>{{item.name}}</span> <span>{{item.name}}</span>
......
...@@ -110,8 +110,8 @@ ...@@ -110,8 +110,8 @@
</el-tabs> </el-tabs>
</el-card> </el-card>
<el-card class="box-card noborder overflows"> <el-card class="box-card noborder overflows top12">
<div class="titles">项目明细 <div class="titles"><!--项目明细-->
<div class="dc"> <div class="dc">
<div class="total">{{total}}</div> <div class="total">{{total}}</div>
<!--<el-tooltip class="item" effect="dark" content="功能正在开发中" placement="top">--> <!--<el-tooltip class="item" effect="dark" content="功能正在开发中" placement="top">-->
...@@ -573,8 +573,9 @@ export default { ...@@ -573,8 +573,9 @@ export default {
height: 60px; height: 60px;
line-height: 64px; line-height: 64px;
border-bottom: 1px solid #EFEFEF; border-bottom: 1px solid #EFEFEF;
padding-left: 26px; padding-left: 2px;
&::after{ padding-right: 24px;
/*&::after{
content: " "; content: " ";
width: 2px; width: 2px;
height: 14px; height: 14px;
...@@ -582,13 +583,13 @@ export default { ...@@ -582,13 +583,13 @@ export default {
float: left; float: left;
margin-left: -10px; margin-left: -10px;
margin-top: 24px; margin-top: 24px;
} }*/
.dc{ .dc{
width: 100%;
float: right; float: right;
font-size: 12px; font-size: 12px;
color: #3D3D3D; color: #3D3D3D;
font-weight: 400; font-weight: 400;
padding-right: 24px;
position: relative; position: relative;
&::after{ &::after{
content: ' '; content: ' ';
...@@ -604,6 +605,10 @@ export default { ...@@ -604,6 +605,10 @@ export default {
display: inline-block; display: inline-block;
margin-left: 20px; margin-left: 20px;
} }
.btn-export{
float: right;
margin-top: 18px;
}
} }
} }
.datalist{ .datalist{
...@@ -641,6 +646,9 @@ export default { ...@@ -641,6 +646,9 @@ export default {
.delform{ .delform{
right: 16px; right: 16px;
top: -94px; top: -94px;
.btnsmall{
margin-top: 0;
}
} }
&:hover{ &:hover{
background-color: #F6F9FC; background-color: #F6F9FC;
......
...@@ -121,11 +121,10 @@ ...@@ -121,11 +121,10 @@
<div class="bottomlist-title"> <div class="bottomlist-title">
<div class="bottomlist-title-left" > <div class="bottomlist-title-left" >
<p class="title-left"> <p class="title-left">
查询结果 <span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}
</p> </p>
</div> </div>
<div class="title-right"> <div class="title-right">
<p><span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}</p>
<p> <p>
<img src="@/assets/images/EXCEL.png" alt=""> <img src="@/assets/images/EXCEL.png" alt="">
<span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span> <span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span>
...@@ -964,12 +963,7 @@ export default { ...@@ -964,12 +963,7 @@ export default {
.title-right{ .title-right{
display: flex; display: flex;
align-items: center; align-items: center;
p:first-child{
font-size: 12px;
font-weight: 400;
color: #3D3D3D;
margin-right: 10px;
}
p:last-child{ p:last-child{
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -989,15 +983,12 @@ export default { ...@@ -989,15 +983,12 @@ export default {
display: inline-flex;; display: inline-flex;;
align-items: center; align-items: center;
.title-left{ .title-left{
border-left:2px solid #445781; height:16px;
padding-left:8px; line-height: 16px;
padding-right:32px; font-size: 12px;
font-size: 16px; font-weight: 400;
height:16px; color: #3D3D3D;
line-height: 16px; }
font-weight: bold;
color: #232323;
}
} }
} }
.bottomlist-content{ .bottomlist-content{
......
...@@ -206,11 +206,10 @@ ...@@ -206,11 +206,10 @@
<div class="bottomlist-title"> <div class="bottomlist-title">
<div class="bottomlist-title-left" > <div class="bottomlist-title-left" >
<p class="title-left"> <p class="title-left">
查询结果 <span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}
</p> </p>
</div> </div>
<div class="title-right"> <div class="title-right">
<p><span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}</p>
<p> <p>
<img src="@/assets/images/EXCEL.png" alt=""> <img src="@/assets/images/EXCEL.png" alt="">
<span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span> <span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span>
...@@ -1163,25 +1162,16 @@ export default { ...@@ -1163,25 +1162,16 @@ export default {
display: inline-flex;; display: inline-flex;;
align-items: center; align-items: center;
.title-left{ .title-left{
border-left:2px solid #445781; height:16px;
padding-left:8px; line-height: 16px;
padding-right:32px; font-size: 12px;
font-size: 16px; font-weight: 400;
height:16px; color: #3D3D3D;
line-height: 16px; }
font-weight: bold;
color: #232323;
}
} }
.title-right{ .title-right{
display: flex; display: flex;
align-items: center; align-items: center;
p:first-child{
font-size: 12px;
font-weight: 400;
color: #3D3D3D;
margin-right: 10px;
}
p:last-child{ p:last-child{
display: flex; display: flex;
align-items: center; align-items: center;
......
...@@ -177,11 +177,10 @@ ...@@ -177,11 +177,10 @@
<div class="bottomlist-title"> <div class="bottomlist-title">
<div class="bottomlist-title-left" > <div class="bottomlist-title-left" >
<p class="title-left"> <p class="title-left">
查询结果 <span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}
</p> </p>
</div> </div>
<div class="title-right"> <div class="title-right">
<p><span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}</p>
<p> <p>
<img src="@/assets/images/EXCEL.png" alt=""> <img src="@/assets/images/EXCEL.png" alt="">
<span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span> <span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span>
...@@ -1256,12 +1255,7 @@ ...@@ -1256,12 +1255,7 @@
.title-right{ .title-right{
display: flex; display: flex;
align-items: center; align-items: center;
p:first-child{
font-size: 12px;
font-weight: 400;
color: #3D3D3D;
margin-right: 10px;
}
p:last-child{ p:last-child{
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -1281,15 +1275,12 @@ ...@@ -1281,15 +1275,12 @@
display: inline-flex;; display: inline-flex;;
align-items: center; align-items: center;
.title-left{ .title-left{
border-left:2px solid #445781; height:16px;
padding-left:8px; line-height: 16px;
padding-right:32px; font-size: 12px;
font-size: 16px; font-weight: 400;
height:16px; color: #3D3D3D;
line-height: 16px; }
font-weight: bold;
color: #232323;
}
} }
} }
.bottomlist-content{ .bottomlist-content{
......
...@@ -204,7 +204,7 @@ ...@@ -204,7 +204,7 @@
<div class="bottomlist-title"> <div class="bottomlist-title">
<div class="bottomlist-title-left" > <div class="bottomlist-title-left" >
<p class="title-left"> <p class="title-left">
查询结果 <span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}
</p> </p>
<el-popover v-model="fieldshow" placement="bottom-start" trigger="click" <el-popover v-model="fieldshow" placement="bottom-start" trigger="click"
popper-class="viewlist-el-popover"> popper-class="viewlist-el-popover">
...@@ -221,8 +221,7 @@ ...@@ -221,8 +221,7 @@
</el-popover> </el-popover>
</div> </div>
<div class="title-right"> <div class="title-right">
<p><span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}</p> <p>
<p>
<img src="@/assets/images/EXCEL.png" alt=""> <img src="@/assets/images/EXCEL.png" alt="">
<span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span> <span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span>
</p> </p>
...@@ -1053,25 +1052,17 @@ ...@@ -1053,25 +1052,17 @@
display: inline-flex;; display: inline-flex;;
align-items: center; align-items: center;
.title-left{ .title-left{
border-left:2px solid #445781; height:16px;
padding-left:8px; line-height: 16px;
padding-right:32px; font-size: 12px;
font-size: 16px; font-weight: 400;
height:16px; color: #3D3D3D;
line-height: 16px; }
font-weight: bold;
color: #232323;
}
} }
.title-right{ .title-right{
display: flex; display: flex;
align-items: center; align-items: center;
p:first-child{
font-size: 12px;
font-weight: 400;
color: #3D3D3D;
margin-right: 10px;
}
p:last-child{ p:last-child{
display: flex; display: flex;
align-items: center; align-items: center;
......
...@@ -123,8 +123,8 @@ ...@@ -123,8 +123,8 @@
<div class="bottomlist-title"> <div class="bottomlist-title">
<div class="bottomlist-title-left" > <div class="bottomlist-title-left" >
<p class="title-left"> <p class="title-left">
查询结果 <span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}条
</p> </p>
<el-popover v-model="fieldshow" placement="bottom-start" trigger="click" popper-class="viewlist-el-popover"> <el-popover v-model="fieldshow" placement="bottom-start" trigger="click" popper-class="viewlist-el-popover">
<ul class="pup_list pup_zhclist"> <ul class="pup_list pup_zhclist">
<li v-for="(itme,i) in fieldOptions" :class="itme.status?'active':''" <li v-for="(itme,i) in fieldOptions" :class="itme.status?'active':''"
...@@ -137,10 +137,9 @@ ...@@ -137,10 +137,9 @@
</el-popover> </el-popover>
</div> </div>
<div class="title-right"> <div class="title-right">
<p><span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}条</p>
<p v-hasPermi="['radar:export:important']" > <p v-hasPermi="['radar:export:important']" >
<img src="@/assets/images/EXCEL.png" alt=""> <img src="@/assets/images/EXCEL.png" alt="">
<span class="excel" @click="search('','','export')">导出EXCEL</span> <span class="excel" @click="clickDialog">导出EXCEL</span>
</p> </p>
</div> </div>
...@@ -232,8 +231,54 @@ ...@@ -232,8 +231,54 @@
:total="total>limit*500?501*limit:total"> :total="total>limit*500?501*limit:total">
</el-pagination> </el-pagination>
</div> </div>
</div> </div>
<el-dialog :visible.sync="dialogExportVisible" width="640px" append-to-body class="dialogExport">
<template slot="title">
<img class="tip-img" src="@/assets/images/icon.png" />数据导出
</template>
<div class="table-item">
<el-table :data="exportTableData">
<el-table-column prop="buildingProjectType" label="项目类型" width="80"></el-table-column>
<el-table-column prop="projectName" label="项目名称" width="220"></el-table-column>
<el-table-column prop="chargeDepartment" label="主管部门" min-width="170"></el-table-column>
<el-table-column prop="constructUnit" label="项目法人" min-width="170"></el-table-column>
<el-table-column prop="projectTotalInvestment" label="项目投资额" min-width="100"></el-table-column>
<el-table-column prop="domicile" label="项目地区" min-width="80"></el-table-column>
<el-table-column prop="projectScale" label="建设规模" min-width="430"></el-table-column>
<el-table-column prop="fileTitle" label="附件名称" min-width="200"></el-table-column>
<el-table-column prop="fileUrl" label="附件链接" min-width="360"></el-table-column>
</el-table>
</div>
<div class="input">
导出数量:
<el-input placeholder="" v-model="value" oninput="value=value.replace(/[^\d]/g,'')">
<template slot="append"></template>
</el-input>
<p v-if="value > 2000"><i class="el-icon-error"></i>最多支持导出2000条,如需更多联系大司空客服人员</p>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="clickEXCEL">确认导出</el-button>
<el-button @click="cancel">取消</el-button>
</div>
</el-dialog>
<el-dialog :visible.sync="dialogExportVisible1" width="640px" append-to-body class="dialogExport">
<template slot="title">
<img class="tip-img" src="@/assets/images/icon.png" />
数据导出
</template>
<div class="content">
<img class="success" src="@/assets/images/success.png" />
<p class="p1">导出成功</p>
<p class="p2">
可在个人中心查看导出表格
<span @click="toUrl">前往个人中心</span>
</p>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="downloadFile(exportData.url,exportData.originalName)">下载表格</el-button>
<el-button @click="dialogExportVisible1 = false">取消</el-button>
</div>
</el-dialog>
</div> </div>
</template> </template>
...@@ -243,11 +288,36 @@ import {encodeStr} from "@/assets/js/common.js" ...@@ -243,11 +288,36 @@ import {encodeStr} from "@/assets/js/common.js"
import skeleton from '@/views/project/projectList/component/skeleton' import skeleton from '@/views/project/projectList/component/skeleton'
import api from '@/api/radar/radar.js'; import api from '@/api/radar/radar.js';
export default { export default {
name: 'BidRecord', name: 'MajorProject',
components:{skeleton}, components:{skeleton},
data() { data() {
return { return {
encodeStr, encodeStr,
dialogExportVisible1:false,
exportTableData:[
{
"domicile":"江津区",
"chargeDepartment":"兴庆区商合局",
"constructUnit":'鞍钢股份有限公司',
"projectScale":"项目建设规划总面积约3000亩,其中商住用地面积2000亩,文化旅游综合用地约1000亩,打造集“市井民俗文化体验、休闲度假、亲子研学等”为一体的复合型文化旅游目的地,企业已完成项目规划方案。",
"fileTitle":"宁夏回族自治区银川市2023年度重点项目清单.pdf",
"fileUrl":"http://file.jiansheku.com/key_project/b9e22fbf2e409642aa97f8238e934272.pdf",
"buildingProjectType":"房建工程",
"projectTotalInvestment":"70000万元",
"projectName":"'上河堡'文旅综合体项目",
},
{
"domicile":"江津区",
"chargeDepartment":"国网重庆江津区供电公司",
"constructUnit":'国网重庆江津区供电公司',
"projectScale":"新建110kV变电站1座,主变容量2*50MVA,新建110kV线路20km",
"fileTitle":"重庆市江津区2023年度重点项目清单.xlsx",
"fileUrl":"http://file.jiansheku.com/key_project/4080bef69da03056d1db953698f4d807.xlsx",
"buildingProjectType":"电力工程",
"projectTotalInvestment":"5500万元",
"projectName":"重庆江津李市110kV输变电工程",
}],
exportData:{},
fieldshow: false, fieldshow: false,
fieldText: '默认排序', fieldText: '默认排序',
field: 'year', //查询结果排序方式 field: 'year', //查询结果排序方式
...@@ -371,7 +441,9 @@ export default { ...@@ -371,7 +441,9 @@ export default {
total:0, total:0,
page: 1, page: 1,
limit: 20, limit: 20,
dataEXCEL:{} dataEXCEL:{},
dialogExportVisible:false,
value:''
}; };
}, },
mounted() { mounted() {
...@@ -446,17 +518,9 @@ export default { ...@@ -446,17 +518,9 @@ export default {
}, },
importantProjectDto: data, importantProjectDto: data,
}; };
if(exportFlag){
this.dataEXCEL = params this.dataEXCEL = params
if(this.total > 2000){
this.dataEXCEL.page.limit = 2000;
}else {
this.dataEXCEL.page.limit = this.total;
}
this.$download.exportByPost('/radar/export/important',this.dataEXCEL,'重点项目清单.xlsx');
}else{
api.getImportantPage(params).then(res=>{ api.getImportantPage(params).then(res=>{
this.isSkeleton = false; this.isSkeleton = false;
if (res.code==200) { if (res.code==200) {
this.tableData=res.data.list; this.tableData=res.data.list;
this.total=res.data.total; this.total=res.data.total;
...@@ -467,7 +531,7 @@ export default { ...@@ -467,7 +531,7 @@ export default {
}); });
}
}, },
getUipIdByCid(companyId){ getUipIdByCid(companyId){
...@@ -673,6 +737,52 @@ export default { ...@@ -673,6 +737,52 @@ export default {
this.fieldOptions[index].status = true; this.fieldOptions[index].status = true;
this.search(); this.search();
}, },
clickDialog(){
this.dialogExportVisible=true;
},
clickEXCEL() {
if(this.value > 2000){
return
}
this.dialogExportVisible=false;
if(this.value){
this.dataEXCEL.page.limit=this.value
}else {
this.dataEXCEL.page.limit=this.total > 2000 ? 2000 : this.total;
}
delete this.dataEXCEL.page.page
api.radarExport(this.dataEXCEL).then(res=>{
if(res.code === 200){
this.dialogExportVisible1=true;
this.value=''
this.exportData=res.data;
}
})
},
cancel(){
this.dialogExportVisible=false
this.value=''
},
downloadFile(url, fileName) {
const x = new XMLHttpRequest()
x.open("GET", url, true)
x.responseType = 'blob'
x.onload=function(e) {
const url = window.URL.createObjectURL(x.response)
const a = document.createElement('a')
a.href = url
a.download = fileName
a.click()
a.remove()
}
x.send()
},
toUrl(){
this.dialogExportVisible1=false;
this.$router.push({
path: '/user/profile',
})
},
}, },
}; };
</script> </script>
...@@ -807,12 +917,7 @@ export default { ...@@ -807,12 +917,7 @@ export default {
.title-right{ .title-right{
display: flex; display: flex;
align-items: center; align-items: center;
p:first-child{
font-size: 12px;
font-weight: 400;
color: #3D3D3D;
margin-right: 10px;
}
p:last-child{ p:last-child{
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -832,15 +937,12 @@ export default { ...@@ -832,15 +937,12 @@ export default {
display: inline-flex;; display: inline-flex;;
align-items: center; align-items: center;
.title-left{ .title-left{
border-left:2px solid #445781; height:16px;
padding-left:8px; line-height: 16px;
padding-right:32px; font-size: 12px;
font-size: 16px; font-weight: 400;
height:16px; color: #3D3D3D;
line-height: 16px; }
font-weight: bold;
color: #232323;
}
} }
} }
.bottomlist-content{ .bottomlist-content{
...@@ -946,8 +1048,94 @@ export default { ...@@ -946,8 +1048,94 @@ export default {
} }
} }
.jabph_popper_box{ .jabph_popper_box{
left: 101px; left: 101px;
}
.dialogExport{
::v-deep .el-dialog{
.el-dialog__header{
height: 48px;
line-height: 48px;
padding: 0 16px;
border-bottom: 1px solid #E1E1E1;
font-weight: bold;
color: #1D2129;
font-size: 16px;
.tip-img{
width: 18px;
height: 18px;
margin-right: 7px;
margin-bottom: -3px;
}
.el-dialog__headerbtn{
font-size: 20px;
font-weight: bold;
top: 15px;
.el-dialog__close{
color:#999999;
}
}
}
.el-dialog__body{
padding: 16px;
.input{
margin-top: 16px;
.el-input{
width: 160px;
border-radius: 2px;
height: 32px;
.el-input__inner{
height: 32px;
line-height: 32px;
}
}
.el-input-group__append{
padding: 0 14px;
}
p{
color: #FF3C3C;
font-size: 12px;
margin-left: 12px;
display: inline-block;
i{
font-size: 14px;
margin-right: 4px;
}
}
}
.content{
text-align: center;
margin-top: 36px;
.success{
width: 64px;
height: 64px;
margin-bottom: 16px;
}
p{
padding: 0;
margin: 0;
}
.p1{
color: #232323;
font-size: 16px;
margin-bottom: 8px;
}
.p2{
color: rgba(35,35,35,0.4);
font-size: 14px;
span{
color:#0081FF;
cursor: pointer;
}
}
}
}
.el-dialog__footer{
text-align: center;
padding-bottom: 24px;
}
}
} }
</style> </style>
...@@ -179,11 +179,10 @@ ...@@ -179,11 +179,10 @@
<div class="bottomlist-title"> <div class="bottomlist-title">
<div class="bottomlist-title-left" > <div class="bottomlist-title-left" >
<p class="title-left"> <p class="title-left">
查询结果 <span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}
</p> </p>
</div> </div>
<div class="title-right"> <div class="title-right">
<p><span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}</p>
<p> <p>
<img src="@/assets/images/EXCEL.png" alt=""> <img src="@/assets/images/EXCEL.png" alt="">
<span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span> <span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span>
...@@ -1257,25 +1256,17 @@ ...@@ -1257,25 +1256,17 @@
display: inline-flex;; display: inline-flex;;
align-items: center; align-items: center;
.title-left{ .title-left{
border-left:2px solid #445781; height:16px;
padding-left:8px; line-height: 16px;
padding-right:32px; font-size: 12px;
font-size: 16px; font-weight: 400;
height:16px; color: #3D3D3D;
line-height: 16px; }
font-weight: bold;
color: #232323;
}
} }
.title-right{ .title-right{
display: flex; display: flex;
align-items: center; align-items: center;
p:first-child{
font-size: 12px;
font-weight: 400;
color: #3D3D3D;
margin-right: 10px;
}
p:last-child{ p:last-child{
display: flex; display: flex;
align-items: center; align-items: center;
......
...@@ -333,11 +333,10 @@ ...@@ -333,11 +333,10 @@
<div class="bottomlist-title"> <div class="bottomlist-title">
<div class="bottomlist-title-left" > <div class="bottomlist-title-left" >
<p class="title-left"> <p class="title-left">
查询结果 <span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}条
</p> </p>
</div> </div>
<div class="title-right"> <div class="title-right">
<p><span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}条</p>
<p> <p>
<img src="@/assets/images/EXCEL.png" alt=""> <img src="@/assets/images/EXCEL.png" alt="">
<span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span> <span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span>
...@@ -2009,25 +2008,17 @@ ...@@ -2009,25 +2008,17 @@
display: inline-flex;; display: inline-flex;;
align-items: center; align-items: center;
.title-left{ .title-left{
border-left:2px solid #445781; height:16px;
padding-left:8px; line-height: 16px;
padding-right:32px; font-size: 12px;
font-size: 16px; font-weight: 400;
height:16px; color: #3D3D3D;
line-height: 16px; }
font-weight: bold;
color: #232323;
}
} }
.title-right{ .title-right{
display: flex; display: flex;
align-items: center; align-items: center;
p:first-child{
font-size: 12px;
font-weight: 400;
color: #3D3D3D;
margin-right: 10px;
}
p:last-child{ p:last-child{
display: flex; display: flex;
align-items: center; align-items: center;
......
...@@ -93,11 +93,10 @@ ...@@ -93,11 +93,10 @@
<div class="bottomlist-title"> <div class="bottomlist-title">
<div class="bottomlist-title-left" > <div class="bottomlist-title-left" >
<p class="title-left"> <p class="title-left">
查询结果 <span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}条
</p> </p>
</div> </div>
<div class="title-right"> <div class="title-right">
<p><span style="margin-right:4;color:rgba(35, 35, 35, 0.40);font-size: 18px;position: relative;top:2px;">·</span>共有{{total}}条</p>
<p> <p>
<img src="@/assets/images/EXCEL.png" alt=""> <img src="@/assets/images/EXCEL.png" alt="">
<span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span> <span class="excel" @click="$message({message: '功能正在开发中',type: 'warning'})">导出EXCEL</span>
...@@ -697,25 +696,17 @@ ...@@ -697,25 +696,17 @@
display: inline-flex;; display: inline-flex;;
align-items: center; align-items: center;
.title-left{ .title-left{
border-left:2px solid #445781; height:16px;
padding-left:8px; line-height: 16px;
padding-right:32px; font-size: 12px;
font-size: 16px; font-weight: 400;
height:16px; color: #3D3D3D;
line-height: 16px; }
font-weight: bold;
color: #232323;
}
} }
.title-right{ .title-right{
display: flex; display: flex;
align-items: center; align-items: center;
p:first-child{
font-size: 12px;
font-weight: 400;
color: #3D3D3D;
margin-right: 10px;
}
p:last-child{ p:last-child{
display: flex; display: flex;
align-items: center; align-items: center;
......
...@@ -767,3 +767,16 @@ export default { ...@@ -767,3 +767,16 @@ export default {
} }
}; };
</script> </script>
<style lang="scss" scoped>
.head-container{
::v-deep .el-tree-node__content{
white-space: normal !important;
height: auto;
padding: 2px 0;
.el-tree-node__expand-icon{
padding: 2px 6px;
align-self: flex-start;
}
}
}
</style>
...@@ -79,8 +79,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService { ...@@ -79,8 +79,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
QueryWrapper<SysUser> wrapper = Wrappers.query(); QueryWrapper<SysUser> wrapper = Wrappers.query();
wrapper.eq("u.del_flag", UserConstants.USER_NORMAL) wrapper.eq("u.del_flag", UserConstants.USER_NORMAL)
.eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId()) .eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId())
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus()) .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
.like(StringUtils.isNotBlank(user.getUserName()), "u.nick_name", user.getUserName())
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber()) .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
.between(params.get("beginTime") != null && params.get("endTime") != null, .between(params.get("beginTime") != null && params.get("endTime") != null,
"u.create_time", params.get("beginTime"), params.get("endTime")) "u.create_time", params.get("beginTime"), params.get("endTime"))
...@@ -91,7 +91,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService { ...@@ -91,7 +91,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
List<Long> ids = StreamUtils.toList(deptList, SysDept::getDeptId); List<Long> ids = StreamUtils.toList(deptList, SysDept::getDeptId);
ids.add(user.getDeptId()); ids.add(user.getDeptId());
w.in("u.dept_id", ids); w.in("u.dept_id", ids);
}).orderByDesc("u.create_time"); })
.or()
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.orderByDesc("u.create_time");
return wrapper; return wrapper;
} }
...@@ -290,7 +293,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService { ...@@ -290,7 +293,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
//租户新增成功,发送短信通知租户 //租户新增成功,发送短信通知租户
LinkedHashMap<String, String> map = new LinkedHashMap<>(1); LinkedHashMap<String, String> map = new LinkedHashMap<>(1);
map.put("company", user.getNickName()); map.put("company", user.getNickName());
map.put("pwd",password); map.put("pwd", password);
SmsBlend smsBlend = SmsFactory.createSmsBlend(SupplierType.ALIBABA); SmsBlend smsBlend = SmsFactory.createSmsBlend(SupplierType.ALIBABA);
SmsResponse smsResponse = smsBlend.sendMessage(user.getPhonenumber(), "SMS_463175230", map); SmsResponse smsResponse = smsBlend.sendMessage(user.getPhonenumber(), "SMS_463175230", map);
if (!"OK".equals(smsResponse.getCode())) { if (!"OK".equals(smsResponse.getCode())) {
......
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