Commit c177ac77 authored by huangjie's avatar huangjie

Merge branch 'V20231129-中建一局二公司' of http://192.168.60.201/root/dsk-operate-sys...

Merge branch 'V20231129-中建一局二公司' of http://192.168.60.201/root/dsk-operate-sys into V20231129-中建一局二公司
parents 3612b80e f166a9fa
...@@ -51,7 +51,11 @@ ...@@ -51,7 +51,11 @@
<artifactId>dsk-acc-open-sdk-java</artifactId> <artifactId>dsk-acc-open-sdk-java</artifactId>
<version>2.1.0</version> <version>2.1.0</version>
</dependency> </dependency>
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>8.7.0</version>
</dependency>
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>com.tencentcloudapi</groupId>--> <!-- <groupId>com.tencentcloudapi</groupId>-->
......
...@@ -103,4 +103,14 @@ public class EnterpriseCreditController { ...@@ -103,4 +103,14 @@ public class EnterpriseCreditController {
return enterpriseCreditService.kaitingPureRole(body); return enterpriseCreditService.kaitingPureRole(body);
} }
@PostMapping(value = "/restrictedConsumerPage")
public TableDataInfo restrictedConsumerPage(@RequestBody @Valid EnterpriseCreditPageBody body) throws Exception {
return enterpriseCreditService.restrictedConsumerPage(body);
}
@PostMapping(value = "/judicialFreezesPage")
public TableDataInfo judicialFreezesPage(@RequestBody @Valid EnterpriseCreditPageBody body) throws Exception {
return enterpriseCreditService.judicialFreezesPage(body);
}
} }
package com.dsk.jsk.domain;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@Data
@ToString
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class EnterpriseCreditPageBody extends BasePage {
/**
* 企业id
*/
@NotNull(message = "企业id不能为空")
private Integer cid;
/**
* 开始时间(年月日)
*/
private String dateFrom;
/**
* 截止时间(年月日)
*/
private String dateTo;
public boolean isVaildCid() {
return 0 == cid;
}
}
...@@ -132,4 +132,16 @@ public class EnterpriseCreditService { ...@@ -132,4 +132,16 @@ public class EnterpriseCreditService {
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseCredit/kaitingPureRole", BeanUtil.beanToMap(body, false, false)); Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseCredit/kaitingPureRole", BeanUtil.beanToMap(body, false, false));
return BeanUtil.toBean(map, R.class); return BeanUtil.toBean(map, R.class);
} }
public TableDataInfo restrictedConsumerPage(EnterpriseCreditPageBody body) throws Exception{
if (body.isVaildCid()) return new TableDataInfo(new ArrayList<>(), 0);
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseCredit/restrictedConsumerPage", BeanUtil.beanToMap(body, false, false));
return dskOpenApiUtil.responsePage(map);
}
public TableDataInfo judicialFreezesPage(EnterpriseCreditPageBody body) throws Exception{
if (body.isVaildCid()) return new TableDataInfo(new ArrayList<>(), 0);
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/enterpriseCredit/judicialFreezesPage", BeanUtil.beanToMap(body, false, false));
return dskOpenApiUtil.responsePage(map);
}
} }
...@@ -62,4 +62,25 @@ public class CompanySearchController { ...@@ -62,4 +62,25 @@ public class CompanySearchController {
public AjaxResult bossCompany(@RequestBody JSONObject object) { public AjaxResult bossCompany(@RequestBody JSONObject object) {
return opportunityRadarService.bossCompany(object); return opportunityRadarService.bossCompany(object);
} }
//---------------------------------------中建一局-------------------------------------------
/*
* 查资质
*/
@RequestMapping("/zjyjAptitude")
public AjaxResult zjyjAptitude(@RequestBody JSONObject object) {
return opportunityRadarService.zjyjAptitude(object);
}
/*
* 查资质 不满足
*/
@RequestMapping("/zjyjAptitude/contrary")
public AjaxResult zjyjAptitudeContrary(@RequestBody JSONObject object) {
return opportunityRadarService.zjyjAptitudeContrary(object);
}
} }
package com.dsk.search.controller;
import com.alibaba.fastjson2.JSONObject;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.utils.poi.ExcelUtil;
import com.dsk.jsk.domain.bo.ComposeQueryDto;
import com.dsk.search.service.BusinessOpportunityRadarService;
import com.dsk.search.service.ExportService;
import com.dsk.system.domain.vo.AptitudeVo;
import com.dsk.system.domain.vo.SysUserImportVo;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
* 查企业
* @author lc
* @ClassName ExportController
* @Date 2023/12/06 16:40
*/
@RequestMapping("/export")
@RestController
public class ExportController {
@Resource
private ExportService exportService;
/**
* 获取导入模板
*/
@PostMapping("/aptitude/importTemplate")
public void importTemplate(HttpServletResponse response) {
List<Object> list = new ArrayList<>();
AptitudeVo aptitudeVo = new AptitudeVo();
aptitudeVo.setCompanyName("重庆市轨道交通(集团)有限公司");
list.add(aptitudeVo);
ExcelUtil.exportTemplate(list, "企业数据", "excel/userImportTemplate.xlsx", response);
}
/*
* 批量资质导出
*/
@RequestMapping("/aptitude/file")
public AjaxResult aptitudeFile(@RequestPart("file") MultipartFile file) throws Exception {
return exportService.aptitudeFile(file);
}
}
...@@ -217,4 +217,14 @@ public class BusinessOpportunityRadarService { ...@@ -217,4 +217,14 @@ public class BusinessOpportunityRadarService {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/subscription/yqBxproPage", object); Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/subscription/yqBxproPage", object);
return BeanUtil.toBean(map, AjaxResult.class); return BeanUtil.toBean(map, AjaxResult.class);
} }
public AjaxResult zjyjAptitude(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/zjyj/aptitude", object);
return BeanUtil.toBean(map, AjaxResult.class);
}
public AjaxResult zjyjAptitudeContrary(JSONObject object) {
Map<String, Object> map = dskOpenApiUtil.requestBody("/nationzj/zjyj/aptitude/contrary", object);
return BeanUtil.toBean(map, AjaxResult.class);
}
} }
package com.dsk.search.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson2.JSONObject;
import com.dsk.common.constant.Constants;
import com.dsk.common.core.domain.AjaxResult;
import com.dsk.common.excel.ExcelUtils;
import com.dsk.common.exception.ServiceException;
import com.dsk.jsk.domain.bo.ComposeQueryDto;
import com.dsk.jsk.service.EnterpriseService;
import com.dsk.system.domain.SysUserFileRecord;
import com.dsk.system.domain.vo.AptitudeVo;
import com.dsk.system.service.ISysUserFileRecordService;
import com.dsk.system.utils.DskOpenApiUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author lc
* @ClassName ExportService
* @Date 2023/12/06 16:40
**/
@Service
public class ExportService {
@Autowired
private DskOpenApiUtil dskOpenApiUtil;
@Autowired
private ISysUserFileRecordService sysUserFileRecordService;
@Value("${dsk.exportBackUrl}")
private String EXPORT_BACK_URL;
public AjaxResult aptitudeFile(MultipartFile file) throws Exception {
ComposeQueryDto composeQueryDto = new ComposeQueryDto();
//识别Excel内容
List<AptitudeVo> companyNameList = new ExcelUtils<>(AptitudeVo.class).importExcel(file.getInputStream(), 2);
if (companyNameList.isEmpty()) {
throw new ServiceException("表格中不存在待导入数据!");
}
List<String> list = new ArrayList<>();
for (int i = 0; i < companyNameList.size(); i++) {
if (i>499){
break;
}
list.add(companyNameList.get(i).getCompanyName());
}
composeQueryDto.setKeyword(String.join(",",list));
SysUserFileRecord fileRecord = new SysUserFileRecord();
fileRecord.setFileName("批量导出".concat(Constants.SUFFIX_XLSX));
fileRecord.setType(1);
//生成中
fileRecord.setStatus(2);
fileRecord.setRemark("资质批量导出");
Long fileId = sysUserFileRecordService.exportAdd(fileRecord);
composeQueryDto.setExportUniqueCode(fileId.toString());
//回调函数
composeQueryDto.setExportBackUrl(EXPORT_BACK_URL);
composeQueryDto.setExportExeclName("资质批量导出.xlsx");
dskOpenApiUtil.requestBody("/nationzj/marketAnalysis/areaGroupByProvince", BeanUtil.beanToMap(composeQueryDto,false,false));
return AjaxResult.success();
}
}
...@@ -121,12 +121,6 @@ aside { ...@@ -121,12 +121,6 @@ aside {
} }
} }
//main-container全局样式
.app-container {
//padding: 16px;
//margin-top: 56px;
}
.components-container { .components-container {
margin: 30px 50px; margin: 30px 50px;
position: relative; position: relative;
...@@ -226,18 +220,13 @@ li { ...@@ -226,18 +220,13 @@ li {
margin: 0; margin: 0;
} }
.app-main {
position: relative;
background-color: #f5f5f5;
>div{
width: calc(100% - 48px);
}
}
.app-container { .app-container {
margin: 16px 24px; width: 100%;
height: 100%;
background-color: #f5f5f5; background-color: #f5f5f5;
padding: 16px 24px;
box-sizing: border-box; box-sizing: border-box;
//width: 100%; overflow: auto;
.el-input__inner { .el-input__inner {
border-color: #d9d9d9; border-color: #d9d9d9;
color: #232323; color: #232323;
......
...@@ -99,8 +99,10 @@ ...@@ -99,8 +99,10 @@
margin-right: 8px; margin-right: 8px;
} }
.el-submenu__icon-arrow { .el-submenu__icon-arrow {
top: 54%; top: 50%;
right: 5px; transform: translateY(-50%);
margin-top: 0px;
right: 8px;
color: #d8d8d8; color: #d8d8d8;
} }
...@@ -121,7 +123,7 @@ ...@@ -121,7 +123,7 @@
min-width: 128px; min-width: 128px;
font-size: 12px; font-size: 12px;
color: #fff !important; color: #fff !important;
padding-left: 24px !important; padding-left: 24px;
} }
.el-menu--inline .nest-menu .el-menu-item .svg-icon { .el-menu--inline .nest-menu .el-menu-item .svg-icon {
display: none; display: none;
...@@ -213,7 +215,7 @@ ...@@ -213,7 +215,7 @@
.hideSidebar { .hideSidebar {
.sidebar-container { .sidebar-container {
width: 48px !important; width: $hideSideBarWidth !important;
.sidebar-logo-container { .sidebar-logo-container {
padding: 0px; padding: 0px;
...@@ -233,8 +235,8 @@ ...@@ -233,8 +235,8 @@
} }
.main-container { .main-container {
margin-left: 48px; margin-left: $hideSideBarWidth;
width: calc(100% - 48px); width: calc(100% - #{$hideSideBarWidth});
} }
.submenu-title-noDropdown { .submenu-title-noDropdown {
...@@ -328,6 +330,42 @@ ...@@ -328,6 +330,42 @@
transition: none; transition: none;
} }
} }
// 重置导航栏菜单样式
.el-menu {
.secondary-menu {
.secondary-menu-item {
&.el-submenu {
& > {
.el-menu--inline {
padding: 0px;
.secondary-menu-item-sub {
.el-menu-item {
font-size: 14px;
padding-left: 32px !important;
}
& > .secondary-menu-item {
.el-submenu__title {
padding-left: 32px !important;
}
& > .el-menu--inline {
.secondary-menu-item-sub {
.el-menu-item {
font-size: 12px;
padding-left: 40px !important;
}
}
}
}
}
}
}
}
}
}
}
} }
// when menu collapsed // when menu collapsed
......
...@@ -52,6 +52,7 @@ $subMenuHover:#001528; ...@@ -52,6 +52,7 @@ $subMenuHover:#001528;
$base-sidebar-width: 220px; $base-sidebar-width: 220px;
$sideBarWidth: 220px; $sideBarWidth: 220px;
$hideSideBarWidth : 48px;
//系统默认颜色 //系统默认颜色
$systemColor:#0081FF; $systemColor:#0081FF;
......
...@@ -10,16 +10,16 @@ ...@@ -10,16 +10,16 @@
</template> </template>
<script> <script>
import iframeToggle from "./IframeToggle/index" import iframeToggle from "./IframeToggle/index";
export default { export default {
name: 'AppMain', name: 'AppMain',
components: { iframeToggle }, components: { iframeToggle },
computed: { computed: {
cachedViews() { cachedViews() {
return this.$store.state.tagsView.cachedViews return this.$store.state.tagsView.cachedViews;
}, },
key() { key() {
return this.$route.fullPath return this.$route.fullPath;
} }
} }
} }
...@@ -27,12 +27,11 @@ export default { ...@@ -27,12 +27,11 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.app-main { .app-main {
/* 50= navbar 50 */
min-height: calc(100vh - 50px);
width: 100%;
position: relative; position: relative;
height: calc(100% - 56px);
width: 100%;
background: #f5f5f5;
overflow: hidden; overflow: hidden;
display: flex;
} }
.fixed-header + .app-main { .fixed-header + .app-main {
...@@ -41,20 +40,17 @@ export default { ...@@ -41,20 +40,17 @@ export default {
.hasTagsView { .hasTagsView {
.app-main { .app-main {
/* 84 = navbar + tags-view = 50 + 34 */ height: calc(100% - 56px);
min-height: calc(100vh - 56px); min-width: 1240px;
min-width:1240px;
background: #F5F5F5;
overflow: initial;
} }
.fixed-header + .app-main { .fixed-header + .app-main {
padding-top: 84px; padding-top: 84px;
} }
} }
.EnterpriseData{ .EnterpriseData {
.app-main { .app-main {
overflow: initial; overflow: hidden;
} }
} }
</style> </style>
......
...@@ -9,12 +9,12 @@ ...@@ -9,12 +9,12 @@
</el-menu-item> </el-menu-item>
</app-link> </app-link>
</template> </template>
<el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body> <el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body class="secondary-menu-item">
<template slot="title"> <template slot="title">
<item v-if="item.meta" :icon="sideIcon(item)" :title="item.meta.title" /> <item v-if="item.meta" :icon="sideIcon(item)" :title="item.meta.title" />
</template> </template>
<sidebar-item v-for="child in item.children" :key="child.path" :is-nest="true" :item="child" :base-path="resolvePath(child.path,child.query)" <sidebar-item v-for="child in item.children" :key="child.path" :is-nest="true" :item="child" :base-path="resolvePath(child.path,child.query)"
:active-menu="activeMenu" class="nest-menu" /> :active-menu="activeMenu" class="nest-menu secondary-menu-item-sub" />
</el-submenu> </el-submenu>
</template> </template>
<!-- 收起 --> <!-- 收起 -->
......
<template> <template>
<div :class="{'has-logo':showLogo}" @mouseenter="sideEnter" @mouseleave="sideLeave" :style="{ backgroundColor: settings.sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }"> <div :class="{'has-logo':showLogo}" @mouseenter="sideEnter" @mouseleave="sideLeave"
<logo v-if="showLogo" :collapse="isCollapse" /> :style="{ backgroundColor: settings.sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }">
<el-scrollbar :class="settings.sideTheme" wrap-class="scrollbar-wrapper"> <logo v-if="showLogo" :collapse="isCollapse" />
<el-menu <el-scrollbar :class="settings.sideTheme" wrap-class="scrollbar-wrapper">
:default-active="activeMenu" <el-menu :default-active="activeMenu" :collapse="isCollapse" :background-color="variables.menuBg" :text-color="variables.menuText"
:collapse="isCollapse" :unique-opened="true" :active-text-color="settings.theme" :collapse-transition="false" mode="vertical">
:background-color="variables.menuBg" <sidebar-item v-for="(route, index) in hidechildren" :key="route.path + index" :is-collapse="isCollapse" :active-menu="activeMenu"
:text-color="variables.menuText" :item="route" :base-path="route.path" :class="route.fixed&&route.fixed.isFixed?'sideFoot':''"
:unique-opened="true" :style="route.fixed&&route.fixed.isFixed?{'bottom': route.fixed.number*50+'px'}: bottomMenu&&index==routes.length-bottomMenu-2?{'padding-bottom': bottomMenu*50+'px'}:''" class="secondary-menu"/>
:active-text-color="settings.theme" </el-menu>
:collapse-transition="false" </el-scrollbar>
mode="vertical" <div v-show="isExpand" class="side-expand" @click="toggleSideBar">
> <img :src="isCollapse?require('@/assets/images/sidebar_right.png'):require('@/assets/images/sidebar_left.png')">
<sidebar-item
v-for="(route, index) in hidechildren"
:key="route.path + index"
:is-collapse="isCollapse"
:active-menu="activeMenu"
:item="route"
:base-path="route.path"
:class="route.fixed&&route.fixed.isFixed?'sideFoot':''"
:style="route.fixed&&route.fixed.isFixed?{'bottom': route.fixed.number*50+'px'}: bottomMenu&&index==routes.length-bottomMenu-2?{'padding-bottom': bottomMenu*50+'px'}:''"
/>
</el-menu>
</el-scrollbar>
<div v-show="isExpand" class="side-expand" @click="toggleSideBar">
<img :src="isCollapse?require('@/assets/images/sidebar_right.png'):require('@/assets/images/sidebar_left.png')">
</div>
</div> </div>
</div>
</template> </template>
<script> <script>
...@@ -40,69 +24,69 @@ import variables from "@/assets/styles/variables.scss"; ...@@ -40,69 +24,69 @@ import variables from "@/assets/styles/variables.scss";
export default { export default {
components: { SidebarItem, Logo }, components: { SidebarItem, Logo },
data() { data() {
return { return {
isExpand: false isExpand: false
} };
}, },
computed: { computed: {
...mapState(["settings"]), ...mapState(["settings"]),
...mapGetters(["sidebarRouters", "sidebar"]), ...mapGetters(["sidebarRouters", "sidebar"]),
hidechildren(){ hidechildren() {
return this.sidebarRouters.map(item=>{ return this.sidebarRouters.map(item => {
if(item.children?.length){ if (item.children?.length) {
item.children = item.children.filter(i=>{ item.children = item.children.filter(i => {
if (typeof (i.hidden) == 'boolean' && i.hidden == false || i.path == "index"){ if (typeof (i.hidden) == 'boolean' && i.hidden == false || i.path == "index") {
return i return i;
}
})
}
return item
})
},
activeMenu() {
const route = this.$route;
const { meta, path } = route;
// if set path, the sidebar will highlight the path you set
if (meta.activeMenu) {
return meta.activeMenu;
} }
return path; });
}, }
device() { return item;
return this.$store.state.app.device });
}, },
bottomMenu() { activeMenu() {
const routeArr = this.$router.options.routes const route = this.$route;
const navFixed = routeArr.filter(item => item.fixed && item.fixed.isFixed) const { meta, path } = route;
return navFixed.length // if set path, the sidebar will highlight the path you set
}, if (meta.activeMenu) {
showLogo() { return meta.activeMenu;
return this.$store.state.settings.sidebarLogo; }
}, return path;
variables() { },
return variables; device() {
}, return this.$store.state.app.device;
isCollapse() { },
return !this.sidebar.opened; bottomMenu() {
}, const routeArr = this.$router.options.routes;
const navFixed = routeArr.filter(item => item.fixed && item.fixed.isFixed);
return navFixed.length;
},
showLogo() {
return this.$store.state.settings.sidebarLogo;
},
variables() {
return variables;
},
isCollapse() {
return !this.sidebar.opened;
},
},
methods: {
toggleSideBar() {
this.$emit('handleBar', this.isCollapse ? '-96' : '96'); // 96为展开宽度和收起宽度之差
this.$store.dispatch('app/toggleSideBar');
},
sideEnter() {
if (this.device !== 'mobile') {
this.isExpand = true;
}
},
sideLeave() {
if (this.device !== 'mobile') {
this.isExpand = false;
}
}, },
methods: { },
toggleSideBar(){
this.$emit('handleBar', this.isCollapse ? '-96' : '96'); // 96为展开宽度和收起宽度之差
this.$store.dispatch('app/toggleSideBar');
},
sideEnter(){
if (this.device !== 'mobile') {
this.isExpand = true;
}
},
sideLeave(){
if (this.device !== 'mobile') {
this.isExpand = false;
}
},
},
}; };
</script> </script>
...@@ -96,6 +96,7 @@ export default { ...@@ -96,6 +96,7 @@ export default {
position: relative; position: relative;
height: 100%; height: 100%;
width: 100%; width: 100%;
overflow: hidden;
&.mobile.openSidebar { &.mobile.openSidebar {
position: fixed; position: fixed;
......
<template> <template>
<div class="app-container" @click = 'handleALL'> <div class="app-container" @click='handleALL'>
<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">
...@@ -11,16 +11,16 @@ ...@@ -11,16 +11,16 @@
<div> <div>
<!-- 未点击前的输入框样式 --> <!-- 未点击前的输入框样式 -->
<div class="normal-search-container" :class="{'is-hover-search' : searchHoverStatus}" @mouseover="searchHover($event)" <div class="normal-search-container" :class="{'is-hover-search' : searchHoverStatus}" @mouseover="searchHover($event)"
@mouseleave="searchUnHover($event)"> @mouseleave="searchUnHover($event)">
<img src="@/assets/images/enterprise/enterprise-search-icon.svg" alt=""> <img src="@/assets/images/enterprise/enterprise-search-icon.svg" alt="">
<span v-if="!searchHoverStatus && !searchParam.companyName">搜索</span> <span v-if="!searchHoverStatus && !searchParam.companyName">搜索</span>
<el-input v-model="searchParam.companyName" placeholder="输入关键词查询" style="width:238px;" @focus="searchFocus($event)" <el-input v-model="searchParam.companyName" placeholder="输入关键词查询" style="width:238px;" @focus="searchFocus($event)"
@blur="searchBlur($event)" @input="value => searchInput(value)" v-else="searchHoverStatus || searchParam.companyName" @blur="searchBlur($event)" @input="value => searchInput(value)" v-else="searchHoverStatus || searchParam.companyName"
@keydown.native.enter="handleSearch"> @keydown.native.enter="handleSearch">
<template slot="suffix"> <template slot="suffix">
<transition mode="out-in" appear name="fade"> <transition mode="out-in" appear name="fade">
<img src="@/assets/images/enterprise/search-input-clear-icon.svg" alt="" @click.stop="searchParam.companyName = '';getCustomerList()" <img src="@/assets/images/enterprise/search-input-clear-icon.svg" alt=""
v-show="showClearIcon"> @click.stop="searchParam.companyName = '';getCustomerList()" v-show="showClearIcon">
</transition> </transition>
</template> </template>
</el-input> </el-input>
...@@ -31,176 +31,124 @@ ...@@ -31,176 +31,124 @@
</div> </div>
</div> </div>
<skeleton v-if="isSkeleton"></skeleton> <skeleton v-if="isSkeleton"></skeleton>
<el-table v-if="!isSkeleton&&tableData.total > 0" class="fixed-table" v-horizontal-scroll="tableData.total > 10 ? 'hover' : 'false'" max-height="640" <el-table v-if="!isSkeleton&&tableData.total > 0" class="fixed-table" v-horizontal-scroll="tableData.total > 10 ? 'hover' : 'false'"
:data="tableData.rows" max-height="640" :data="tableData.rows" stripe border style="width: 100%">
stripe border <el-table-column prop="index" label="序号" fixed="left" width="60">
style="width: 100%">
<el-table-column
prop="index"
label="序号"
fixed="left"
width="60">
<template slot-scope='scope'> <template slot-scope='scope'>
<span>{{ (searchParam.pageNum - 1) * searchParam.pageSize + scope.$index + 1 }}</span> <span>{{ (searchParam.pageNum - 1) * searchParam.pageSize + scope.$index + 1 }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="date" label="企业名称" fixed="left" width="316">
prop="date"
label="企业名称"
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>
<div class="ps3"> <div class="ps3">
<el-tooltip class="item" effect="dark" content="重新认领" placement="top"> <el-tooltip class="item" effect="dark" content="重新认领" placement="top">
<div @click="toRL(scope.row)"><img class="i" src="@/assets/images/project/khrl1.png"><img class="o" src="@/assets/images/project/khrl2.png"></div> <div @click="toRL(scope.row)"><img class="i" src="@/assets/images/project/khrl1.png"><img class="o"
src="@/assets/images/project/khrl2.png"></div>
</el-tooltip> </el-tooltip>
</div> </div>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="cooperationProject" label="合作项目" width="90">
prop="cooperationProject"
label="合作项目"
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" label="跟进项目" width="90">
prop="followProject"
label="跟进项目"
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" label="储备项目" width="90">
prop="reserveProject"
label="储备项目"
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" label="法定代表人" width="110">
prop="legalPerson"
label="法定代表人"
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" label="注册地区" width="160">
prop="registerAddress"
label="注册地区"
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" label="注册资本金(万元)" width="160">
prop="registerCapitalStr"
label="注册资本金(万元)"
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" label="企业主体评级" width="100">
prop="creditLevel"
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" label="上市公司" width="76">
prop="isOn"
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" label="局级大客户" width="88">
prop="isMajor"
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" label="客户等级" width="76">
prop="customerLevel"
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" label="客户性质" width="76">
prop="companyNature"
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" label="客户级别" width="76">
prop="companyLevel"
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" label="企业母公司" width="268">
prop="address"
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" label="主营业务" width="400">
prop="mainBusiness"
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" label="发包属性" width="400">
prop="companyAttribute" :key="keys+2"
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" label="跟进人" width="110">
prop="followUser"
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 :page-size="searchParam.pageSize" :current-page="searchParam.pageNum" @current-change="handleCurrentChange"
background layout="prev, pager, next" :total="tableData.total">
:page-size="searchParam.pageSize"
:current-page="searchParam.pageNum"
@current-change="handleCurrentChange"
layout="prev, pager, next"
:total="tableData.total">
</el-pagination> </el-pagination>
</div> </div>
<div class="delform" v-if="RLcompanyName"> <div class="delform" v-if="RLcompanyName">
...@@ -216,30 +164,30 @@ ...@@ -216,30 +164,30 @@
</template> </template>
<script> <script>
import { getToken } from "@/utils/auth"; import { getToken } from "@/utils/auth";
import "@/assets/styles/project.scss" import "@/assets/styles/project.scss";
import {getCustomerList,importData,addCustomer} from '@/api/custom/custom' import { getCustomerList, importData, addCustomer } from '@/api/custom/custom';
import {getEnterprise,getDictType,} from '@/api/main' import { getEnterprise, getDictType, } from '@/api/main';
import {encodeStr} from "@/assets/js/common" import { encodeStr } from "@/assets/js/common";
import { historyClaim } from "@/api/common" //认领 import { historyClaim } from "@/api/common"; //认领
import skeleton from '../../project/projectList/component/skeleton' import skeleton from '../../project/projectList/component/skeleton';
export default { export default {
name: 'CustomList', name: 'CustomList',
components:{skeleton}, components: { skeleton },
data() { data() {
return{ return {
encodeStr, encodeStr,
searchParam:{ searchParam: {
companyName:'', companyName: '',
pageNum:1, pageNum: 1,
pageSize:20, pageSize: 20,
status:1, status: 1,
}, },
tableData: [],//列表 tableData: [],//列表
customerLevel:[],//客户等级 customerLevel: [],//客户等级
rules:{ rules: {
companyName:[{ required: true, message: '请输入非空格字符!', trigger: 'blur' },] companyName: [{ required: true, message: '请输入非空格字符!', trigger: 'blur' },]
}, },
//批量导入 //批量导入
action: process.env.VUE_APP_BASE_API + "/customer/importData", action: process.env.VUE_APP_BASE_API + "/customer/importData",
...@@ -248,102 +196,102 @@ export default { ...@@ -248,102 +196,102 @@ export default {
Authorization: "Bearer " + getToken(), Authorization: "Bearer " + getToken(),
}, },
// isNew:true, // isNew:true,
showlist:false, showlist: false,
keys:1, keys: 1,
RLcompanyName:'',//重新认领企业名称 RLcompanyName: '',//重新认领企业名称
isSkeleton:true, isSkeleton: true,
showClearIcon: false, showClearIcon: false,
searchHoverStatus: false, searchHoverStatus: false,
hover: false, hover: false,
} };
}, },
created() { created() {
this.$watch( this.$watch(
() => this.$route.params, () => this.$route.params,
() => { () => {
this.getCustomerList() this.getCustomerList();
this.getDictType() this.getDictType();
this.searchParam.companyName = '' this.searchParam.companyName = '';
},{ immediate: true }) }, { immediate: true });
}, },
methods:{ methods: {
sq1(item,sq){ sq1(item, sq) {
this.$nextTick(()=>{ this.$nextTick(() => {
item.sq1 = sq item.sq1 = sq;
this.keys++ ; this.keys++;
}) });
}, },
sq2(item,sq){ sq2(item, sq) {
this.$nextTick(()=>{ this.$nextTick(() => {
item.sq2 = sq item.sq2 = sq;
this.keys++ ; this.keys++;
}) });
}, },
handleALL(event){ handleALL(event) {
var one = document.getElementById("box"); var one = document.getElementById("box");
if(one){ if (one) {
if(!one.contains(event.target)){ if (!one.contains(event.target)) {
this.showlist = false this.showlist = false;
} }
} }
}, },
toct(){ toct() {
this.dialogVisible = false this.dialogVisible = false;
this.$router.push({path:'/macro/urban'}) this.$router.push({ path: '/macro/urban' });
}, },
getDictType(){ getDictType() {
//获取客户等级 //获取客户等级
getDictType('customer_level_type').then(result=>{ getDictType('customer_level_type').then(result => {
this.customerLevel = result.code == 200 ? result.data:[] this.customerLevel = result.code == 200 ? result.data : [];
}) });
}, },
//获取客户列表 //获取客户列表
getCustomerList(){ getCustomerList() {
getCustomerList(this.searchParam).then(result=>{ getCustomerList(this.searchParam).then(result => {
this.isSkeleton = false this.isSkeleton = false;
this.tableData = result this.tableData = result;
this.tableData.rows.forEach(item=>{ this.tableData.rows.forEach(item => {
item.registerCapital = item.registerCapital == null?null: item.registerCapital.replace(/^\D*(\d*(?:\.\d{0,6})?).*$/g, '$1') item.registerCapital = item.registerCapital == null ? null : item.registerCapital.replace(/^\D*(\d*(?:\.\d{0,6})?).*$/g, '$1');
if(item.mainBusiness != "" && item.mainBusiness != null && item.mainBusiness.length>84){ if (item.mainBusiness != "" && item.mainBusiness != null && item.mainBusiness.length > 84) {
item.mainBusiness1 = item.mainBusiness.substring(0,81) item.mainBusiness1 = item.mainBusiness.substring(0, 81);
item.sq1 = true item.sq1 = true;
}else{ } else {
item.sq1 = false item.sq1 = false;
} }
if(item.companyAttribute != "" && item.companyAttribute != null && item.companyAttribute.length>84){ if (item.companyAttribute != "" && item.companyAttribute != null && item.companyAttribute.length > 84) {
item.companyAttribute1 = item.companyAttribute.substring(0,81) item.companyAttribute1 = item.companyAttribute.substring(0, 81);
item.sq2 = true item.sq2 = true;
}else{ } else {
item.sq2 = false item.sq2 = false;
} }
}) });
}) });
}, },
//跳转到客户详情 //跳转到客户详情
toDetail(row,type){ toDetail(row, type) {
let customerId = row.customerId let customerId = row.customerId;
let companyId = row.companyId let companyId = row.companyId;
let path = type let path = type;
// if(type == "" && companyId == null){ // if(type == "" && companyId == null){
// path = 'business' // path = 'business'
// } // }
this.$router.push({path:'/enterprise/'+encodeStr(companyId),query:{customerId:customerId,path:path}}) this.$router.push({ path: '/enterprise/' + encodeStr(companyId), query: { customerId: customerId, path: path } });
}, },
//认领客户 //认领客户
async toRL(row){ async toRL(row) {
this.RLcompanyName = row.companyName.replace(/<[^>]+>/g, '') this.RLcompanyName = row.companyName.replace(/<[^>]+>/g, '');
}, },
async RL(){ async RL() {
let res = await historyClaim(this.RLcompanyName) let res = await historyClaim(this.RLcompanyName);
if(res.code==200){ if (res.code == 200) {
this.$message.success('认领成功!') this.$message.success('认领成功!');
this.handleCurrentChange(1) this.handleCurrentChange(1);
this.RLcompanyName='' this.RLcompanyName = '';
} }
}, },
clearname(value){ clearname(value) {
if(value == ""){ if (value == "") {
this.handleCurrentChange(1) this.handleCurrentChange(1);
} }
}, },
handleSearch() { handleSearch() {
...@@ -354,14 +302,14 @@ export default { ...@@ -354,14 +302,14 @@ export default {
}, },
//翻页 //翻页
handleCurrentChange(val) { handleCurrentChange(val) {
this.isSkeleton = true this.isSkeleton = true;
this.searchParam.pageNum=val this.searchParam.pageNum = val;
this.getCustomerList() this.getCustomerList();
}, },
searchFocus(event) { searchFocus(event) {
const { target } = event; const { target } = event;
if (target?.value?.length) { if (target?.value?.length) {
this.showClearIcon=true this.showClearIcon = true;
} }
}, },
searchBlur(event) { searchBlur(event) {
...@@ -394,203 +342,202 @@ export default { ...@@ -394,203 +342,202 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.delform{ .delform {
width: 228px; width: 228px;
left: 50%; left: 50%;
top: 50%; top: 50%;
margin-left: -114px; margin-left: -114px;
margin-top: -57px; margin-top: -57px;
.words{ .words {
font-size: 14px; font-size: 14px;
}
}
.app-container{
height: calc(100vh - 134px)
} }
.box-card{ }
padding-top: 16px; .app-container {
width: 100%; height: calc(100vh - 134px);
height: 100%; }
.table_search{ .box-card {
::v-deep .normal-search-container { padding-top: 16px;
display: flex; width: 100%;
align-items: center; height: 100%;
line-height: 32px; .table_search {
height: 32px; ::v-deep .normal-search-container {
&.is-hover-search { display: flex;
width: 238px; align-items: center;
background: #f4f6f9; line-height: 32px;
border-radius: 4px 4px 4px 4px; height: 32px;
&.is-hover-search {
width: 238px;
background: #f4f6f9;
border-radius: 4px 4px 4px 4px;
& > img { & > img {
cursor: unset; cursor: unset;
}
} }
}
&:hover { &:hover {
& > span { & > span {
color: #0081ff; color: #0081ff;
}
} }
}
& > img { & > img {
width: 16px; width: 16px;
height: 16px; height: 16px;
margin-left: 12px; margin-left: 12px;
cursor: pointer; cursor: pointer;
} }
& > span { & > span {
color: rgba(35, 35, 35, 0.8);
font-weight: 400;
margin-left: 8px;
line-height: 22px;
font-size: 14px;
cursor: pointer;
}
.el-input {
& > .el-input__inner {
border: none;
height: 32px;
line-height: 32px;
caret-color: #0081ff;
color: rgba(35, 35, 35, 0.8); color: rgba(35, 35, 35, 0.8);
font-weight: 400;
margin-left: 8px;
line-height: 22px;
font-size: 14px; font-size: 14px;
cursor: pointer; background: #f4f6f9;
} padding-right: 26px;
padding-left: 8px;
.el-input { &::placeholder {
& > .el-input__inner { color: rgba(35, 35, 35, 0.4) !important;
border: none; font-size: 14px !important;
height: 32px;
line-height: 32px; line-height: 32px;
caret-color: #0081ff;
color: rgba(35, 35, 35, 0.8);
font-size: 14px;
background: #f4f6f9;
padding-right: 26px;
padding-left: 8px;
&::placeholder {
color: rgba(35, 35, 35, 0.4) !important;
font-size: 14px !important;
line-height: 32px;
}
} }
.el-input__suffix { }
right: 12px; .el-input__suffix {
display: flex; right: 12px;
align-items: center; display: flex;
align-items: center;
.el-input__suffix-inner { .el-input__suffix-inner {
height: 14px; height: 14px;
width: 14px; width: 14px;
} }
img { img {
cursor: pointer; cursor: pointer;
vertical-align: unset; vertical-align: unset;
margin-bottom: 14px; margin-bottom: 14px;
}
} }
} }
} }
} }
} }
.box{ }
position: relative; .box {
>span{ position: relative;
position: absolute; > span {
right: 10px; position: absolute;
bottom: 0; right: 10px;
color: #0081FF; bottom: 0;
cursor: pointer; color: #0081ff;
&:hover{ cursor: pointer;
color: #006AD1; &:hover {
} color: #006ad1;
}
}
.dc{
font-size: 12px;
color: #3D3D3D;
font-weight: 400;
position: relative;
line-height: 32px;
&::after{
content: ' ';
width: 2px;
height: 2px;
background: rgba(35,35,35,0.4);
border-radius: 50%;
position: absolute;
top: 16px;
left: 14px;
}
>div{
display: inline-block;
margin-left: 20px;
} }
} }
.img.img1{ }
margin-right: 2px; .dc {
background: url('../../../../src/assets/images/project/add_2.png')no-repeat center center; font-size: 12px;
background-size: 100%; color: #3d3d3d;
font-weight: 400;
position: relative;
line-height: 32px;
&::after {
content: " ";
width: 2px;
height: 2px;
background: rgba(35, 35, 35, 0.4);
border-radius: 50%;
position: absolute;
top: 16px;
left: 14px;
} }
.w88{ > div {
width: 88px; display: inline-block;
margin-left: 20px;
} }
.tables{ }
position: relative; .img.img1 {
min-height: calc(100vh - 134px); margin-right: 2px;
/*overflow: auto;*/ background: url("../../../../src/assets/images/project/add_2.png") no-repeat
.empty{ center center;
position: absolute; background-size: 100%;
top: 50%; }
left: 50%; .w88 {
transform: translate(-50%,-50%); width: 88px;
.btn{ }
margin-right: 8px; .tables {
margin-top: 16px; position: relative;
} min-height: calc(100vh - 134px);
/*overflow: auto;*/
.empty {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
.btn {
margin-right: 8px;
margin-top: 16px;
} }
} }
.ps1{ }
.ps1 {
display: flex;
justify-content: space-between;
.ps2 {
width: 350px;
}
.ps3 {
width: 60px;
display: flex; display: flex;
justify-content: space-between; justify-content: right;
.ps2{ > div {
width: 350px; margin-left: 12px;
} > img {
.ps3{ float: right;
width: 60px; margin: 3px 0 0 4px;
display: flex; width: 14px;
justify-content: right; }
>div{ .i {
margin-left: 12px; display: inline-block;
>img{ }
float: right; .o {
margin: 3px 0 0 4px; display: none;
width: 14px; }
} &:hover {
.i{ cursor: pointer;
display: inline-block; .i {
}
.o{
display: none; display: none;
} }
&:hover{ .o {
cursor: pointer; display: inline-block;
.i{
display: none;
}
.o{
display: inline-block;
}
} }
} }
} }
} }
.popbot{ }
.wordprimary{ .popbot {
display: inline; .wordprimary {
padding-right: 26px; display: inline;
} padding-right: 26px;
}
.app-container{
height: auto;
} }
.searchInput{ }
.el-input{
width: 260px; .searchInput {
} .el-input {
width: 260px;
} }
}
</style> </style>
This source diff could not be displayed because it is too large. You can view the blob instead.
package com.dsk.system.domain.vo;
import com.dsk.common.annotation.Excel;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 用户对象导入VO
*
* @author Lion Li
*/
@Data
@NoArgsConstructor
// @Accessors(chain = true) // 导入不允许使用 会找不到set方法
public class AptitudeVo implements Serializable {
//如需修改以下字段,需同步修改
private static final long serialVersionUID = 1L;
/**
* 序号
*/
@Excel(name = "序号")
private Integer no;
/**
* 企业名称
*/
@Excel(name = "企业名称")
private String companyName;
/**
* 资质名称
*/
@Excel(name = "资质名称")
private String certName;
/**
* 资质编号
*/
@Excel(name = "资质编号")
private String certNo;
/**
* 承包工程范围
*/
@Excel(name = "承包工程范围")
private String contractScope;
/**
* 发证日期
*/
@Excel(name = "发证日期")
private String issueDate;
/**
* 有效期
*/
@Excel(name = "有效期")
private String validityDate;
/**
* 发证机关
*/
@Excel(name = "发证机关")
private String authority;
/**
* 经营范围
*/
@Excel(name = "经营范围")
private String businessScope;
}
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