Commit 7c7b08c0 authored by tanyang's avatar tanyang

Merge remote-tracking branch 'origin/V20230915'

# Conflicts:
#	dsk-operate-ui/vue.config.js
parents b59930b2 ea37a238
...@@ -168,6 +168,7 @@ tenant: ...@@ -168,6 +168,7 @@ tenant:
- business_follow_record - business_follow_record
- business_label - business_label
- business_relate_company - business_relate_company
- business_open_tender
# MyBatisPlus配置 # MyBatisPlus配置
......
...@@ -28,9 +28,9 @@ public interface CacheConstants { ...@@ -28,9 +28,9 @@ public interface CacheConstants {
public static final String DATA_UIPGROUPDATA = "data:uipGroupData"; public static final String DATA_UIPGROUPDATA = "data:uipGroupData";
/** /**
* 查甲方 菜单选线 * 用户 位置信息
*/ */
public static final String PERSONAL_LOCATION = "personal:location"; public static final String PERSONAL_LOCATION = "personal:location:";
/** /**
* 查甲方 财务数据 * 查甲方 财务数据
...@@ -42,4 +42,10 @@ public interface CacheConstants { ...@@ -42,4 +42,10 @@ public interface CacheConstants {
* 全国经济大全-默认 * 全国经济大全-默认
*/ */
public static final String DATA_ECONOMIC = "data:economic"; public static final String DATA_ECONOMIC = "data:economic";
/**
* 查集团户-集团统计信息
*/
public static final String DATA_COMBINE = "data:combine:";
} }
...@@ -32,17 +32,22 @@ public class PasswordUtils { ...@@ -32,17 +32,22 @@ public class PasswordUtils {
// 至少包含一个大写字母 // 至少包含一个大写字母
password.append(UPPER_CASE.charAt(random.nextInt(UPPER_CASE.length()))); password.append(UPPER_CASE.charAt(random.nextInt(UPPER_CASE.length())));
// 至少包含一个数字
password.append(NUMBERS.charAt(random.nextInt(NUMBERS.length())));
// 生成剩余部分的密码 // 生成剩余部分的密码
for (int i = 0; i < length - 3; i++) { for (int i = 0; i < length - 2; i++) {
String characters = LOWER_CASE + UPPER_CASE + NUMBERS; // 至少包含一个数字
password.append(characters.charAt(random.nextInt(characters.length()))); password.append(NUMBERS.charAt(random.nextInt(NUMBERS.length())));
// String characters = LOWER_CASE + UPPER_CASE + NUMBERS;
// password.append(characters.charAt(random.nextInt(characters.length())));
} }
// 打乱密码中字符的顺序 // 打乱密码中字符的顺序
return shufflePassword(password.toString()); // return shufflePassword(password.toString());
return password.toString();
}
public static void main(String[] args) {
System.out.println(PasswordUtils.generatePwd(8));
} }
public static String shufflePassword(String password) { public static String shufflePassword(String password) {
......
package com.dsk.biz.controller;
import com.dsk.biz.domain.BusinessOpenTender;
import com.dsk.biz.domain.bo.BusinessOpenTenderDto;
import com.dsk.biz.domain.bo.BusinessSearchDto;
import com.dsk.biz.service.IBusinessOpenTenderService;
import com.dsk.common.annotation.RepeatSubmit;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 项目开标记录
*
* @author lcl
* @date 2023-10-23
*/
@RestController
@RequestMapping("/business/open/tender")
public class BusinessOpenTenderController extends BaseController {
@Autowired
private IBusinessOpenTenderService baseService;
/**
* 开标记录列表
*/
@GetMapping("/list")
public TableDataInfo<BusinessOpenTender> list(BusinessOpenTenderDto dto, PageQuery pageQuery){
return baseService.selectList(dto, pageQuery);
}
/**
* 添加开标记录
*/
@PostMapping
@RepeatSubmit()
public R<Void> add(@RequestBody BusinessOpenTender bo){
return toAjax(baseService.add(bo));
}
/**
* 修改开标记录
*/
@PutMapping
@RepeatSubmit()
public R<Void> edit(@RequestBody BusinessOpenTender bo){
return toAjax(baseService.edit(bo));
}
/**
* 删除开标记录
*/
@DeleteMapping("/{ids}")
@RepeatSubmit()
public R<Void> remove(@PathVariable Long[] ids){
return toAjax(baseService.remove(ids));
}
}
package com.dsk.biz.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Author lcl
* @Data 2023/10/23 16:26
*/
@Data
public class BusinessOpenTender implements Serializable {
@TableId(value = "id",type = IdType.AUTO)
private Long id;
/**
* 项目id
*/
private Integer businessId;
/**
* 投标人id
*/
private Integer tendererId;
/**
* 投标人
*/
private String tenderer;
/**
* 企业性质
*/
private String tendererNature;
/**
* 项目经理
*/
private String businessManager;
/**
* 联系方式
*/
private String contact;
/**
* 投标金额
*/
private Double tenderAmount;
private Date createTime;
private Date updateTime;
}
package com.dsk.biz.domain.bo;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author lcl
* @create 2023/8/14
*/
@Data
@NoArgsConstructor
public class BusinessOpenTenderDto implements Serializable {
/**
* 项目id
*/
private Integer businessId;
}
package com.dsk.biz.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.biz.domain.BusinessOpenTender;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface BusinessOpenTenderMapper extends BaseMapper<BusinessOpenTender> {
}
package com.dsk.biz.service;
import com.dsk.biz.domain.BusinessOpenTender;
import com.dsk.biz.domain.bo.BusinessOpenTenderDto;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
public interface IBusinessOpenTenderService {
TableDataInfo<BusinessOpenTender> selectList(BusinessOpenTenderDto dto, PageQuery pageQuery);
int add(BusinessOpenTender bo);
int edit(BusinessOpenTender bo);
int remove(Long[] ids);
}
package com.dsk.biz.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsk.biz.domain.BusinessOpenTender;
import com.dsk.biz.domain.bo.BusinessOpenTenderDto;
import com.dsk.biz.domain.bo.BusinessSearchDto;
import com.dsk.biz.mapper.BusinessOpenTenderMapper;
import com.dsk.biz.service.IBusinessOpenTenderService;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
import jodd.bean.BeanException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.sql.Wrapper;
import java.util.Arrays;
import java.util.List;
/**
* @Author lcl
* @Data 2023/10/23 16:29
*/
@Slf4j
@Service
public class BusinessOpenTenderServiceImpl implements IBusinessOpenTenderService {
@Resource
private BusinessOpenTenderMapper baseMapper;
@Override
public TableDataInfo<BusinessOpenTender> selectList(BusinessOpenTenderDto dto, PageQuery pageQuery) {
return TableDataInfo.build(baseMapper.selectPage(pageQuery.build(),
Wrappers.<BusinessOpenTender>lambdaQuery().eq(BusinessOpenTender::getBusinessId, dto.getBusinessId())));
}
@Override
public int add(BusinessOpenTender bo) {
verifyBean(bo);
return baseMapper.insert(bo);
}
@Override
public int edit(BusinessOpenTender bo) {
if(ObjectUtils.isArray(bo.getId())) throw new BeanException("id不能为空!");
verifyBean(bo);
return baseMapper.updateById(bo);
}
@Override
public int remove(Long[] ids) {
return baseMapper.deleteBatchIds(Arrays.asList(ids));
}
private void verifyBean(BusinessOpenTender bo){
if(ObjectUtils.isArray(bo.getBusinessId())) throw new BeanException("项目id不能为空!");
if(ObjectUtils.isArray(bo.getTenderer())) throw new BeanException("开标人不能为空!");
if(ObjectUtils.isArray(bo.getTendererNature())) throw new BeanException("企业性质不能为空!");
if(ObjectUtils.isArray(bo.getTenderAmount())) throw new BeanException("投标金额不能为空!");
}
}
...@@ -11,6 +11,7 @@ import com.dsk.common.core.domain.R; ...@@ -11,6 +11,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.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.JsonUtils;
import com.dsk.common.utils.StringUtils; import com.dsk.common.utils.StringUtils;
import com.dsk.jsk.domain.JskCombineBidPageDto; import com.dsk.jsk.domain.JskCombineBidPageDto;
import com.dsk.jsk.domain.JskCombineCertificateDto; import com.dsk.jsk.domain.JskCombineCertificateDto;
...@@ -248,9 +249,9 @@ public class JskCombineInfoService { ...@@ -248,9 +249,9 @@ public class JskCombineInfoService {
*@date: 2023/9/12 16:05 *@date: 2023/9/12 16:05
*/ */
public R memberCount(JskCombineCountDto dto) { public R memberCount(JskCombineCountDto dto) {
String redisKey = CacheConstants.PERSONAL_LOCATION + dto.getCombineId(); String redisKey = CacheConstants.DATA_COMBINE + dto.getCombineId();
if (ObjectUtil.isNotEmpty(redisKey)) { if (ObjectUtil.isNotEmpty(redisKey)) {
Map<String, Object> cacheMap = redisCache.getCacheObject(redisKey); Map<String, Object> cacheMap = JsonUtils.parseObject(redisCache.getCacheObject(redisKey), Map.class);
if (MapUtils.isNotEmpty(cacheMap)) { if (MapUtils.isNotEmpty(cacheMap)) {
return R.ok(cacheMap); return R.ok(cacheMap);
} }
...@@ -263,7 +264,7 @@ public class JskCombineInfoService { ...@@ -263,7 +264,7 @@ public class JskCombineInfoService {
Map<String, Object> data = BeanUtil.beanToMap(map.get("data")); Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
data.put("performance", businessCount(paramsMap)); data.put("performance", businessCount(paramsMap));
map.put("data", data); map.put("data", data);
redisCache.setCacheObject(redisKey, data,24, TimeUnit.HOURS); redisCache.setCacheObject(redisKey, JsonUtils.toJsonString(data), 24, TimeUnit.HOURS);
} }
return BeanUtil.toBean(map, R.class); return BeanUtil.toBean(map, R.class);
} }
......
...@@ -8,6 +8,7 @@ import com.dsk.common.core.domain.AjaxResult; ...@@ -8,6 +8,7 @@ import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.helper.LoginHelper; import com.dsk.common.helper.LoginHelper;
import com.dsk.common.utils.DateUtils; import com.dsk.common.utils.DateUtils;
import com.dsk.common.utils.DskOpenApiUtil; import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.common.utils.JsonUtils;
import com.dsk.jsk.domain.*; import com.dsk.jsk.domain.*;
import com.dsk.jsk.domain.bo.*; import com.dsk.jsk.domain.bo.*;
import com.dsk.jsk.service.service.EconomicService; import com.dsk.jsk.service.service.EconomicService;
...@@ -56,7 +57,7 @@ public class EconomicServiceImpl implements EconomicService { ...@@ -56,7 +57,7 @@ public class EconomicServiceImpl implements EconomicService {
dto.setYear(DateUtils.getYear() - 1); dto.setYear(DateUtils.getYear() - 1);
} }
Map<String, Object> map = dskOpenApiUtil.requestBody("/economic/national/nationalPage", BeanUtil.beanToMap(dto, false, false)); Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/economic/national/nationalPage", BeanUtil.beanToMap(dto, false, false));
Integer code = MapUtils.getInteger(map, "code", 300); Integer code = MapUtils.getInteger(map, "code", 300);
if (!code.equals(HttpStatus.OK.value())) { if (!code.equals(HttpStatus.OK.value())) {
throw new RuntimeException(); throw new RuntimeException();
...@@ -82,7 +83,7 @@ public class EconomicServiceImpl implements EconomicService { ...@@ -82,7 +83,7 @@ public class EconomicServiceImpl implements EconomicService {
String redisKey = CacheConstants.PERSONAL_LOCATION + userId; String redisKey = CacheConstants.PERSONAL_LOCATION + userId;
if (ObjectUtil.isEmpty(detailsDto.getProvinceId()) && ObjectUtil.isEmpty(detailsDto.getCityId()) && ObjectUtil.isEmpty(detailsDto.getAreaId())) { if (ObjectUtil.isEmpty(detailsDto.getProvinceId()) && ObjectUtil.isEmpty(detailsDto.getCityId()) && ObjectUtil.isEmpty(detailsDto.getAreaId())) {
if (ObjectUtil.isNotEmpty(redisKey)) { if (ObjectUtil.isNotEmpty(redisKey)) {
Map<String, Object> cacheMap = redisCache.getCacheMap(redisKey); Map<Object, Object> cacheMap = JsonUtils.parseObject(redisCache.getCacheObject(redisKey), Map.class);
if (MapUtils.isNotEmpty(cacheMap)) { if (MapUtils.isNotEmpty(cacheMap)) {
return AjaxResult.success(cacheMap); return AjaxResult.success(cacheMap);
} }
...@@ -94,10 +95,9 @@ public class EconomicServiceImpl implements EconomicService { ...@@ -94,10 +95,9 @@ public class EconomicServiceImpl implements EconomicService {
if (!code.equals(HttpStatus.OK.value())) { if (!code.equals(HttpStatus.OK.value())) {
throw new RuntimeException(); throw new RuntimeException();
} }
Map data = MapUtils.getMap(map, "data", null); Map data = MapUtils.getMap(map, "data", null);
if (ObjectUtil.isNotEmpty(detailsDto.getProvinceId()) || ObjectUtil.isNotEmpty(detailsDto.getCityId()) || ObjectUtil.isNotEmpty(detailsDto.getAreaId())) { if (ObjectUtil.isNotEmpty(detailsDto.getProvinceId()) || ObjectUtil.isNotEmpty(detailsDto.getCityId()) || ObjectUtil.isNotEmpty(detailsDto.getAreaId())) {
redisCache.setCacheMap(redisKey, data); redisCache.setCacheObject(redisKey, JsonUtils.toJsonString(data));
} }
return BeanUtil.toBean(map, AjaxResult.class); return BeanUtil.toBean(map, AjaxResult.class);
} }
......
...@@ -7,10 +7,7 @@ import java.util.Map; ...@@ -7,10 +7,7 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundSetOperations; import org.springframework.data.redis.core.*;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
...@@ -25,15 +22,18 @@ public class RedisCache ...@@ -25,15 +22,18 @@ public class RedisCache
@Autowired @Autowired
public RedisTemplate redisTemplate; public RedisTemplate redisTemplate;
@Autowired
public StringRedisTemplate stringRedisTemplate;
/** /**
* 缓存基本的对象,Integer、String、实体类等 * 缓存基本的对象,Integer、String、实体类等
* *
* @param key 缓存的键值 * @param key 缓存的键值
* @param value 缓存的值 * @param value 缓存的值
*/ */
public <T> void setCacheObject(final String key, final T value) public <T> void setCacheObject(final String key, final String value)
{ {
redisTemplate.opsForValue().set(key, value); stringRedisTemplate.opsForValue().set(key, value);
} }
/** /**
...@@ -44,9 +44,9 @@ public class RedisCache ...@@ -44,9 +44,9 @@ public class RedisCache
* @param timeout 时间 * @param timeout 时间
* @param timeUnit 时间颗粒度 * @param timeUnit 时间颗粒度
*/ */
public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) public <T> void setCacheObject(final String key, final String value, final Integer timeout, final TimeUnit timeUnit)
{ {
redisTemplate.opsForValue().set(key, value, timeout, timeUnit); stringRedisTemplate.opsForValue().set(key, value, timeout, timeUnit);
} }
/** /**
...@@ -102,10 +102,9 @@ public class RedisCache ...@@ -102,10 +102,9 @@ public class RedisCache
* @param key 缓存键值 * @param key 缓存键值
* @return 缓存键值对应的数据 * @return 缓存键值对应的数据
*/ */
public <T> T getCacheObject(final String key) public String getCacheObject(final String key)
{ {
ValueOperations<String, T> operation = redisTemplate.opsForValue(); return stringRedisTemplate.opsForValue().get(key);
return operation.get(key);
} }
/** /**
...@@ -191,7 +190,7 @@ public class RedisCache ...@@ -191,7 +190,7 @@ public class RedisCache
public <T> void setCacheMap(final String key, final Map<String, T> dataMap) public <T> void setCacheMap(final String key, final Map<String, T> dataMap)
{ {
if (dataMap != null) { if (dataMap != null) {
redisTemplate.opsForHash().putAll(key, dataMap); stringRedisTemplate.opsForHash().putAll(key, dataMap);
} }
} }
...@@ -201,9 +200,9 @@ public class RedisCache ...@@ -201,9 +200,9 @@ public class RedisCache
* @param key * @param key
* @return * @return
*/ */
public <T> Map<String, T> getCacheMap(final String key) public <T> Map<Object, Object> getCacheMap(final String key)
{ {
return redisTemplate.opsForHash().entries(key); return stringRedisTemplate.opsForHash().entries(key);
} }
/** /**
......
...@@ -124,14 +124,14 @@ public class MarketAnalysisService { ...@@ -124,14 +124,14 @@ public class MarketAnalysisService {
public AjaxResult combineRecentlyBid(JSONObject object) { public AjaxResult combineRecentlyBid(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/combine/recentlyBid", object); Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/combine/recentlyBid", object);
if (!ObjectUtils.isEmpty(map.get("data"))) { // if (!ObjectUtils.isEmpty(map.get("data"))) {
List<Map<String, Object>> list = (List<Map<String, Object>>) map.get("data"); // List<Map<String, Object>> list = (List<Map<String, Object>>) map.get("data");
list.parallelStream().forEach(res -> { // list.parallelStream().forEach(res -> {
Integer companyId = MapUtils.getInteger(res, "tendereeId"); // Integer companyId = MapUtils.getInteger(res, "tendereeId");
String companyName = MapUtils.getString(res, "tenderee"); // String companyName = MapUtils.getString(res, "tenderee");
res.put("uipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(companyName, companyId)); // res.put("uipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(companyName, companyId));
}); // });
} // }
return BeanUtil.toBean(map, AjaxResult.class); return BeanUtil.toBean(map, AjaxResult.class);
} }
......
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="16" height="16" viewBox="0 0 16 16"><defs><clipPath id="master_svg0_1474_151379/881_072671"><rect x="0" y="0" width="16" height="16" rx="0"/></clipPath></defs><g transform="matrix(1,5.551115123125783e-17,-5.551115123125783e-17,1,0,0)" clip-path="url(#master_svg0_1474_151379/881_072671)"><g><path d="M7.05513,7.999883125C7.05513,7.999883125,2.812500397363,3.757263125,2.812500397363,3.757263125C2.812500397363,3.757263125,3.75531,2.814453125,3.75531,2.814453125C3.75531,2.814453125,7.99793,7.057083125,7.99793,7.057083125C7.99793,7.057083125,12.2406,2.814453125,12.2406,2.814453125C12.2406,2.814453125,13.1834,3.757263125,13.1834,3.757263125C13.1834,3.757263125,8.94077,7.999883125,8.94077,7.999883125C8.94077,7.999883125,13.1834,12.242553125,13.1834,12.242553125C13.1834,12.242553125,12.2406,13.185353125,12.2406,13.185353125C12.2406,13.185353125,7.99793,8.942723125,7.99793,8.942723125C7.99793,8.942723125,3.75531,13.185353125,3.75531,13.185353125C3.75531,13.185353125,2.8125,12.242553125,2.8125,12.242553125C2.8125,12.242553125,7.05513,7.999883125,7.05513,7.999883125C7.05513,7.999883125,7.05513,7.999883125,7.05513,7.999883125Z" fill-rule="evenodd" fill="#232323" fill-opacity="0.4000000059604645"/></g></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="24" height="24" viewBox="0 0 24 24"><g transform="matrix(1,5.551115123125783e-17,-5.551115123125783e-17,1,0,0)"><g><path d="M2,12C2,6.47715,6.47715,2,12,2C17.5229,2,22,6.47715,22,12C22,17.5229,17.5229,22,12,22C6.47715,22,2,17.5229,2,12C2,12,2,12,2,12ZM13,9C13,9,13,7,13,7C13,7,11,7,11,7C11,7,11,9,11,9C11,9,13,9,13,9C13,9,13,9,13,9ZM11,10C11,10,11,17,11,17C11,17,13,17,13,17C13,17,13,10,13,10C13,10,11,10,11,10C11,10,11,10,11,10Z" fill-rule="evenodd" fill="#0081FF" fill-opacity="1"/></g></g></svg>
\ No newline at end of file
...@@ -54,8 +54,48 @@ function saveFixed(field, num=2){ ...@@ -54,8 +54,48 @@ function saveFixed(field, num=2){
return parseFloat(field.toFixed(num)) return parseFloat(field.toFixed(num))
} }
//移除字符串中指定标签
let removeTag = function(str, external, implant, row) { //str字符串, external外部引用方式的标签组[一个标签], implant嵌入引用的标签组[包含首尾标签], row行内标签组
let newHtml = str
if(external){
let externalArr = external.split(",")
for (let item of externalArr){
newHtml = newHtml.replace(new RegExp("<"+item+"([^>]+)>", "img"),"")
}
}
if(implant){
let implantArr = implant.split(",")
for (let item of implantArr){
newHtml = newHtml.replace(new RegExp("<"+item+"[^>]*>([\\S\\s]*?)<\/"+item+">", "img"),"")
}
}
if(row){
let rowArr = row.split(",")
for (let item of rowArr){
newHtml = newHtml.replace(new RegExp(""+item+"\\s*?=\\s*?(['`\"])[\\s\\S]*?\\1", "img"),"")
}
}
return newHtml
}
//替换字符串中指定标签
let checkTag = function(str, oldTag, newTag) { //str字符串, oldTag当前标签数组, newTag替换后的新标签数组
let newHtml = str
if(oldTag && newTag){
let oldArr = oldTag.split(",")
let newArr = newTag.split(",")
if(oldArr.length==newArr.length){
for (let i=0; i<oldArr.length; i++){
newHtml = newHtml.replace(new RegExp("<"+oldArr[i]+"\\b[^>]*>([\\S\\s]*?)<\\/"+oldArr[i]+">", "img"), "<"+newArr[i]+">$1</"+newArr[i]+">")
}
}
}
return newHtml
}
export { export {
encodeStr, encodeStr,
changePath, changePath,
saveFixed saveFixed,
removeTag,
checkTag
} }
...@@ -7,3 +7,12 @@ ...@@ -7,3 +7,12 @@
.search-leave-to { .search-leave-to {
width: 60px; width: 60px;
} }
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.3s;
}
.fade-enter,
.fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
opacity: 0;
}
@import './variables.scss'; @import "./variables.scss";
@import './mixin.scss'; @import "./mixin.scss";
@import './transition.scss'; @import "./transition.scss";
@import './element-ui.scss'; @import "./element-ui.scss";
@import './sidebar.scss'; @import "./sidebar.scss";
@import './btn.scss'; @import "./btn.scss";
body { body {
height: 100%; height: 100%;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility; text-rendering: optimizeLegibility;
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB,
Microsoft YaHei, Arial, sans-serif;
} }
label { label {
...@@ -104,7 +105,8 @@ aside { ...@@ -104,7 +105,8 @@ aside {
display: block; display: block;
line-height: 32px; line-height: 32px;
font-size: 16px; font-size: 16px;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen,
Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
color: #2c3e50; color: #2c3e50;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
...@@ -135,7 +137,7 @@ aside { ...@@ -135,7 +137,7 @@ aside {
} }
.text-center { .text-center {
text-align: center text-align: center;
} }
.sub-navbar { .sub-navbar {
...@@ -146,7 +148,13 @@ aside { ...@@ -146,7 +148,13 @@ aside {
text-align: right; text-align: right;
padding-right: 20px; padding-right: 20px;
transition: 600ms ease position; transition: 600ms ease position;
background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%); background: linear-gradient(
90deg,
rgba(32, 182, 249, 1) 0%,
rgba(32, 182, 249, 1) 0%,
rgba(33, 120, 241, 1) 100%,
rgba(33, 120, 241, 1) 100%
);
.subtitle { .subtitle {
font-size: 20px; font-size: 20px;
...@@ -189,84 +197,89 @@ aside { ...@@ -189,84 +197,89 @@ aside {
align-items: center; align-items: center;
} }
.a-link{ .a-link {
color: #0081FF; color: #0081ff;
&:hover{ &:hover {
color: #0081FF; color: #0081ff;
text-decoration: underline; text-decoration: underline;
} }
} }
.text-cl1{ .text-cl1 {
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
} }
.text-cl2{ .text-cl2 {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
display: -webkit-box; display: -webkit-box;
-webkit-line-clamp: 2; -webkit-line-clamp: 2;
line-clamp: 2; line-clamp: 2;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
} }
ul, li { ul,
li {
list-style: none; list-style: none;
padding: 0; padding: 0;
margin: 0; margin: 0;
} }
.app-main{ .app-main {
background-color: #f5f5f5; background-color: #f5f5f5;
>div{
width: calc(100% - 48px);
}
} }
.app-container { .app-container {
margin: 12px 24px; margin: 16px 24px;
background-color: #f5f5f5; background-color: #f5f5f5;
padding-bottom: 16px !important; box-sizing: border-box;
.el-input__inner{ .el-input__inner {
border-color: #D9D9D9; border-color: #d9d9d9;
color: #232323; color: #232323;
&::placeholder { &::placeholder {
color: rgba(35,35,35,0.4); color: rgba(35, 35, 35, 0.4);
} }
} }
.el-input__inner::placeholder{ .el-input__inner::placeholder {
color: rgba(35,35,35,0.8) !important; color: rgba(35, 35, 35, 0.8) !important;
} }
.el-select .el-input .el-select__caret{ .el-select .el-input .el-select__caret {
color: #232323; color: #232323;
} }
.el-cascader .el-input .el-icon-arrow-down{ .el-cascader .el-input .el-icon-arrow-down {
color: #232323; color: #232323;
} }
.custom-money-select .el-input .el-icon-arrow-down{ .custom-money-select .el-input .el-icon-arrow-down {
color: #232323; color: #232323;
font-size: 14px; font-size: 14px;
} }
.custom-time-select .el-input .el-icon-arrow-down{ .custom-time-select .el-input .el-icon-arrow-down {
color: #232323; color: #232323;
font-size: 14px; font-size: 14px;
} }
.query-box{ .query-box {
justify-content: space-between; justify-content: space-between;
} }
.query-params { .query-params {
.form-content-width { .form-content-width {
//width: 160px; //width: 160px;
} }
.el-form{ .el-form {
&.el-form--inline .el-form-item{ &.el-form--inline .el-form-item {
margin-right: 16px; margin-right: 16px;
} }
.el-form-item--mini.el-form-item, .el-form-item--small.el-form-item{ .el-form-item--mini.el-form-item,
.el-form-item--small.el-form-item {
margin-bottom: 8px; margin-bottom: 8px;
margin-top: 8px; margin-top: 8px;
} }
} }
} }
.query-ability{ .query-ability {
.total{ .total {
display: flex !important; display: flex !important;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
...@@ -279,19 +292,19 @@ ul, li { ...@@ -279,19 +292,19 @@ ul, li {
margin-right: 4px; margin-right: 4px;
} }
} }
span{ span {
font-size: 14px; font-size: 14px;
color: #232323; color: #232323;
line-height: initial; line-height: initial;
margin-left: 20px; margin-left: 20px;
cursor: pointer; cursor: pointer;
&:hover{ &:hover {
color: #0081FF; color: #0081ff;
} }
&:first-child{ &:first-child {
margin-left: 0; margin-left: 0;
} }
img{ img {
width: 18px; width: 18px;
height: 18px; height: 18px;
margin-right: 5px; margin-right: 5px;
...@@ -304,50 +317,52 @@ ul, li { ...@@ -304,50 +317,52 @@ ul, li {
padding: 16px; padding: 16px;
} }
.table-item{ .table-item {
width: 100%; width: 100%;
.el-table{ .el-table {
font-size: 13px; font-size: 13px;
color: #232323; color: #232323;
th{ th {
font-size: 13px !important; font-size: 13px !important;
font-weight: 400 !important; font-weight: 400 !important;
} }
td{ td {
font-size: 13px; font-size: 13px;
} }
.cell{ .cell {
padding-right: 12px !important; padding-right: 12px !important;
padding-left: 12px !important; padding-left: 12px !important;
line-height: 18px; line-height: 18px;
} }
thead{ thead {
color: rgba(35,35,35,0.7); color: rgba(35, 35, 35, 0.7);
} }
.sort-caret.ascending{ .sort-caret.ascending {
border-bottom-color: rgba(0,129,255,0.5); border-bottom-color: rgba(0, 129, 255, 0.5);
} }
.ascending .sort-caret.ascending{ .ascending .sort-caret.ascending {
border-bottom-color: #0081FF; border-bottom-color: #0081ff;
} }
.sort-caret.descending{ .sort-caret.descending {
border-top-color: rgba(0,129,255,0.5); border-top-color: rgba(0, 129, 255, 0.5);
} }
.descending .sort-caret.descending{ .descending .sort-caret.descending {
border-top-color: #0081FF; border-top-color: #0081ff;
} }
.el-table__header-wrapper{ .el-table__header-wrapper {
th{ th {
background: #F0F3FA; background: #f0f3fa;
// text-align: left; // text-align: left;
} }
} }
.el-table__fixed-header-wrapper{ .el-table__fixed-header-wrapper {
th{ th {
background: #F0F3FA; background: #f0f3fa;
} }
} }
.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; //-webkit-box-shadow: 2px 0px 1px -2px #C3CBD5;
box-shadow: 2px 0 8px -7px #202020; box-shadow: 2px 0 8px -7px #202020;
...@@ -355,57 +370,57 @@ ul, li { ...@@ -355,57 +370,57 @@ ul, li {
height: auto !important; height: auto !important;
bottom: 16px !important; bottom: 16px !important;
} }
.el-table__body tr.current-row > td.el-table__cell{ .el-table__body tr.current-row > td.el-table__cell {
background: none; background: none;
} }
.caret-wrapper{ .caret-wrapper {
width: 10px; width: 10px;
} }
.el-table__body-wrapper{ .el-table__body-wrapper {
&::-webkit-scrollbar { &::-webkit-scrollbar {
width: 16px; //竖轴宽度 width: 16px; //竖轴宽度
height: 16px; //横轴宽度 height: 16px; //横轴宽度
} }
&::-webkit-scrollbar-track { &::-webkit-scrollbar-track {
background-color: #F3F4F5; background-color: #f3f4f5;
border-radius: 0; border-radius: 0;
} }
&::-webkit-scrollbar-thumb { &::-webkit-scrollbar-thumb {
background-color: rgba(98,110,126,0.2); background-color: rgba(98, 110, 126, 0.2);
border: 4px solid #F3F4F5; border: 4px solid #f3f4f5;
border-radius: 10px; border-radius: 10px;
} }
&::-webkit-scrollbar-corner { &::-webkit-scrollbar-corner {
background: #F3F4F5; background: #f3f4f5;
/*border-left: 1px solid #E0EAF2;*/ /*border-left: 1px solid #E0EAF2;*/
} }
tr{ tr {
&.current-row>td{ &.current-row > td {
background-color: initial; background-color: initial;
} }
&:nth-child(2n) { &:nth-child(2n) {
background: #F8FBFF; background: #f8fbff;
} }
} }
tr:hover > td.el-table__cell{ tr:hover > td.el-table__cell {
background: #DCEBFF; background: #dcebff;
} }
} }
.el-table__body tr.hover-row > td.el-table__cell{ .el-table__body tr.hover-row > td.el-table__cell {
background: #DCEBFF; background: #dcebff;
} }
.el-table__fixed{ .el-table__fixed {
//bottom:0 !important; //bottom:0 !important;
.el-table__body{ .el-table__body {
padding-bottom:16px; padding-bottom: 16px;
} }
tr:nth-child(2n){ tr:nth-child(2n) {
background-color: #F8FBFF; background-color: #f8fbff;
} }
} }
::-webkit-scrollbar-track-piece { ::-webkit-scrollbar-track-piece {
//滚动条凹槽的颜色,还可以设置边框属性 //滚动条凹槽的颜色,还可以设置边框属性
background-color: #F3F4F5; background-color: #f3f4f5;
height: 16px; height: 16px;
padding: 0 4px; padding: 0 4px;
} }
...@@ -413,7 +428,7 @@ ul, li { ...@@ -413,7 +428,7 @@ ul, li {
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 8px; width: 8px;
height: 16px; height: 16px;
background-color: #F3F4F5; background-color: #f3f4f5;
border-radius: 6px; border-radius: 6px;
} }
//滚动条的滑块 //滚动条的滑块
...@@ -421,31 +436,30 @@ ul, li { ...@@ -421,31 +436,30 @@ ul, li {
border-radius: 8px; border-radius: 8px;
height: 8px; height: 8px;
margin: 0 4px; margin: 0 4px;
background: rgba(98,110,126,0.2); background: rgba(98, 110, 126, 0.2);
border: 4px solid #F3F4F5; border: 4px solid #f3f4f5;
&:hover{ &:hover {
background: #566380; background: #566380;
} }
} }
.el-scrollbar{ .el-scrollbar {
height: 16px; height: 16px;
.el-scrollbar__bar.is-horizontal{ .el-scrollbar__bar.is-horizontal {
height: 8px; height: 8px;
} }
.el-scrollbar__thumb{ .el-scrollbar__thumb {
background: rgba(98,110,126,0.4); background: rgba(98, 110, 126, 0.4);
&:hover{ &:hover {
background: #566380; background: #566380;
} }
} }
} }
} }
} }
.el-table__body tr.hover-row > td.el-table__cell{ .el-table__body tr.hover-row > td.el-table__cell {
background-color: #DCEBFF; background-color: #dcebff;
} }
.common-title{ .common-title {
border-left: 2px solid #445781; border-left: 2px solid #445781;
padding-left: 8px; padding-left: 8px;
font-size: 16px; font-size: 16px;
...@@ -455,54 +469,55 @@ ul, li { ...@@ -455,54 +469,55 @@ ul, li {
color: #232323; color: #232323;
} }
.pagination-box{ .pagination-box {
text-align: right; text-align: right;
padding: 16px 0; padding: 16px 0;
.el-pagination{ .el-pagination {
font-weight: normal; font-weight: normal;
padding: 0; padding: 0;
button, span:not([class*=suffix]){ button,
span:not([class*="suffix"]) {
height: 24px; height: 24px;
line-height: 24px; line-height: 24px;
} }
&.is-background .btn-next, &.is-background .btn-next,
&.is-background .btn-prev, &.is-background .btn-prev,
&.is-background .el-pager li{ &.is-background .el-pager li {
height: 24px; height: 24px;
line-height: 24px; line-height: 24px;
min-width: 24px; min-width: 24px;
padding: 0 6px; padding: 0 6px;
margin: 0 4px; margin: 0 4px;
font-size: 12px; font-size: 12px;
color: rgba(35,35,35,0.7); color: rgba(35, 35, 35, 0.7);
background-color: #F3F4F5; background-color: #f3f4f5;
} }
&.is-background .el-pager li:not(.disabled):hover{ &.is-background .el-pager li:not(.disabled):hover {
background-color: rgba(0,129,255,0.3); background-color: rgba(0, 129, 255, 0.3);
color: #FFFFFF; color: #ffffff;
} }
&.is-background{ &.is-background {
.el-pager{ .el-pager {
li:not(.disabled){ li:not(.disabled) {
&.active{ &.active {
background-color: $systemColor; background-color: $systemColor;
color: #FFFFFF; color: #ffffff;
} }
} }
} }
.el-pagination__jump{ .el-pagination__jump {
margin-left: 8px; margin-left: 8px;
color: #3D3D3D; color: #3d3d3d;
.el-input{ .el-input {
font-size: 12px; font-size: 12px;
} }
.el-pagination__editor{ .el-pagination__editor {
height: 24px; height: 24px;
margin: 0 8px; margin: 0 8px;
} }
.el-pagination__editor.el-input .el-input__inner{ .el-pagination__editor.el-input .el-input__inner {
height: 24px; height: 24px;
border-color: #CDD1D9; border-color: #cdd1d9;
border-radius: 2px; border-radius: 2px;
} }
} }
...@@ -510,29 +525,29 @@ ul, li { ...@@ -510,29 +525,29 @@ ul, li {
} }
} }
.el-drawer{ .el-drawer {
.el-drawer__header{ .el-drawer__header {
padding: 16px 2px 16px 16px; padding: 16px 2px 16px 16px;
margin-bottom: 0; margin-bottom: 0;
border-bottom: 1px solid #E1E1E1; border-bottom: 1px solid #e1e1e1;
} }
.el-drawer__body{ .el-drawer__body {
overflow-y: auto; overflow-y: auto;
&::-webkit-scrollbar { &::-webkit-scrollbar {
width: 16px; //竖轴宽度 width: 16px; //竖轴宽度
height: 16px; //横轴宽度 height: 16px; //横轴宽度
} }
&::-webkit-scrollbar-track { &::-webkit-scrollbar-track {
background-color: #F3F4F5; background-color: #f3f4f5;
border-radius: 0; border-radius: 0;
} }
&::-webkit-scrollbar-thumb { &::-webkit-scrollbar-thumb {
background-color: rgba(98,110,126,0.2); background-color: rgba(98, 110, 126, 0.2);
border: 4px solid #F3F4F5; border: 4px solid #f3f4f5;
border-radius: 10px; border-radius: 10px;
} }
&::-webkit-scrollbar-corner { &::-webkit-scrollbar-corner {
background: #F3F4F5; background: #f3f4f5;
/*border-left: 1px solid #E0EAF2;*/ /*border-left: 1px solid #E0EAF2;*/
} }
} }
...@@ -541,49 +556,49 @@ ul, li { ...@@ -541,49 +556,49 @@ ul, li {
//组件公用样式 //组件公用样式
// //
// 无边框、阴影card // 无边框、阴影card
.el-card.noborder{ .el-card.noborder {
border: 0; border: 0;
box-shadow: none; box-shadow: none;
//margin-bottom: 12px; //margin-bottom: 12px;
color: #232323; color: #232323;
.el-card__body{ .el-card__body {
padding: 0; padding: 0;
} }
} }
//el-tabs //el-tabs
.tabpane{ .tabpane {
&.w100{ &.w100 {
.el-tabs__nav-scroll{ .el-tabs__nav-scroll {
padding-left: 16px; padding-left: 16px;
} }
.el-tabs__content{ .el-tabs__content {
padding: 16px; padding: 16px;
} }
} }
.el-tabs__header{ .el-tabs__header {
margin: 0; margin: 0;
} }
.el-tabs__nav-wrap::after{ .el-tabs__nav-wrap::after {
background-color: #EFEFEF; background-color: #efefef;
height: 1px; height: 1px;
} }
.el-tabs__item{ .el-tabs__item {
font-size: 16px; font-size: 16px;
color: #232323; color: #232323;
line-height: 50px; line-height: 50px;
height: 50px; height: 50px;
} }
.is-active{ .is-active {
color: #0081FF; color: #0081ff;
font-weight: bold; font-weight: bold;
} }
} }
.el-tabs__item.is-disabled { .el-tabs__item.is-disabled {
color: #C0C4CC; color: #c0c4cc;
cursor: not-allowed; cursor: not-allowed;
} }
//按钮 //按钮
.btn{ .btn {
margin-left: 8px; margin-left: 8px;
border-radius: 4px; border-radius: 4px;
display: inline-block; display: inline-block;
...@@ -598,17 +613,17 @@ ul, li { ...@@ -598,17 +613,17 @@ ul, li {
height: 32px; height: 32px;
padding: 0 16px; padding: 0 16px;
} }
&.h34{ &.h34 {
width: 80px; width: 80px;
height: 34px; height: 34px;
} }
.img{ .img {
height: 100%; height: 100%;
float: left; float: left;
width: 16px; width: 16px;
} }
} }
.btnsmall{ .btnsmall {
display: inline-block; display: inline-block;
font-size: 12px; font-size: 12px;
border-radius: 2px; border-radius: 2px;
...@@ -617,101 +632,101 @@ ul, li { ...@@ -617,101 +632,101 @@ ul, li {
margin: 0 4px; margin: 0 4px;
cursor: pointer; cursor: pointer;
} }
.btn_default{ .btn_default {
border: 1px solid #0081FF; border: 1px solid #0081ff;
color: #0081FF; color: #0081ff;
background: #FFFFFF; background: #ffffff;
&.h28{ &.h28 {
line-height: 26px; line-height: 26px;
} }
&.h32 { &.h32 {
line-height: 30px; line-height: 30px;
} }
&.h34{ &.h34 {
line-height: 32px; line-height: 32px;
} }
&:hover{ &:hover {
color: #006AD1; color: #006ad1;
border-color: #006AD1; border-color: #006ad1;
} }
} }
.btn_primary{ .btn_primary {
background-color: #0081FF; background-color: #0081ff;
color: #fff; color: #fff;
&.btn_disabled{ &.btn_disabled {
background: #D3D3D3; background: #d3d3d3;
cursor: auto; cursor: auto;
&:hover{ &:hover {
background: #D3D3D3; background: #d3d3d3;
} }
} }
&.btn_shallow{ &.btn_shallow {
color: #0081FF; color: #0081ff;
background: rgba(0, 129, 255, 0.16); background: rgba(0, 129, 255, 0.16);
&:hover{ &:hover {
background: #0081FF; background: #0081ff;
color: #fff; color: #fff;
} }
} }
&.h28{ &.h28 {
line-height: 28px; line-height: 28px;
} }
&.h32{ &.h32 {
line-height: 32px; line-height: 32px;
} }
&.h34{ &.h34 {
line-height: 34px; line-height: 34px;
} }
&.h36{ &.h36 {
line-height: 36px; line-height: 36px;
} }
&:hover{ &:hover {
background-color: #006AD1; background-color: #006ad1;
} }
} }
.btn_cancel{ .btn_cancel {
border: 1px solid #CCCCCC; border: 1px solid #cccccc;
color: #4f4f4f; color: #4f4f4f;
&.h28{ &.h28 {
line-height: 26px; line-height: 26px;
} }
&.h32 { &.h32 {
line-height: 30px; line-height: 30px;
} }
&.h34{ &.h34 {
line-height: 32px; line-height: 32px;
} }
&:hover{ &:hover {
color: #4f4f4f; color: #4f4f4f;
border-color: #CCCCCC; border-color: #cccccc;
background-color: #F4F4F4; background-color: #f4f4f4;
} }
} }
//搜索框 //搜索框
.searchInput{ .searchInput {
width: 590px; width: 590px;
height: 32px; height: 32px;
border-radius: 2px 0px 0px 2px; border-radius: 2px 0px 0px 2px;
opacity: 1; opacity: 1;
border: 1px solid #EFEFEF; border: 1px solid #efefef;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
.el-input{ .el-input {
margin-top: -1px; margin-top: -1px;
//line-height: 32px; //line-height: 32px;
.el-input__inner{ .el-input__inner {
line-height: 32px; line-height: 32px;
height: 32px; height: 32px;
border: 0; border: 0;
} }
.el-input__suffix{ .el-input__suffix {
margin-top: -1px; margin-top: -1px;
} }
} }
.btn{ .btn {
background: #F5F5F5; background: #f5f5f5;
color: #0081FF; color: #0081ff;
cursor: pointer; cursor: pointer;
width: 60px; width: 60px;
line-height: 32px; line-height: 32px;
...@@ -721,72 +736,72 @@ ul, li { ...@@ -721,72 +736,72 @@ ul, li {
right: 0; right: 0;
top: 0; top: 0;
border-radius: 0; border-radius: 0;
&:hover{ &:hover {
color: #FFFFFF; color: #ffffff;
background: #0081FF; background: #0081ff;
} }
} }
} }
//无边框搜索框 //无边框搜索框
.newSearch{ .newSearch {
width: 238px; width: 238px;
height: 32px; height: 32px;
border-radius: 4px; border-radius: 4px;
.el_input{ .el_input {
height: 32px !important; height: 32px !important;
} }
.el-input__prefix{ .el-input__prefix {
left: 12px; left: 12px;
.el-input__icon{ .el-input__icon {
img{ img {
float: left; float: left;
margin-top: 7px; margin-top: 7px;
} }
} }
} }
.el-input__inner{ .el-input__inner {
padding-left: 36px; padding-left: 36px;
border-color: #fff !important; border-color: #fff !important;
height: 32px !important; height: 32px !important;
} }
} }
//导出EXCEL //导出EXCEL
.btn-export{ .btn-export {
display: inline-block; display: inline-block;
color: #232323; color: #232323;
font-size: 14px; font-size: 14px;
height: 24px; height: 24px;
line-height: 24px; line-height: 24px;
cursor: pointer; cursor: pointer;
img{ img {
margin-right: 5px; margin-right: 5px;
float: left; float: left;
width: 18px; width: 18px;
height: 18px; height: 18px;
margin-top: 2px; margin-top: 2px;
} }
&:hover{ &:hover {
color: #0081FF; color: #0081ff;
} }
} }
//有链接字体颜色 //有链接字体颜色
.wordprimary{ .wordprimary {
color: #0081FF; color: #0081ff;
cursor: pointer; cursor: pointer;
} }
//分割线 //分割线
.el-divider--horizontal{ .el-divider--horizontal {
margin: 0; margin: 0;
} }
.el-divider{ .el-divider {
background-color: #efefef; background-color: #efefef;
} }
.flex{ .flex {
display: flex; display: flex;
} }
//消息提示框 //消息提示框
.el-message{ .el-message {
border-radius: 0; border-radius: 0;
padding: 10px; padding: 10px;
} }
...@@ -807,9 +822,8 @@ ul, li { ...@@ -807,9 +822,8 @@ ul, li {
padding: 0 16px; padding: 0 16px;
} }
} }
} }
.min1370{ .min1370 {
min-width: 1370px; min-width: 1370px;
} }
.el-card{ .el-card{
overflow: initial; overflow: initial;
} }
.app-container{
padding: 0;
}
//小导航 //小导航
.miantitle{ .miantitle{
color: #232323; color: #232323;
font-size: 12px; font-size: 12px;
margin: 12px 24px; margin: 12px 0;
>span{ >span{
opacity: 0.4; opacity: 0.4;
&:last-child{opacity:0.8} &:last-child{opacity:0.8}
......
...@@ -1222,8 +1222,7 @@ select { ...@@ -1222,8 +1222,7 @@ select {
color: #232323; color: #232323;
} }
.enterprise_contatiner{ .enterprise_contatiner{
padding: 0;
padding-bottom: 16px;
} }
.el-input-group__append{ .el-input-group__append{
cursor: pointer; cursor: pointer;
......
::v-deep .head-form-new { ::v-deep .head-form-new {
margin-bottom: 8px; padding-bottom: 8px;
.query-box { .query-box {
.from-item { .from-item {
display: flex; display: flex;
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
} }
} }
.el-cascader__tags { .el-cascader__tags,.el-select__tags {
.el-tag { .el-tag {
max-width: unset !important; max-width: unset !important;
} }
......
...@@ -33,6 +33,7 @@ export default { ...@@ -33,6 +33,7 @@ export default {
width: 100%; width: 100%;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
display: flex;
} }
.fixed-header + .app-main { .fixed-header + .app-main {
...@@ -42,7 +43,7 @@ export default { ...@@ -42,7 +43,7 @@ export default {
.hasTagsView { .hasTagsView {
.app-main { .app-main {
/* 84 = navbar + tags-view = 50 + 34 */ /* 84 = navbar + tags-view = 50 + 34 */
min-height: calc(100vh - 68px); min-height: calc(100vh - 56px);
min-width:1240px; min-width:1240px;
background: #F5F5F5; background: #F5F5F5;
overflow: initial; overflow: initial;
......
...@@ -70,7 +70,7 @@ export const constantRoutes = [ ...@@ -70,7 +70,7 @@ export const constantRoutes = [
path: 'index', path: 'index',
component: () => import('@/views/index'), component: () => import('@/views/index'),
name: 'Index', name: 'Index',
meta: { title: '首页', icon: 'index',noCache: false } meta: { title: '首页', icon: 'index'}
} }
] ]
}, },
...@@ -159,6 +159,7 @@ export const constantRoutes = [ ...@@ -159,6 +159,7 @@ export const constantRoutes = [
} }
] ]
}, },
//企业详情
{ {
path: '/company', path: '/company',
component: Layout, component: Layout,
...@@ -167,12 +168,13 @@ export const constantRoutes = [ ...@@ -167,12 +168,13 @@ export const constantRoutes = [
children: [ children: [
{ {
path: '/company/:id', path: '/company/:id',
component: () => import('@/views/detail/party-b/index'), component: () => import('@/views/detail'),
name: 'Company', name: 'Company',
meta: { title: '企业详情' } meta: { title: '企业详情' }
} }
] ]
}, },
//人员详情
{ {
path: '/personnel', path: '/personnel',
component: Layout, component: Layout,
...@@ -180,13 +182,40 @@ export const constantRoutes = [ ...@@ -180,13 +182,40 @@ export const constantRoutes = [
redirect: 'noredirect', redirect: 'noredirect',
children: [ children: [
{ {
path: '/personnel/:id', path: '/personnel/:id.html',
component: () => import('@/views/detail/party-b/index'), component: () => import('@/views/detail'),
name: 'Personnel', name: 'Personnel',
meta: { title: '人员详情' } meta: { title: '人员详情' }
} }
] ]
}, },
//公招市场详情
{
path: '/gzsc',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/gzsc/:id',
component: () => import('@/views/detail'),
name: 'detail-gzsc',
}
]
},
//中标业绩详情
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/performance/zb/:id.html',
component: () => import('@/views/detail'),
}
]
},
{ {
path: '/structure', path: '/structure',
component: Layout, component: Layout,
...@@ -348,8 +377,6 @@ export const constantRoutes = [ ...@@ -348,8 +377,6 @@ export const constantRoutes = [
] ]
}, },
] ]
// 动态路由,基于用户权限动态去加载 // 动态路由,基于用户权限动态去加载
......
...@@ -402,14 +402,14 @@ export function isNumberStr(str) { ...@@ -402,14 +402,14 @@ export function isNumberStr(str) {
} }
// 甲方详情左侧菜单映射 // 甲方详情左侧菜单映射
// export const detailSideBar = new Map({ export const detailSideBar = new Map([
// // 企业速览 // 企业速览
// holderinfo: "ownershipStructure", ["holderinfo", "ownershipStructure"],
// // 高管信息 // 高管信息
// execuinfo: "leadingMember", ["execuinfo", "leadingMember"],
// // 对外投资 // 对外投资
// overseas: "outboundInvestment", ["overseas", "outboundInvestment"],
// // 分支机构 // 分支机构
// branch: "branch", ["branch", "branch"],
// }) ])
...@@ -25,7 +25,7 @@ service.interceptors.request.use(config => { ...@@ -25,7 +25,7 @@ service.interceptors.request.use(config => {
// 是否需要设置 token // 是否需要设置 token
const isToken = (config.headers || {}).isToken === false const isToken = (config.headers || {}).isToken === false
// 是否需要防止数据重复提交 // 是否需要防止数据重复提交
const isRepeatSubmit = (config.headers || {}).repeatSubmit === false const isRepeatSubmit = (config.headers || {}).repeatSubmit === false||config.url.indexOf('getUipIdByCid')!=-1
if (getToken() && !isToken) { if (getToken() && !isToken) {
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
config.headers['tenantid'] = getTenantid() //携带租户id config.headers['tenantid'] = getTenantid() //携带租户id
......
<template> <template>
<div :ref="refStr" class="custom-money-select screen-popper" id="custom-money-select"> <div :ref="refStr" class="custom-money-select1 screen-popper" id="custom-money-select">
<div :class="['input-block', isSelectOption?'rote':'']"> <div :class="['input-block', isSelectOption?'rote':'']">
<div class="block" @click="isSelectOption=!isSelectOption" @mouseenter="handleMouseenter" @mouseleave="handleMouseleave"> <div class="block" @click="isSelectOption=!isSelectOption" @mouseenter="handleMouseenter" @mouseleave="handleMouseleave">
<el-input class="custom-money-input" v-model="value" :placeholder="placeholder" readonly> <el-input class="custom-money-input" v-model="value" :placeholder="placeholder" readonly>
...@@ -238,8 +238,8 @@ export default { ...@@ -238,8 +238,8 @@ export default {
</script> </script>
<style lang="scss"> <style lang="scss">
.custom-money-select { .custom-money-select1 {
width: 120px; width: 106px;
height: 34px; height: 34px;
position: relative; position: relative;
.rote { .rote {
......
<template> <template>
<div :ref="refStr" class="custom-time-select screen-popper" id="custom-time-select"> <div :ref="refStr" class="custom-time-select1 screen-popper" id="custom-time-select">
<div :class="['input-block', isSelectOption?'rote':'']"> <div :class="['input-block', isSelectOption?'rote':'']">
<div class="block" @click="isSelectOption=!isSelectOption" @mouseenter="handleMouseenter" @mouseleave="handleMouseleave"> <div class="block" @click="isSelectOption=!isSelectOption" @mouseenter="handleMouseenter" @mouseleave="handleMouseleave">
<el-input class="custom-time-input" v-model="value" :placeholder="placeholder" readonly> <el-input class="custom-time-input" v-model="value" :placeholder="placeholder" readonly>
...@@ -244,8 +244,8 @@ export default { ...@@ -244,8 +244,8 @@ export default {
</script> </script>
<style lang="scss"> <style lang="scss">
.custom-time-select { .custom-time-select1 {
width: 120px; width: 90px !important;
height: 34px; height: 34px;
.rote { .rote {
......
<template>
<div class="max-page-size-tip" @click.stop="$emit('closeMaxTip')">
<div class="max-page-tip-container" @click.stop="''">
<div class="max-page-tip-inner">
<div class="top-title-container">
<img src="@/assets/images/market/max-tip-title-icon.svg" alt="" class="max-tip-icon">
<span class="tip-title">数据查询已达到上限</span>
<img src="@/assets/images/market/close-max-tip-icon.svg" alt="" class="max-tip-close-icon" @click.stop="$emit('closeMaxTip')">
</div>
<div class="max-page-tip-content">
<div class="max-page-content-inner">
您可通过筛选工具来查询数据~若有更多需求请联系客服 0262798729!
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "",
data() {
return {
};
},
//可访问data属性
created() {
},
//计算集
computed: {
},
//方法集
methods: {
},
}
</script>
<style lang="scss" scoped>
.max-page-size-tip {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.6);
z-index: 1200;
.max-page-tip-container {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: 340px;
height: 112px;
background: #ffffff;
border: 1px solid #e5e6eb;
box-shadow: 0px 4px 10px 0px rgba(0, 0, 0, 0.1);
border-radius: 4px;
padding: 20px;
box-sizing: border-box;
.top-title-container {
display: flex;
align-items: center;
.max-tip-icon {
width: 24px;
height: 24px;
}
.tip-title {
color: #1d2129;
font-size: 16px;
line-height: 24px;
font-weight: 400;
margin-left: 16px;
margin-right: 16px;
width: 228px;
}
.max-tip-close-icon {
width: 16px;
height: 16px;
align-self: flex-start;
cursor: pointer;
}
}
.max-page-tip-content {
margin-top: 4px;
padding-left: 40px;
padding-right: 32px;
box-sizing: border-box;
.max-page-content-inner {
color: #1d2129;
font-size: 14px;
line-height: 22px;
}
}
}
}
</style>
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
<el-input type="text" placeholder="请输入" v-model="queryParam.creditCode"></el-input> <el-input type="text" placeholder="请输入" v-model="queryParam.creditCode"></el-input>
</el-form-item> </el-form-item>
<div class="popbot"> <div class="popbot">
<div class="wordprimary" @click="toct">前往城投平台寻找客户线索></div> <div class="wordprimary" style="display: inline-block" @click="toct">前往城投平台寻找客户线索></div>
<div class="btn btn_cancel h32" @click="resetForm('ruleForm')">返回</div> <div class="btn btn_cancel h32" @click="resetForm('ruleForm')">返回</div>
<div class="btn btn_primary h32" @click="submitForm('ruleForm')">添加</div> <div class="btn btn_primary h32" @click="submitForm('ruleForm')">添加</div>
</div> </div>
...@@ -84,8 +84,6 @@ ...@@ -84,8 +84,6 @@
created() { created() {
this.prvinceTree() this.prvinceTree()
this.getDictType() this.getDictType()
console.log(this.dialogVisible)
console.log('1111111111')
}, },
computed: {}, computed: {},
methods:{ methods:{
...@@ -116,7 +114,7 @@ ...@@ -116,7 +114,7 @@
cityId:'', cityId:'',
districtId:'', districtId:'',
}, },
this.dialogVisible = false this.$emit("handleCancel",false)
this.showlist = false this.showlist = false
}, },
getAddr(obj){ getAddr(obj){
...@@ -223,7 +221,7 @@ ...@@ -223,7 +221,7 @@
addCustomer(this.queryParam).then(result=>{ addCustomer(this.queryParam).then(result=>{
if(result.code == 200){ if(result.code == 200){
this.$message.success('添加成功!') this.$message.success('添加成功!')
this.dialogVisible = false this.$emit("handleCancel",false)
this.resetForm('ruleForm') this.resetForm('ruleForm')
}else{ }else{
this.$message.error(result.msg) this.$message.error(result.msg)
...@@ -234,7 +232,7 @@ ...@@ -234,7 +232,7 @@
}); });
}, },
toct(){ toct(){
this.dialogVisible = false this.$emit("handleCancel",false)
this.$router.push({path:'/macro/urban'}) this.$router.push({path:'/macro/urban'})
}, },
//输入数字 //输入数字
......
<template> <template>
<div @click = 'handleALL'> <div @click = 'handleALL' class="app-container">
<div class="miantitle"> <div class="miantitle">
<span>客户管理</span> <span>客户管理</span>
<span> / 客户列表</span> <span> / 客户列表</span>
</div> </div>
<div class="app-container"> <div>
<el-card class="box-card noborder min1370"> <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">
...@@ -845,24 +845,27 @@ ...@@ -845,24 +845,27 @@
padding-top: 16px; padding-top: 16px;
width: 100%; width: 100%;
height: 100%; height: 100%;
::v-deep .el-form{ .table_search{
.el-input{ ::v-deep .el-form{
line-height: 32px; .el-input{
.el-input__inner{
height: 32px;
line-height: 32px; line-height: 32px;
border-radius: 4px; .el-input__inner{
border: 0; height: 32px;
line-height: 32px;
border-radius: 4px;
border: 0;
}
} }
} .is-focus{
.is-focus{ .el-input__inner{
.el-input__inner{ background: #F4F6F9;
background: #F4F6F9; }
} }
}
}
} }
} }
.box{ .box{
position: relative; position: relative;
......
<template> <template>
<div @click = 'handleALL'> <div class="app-container" @click = 'handleALL'>
<div class="app-container"> <el-card class="box-card noborder">
<el-card class="box-card noborder"> <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"> <div class="p1">抱歉,没找到相关数据</div>
<div class="p1">抱歉,没找到相关数据</div> <div class="p2">建议调整关键词或筛选条件,重新搜索</div>
<div class="p2">建议调整关键词或筛选条件,重新搜索</div> </div>
<div class="table_search">
<div class="newSearch">
<el-input type="text" v-model="searchParam.companyName" clearable placeholder="输入企业名称查询" @change="clearname" >
<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="table_search"> <div class="dc">
<div class="newSearch"> <div class="total">{{tableData.total}}</div>
<el-input type="text" v-model="searchParam.companyName" clearable placeholder="输入企业名称查询" @change="clearname" >
<i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/sousuo.png" width="16px" @click="handleCurrentChange(1)"></i>
</el-input>
</div>
<div class="dc">
<div class="total">{{tableData.total}}</div>
</div>
</div> </div>
<skeleton v-if="isSkeleton"></skeleton> </div>
<el-table v-if="!isSkeleton&&tableData.total > 0" class="fixed-table" v-horizontal-scroll="tableData.total > 10 ? 'hover' : 'false'" max-height="640" <skeleton v-if="isSkeleton"></skeleton>
:data="tableData.rows" <el-table v-if="!isSkeleton&&tableData.total > 0" class="fixed-table" v-horizontal-scroll="tableData.total > 10 ? 'hover' : 'false'" max-height="640"
stripe border :data="tableData.rows"
style="width: 100%"> stripe border
<el-table-column style="width: 100%">
prop="index" <el-table-column
label="序号" prop="index"
fixed="left" label="序号"
width="60"> fixed="left"
<template slot-scope='scope'> width="60">
<span>{{ (searchParam.pageNum - 1) * searchParam.pageSize + scope.$index + 1 }}</span> <template slot-scope='scope'>
</template> <span>{{ (searchParam.pageNum - 1) * searchParam.pageSize + scope.$index + 1 }}</span>
</el-table-column> </template>
<el-table-column </el-table-column>
prop="date" <el-table-column
label="企业名称" prop="date"
fixed="left" label="企业名称"
width="316"> fixed="left"
width="316">
<template slot-scope="scope"> <template slot-scope="scope">
<div class="ps1"> <div class="ps1">
<div class="wordprimary ps2" @click="toDetail(scope.row,'business')" v-html="scope.row.companyName"></div> <div class="wordprimary ps2" @click="toDetail(scope.row,'business')" v-html="scope.row.companyName"></div>
...@@ -48,159 +47,158 @@ ...@@ -48,159 +47,158 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="cooperationProject" prop="cooperationProject"
label="合作项目" label="合作项目"
width="90"> width="90">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.cooperationProject || '--'}} {{scope.row.cooperationProject || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="followProject" prop="followProject"
label="跟进项目" label="跟进项目"
width="90"> width="90">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.followProject || '--'}} {{scope.row.followProject || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="reserveProject" prop="reserveProject"
label="储备项目" label="储备项目"
width="90"> width="90">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.reserveProject || '--'}} {{scope.row.reserveProject || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="legalPerson" prop="legalPerson"
label="法定代表人" label="法定代表人"
width="110"> width="110">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.legalPerson || '--'}} {{scope.row.legalPerson || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="registerAddress" prop="registerAddress"
label="注册地区" label="注册地区"
width="160"> width="160">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.registerAddress || '--'}} {{scope.row.registerAddress || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="registerCapitalStr" prop="registerCapitalStr"
label="注册资本金(万元)" label="注册资本金(万元)"
width="160"> width="160">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.registerCapital && scope.row.registerCapital>0">{{scope.row.registerCapital}}</span><span v-else>--</span> <span v-if="scope.row.registerCapital && scope.row.registerCapital>0">{{scope.row.registerCapital}}</span><span v-else>--</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="creditLevel" prop="creditLevel"
label="企业主体评级" width="100"> label="企业主体评级" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.creditLevel || '--'}} {{scope.row.creditLevel || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="isOn" prop="isOn"
label="上市公司" width="76"> label="上市公司" width="76">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.isOn == 1?"是":"否"}} {{scope.row.isOn == 1?"是":"否"}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="isMajor" prop="isMajor"
label="局级大客户" width="88"> label="局级大客户" width="88">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.isMajor != null"> <span v-if="scope.row.isMajor != null">
{{scope.row.isMajor == 1?"是":"否"}} {{scope.row.isMajor == 1?"是":"否"}}
</span> </span>
<span v-else>--</span> <span v-else>--</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="customerLevel" prop="customerLevel"
label="客户等级" width="76"> label="客户等级" width="76">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.customerLevel || '--'}} {{scope.row.customerLevel || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="companyNature" prop="companyNature"
label="客户性质" width="76"> label="客户性质" width="76">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.companyNature || '--'}} {{scope.row.companyNature || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="companyLevel" prop="companyLevel"
label="客户级别" width="76"> label="客户级别" width="76">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.companyLevel || '--'}} {{scope.row.companyLevel || '--'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="address" prop="address"
label="企业母公司" width="268"> label="企业母公司" width="268">
<template slot-scope="scope"> <template slot-scope="scope">
<div class="">{{scope.row.superCompany || '--'}}</div> <div class="">{{scope.row.superCompany || '--'}}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :key="keys" <el-table-column :key="keys"
prop="mainBusiness" prop="mainBusiness"
label="主营业务" width="400"> label="主营业务" width="400">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.mainBusiness == null || scope.row.mainBusiness == ''">--</div> <div v-if="scope.row.mainBusiness == null || scope.row.mainBusiness == ''">--</div>
<div v-if="scope.row.mainBusiness1"> <div v-if="scope.row.mainBusiness1">
<div class="box" v-if="scope.row.sq1==true">{{scope.row.mainBusiness1}}...<span @click="sq1(scope.row,false)">更多</span></div> <div class="box" v-if="scope.row.sq1==true">{{scope.row.mainBusiness1}}...<span @click="sq1(scope.row,false)">更多</span></div>
<div class="box" v-else>{{scope.row.mainBusiness}}<span @click="sq1(scope.row,true)">收起</span></div> <div class="box" v-else>{{scope.row.mainBusiness}}<span @click="sq1(scope.row,true)">收起</span></div>
</div> </div>
<div v-else>{{scope.row.mainBusiness}}</div> <div v-else>{{scope.row.mainBusiness}}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="companyAttribute" :key="keys+2" prop="companyAttribute" :key="keys+2"
label="发包属性" width="400"> label="发包属性" width="400">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.companyAttribute == null || scope.row.companyAttribute == ''">--</div> <div v-if="scope.row.companyAttribute == null || scope.row.companyAttribute == ''">--</div>
<div v-if="scope.row.companyAttribute1"> <div v-if="scope.row.companyAttribute1">
<div class="box" v-if="scope.row.sq2==true">{{scope.row.companyAttribute1}}...<span @click="sq2(scope.row,false)">更多</span></div> <div class="box" v-if="scope.row.sq2==true">{{scope.row.companyAttribute1}}...<span @click="sq2(scope.row,false)">更多</span></div>
<div class="box" v-else>{{scope.row.companyAttribute}}<span @click="sq2(scope.row,true)">收起</span></div> <div class="box" v-else>{{scope.row.companyAttribute}}<span @click="sq2(scope.row,true)">收起</span></div>
</div> </div>
<div v-else>{{scope.row.companyAttribute}}</div> <div v-else>{{scope.row.companyAttribute}}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="followUser" prop="followUser"
label="跟进人" width="110"> label="跟进人" width="110">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.followUser || '--'}} {{scope.row.followUser || '--'}}
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="bottems" v-if="tableData.total>searchParam.pageSize"> <div class="bottems" v-if="tableData.total>searchParam.pageSize">
<el-pagination <el-pagination
background background
:page-size="searchParam.pageSize" :page-size="searchParam.pageSize"
:current-page="searchParam.pageNum" :current-page="searchParam.pageNum"
@current-change="handleCurrentChange" @current-change="handleCurrentChange"
layout="prev, pager, next" layout="prev, pager, next"
:total="tableData.total"> :total="tableData.total">
</el-pagination> </el-pagination>
</div> </div>
<div class="delform" v-if="RLcompanyName"> <div class="delform" v-if="RLcompanyName">
<div class="words">再次认领将会恢复默认客户数据</div> <div class="words">再次认领将会恢复默认客户数据</div>
<div> <div>
<div class="btnsmall btn_primary h28" @click="RL">确定</div> <div class="btnsmall btn_primary h28" @click="RL">确定</div>
<div class="btnsmall btn_cancel h28" @click="RLcompanyName = ''">取消</div> <div class="btnsmall btn_cancel h28" @click="RLcompanyName = ''">取消</div>
</div>
</div> </div>
</div> </div>
</el-card> </div>
</div> </el-card>
</div> </div>
</template> </template>
......
...@@ -182,7 +182,7 @@ ...@@ -182,7 +182,7 @@
</div> </div>
</div> </div>
</div> </div>
<AddCustom :data="data" v-if="data.open"></AddCustom> <AddCustom :data="data" v-if="data.open" @handleCancel="handleCancel"></AddCustom>
</div> </div>
</template> </template>
...@@ -574,6 +574,9 @@ ...@@ -574,6 +574,9 @@
handleAdd(){ handleAdd(){
this.data.open=true this.data.open=true
}, },
handleCancel(isshow){
this.data.open=isshow
},
} }
} }
</script> </script>
......
<template>
<div v-loading="loading" class="market-container">
<iframe id="companyIframe" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" width="100%" :style="{height:iframeHight+'px'}"
:src="src" />
</div>
</template>
<script>
import { steerScroll } from '@/assets/js/jskplug';
import { dskAccessToken } from '@/api/common';
export default {
name: 'Enterprise',
components: {
},
data() {
return {
loading: false, // 是否加载完成-当前页控制
iframeTimer: '', // 是否加载中定时器-当前页控制
footHeight: 0, //底部高度,若为0(页面内部嵌套或者没有底部板块)
iframeHight: window.innerHeight, // iframe高度-当前页控制
navigation: { isFixed: true, fixedHeight: 56, totalHeight: 68 }, // iframe之外页面顶部对象,ifFixed:是否浮动;fixedHeight:浮动对象高度;totalHeight:顶部整体高度
src: '', //iframe嵌套页面地址
// domain: 'https://plug.jiansheku.com', // 插件地址
domain: 'https://pre-plug.jiansheku.com', // 插件地址测试
// domain: 'http://192.168.60.210:3400',
ak: 'aec7b3ff2y2q8x6t49a7e2c463ce21912', // 需要携带的sdkId
timelongs: 7200,//刷新token时间
tokentimer: null,
};
},
created() {
if(window.location.host === 'http://szh.jiansheku.com' || window.location.host === 'szh.jiansheku.com'){
this.domain='https://plug.jiansheku.com'
}else {
this.domain='https://pre-plug.jiansheku.com'
this.domain='http://192.168.60.210:3400'
}
this.gettokens();
},
mounted() {
this.iframeLoading(); // 判断iframe页面是否加载完成-当前页控制
let that = this
window.addEventListener('message', function (event) {
if(!event.data.id && event.data.url){
that.$tab.openPage(event.data.title, event.data.url).then(() => {
// 执行结束的逻辑
})
}
}, false);
steerScroll('companyIframe', this.navigation, this.footHeight, true); // iframeId: iframe的id;navigation:页面排除iframe后剩下的顶部高度;footHeight: 页面排除iframe后剩下的底部高度;state:监听or移除监听;parentId: 父级id[不带默认就是铺满整个页面]];_this:指向当前实例(可忽略)
},
beforeDestroy() {
clearInterval(this.iframeTimer); // -当前页控制
steerScroll('companyIframe', this.navigation, this.footHeight); // iframeId: iframe的id;navigation:页面排除iframe后剩下的顶部高度;footHeight: 页面排除iframe后剩下的底部高度;state:监听or移除监听;parentId: 父级id[不带默认就是铺满整个页面]];_this:指向当前实例(可忽略)
clearInterval(this.tokentimer);
},
methods: {
gettokens() {
dskAccessToken().then(res => {
if (res.code == 200) {
this.timelongs = res.data.expire;
this.ak = res.data.accessToken;
let initTime = new Date().getTime()
if(window.location.search){
this.src = `${this.domain+this.$route.fullPath}&ak=${this.ak}&initTime=${initTime}&uid=${this.ak}&origin=${window.location.origin}`
}else{
this.src = `${this.domain+this.$route.fullPath}?ak=${this.ak}&initTime=${initTime}&uid=${this.ak}&origin=${window.location.origin}`
}
// if(window.location.search){
// this.src = `${this.domain+this.$route.fullPath}&ak=${this.ak}&initTime=${initTime}&uid=${this.ak}&origin=${window.location.origin}`
// }else{
// this.src = `${this.domain+this.$route.fullPath}?ak=${this.ak}&initTime=${initTime}&uid=${this.ak}&origin=${window.location.origin}`
// }
// }else{ //更新iframe地址的accessToken
// let ifam = document.getElementById('companyIframe')
// ifam.contentWindow.postMessage({ 'accessToken': this.ak, 'initTime': initTime }, '*')
// }
this.refreshtoken();
} else {
clearTimeout(this.tokentimer);
}
});
},
refreshtoken() {
this.tokentimer = setTimeout(() => {
dskAccessToken().then(res => {
if (res.code == 200) {
this.timelongs = res.data.expire;
this.ak = res.data.accessToken;
let ifam = document.getElementById('companyIframe'); //iframe的id
let akObj = res.data.expire; //accessToken接口的返回值
let initTime = new Date().getTime(); //accessToken接口返回后的当前时间戳
ifam.contentWindow.postMessage({ 'accessToken': akObj.accessToken, 'initTime': initTime }, '*');
} else {
clearTimeout(this.tokentimer);
}
});
}, this.timelongs * 1000);
},
//判断iframe页面是否加载完成-当前页控制
iframeLoading() {
let iframeHeight = document.getElementById("companyIframe").clientHeight, number = 0;
this.iframeTimer = setInterval(() => {
number++;
if (document.getElementById("companyIframe").clientHeight != iframeHeight || number == 5000) {
this.loading = false;
clearInterval(this.iframeTimer);
}
});
}
}
}
</script>
<style lang="scss" scoped>
.market-container {
width: 100%;
height: 100%;
padding: 16px 24px;
box-sizing: border-box;
}
</style>
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
:form-data="formData" :form-data="formData"
:query-params="queryParams" :query-params="queryParams"
:total="tableDataTotal" :total="tableDataTotal"
:headerFixed="true"
:isExcel="false" :isExcel="false"
@handle-search="handleSearch" @handle-search="handleSearch"
> >
...@@ -53,6 +54,7 @@ ...@@ -53,6 +54,7 @@
:tableLoading="tableLoading" :tableLoading="tableLoading"
:tableData="tableData" :tableData="tableData"
:forData="forData" :forData="forData"
:headerFixed="true"
:tableDataTotal="tableDataTotal" :tableDataTotal="tableDataTotal"
:queryParams="queryParams" :queryParams="queryParams"
:MaxPage=500 :MaxPage=500
...@@ -456,7 +458,7 @@ ...@@ -456,7 +458,7 @@
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
line-height: 32px; line-height: 32px;
color: #999999; color: rgba(35,35,35,0.8);
margin-right: 8px; margin-right: 8px;
text-align: center; text-align: center;
width: 70px; width: 70px;
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
:form-data="formData" :form-data="formData"
:query-params="queryParams" :query-params="queryParams"
:total="tableDataTotal" :total="tableDataTotal"
:headerFixed="true"
:isExcel="true" :isExcel="true"
@handle-search="handleSearch" @handle-search="handleSearch"
@handle-excel="clickEXCEL" @handle-excel="clickEXCEL"
...@@ -21,6 +22,7 @@ ...@@ -21,6 +22,7 @@
:tableLoading="tableLoading" :tableLoading="tableLoading"
:tableData="tableData" :tableData="tableData"
:forData="forData" :forData="forData"
:headerFixed="true"
:MaxPage=500 :MaxPage=500
:tableDataTotal="tableDataTotal" :tableDataTotal="tableDataTotal"
:queryParams="queryParams" :queryParams="queryParams"
......
<template> <template>
<div class="performance"> <div class="performance">
<div class="content"> <div class="content">
<head-form <head-form-new
ref="headForm" ref="headForm"
title="集团施工项目最新招标" title="集团施工项目最新招标"
:form-data="formData" :form-data="formData"
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
@handle-search="handleSearch" @handle-search="handleSearch"
:slots="true" :slots="true"
:isExcel="false" :isExcel="false"
></head-form> ></head-form-new>
<span class="check" @click="check">查看集团招标<i class="el-icon-arrow-right"></i></span> <span class="check" @click="check">查看集团招标<i class="el-icon-arrow-right"></i></span>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton> <skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<div class="table-item" v-if="!isSkeleton && tableData.length >0"> <div class="table-item" v-if="!isSkeleton && tableData.length >0">
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
<el-table-column label="发布日期" prop="issueTime" width="100"></el-table-column> <el-table-column label="发布日期" prop="issueTime" width="100"></el-table-column>
<el-table-column label="招标成员" prop="tenderee" min-width="220"> <el-table-column label="招标成员" prop="tenderee" min-width="220">
<template slot-scope="scope"> <template slot-scope="scope">
<router-link :to="scope.row.uipId?`/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> <span @click="getUipIdByCid(scope.row.tendereeId)" style="cursor: pointer;" class="a-link" v-if="scope.row.tendereeId&&scope.row.tenderee" v-html="scope.row.tenderee"></span>
<div v-else v-html="scope.row.tenderee || '--'"></div> <div v-else v-html="scope.row.tenderee || '--'"></div>
</template> </template>
</el-table-column> </el-table-column>
...@@ -88,7 +88,7 @@ ...@@ -88,7 +88,7 @@
</div> </div>
<div class="content"> <div class="content">
<head-form <head-form
title="集团施工项目发包金额区间" title="集团施工项目发包金额"
:form-data="[]" :form-data="[]"
:query-params="{}" :query-params="{}"
:slots="true" :slots="true"
...@@ -100,7 +100,7 @@ ...@@ -100,7 +100,7 @@
clearable clearable
@change="changeSelect1" @change="changeSelect1"
class="form-content-width" class="form-content-width"
style="width: 80px"> style="width: 100px">
<el-option v-for="(item, index) in yearOptions" :key="index" :label="item.name" :value="item.value"/> <el-option v-for="(item, index) in yearOptions" :key="index" :label="item.name" :value="item.value"/>
</el-select> </el-select>
</div> </div>
...@@ -139,7 +139,7 @@ ...@@ -139,7 +139,7 @@
clearable clearable
@change="changeSelect2" @change="changeSelect2"
class="form-content-width" class="form-content-width"
style="width: 80px"> style="width:100px">
<el-option v-for="(item, index) in yearOptions" :key="index" :label="item.name" :value="item.value"/> <el-option v-for="(item, index) in yearOptions" :key="index" :label="item.name" :value="item.value"/>
</el-select> </el-select>
</div> </div>
...@@ -153,7 +153,7 @@ ...@@ -153,7 +153,7 @@
<div class="table-item"> <div class="table-item">
<el-table class="fixed-table" :data="lxtjList" border max-height="270"> <el-table class="fixed-table" :data="lxtjList" border max-height="270">
<el-table-column label="项目类型" prop="type" min-width="70"></el-table-column> <el-table-column label="项目类型" prop="type" min-width="70"></el-table-column>
<el-table-column label="发包数量" prop="count" width="120"> <el-table-column label="发包数量" prop="count" width="90">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.count}}{{scope.row.count ? '个':''}} {{scope.row.count}}{{scope.row.count ? '个':''}}
</template> </template>
...@@ -189,7 +189,7 @@ ...@@ -189,7 +189,7 @@
clearable clearable
@change="changeSelect3" @change="changeSelect3"
class="form-content-width" class="form-content-width"
style="width: 80px"> style="width: 100px">
<el-option v-for="(item, index) in yearOptions" :key="index" :label="item.name" :value="item.value"/> <el-option v-for="(item, index) in yearOptions" :key="index" :label="item.name" :value="item.value"/>
</el-select> </el-select>
</div> </div>
...@@ -216,14 +216,15 @@ ...@@ -216,14 +216,15 @@
</el-row> </el-row>
</div> </div>
<div class="content"> <div class="content">
<head-form <head-form-new
ref="headForm1"
title="历史发包项目金额TOP10" title="历史发包项目金额TOP10"
:form-data="formData1" :form-data="formData1"
:query-params="queryParams1" :query-params="queryParams1"
@handle-search="handleSearch1" @handle-search="handleSearch1"
:slots="true" :slots="true"
:isExcel="false" :isExcel="false"
></head-form> ></head-form-new>
<skeleton v-if="isSkeleton6" style="padding: 16px"></skeleton> <skeleton v-if="isSkeleton6" style="padding: 16px"></skeleton>
<div class="table-item" v-if="!isSkeleton6 && peojectTopData.length > 0"> <div class="table-item" v-if="!isSkeleton6 && peojectTopData.length > 0">
<el-table class="fixed-table" :data="peojectTopData" border max-height="235"> <el-table class="fixed-table" :data="peojectTopData" border max-height="235">
...@@ -242,7 +243,7 @@ ...@@ -242,7 +243,7 @@
<el-table-column label="项目类型" prop="projectTypeNew" width="100"></el-table-column> <el-table-column label="项目类型" prop="projectTypeNew" width="100"></el-table-column>
<el-table-column label="招标成员" prop="projectUnit" min-width="250"> <el-table-column label="招标成员" prop="projectUnit" min-width="250">
<template slot-scope="scope"> <template slot-scope="scope">
<router-link :to="scope.row.uipId?`/enterprise/${encodeStr(scope.row.projectUnitId)}`:`/company/${encodeStr(scope.row.projectUnitId)}`" tag="a" class="a-link" v-if="scope.row.projectUnitId&&scope.row.projectUnit" v-html="scope.row.projectUnit"></router-link :to="scope.row.uipId?`/enterprise/${encodeStr(scope.row.projectUnitId)}`:`/company/${encodeStr(scope.row.projectUnitId)}`"> <router-link :to="scope.row.uipId?`/enterprise/${encodeStr(scope.row.projectUnitId)}`:`/company/${encodeStr(scope.row.projectUnitId)}`" tag="a" class="a-link" v-if="scope.row.projectUnitId&&scope.row.projectUnit" v-html="scope.row.projectUnit"></router-link>
<div v-else v-html="scope.row.projectUnit || '--'"></div> <div v-else v-html="scope.row.projectUnit || '--'"></div>
</template> </template>
</el-table-column> </el-table-column>
...@@ -274,6 +275,7 @@ ...@@ -274,6 +275,7 @@
import mixin from '../../party-a/mixins/mixin' import mixin from '../../party-a/mixins/mixin'
import {recentlyBid,bidByYear,groupByMoney,groupByType,groupByLowerRate,peojectTop} from '@/api/detail/groupAccount/groupAccount' import {recentlyBid,bidByYear,groupByMoney,groupByType,groupByLowerRate,peojectTop} from '@/api/detail/groupAccount/groupAccount'
import { getDictType } from '@/api/main' import { getDictType } from '@/api/main'
import { getUipIdByCid } from '@/api/macro/macro'
export default { export default {
name: 'qualifications', name: 'qualifications',
props: ['customerId'], props: ['customerId'],
...@@ -288,14 +290,14 @@ ...@@ -288,14 +290,14 @@
combineId: this.customerId, combineId: this.customerId,
}, },
formData: [ formData: [
{ type: 4, fieldName: 'type', value: '', placeholder: '项目类型', options: [],width:150, uid: this.getUid()}, { type: 4, fieldName: 'type', value: '', placeholder: '项目类型', options: [], uid: this.getUid()},
{ type: 1, fieldName: 'cgbl', value: '', placeholder: '持股比例', options: [],width:110, uid: this.getUid()}, { type: 1, fieldName: 'cgbl', value: '', placeholder: '持股比例', options: [],width:110, uid: this.getUid()},
{ type: 1, fieldName: 'year', value: '2023年', placeholder: '年份', options: [],width:100, uid: this.getUid()}, { type: 1, fieldName: 'year', value: '2023年', placeholder: '选择年份', options: [],width:100, uid: this.getUid()},
], ],
formData1: [ formData1: [
{ type: 4, fieldName: 'type', value: '', placeholder: '项目类型', options: [],width:150, uid: this.getUid()}, { type: 4, fieldName: 'type', value: '', placeholder: '项目类型', options: [], uid: this.getUid()},
{ type: 1, fieldName: 'cgbl', value: '', placeholder: '持股比例', options: [],width:110, uid: this.getUid()}, { type: 1, fieldName: 'cgbl', value: '', placeholder: '持股比例', options: [],width:110, uid: this.getUid()},
{ type: 1, fieldName: 'year', value: '2023年', placeholder: '年份', options: [],width:100, uid: this.getUid()}, { type: 1, fieldName: 'year', value: '2023年', placeholder: '选择年份', options: [],width:100, uid: this.getUid()},
], ],
cgblList: [ cgblList: [
{name:'100%',value:'100%'}, {name:'100%',value:'100%'},
...@@ -351,6 +353,21 @@ ...@@ -351,6 +353,21 @@
this.getPeojectTop() this.getPeojectTop()
}, },
methods: { methods: {
getUipIdByCid(companyId){
var params=[companyId]
getUipIdByCid(params).then(res=>{
if (res.code==200) {
if(res.data&&res.data.length>0&&res.data[0].uipId){
this.$router.push({path: '/enterprise/'+this.encodeStr(companyId)})
}else{
this.$router.push({path: '/company/'+this.encodeStr(companyId)})
}
}
}).catch(error=>{
});
},
yearsData(){ yearsData(){
let mydate=new Date(); let mydate=new Date();
let Year = mydate.getFullYear(); let Year = mydate.getFullYear();
......
...@@ -379,6 +379,14 @@ ...@@ -379,6 +379,14 @@
border-radius: 4px; border-radius: 4px;
padding: 16px; padding: 16px;
height: calc(100% - 64px); height: calc(100% - 64px);
::v-deep .el-table__header-wrapper {
position: sticky;
top: 64px !important;
z-index: 9;
}
.headForm{ .headForm{
margin-bottom: 14px; margin-bottom: 14px;
.common-title{ .common-title{
......
<template> <template>
<div class="head-form-new"> <div class="head-form-new" :class="headerFixed ? 'headerFixed':''">
<div class="common-title" v-if="title">{{ title }}</div> <div class="common-title" v-if="title">{{ title }}</div>
<div class="flex-box query-box"> <div class="flex-box query-box">
<div class="flex-box query-params"> <div class="flex-box query-params">
...@@ -109,6 +109,10 @@ export default { ...@@ -109,6 +109,10 @@ export default {
type: Number, type: Number,
default: 0 default: 0
}, },
headerFixed: {
type: Boolean,
default: false
},
isExcel: { isExcel: {
type: Boolean, type: Boolean,
default: false default: false
...@@ -280,10 +284,17 @@ export default { ...@@ -280,10 +284,17 @@ export default {
::v-deep .el-popper[x-placement^="bottom"] { ::v-deep .el-popper[x-placement^="bottom"] {
margin-top: 5px; margin-top: 5px;
} }
.headerFixed{
position: sticky;
top: 0;
z-index: 10;
padding-top: 16px;
margin-top: -16px;
background: #fff;
}
.head-form-new { .head-form-new {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
margin-bottom: 14px;
.common-title { .common-title {
margin-bottom: 8px; margin-bottom: 8px;
} }
...@@ -432,7 +443,7 @@ export default { ...@@ -432,7 +443,7 @@ export default {
::v-deep .el-select__tags { ::v-deep .el-select__tags {
.el-tag { .el-tag {
&:first-child { &:first-child {
//width: 100%; /*width: 100%;*/
} }
} }
} }
......
<template> <template>
<div id="detailPart" class="sides-container" :style="sideHeight?'height:'+sideHeight+'px':''"> <div id="detailPart" class="sides-container">
<el-input placeholder="搜索" class="side-input" v-model="searchText" clearable @input="handleSearch(true)" @keyup.enter.native="handleSearch()"> <el-input placeholder="搜索" class="side-input" v-model="searchText" clearable @input="handleSearch(true)" @keyup.enter.native="handleSearch()">
<i slot="prefix" class="el-input__icon el-icon-search" @click="handleSearch()"></i> <i slot="prefix" class="el-input__icon el-icon-search" @click="handleSearch()"></i>
</el-input> </el-input>
...@@ -354,7 +354,7 @@ export default { ...@@ -354,7 +354,7 @@ export default {
methods: { methods: {
financial(id) { financial(id) {
financial({ cid: String(id) }).then(res => { financial({ cid: String(id) }).then(res => {
if (res.code == 200 && !res.data) { if ((res.code == 200 && !res.data) || !res.data?.totalAssets) {
this.sideRoute[1].disabled = true; this.sideRoute[1].disabled = true;
this.defaultRoute = JSON.parse(JSON.stringify(this.sideRoute)); this.defaultRoute = JSON.parse(JSON.stringify(this.sideRoute));
} }
......
<template> <template>
<div class="Tables"> <div class="Tables">
<div class="table-item"> <div class="table-item">
<el-table v-if="tableDataTotal>0" class="fixed-table" <el-table v-if="tableDataTotal>0" class="fixed-table" :class="headerFixed ? 'headerFixed':''"
v-loading="tableLoading" v-loading="tableLoading"
:data="tableData" :data="tableData"
element-loading-text="Loading" element-loading-text="Loading"
ref="tableRef" ref="tableRef"
v-horizontal-scroll="'hover'"
border border
fit fit
highlight-current-row highlight-current-row
...@@ -86,6 +87,10 @@ export default { ...@@ -86,6 +87,10 @@ export default {
type: Boolean, type: Boolean,
default: true default: true
}, },
headerFixed: {
type: Boolean,
default: false
},
indexFixed: { indexFixed: {
type: Boolean, type: Boolean,
default: false default: false
...@@ -172,71 +177,86 @@ export default { ...@@ -172,71 +177,86 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
::v-deep .el-table__body tr.current-row > td.el-table__cell{ .Tables{
background-color: #ffffff; ::v-deep .el-table__body tr.current-row > td.el-table__cell{
} background-color: #ffffff;
/*::v-deep .el-table__fixed{ }
height: calc(100% - 16px) !important; /*::v-deep .el-table__fixed{
}*/ height: calc(100% - 16px) !important;
}*/
::v-deep .el-table__row{ ::v-deep .el-table__row{
&:nth-child(even){ &:nth-child(even){
background-color: #F9FCFF; background-color: #F9FCFF;
.more{ .more{
background: #F8FBFF; background: #F8FBFF;
span{ span{
color: #0081FF; color: #0081FF;
}
}
}
&:nth-child(odd){
.more{
span{
color: #0081FF;
}
}
} }
} }
} .table-item{
&:nth-child(odd){ ::v-deep .el-table td.el-table__cell{
.more{ border-bottom: 0;
span{ }
color: #0081FF;
}
::v-deep .el-table th.el-table__cell.is-leaf,::v-deep .el-table td.el-table__cell {
border-bottom: 1px solid #E6EAF1;
}
::v-deep .el-table--border .el-table__cell {
border-right: 1px solid #E6EAF1;
}
::v-deep .el-table__body tr.hover-row.current-row>td,
::v-deep .el-table__body tr.hover-row.el-table__row--striped.current-row>td,
::v-deep .el-table__body tr.hover-row.el-table__row--striped>td,
::v-deep .el-table__body tr.hover-row>td{
background-color:#DCEBFF !important;
.more{
background: #DCEBFF;
} }
} }
}
}
.table-item{
::v-deep .el-table td.el-table__cell{
border-bottom: 0;
}
} ::v-deep .el-table--enable-row-hover .el-table__body tr:hover > td {
::v-deep .el-table th.el-table__cell.is-leaf,::v-deep .el-table td.el-table__cell { background-color: #DCEBFF;
border-bottom: 1px solid #E6EAF1; }
} ::v-deep .fixed-table{
::v-deep .el-table--border .el-table__cell { overflow: visible;
border-right: 1px solid #E6EAF1; }
} ::v-deep .el-table__header-wrapper{
::v-deep .el-table__body tr.hover-row.current-row>td, position: sticky;
::v-deep .el-table__body tr.hover-row.el-table__row--striped.current-row>td, top:0;
::v-deep .el-table__body tr.hover-row.el-table__row--striped>td, z-index: 9;
::v-deep .el-table__body tr.hover-row>td{ }
background-color:#DCEBFF !important; ::v-deep .el-table__fixed-header-wrapper{
.more{ position: sticky;
background: #DCEBFF; z-index: 9;
} top: 0;
} }
.headerFixed{
::v-deep .el-table__header-wrapper{
position: sticky;
top:80px;
z-index: 9;
}
::v-deep .el-table__fixed-header-wrapper{
position: sticky;
z-index: 9;
top:80px;
}
}
::v-deep .el-table__fixed{
overflow-x: clip;
overflow-y: clip;
}
::v-deep .el-table--enable-row-hover .el-table__body tr:hover > td { }
background-color: #DCEBFF;
}
::v-deep .fixed-table{
overflow: visible;
}
::v-deep .el-table__header-wrapper{
position: sticky;
top:56px;
z-index: 9;
}
::v-deep .el-table__fixed-header-wrapper{
position: sticky;
z-index: 9;
top: 56px;
}
::v-deep .el-table__fixed{
overflow-x: clip;
overflow-y: clip;
}
</style> </style>
...@@ -383,15 +383,31 @@ export default { ...@@ -383,15 +383,31 @@ export default {
} }
.part-main { .part-main {
margin-top: 12px; margin-top: 12px;
width: 100%;
height: calc(100vh - 155px);
overflow-y: auto;
align-items: initial; align-items: initial;
} }
.part-left { .part-left {
margin-right: 16px; margin-right: 16px;
padding-bottom: 16px;
position: fixed;
background: #FFFFFF;
width: 144px;
} }
.part-right { .part-right {
min-width: 1088px; min-width: 1088px;
width: 100%; width: 100%;
background: #ffffff; background: #FFFFFF;
border-radius: 4px; border-radius: 4px;
margin-left: 160px;
::v-deep .el-table__header-wrapper{
position: sticky;
top:0;
z-index: 9;
}
#groupBox{
height: 100%;
}
} }
</style> </style>
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
<el-tab-pane label="工商变更" :disabled="tableDataTotal==0" name="second"></el-tab-pane> <el-tab-pane label="工商变更" :disabled="tableDataTotal==0" name="second"></el-tab-pane>
</el-tabs> </el-tabs>
<info-table class="info-tab" :list="defaultList" :obj="forInfo" :labelWidth="labelWidth" v-if="activeName=='first'"> <info-table class="info-tab" :list="defaultList" :obj="forInfo" :labelWidth="labelWidth" v-if="activeName=='first'">
<template slot="provinceCode" slot-scope="scope"> <template slot="provinceCode" slot-scope="scope">
<span>{{showRegion(scope.data.provinceCode)}}</span> <span>{{showRegion(scope.data.provinceCode)}}</span>
...@@ -19,7 +18,7 @@ ...@@ -19,7 +18,7 @@
</template> </template>
<template slot="actualCapi" slot-scope="scope"> <template slot="actualCapi" slot-scope="scope">
<span> <span>
{{ scope.data.actualCapi?scope.data.actualCapi+'万元人民币':'--' }} {{ scope.data.actualCapi? `${scope.data.actualCapi}${scope.data.actualCapiUnit}` :'--' }}
</span> </span>
</template> </template>
<template slot="colleguesNum" slot-scope="scope"> <template slot="colleguesNum" slot-scope="scope">
...@@ -28,23 +27,16 @@ ...@@ -28,23 +27,16 @@
</span> </span>
</template> </template>
</info-table> </info-table>
<tables <tables :tableLoading="tableLoading" :tableData="tableData" :tableDataTotal="tableDataTotal" :forData="forData"
:tableLoading="tableLoading" @handle-current-change="handleCurrentChange" :queryParams="queryParams" v-if="activeName=='second'" />
:tableData="tableData"
:tableDataTotal="tableDataTotal"
:forData="forData"
@handle-current-change="handleCurrentChange"
:queryParams="queryParams"
v-if="activeName=='second'"
/>
</div> </div>
</template> </template>
<script> <script>
import mixin from '../mixins/mixin' import mixin from '../mixins/mixin';
import dataRegion from '@/assets/json/dataRegion' import dataRegion from '@/assets/json/dataRegion';
import InfoTable from '../component/infoTable' import InfoTable from '../component/infoTable';
import {icInfo, changeInfo} from "@/api/detail/party-a/overview" import { icInfo, changeInfo } from "@/api/detail/party-a/overview";
export default { export default {
name: 'Businfo', name: 'Businfo',
props: ['companyId'], props: ['companyId'],
...@@ -87,63 +79,63 @@ export default { ...@@ -87,63 +79,63 @@ export default {
{ name: '经营范围', prop: 'scope', style: true } { name: '经营范围', prop: 'scope', style: true }
], ],
forData: [ forData: [
{label: '变更日期', prop: 'changeDate', width: '100'}, { label: '变更日期', prop: 'changeDate', width: '100' },
{label: '变更事项', prop: 'type'}, { label: '变更事项', prop: 'type' },
{label: '变更前', prop: 'beforeContent'}, { label: '变更前', prop: 'beforeContent' },
{label: '变更后', prop: 'afterContent'} { label: '变更后', prop: 'afterContent' }
], ],
//列表 //列表
tableLoading:false, tableLoading: false,
tableData:[], tableData: [],
tableDataTotal:0 tableDataTotal: 0
} };
}, },
created() { created() {
this.handleQuery(); this.handleQuery();
this.handleQuery1(); this.handleQuery1();
}, },
methods: { methods: {
handleClick(){ handleClick() {
if(this.activeName=='first'){ if (this.activeName == 'first') {
this.handleQuery() this.handleQuery();
}else{ } else {
this.handleQuery1() this.handleQuery1();
} }
}, },
async handleQuery(params,flag) { async handleQuery(params, flag) {
if(flag){ if (flag) {
return this.handleQuery1(params) return this.handleQuery1(params);
} }
this.isSkeleton = true; this.isSkeleton = true;
this.tableLoading = true this.tableLoading = true;
let param = this.baseParams; let param = this.baseParams;
let res = await icInfo(param); let res = await icInfo(param);
this.tableLoading = false this.tableLoading = false;
if(res.code==200){ if (res.code == 200) {
this.isSkeleton = false; this.isSkeleton = false;
this.forInfo = res.data this.forInfo = res.data;
} }
}, },
async handleQuery1(params) { async handleQuery1(params) {
let param = params?params:this.queryParams let param = params ? params : this.queryParams;
let res = await changeInfo(param) let res = await changeInfo(param);
if(res.code==200){ if (res.code == 200) {
this.tableData = res.rows; this.tableData = res.rows;
this.tableDataTotal = res.total this.tableDataTotal = res.total;
} }
}, },
showRegion(region){ showRegion(region) {
if(region) { if (region) {
let list = dataRegion let list = dataRegion;
let areaText = '' let areaText = '';
list.forEach(item => { list.forEach(item => {
if(item.id == region) { if (item.id == region) {
areaText = item.regionName areaText = item.regionName;
} }
}) });
return areaText return areaText;
}else { } else {
return '--' return '--';
} }
} }
} }
...@@ -151,22 +143,22 @@ export default { ...@@ -151,22 +143,22 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.detail-container{ .detail-container {
margin: 0; margin: 0;
padding: 16px; padding: 16px;
background: #FFFFFF; background: #ffffff;
border-radius: 4px; border-radius: 4px;
.detail-tab{ .detail-tab {
margin: 0 0 0 -16px; margin: 0 0 0 -16px;
::v-deep .el-tabs__nav-wrap::after{ ::v-deep .el-tabs__nav-wrap::after {
display: none; display: none;
} }
::v-deep .el-tabs__item{ ::v-deep .el-tabs__item {
font-size: 16px; font-size: 16px;
height: 30px; height: 30px;
line-height: 30px; line-height: 30px;
padding: 0 16px; padding: 0 16px;
&.is-active{ &.is-active {
font-weight: bold; font-weight: bold;
} }
} }
......
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
<no-data /> <no-data />
</div> </div>
</template> </template>
</div> </div>
<div class="bid-ywwl"> <div class="bid-ywwl">
<div class="common-title">业务往来供应商TOP5</div> <div class="common-title">业务往来供应商TOP5</div>
...@@ -69,15 +69,15 @@ ...@@ -69,15 +69,15 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
width="160" width="140"
align="right" align="right"
label="合作次数"> label="合作次数">
<template slot-scope="scope"> <template slot-scope="scope">
<span style="padding-right: 86px;">{{ scope.row.count }}</span> <span>{{ scope.row.count }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
width="160" width="180"
align="right" align="right"
label="合作总金额(万元)"> label="合作总金额(万元)">
<template slot-scope="scope"> <template slot-scope="scope">
...@@ -337,5 +337,5 @@ export default { ...@@ -337,5 +337,5 @@ export default {
::deep .el-table::before{ ::deep .el-table::before{
display: none; display: none;
} }
</style> </style>
...@@ -116,7 +116,7 @@ export default { ...@@ -116,7 +116,7 @@ export default {
background: #FFFFFF; background: #FFFFFF;
border-radius: 4px; border-radius: 4px;
.detail-tab{ .detail-tab{
margin: -34px 0 0 -16px; margin: -14px 0 0 -16px;
::v-deep .el-tabs__nav-wrap::after{ ::v-deep .el-tabs__nav-wrap::after{
display: none; display: none;
} }
......
...@@ -327,7 +327,7 @@ export default { ...@@ -327,7 +327,7 @@ export default {
.head-form-new { .head-form-new {
.common-title { .common-title {
margin-bottom: 8px; padding-bottom: 8px;
} }
.query-box { .query-box {
margin: 0px; margin: 0px;
......
...@@ -59,16 +59,16 @@ ...@@ -59,16 +59,16 @@
if(this.$route.name=='Company'){ //企业详情 if(this.$route.name=='Company'){ //企业详情
if(this.$route.query.html){ if(this.$route.query.html){
if(this.$route.query.type){ if(this.$route.query.type){
this.src = `${this.domain}/enterprise/${this.$route.params.id}/${this.$route.query.html}?flag=true&type=${this.$route.query.type}&ak=${this.ak}&initTime=${new Date().getTime()}&uid=${this.ak}` this.src = `${this.domain}/enterprise/${this.$route.params.id}/${this.$route.query.html}?flag=true&type=${this.$route.query.type}&ak=${this.ak}&initTime=${new Date().getTime()}&uid=${this.ak}&origin=${window.location.origin}`
}else{ }else{
this.src = `${this.domain}/enterprise/${this.$route.params.id}/${this.$route.query.html}?ak=${this.ak}&initTime=${new Date().getTime()}&uid=${this.ak}` this.src = `${this.domain}/enterprise/${this.$route.params.id}/${this.$route.query.html}?ak=${this.ak}&initTime=${new Date().getTime()}&uid=${this.ak}&origin=${window.location.origin}`
} }
}else{ }else{
this.src = `${this.domain}/enterprise/${this.$route.params.id}?ak=${this.ak}&initTime=${new Date().getTime()}&uid=${this.ak}` this.src = `${this.domain}/enterprise/${this.$route.params.id}?ak=${this.ak}&initTime=${new Date().getTime()}&uid=${this.ak}&origin=${window.location.origin}`
} }
} }
if(this.$route.name=='Personnel'){ //人员详情 if(this.$route.name=='Personnel'){ //人员详情
this.src = `${this.domain}/personnel/${this.$route.params.id}.html?ak=${this.ak}&initTime=${new Date().getTime()}&uid=${this.ak}` this.src = `${this.domain}/personnel/${this.$route.params.id}.html?ak=${this.ak}&initTime=${new Date().getTime()}&uid=${this.ak}&origin=${window.location.origin}`
} }
} }
this.refreshtoken() this.refreshtoken()
......
...@@ -114,19 +114,19 @@ ...@@ -114,19 +114,19 @@
<div class="table-item-jf table-item" v-if="!isSkeleton&&tableData.length>0"> <div class="table-item-jf table-item" v-if="!isSkeleton&&tableData.length>0">
<el-table :data="tableData" :header-cell-style="{ background:'#f0f3fa',color: 'rgba(35,35,35,0.8)'}" v-horizontal-scroll="'hover'" <el-table :data="tableData" :header-cell-style="{ background:'#f0f3fa',color: 'rgba(35,35,35,0.8)'}" v-horizontal-scroll="'hover'"
class="table-item1 fixed-table" border highlight-current-row :header-row-class-name="setHeaderRow" :cell-class-name="setCellClass" class="table-item1 fixed-table" border highlight-current-row :header-row-class-name="setHeaderRow" :cell-class-name="setCellClass"
:row-class-name="setRowClass" :header-cell-class-name="setCellClass" @sort-change="sortChange"> :row-class-name="setRowClass" :header-cell-class-name="setCellClass" @sort-change="sortChange" ref="theOwnerListTable">
<el-table-column type="index" label="序号" fixed width="60" :resizable="false"> <el-table-column type="index" label="序号" :fixed="tableColumnFixed" width="60" :resizable="false">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{(pageNum - 1) *pageSize + scope.$index + 1}}</span> <span>{{(pageNum - 1) *pageSize + scope.$index + 1}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="公司名称" fixed width="380" :resizable="false"> <el-table-column label="公司名称" :fixed="tableColumnFixed" width="380" :resizable="false">
<template slot-scope="scope"> <template slot-scope="scope">
<div class="renling"> <div class="renling">
<div style="display:flex;align-items:center"> <div style="display:flex;align-items:center">
<router-link :to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}` : `/company/${encodeStr(scope.row.id)}`" tag="a" <router-link :to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}` : `/enterprise/${encodeStr(scope.row.id)}`" tag="a"
class="list-titel-a" v-html="scope.row.name"></router-link> class="list-titel-a" v-html="scope.row.name"></router-link>
<!-- 优质甲方tag标签 --> <!-- 优质甲方tag标签 -->
<div class="high-quality-enterprise" v-if="scope.row.other">{{scope.row.other}}</div> <div class="high-quality-enterprise" v-if="scope.row.other">{{scope.row.other}}</div>
...@@ -172,7 +172,7 @@ ...@@ -172,7 +172,7 @@
<el-table-column label="历史发包数量" min-width="107" :resizable="false" :sortable="'custom'" prop="inviteTenderCount"> <el-table-column label="历史发包数量" min-width="107" :resizable="false" :sortable="'custom'" prop="inviteTenderCount">
<template slot-scope="scope"> <template slot-scope="scope">
<router-link v-if="scope.row.inviteTenderCount" <router-link v-if="scope.row.inviteTenderCount"
:to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=hiscontract` : `/company/${encodeStr(scope.row.id)}?path=hiscontract`" :to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=hiscontract` : `/enterprise/${encodeStr(scope.row.id)}?path=hiscontract`"
tag="a" class="list-titel-a">{{scope.row.inviteTenderCount ? `${scope.row.inviteTenderCount}个`:"--"}}</router-link> tag="a" class="list-titel-a">{{scope.row.inviteTenderCount ? `${scope.row.inviteTenderCount}个`:"--"}}</router-link>
<span v-else>--</span> <span v-else>--</span>
</template> </template>
...@@ -180,7 +180,7 @@ ...@@ -180,7 +180,7 @@
<el-table-column label="历史发包总金额" min-width="120" :resizable="false" :sortable="'custom'" prop="inviteTenderSumAmount"> <el-table-column label="历史发包总金额" min-width="120" :resizable="false" :sortable="'custom'" prop="inviteTenderSumAmount">
<template slot-scope="scope"> <template slot-scope="scope">
<div style="text-align:right;white-space: nowrap;">{{scope.row.inviteTenderSumAmount ? `${scope.row.inviteTenderSumAmount}万元`:"--"}} <div style="text-align:right;white-space: nowrap;">{{parseFloat(scope.row.inviteTenderSumAmount) ? `${scope.row.inviteTenderSumAmount}万元`:"--"}}
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
...@@ -188,7 +188,7 @@ ...@@ -188,7 +188,7 @@
<el-table-column label="最近一次招标" min-width="107" :resizable="false" :sortable="'custom'" prop="inviteTenderLastTime"> <el-table-column label="最近一次招标" min-width="107" :resizable="false" :sortable="'custom'" prop="inviteTenderLastTime">
<template slot-scope="scope"> <template slot-scope="scope">
<router-link v-if="scope.row.inviteTenderLastTime" <router-link v-if="scope.row.inviteTenderLastTime"
:to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=announcement` : `/company/${encodeStr(scope.row.id)}?path=announcement`" :to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=announcement` : `/enterprise/${encodeStr(scope.row.id)}?path=announcement`"
tag="a" class="list-titel-a">{{scope.row.inviteTenderLastTime||"--"}}</router-link> tag="a" class="list-titel-a">{{scope.row.inviteTenderLastTime||"--"}}</router-link>
<span v-else>--</span> <span v-else>--</span>
</template> </template>
...@@ -197,7 +197,7 @@ ...@@ -197,7 +197,7 @@
<el-table-column label="重点项目" min-width="107" :resizable="false" :sortable="'custom'" prop="importantProjectCount"> <el-table-column label="重点项目" min-width="107" :resizable="false" :sortable="'custom'" prop="importantProjectCount">
<template slot-scope="scope"> <template slot-scope="scope">
<router-link v-if="scope.row.importantProjectCount" <router-link v-if="scope.row.importantProjectCount"
:to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=majorProject` : `/company/${encodeStr(scope.row.id)}?path=majorProject`" :to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=majorProject` : `/enterprise/${encodeStr(scope.row.id)}?path=majorProject`"
tag="a" class="list-titel-a">{{`${scope.row.importantProjectCount}个`}}</router-link> tag="a" class="list-titel-a">{{`${scope.row.importantProjectCount}个`}}</router-link>
<span v-else>--</span> <span v-else>--</span>
</template> </template>
...@@ -206,7 +206,7 @@ ...@@ -206,7 +206,7 @@
<!-- <el-table-column label="土地交易" width="107" :resizable="false" :sortable="'custom'" prop="landMarketCount"> <!-- <el-table-column label="土地交易" width="107" :resizable="false" :sortable="'custom'" prop="landMarketCount">
<template slot-scope="scope"> <template slot-scope="scope">
<router-link v-if="scope.row.landMarketCount" <router-link v-if="scope.row.landMarketCount"
:to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=landtransaction` : `/company/${encodeStr(scope.row.id)}?path=landtransaction`" :to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=landtransaction` : `/enterprise/${encodeStr(scope.row.id)}?path=landtransaction`"
tag="a" class="list-titel-a">{{`${scope.row.landMarketCount}个`}}</router-link> tag="a" class="list-titel-a">{{`${scope.row.landMarketCount}个`}}</router-link>
<span v-else>--</span> <span v-else>--</span>
</template> </template>
...@@ -215,7 +215,7 @@ ...@@ -215,7 +215,7 @@
<el-table-column label="拟建项目" min-width="107" :resizable="false" :sortable="'custom'" prop="approvalProjectCount"> <el-table-column label="拟建项目" min-width="107" :resizable="false" :sortable="'custom'" prop="approvalProjectCount">
<template slot-scope="scope"> <template slot-scope="scope">
<router-link v-if="scope.row.approvalProjectCount" <router-link v-if="scope.row.approvalProjectCount"
:to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=proposed` : `/company/${encodeStr(scope.row.id)}?path=proposed`" :to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=proposed` : `/enterprise/${encodeStr(scope.row.id)}?path=proposed`"
tag="a" class="list-titel-a">{{`${scope.row.approvalProjectCount}个`}}</router-link> tag="a" class="list-titel-a">{{`${scope.row.approvalProjectCount}个`}}</router-link>
<span v-else>--</span> <span v-else>--</span>
</template> </template>
...@@ -224,7 +224,7 @@ ...@@ -224,7 +224,7 @@
<el-table-column label="招标计划" min-width="107" :resizable="false" :sortable="'custom'" prop="bidPlanCount"> <el-table-column label="招标计划" min-width="107" :resizable="false" :sortable="'custom'" prop="bidPlanCount">
<template slot-scope="scope"> <template slot-scope="scope">
<router-link v-if="scope.row.bidPlanCount" <router-link v-if="scope.row.bidPlanCount"
:to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=biddingplan` : `/company/${encodeStr(scope.row.id)}?path=biddingplan`" :to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=biddingplan` : `/enterprise/${encodeStr(scope.row.id)}?path=biddingplan`"
tag="a" class="list-titel-a">{{`${scope.row.bidPlanCount}个`}}</router-link> tag="a" class="list-titel-a">{{`${scope.row.bidPlanCount}个`}}</router-link>
<span v-else>--</span> <span v-else>--</span>
</template> </template>
...@@ -233,7 +233,7 @@ ...@@ -233,7 +233,7 @@
<el-table-column label="招标公告" min-width="107" :resizable="false" :sortable="'custom'" prop="jskBidCount"> <el-table-column label="招标公告" min-width="107" :resizable="false" :sortable="'custom'" prop="jskBidCount">
<template slot-scope="scope"> <template slot-scope="scope">
<router-link v-if="scope.row.jskBidCount" <router-link v-if="scope.row.jskBidCount"
:to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=announcement` : `/company/${encodeStr(scope.row.id)}?path=announcement`" :to="scope.row.other ? `/enterprise/${encodeStr(scope.row.id)}?path=announcement` : `/enterprise/${encodeStr(scope.row.id)}?path=announcement`"
tag="a" class="list-titel-a">{{`${scope.row.jskBidCount}个`}}</router-link> tag="a" class="list-titel-a">{{`${scope.row.jskBidCount}个`}}</router-link>
<span v-else>--</span> <span v-else>--</span>
</template> </template>
...@@ -320,6 +320,8 @@ export default { ...@@ -320,6 +320,8 @@ export default {
sort: '', //查询结果排序方式 sort: '', //查询结果排序方式
// 展示认领状态 // 展示认领状态
showClaim: false, showClaim: false,
// table列是否悬浮
tableColumnFixed: false,
// 默认排序方式 // 默认排序方式
order: "desc", order: "desc",
fieldOptions: [{ fieldOptions: [{
...@@ -358,7 +360,8 @@ export default { ...@@ -358,7 +360,8 @@ export default {
total: 0, total: 0,
oldPageNum: 1, oldPageNum: 1,
pageNum: 1, pageNum: 1,
pageSize: 20 pageSize: 20,
tableScrollLeftMemory: 0,
}; };
}, },
watch: { watch: {
...@@ -399,6 +402,12 @@ export default { ...@@ -399,6 +402,12 @@ export default {
created() { created() {
this.init(); this.init();
}, },
beforeDestroy() {
const table = this.$refs["theOwnerListTable"]?.bodyWrapper;
if (table) {
table.removeEventListener("scroll", this.tableScroll, { capture: false, passive: true });
}
},
methods: { methods: {
// 生成查询条件 // 生成查询条件
createSearchConditions() { createSearchConditions() {
...@@ -476,7 +485,8 @@ export default { ...@@ -476,7 +485,8 @@ export default {
const result = await api.searchOwnerUnitListApi(params); const result = await api.searchOwnerUnitListApi(params);
if (result.code == 200) { if (result.code == 200) {
this.tableData = result.data?.list ? result.data.list : []; this.tableData = result.data?.list ? result.data.list : [];
this.total = res.data?.total ? res.data?.total : 0; this.total = result.data?.total ? result.data?.total : 0;
this.addScrollXListener();
} }
} catch (error) { } catch (error) {
console.log(error); console.log(error);
...@@ -495,6 +505,41 @@ export default { ...@@ -495,6 +505,41 @@ export default {
} }
}, },
async addScrollXListener() {
try {
await this.$nextTick();
const table = this.$refs["theOwnerListTable"]?.bodyWrapper;
if (table) {
table.removeEventListener("scroll", this.tableScroll, { capture: false, passive: true });
table.addEventListener("scroll", this.tableScroll, { capture: false, passive: true });
}
} catch (error) {
console.log(error);
}
},
tableScroll(event) {
const { target } = event;
if (target) {
// 滚动条记忆功能
this.tableScrollLeftMemory = target.scrollLeft;
target.scrollLeft > 0 ? this.tableColumnFixed = true : this.tableColumnFixed = false;
}
},
async setScrollX() {
try {
await this.$nextTick();
const table = this.$refs["theOwnerListTable"]?.bodyWrapper;
const left = this.tableScrollLeftMemory;
if (table) {
table.scrollTo({
left,
behavior: "smooth"
});
}
} catch (error) {
console.log(error);
}
},
headerMouseover(e) { headerMouseover(e) {
const { target } = e; const { target } = e;
if (target.classList.contains("enterprise-name-column")) return this.showClaim = true; if (target.classList.contains("enterprise-name-column")) return this.showClaim = true;
...@@ -620,7 +665,7 @@ export default { ...@@ -620,7 +665,7 @@ export default {
this.checkOwnerLabel = true; this.checkOwnerLabel = true;
this.currentOwnerLabels = []; this.currentOwnerLabels = [];
} }
if (val.length >= 2) { if (val.length < 2) {
this.tagCodeQueryType = "or"; this.tagCodeQueryType = "or";
} }
this.search(); this.search();
...@@ -743,11 +788,14 @@ export default { ...@@ -743,11 +788,14 @@ export default {
const params = this.createSearchConditions(); const params = this.createSearchConditions();
this.isSkeleton = true; this.isSkeleton = true;
api.searchOwnerUnitListApi(params).then(res => { api.searchOwnerUnitListApi(params).then(async res => {
if (res.code == 200) { if (res.code == 200) {
this.isSkeleton = false; this.isSkeleton = false;
this.tableData = res.data?.list ? res.data.list : []; this.tableData = res.data?.list ? res.data.list : [];
this.total = res.data?.total ? res.data?.total : 0; this.total = res.data?.total ? res.data?.total : 0;
this.addScrollXListener();
// 滚动条记忆
this.setScrollX();
} }
}).catch(error => { }).catch(error => {
}); });
...@@ -868,6 +916,14 @@ export default { ...@@ -868,6 +916,14 @@ export default {
} }
} }
} }
.checkbox {
.checkbox-content {
.el-checkbox {
margin-bottom: 15px;
}
}
}
} }
::v-deep .dialog-renlin { ::v-deep .dialog-renlin {
margin-top: 40vh !important; margin-top: 40vh !important;
...@@ -1150,6 +1206,7 @@ export default { ...@@ -1150,6 +1206,7 @@ export default {
align-items: center; align-items: center;
cursor: pointer; cursor: pointer;
opacity: 0; opacity: 0;
visibility: hidden;
transition: opacity 0.3s; transition: opacity 0.3s;
white-space: nowrap; white-space: nowrap;
.renling-img-true { .renling-img-true {
...@@ -1208,10 +1265,12 @@ export default { ...@@ -1208,10 +1265,12 @@ export default {
} }
.enterprise-name-row { .enterprise-name-row {
&:hover,
&.hover-row { &.hover-row {
.cell { .cell {
.renling-btn { .renling-btn {
opacity: 1; opacity: 1;
visibility: visible;
} }
} }
} }
......
...@@ -30,12 +30,12 @@ ...@@ -30,12 +30,12 @@
<div class="search"> <div class="search">
<el-form ref="queryForm" :model="queryParams" :inline="true" size="small"> <el-form ref="queryForm" :model="queryParams" :inline="true" size="small">
<el-form-item prop="address"> <el-form-item prop="address">
<el-select v-model="queryParams.address" @change="changeSelect1" clearable placeholder="项目地区" style="width: 120px;"> <el-select v-model="queryParams.address" :class="[`select-adaptive-${inputID1}`]" @change="iptAdaptive(inputID1,'','changeSelect1')" clearable placeholder="项目地区">
<el-option v-for="(item,index) in addressList" :key="index" :label="item.label" :value="item.id"></el-option> <el-option v-for="(item,index) in addressList" :key="index" :label="item.label" :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="type"> <el-form-item prop="type">
<el-select v-model="queryParams.type" @change="changeSelect1" multiple collapse-tags clearable placeholder="项目类型" :class="queryParams.type.length > 1 ? 'selectTag' : ''" style="width: 140px;"> <el-select v-model="queryParams.type" @change="iptAdaptive(inputID2,true,'changeSelect1')" :class="[`select-adaptive-${inputID2}`,queryParams.type.length > 1 ? 'selectTag' : '']" multiple collapse-tags clearable placeholder="项目类型">
<el-option v-for="(item,index) in projectType" :key="index" :label="item" :value="item"></el-option> <el-option v-for="(item,index) in projectType" :key="index" :label="item" :value="item"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
...@@ -43,9 +43,10 @@ ...@@ -43,9 +43,10 @@
<custom-time-select <custom-time-select
:timeList="timeList" :timeList="timeList"
v-model="queryParams.time" v-model="queryParams.time"
:class="[`select-adaptive-${inputID3}`]"
timeValue="近七天" timeValue="近七天"
placeholder="中标日期" placeholder="中标日期"
@handle-search="changeSelect1"/> @handle-search="iptAdaptive(inputID3,'','changeSelect1')"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
...@@ -103,16 +104,17 @@ ...@@ -103,16 +104,17 @@
<custom-money-select <custom-money-select
:moneyList="moneyList" :moneyList="moneyList"
v-model="queryParams1.money" v-model="queryParams1.money"
:class="[`select-adaptive-${inputID4}`]"
placeholder="中标金额" placeholder="中标金额"
@handle-search="changeSelect2" /> @handle-search="iptAdaptive(inputID4,'','changeSelect2')" />
</el-form-item> </el-form-item>
<el-form-item prop="address"> <el-form-item prop="address">
<el-select v-model="queryParams1.address" @change="changeSelect2" clearable placeholder="项目地区" style="width: 120px;"> <el-select v-model="queryParams1.address" :class="[`select-adaptive-${inputID5}`]" @change="iptAdaptive(inputID5,true,'changeSelect2')" clearable placeholder="项目地区">
<el-option v-for="(item,index) in addressList" :key="index" :label="item.label" :value="item.id"></el-option> <el-option v-for="(item,index) in addressList" :key="index" :label="item.label" :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="type"> <el-form-item prop="type">
<el-select v-model="queryParams1.type" multiple collapse-tags @change="changeSelect2" clearable placeholder="项目类型" :class="queryParams1.type.length > 1 ? 'selectTag' : ''" style="width: 140px;"> <el-select v-model="queryParams1.type" multiple collapse-tags @change="iptAdaptive(inputID6,'','changeSelect2')" :class="[`select-adaptive-${inputID6}`,queryParams1.type.length > 1 ? 'selectTag' : '']" clearable placeholder="项目类型">
<el-option v-for="(item,index) in projectType" :key="index" :label="item" :value="item"></el-option> <el-option v-for="(item,index) in projectType" :key="index" :label="item" :value="item"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
...@@ -120,9 +122,10 @@ ...@@ -120,9 +122,10 @@
<custom-time-select <custom-time-select
:timeList="timeList" :timeList="timeList"
v-model="queryParams1.time" v-model="queryParams1.time"
:class="[`select-adaptive-${inputID7}`]"
timeValue="近七天" timeValue="近七天"
placeholder="中标日期" placeholder="中标日期"
@handle-search="changeSelect2"/> @handle-search="iptAdaptive(inputID7,'','changeSelect2')"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
...@@ -239,17 +242,18 @@ ...@@ -239,17 +242,18 @@
<custom-money-select <custom-money-select
:moneyList="moneyList" :moneyList="moneyList"
v-model="amount" v-model="amount"
:class="[`select-adaptive-${inputID8}`]"
moneyValue="2亿以上" moneyValue="2亿以上"
:placeholder="placeholder" :placeholder="placeholder"
@handle-search="changeSelect3" /> @handle-search="iptAdaptive(inputID8,'','changeSelect3')" />
</el-form-item> </el-form-item>
<el-form-item prop="provinceId"> <el-form-item prop="provinceId">
<el-select v-model="queryParams2.provinceId" @change="changeSelect3" clearable placeholder="项目地区" style="width: 120px;"> <el-select v-model="queryParams2.provinceId" :class="[`select-adaptive-${inputID9}`]" @change="iptAdaptive(inputID9,'','changeSelect3')" clearable placeholder="项目地区">
<el-option v-for="(item,index) in addressList" :key="index" :label="item.label" :value="item.id"></el-option> <el-option v-for="(item,index) in addressList" :key="index" :label="item.label" :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="projects"> <el-form-item prop="projects">
<el-select v-model="queryParams2.projects" @change="changeSelect3" multiple collapse-tags clearable placeholder="项目类型" :class="queryParams2.projects.length > 1 ? 'selectTag' : ''" style="width: 140px;"> <el-select v-model="queryParams2.projects" @change="iptAdaptive(inputID10,'','changeSelect3')" multiple collapse-tags clearable placeholder="项目类型" :class="[`select-adaptive-${inputID10}`,queryParams2.projects.length > 1 ? 'selectTag' : '']">
<el-option v-for="(item,index) in projectType" :key="index" :label="item" :value="item"></el-option> <el-option v-for="(item,index) in projectType" :key="index" :label="item" :value="item"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
...@@ -257,9 +261,10 @@ ...@@ -257,9 +261,10 @@
<custom-time-select <custom-time-select
:timeList="timeList" :timeList="timeList"
v-model="queryParams2.time" v-model="queryParams2.time"
:class="[`select-adaptive-${inputID11}`]"
timeValue="近七天" timeValue="近七天"
:placeholder="timePlaceholder" :placeholder="timePlaceholder"
@handle-search="changeSelect3"/> @handle-search="iptAdaptive(inputID11,'','changeSelect3')"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
...@@ -474,6 +479,7 @@ ...@@ -474,6 +479,7 @@
import { countByCompany,bidRank,bigWinningBidsPage,bigBidPage,getInfo } from '@/api/index' import { countByCompany,bidRank,bigWinningBidsPage,bigBidPage,getInfo } from '@/api/index'
import { getUipIdByCid } from '@/api/macro/macro' import { getUipIdByCid } from '@/api/macro/macro'
import api from '@/api/radar/radar.js'; import api from '@/api/radar/radar.js';
import { v4 } from "uuid";
export default { export default {
name: "Index", name: "Index",
components: { components: {
...@@ -696,10 +702,22 @@ export default { ...@@ -696,10 +702,22 @@ export default {
{url:'/enterpriseData/Group',name:'集团户',imgUrl:require('@/assets/images/index/icon4.png')}, {url:'/enterpriseData/Group',name:'集团户',imgUrl:require('@/assets/images/index/icon4.png')},
{url:'/enterpriseData/Owner',name:'查城投平台',imgUrl:require('@/assets/images/index/icon5.png')}, {url:'/enterpriseData/Owner',name:'查城投平台',imgUrl:require('@/assets/images/index/icon5.png')},
{url:'/radar',name:'商机雷达',imgUrl:require('@/assets/images/index/icon6.png')}, {url:'/radar',name:'商机雷达',imgUrl:require('@/assets/images/index/icon6.png')},
] ],
inputID1:this.getUid(),
inputID2:this.getUid(),
inputID3:this.getUid(),
inputID4:this.getUid(),
inputID5:this.getUid(),
inputID6:this.getUid(),
inputID7:this.getUid(),
inputID8:this.getUid(),
inputID9:this.getUid(),
inputID10:this.getUid(),
inputID11:this.getUid(),
}; };
}, },
created() { created() {
this.getPlaceholder();
this.searchDic() this.searchDic()
this.getInfo() this.getInfo()
this.dataRegion() this.dataRegion()
...@@ -952,7 +970,7 @@ export default { ...@@ -952,7 +970,7 @@ export default {
yAxisIndex: 1, yAxisIndex: 1,
tooltip: { tooltip: {
valueFormatter: function (value) { valueFormatter: function (value) {
return value + '万元' return value
} }
}, },
itemStyle: { itemStyle: {
...@@ -971,7 +989,7 @@ export default { ...@@ -971,7 +989,7 @@ export default {
barWidth: 20, barWidth: 20,
tooltip: { tooltip: {
valueFormatter: function (value) { valueFormatter: function (value) {
return value + '个'; return value;
} }
}, },
itemStyle: { itemStyle: {
...@@ -1277,7 +1295,7 @@ export default { ...@@ -1277,7 +1295,7 @@ export default {
yAxisIndex: 1, yAxisIndex: 1,
tooltip: { tooltip: {
valueFormatter: function (value) { valueFormatter: function (value) {
return value + '万元' return value
} }
}, },
itemStyle: { itemStyle: {
...@@ -1296,7 +1314,7 @@ export default { ...@@ -1296,7 +1314,7 @@ export default {
barWidth: 20, barWidth: 20,
tooltip: { tooltip: {
valueFormatter: function (value) { valueFormatter: function (value) {
return value + '个'; return value;
} }
}, },
itemStyle: { itemStyle: {
...@@ -1477,7 +1495,129 @@ export default { ...@@ -1477,7 +1495,129 @@ export default {
default: default:
break; break;
} }
} },
handleSearch(name){
if(name === 'changeSelect1'){
this.changeSelect1()
}
if(name === 'changeSelect2'){
this.changeSelect2()
}
if(name === 'changeSelect3'){
this.changeSelect3()
}
},
async getPlaceholder() {
try {
await this.$nextTick();
const doms = document.querySelectorAll("[class*='select-adaptive-']");
if (doms?.length) {
doms.forEach(dom => {
const realStyles = window.getComputedStyle(dom);
const ipt = dom.querySelector("input");
const text = ipt.getAttribute("placeholder");
const textContainer = document.createElement("span");
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
const hasPadding = (parseInt(realStyles.paddingLeft) || parseInt(realStyles.paddingRight)) ? true : false;
hasPadding ? textContainer.style.setProperty("padding", realStyles.paddingRight) : null;
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = text;
document.body.append(textContainer);
// 加上按钮宽度 以及按钮左外边距
let containerWidth = textContainer.offsetWidth + 50;
textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`);
});
}
} catch (error) {
}
},
iptAdaptive(uid, multiple = false, name) {
multiple ? this.multipleAdaptiveHandle(uid,name) : this.iptAdaptiveHandle(uid,name);
},
getUid() {
return v4();
},
// 多选处理
async multipleAdaptiveHandle(uid,name) {
try {
await this.$nextTick();
const dom = document.querySelector(`.select-adaptive-${uid}`);
const iptChild = dom.querySelector(".el-input__inner");
if (dom) {
const textContainer = document.createElement("span");
const textName = `text-${uid}`;
textContainer.classList.add(textName);
const selectChildren = dom.querySelectorAll(".el-tag");
if (selectChildren.length) {
let width = 0;
selectChildren.forEach(item => {
const text = item.textContent;
const itemInfo = window.getComputedStyle(item);
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
textContainer.style.setProperty("padding", itemInfo.padding);
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = text;
document.body.append(textContainer);
width += textContainer.offsetWidth + parseInt(itemInfo.marginLeft) + parseInt(itemInfo.marginRight);
textContainer.remove();
});
dom.style.setProperty("width", `${width + 50}px`);
this.handleSearch(name);
return;
}
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
textContainer.style.setProperty("padding", "0px 8px");
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = iptChild.getAttribute("placeholder");
document.body.append(textContainer);
let containerWidth = textContainer.offsetWidth + 12 + 8;
// let containerWidth = 130;
textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`);
this.handleSearch(name);
}
} catch (error) {
console.log(error);
}
},
// 单选处理
async iptAdaptiveHandle(uid,name) {
try {
await this.$nextTick();
const dom = document.querySelector(`.select-adaptive-${uid}`);
const realStyles = window.getComputedStyle(dom);
if (dom) {
const iptChild = dom.querySelector(".el-input__inner");
const textContainer = document.createElement("span");
const textName = `text-${uid}`;
textContainer.classList.add(textName);
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
const hasPadding = (parseInt(realStyles.paddingLeft) || parseInt(realStyles.paddingRight)) ? true : false;
hasPadding ? textContainer.style.setProperty("padding", "0px 8px") : null;
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = iptChild.value ? iptChild.value : iptChild.getAttribute("placeholder");
document.body.append(textContainer);
let containerWidth = textContainer.offsetWidth + 50;
textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`);
}
this.handleSearch(name);
} catch (error) {
}
},
} }
}; };
</script> </script>
...@@ -1492,6 +1632,7 @@ export default { ...@@ -1492,6 +1632,7 @@ export default {
margin: 0; margin: 0;
} }
.home { .home {
@import "@/assets/styles/search-common.scss";
padding-bottom:24px; padding-bottom:24px;
::v-deep .el-row{ ::v-deep .el-row{
.el-col:nth-child(1){ .el-col:nth-child(1){
...@@ -1505,6 +1646,16 @@ export default { ...@@ -1505,6 +1646,16 @@ export default {
} }
.manage{ .manage{
::v-deep .el-form {
.el-select{
.el-select__tags {
flex-wrap: inherit;
.el-tag{
/*max-width: 130px;*/
}
}
}
}
.task-wrap{ .task-wrap{
height: 99px; height: 99px;
background: #FFFFFF; background: #FFFFFF;
...@@ -1752,6 +1903,9 @@ export default { ...@@ -1752,6 +1903,9 @@ export default {
.el-form-item--small.el-form-item { .el-form-item--small.el-form-item {
margin-bottom: 0; margin-bottom: 0;
} }
.el-select{
width: 108px;
}
} }
} }
.list{ .list{
...@@ -1796,15 +1950,6 @@ export default { ...@@ -1796,15 +1950,6 @@ export default {
.pagination-box{ .pagination-box{
padding: 16px; padding: 16px;
} }
::v-deep .selectTag{
.el-select__tags{
.el-tag{
&:first-child{
width: 65px;
}
}
}
}
} }
.empty{ .empty{
margin: 0 auto; margin: 0 auto;
......
...@@ -253,9 +253,8 @@ export default { ...@@ -253,9 +253,8 @@ export default {
<style lang="scss"> <style lang="scss">
.custom-time-select { .custom-time-select {
width: 120px; width: 110px;
height: 34px; height: 34px;
.rote { .rote {
.el-input__inner{ .el-input__inner{
background: #F4F6F9; background: #F4F6F9;
......
...@@ -653,13 +653,18 @@ export default { ...@@ -653,13 +653,18 @@ export default {
.el-form-item{ .el-form-item{
margin: 0 !important; margin: 0 !important;
.form-content-width{ .form-content-width{
width: 110px; width: 80px;
} }
::v-deep .el-input{ ::v-deep .el-input{
.el-input__inner{ .el-input__inner{
border: 0; border: 0;
} }
} }
::v-deep .is-focus{
.el-input__inner{
background: #F4F6F9;
}
}
} }
} }
.table-item{ .table-item{
......
...@@ -348,13 +348,18 @@ export default { ...@@ -348,13 +348,18 @@ export default {
.el-form-item{ .el-form-item{
margin: 0 !important; margin: 0 !important;
.form-content-width{ .form-content-width{
width: 100px; width: 80px;
} }
::v-deep .el-input{ ::v-deep .el-input{
.el-input__inner{ .el-input__inner{
border: 0; border: 0;
} }
} }
::v-deep .is-focus{
.el-input__inner{
background: #F4F6F9;
}
}
} }
} }
.content{ .content{
......
...@@ -36,18 +36,18 @@ ...@@ -36,18 +36,18 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="gdp" label="GDP(亿元)" sortable width="120" :formatter="formatStatus"/> <el-table-column prop="gdp" label="GDP(亿元)" sortable="custom" width="120" :formatter="formatStatus"/>
<el-table-column prop="gdpGrowth" label="GDP增速(%)" sortable width="130" :formatter="formatStatus"/> <el-table-column prop="gdpGrowth" label="GDP增速(%)" sortable="custom" width="130" :formatter="formatStatus"/>
<el-table-column prop="gdpPerCapita" label="人均GDP(元)" sortable width="130" :formatter="formatStatus"/> <el-table-column prop="gdpPerCapita" label="人均GDP(元)" sortable="custom" width="130" :formatter="formatStatus"/>
<el-table-column prop="population" label="人口(万人)" sortable width="120" :formatter="formatStatus"/> <el-table-column prop="population" label="人口(万人)" sortable="custom" width="120" :formatter="formatStatus"/>
<el-table-column prop="fixedInvestment" label="固定资产投资 (亿元) " sortable width="200" :formatter="formatStatus"/> <el-table-column prop="fixedInvestment" label="固定资产投资 (亿元) " sortable="custom" width="200" :formatter="formatStatus"/>
<el-table-column prop="gbr" label="一般公共预算收入(亿元)" sortable width="200" :formatter="formatStatus"/> <el-table-column prop="gbr" label="一般公共预算收入(亿元)" sortable="custom" width="200" :formatter="formatStatus"/>
<el-table-column prop="gbe" label="一般公共预算支出(亿元)" sortable width="200" :formatter="formatStatus"/> <el-table-column prop="gbe" label="一般公共预算支出(亿元)" sortable="custom" width="200" :formatter="formatStatus"/>
<el-table-column prop="govFundIncome" label="政府性基金收入(亿元)" sortable width="200" :formatter="formatStatus"/> <el-table-column prop="govFundIncome" label="政府性基金收入(亿元)" sortable="custom" width="200" :formatter="formatStatus"/>
<el-table-column prop="govDebtBalance" label="地方政府债务余额(亿元)" sortable width="200" :formatter="formatStatus"/> <el-table-column prop="govDebtBalance" label="地方政府债务余额(亿元)" sortable="custom" width="200" :formatter="formatStatus"/>
<el-table-column prop="uipInterestBearingDebt" label="城投平台有息债务(亿元)" sortable width="200" :formatter="formatStatus"/> <el-table-column prop="uipInterestBearingDebt" label="城投平台有息债务(亿元)" sortable="custom" width="200" :formatter="formatStatus"/>
<el-table-column prop="fiscalSelfSufficiencyRate" label="财政自给率(%)" sortable width="150" :formatter="formatStatus"/> <el-table-column prop="fiscalSelfSufficiencyRate" label="财政自给率(%)" sortable="custom" width="150" :formatter="formatStatus"/>
<el-table-column prop="govDebtRateWild" label="债务率-宽口径(%)" sortable width="170" :formatter="formatStatus"/> <el-table-column prop="govDebtRateWild" label="债务率-宽口径(%)" sortable="custom" width="170" :formatter="formatStatus"/>
</el-table> </el-table>
</div> </div>
<div class="pagination-box" v-if="show_page && tableDataTotal>pageSize"> <div class="pagination-box" v-if="show_page && tableDataTotal>pageSize">
...@@ -193,17 +193,22 @@ export default { ...@@ -193,17 +193,22 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.regionalEconomy{ .regionalEconomy{
.el-form{ .el-form{
/*margin-left: 24px;*/ margin-left: 16px;
.el-form-item{ .el-form-item{
margin: 0 !important; margin: 0 !important;
.form-content-width{ .form-content-width{
width: 100px; width: 80px;
} }
::v-deep .el-input{ ::v-deep .el-input{
.el-input__inner{ .el-input__inner{
border: 0; border: 0;
} }
} }
::v-deep .is-focus{
.el-input__inner{
background: #F4F6F9;
}
}
} }
} }
.content{ .content{
......
...@@ -223,10 +223,10 @@ export default { ...@@ -223,10 +223,10 @@ export default {
page:this.pageIndex, page:this.pageIndex,
} }
if(this.queryParams.field){ if(this.queryParams.field){
params.field=this.queryParams.field params.page.field=this.queryParams.field
} }
if(this.queryParams.order){ if(this.queryParams.order){
params.order=this.queryParams.order params.page.order=this.queryParams.order
} }
params.aptitudeQueryDto={ params.aptitudeQueryDto={
filePlaceType:this.activeName === 'first' ? 3 : 2, filePlaceType:this.activeName === 'first' ? 3 : 2,
...@@ -399,7 +399,7 @@ export default { ...@@ -399,7 +399,7 @@ export default {
width += textContainer.offsetWidth + parseInt(itemInfo.marginLeft) + parseInt(itemInfo.marginRight); width += textContainer.offsetWidth + parseInt(itemInfo.marginLeft) + parseInt(itemInfo.marginRight);
textContainer.remove(); textContainer.remove();
}); });
dom.style.setProperty("width", `${width + 60}px`); dom.style.setProperty("width", `${width + 50}px`);
this.handleSearch(name); this.handleSearch(name);
return; return;
} }
...@@ -411,7 +411,7 @@ export default { ...@@ -411,7 +411,7 @@ export default {
textContainer.textContent = iptChild.getAttribute("placeholder"); textContainer.textContent = iptChild.getAttribute("placeholder");
document.body.append(textContainer); document.body.append(textContainer);
// let containerWidth = textContainer.offsetWidth + 12 + 8; // let containerWidth = textContainer.offsetWidth + 12 + 8;
let containerWidth = 120; let containerWidth = 110;
textContainer.remove(); textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`); dom.style.setProperty("width", `${containerWidth}px`);
this.handleSearch(name); this.handleSearch(name);
...@@ -509,7 +509,7 @@ export default { ...@@ -509,7 +509,7 @@ export default {
float: left; float: left;
} }
::v-deep .el-cascader{ ::v-deep .el-cascader{
width: 120px; width: 110px;
margin-right: 12px; margin-right: 12px;
height: 34px; height: 34px;
line-height: 34px !important; line-height: 34px !important;
......
...@@ -397,8 +397,7 @@ export default { ...@@ -397,8 +397,7 @@ export default {
}); });
}, },
addressListbtn(data) { addressListbtn(data) {
this.province=data.province; this.province=data.province; this.provinceId=data.provinceId;
this.provinceId=data.provinceId;
this.dataQuery.province=data.provinces; this.dataQuery.province=data.provinces;
let params={} let params={}
if(data){ if(data){
......
...@@ -41,34 +41,34 @@ ...@@ -41,34 +41,34 @@
<el-table-column label="特级" align="right"> <el-table-column label="特级" align="right">
<el-table-column prop="tjCount" label="数量" align="right"> <el-table-column prop="tjCount" label="数量" align="right">
<template slot-scope="scope">{{ scope.row.tjCount }}</template> <template slot-scope="scope">{{ scope.row.tjCount }}{{ scope.row.tjCount ? '个':'--' }}</template>
</el-table-column> </el-table-column>
<el-table-column prop="tjRate" label="占比" align="right"> <el-table-column prop="tjRate" label="占比" align="right">
<template slot-scope="scope">{{ scope.row.tjRate }}%</template> <template slot-scope="scope">{{ scope.row.tjRate }}{{ scope.row.tjRate ? '%':'--' }}</template>
</el-table-column> </el-table-column>
</el-table-column> </el-table-column>
<el-table-column label="一级" align="right"> <el-table-column label="一级" align="right">
<el-table-column prop="oneCount" label="数量" align="right"> <el-table-column prop="oneCount" label="数量" align="right">
<template slot-scope="scope">{{ scope.row.oneCount }}</template> <template slot-scope="scope">{{ scope.row.oneCount }}{{ scope.row.oneCount ? '个':'--' }}</template>
</el-table-column> </el-table-column>
<el-table-column prop="oneRate" label="占比" align="right"> <el-table-column prop="oneRate" label="占比" align="right">
<template slot-scope="scope">{{ scope.row.oneRate }}%</template> <template slot-scope="scope">{{ scope.row.oneRate }}{{ scope.row.oneRate ? '%':'--' }}</template>
</el-table-column> </el-table-column>
</el-table-column> </el-table-column>
<el-table-column label="二级" align="right"> <el-table-column label="二级" align="right">
<el-table-column prop="twoCount" label="数量" align="right"> <el-table-column prop="twoCount" label="数量" align="right">
<template slot-scope="scope">{{ scope.row.twoCount }}</template> <template slot-scope="scope">{{ scope.row.twoCount }}{{ scope.row.twoCount ? '个':'--' }}</template>
</el-table-column> </el-table-column>
<el-table-column prop="twoRate" label="占比" align="right"> <el-table-column prop="twoRate" label="占比" align="right">
<template slot-scope="scope">{{ scope.row.twoRate }}%</template> <template slot-scope="scope">{{ scope.row.twoRate }}{{ scope.row.twoRate ? '%':'--' }}</template>
</el-table-column> </el-table-column>
</el-table-column> </el-table-column>
<el-table-column label="三级" align="right"> <el-table-column label="三级" align="right">
<el-table-column prop="threeCount" label="数量" align="right"> <el-table-column prop="threeCount" label="数量" align="right">
<template slot-scope="scope">{{ scope.row.threeCount }}</template> <template slot-scope="scope">{{ scope.row.threeCount }}{{ scope.row.threeCount ? '个':'--' }}</template>
</el-table-column> </el-table-column>
<el-table-column prop="threeRate" label="占比" align="right"> <el-table-column prop="threeRate" label="占比" align="right">
<template slot-scope="scope">{{ scope.row.threeRate }}%</template> <template slot-scope="scope">{{ scope.row.threeRate }}{{ scope.row.threeRate ? '%':'--' }}</template>
</el-table-column> </el-table-column>
</el-table-column> </el-table-column>
</el-table> </el-table>
......
...@@ -485,10 +485,10 @@ ...@@ -485,10 +485,10 @@
} }
.form-content-width{ .form-content-width{
width: 90px; width: 80px;
} }
::v-deep .el-cascader{ ::v-deep .el-cascader{
width: 180px; width: 106px;
.el-cascader__tags{ .el-cascader__tags{
flex-wrap: inherit; flex-wrap: inherit;
.el-tag{ .el-tag{
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<div class="flex-box query-box"> <div class="flex-box query-box">
<div class="flex-box query-params"> <div class="flex-box query-params">
<span class="common-title">全国土地交易项目供应方式</span> <span class="common-title">全国土地交易项目供应方式</span>
<el-select v-model="years" @change="handleYears(1)" multiple collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small"> <el-select v-model="years" @change="iptAdaptive(inputID1,true,1)" :class="[`select-adaptive-${inputID1}`]" multiple collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small">
<el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" /> <el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
<div class="flex-box query-box"> <div class="flex-box query-box">
<div class="flex-box query-params"> <div class="flex-box query-params">
<span class="common-title">全国土地交易项目土地用途</span> <span class="common-title">全国土地交易项目土地用途</span>
<el-select v-model="years1" @change="handleYears(2)" multiple collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small"> <el-select v-model="years1" @change="iptAdaptive(inputID2,true,2)" :class="[`select-adaptive-${inputID2}`]" multiple collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small">
<el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" /> <el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
...@@ -92,10 +92,10 @@ ...@@ -92,10 +92,10 @@
<div class="flex-box query-box"> <div class="flex-box query-box">
<div class="flex-box query-params"> <div class="flex-box query-params">
<span class="common-title">全国土地交易项目地区Top10</span> <span class="common-title">全国土地交易项目地区Top10</span>
<el-select @change="handleYears(3)" style="margin-right: 8px" v-model="address" multiple collapse-tags filterable class="form-content-width" placeholder="地区筛选" :popper-append-to-body='false' size="small"> <el-select @change="iptAdaptive(inputID3,true,3)" :class="[`select-adaptive-${inputID3}`]" style="margin-right: 8px" v-model="address" multiple collapse-tags filterable class="form-content-width" placeholder="地区筛选" :popper-append-to-body='false' size="small">
<el-option v-for="(item, index) in addressList" :key="index" :label="item.label" :value="item.id" /> <el-option v-for="(item, index) in addressList" :key="index" :label="item.label" :value="item.id" />
</el-select> </el-select>
<el-select v-model="years2" @change="handleYears(3)" multiple collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small"> <el-select v-model="years2" @change="iptAdaptive(inputID3,true,3)" :class="[`select-adaptive-${inputID4}`]" multiple collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small">
<el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" /> <el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
...@@ -177,6 +177,7 @@ ...@@ -177,6 +177,7 @@
import dataRegion from '@/assets/json/dataRegion' import dataRegion from '@/assets/json/dataRegion'
import { countLandMarketByType,countLandMarketByProvince,countLandMarketByYear } from '@/api/macro/macro' import { countLandMarketByType,countLandMarketByProvince,countLandMarketByYear } from '@/api/macro/macro'
import skeleton from '../../component/skeleton' import skeleton from '../../component/skeleton'
import { v4 } from "uuid";
export default { export default {
name: 'NationalEconomies', name: 'NationalEconomies',
components: { components: {
...@@ -203,11 +204,14 @@ export default { ...@@ -203,11 +204,14 @@ export default {
tdytState:true, tdytState:true,
topState:true, topState:true,
nftjState:true, nftjState:true,
// typeName:['住宅用地','工业用地','城镇住宅用地','其他商服用地','公共设施用地','公路用地','城镇村道路用地','公园与绿地', inputID1:this.getUid(),
// '工矿仓储用地','零售商业用地','科研用地','街巷用地','机关团体用地','商服用地','商务金融用地'] inputID2:this.getUid(),
inputID3:this.getUid(),
inputID4:this.getUid(),
} }
}, },
created() { created() {
this.getPlaceholder()
this.dataRegion() this.dataRegion()
this.yearsData() this.yearsData()
...@@ -726,7 +730,116 @@ export default { ...@@ -726,7 +730,116 @@ export default {
}); });
return sums; return sums;
}, },
async getPlaceholder() {
try {
await this.$nextTick();
const doms = document.querySelectorAll("[class*='select-adaptive-']");
if (doms?.length) {
doms.forEach(dom => {
const realStyles = window.getComputedStyle(dom);
const ipt = dom.querySelector("input");
const text = ipt.getAttribute("placeholder");
const textContainer = document.createElement("span");
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
const hasPadding = (parseInt(realStyles.paddingLeft) || parseInt(realStyles.paddingRight)) ? true : false;
hasPadding ? textContainer.style.setProperty("padding", realStyles.paddingRight) : null;
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = text;
document.body.append(textContainer);
// 加上按钮宽度 以及按钮左外边距
let containerWidth = textContainer.offsetWidth + 50;
textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`);
});
}
} catch (error) {
}
},
iptAdaptive(uid, multiple = false, key) {
multiple ? this.multipleAdaptiveHandle(uid,key) : this.iptAdaptiveHandle(uid,key);
},
getUid() {
return v4();
},
// 多选处理
async multipleAdaptiveHandle(uid,key) {
try {
await this.$nextTick();
const dom = document.querySelector(`.select-adaptive-${uid}`);
const iptChild = dom.querySelector(".el-input__inner");
if (dom) {
const textContainer = document.createElement("span");
const textName = `text-${uid}`;
textContainer.classList.add(textName);
const selectChildren = dom.querySelectorAll(".el-tag");
if (selectChildren.length) {
let width = 0;
selectChildren.forEach(item => {
const text = item.textContent;
const itemInfo = window.getComputedStyle(item);
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
textContainer.style.setProperty("padding", itemInfo.padding);
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = text;
document.body.append(textContainer);
width += textContainer.offsetWidth + parseInt(itemInfo.marginLeft) + parseInt(itemInfo.marginRight);
textContainer.remove();
});
dom.style.setProperty("width", `${width + 50}px`);
this.handleYears(key);
return;
}
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
textContainer.style.setProperty("padding", "0px 8px");
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = iptChild.getAttribute("placeholder");
document.body.append(textContainer);
let containerWidth = textContainer.offsetWidth + 30;
textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`);
this.handleYears(key);
}
} catch (error) {
console.log(error);
}
},
// 单选处理
async iptAdaptiveHandle(uid,key) {
try {
await this.$nextTick();
const dom = document.querySelector(`.select-adaptive-${uid}`);
const realStyles = window.getComputedStyle(dom);
if (dom) {
const iptChild = dom.querySelector(".el-input__inner");
const textContainer = document.createElement("span");
const textName = `text-${uid}`;
textContainer.classList.add(textName);
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
const hasPadding = (parseInt(realStyles.paddingLeft) || parseInt(realStyles.paddingRight)) ? true : false;
hasPadding ? textContainer.style.setProperty("padding", "0px 8px") : null;
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = iptChild.value ? iptChild.value : iptChild.getAttribute("placeholder");
document.body.append(textContainer);
let containerWidth = textContainer.offsetWidth + 50;
textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`);
}
this.handleYears(key);
} catch (error) {
}
},
} }
} }
</script> </script>
...@@ -747,6 +860,7 @@ export default { ...@@ -747,6 +860,7 @@ export default {
color: #0081FF; color: #0081FF;
} }
.tdjy{ .tdjy{
@import "@/assets/styles/search-common.scss";
.text_p{ .text_p{
color: #999999; color: #999999;
font-size: 14px; font-size: 14px;
...@@ -772,7 +886,7 @@ export default { ...@@ -772,7 +886,7 @@ export default {
margin-right: 24px; margin-right: 24px;
} }
::v-deep .form-content-width{ ::v-deep .form-content-width{
width: 135px; width: 95px;
.el-select__input{ .el-select__input{
width: 10px !important; width: 10px !important;
max-width: 10px !important; max-width: 10px !important;
...@@ -789,6 +903,12 @@ export default { ...@@ -789,6 +903,12 @@ export default {
background: #F4F6F9; background: #F4F6F9;
} }
} }
.el-select__tags {
flex-wrap: inherit;
.el-tag{
/*max-width: 130px;*/
}
}
} }
::v-deep .el-cascader{ ::v-deep .el-cascader{
width: 220px; width: 220px;
......
...@@ -38,10 +38,10 @@ ...@@ -38,10 +38,10 @@
<div class="flex-box query-box"> <div class="flex-box query-box">
<div class="flex-box query-params"> <div class="flex-box query-params">
<span class="common-title">全国各地区招标统计TOP10</span> <span class="common-title">全国各地区招标统计TOP10</span>
<el-select @change="handleYears(1)" style="margin-right: 8px" v-model="address" multiple collapse-tags filterable class="form-content-width" placeholder="地区筛选" :popper-append-to-body='false' size="small"> <el-select @change="iptAdaptive(inputID1,true,1)" style="margin-right: 8px" :class="[`select-adaptive-${inputID1}`]" v-model="address" multiple collapse-tags filterable class="form-content-width" placeholder="地区筛选" :popper-append-to-body='false' size="small">
<el-option v-for="(item, index) in addressList" :key="index" :label="item.label" :value="item.id" /> <el-option v-for="(item, index) in addressList" :key="index" :label="item.label" :value="item.id" />
</el-select> </el-select>
<el-select v-model="years1" @change="handleYears(1)" multiple collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small"> <el-select v-model="years1" @change="iptAdaptive(inputID2,true,1)" multiple collapse-tags filterable :class="[`select-adaptive-${inputID2}`]" class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small">
<el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" /> <el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
...@@ -83,7 +83,7 @@ ...@@ -83,7 +83,7 @@
<div class="flex-box query-box"> <div class="flex-box query-box">
<div class="flex-box query-params"> <div class="flex-box query-params">
<span class="common-title">全国各年度招标月份统计</span> <span class="common-title">全国各年度招标月份统计</span>
<el-select v-model="years2" @change="handleYears(2)" collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small"> <el-select v-model="years2" @change="iptAdaptive(inputID3,'',2)" :class="[`select-adaptive-${inputID3}`]" style="width: 80px;" collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small">
<el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" /> <el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
...@@ -130,6 +130,7 @@ ...@@ -130,6 +130,7 @@
import dataRegion from '@/assets/json/dataRegion' import dataRegion from '@/assets/json/dataRegion'
import { countNewsBidByYear,countNewsBidByProvince,countNewsBidByMonth } from '@/api/macro/macro' import { countNewsBidByYear,countNewsBidByProvince,countNewsBidByMonth } from '@/api/macro/macro'
import skeleton from '../../component/skeleton' import skeleton from '../../component/skeleton'
import { v4 } from "uuid";
export default { export default {
name: 'NationalEconomies', name: 'NationalEconomies',
components: { components: {
...@@ -152,9 +153,13 @@ ...@@ -152,9 +153,13 @@
isSkeleton:true, isSkeleton:true,
gyflState:true, gyflState:true,
tdytState:true, tdytState:true,
inputID1:this.getUid(),
inputID2:this.getUid(),
inputID3:this.getUid(),
} }
}, },
created() { created() {
this.getPlaceholder()
this.dataRegion() this.dataRegion()
this.yearsData() this.yearsData()
this.getcountNewsBidByYear() this.getcountNewsBidByYear()
...@@ -613,7 +618,116 @@ ...@@ -613,7 +618,116 @@
}); });
return sums; return sums;
}, },
async getPlaceholder() {
try {
await this.$nextTick();
const doms = document.querySelectorAll("[class*='select-adaptive-']");
if (doms?.length) {
doms.forEach(dom => {
const realStyles = window.getComputedStyle(dom);
const ipt = dom.querySelector("input");
const text = ipt.getAttribute("placeholder");
const textContainer = document.createElement("span");
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
const hasPadding = (parseInt(realStyles.paddingLeft) || parseInt(realStyles.paddingRight)) ? true : false;
hasPadding ? textContainer.style.setProperty("padding", realStyles.paddingRight) : null;
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = text;
document.body.append(textContainer);
// 加上按钮宽度 以及按钮左外边距
let containerWidth = textContainer.offsetWidth + 50;
textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`);
});
}
} catch (error) {
}
},
iptAdaptive(uid, multiple = false, key) {
multiple ? this.multipleAdaptiveHandle(uid,key) : this.iptAdaptiveHandle(uid,key);
},
getUid() {
return v4();
},
// 多选处理
async multipleAdaptiveHandle(uid,key) {
try {
await this.$nextTick();
const dom = document.querySelector(`.select-adaptive-${uid}`);
const iptChild = dom.querySelector(".el-input__inner");
if (dom) {
const textContainer = document.createElement("span");
const textName = `text-${uid}`;
textContainer.classList.add(textName);
const selectChildren = dom.querySelectorAll(".el-tag");
if (selectChildren.length) {
let width = 0;
selectChildren.forEach(item => {
const text = item.textContent;
const itemInfo = window.getComputedStyle(item);
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
textContainer.style.setProperty("padding", itemInfo.padding);
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = text;
document.body.append(textContainer);
width += textContainer.offsetWidth + parseInt(itemInfo.marginLeft) + parseInt(itemInfo.marginRight);
textContainer.remove();
});
dom.style.setProperty("width", `${width + 50}px`);
this.handleYears(key);
return;
}
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
textContainer.style.setProperty("padding", "0px 8px");
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = iptChild.getAttribute("placeholder");
document.body.append(textContainer);
let containerWidth = textContainer.offsetWidth + 30;
textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`);
this.handleYears(key);
}
} catch (error) {
console.log(error);
}
},
// 单选处理
async iptAdaptiveHandle(uid,key) {
try {
await this.$nextTick();
const dom = document.querySelector(`.select-adaptive-${uid}`);
const realStyles = window.getComputedStyle(dom);
if (dom) {
const iptChild = dom.querySelector(".el-input__inner");
const textContainer = document.createElement("span");
const textName = `text-${uid}`;
textContainer.classList.add(textName);
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
const hasPadding = (parseInt(realStyles.paddingLeft) || parseInt(realStyles.paddingRight)) ? true : false;
hasPadding ? textContainer.style.setProperty("padding", "0px 8px") : null;
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = iptChild.value ? iptChild.value : iptChild.getAttribute("placeholder");
document.body.append(textContainer);
let containerWidth = textContainer.offsetWidth + 50;
textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`);
}
this.handleYears(key);
} catch (error) {
}
},
} }
} }
</script> </script>
...@@ -634,6 +748,7 @@ ...@@ -634,6 +748,7 @@
color: #0081FF; color: #0081FF;
} }
.tdjy{ .tdjy{
@import "@/assets/styles/search-common.scss";
.text_p{ .text_p{
color: #999999; color: #999999;
font-size: 14px; font-size: 14px;
...@@ -659,7 +774,7 @@ ...@@ -659,7 +774,7 @@
margin-right: 24px; margin-right: 24px;
} }
::v-deep .form-content-width{ ::v-deep .form-content-width{
width: 145px; width: 95px;
.el-select__input{ .el-select__input{
width: 10px !important; width: 10px !important;
max-width: 10px !important; max-width: 10px !important;
...@@ -675,6 +790,12 @@ ...@@ -675,6 +790,12 @@
background: #F4F6F9; background: #F4F6F9;
} }
} }
.el-select__tags {
flex-wrap: inherit;
.el-tag{
/*max-width: 130px;*/
}
}
} }
::v-deep .el-cascader{ ::v-deep .el-cascader{
width: 220px; width: 220px;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<div class="flex-box query-box"> <div class="flex-box query-box">
<div class="flex-box query-params"> <div class="flex-box query-params">
<span class="common-title">全国中标项目统计</span> <span class="common-title">全国中标项目统计</span>
<el-select v-model="years" @change="handleYears(1)" multiple collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small"> <el-select v-model="years" @change="iptAdaptive(inputID1,true,1)" :class="[`select-adaptive-${inputID1}`]" multiple collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small">
<el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" /> <el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
<div class="flex-box query-box"> <div class="flex-box query-box">
<div class="flex-box query-params"> <div class="flex-box query-params">
<span class="common-title">全国各地区中标统计TOP10</span> <span class="common-title">全国各地区中标统计TOP10</span>
<el-select v-model="years1" @change="handleYears(2)" multiple collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small"> <el-select v-model="years1" @change="iptAdaptive(inputID2,true,2)" :class="[`select-adaptive-${inputID2}`]" multiple collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small">
<el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" /> <el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
<div class="flex-box query-box"> <div class="flex-box query-box">
<div class="flex-box query-params"> <div class="flex-box query-params">
<span class="common-title">全国中标金额分析</span> <span class="common-title">全国中标金额分析</span>
<el-select v-model="years2" @change="handleYears(3)" multiple collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small"> <el-select v-model="years2" @change="iptAdaptive(inputID3,true,3)" :class="[`select-adaptive-${inputID3}`]" multiple collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small">
<el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" /> <el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
...@@ -183,7 +183,7 @@ ...@@ -183,7 +183,7 @@
<div class="flex-box query-box"> <div class="flex-box query-box">
<div class="flex-box query-params"> <div class="flex-box query-params">
<span class="common-title">全国中标下浮率分析</span> <span class="common-title">全国中标下浮率分析</span>
<el-select v-model="years3" @change="handleYears(5)" collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small"> <el-select v-model="years3" @change="iptAdaptive(inputID4,'',5)" :class="[`select-adaptive-${inputID4}`]" collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small">
<el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" /> <el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
...@@ -226,10 +226,10 @@ ...@@ -226,10 +226,10 @@
<div class="flex-box query-box"> <div class="flex-box query-box">
<div class="flex-box query-params"> <div class="flex-box query-params">
<span class="common-title">全国中标业绩项目类型下浮率</span> <span class="common-title">全国中标业绩项目类型下浮率</span>
<el-select @change="handleYears(6)" style="margin-right: 8px" v-model="address" clearable collapse-tags filterable class="form-content-width" placeholder="地区筛选" :popper-append-to-body='false' size="small"> <el-select @change="iptAdaptive(inputID5,'',6)" :class="[`select-adaptive-${inputID5}`]" style="margin-right: 8px" v-model="address" clearable collapse-tags filterable class="form-content-width" placeholder="地区筛选" :popper-append-to-body='false' size="small">
<el-option v-for="(item, index) in addressList" :key="index" :label="item.label" :value="item.id" /> <el-option v-for="(item, index) in addressList" :key="index" :label="item.label" :value="item.id" />
</el-select> </el-select>
<el-select v-model="years4" @change="handleYears(6)" collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small"> <el-select v-model="years4" @change="iptAdaptive(inputID6,'',6)" :class="[`select-adaptive-${inputID6}`]" collapse-tags filterable class="form-content-width" placeholder="请选择" :popper-append-to-body='false' size="small">
<el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" /> <el-option v-for="(item, index) in yearOptions" :key="index" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
...@@ -279,6 +279,7 @@ ...@@ -279,6 +279,7 @@
import dataRegion from '@/assets/json/dataRegion' import dataRegion from '@/assets/json/dataRegion'
import { countBidByType,countBidGroupByProvince,rangeBidMoney,rangeBidFiveYears,lowerRateByYear,lowerRangeTenderType } from '@/api/macro/macro' import { countBidByType,countBidGroupByProvince,rangeBidMoney,rangeBidFiveYears,lowerRateByYear,lowerRangeTenderType } from '@/api/macro/macro'
import skeleton from '../../component/skeleton' import skeleton from '../../component/skeleton'
import { v4 } from "uuid";
export default { export default {
name: 'NationalEconomies', name: 'NationalEconomies',
components: { components: {
...@@ -306,9 +307,16 @@ ...@@ -306,9 +307,16 @@
qsfxState:true, qsfxState:true,
xflState:true, xflState:true,
xmlxState:true, xmlxState:true,
inputID1:this.getUid(),
inputID2:this.getUid(),
inputID3:this.getUid(),
inputID4:this.getUid(),
inputID5:this.getUid(),
inputID6:this.getUid(),
} }
}, },
created() { created() {
this.getPlaceholder()
this.dataRegion() this.dataRegion()
this.yearsData() this.yearsData()
this.getCountBidByType() this.getCountBidByType()
...@@ -521,7 +529,7 @@ ...@@ -521,7 +529,7 @@
yAxisIndex: 1, yAxisIndex: 1,
tooltip: { tooltip: {
valueFormatter: function (value) { valueFormatter: function (value) {
return value + '万元' return value
} }
}, },
itemStyle: { itemStyle: {
...@@ -535,7 +543,7 @@ ...@@ -535,7 +543,7 @@
barWidth: 20, barWidth: 20,
tooltip: { tooltip: {
valueFormatter: function (value) { valueFormatter: function (value) {
return value + '个'; return value;
} }
}, },
itemStyle: { itemStyle: {
...@@ -783,7 +791,7 @@ ...@@ -783,7 +791,7 @@
yAxisIndex: 1, yAxisIndex: 1,
tooltip: { tooltip: {
valueFormatter: function (value) { valueFormatter: function (value) {
return value + '万元' return value
} }
}, },
itemStyle: { itemStyle: {
...@@ -797,7 +805,7 @@ ...@@ -797,7 +805,7 @@
barWidth: 20, barWidth: 20,
tooltip: { tooltip: {
valueFormatter: function (value) { valueFormatter: function (value) {
return value + '个'; return value;
} }
}, },
itemStyle: { itemStyle: {
...@@ -1160,13 +1168,123 @@ ...@@ -1160,13 +1168,123 @@
}); });
return sums; return sums;
}, },
async getPlaceholder() {
try {
await this.$nextTick();
const doms = document.querySelectorAll("[class*='select-adaptive-']");
if (doms?.length) {
doms.forEach(dom => {
const realStyles = window.getComputedStyle(dom);
const ipt = dom.querySelector("input");
const text = ipt.getAttribute("placeholder");
const textContainer = document.createElement("span");
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
const hasPadding = (parseInt(realStyles.paddingLeft) || parseInt(realStyles.paddingRight)) ? true : false;
hasPadding ? textContainer.style.setProperty("padding", realStyles.paddingRight) : null;
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = text;
document.body.append(textContainer);
// 加上按钮宽度 以及按钮左外边距
let containerWidth = textContainer.offsetWidth + 50;
textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`);
});
}
} catch (error) {
}
},
iptAdaptive(uid, multiple = false, key) {
multiple ? this.multipleAdaptiveHandle(uid,key) : this.iptAdaptiveHandle(uid,key);
},
getUid() {
return v4();
},
// 多选处理
async multipleAdaptiveHandle(uid,key) {
try {
await this.$nextTick();
const dom = document.querySelector(`.select-adaptive-${uid}`);
const iptChild = dom.querySelector(".el-input__inner");
if (dom) {
const textContainer = document.createElement("span");
const textName = `text-${uid}`;
textContainer.classList.add(textName);
const selectChildren = dom.querySelectorAll(".el-tag");
if (selectChildren.length) {
let width = 0;
selectChildren.forEach(item => {
const text = item.textContent;
const itemInfo = window.getComputedStyle(item);
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
textContainer.style.setProperty("padding", itemInfo.padding);
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = text;
document.body.append(textContainer);
width += textContainer.offsetWidth + parseInt(itemInfo.marginLeft) + parseInt(itemInfo.marginRight);
textContainer.remove();
});
dom.style.setProperty("width", `${width + 50}px`);
this.handleYears(key);
return;
}
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
textContainer.style.setProperty("padding", "0px 8px");
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = iptChild.getAttribute("placeholder");
document.body.append(textContainer);
let containerWidth = textContainer.offsetWidth + 30;
textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`);
this.handleYears(key);
}
} catch (error) {
console.log(error);
}
},
// 单选处理
async iptAdaptiveHandle(uid,key) {
try {
await this.$nextTick();
const dom = document.querySelector(`.select-adaptive-${uid}`);
const realStyles = window.getComputedStyle(dom);
if (dom) {
const iptChild = dom.querySelector(".el-input__inner");
const textContainer = document.createElement("span");
const textName = `text-${uid}`;
textContainer.classList.add(textName);
textContainer.style.setProperty("visibility", "hidden");
textContainer.style.setProperty("display", "inline-block");
textContainer.style.setProperty("font-size", "14px");
const hasPadding = (parseInt(realStyles.paddingLeft) || parseInt(realStyles.paddingRight)) ? true : false;
hasPadding ? textContainer.style.setProperty("padding", "0px 8px") : null;
textContainer.style.setProperty("box-sizing", "border-box");
textContainer.textContent = iptChild.value ? iptChild.value : iptChild.getAttribute("placeholder");
document.body.append(textContainer);
let containerWidth = textContainer.offsetWidth + 50;
textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`);
}
this.handleYears(key);
} catch (error) {
}
},
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.zhongbiao{ .zhongbiao{
@import "@/assets/styles/search-common.scss";
padding-top: 16px; padding-top: 16px;
.text_p{ .text_p{
color: #999999; color: #999999;
...@@ -1193,7 +1311,7 @@ ...@@ -1193,7 +1311,7 @@
margin-right: 24px; margin-right: 24px;
} }
::v-deep .form-content-width{ ::v-deep .form-content-width{
width: 145px; width: 95px;
.el-select__input{ .el-select__input{
width: 10px !important; width: 10px !important;
max-width: 10px !important; max-width: 10px !important;
...@@ -1209,6 +1327,12 @@ ...@@ -1209,6 +1327,12 @@
background: #F4F6F9; background: #F4F6F9;
} }
} }
.el-select__tags {
flex-wrap: inherit;
.el-tag{
/*max-width: 130px;*/
}
}
} }
::v-deep .el-cascader{ ::v-deep .el-cascader{
width: 220px; width: 220px;
......
<template>
<div class="iframe" v-loading="loading">
<iframe id="companyIframe" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" width="100%" :src="src" />
</div>
</template>
<script>
import { steerScroll } from '@/assets/js/jskplug';
import { dskAccessToken } from '@/api/common';
export default {
name: 'GzscDetail',
data() {
return {
currentUrl:'',
loading: false,
iframeHight: 800, // iframe高度-当前页控制
navigation: { isFixed: true, fixedHeight: 0, totalHeight: 0 }, // iframe之外页面顶部对象,ifFixed:是否浮动;fixedHeight:浮动对象高度;totalHeight:顶部整体高度
footHeight: 160, //底部高度,若为0(页面内部嵌套或者没有底部板块)
src: '', //
domain: 'https://pre-plug.jiansheku.com',
uid: '', // 需要携带的uid
loginDialogVisible: false,
vipDialogVisible: false,
dataVip:{},
minHeight: 0
}
},
computed: {
},
created() {
if(window.location.host === 'http://szh.jiansheku.com' || window.location.host === 'szh.jiansheku.com'){
this.domain='https://plug.jiansheku.com'
}else {
this.domain='https://pre-plug.jiansheku.com'
// this.domain='http://192.168.60.8:3400'
}
this.loading = true
if(process.browser){
this.getAccesstoken(true)
}
},
mounted() {
// this.setInitHeight() //设置初始相关高度
this.iframeLoading() // 判断iframe页面是否加载完成-当前页控制
// steerScroll('companyIframe', this.navigation, this.footHeight, true, '', this) // 监听滚动(iframe的id、页面排除iframe后页面剩下高度[例:80]、增加监听[不传就是移除监听]、父级id[不带默认就是铺满整个页面]])
//控制页面内容最低高度
// this.setMainHeight()
},
beforeDestroy() {
clearInterval(this.iframeTimer) // -当前页控制
clearInterval(this.tokenTimer) // -当前页控制
steerScroll('companyIframe', this.navigation, this.footHeight) // 监听滚动(iframe的id、页面排除iframe后页面剩下高度[例:80]、增加监听[不传就是移除监听]、父级id[不带默认就是铺满整个页面]])
},
methods: {
setInitHeight(){
let headerHeight = document.getElementById('header').offsetHeight
this.navigation.fixedHeight = this.navigation.totalHeight = headerHeight + 10
},
// 判断iframe页面是否加载完成-当前页控制
iframeLoading() {
const iframeHeight = document.getElementById('companyIframe').clientHeight
let number = 0
this.iframeTimer = setInterval(() => {
number = number + 1000
if (document.getElementById('companyIframe').clientHeight !== iframeHeight || number === 5000) {
this.loading = false
clearInterval(this.iframeTimer)
}
},1000)
},
// 获取accessToken
async getAccesstoken(init){
dskAccessToken().then(res => {
if (res.code == 200) {
// this.loading = true
this.timelongs = res.data.expire;
this.ak = res.data.accessToken;
if(init){ //首次加载iframe地址
if(window.location.search){
this.src = `${this.domain+this.$route.fullPath}&ak=${this.ak}&initTime=${new Date().getTime()}&uid=${this.uid}&origin=${window.location.origin}`
}else{
this.src = `${this.domain+this.$route.fullPath}?ak=${this.ak}&initTime=${new Date().getTime()}&uid=${this.uid}&origin=${window.location.origin}`
}
}else{ //更新iframe地址的accessToken
let ifam = document.getElementById('companyIframe')
ifam.contentWindow.postMessage({ 'accessToken': this.ak, 'initTime': new Date().getTime() }, '*')
}
this.refreshtoken();
} else {
clearTimeout(this.tokentimer);
}
});
},
setMainHeight(){
let cliHight = document.body.clientHeight,
footerHeight = document.getElementById('footer') ? document.getElementById('footer').offsetHeight : 0
this.minHeight = cliHight - footerHeight
},
refreshtoken() {
this.tokentimer = setTimeout(() => {
dskAccessToken().then(res => {
if (res.code == 200) {
this.timelongs = res.data.expire;
this.ak = res.data.accessToken;
let ifam = document.getElementById('companyIframe'); //iframe的id
let akObj = res.data.expire; //accessToken接口的返回值
let initTime = new Date().getTime(); //accessToken接口返回后的当前时间戳
ifam.contentWindow.postMessage({ 'accessToken': akObj.accessToken, 'initTime': initTime }, '*');
} else {
clearTimeout(this.tokentimer);
}
});
}, this.timelongs * 1000);
},
},
watch: {
'$store.state.akObj.expire' (newValue, oldValue) {
if(newValue){
let t = (newValue - 20) * 1000, _this = this
_this.tokenTimer = setTimeout(function () {
_this.getAccesstoken()
}, t)
}
}
}
}
</script>
<style lang="scss" scoped>
.iframe {
width: 100%;
padding: 16px 24px;
padding-right: 15px;
box-sizing: border-box;
#companyIframe {
width: 100%;
height: 100%;
}
}
</style>
<template> <template>
<div v-loading="loading" class="market-container"> <div v-loading="loading" class="market-container">
<iframe id="companyIframe" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" width="100%" :style="{height:iframeHight+'px'}" <iframe id="companyIframe" class="market-iframe" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" width="100%" :src="src" />
:src="src" />
<transition name="fade" mode="out-in" appear>
<max-page-size-tip v-if="showMaxPageTip" @closeMaxTip="showMaxPageTip = false"></max-page-size-tip>
</transition>
</div> </div>
</template> </template>
<script> <script>
import { steerScroll } from '@/assets/js/jskplug'; import { steerScroll } from '@/assets/js/jskplug';
import { dskAccessToken } from '@/api/common'; import { dskAccessToken } from '@/api/common';
import {encodeStr} from "@/assets/js/common.js"
import MaxPageSizeTip from "@/views/components/MaxPageSizeTip.vue";
import { getUipIdByCid } from '@/api/macro/macro'
export default { export default {
name: 'Enterprise', name: 'Enterprise',
components: { components: {
MaxPageSizeTip
}, },
data() { data() {
return { return {
encodeStr,
loading: false, // 是否加载完成-当前页控制 loading: false, // 是否加载完成-当前页控制
iframeTimer: '', // 是否加载中定时器-当前页控制 iframeTimer: '', // 是否加载中定时器-当前页控制
footHeight: 0, //底部高度,若为0(页面内部嵌套或者没有底部板块) footHeight: 0, //底部高度,若为0(页面内部嵌套或者没有底部板块)
iframeHight: window.innerHeight, // iframe高度-当前页控制 iframeHight: `${window.innerHeight}px`, // iframe高度-当前页控制
navigation: { isFixed: true, fixedHeight: 56, totalHeight: 68 }, // iframe之外页面顶部对象,ifFixed:是否浮动;fixedHeight:浮动对象高度;totalHeight:顶部整体高度 navigation: { isFixed: true, fixedHeight: 56, totalHeight: 68 }, // iframe之外页面顶部对象,ifFixed:是否浮动;fixedHeight:浮动对象高度;totalHeight:顶部整体高度
src: '', //iframe嵌套页面地址 src: '', //iframe嵌套页面地址
domain: 'https://plug.jiansheku.com', // 插件地址 domain: 'https://plug.jiansheku.com', // 插件地址
...@@ -28,32 +34,81 @@ export default { ...@@ -28,32 +34,81 @@ export default {
ak: 'aec7b3ff2y2q8x6t49a7e2c463ce21912', // 需要携带的sdkId ak: 'aec7b3ff2y2q8x6t49a7e2c463ce21912', // 需要携带的sdkId
timelongs: 7200,//刷新token时间 timelongs: 7200,//刷新token时间
tokentimer: null, tokentimer: null,
showMaxPageTip: false,
iframeIns: null,
}; };
}, },
created() { created() {
if(window.location.host === 'http://szh.jiansheku.com' || window.location.host === 'szh.jiansheku.com'|| window.location.host === 'hwszh.jiansheku.com'){ if (window.location.host === 'http://szh.jiansheku.com' || window.location.host === 'szh.jiansheku.com') {
this.domain='https://plug.jiansheku.com' this.domain = 'https://plug.jiansheku.com';
}else { } else {
this.domain='https://pre-plug.jiansheku.com' this.domain='https://pre-plug.jiansheku.com'
// this.domain = 'http://192.168.60.8:3400';
this.domain = 'http://192.168.60.210:3400';
} }
this.gettokens(); this.gettokens();
this.iframeObserver();
let that = this
window.addEventListener("message", this.pagecapListener, { passive: true });
window.addEventListener('message', function (event) {
if(event.data.id){
getUipIdByCid([event.data.id]).then(res=>{
if (res.code==200) {
if(res.data&&res.data.length>0&&res.data[0].uipId){
that.$router.push({path: '/enterprise/'+that.encodeStr(event.data.id)})
}else{
that.$tab.openPage(event.data.title, '/company/'+that.encodeStr(event.data.id))
}
}
}).catch(error=>{
});
}else{
if(event.data.url){
that.$tab.openPage(event.data.title, event.data.url).then(() => {
// 执行结束的逻辑
})
}
}
}, false);
}, },
mounted() { mounted() {
this.iframeLoading(); // 判断iframe页面是否加载完成-当前页控制 this.iframeLoading(); // 判断iframe页面是否加载完成-当前页控制
steerScroll('companyIframe', this.navigation, this.footHeight, true); // iframeId: iframe的id;navigation:页面排除iframe后剩下的顶部高度;footHeight: 页面排除iframe后剩下的底部高度;state:监听or移除监听;parentId: 父级id[不带默认就是铺满整个页面]];_this:指向当前实例(可忽略) // steerScroll('companyIframe', this.navigation, this.footHeight, true); // iframeId: iframe的id;navigation:页面排除iframe后剩下的顶部高度;footHeight: 页面排除iframe后剩下的底部高度;state:监听or移除监听;parentId: 父级id[不带默认就是铺满整个页面]];_this:指向当前实例(可忽略)
}, },
beforeDestroy() { beforeDestroy() {
clearInterval(this.iframeTimer); // -当前页控制 clearInterval(this.iframeTimer); // -当前页控制
steerScroll('companyIframe', this.navigation, this.footHeight); // iframeId: iframe的id;navigation:页面排除iframe后剩下的顶部高度;footHeight: 页面排除iframe后剩下的底部高度;state:监听or移除监听;parentId: 父级id[不带默认就是铺满整个页面]];_this:指向当前实例(可忽略) steerScroll('companyIframe', this.navigation, this.footHeight); // iframeId: iframe的id;navigation:页面排除iframe后剩下的顶部高度;footHeight: 页面排除iframe后剩下的底部高度;state:监听or移除监听;parentId: 父级id[不带默认就是铺满整个页面]];_this:指向当前实例(可忽略)
clearInterval(this.tokentimer); clearInterval(this.tokentimer);
window.removeEventListener("message", this.pagecapListener, { passive: true });
// 移除layout样式
this.iframeIns.contentWindow.postMessage("removeHtmlLayoutStyle", { targetOrigin: this.domain, });
}, },
methods: { methods: {
async iframeObserver() {
try {
await this.$nextTick();
this.iframeIns = document.querySelector(".market-iframe");
} catch (error) {
console.log(error);
}
},
// 列表翻页上限
pagecapListener(e) {
const { origin, data } = e;
if (origin != this.domain) return;
if (data == "pageCurrentMaxSize") {
this.showMaxPageTip = true;
}
},
gettokens() { gettokens() {
dskAccessToken().then(res => { dskAccessToken().then(res => {
if (res.code == 200) { if (res.code == 200) {
this.timelongs = res.data.expire; this.timelongs = res.data.expire;
this.ak = res.data.accessToken; this.ak = res.data.accessToken;
this.src = `${this.domain}/search/market?ak=${this.ak}&initTime=${new Date().getTime()}&uid=${this.ak}`; this.src = `${this.domain}/search/market?ak=${this.ak}&initTime=${new Date().getTime()}&uid=${this.ak}&origin=${window.location.origin}`;
this.refreshtoken(); this.refreshtoken();
} else { } else {
clearTimeout(this.tokentimer); clearTimeout(this.tokentimer);
...@@ -88,14 +143,19 @@ export default { ...@@ -88,14 +143,19 @@ export default {
}); });
} }
} }
} };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.market-container { .market-container {
width: 100%; width: 100%;
height: 100%;
padding: 16px 24px; padding: 16px 24px;
padding-right: 15px;
box-sizing: border-box; box-sizing: border-box;
.market-iframe {
width: 100%;
height: 100%;
}
} }
</style> </style>
...@@ -8,9 +8,12 @@ ...@@ -8,9 +8,12 @@
<el-option v-for="(item,index) in companytype" :label="item.dictLabel" :value="item.dictValue"></el-option> <el-option v-for="(item,index) in companytype" :label="item.dictLabel" :value="item.dictValue"></el-option>
</el-select> </el-select>
<div class="searchInput small"> <div class="searchInput small">
<el-input type="text" placeholder="输入关键词查询" clearable v-model="searchParam.companyName"> <div @mouseover="showSearchBox = true" @mouseleave="leaves" >
<i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/sousuo.png" @click="handleCurrentChange(1)"></i></el-input> <img class="ss" src="@/assets/images/enterprise/enterprise-search-icon.svg" alt="">
<!--<div class="btn" @click="handleCurrentChange(1)">搜索</div>--> <span class="cx" v-if="!showSearchBox">搜索</span>
<el-input v-if="showSearchBox" @keyup.enter.native="handleCurrentChange(1)" clearable @clear="handleCurrentChange(1)" v-model="searchParam.companyName"
placeholder="输入关键词查询"></el-input>
</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>
...@@ -241,6 +244,7 @@ ...@@ -241,6 +244,7 @@
showlist:false, showlist:false,
companData:[], companData:[],
isSkeleton:true, isSkeleton:true,
showSearchBox:false,
} }
}, },
created(){ created(){
...@@ -253,6 +257,11 @@ ...@@ -253,6 +257,11 @@
mounted(){ mounted(){
}, },
methods:{ methods:{
leaves(){
if(this.searchParam.companyName == ""){
this.showSearchBox = false
}
},
getDetail(row){ getDetail(row){
this.isedit = true this.isedit = true
this.hzhbVisible = true this.hzhbVisible = true
...@@ -376,7 +385,52 @@ ...@@ -376,7 +385,52 @@
} }
} }
.searchInput .el-input{ .searchInput .el-input{
width: 68%; width: 100%;
position: absolute;
left: 0;
top: 0;
margin-top: 0;
z-index: 0;
::v-deep .el-input__inner{
background: #F4F6F9 !important;
padding-left: 36px !important;
padding-right: 35px !important;
}
}
.searchInput.small{
/*width: 257px;*/
border: 0;
border-radius: 4px !important;
.ss{
position: absolute;
z-index: 1;
left: 13px;
top: 9px;
width: 13px;
}
.cx{
color: #232323;
opacity: 0.8;
font-size: 14px;
margin-left: 36px;
line-height: 32px;
}
input::-webkit-input-placeholder { /* Chrome/Opera/Safari */
color: #232323;
opacity: 0.4;
}
input::-moz-placeholder { /* Firefox 19+ */
color: #232323;
opacity: 0.4;
}
input:-ms-input-placeholder { /* IE 10+ */
color: #232323;
opacity: 0.4;
}
input:-moz-placeholder { /* Firefox 18- */
color: #232323;
opacity: 0.4;
}
} }
.w102{ .w102{
width: 102px; width: 102px;
......
...@@ -4,12 +4,13 @@ ...@@ -4,12 +4,13 @@
<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">
<!--<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="输入关键词查询"> <div @mouseover="showSearchBox = true" @mouseleave="leaves" >
<i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/sousuo.png" @click="handleCurrentChange(1)"></i> <img class="ss" src="@/assets/images/enterprise/enterprise-search-icon.svg" alt="">
</el-input> <span class="cx" v-if="!showSearchBox">搜索</span>
<!--<div class="btn" @click="handleCurrentChange(1)">搜索</div>--> <el-input v-if="showSearchBox" @keyup.enter.native="handleCurrentChange(1)" clearable @clear="handleCurrentChange(1)" v-model="param.keyword"
placeholder="输入关键词查询"></el-input>
</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>-->
...@@ -188,6 +189,7 @@ ...@@ -188,6 +189,7 @@
isDisableds:this.isDisabled, isDisableds:this.isDisabled,
keys:1, keys:1,
isSkeleton:true, isSkeleton:true,
showSearchBox:false,
} }
}, },
created(){ created(){
...@@ -195,6 +197,11 @@ ...@@ -195,6 +197,11 @@
// console.log(this.$ref) // console.log(this.$ref)
}, },
methods:{ methods:{
leaves(){
if(this.searchParam.companyName == ""){
this.showSearchBox = false
}
},
getall(){ getall(){
this.param.filePath = this.detailId ? this.detailId : this.$route.query.id this.param.filePath = this.detailId ? this.detailId : this.$route.query.id
this.filename='' this.filename=''
...@@ -316,6 +323,55 @@ ...@@ -316,6 +323,55 @@
<style lang="scss" scoped> <style lang="scss" scoped>
.searchInput .el-input{
width: 100%;
position: absolute;
left: 0;
top: 0;
margin-top: 0;
z-index: 0;
::v-deep .el-input__inner{
background: #F4F6F9 !important;
padding-left: 36px !important;
padding-right: 35px !important;
}
}
.searchInput.small{
/*width: 257px;*/
border: 0;
border-radius: 4px !important;
.ss{
position: absolute;
z-index: 1;
left: 13px;
top: 9px;
width: 13px;
}
.cx{
color: #232323;
opacity: 0.8;
font-size: 14px;
margin-left: 36px;
line-height: 32px;
}
input::-webkit-input-placeholder { /* Chrome/Opera/Safari */
color: #232323;
opacity: 0.4;
}
input::-moz-placeholder { /* Firefox 19+ */
color: #232323;
opacity: 0.4;
}
input:-ms-input-placeholder { /* IE 10+ */
color: #232323;
opacity: 0.4;
}
input:-moz-placeholder { /* Firefox 18- */
color: #232323;
opacity: 0.4;
}
}
v-deep.el-upload:focus{ v-deep.el-upload:focus{
color: #FFFFFF !important; color: #FFFFFF !important;
} }
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<span class="list-label list-label-zb" v-if="textList.tenderStage"> <span class="list-label list-label-zb" v-if="textList.tenderStage">
{{textList.tenderStage}} {{textList.tenderStage}}
</span> </span>
<span class="list-label" v-if="textList.province||textList.city||textList.area">{{textList.province}}<template v-if="textList.city">-{{textList.city}}</template><template v-if="textList.area">-{{textList.area}}</template></span> <span class="list-label" v-if="textList.province||textList.city||textList.area">{{textList.province}}<template v-if="textList.city">-{{textList.city}}</template><template v-if="textList.area">-{{textList.area}}</template></span>
<span class="list-label list-label-zb" v-if="textList.businessType"> <span class="list-label list-label-zb" v-if="textList.businessType">
{{textList.businessType}} {{textList.businessType}}
...@@ -19,22 +19,22 @@ ...@@ -19,22 +19,22 @@
{{textList.industry}} {{textList.industry}}
</span> </span>
</div> </div>
<div class="list-content"> <div class="list-content">
<p class="list-content-text" v-if="textList.tenderee"> <p class="list-content-text" v-if="textList.tenderee">
<span>招采单位:</span> <span>招采单位:</span>
<router-link v-if="textList.tenderee" :to="textList.tendereeUipId?'/enterprise/' + encodeStr(textList.tendereeId) :'/company/' + encodeStr(textList.tendereeId) " tag="a" class="list-titel-a blue" v-html="textList.tenderee"></router-link> <router-link v-if="textList.tenderee" :to="textList.tendereeUipId?'/enterprise/' + encodeStr(textList.tendereeId) :'/company/' + encodeStr(textList.tendereeId) " tag="a" class="list-titel-a blue" v-html="textList.tenderee"></router-link>
<span v-else>--</span> <span v-else>--</span>
</p> </p>
<p class="list-content-text" v-if="textList.agency"> <p class="list-content-text" v-if="textList.agency">
<span>代理单位:</span> <span>代理单位:</span>
<router-link v-if="textList.agency" :to="textList.agencyUipId?'/enterprise/' + encodeStr(textList.agencyId) :'/company/' + encodeStr(textList.agencyId) " tag="a" class="list-titel-a blue" v-html="textList.agency"></router-link> <router-link v-if="textList.agency" :to="textList.agencyUipId?'/enterprise/' + encodeStr(textList.agencyId) :'/company/' + encodeStr(textList.agencyId) " tag="a" class="list-titel-a blue" v-html="textList.agency"></router-link>
<span v-else>--</span> <span v-else>--</span>
</p> </p>
</div> </div>
<div class="list-content" v-if="textList.projectAmount||textList.contact"> <div class="list-content" v-if="textList.projectAmount||textList.contact">
<p class="list-content-text" v-if="textList.projectAmount"> <p class="list-content-text" v-if="textList.projectAmount">
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
<span >招采单位 {{textList.contact}}{{textList.contactTel}}</span> <span >招采单位 {{textList.contact}}{{textList.contactTel}}</span>
</p> </p>
</div> </div>
<div class="list-content" v-if="textList.issueTime||textList.overTime||textList.dataSource"> <div class="list-content" v-if="textList.issueTime||textList.overTime||textList.dataSource">
<p class="list-content-text" v-if="textList.issueTime"> <p class="list-content-text" v-if="textList.issueTime">
<span>发布时间:</span> <span>发布时间:</span>
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
<span >{{textList.dataSource||'--'}}</span> <span >{{textList.dataSource||'--'}}</span>
</p> </p>
</div> </div>
</li> </li>
</ul> </ul>
...@@ -82,20 +82,20 @@ ...@@ -82,20 +82,20 @@
</span> </span>
</div> </div>
<div class="main3-box" v-html="textList.content"> <div class="main3-box" v-html="textList.content">
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import "@/assets/styles/public.scss"; import "@/assets/styles/public.scss";
import api from '@/api/radar/radar.js'; import api from '@/api/radar/radar.js';
import {encodeStr} from "@/assets/js/common.js" import {encodeStr,removeTag,checkTag} from "@/assets/js/common.js"
export default { export default {
name: 'TenderDetails', name: 'TenderDetails',
...@@ -118,11 +118,13 @@ ...@@ -118,11 +118,13 @@
}).then(res => { }).then(res => {
// console.log(res); // console.log(res);
this.textList = res.data; this.textList = res.data;
this.textList.content = removeTag(res.data.content, 'link,meta', 'script,style', 'href,target,style') //采集详情针对性处理
this.textList.content = checkTag(res.data.content, 'h1,a', 'b,span') //采集详情针对性处理
}).catch(error => { }).catch(error => {
}); });
}, },
} }
} }
...@@ -325,7 +327,7 @@ ...@@ -325,7 +327,7 @@
min-height: 400px; min-height: 400px;
border: 1px solid #D8D8D8; border: 1px solid #D8D8D8;
padding: 16px; padding: 16px;
overflow: hidden;
} }
.list-content-img{ .list-content-img{
position: absolute; position: absolute;
...@@ -349,4 +351,4 @@ ...@@ -349,4 +351,4 @@
} }
</style> </style>
\ No newline at end of file
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<p>{{itme.value}}</p> <p>{{itme.value}}</p>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<p class="solid"></p> <p class="solid"></p>
...@@ -25,13 +25,13 @@ ...@@ -25,13 +25,13 @@
<!-- 招标计划 --> <!-- 招标计划 -->
<Bidding v-if="personnelHerf=='Bidding'" /> <Bidding v-if="personnelHerf=='Bidding'" />
<!-- 标讯pro --> <!-- 标讯pro -->
<bxprozbgg v-if="personnelHerf=='bxprozbgg'" /> <!--<bxprozbgg v-if="personnelHerf=='bxprozbgg'" />-->
<!-- 公招标讯 --> <!-- 公招标讯 -->
<Tender v-if="personnelHerf=='Tender'" /> <Tender v-if="personnelHerf=='Tender'" />
<!-- 开标记录 --> <!-- 开标记录 -->
<BidRecord v-if="personnelHerf=='BidRecord'" /> <BidRecord v-if="personnelHerf=='BidRecord'" />
</div> </div>
</template> </template>
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
import BidRecord from "./components/BidRecord/index.vue"; import BidRecord from "./components/BidRecord/index.vue";
import Bidding from "./components/Bidding/index.vue"; import Bidding from "./components/Bidding/index.vue";
import MajorProject from "./components/MajorProject/index.vue"; import MajorProject from "./components/MajorProject/index.vue";
import "@/assets/styles/public.scss"; import "@/assets/styles/public.scss";
export default { export default {
name: 'Radar', name: 'Radar',
...@@ -80,25 +80,25 @@ ...@@ -80,25 +80,25 @@
key: 'Bidding', key: 'Bidding',
status: false, status: false,
value: '招标计划', value: '招标计划',
},
{
key: 'bxprozbgg',
status: false,
value: '标讯pro',
}, },
// {
// key: 'bxprozbgg',
// status: false,
// value: '标讯pro',
//
// },
{ {
key: 'Tender', key: 'Tender',
status: false, status: false,
value: '公招标讯', value: '公招标讯',
}, },
{ {
key: 'BidRecord', key: 'BidRecord',
status: false, status: false,
value: '开标记录', value: '开标记录',
}, },
], ],
...@@ -121,7 +121,7 @@ ...@@ -121,7 +121,7 @@
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.app-container { .app-container {
margin: 12px 24px; margin: 12px 24px;
padding: 0; padding: 0;
...@@ -129,7 +129,7 @@ ...@@ -129,7 +129,7 @@
.content{ .content{
padding: 0px 16px; padding: 0px 16px;
background: #FFFFFF; background: #FFFFFF;
} }
.app-container .combined-title { .app-container .combined-title {
...@@ -261,4 +261,4 @@ ...@@ -261,4 +261,4 @@
border-bottom: 2px solid #0081FF; border-bottom: 2px solid #0081FF;
font-weight: bold; font-weight: bold;
} }
</style> </style>
\ No newline at end of file
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