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:
- business_follow_record
- business_label
- business_relate_company
- business_open_tender
# MyBatisPlus配置
......
......@@ -28,9 +28,9 @@ public interface CacheConstants {
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 {
* 全国经济大全-默认
*/
public static final String DATA_ECONOMIC = "data:economic";
/**
* 查集团户-集团统计信息
*/
public static final String DATA_COMBINE = "data:combine:";
}
......@@ -32,17 +32,22 @@ public class PasswordUtils {
// 至少包含一个大写字母
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++) {
String characters = LOWER_CASE + UPPER_CASE + NUMBERS;
password.append(characters.charAt(random.nextInt(characters.length())));
for (int i = 0; i < length - 2; i++) {
// 至少包含一个数字
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) {
......
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;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.exception.ServiceException;
import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.common.utils.JsonUtils;
import com.dsk.common.utils.StringUtils;
import com.dsk.jsk.domain.JskCombineBidPageDto;
import com.dsk.jsk.domain.JskCombineCertificateDto;
......@@ -248,9 +249,9 @@ public class JskCombineInfoService {
*@date: 2023/9/12 16:05
*/
public R memberCount(JskCombineCountDto dto) {
String redisKey = CacheConstants.PERSONAL_LOCATION + dto.getCombineId();
String redisKey = CacheConstants.DATA_COMBINE + dto.getCombineId();
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)) {
return R.ok(cacheMap);
}
......@@ -263,7 +264,7 @@ public class JskCombineInfoService {
Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
data.put("performance", businessCount(paramsMap));
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);
}
......
......@@ -8,6 +8,7 @@ import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.helper.LoginHelper;
import com.dsk.common.utils.DateUtils;
import com.dsk.common.utils.DskOpenApiUtil;
import com.dsk.common.utils.JsonUtils;
import com.dsk.jsk.domain.*;
import com.dsk.jsk.domain.bo.*;
import com.dsk.jsk.service.service.EconomicService;
......@@ -56,7 +57,7 @@ public class EconomicServiceImpl implements EconomicService {
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);
if (!code.equals(HttpStatus.OK.value())) {
throw new RuntimeException();
......@@ -82,7 +83,7 @@ public class EconomicServiceImpl implements EconomicService {
String redisKey = CacheConstants.PERSONAL_LOCATION + userId;
if (ObjectUtil.isEmpty(detailsDto.getProvinceId()) && ObjectUtil.isEmpty(detailsDto.getCityId()) && ObjectUtil.isEmpty(detailsDto.getAreaId())) {
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)) {
return AjaxResult.success(cacheMap);
}
......@@ -94,10 +95,9 @@ public class EconomicServiceImpl implements EconomicService {
if (!code.equals(HttpStatus.OK.value())) {
throw new RuntimeException();
}
Map data = MapUtils.getMap(map, "data", null);
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);
}
......
......@@ -7,10 +7,7 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundSetOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Component;
/**
......@@ -25,15 +22,18 @@ public class RedisCache
@Autowired
public RedisTemplate redisTemplate;
@Autowired
public StringRedisTemplate stringRedisTemplate;
/**
* 缓存基本的对象,Integer、String、实体类等
*
* @param key 缓存的键值
* @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
* @param timeout 时间
* @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
* @param key 缓存键值
* @return 缓存键值对应的数据
*/
public <T> T getCacheObject(final String key)
public String getCacheObject(final String key)
{
ValueOperations<String, T> operation = redisTemplate.opsForValue();
return operation.get(key);
return stringRedisTemplate.opsForValue().get(key);
}
/**
......@@ -191,7 +190,7 @@ public class RedisCache
public <T> void setCacheMap(final String key, final Map<String, T> dataMap)
{
if (dataMap != null) {
redisTemplate.opsForHash().putAll(key, dataMap);
stringRedisTemplate.opsForHash().putAll(key, dataMap);
}
}
......@@ -201,9 +200,9 @@ public class RedisCache
* @param key
* @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 {
public AjaxResult combineRecentlyBid(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/combine/recentlyBid", object);
if (!ObjectUtils.isEmpty(map.get("data"))) {
List<Map<String, Object>> list = (List<Map<String, Object>>) map.get("data");
list.parallelStream().forEach(res -> {
Integer companyId = MapUtils.getInteger(res, "tendereeId");
String companyName = MapUtils.getString(res, "tenderee");
res.put("uipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(companyName, companyId));
});
}
// if (!ObjectUtils.isEmpty(map.get("data"))) {
// List<Map<String, Object>> list = (List<Map<String, Object>>) map.get("data");
// list.parallelStream().forEach(res -> {
// Integer companyId = MapUtils.getInteger(res, "tendereeId");
// String companyName = MapUtils.getString(res, "tenderee");
// res.put("uipId", enterpriseService.getUipIdByCompanyNameOrCompanyId(companyName, companyId));
// });
// }
return BeanUtil.toBean(map, AjaxResult.class);
}
......
<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){
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 {
encodeStr,
changePath,
saveFixed
saveFixed,
removeTag,
checkTag
}
......@@ -7,3 +7,12 @@
.search-leave-to {
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;
}
This diff is collapsed.
.el-card{
overflow: initial;
}
.app-container{
padding: 0;
}
//小导航
.miantitle{
color: #232323;
font-size: 12px;
margin: 12px 24px;
margin: 12px 0;
>span{
opacity: 0.4;
&:last-child{opacity:0.8}
......
......@@ -1222,8 +1222,7 @@ select {
color: #232323;
}
.enterprise_contatiner{
padding: 0;
padding-bottom: 16px;
}
.el-input-group__append{
cursor: pointer;
......
::v-deep .head-form-new {
margin-bottom: 8px;
padding-bottom: 8px;
.query-box {
.from-item {
display: flex;
......@@ -25,7 +25,7 @@
}
}
.el-cascader__tags {
.el-cascader__tags,.el-select__tags {
.el-tag {
max-width: unset !important;
}
......
......@@ -33,6 +33,7 @@ export default {
width: 100%;
position: relative;
overflow: hidden;
display: flex;
}
.fixed-header + .app-main {
......@@ -42,7 +43,7 @@ export default {
.hasTagsView {
.app-main {
/* 84 = navbar + tags-view = 50 + 34 */
min-height: calc(100vh - 68px);
min-height: calc(100vh - 56px);
min-width:1240px;
background: #F5F5F5;
overflow: initial;
......
......@@ -70,7 +70,7 @@ export const constantRoutes = [
path: 'index',
component: () => import('@/views/index'),
name: 'Index',
meta: { title: '首页', icon: 'index',noCache: false }
meta: { title: '首页', icon: 'index'}
}
]
},
......@@ -159,6 +159,7 @@ export const constantRoutes = [
}
]
},
//企业详情
{
path: '/company',
component: Layout,
......@@ -167,12 +168,13 @@ export const constantRoutes = [
children: [
{
path: '/company/:id',
component: () => import('@/views/detail/party-b/index'),
component: () => import('@/views/detail'),
name: 'Company',
meta: { title: '企业详情' }
}
]
},
//人员详情
{
path: '/personnel',
component: Layout,
......@@ -180,13 +182,40 @@ export const constantRoutes = [
redirect: 'noredirect',
children: [
{
path: '/personnel/:id',
component: () => import('@/views/detail/party-b/index'),
path: '/personnel/:id.html',
component: () => import('@/views/detail'),
name: 'Personnel',
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',
component: Layout,
......@@ -348,8 +377,6 @@ export const constantRoutes = [
]
},
]
// 动态路由,基于用户权限动态去加载
......
......@@ -402,14 +402,14 @@ export function isNumberStr(str) {
}
// 甲方详情左侧菜单映射
// export const detailSideBar = new Map({
// // 企业速览
// holderinfo: "ownershipStructure",
// // 高管信息
// execuinfo: "leadingMember",
// // 对外投资
// overseas: "outboundInvestment",
// // 分支机构
// branch: "branch",
// })
export const detailSideBar = new Map([
// 企业速览
["holderinfo", "ownershipStructure"],
// 高管信息
["execuinfo", "leadingMember"],
// 对外投资
["overseas", "outboundInvestment"],
// 分支机构
["branch", "branch"],
])
......@@ -25,7 +25,7 @@ service.interceptors.request.use(config => {
// 是否需要设置 token
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) {
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
config.headers['tenantid'] = getTenantid() //携带租户id
......
<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="block" @click="isSelectOption=!isSelectOption" @mouseenter="handleMouseenter" @mouseleave="handleMouseleave">
<el-input class="custom-money-input" v-model="value" :placeholder="placeholder" readonly>
......@@ -238,8 +238,8 @@ export default {
</script>
<style lang="scss">
.custom-money-select {
width: 120px;
.custom-money-select1 {
width: 106px;
height: 34px;
position: relative;
.rote {
......
<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="block" @click="isSelectOption=!isSelectOption" @mouseenter="handleMouseenter" @mouseleave="handleMouseleave">
<el-input class="custom-time-input" v-model="value" :placeholder="placeholder" readonly>
......@@ -244,8 +244,8 @@ export default {
</script>
<style lang="scss">
.custom-time-select {
width: 120px;
.custom-time-select1 {
width: 90px !important;
height: 34px;
.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 @@
<el-input type="text" placeholder="请输入" v-model="queryParam.creditCode"></el-input>
</el-form-item>
<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_primary h32" @click="submitForm('ruleForm')">添加</div>
</div>
......@@ -84,8 +84,6 @@
created() {
this.prvinceTree()
this.getDictType()
console.log(this.dialogVisible)
console.log('1111111111')
},
computed: {},
methods:{
......@@ -116,7 +114,7 @@
cityId:'',
districtId:'',
},
this.dialogVisible = false
this.$emit("handleCancel",false)
this.showlist = false
},
getAddr(obj){
......@@ -223,7 +221,7 @@
addCustomer(this.queryParam).then(result=>{
if(result.code == 200){
this.$message.success('添加成功!')
this.dialogVisible = false
this.$emit("handleCancel",false)
this.resetForm('ruleForm')
}else{
this.$message.error(result.msg)
......@@ -234,7 +232,7 @@
});
},
toct(){
this.dialogVisible = false
this.$emit("handleCancel",false)
this.$router.push({path:'/macro/urban'})
},
//输入数字
......
<template>
<div @click = 'handleALL'>
<div @click = 'handleALL' class="app-container">
<div class="miantitle">
<span>客户管理</span>
<span> / 客户列表</span>
</div>
<div class="app-container">
<div>
<el-card class="box-card noborder min1370">
<div class="tables ">
<div class="empty" v-if="tableData.total==0 && !isSkeleton">
......@@ -845,6 +845,7 @@
padding-top: 16px;
width: 100%;
height: 100%;
.table_search{
::v-deep .el-form{
.el-input{
line-height: 32px;
......@@ -862,6 +863,8 @@
}
}
}
}
.box{
......
<template>
<div @click = 'handleALL'>
<div class="app-container">
<div class="app-container" @click = 'handleALL'>
<el-card class="box-card noborder">
<div class="tables">
<div class="empty" v-if="tableData.total==0&& !isSkeleton">
......@@ -201,7 +200,6 @@
</div>
</el-card>
</div>
</div>
</template>
<script>
......
......@@ -182,7 +182,7 @@
</div>
</div>
</div>
<AddCustom :data="data" v-if="data.open"></AddCustom>
<AddCustom :data="data" v-if="data.open" @handleCancel="handleCancel"></AddCustom>
</div>
</template>
......@@ -574,6 +574,9 @@
handleAdd(){
this.data.open=true
},
handleCancel(isshow){
this.data.open=isshow
},
}
}
</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 @@
:form-data="formData"
:query-params="queryParams"
:total="tableDataTotal"
:headerFixed="true"
:isExcel="false"
@handle-search="handleSearch"
>
......@@ -53,6 +54,7 @@
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:headerFixed="true"
:tableDataTotal="tableDataTotal"
:queryParams="queryParams"
:MaxPage=500
......@@ -456,7 +458,7 @@
font-size: 14px;
font-weight: 400;
line-height: 32px;
color: #999999;
color: rgba(35,35,35,0.8);
margin-right: 8px;
text-align: center;
width: 70px;
......
......@@ -6,6 +6,7 @@
:form-data="formData"
:query-params="queryParams"
:total="tableDataTotal"
:headerFixed="true"
:isExcel="true"
@handle-search="handleSearch"
@handle-excel="clickEXCEL"
......@@ -21,6 +22,7 @@
:tableLoading="tableLoading"
:tableData="tableData"
:forData="forData"
:headerFixed="true"
:MaxPage=500
:tableDataTotal="tableDataTotal"
:queryParams="queryParams"
......
<template>
<div class="performance">
<div class="content">
<head-form
<head-form-new
ref="headForm"
title="集团施工项目最新招标"
:form-data="formData"
......@@ -9,7 +9,7 @@
@handle-search="handleSearch"
:slots="true"
:isExcel="false"
></head-form>
></head-form-new>
<span class="check" @click="check">查看集团招标<i class="el-icon-arrow-right"></i></span>
<skeleton v-if="isSkeleton" style="padding: 16px"></skeleton>
<div class="table-item" v-if="!isSkeleton && tableData.length >0">
......@@ -23,7 +23,7 @@
<el-table-column label="发布日期" prop="issueTime" width="100"></el-table-column>
<el-table-column label="招标成员" prop="tenderee" min-width="220">
<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>
</template>
</el-table-column>
......@@ -88,7 +88,7 @@
</div>
<div class="content">
<head-form
title="集团施工项目发包金额区间"
title="集团施工项目发包金额"
:form-data="[]"
:query-params="{}"
:slots="true"
......@@ -100,7 +100,7 @@
clearable
@change="changeSelect1"
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-select>
</div>
......@@ -139,7 +139,7 @@
clearable
@change="changeSelect2"
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-select>
</div>
......@@ -153,7 +153,7 @@
<div class="table-item">
<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="count" width="120">
<el-table-column label="发包数量" prop="count" width="90">
<template slot-scope="scope">
{{scope.row.count}}{{scope.row.count ? '个':''}}
</template>
......@@ -189,7 +189,7 @@
clearable
@change="changeSelect3"
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-select>
</div>
......@@ -216,14 +216,15 @@
</el-row>
</div>
<div class="content">
<head-form
<head-form-new
ref="headForm1"
title="历史发包项目金额TOP10"
:form-data="formData1"
:query-params="queryParams1"
@handle-search="handleSearch1"
:slots="true"
:isExcel="false"
></head-form>
></head-form-new>
<skeleton v-if="isSkeleton6" style="padding: 16px"></skeleton>
<div class="table-item" v-if="!isSkeleton6 && peojectTopData.length > 0">
<el-table class="fixed-table" :data="peojectTopData" border max-height="235">
......@@ -242,7 +243,7 @@
<el-table-column label="项目类型" prop="projectTypeNew" width="100"></el-table-column>
<el-table-column label="招标成员" prop="projectUnit" min-width="250">
<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>
</template>
</el-table-column>
......@@ -274,6 +275,7 @@
import mixin from '../../party-a/mixins/mixin'
import {recentlyBid,bidByYear,groupByMoney,groupByType,groupByLowerRate,peojectTop} from '@/api/detail/groupAccount/groupAccount'
import { getDictType } from '@/api/main'
import { getUipIdByCid } from '@/api/macro/macro'
export default {
name: 'qualifications',
props: ['customerId'],
......@@ -288,14 +290,14 @@
combineId: this.customerId,
},
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: 'year', value: '2023年', placeholder: '年份', options: [],width:100, uid: this.getUid()},
{ type: 1, fieldName: 'year', value: '2023年', placeholder: '选择年份', options: [],width:100, uid: this.getUid()},
],
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: 'year', value: '2023年', placeholder: '年份', options: [],width:100, uid: this.getUid()},
{ type: 1, fieldName: 'year', value: '2023年', placeholder: '选择年份', options: [],width:100, uid: this.getUid()},
],
cgblList: [
{name:'100%',value:'100%'},
......@@ -351,6 +353,21 @@
this.getPeojectTop()
},
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(){
let mydate=new Date();
let Year = mydate.getFullYear();
......
......@@ -379,6 +379,14 @@
border-radius: 4px;
padding: 16px;
height: calc(100% - 64px);
::v-deep .el-table__header-wrapper {
position: sticky;
top: 64px !important;
z-index: 9;
}
.headForm{
margin-bottom: 14px;
.common-title{
......
<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="flex-box query-box">
<div class="flex-box query-params">
......@@ -109,6 +109,10 @@ export default {
type: Number,
default: 0
},
headerFixed: {
type: Boolean,
default: false
},
isExcel: {
type: Boolean,
default: false
......@@ -280,10 +284,17 @@ export default {
::v-deep .el-popper[x-placement^="bottom"] {
margin-top: 5px;
}
.headerFixed{
position: sticky;
top: 0;
z-index: 10;
padding-top: 16px;
margin-top: -16px;
background: #fff;
}
.head-form-new {
display: flex;
flex-direction: column;
margin-bottom: 14px;
.common-title {
margin-bottom: 8px;
}
......@@ -432,7 +443,7 @@ export default {
::v-deep .el-select__tags {
.el-tag {
&:first-child {
//width: 100%;
/*width: 100%;*/
}
}
}
......
<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()">
<i slot="prefix" class="el-input__icon el-icon-search" @click="handleSearch()"></i>
</el-input>
......@@ -354,7 +354,7 @@ export default {
methods: {
financial(id) {
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.defaultRoute = JSON.parse(JSON.stringify(this.sideRoute));
}
......
<template>
<div class="Tables">
<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"
:data="tableData"
element-loading-text="Loading"
ref="tableRef"
v-horizontal-scroll="'hover'"
border
fit
highlight-current-row
......@@ -86,6 +87,10 @@ export default {
type: Boolean,
default: true
},
headerFixed: {
type: Boolean,
default: false
},
indexFixed: {
type: Boolean,
default: false
......@@ -172,14 +177,15 @@ export default {
</script>
<style lang="scss" scoped>
::v-deep .el-table__body tr.current-row > td.el-table__cell{
.Tables{
::v-deep .el-table__body tr.current-row > td.el-table__cell{
background-color: #ffffff;
}
/*::v-deep .el-table__fixed{
}
/*::v-deep .el-table__fixed{
height: calc(100% - 16px) !important;
}*/
}*/
::v-deep .el-table__row{
::v-deep .el-table__row{
&:nth-child(even){
background-color: #F9FCFF;
.more{
......@@ -196,47 +202,61 @@ export default {
}
}
}
}
.table-item{
}
.table-item{
::v-deep .el-table td.el-table__cell{
border-bottom: 0;
}
}
::v-deep .el-table th.el-table__cell.is-leaf,::v-deep .el-table td.el-table__cell {
}
::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 {
}
::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{
}
::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;
}
}
}
::v-deep .el-table--enable-row-hover .el-table__body tr:hover > td {
::v-deep .el-table--enable-row-hover .el-table__body tr:hover > td {
background-color: #DCEBFF;
}
::v-deep .fixed-table{
}
::v-deep .fixed-table{
overflow: visible;
}
::v-deep .el-table__header-wrapper{
}
::v-deep .el-table__header-wrapper{
position: sticky;
top:56px;
top:0;
z-index: 9;
}
::v-deep .el-table__fixed-header-wrapper{
}
::v-deep .el-table__fixed-header-wrapper{
position: sticky;
z-index: 9;
top: 56px;
}
::v-deep .el-table__fixed{
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;
}
}
}
</style>
......@@ -383,15 +383,31 @@ export default {
}
.part-main {
margin-top: 12px;
width: 100%;
height: calc(100vh - 155px);
overflow-y: auto;
align-items: initial;
}
.part-left {
margin-right: 16px;
padding-bottom: 16px;
position: fixed;
background: #FFFFFF;
width: 144px;
}
.part-right {
min-width: 1088px;
width: 100%;
background: #ffffff;
background: #FFFFFF;
border-radius: 4px;
margin-left: 160px;
::v-deep .el-table__header-wrapper{
position: sticky;
top:0;
z-index: 9;
}
#groupBox{
height: 100%;
}
}
</style>
......@@ -6,7 +6,6 @@
<el-tab-pane label="工商变更" :disabled="tableDataTotal==0" name="second"></el-tab-pane>
</el-tabs>
<info-table class="info-tab" :list="defaultList" :obj="forInfo" :labelWidth="labelWidth" v-if="activeName=='first'">
<template slot="provinceCode" slot-scope="scope">
<span>{{showRegion(scope.data.provinceCode)}}</span>
......@@ -19,7 +18,7 @@
</template>
<template slot="actualCapi" slot-scope="scope">
<span>
{{ scope.data.actualCapi?scope.data.actualCapi+'万元人民币':'--' }}
{{ scope.data.actualCapi? `${scope.data.actualCapi}${scope.data.actualCapiUnit}` :'--' }}
</span>
</template>
<template slot="colleguesNum" slot-scope="scope">
......@@ -28,23 +27,16 @@
</span>
</template>
</info-table>
<tables
:tableLoading="tableLoading"
:tableData="tableData"
:tableDataTotal="tableDataTotal"
:forData="forData"
@handle-current-change="handleCurrentChange"
:queryParams="queryParams"
v-if="activeName=='second'"
/>
<tables :tableLoading="tableLoading" :tableData="tableData" :tableDataTotal="tableDataTotal" :forData="forData"
@handle-current-change="handleCurrentChange" :queryParams="queryParams" v-if="activeName=='second'" />
</div>
</template>
<script>
import mixin from '../mixins/mixin'
import dataRegion from '@/assets/json/dataRegion'
import InfoTable from '../component/infoTable'
import {icInfo, changeInfo} from "@/api/detail/party-a/overview"
import mixin from '../mixins/mixin';
import dataRegion from '@/assets/json/dataRegion';
import InfoTable from '../component/infoTable';
import { icInfo, changeInfo } from "@/api/detail/party-a/overview";
export default {
name: 'Businfo',
props: ['companyId'],
......@@ -87,63 +79,63 @@ export default {
{ name: '经营范围', prop: 'scope', style: true }
],
forData: [
{label: '变更日期', prop: 'changeDate', width: '100'},
{label: '变更事项', prop: 'type'},
{label: '变更前', prop: 'beforeContent'},
{label: '变更后', prop: 'afterContent'}
{ label: '变更日期', prop: 'changeDate', width: '100' },
{ label: '变更事项', prop: 'type' },
{ label: '变更前', prop: 'beforeContent' },
{ label: '变更后', prop: 'afterContent' }
],
//列表
tableLoading:false,
tableData:[],
tableDataTotal:0
}
tableLoading: false,
tableData: [],
tableDataTotal: 0
};
},
created() {
this.handleQuery();
this.handleQuery1();
},
methods: {
handleClick(){
if(this.activeName=='first'){
this.handleQuery()
}else{
this.handleQuery1()
handleClick() {
if (this.activeName == 'first') {
this.handleQuery();
} else {
this.handleQuery1();
}
},
async handleQuery(params,flag) {
if(flag){
return this.handleQuery1(params)
async handleQuery(params, flag) {
if (flag) {
return this.handleQuery1(params);
}
this.isSkeleton = true;
this.tableLoading = true
this.tableLoading = true;
let param = this.baseParams;
let res = await icInfo(param);
this.tableLoading = false
if(res.code==200){
this.tableLoading = false;
if (res.code == 200) {
this.isSkeleton = false;
this.forInfo = res.data
this.forInfo = res.data;
}
},
async handleQuery1(params) {
let param = params?params:this.queryParams
let res = await changeInfo(param)
if(res.code==200){
let param = params ? params : this.queryParams;
let res = await changeInfo(param);
if (res.code == 200) {
this.tableData = res.rows;
this.tableDataTotal = res.total
this.tableDataTotal = res.total;
}
},
showRegion(region){
if(region) {
let list = dataRegion
let areaText = ''
showRegion(region) {
if (region) {
let list = dataRegion;
let areaText = '';
list.forEach(item => {
if(item.id == region) {
areaText = item.regionName
if (item.id == region) {
areaText = item.regionName;
}
})
return areaText
}else {
return '--'
});
return areaText;
} else {
return '--';
}
}
}
......@@ -151,22 +143,22 @@ export default {
</script>
<style lang="scss" scoped>
.detail-container{
.detail-container {
margin: 0;
padding: 16px;
background: #FFFFFF;
background: #ffffff;
border-radius: 4px;
.detail-tab{
.detail-tab {
margin: 0 0 0 -16px;
::v-deep .el-tabs__nav-wrap::after{
::v-deep .el-tabs__nav-wrap::after {
display: none;
}
::v-deep .el-tabs__item{
::v-deep .el-tabs__item {
font-size: 16px;
height: 30px;
line-height: 30px;
padding: 0 16px;
&.is-active{
&.is-active {
font-weight: bold;
}
}
......
......@@ -69,15 +69,15 @@
</template>
</el-table-column>
<el-table-column
width="160"
width="140"
align="right"
label="合作次数">
<template slot-scope="scope">
<span style="padding-right: 86px;">{{ scope.row.count }}</span>
<span>{{ scope.row.count }}</span>
</template>
</el-table-column>
<el-table-column
width="160"
width="180"
align="right"
label="合作总金额(万元)">
<template slot-scope="scope">
......
......@@ -116,7 +116,7 @@ export default {
background: #FFFFFF;
border-radius: 4px;
.detail-tab{
margin: -34px 0 0 -16px;
margin: -14px 0 0 -16px;
::v-deep .el-tabs__nav-wrap::after{
display: none;
}
......
......@@ -327,7 +327,7 @@ export default {
.head-form-new {
.common-title {
margin-bottom: 8px;
padding-bottom: 8px;
}
.query-box {
margin: 0px;
......
......@@ -59,16 +59,16 @@
if(this.$route.name=='Company'){ //企业详情
if(this.$route.query.html){
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{
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{
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'){ //人员详情
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 diff is collapsed.
......@@ -253,9 +253,8 @@ export default {
<style lang="scss">
.custom-time-select {
width: 120px;
width: 110px;
height: 34px;
.rote {
.el-input__inner{
background: #F4F6F9;
......
......@@ -653,13 +653,18 @@ export default {
.el-form-item{
margin: 0 !important;
.form-content-width{
width: 110px;
width: 80px;
}
::v-deep .el-input{
.el-input__inner{
border: 0;
}
}
::v-deep .is-focus{
.el-input__inner{
background: #F4F6F9;
}
}
}
}
.table-item{
......
......@@ -348,13 +348,18 @@ export default {
.el-form-item{
margin: 0 !important;
.form-content-width{
width: 100px;
width: 80px;
}
::v-deep .el-input{
.el-input__inner{
border: 0;
}
}
::v-deep .is-focus{
.el-input__inner{
background: #F4F6F9;
}
}
}
}
.content{
......
......@@ -36,18 +36,18 @@
</template>
</el-table-column>
<el-table-column prop="gdp" label="GDP(亿元)" sortable width="120" :formatter="formatStatus"/>
<el-table-column prop="gdpGrowth" label="GDP增速(%)" sortable width="130" :formatter="formatStatus"/>
<el-table-column prop="gdpPerCapita" label="人均GDP(元)" sortable width="130" :formatter="formatStatus"/>
<el-table-column prop="population" label="人口(万人)" sortable width="120" :formatter="formatStatus"/>
<el-table-column prop="fixedInvestment" label="固定资产投资 (亿元) " sortable width="200" :formatter="formatStatus"/>
<el-table-column prop="gbr" label="一般公共预算收入(亿元)" sortable width="200" :formatter="formatStatus"/>
<el-table-column prop="gbe" label="一般公共预算支出(亿元)" sortable width="200" :formatter="formatStatus"/>
<el-table-column prop="govFundIncome" label="政府性基金收入(亿元)" sortable width="200" :formatter="formatStatus"/>
<el-table-column prop="govDebtBalance" label="地方政府债务余额(亿元)" sortable width="200" :formatter="formatStatus"/>
<el-table-column prop="uipInterestBearingDebt" label="城投平台有息债务(亿元)" sortable width="200" :formatter="formatStatus"/>
<el-table-column prop="fiscalSelfSufficiencyRate" label="财政自给率(%)" sortable width="150" :formatter="formatStatus"/>
<el-table-column prop="govDebtRateWild" label="债务率-宽口径(%)" sortable width="170" :formatter="formatStatus"/>
<el-table-column prop="gdp" label="GDP(亿元)" sortable="custom" width="120" :formatter="formatStatus"/>
<el-table-column prop="gdpGrowth" label="GDP增速(%)" sortable="custom" width="130" :formatter="formatStatus"/>
<el-table-column prop="gdpPerCapita" label="人均GDP(元)" sortable="custom" width="130" :formatter="formatStatus"/>
<el-table-column prop="population" label="人口(万人)" sortable="custom" width="120" :formatter="formatStatus"/>
<el-table-column prop="fixedInvestment" label="固定资产投资 (亿元) " sortable="custom" width="200" :formatter="formatStatus"/>
<el-table-column prop="gbr" label="一般公共预算收入(亿元)" sortable="custom" width="200" :formatter="formatStatus"/>
<el-table-column prop="gbe" label="一般公共预算支出(亿元)" sortable="custom" width="200" :formatter="formatStatus"/>
<el-table-column prop="govFundIncome" label="政府性基金收入(亿元)" sortable="custom" width="200" :formatter="formatStatus"/>
<el-table-column prop="govDebtBalance" label="地方政府债务余额(亿元)" sortable="custom" width="200" :formatter="formatStatus"/>
<el-table-column prop="uipInterestBearingDebt" label="城投平台有息债务(亿元)" sortable="custom" width="200" :formatter="formatStatus"/>
<el-table-column prop="fiscalSelfSufficiencyRate" label="财政自给率(%)" sortable="custom" width="150" :formatter="formatStatus"/>
<el-table-column prop="govDebtRateWild" label="债务率-宽口径(%)" sortable="custom" width="170" :formatter="formatStatus"/>
</el-table>
</div>
<div class="pagination-box" v-if="show_page && tableDataTotal>pageSize">
......@@ -193,17 +193,22 @@ export default {
<style lang="scss" scoped>
.regionalEconomy{
.el-form{
/*margin-left: 24px;*/
margin-left: 16px;
.el-form-item{
margin: 0 !important;
.form-content-width{
width: 100px;
width: 80px;
}
::v-deep .el-input{
.el-input__inner{
border: 0;
}
}
::v-deep .is-focus{
.el-input__inner{
background: #F4F6F9;
}
}
}
}
.content{
......
......@@ -223,10 +223,10 @@ export default {
page:this.pageIndex,
}
if(this.queryParams.field){
params.field=this.queryParams.field
params.page.field=this.queryParams.field
}
if(this.queryParams.order){
params.order=this.queryParams.order
params.page.order=this.queryParams.order
}
params.aptitudeQueryDto={
filePlaceType:this.activeName === 'first' ? 3 : 2,
......@@ -399,7 +399,7 @@ export default {
width += textContainer.offsetWidth + parseInt(itemInfo.marginLeft) + parseInt(itemInfo.marginRight);
textContainer.remove();
});
dom.style.setProperty("width", `${width + 60}px`);
dom.style.setProperty("width", `${width + 50}px`);
this.handleSearch(name);
return;
}
......@@ -411,7 +411,7 @@ export default {
textContainer.textContent = iptChild.getAttribute("placeholder");
document.body.append(textContainer);
// let containerWidth = textContainer.offsetWidth + 12 + 8;
let containerWidth = 120;
let containerWidth = 110;
textContainer.remove();
dom.style.setProperty("width", `${containerWidth}px`);
this.handleSearch(name);
......@@ -509,7 +509,7 @@ export default {
float: left;
}
::v-deep .el-cascader{
width: 120px;
width: 110px;
margin-right: 12px;
height: 34px;
line-height: 34px !important;
......
......@@ -397,8 +397,7 @@ export default {
});
},
addressListbtn(data) {
this.province=data.province;
this.provinceId=data.provinceId;
this.province=data.province; this.provinceId=data.provinceId;
this.dataQuery.province=data.provinces;
let params={}
if(data){
......
......@@ -41,34 +41,34 @@
<el-table-column 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 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 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 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 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 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 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 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>
......
......@@ -485,10 +485,10 @@
}
.form-content-width{
width: 90px;
width: 80px;
}
::v-deep .el-cascader{
width: 180px;
width: 106px;
.el-cascader__tags{
flex-wrap: inherit;
.el-tag{
......
......@@ -6,7 +6,7 @@
<div class="flex-box query-box">
<div class="flex-box query-params">
<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-select>
</div>
......@@ -49,7 +49,7 @@
<div class="flex-box query-box">
<div class="flex-box query-params">
<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-select>
</div>
......@@ -92,10 +92,10 @@
<div class="flex-box query-box">
<div class="flex-box query-params">
<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-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-select>
</div>
......@@ -177,6 +177,7 @@
import dataRegion from '@/assets/json/dataRegion'
import { countLandMarketByType,countLandMarketByProvince,countLandMarketByYear } from '@/api/macro/macro'
import skeleton from '../../component/skeleton'
import { v4 } from "uuid";
export default {
name: 'NationalEconomies',
components: {
......@@ -203,11 +204,14 @@ export default {
tdytState:true,
topState:true,
nftjState:true,
// typeName:['住宅用地','工业用地','城镇住宅用地','其他商服用地','公共设施用地','公路用地','城镇村道路用地','公园与绿地',
// '工矿仓储用地','零售商业用地','科研用地','街巷用地','机关团体用地','商服用地','商务金融用地']
inputID1:this.getUid(),
inputID2:this.getUid(),
inputID3:this.getUid(),
inputID4:this.getUid(),
}
},
created() {
this.getPlaceholder()
this.dataRegion()
this.yearsData()
......@@ -726,7 +730,116 @@ export default {
});
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>
......@@ -747,6 +860,7 @@ export default {
color: #0081FF;
}
.tdjy{
@import "@/assets/styles/search-common.scss";
.text_p{
color: #999999;
font-size: 14px;
......@@ -772,7 +886,7 @@ export default {
margin-right: 24px;
}
::v-deep .form-content-width{
width: 135px;
width: 95px;
.el-select__input{
width: 10px !important;
max-width: 10px !important;
......@@ -789,6 +903,12 @@ export default {
background: #F4F6F9;
}
}
.el-select__tags {
flex-wrap: inherit;
.el-tag{
/*max-width: 130px;*/
}
}
}
::v-deep .el-cascader{
width: 220px;
......
......@@ -38,10 +38,10 @@
<div class="flex-box query-box">
<div class="flex-box query-params">
<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-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-select>
</div>
......@@ -83,7 +83,7 @@
<div class="flex-box query-box">
<div class="flex-box query-params">
<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-select>
</div>
......@@ -130,6 +130,7 @@
import dataRegion from '@/assets/json/dataRegion'
import { countNewsBidByYear,countNewsBidByProvince,countNewsBidByMonth } from '@/api/macro/macro'
import skeleton from '../../component/skeleton'
import { v4 } from "uuid";
export default {
name: 'NationalEconomies',
components: {
......@@ -152,9 +153,13 @@
isSkeleton:true,
gyflState:true,
tdytState:true,
inputID1:this.getUid(),
inputID2:this.getUid(),
inputID3:this.getUid(),
}
},
created() {
this.getPlaceholder()
this.dataRegion()
this.yearsData()
this.getcountNewsBidByYear()
......@@ -613,7 +618,116 @@
});
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>
......@@ -634,6 +748,7 @@
color: #0081FF;
}
.tdjy{
@import "@/assets/styles/search-common.scss";
.text_p{
color: #999999;
font-size: 14px;
......@@ -659,7 +774,7 @@
margin-right: 24px;
}
::v-deep .form-content-width{
width: 145px;
width: 95px;
.el-select__input{
width: 10px !important;
max-width: 10px !important;
......@@ -675,6 +790,12 @@
background: #F4F6F9;
}
}
.el-select__tags {
flex-wrap: inherit;
.el-tag{
/*max-width: 130px;*/
}
}
}
::v-deep .el-cascader{
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>
<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" />
<iframe id="companyIframe" class="market-iframe" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" width="100%" :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>
</template>
<script>
import { steerScroll } from '@/assets/js/jskplug';
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 {
name: 'Enterprise',
components: {
MaxPageSizeTip
},
data() {
return {
encodeStr,
loading: false, // 是否加载完成-当前页控制
iframeTimer: '', // 是否加载中定时器-当前页控制
footHeight: 0, //底部高度,若为0(页面内部嵌套或者没有底部板块)
iframeHight: window.innerHeight, // iframe高度-当前页控制
iframeHight: `${window.innerHeight}px`, // iframe高度-当前页控制
navigation: { isFixed: true, fixedHeight: 56, totalHeight: 68 }, // iframe之外页面顶部对象,ifFixed:是否浮动;fixedHeight:浮动对象高度;totalHeight:顶部整体高度
src: '', //iframe嵌套页面地址
domain: 'https://plug.jiansheku.com', // 插件地址
......@@ -28,32 +34,81 @@ export default {
ak: 'aec7b3ff2y2q8x6t49a7e2c463ce21912', // 需要携带的sdkId
timelongs: 7200,//刷新token时间
tokentimer: null,
showMaxPageTip: false,
iframeIns: null,
};
},
created() {
if(window.location.host === 'http://szh.jiansheku.com' || window.location.host === 'szh.jiansheku.com'|| window.location.host === 'hwszh.jiansheku.com'){
this.domain='https://plug.jiansheku.com'
}else {
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.domain = 'http://192.168.60.210:3400';
}
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() {
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() {
clearInterval(this.iframeTimer); // -当前页控制
steerScroll('companyIframe', this.navigation, this.footHeight); // iframeId: iframe的id;navigation:页面排除iframe后剩下的顶部高度;footHeight: 页面排除iframe后剩下的底部高度;state:监听or移除监听;parentId: 父级id[不带默认就是铺满整个页面]];_this:指向当前实例(可忽略)
clearInterval(this.tokentimer);
window.removeEventListener("message", this.pagecapListener, { passive: true });
// 移除layout样式
this.iframeIns.contentWindow.postMessage("removeHtmlLayoutStyle", { targetOrigin: this.domain, });
},
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() {
dskAccessToken().then(res => {
if (res.code == 200) {
this.timelongs = res.data.expire;
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();
} else {
clearTimeout(this.tokentimer);
......@@ -88,14 +143,19 @@ export default {
});
}
}
}
};
</script>
<style lang="scss" scoped>
.market-container {
width: 100%;
height: 100%;
padding: 16px 24px;
padding-right: 15px;
box-sizing: border-box;
.market-iframe {
width: 100%;
height: 100%;
}
}
</style>
......@@ -8,9 +8,12 @@
<el-option v-for="(item,index) in companytype" :label="item.dictLabel" :value="item.dictValue"></el-option>
</el-select>
<div class="searchInput small">
<el-input type="text" placeholder="输入关键词查询" clearable v-model="searchParam.companyName">
<i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/sousuo.png" @click="handleCurrentChange(1)"></i></el-input>
<!--<div class="btn" @click="handleCurrentChange(1)">搜索</div>-->
<div @mouseover="showSearchBox = true" @mouseleave="leaves" >
<img class="ss" src="@/assets/images/enterprise/enterprise-search-icon.svg" alt="">
<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 class="btn btn_primary h32 b3" @click="opennew" v-if="isDisableds == false"><div class="img img1"></div>添加相关企业</div>
</div>
......@@ -241,6 +244,7 @@
showlist:false,
companData:[],
isSkeleton:true,
showSearchBox:false,
}
},
created(){
......@@ -253,6 +257,11 @@
mounted(){
},
methods:{
leaves(){
if(this.searchParam.companyName == ""){
this.showSearchBox = false
}
},
getDetail(row){
this.isedit = true
this.hzhbVisible = true
......@@ -376,7 +385,52 @@
}
}
.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{
width: 102px;
......
......@@ -4,12 +4,13 @@
<el-card class="box-card noborder">
<div class="cardtitles">资料文档</div>
<div class="searchbtns">
<!--<div class="searchbtns" v-if="fileDatas.rows != null && fileDatas.rows.length>0">-->
<div class="searchInput small">
<el-input type="text" v-model="param.keyword" clearable placeholder="输入关键词查询">
<i slot="prefix" class="el-input__icon"><img src="@/assets/images/project/sousuo.png" @click="handleCurrentChange(1)"></i>
</el-input>
<!--<div class="btn" @click="handleCurrentChange(1)">搜索</div>-->
<div @mouseover="showSearchBox = true" @mouseleave="leaves" >
<img class="ss" src="@/assets/images/enterprise/enterprise-search-icon.svg" alt="">
<span class="cx" v-if="!showSearchBox">搜索</span>
<el-input v-if="showSearchBox" @keyup.enter.native="handleCurrentChange(1)" clearable @clear="handleCurrentChange(1)" v-model="param.keyword"
placeholder="输入关键词查询"></el-input>
</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 @@
isDisableds:this.isDisabled,
keys:1,
isSkeleton:true,
showSearchBox:false,
}
},
created(){
......@@ -195,6 +197,11 @@
// console.log(this.$ref)
},
methods:{
leaves(){
if(this.searchParam.companyName == ""){
this.showSearchBox = false
}
},
getall(){
this.param.filePath = this.detailId ? this.detailId : this.$route.query.id
this.filename=''
......@@ -316,6 +323,55 @@
<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{
color: #FFFFFF !important;
}
......
......@@ -95,7 +95,7 @@
<script>
import "@/assets/styles/public.scss";
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 {
name: 'TenderDetails',
......@@ -118,6 +118,8 @@
}).then(res => {
// console.log(res);
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 => {
});
......@@ -325,7 +327,7 @@
min-height: 400px;
border: 1px solid #D8D8D8;
padding: 16px;
overflow: hidden;
}
.list-content-img{
position: absolute;
......
......@@ -25,7 +25,7 @@
<!-- 招标计划 -->
<Bidding v-if="personnelHerf=='Bidding'" />
<!-- 标讯pro -->
<bxprozbgg v-if="personnelHerf=='bxprozbgg'" />
<!--<bxprozbgg v-if="personnelHerf=='bxprozbgg'" />-->
<!-- 公招标讯 -->
<Tender v-if="personnelHerf=='Tender'" />
<!-- 开标记录 -->
......@@ -82,12 +82,12 @@
value: '招标计划',
},
{
key: 'bxprozbgg',
status: false,
value: '标讯pro',
},
// {
// key: 'bxprozbgg',
// status: false,
// value: '标讯pro',
//
// },
{
key: 'Tender',
status: false,
......
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