Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
dsk-cr20g
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
dsk-cr20g
Commits
ad80560a
Commit
ad80560a
authored
Aug 30, 2023
by
liuChang
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev20230707' of 192.168.60.201:root/dsk-operate-sys into dev20230707
parents
26e0c31e
194d0a29
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
2427 additions
and
663 deletions
+2427
-663
JskCombineInfoController.java
.../com/dsk/web/controller/dsk/JskCombineInfoController.java
+67
-23
ExcelUtil.java
...mon/src/main/java/com/dsk/common/utils/poi/ExcelUtil.java
+359
-625
more.png
dsk-operate-ui/src/assets/images/more.png
+0
-0
public.css
dsk-operate-ui/src/assets/styles/public.css
+1
-0
index.vue
dsk-operate-ui/src/layout/index.vue
+2
-2
noData.vue
dsk-operate-ui/src/views/component/noData.vue
+6
-1
index.vue
...te-ui/src/views/enterpriseData/components/Group/index.vue
+3
-3
index.vue
dsk-operate-ui/src/views/project/overview/index.vue
+3
-3
details.vue
dsk-operate-ui/src/views/radar/MajorProject/details.vue
+402
-0
index.vue
...rate-ui/src/views/radar/components/MajorProject/index.vue
+1278
-0
index.vue
dsk-operate-ui/src/views/radar/index.vue
+12
-2
JskCombineBidPageDto.java
...a/com/dsk/system/domain/dsk/dto/JskCombineBidPageDto.java
+92
-0
JskCombineSearchDto.java
...va/com/dsk/system/domain/dsk/dto/JskCombineSearchDto.java
+4
-0
JskCombineBidProjectExportVo.java
...sk/system/domain/dsk/vo/JskCombineBidProjectExportVo.java
+55
-0
JskCombineWinBidProjectExportVo.java
...system/domain/dsk/vo/JskCombineWinBidProjectExportVo.java
+55
-0
JskCombineInfoService.java
...java/com/dsk/system/dskService/JskCombineInfoService.java
+88
-4
No files found.
dsk-admin/src/main/java/com/dsk/web/controller/dsk/JskCombineInfoController.java
View file @
ad80560a
package
com
.
dsk
.
web
.
controller
.
dsk
;
import
cn.hutool.core.date.DateUtil
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.dsk.common.core.controller.BaseController
;
import
com.dsk.common.core.domain.AjaxResult
;
import
com.dsk.common.core.domain.R
;
import
com.dsk.common.core.page.TableDataInfo
;
import
com.dsk.system.domain.dsk.dto.JskCombineBidPageDto
;
import
com.dsk.common.utils.poi.ExcelUtil
;
import
com.dsk.system.domain.dsk.dto.JskCombineCertificateDto
;
import
com.dsk.system.domain.dsk.dto.JskCombineSearchDto
;
import
com.dsk.system.domain.dsk.vo.JskCombineBidProjectExportVo
;
import
com.dsk.system.domain.dsk.vo.JskCombineWinBidProjectExportVo
;
import
com.dsk.system.dskService.JskCombineInfoService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.poi.util.IOUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.*
;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
/**
* 集团户相关信息
*
* @author lcl
* @create 2023/8/7
*/
...
...
@@ -29,7 +39,7 @@ public class JskCombineInfoController extends BaseController {
private
JskCombineInfoService
baseService
;
/**
*
集团成员列表
* 集团成员列表
*/
@PostMapping
(
"/memberList"
)
public
TableDataInfo
memberList
(
@RequestBody
JskCombineSearchDto
dto
)
throws
Exception
{
...
...
@@ -37,7 +47,7 @@ public class JskCombineInfoController extends BaseController {
}
/**
*
分组成员数量
* 分组成员数量
*/
@PostMapping
(
"/group/memberCount"
)
public
R
groupMemberCount
(
@RequestBody
JskCombineSearchDto
dto
)
{
...
...
@@ -45,7 +55,7 @@ public class JskCombineInfoController extends BaseController {
}
/**
*
集团业绩列表
* 集团业绩列表
*/
@PostMapping
(
"/businessList"
)
public
TableDataInfo
businessList
(
@RequestBody
JskCombineSearchDto
dto
)
throws
Exception
{
...
...
@@ -53,14 +63,15 @@ public class JskCombineInfoController extends BaseController {
}
/**
*
集团资质列表
* 集团资质列表
*/
@PostMapping
(
"/certificateList"
)
public
TableDataInfo
certificateList
(
@RequestBody
JskCombineSearchDto
dto
)
throws
Exception
{
return
baseService
.
certificateList
(
dto
);
}
/**
*
集团成员资质列表
* 集团成员资质列表
*/
@PostMapping
(
"/member/certificateList"
)
public
TableDataInfo
menberCertificateList
(
@RequestBody
JskCombineCertificateDto
dto
)
throws
Exception
{
...
...
@@ -68,7 +79,7 @@ public class JskCombineInfoController extends BaseController {
}
/**
*
集团资质分组统计
* 集团资质分组统计
*/
@PostMapping
(
"/group/certificateCount"
)
public
R
groupCertificateCount
(
@RequestBody
JskCombineSearchDto
dto
)
throws
Exception
{
...
...
@@ -76,7 +87,7 @@ public class JskCombineInfoController extends BaseController {
}
/**
*
集团户搜索
* 集团户搜索
*/
@PostMapping
(
"/index"
)
public
AjaxResult
index
(
@RequestBody
JSONObject
object
)
{
...
...
@@ -84,15 +95,15 @@ public class JskCombineInfoController extends BaseController {
}
/**
*
查央企
* 查央企
*/
@PostMapping
(
"/centralEnterprse"
)
public
AjaxResult
centralEnterprse
()
{
public
AjaxResult
centralEnterprse
()
{
return
baseService
.
centralEnterprse
();
}
/**
*
查央企子公司
* 查央企子公司
*/
@PostMapping
(
"/centralEnterprse/child"
)
public
AjaxResult
centralEnterprseChild
()
{
...
...
@@ -100,7 +111,7 @@ public class JskCombineInfoController extends BaseController {
}
/**
*
查央企子公司 翻页
* 查央企子公司 翻页
*/
@PostMapping
(
"/centralEnterprse/child/page"
)
public
AjaxResult
centralEnterprseChildPage
(
@RequestBody
JSONObject
object
)
{
...
...
@@ -108,34 +119,67 @@ public class JskCombineInfoController extends BaseController {
}
/**
*
查地方国企
* 查地方国企
*/
@PostMapping
(
"/centralEnterprse/local"
)
public
AjaxResult
centralEnterprseLocal
(
@RequestBody
JSONObject
object
)
{
public
AjaxResult
centralEnterprseLocal
(
@RequestBody
JSONObject
object
)
{
return
baseService
.
centralEnterprseLocal
(
object
);
}
/**
*
查地方国企 翻页
* 查地方国企 翻页
*/
@PostMapping
(
"/centralEnterprse/local/page"
)
public
AjaxResult
centralEnterprseLocalPage
(
@RequestBody
JSONObject
object
)
{
public
AjaxResult
centralEnterprseLocalPage
(
@RequestBody
JSONObject
object
)
{
return
baseService
.
centralEnterprseLocalPage
(
object
);
}
/**
*
民营企业
* 民营企业
*/
@PostMapping
(
"/centralEnterprse/social"
)
public
AjaxResult
centralEnterprseSocial
()
{
public
AjaxResult
centralEnterprseSocial
()
{
return
baseService
.
centralEnterprseSocial
();
}
/**
*
民营企业 翻页
* 民营企业 翻页
*/
@PostMapping
(
"/centralEnterprse/social/page"
)
public
AjaxResult
centralEnterprseSocialPage
(
@RequestBody
JSONObject
object
)
{
public
AjaxResult
centralEnterprseSocialPage
(
@RequestBody
JSONObject
object
)
{
return
baseService
.
centralEnterprseSocialPage
(
object
);
}
/**
* 导出中标业绩
*/
@PostMapping
(
"/export/win/bid"
)
@PreAuthorize
(
"@ss.hasPermi('combine:info:export:win:bid')"
)
public
void
exportWinBid
(
@RequestBody
JskCombineSearchDto
dto
,
HttpServletResponse
response
)
{
List
<
JskCombineWinBidProjectExportVo
>
list
=
baseService
.
exportWinBid
(
dto
);
ExcelUtil
<
JskCombineWinBidProjectExportVo
>
util
=
new
ExcelUtil
<>(
JskCombineWinBidProjectExportVo
.
class
);
util
.
exportExcel
(
response
,
list
,
"集团中标"
,
dto
.
getCombineName
().
concat
(
"中标业绩清单"
),
true
);
// String fileName = util.localInit(list, "集团中标", dto.getCombineName().concat("中标业绩清单"), true);
}
/**
* 导出招标业绩
*/
@PostMapping
(
"/export/bid"
)
@PreAuthorize
(
"@ss.hasPermi('combine:info:export:bid')"
)
public
void
exportBid
(
@RequestBody
JskCombineBidPageDto
dto
,
HttpServletResponse
response
)
{
List
<
JskCombineBidProjectExportVo
>
list
=
baseService
.
exportBid
(
dto
);
ExcelUtil
<
JskCombineBidProjectExportVo
>
util
=
new
ExcelUtil
<>(
JskCombineBidProjectExportVo
.
class
);
util
.
exportExcel
(
response
,
list
,
"集团招标"
,
dto
.
getCombineName
().
concat
(
"招标公告清单"
),
true
);
}
/**
* 集团招标分页列表
*/
@PostMapping
(
"/bidPage"
)
public
TableDataInfo
bidPage
(
@RequestBody
JskCombineBidPageDto
dto
)
throws
Exception
{
return
baseService
.
bidPage
(
dto
);
}
}
dsk-common/src/main/java/com/dsk/common/utils/poi/ExcelUtil.java
View file @
ad80560a
package
com
.
dsk
.
common
.
utils
.
poi
;
import
java.io.File
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.Method
;
import
java.lang.reflect.ParameterizedType
;
import
java.math.BigDecimal
;
import
java.text.DecimalFormat
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Collection
;
import
java.util.Comparator
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.UUID
;
import
java.util.stream.Collectors
;
import
javax.servlet.http.HttpServletResponse
;
import
com.dsk.common.annotation.Excel
;
import
com.dsk.common.annotation.Excels
;
import
com.dsk.common.config.ShuZhiHuaConfig
;
import
com.dsk.common.core.domain.AjaxResult
;
import
com.dsk.common.core.text.Convert
;
import
com.dsk.common.exception.UtilException
;
import
com.dsk.common.utils.DateUtils
;
import
com.dsk.common.utils.DictUtils
;
import
com.dsk.common.utils.StringUtils
;
import
com.dsk.common.utils.file.FileTypeUtils
;
import
com.dsk.common.utils.file.FileUtils
;
import
com.dsk.common.utils.file.ImageUtils
;
import
com.dsk.common.utils.reflect.ReflectUtils
;
import
org.apache.commons.lang3.ArrayUtils
;
import
org.apache.commons.lang3.RegExUtils
;
import
org.apache.commons.lang3.reflect.FieldUtils
;
import
org.apache.poi.hssf.usermodel.HSSFClientAnchor
;
import
org.apache.poi.hssf.usermodel.HSSFPicture
;
import
org.apache.poi.hssf.usermodel.HSSFPictureData
;
import
org.apache.poi.hssf.usermodel.HSSFShape
;
import
org.apache.poi.hssf.usermodel.HSSFSheet
;
import
org.apache.poi.hssf.usermodel.HSSFWorkbook
;
import
org.apache.poi.hssf.usermodel.*
;
import
org.apache.poi.ooxml.POIXMLDocumentPart
;
import
org.apache.poi.ss.usermodel.BorderStyle
;
import
org.apache.poi.ss.usermodel.Cell
;
import
org.apache.poi.ss.usermodel.CellStyle
;
import
org.apache.poi.ss.usermodel.CellType
;
import
org.apache.poi.ss.usermodel.ClientAnchor
;
import
org.apache.poi.ss.usermodel.DataValidation
;
import
org.apache.poi.ss.usermodel.DataValidationConstraint
;
import
org.apache.poi.ss.usermodel.DataValidationHelper
;
import
org.apache.poi.ss.usermodel.DateUtil
;
import
org.apache.poi.ss.usermodel.Drawing
;
import
org.apache.poi.ss.usermodel.FillPatternType
;
import
org.apache.poi.ss.usermodel.Font
;
import
org.apache.poi.ss.usermodel.HorizontalAlignment
;
import
org.apache.poi.ss.usermodel.IndexedColors
;
import
org.apache.poi.ss.usermodel.Name
;
import
org.apache.poi.ss.usermodel.PictureData
;
import
org.apache.poi.ss.usermodel.Row
;
import
org.apache.poi.ss.usermodel.Sheet
;
import
org.apache.poi.ss.usermodel.VerticalAlignment
;
import
org.apache.poi.ss.usermodel.Workbook
;
import
org.apache.poi.ss.usermodel.WorkbookFactory
;
import
org.apache.poi.ss.usermodel.*
;
import
org.apache.poi.ss.util.CellRangeAddress
;
import
org.apache.poi.ss.util.CellRangeAddressList
;
import
org.apache.poi.util.IOUtils
;
import
org.apache.poi.xssf.streaming.SXSSFWorkbook
;
import
org.apache.poi.xssf.usermodel.XSSFClientAnchor
;
import
org.apache.poi.xssf.usermodel.XSSFDataValidation
;
import
org.apache.poi.xssf.usermodel.XSSFDrawing
;
import
org.apache.poi.xssf.usermodel.XSSFPicture
;
import
org.apache.poi.xssf.usermodel.XSSFShape
;
import
org.apache.poi.xssf.usermodel.XSSFSheet
;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook
;
import
org.apache.poi.xssf.usermodel.*
;
import
org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.dsk.common.config.ShuZhiHuaConfig
;
import
com.dsk.common.exception.UtilException
;
import
com.dsk.common.utils.StringUtils
;
import
com.dsk.common.utils.file.FileTypeUtils
;
import
com.dsk.common.utils.file.FileUtils
;
import
com.dsk.common.utils.file.ImageUtils
;
import
com.dsk.common.utils.reflect.ReflectUtils
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.*
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.Method
;
import
java.lang.reflect.ParameterizedType
;
import
java.math.BigDecimal
;
import
java.text.DecimalFormat
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* Excel相关处理
*
* @author dsk
*/
public
class
ExcelUtil
<
T
>
{
public
class
ExcelUtil
<
T
>
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
ExcelUtil
.
class
);
public
static
final
String
FORMULA_REGEX_STR
=
"=|-|\\+|@"
;
public
static
final
String
[]
FORMULA_STR
=
{
"="
,
"-"
,
"+"
,
"@"
};
public
static
final
String
[]
FORMULA_STR
=
{
"="
,
"-"
,
"+"
,
"@"
};
/**
* 用于dictType属性数据存储,避免重复查缓存
...
...
@@ -151,6 +106,10 @@ public class ExcelUtil<T>
* 标题
*/
private
String
title
;
/**
* 导出时间 (是否添加导出时间)
*/
private
boolean
dateStatus
;
/**
* 最大高度
...
...
@@ -197,8 +156,7 @@ public class ExcelUtil<T>
*/
public
String
[]
excludeFields
;
public
ExcelUtil
(
Class
<
T
>
clazz
)
{
public
ExcelUtil
(
Class
<
T
>
clazz
)
{
this
.
clazz
=
clazz
;
}
...
...
@@ -208,39 +166,35 @@ public class ExcelUtil<T>
* @param fields 列属性名 示例[单个"name"/多个"id","name"]
* @throws Exception
*/
public
void
hideColumn
(
String
...
fields
)
{
public
void
hideColumn
(
String
...
fields
)
{
this
.
excludeFields
=
fields
;
}
public
void
init
(
List
<
T
>
list
,
String
sheetName
,
String
title
,
Excel
.
Type
type
)
{
if
(
list
==
null
)
{
public
void
init
(
List
<
T
>
list
,
String
sheetName
,
String
title
,
Excel
.
Type
type
,
boolean
dateStatus
)
{
if
(
list
==
null
)
{
list
=
new
ArrayList
<
T
>();
}
this
.
list
=
list
;
this
.
sheetName
=
sheetName
;
this
.
type
=
type
;
this
.
title
=
title
;
this
.
dateStatus
=
dateStatus
;
createExcelField
();
createWorkbook
();
createTitle
();
createExportDate
();
createSubHead
();
}
/**
* 创建excel第一行标题
*/
public
void
createTitle
()
{
if
(
StringUtils
.
isNotEmpty
(
title
))
{
public
void
createTitle
()
{
if
(
StringUtils
.
isNotEmpty
(
title
))
{
subMergedFirstRowNum
++;
subMergedLastRowNum
++;
int
titleLastCol
=
this
.
fields
.
size
()
-
1
;
if
(
isSubList
())
{
if
(
isSubList
())
{
titleLastCol
=
titleLastCol
+
subFields
.
size
()
-
1
;
}
Row
titleRow
=
sheet
.
createRow
(
rownum
==
0
?
rownum
++
:
0
);
...
...
@@ -252,19 +206,36 @@ public class ExcelUtil<T>
}
}
public
void
createExportDate
()
{
if
(
dateStatus
)
{
subMergedFirstRowNum
++;
subMergedLastRowNum
++;
int
dateLastCol
=
this
.
fields
.
size
()
-
1
;
if
(
isSubList
())
{
dateLastCol
=
dateLastCol
+
subFields
.
size
()
-
1
;
}
Row
dateRow
=
sheet
.
createRow
(
rownum
);
dateRow
.
setHeightInPoints
(
15
);
Cell
dateCell
=
dateRow
.
createCell
(
0
);
CellStyle
cellStyle
=
wb
.
createCellStyle
();
cellStyle
.
setAlignment
(
HorizontalAlignment
.
CENTER
);
dateCell
.
setCellStyle
(
cellStyle
);
dateCell
.
setCellValue
(
"导出时间:"
.
concat
(
DateUtils
.
dateTimeNow
(
DateUtils
.
YYYY_MM_DD_HH_MM_SS
)));
sheet
.
addMergedRegion
(
new
CellRangeAddress
(
dateRow
.
getRowNum
(),
dateRow
.
getRowNum
(),
0
,
dateLastCol
));
rownum
++;
}
}
/**
* 创建对象的子列表名称
*/
public
void
createSubHead
()
{
if
(
isSubList
())
{
public
void
createSubHead
()
{
if
(
isSubList
())
{
subMergedFirstRowNum
++;
subMergedLastRowNum
++;
Row
subRow
=
sheet
.
createRow
(
rownum
);
int
excelNum
=
0
;
for
(
Object
[]
objects
:
fields
)
{
for
(
Object
[]
objects
:
fields
)
{
Excel
attr
=
(
Excel
)
objects
[
1
];
Cell
headCell1
=
subRow
.
createCell
(
excelNum
);
headCell1
.
setCellValue
(
attr
.
name
());
...
...
@@ -273,8 +244,7 @@ public class ExcelUtil<T>
}
int
headFirstRow
=
excelNum
-
1
;
int
headLastRow
=
headFirstRow
+
subFields
.
size
()
-
1
;
if
(
headLastRow
>
headFirstRow
)
{
if
(
headLastRow
>
headFirstRow
)
{
sheet
.
addMergedRegion
(
new
CellRangeAddress
(
rownum
,
rownum
,
headFirstRow
,
headLastRow
));
}
rownum
++;
...
...
@@ -287,20 +257,18 @@ public class ExcelUtil<T>
* @param is 输入流
* @return 转换后集合
*/
public
List
<
T
>
importExcel
(
InputStream
is
)
throws
Exception
{
public
List
<
T
>
importExcel
(
InputStream
is
)
throws
Exception
{
return
importExcel
(
is
,
0
);
}
/**
* 对excel表单默认第一个索引名转换成list
*
* @param is 输入流
* @param is
输入流
* @param titleNum 标题占用行数
* @return 转换后集合
*/
public
List
<
T
>
importExcel
(
InputStream
is
,
int
titleNum
)
throws
Exception
{
public
List
<
T
>
importExcel
(
InputStream
is
,
int
titleNum
)
throws
Exception
{
return
importExcel
(
StringUtils
.
EMPTY
,
is
,
titleNum
);
}
...
...
@@ -308,77 +276,62 @@ public class ExcelUtil<T>
* 对excel表单指定表格索引名转换成list
*
* @param sheetName 表格索引名
* @param titleNum 标题占用行数
* @param is 输入流
* @param titleNum
标题占用行数
* @param is
输入流
* @return 转换后集合
*/
public
List
<
T
>
importExcel
(
String
sheetName
,
InputStream
is
,
int
titleNum
)
throws
Exception
{
public
List
<
T
>
importExcel
(
String
sheetName
,
InputStream
is
,
int
titleNum
)
throws
Exception
{
this
.
type
=
Excel
.
Type
.
IMPORT
;
this
.
wb
=
WorkbookFactory
.
create
(
is
);
List
<
T
>
list
=
new
ArrayList
<
T
>();
// 如果指定sheet名,则取指定sheet中的内容 否则默认指向第1个sheet
Sheet
sheet
=
StringUtils
.
isNotEmpty
(
sheetName
)
?
wb
.
getSheet
(
sheetName
)
:
wb
.
getSheetAt
(
0
);
if
(
sheet
==
null
)
{
if
(
sheet
==
null
)
{
throw
new
IOException
(
"文件sheet不存在"
);
}
boolean
isXSSFWorkbook
=
!(
wb
instanceof
HSSFWorkbook
);
Map
<
String
,
PictureData
>
pictures
;
if
(
isXSSFWorkbook
)
{
if
(
isXSSFWorkbook
)
{
pictures
=
getSheetPictures07
((
XSSFSheet
)
sheet
,
(
XSSFWorkbook
)
wb
);
}
else
{
}
else
{
pictures
=
getSheetPictures03
((
HSSFSheet
)
sheet
,
(
HSSFWorkbook
)
wb
);
}
// 获取最后一个非空行的行下标,比如总行数为n,则返回的为n-1
int
rows
=
sheet
.
getLastRowNum
();
if
(
rows
>
0
)
{
if
(
rows
>
0
)
{
// 定义一个map用于存放excel列的序号和field.
Map
<
String
,
Integer
>
cellMap
=
new
HashMap
<
String
,
Integer
>();
// 获取表头
Row
heard
=
sheet
.
getRow
(
titleNum
);
for
(
int
i
=
0
;
i
<
heard
.
getPhysicalNumberOfCells
();
i
++)
{
for
(
int
i
=
0
;
i
<
heard
.
getPhysicalNumberOfCells
();
i
++)
{
Cell
cell
=
heard
.
getCell
(
i
);
if
(
StringUtils
.
isNotNull
(
cell
))
{
if
(
StringUtils
.
isNotNull
(
cell
))
{
String
value
=
this
.
getCellValue
(
heard
,
i
).
toString
();
cellMap
.
put
(
value
,
i
);
}
else
{
}
else
{
cellMap
.
put
(
null
,
i
);
}
}
// 有数据时才处理 得到类的所有field.
List
<
Object
[]>
fields
=
this
.
getFields
();
Map
<
Integer
,
Object
[]>
fieldsMap
=
new
HashMap
<
Integer
,
Object
[]>();
for
(
Object
[]
objects
:
fields
)
{
for
(
Object
[]
objects
:
fields
)
{
Excel
attr
=
(
Excel
)
objects
[
1
];
Integer
column
=
cellMap
.
get
(
attr
.
name
());
if
(
column
!=
null
)
{
if
(
column
!=
null
)
{
fieldsMap
.
put
(
column
,
objects
);
}
}
for
(
int
i
=
titleNum
+
1
;
i
<=
rows
;
i
++)
{
for
(
int
i
=
titleNum
+
1
;
i
<=
rows
;
i
++)
{
// 从第2行开始取数据,默认第一行是表头.
Row
row
=
sheet
.
getRow
(
i
);
// 判断当前行是否是空行
if
(
isRowEmpty
(
row
))
{
if
(
isRowEmpty
(
row
))
{
continue
;
}
T
entity
=
null
;
for
(
Map
.
Entry
<
Integer
,
Object
[]>
entry
:
fieldsMap
.
entrySet
())
{
for
(
Map
.
Entry
<
Integer
,
Object
[]>
entry
:
fieldsMap
.
entrySet
())
{
Object
val
=
this
.
getCellValue
(
row
,
entry
.
getKey
());
// 如果不存在实例则新建.
...
...
@@ -388,89 +341,52 @@ public class ExcelUtil<T>
Excel
attr
=
(
Excel
)
entry
.
getValue
()[
1
];
// 取得类型,并根据对象类型设置值.
Class
<?>
fieldType
=
field
.
getType
();
if
(
String
.
class
==
fieldType
)
{
if
(
String
.
class
==
fieldType
)
{
String
s
=
Convert
.
toStr
(
val
);
if
(
StringUtils
.
endsWith
(
s
,
".0"
))
{
if
(
StringUtils
.
endsWith
(
s
,
".0"
))
{
val
=
StringUtils
.
substringBefore
(
s
,
".0"
);
}
else
{
}
else
{
String
dateFormat
=
field
.
getAnnotation
(
Excel
.
class
).
dateFormat
();
if
(
StringUtils
.
isNotEmpty
(
dateFormat
))
{
if
(
StringUtils
.
isNotEmpty
(
dateFormat
))
{
val
=
parseDateToStr
(
dateFormat
,
val
);
}
else
{
}
else
{
val
=
Convert
.
toStr
(
val
);
}
}
}
else
if
((
Integer
.
TYPE
==
fieldType
||
Integer
.
class
==
fieldType
)
&&
StringUtils
.
isNumeric
(
Convert
.
toStr
(
val
)))
{
}
else
if
((
Integer
.
TYPE
==
fieldType
||
Integer
.
class
==
fieldType
)
&&
StringUtils
.
isNumeric
(
Convert
.
toStr
(
val
)))
{
val
=
Convert
.
toInt
(
val
);
}
else
if
((
Long
.
TYPE
==
fieldType
||
Long
.
class
==
fieldType
)
&&
StringUtils
.
isNumeric
(
Convert
.
toStr
(
val
)))
{
}
else
if
((
Long
.
TYPE
==
fieldType
||
Long
.
class
==
fieldType
)
&&
StringUtils
.
isNumeric
(
Convert
.
toStr
(
val
)))
{
val
=
Convert
.
toLong
(
val
);
}
else
if
(
Double
.
TYPE
==
fieldType
||
Double
.
class
==
fieldType
)
{
}
else
if
(
Double
.
TYPE
==
fieldType
||
Double
.
class
==
fieldType
)
{
val
=
Convert
.
toDouble
(
val
);
}
else
if
(
Float
.
TYPE
==
fieldType
||
Float
.
class
==
fieldType
)
{
}
else
if
(
Float
.
TYPE
==
fieldType
||
Float
.
class
==
fieldType
)
{
val
=
Convert
.
toFloat
(
val
);
}
else
if
(
BigDecimal
.
class
==
fieldType
)
{
}
else
if
(
BigDecimal
.
class
==
fieldType
)
{
val
=
Convert
.
toBigDecimal
(
val
);
}
else
if
(
Date
.
class
==
fieldType
)
{
if
(
val
instanceof
String
)
{
}
else
if
(
Date
.
class
==
fieldType
)
{
if
(
val
instanceof
String
)
{
val
=
DateUtils
.
parseDate
(
val
);
}
else
if
(
val
instanceof
Double
)
{
}
else
if
(
val
instanceof
Double
)
{
val
=
DateUtil
.
getJavaDate
((
Double
)
val
);
}
}
else
if
(
Boolean
.
TYPE
==
fieldType
||
Boolean
.
class
==
fieldType
)
{
}
else
if
(
Boolean
.
TYPE
==
fieldType
||
Boolean
.
class
==
fieldType
)
{
val
=
Convert
.
toBool
(
val
,
false
);
}
if
(
StringUtils
.
isNotNull
(
fieldType
))
{
if
(
StringUtils
.
isNotNull
(
fieldType
))
{
String
propertyName
=
field
.
getName
();
if
(
StringUtils
.
isNotEmpty
(
attr
.
targetAttr
()))
{
if
(
StringUtils
.
isNotEmpty
(
attr
.
targetAttr
()))
{
propertyName
=
field
.
getName
()
+
"."
+
attr
.
targetAttr
();
}
else
if
(
StringUtils
.
isNotEmpty
(
attr
.
readConverterExp
()))
{
}
else
if
(
StringUtils
.
isNotEmpty
(
attr
.
readConverterExp
()))
{
val
=
reverseByExp
(
Convert
.
toStr
(
val
),
attr
.
readConverterExp
(),
attr
.
separator
());
}
else
if
(
StringUtils
.
isNotEmpty
(
attr
.
dictType
()))
{
}
else
if
(
StringUtils
.
isNotEmpty
(
attr
.
dictType
()))
{
val
=
reverseDictByExp
(
Convert
.
toStr
(
val
),
attr
.
dictType
(),
attr
.
separator
());
}
else
if
(!
attr
.
handler
().
equals
(
ExcelHandlerAdapter
.
class
))
{
}
else
if
(!
attr
.
handler
().
equals
(
ExcelHandlerAdapter
.
class
))
{
val
=
dataFormatHandlerAdapter
(
val
,
attr
);
}
else
if
(
Excel
.
ColumnType
.
IMAGE
==
attr
.
cellType
()
&&
StringUtils
.
isNotEmpty
(
pictures
))
{
}
else
if
(
Excel
.
ColumnType
.
IMAGE
==
attr
.
cellType
()
&&
StringUtils
.
isNotEmpty
(
pictures
))
{
PictureData
image
=
pictures
.
get
(
row
.
getRowNum
()
+
"_"
+
entry
.
getKey
());
if
(
image
==
null
)
{
if
(
image
==
null
)
{
val
=
""
;
}
else
{
}
else
{
byte
[]
data
=
image
.
getData
();
val
=
FileUtils
.
writeImportBytes
(
data
);
}
...
...
@@ -487,67 +403,95 @@ public class ExcelUtil<T>
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param list 导出数据集合
* @param list
导出数据集合
* @param sheetName 工作表的名称
* @return 结果
*/
public
AjaxResult
exportExcel
(
List
<
T
>
list
,
String
sheetName
)
{
public
AjaxResult
exportExcel
(
List
<
T
>
list
,
String
sheetName
)
{
return
exportExcel
(
list
,
sheetName
,
StringUtils
.
EMPTY
);
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param list 导出数据集合
* @param list
导出数据集合
* @param sheetName 工作表的名称
* @param title 标题
* @param title
标题
* @return 结果
*/
public
AjaxResult
exportExcel
(
List
<
T
>
list
,
String
sheetName
,
String
title
)
{
this
.
init
(
list
,
sheetName
,
title
,
Excel
.
Type
.
EXPORT
);
public
AjaxResult
exportExcel
(
List
<
T
>
list
,
String
sheetName
,
String
title
)
{
this
.
init
(
list
,
sheetName
,
title
,
Excel
.
Type
.
EXPORT
,
false
);
return
exportExcel
();
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param response 返回数据
* @param list 导出数据集合
* @param response
返回数据
* @param list
导出数据集合
* @param sheetName 工作表的名称
* @return 结果
*/
public
void
exportExcel
(
HttpServletResponse
response
,
List
<
T
>
list
,
String
sheetName
)
{
public
void
exportExcel
(
HttpServletResponse
response
,
List
<
T
>
list
,
String
sheetName
)
{
exportExcel
(
response
,
list
,
sheetName
,
StringUtils
.
EMPTY
);
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param response 返回数据
* @param list 导出数据集合
* @param response
返回数据
* @param list
导出数据集合
* @param sheetName 工作表的名称
* @param title 标题
* @param title
标题
* @return 结果
*/
public
void
exportExcel
(
HttpServletResponse
response
,
List
<
T
>
list
,
String
sheetName
,
String
title
)
{
public
void
exportExcel
(
HttpServletResponse
response
,
List
<
T
>
list
,
String
sheetName
,
String
title
)
{
response
.
setContentType
(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
response
.
setCharacterEncoding
(
"utf-8"
);
this
.
init
(
list
,
sheetName
,
title
,
Excel
.
Type
.
EXPORT
);
this
.
init
(
list
,
sheetName
,
title
,
Excel
.
Type
.
EXPORT
,
false
);
exportExcel
(
response
);
}
public
void
exportExcel
(
HttpServletResponse
response
,
List
<
T
>
list
,
String
sheetName
,
String
title
,
boolean
dateStatus
)
{
response
.
setContentType
(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
response
.
setCharacterEncoding
(
"utf-8"
);
this
.
init
(
list
,
sheetName
,
title
,
Excel
.
Type
.
EXPORT
,
dateStatus
);
exportExcel
(
response
);
}
private
static
final
String
FILE_PATH
=
"D://"
;
/**
* 本地初始化
*
* @param list 数据列表
* @param sheetName sheet名称
* @param title 标题
* @param dateStatus 是否添加导出时间
* @return
*/
public
String
localInit
(
List
<
T
>
list
,
String
sheetName
,
String
title
,
boolean
dateStatus
)
{
String
fileName
=
title
+
"-"
+
System
.
currentTimeMillis
()
+
".xlsx"
;
this
.
init
(
list
,
sheetName
,
title
,
Excel
.
Type
.
EXPORT
,
dateStatus
);
writeSheet
();
try
(
FileOutputStream
fileOutputStream
=
new
FileOutputStream
(
FILE_PATH
.
concat
(
fileName
))){
wb
.
write
(
fileOutputStream
);
return
fileName
;
}
catch
(
Exception
e
)
{
log
.
error
(
"导出Excel异常{}"
,
e
.
getMessage
());
}
finally
{
IOUtils
.
closeQuietly
(
wb
);
}
return
null
;
}
/**
* 对list数据源将其里面的数据导入到excel表单
*
* @param sheetName 工作表的名称
* @return 结果
*/
public
AjaxResult
importTemplateExcel
(
String
sheetName
)
{
public
AjaxResult
importTemplateExcel
(
String
sheetName
)
{
return
importTemplateExcel
(
sheetName
,
StringUtils
.
EMPTY
);
}
...
...
@@ -555,12 +499,11 @@ public class ExcelUtil<T>
* 对list数据源将其里面的数据导入到excel表单
*
* @param sheetName 工作表的名称
* @param title 标题
* @param title
标题
* @return 结果
*/
public
AjaxResult
importTemplateExcel
(
String
sheetName
,
String
title
)
{
this
.
init
(
null
,
sheetName
,
title
,
Excel
.
Type
.
IMPORT
);
public
AjaxResult
importTemplateExcel
(
String
sheetName
,
String
title
)
{
this
.
init
(
null
,
sheetName
,
title
,
Excel
.
Type
.
IMPORT
,
false
);
return
exportExcel
();
}
...
...
@@ -570,8 +513,7 @@ public class ExcelUtil<T>
* @param sheetName 工作表的名称
* @return 结果
*/
public
void
importTemplateExcel
(
HttpServletResponse
response
,
String
sheetName
)
{
public
void
importTemplateExcel
(
HttpServletResponse
response
,
String
sheetName
)
{
importTemplateExcel
(
response
,
sheetName
,
StringUtils
.
EMPTY
);
}
...
...
@@ -579,14 +521,13 @@ public class ExcelUtil<T>
* 对list数据源将其里面的数据导入到excel表单
*
* @param sheetName 工作表的名称
* @param title 标题
* @param title
标题
* @return 结果
*/
public
void
importTemplateExcel
(
HttpServletResponse
response
,
String
sheetName
,
String
title
)
{
public
void
importTemplateExcel
(
HttpServletResponse
response
,
String
sheetName
,
String
title
)
{
response
.
setContentType
(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
response
.
setCharacterEncoding
(
"utf-8"
);
this
.
init
(
null
,
sheetName
,
title
,
Excel
.
Type
.
IMPORT
);
this
.
init
(
null
,
sheetName
,
title
,
Excel
.
Type
.
IMPORT
,
false
);
exportExcel
(
response
);
}
...
...
@@ -595,19 +536,13 @@ public class ExcelUtil<T>
*
* @return 结果
*/
public
void
exportExcel
(
HttpServletResponse
response
)
{
try
{
public
void
exportExcel
(
HttpServletResponse
response
)
{
try
{
writeSheet
();
wb
.
write
(
response
.
getOutputStream
());
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"导出Excel异常{}"
,
e
.
getMessage
());
}
finally
{
}
finally
{
IOUtils
.
closeQuietly
(
wb
);
}
}
...
...
@@ -617,24 +552,18 @@ public class ExcelUtil<T>
*
* @return 结果
*/
public
AjaxResult
exportExcel
()
{
public
AjaxResult
exportExcel
()
{
OutputStream
out
=
null
;
try
{
try
{
writeSheet
();
String
filename
=
encodingFilename
(
sheetName
);
out
=
new
FileOutputStream
(
getAbsoluteFile
(
filename
));
wb
.
write
(
out
);
return
AjaxResult
.
success
(
filename
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"导出Excel异常{}"
,
e
.
getMessage
());
throw
new
UtilException
(
"导出Excel失败,请联系网站管理员!"
);
}
finally
{
}
finally
{
IOUtils
.
closeQuietly
(
wb
);
IOUtils
.
closeQuietly
(
out
);
}
...
...
@@ -643,37 +572,29 @@ public class ExcelUtil<T>
/**
* 创建写入数据到Sheet
*/
public
void
writeSheet
()
{
public
void
writeSheet
()
{
// 取出一共有多少个sheet.
int
sheetNo
=
Math
.
max
(
1
,
(
int
)
Math
.
ceil
(
list
.
size
()
*
1.0
/
sheetSize
));
for
(
int
index
=
0
;
index
<
sheetNo
;
index
++)
{
for
(
int
index
=
0
;
index
<
sheetNo
;
index
++)
{
createSheet
(
sheetNo
,
index
);
// 产生一行
Row
row
=
sheet
.
createRow
(
rownum
);
int
column
=
0
;
// 写入各个字段的列头名称
for
(
Object
[]
os
:
fields
)
{
for
(
Object
[]
os
:
fields
)
{
Field
field
=
(
Field
)
os
[
0
];
Excel
excel
=
(
Excel
)
os
[
1
];
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
()))
{
for
(
Field
subField
:
subFields
)
{
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
()))
{
for
(
Field
subField
:
subFields
)
{
Excel
subExcel
=
subField
.
getAnnotation
(
Excel
.
class
);
this
.
createHeadCell
(
subExcel
,
row
,
column
++);
}
}
else
{
}
else
{
this
.
createHeadCell
(
excel
,
row
,
column
++);
}
}
if
(
Excel
.
Type
.
EXPORT
.
equals
(
type
))
{
if
(
Excel
.
Type
.
EXPORT
.
equals
(
type
))
{
fillExcelData
(
index
,
row
);
addStatisticsRow
();
}
...
...
@@ -684,55 +605,43 @@ public class ExcelUtil<T>
* 填充excel数据
*
* @param index 序号
* @param row 单元格行
* @param row
单元格行
*/
@SuppressWarnings
(
"unchecked"
)
public
void
fillExcelData
(
int
index
,
Row
row
)
{
public
void
fillExcelData
(
int
index
,
Row
row
)
{
int
startNo
=
index
*
sheetSize
;
int
endNo
=
Math
.
min
(
startNo
+
sheetSize
,
list
.
size
());
int
rowNo
=
(
1
+
rownum
)
-
startNo
;
for
(
int
i
=
startNo
;
i
<
endNo
;
i
++)
{
for
(
int
i
=
startNo
;
i
<
endNo
;
i
++)
{
rowNo
=
isSubList
()
?
(
i
>
1
?
rowNo
+
1
:
rowNo
+
i
)
:
i
+
1
+
rownum
-
startNo
;
row
=
sheet
.
createRow
(
rowNo
);
// 得到导出对象.
T
vo
=
(
T
)
list
.
get
(
i
);
Collection
<?>
subList
=
null
;
if
(
isSubList
())
{
if
(
isSubListValue
(
vo
))
{
if
(
isSubList
())
{
if
(
isSubListValue
(
vo
))
{
subList
=
getListCellValue
(
vo
);
subMergedLastRowNum
=
subMergedLastRowNum
+
subList
.
size
();
}
else
{
}
else
{
subMergedFirstRowNum
++;
subMergedLastRowNum
++;
}
}
int
column
=
0
;
for
(
Object
[]
os
:
fields
)
{
for
(
Object
[]
os
:
fields
)
{
Field
field
=
(
Field
)
os
[
0
];
Excel
excel
=
(
Excel
)
os
[
1
];
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
())
&&
StringUtils
.
isNotNull
(
subList
))
{
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
())
&&
StringUtils
.
isNotNull
(
subList
))
{
boolean
subFirst
=
false
;
for
(
Object
obj
:
subList
)
{
if
(
subFirst
)
{
for
(
Object
obj
:
subList
)
{
if
(
subFirst
)
{
rowNo
++;
row
=
sheet
.
createRow
(
rowNo
);
}
List
<
Field
>
subFields
=
FieldUtils
.
getFieldsListWithAnnotation
(
obj
.
getClass
(),
Excel
.
class
);
int
subIndex
=
0
;
for
(
Field
subField
:
subFields
)
{
if
(
subField
.
isAnnotationPresent
(
Excel
.
class
))
{
for
(
Field
subField
:
subFields
)
{
if
(
subField
.
isAnnotationPresent
(
Excel
.
class
))
{
subField
.
setAccessible
(
true
);
Excel
attr
=
subField
.
getAnnotation
(
Excel
.
class
);
this
.
addCell
(
attr
,
row
,
(
T
)
obj
,
subField
,
column
+
subIndex
);
...
...
@@ -742,9 +651,7 @@ public class ExcelUtil<T>
subFirst
=
true
;
}
this
.
subMergedFirstRowNum
=
this
.
subMergedFirstRowNum
+
subList
.
size
();
}
else
{
}
else
{
this
.
addCell
(
excel
,
row
,
vo
,
field
,
column
++);
}
}
...
...
@@ -757,8 +664,7 @@ public class ExcelUtil<T>
* @param wb 工作薄对象
* @return 样式列表
*/
private
Map
<
String
,
CellStyle
>
createStyles
(
Workbook
wb
)
{
private
Map
<
String
,
CellStyle
>
createStyles
(
Workbook
wb
)
{
// 写入各条记录,每条记录对应excel表中的一行
Map
<
String
,
CellStyle
>
styles
=
new
HashMap
<
String
,
CellStyle
>();
CellStyle
style
=
wb
.
createCellStyle
();
...
...
@@ -810,15 +716,12 @@ public class ExcelUtil<T>
* @param wb 工作薄对象
* @return 自定义样式列表
*/
private
Map
<
String
,
CellStyle
>
annotationHeaderStyles
(
Workbook
wb
,
Map
<
String
,
CellStyle
>
styles
)
{
private
Map
<
String
,
CellStyle
>
annotationHeaderStyles
(
Workbook
wb
,
Map
<
String
,
CellStyle
>
styles
)
{
Map
<
String
,
CellStyle
>
headerStyles
=
new
HashMap
<
String
,
CellStyle
>();
for
(
Object
[]
os
:
fields
)
{
for
(
Object
[]
os
:
fields
)
{
Excel
excel
=
(
Excel
)
os
[
1
];
String
key
=
StringUtils
.
format
(
"header_{}_{}"
,
excel
.
headerColor
(),
excel
.
headerBackgroundColor
());
if
(!
headerStyles
.
containsKey
(
key
))
{
if
(!
headerStyles
.
containsKey
(
key
))
{
CellStyle
style
=
wb
.
createCellStyle
();
style
.
cloneStyleFrom
(
styles
.
get
(
"data"
));
style
.
setAlignment
(
HorizontalAlignment
.
CENTER
);
...
...
@@ -843,15 +746,12 @@ public class ExcelUtil<T>
* @param wb 工作薄对象
* @return 自定义样式列表
*/
private
Map
<
String
,
CellStyle
>
annotationDataStyles
(
Workbook
wb
)
{
private
Map
<
String
,
CellStyle
>
annotationDataStyles
(
Workbook
wb
)
{
Map
<
String
,
CellStyle
>
styles
=
new
HashMap
<
String
,
CellStyle
>();
for
(
Object
[]
os
:
fields
)
{
for
(
Object
[]
os
:
fields
)
{
Excel
excel
=
(
Excel
)
os
[
1
];
String
key
=
StringUtils
.
format
(
"data_{}_{}_{}"
,
excel
.
align
(),
excel
.
color
(),
excel
.
backgroundColor
());
if
(!
styles
.
containsKey
(
key
))
{
if
(!
styles
.
containsKey
(
key
))
{
CellStyle
style
=
wb
.
createCellStyle
();
style
.
setAlignment
(
excel
.
align
());
style
.
setVerticalAlignment
(
VerticalAlignment
.
CENTER
);
...
...
@@ -879,20 +779,17 @@ public class ExcelUtil<T>
/**
* 创建单元格
*/
public
Cell
createHeadCell
(
Excel
attr
,
Row
row
,
int
column
)
{
public
Cell
createHeadCell
(
Excel
attr
,
Row
row
,
int
column
)
{
// 创建列
Cell
cell
=
row
.
createCell
(
column
);
// 写入列信息
cell
.
setCellValue
(
attr
.
name
());
setDataValidation
(
attr
,
row
,
column
);
cell
.
setCellStyle
(
styles
.
get
(
StringUtils
.
format
(
"header_{}_{}"
,
attr
.
headerColor
(),
attr
.
headerBackgroundColor
())));
if
(
isSubList
())
{
if
(
isSubList
())
{
// 填充默认样式,防止合并单元格样式失效
sheet
.
setDefaultColumnStyle
(
column
,
styles
.
get
(
StringUtils
.
format
(
"data_{}_{}_{}"
,
attr
.
align
(),
attr
.
color
(),
attr
.
backgroundColor
())));
if
(
attr
.
needMerge
())
{
if
(
attr
.
needMerge
())
{
sheet
.
addMergedRegion
(
new
CellRangeAddress
(
rownum
-
1
,
rownum
,
column
,
column
));
}
}
...
...
@@ -903,38 +800,28 @@ public class ExcelUtil<T>
* 设置单元格信息
*
* @param value 单元格值
* @param attr 注解相关
* @param cell 单元格信息
* @param attr
注解相关
* @param cell
单元格信息
*/
public
void
setCellVo
(
Object
value
,
Excel
attr
,
Cell
cell
)
{
if
(
Excel
.
ColumnType
.
STRING
==
attr
.
cellType
())
{
public
void
setCellVo
(
Object
value
,
Excel
attr
,
Cell
cell
)
{
if
(
Excel
.
ColumnType
.
STRING
==
attr
.
cellType
())
{
String
cellValue
=
Convert
.
toStr
(
value
);
// 对于任何以表达式触发字符 =-+@开头的单元格,直接使用tab字符作为前缀,防止CSV注入。
if
(
StringUtils
.
startsWithAny
(
cellValue
,
FORMULA_STR
))
{
if
(
StringUtils
.
startsWithAny
(
cellValue
,
FORMULA_STR
))
{
cellValue
=
RegExUtils
.
replaceFirst
(
cellValue
,
FORMULA_REGEX_STR
,
"\t$0"
);
}
if
(
value
instanceof
Collection
&&
StringUtils
.
equals
(
"[]"
,
cellValue
))
{
if
(
value
instanceof
Collection
&&
StringUtils
.
equals
(
"[]"
,
cellValue
))
{
cellValue
=
StringUtils
.
EMPTY
;
}
cell
.
setCellValue
(
StringUtils
.
isNull
(
cellValue
)
?
attr
.
defaultValue
()
:
cellValue
+
attr
.
suffix
());
}
else
if
(
Excel
.
ColumnType
.
NUMERIC
==
attr
.
cellType
())
{
if
(
StringUtils
.
isNotNull
(
value
))
{
}
else
if
(
Excel
.
ColumnType
.
NUMERIC
==
attr
.
cellType
())
{
if
(
StringUtils
.
isNotNull
(
value
))
{
cell
.
setCellValue
(
StringUtils
.
contains
(
Convert
.
toStr
(
value
),
"."
)
?
Convert
.
toDouble
(
value
)
:
Convert
.
toInt
(
value
));
}
}
else
if
(
Excel
.
ColumnType
.
IMAGE
==
attr
.
cellType
())
{
}
else
if
(
Excel
.
ColumnType
.
IMAGE
==
attr
.
cellType
())
{
ClientAnchor
anchor
=
new
XSSFClientAnchor
(
0
,
0
,
0
,
0
,
(
short
)
cell
.
getColumnIndex
(),
cell
.
getRow
().
getRowNum
(),
(
short
)
(
cell
.
getColumnIndex
()
+
1
),
cell
.
getRow
().
getRowNum
()
+
1
);
String
imagePath
=
Convert
.
toStr
(
value
);
if
(
StringUtils
.
isNotEmpty
(
imagePath
))
{
if
(
StringUtils
.
isNotEmpty
(
imagePath
))
{
byte
[]
data
=
ImageUtils
.
getImage
(
imagePath
);
getDrawingPatriarch
(
cell
.
getSheet
()).
createPicture
(
anchor
,
cell
.
getSheet
().
getWorkbook
().
addPicture
(
data
,
getImageType
(
data
)));
...
...
@@ -945,10 +832,8 @@ public class ExcelUtil<T>
/**
* 获取画布
*/
public
static
Drawing
<?>
getDrawingPatriarch
(
Sheet
sheet
)
{
if
(
sheet
.
getDrawingPatriarch
()
==
null
)
{
public
static
Drawing
<?>
getDrawingPatriarch
(
Sheet
sheet
)
{
if
(
sheet
.
getDrawingPatriarch
()
==
null
)
{
sheet
.
createDrawingPatriarch
();
}
return
sheet
.
getDrawingPatriarch
();
...
...
@@ -957,15 +842,11 @@ public class ExcelUtil<T>
/**
* 获取图片类型,设置图片插入类型
*/
public
int
getImageType
(
byte
[]
value
)
{
public
int
getImageType
(
byte
[]
value
)
{
String
type
=
FileTypeUtils
.
getFileExtendName
(
value
);
if
(
"JPG"
.
equalsIgnoreCase
(
type
))
{
if
(
"JPG"
.
equalsIgnoreCase
(
type
))
{
return
Workbook
.
PICTURE_TYPE_JPEG
;
}
else
if
(
"PNG"
.
equalsIgnoreCase
(
type
))
{
}
else
if
(
"PNG"
.
equalsIgnoreCase
(
type
))
{
return
Workbook
.
PICTURE_TYPE_PNG
;
}
return
Workbook
.
PICTURE_TYPE_JPEG
;
...
...
@@ -974,26 +855,18 @@ public class ExcelUtil<T>
/**
* 创建表格样式
*/
public
void
setDataValidation
(
Excel
attr
,
Row
row
,
int
column
)
{
if
(
attr
.
name
().
indexOf
(
"注:"
)
>=
0
)
{
public
void
setDataValidation
(
Excel
attr
,
Row
row
,
int
column
)
{
if
(
attr
.
name
().
indexOf
(
"注:"
)
>=
0
)
{
sheet
.
setColumnWidth
(
column
,
6000
);
}
else
{
}
else
{
// 设置列宽
sheet
.
setColumnWidth
(
column
,
(
int
)
((
attr
.
width
()
+
0.72
)
*
256
));
}
if
(
StringUtils
.
isNotEmpty
(
attr
.
prompt
())
||
attr
.
combo
().
length
>
0
)
{
if
(
attr
.
combo
().
length
>
15
||
StringUtils
.
join
(
attr
.
combo
()).
length
()
>
255
)
{
if
(
StringUtils
.
isNotEmpty
(
attr
.
prompt
())
||
attr
.
combo
().
length
>
0
)
{
if
(
attr
.
combo
().
length
>
15
||
StringUtils
.
join
(
attr
.
combo
()).
length
()
>
255
)
{
// 如果下拉数大于15或字符串长度大于255,则使用一个新sheet存储,避免生成的模板下拉值获取不到
setXSSFValidationWithHidden
(
sheet
,
attr
.
combo
(),
attr
.
prompt
(),
1
,
100
,
column
,
column
);
}
else
{
}
else
{
// 提示信息或只能选择不能输入的列内容.
setPromptOrValidation
(
sheet
,
attr
.
combo
(),
attr
.
prompt
(),
1
,
100
,
column
,
column
);
}
...
...
@@ -1003,20 +876,16 @@ public class ExcelUtil<T>
/**
* 添加单元格
*/
public
Cell
addCell
(
Excel
attr
,
Row
row
,
T
vo
,
Field
field
,
int
column
)
{
public
Cell
addCell
(
Excel
attr
,
Row
row
,
T
vo
,
Field
field
,
int
column
)
{
Cell
cell
=
null
;
try
{
try
{
// 设置行高
row
.
setHeight
(
maxHeight
);
// 根据Excel中设置情况决定是否导出,有些情况需要保持为空,希望用户填写这一列.
if
(
attr
.
isExport
())
{
if
(
attr
.
isExport
())
{
// 创建cell
cell
=
row
.
createCell
(
column
);
if
(
isSubListValue
(
vo
)
&&
getListCellValue
(
vo
).
size
()
>
1
&&
attr
.
needMerge
())
{
if
(
isSubListValue
(
vo
)
&&
getListCellValue
(
vo
).
size
()
>
1
&&
attr
.
needMerge
())
{
CellRangeAddress
cellAddress
=
new
CellRangeAddress
(
subMergedFirstRowNum
,
subMergedLastRowNum
,
column
,
column
);
sheet
.
addMergedRegion
(
cellAddress
);
}
...
...
@@ -1028,41 +897,27 @@ public class ExcelUtil<T>
String
readConverterExp
=
attr
.
readConverterExp
();
String
separator
=
attr
.
separator
();
String
dictType
=
attr
.
dictType
();
if
(
StringUtils
.
isNotEmpty
(
dateFormat
)
&&
StringUtils
.
isNotNull
(
value
))
{
if
(
StringUtils
.
isNotEmpty
(
dateFormat
)
&&
StringUtils
.
isNotNull
(
value
))
{
cell
.
setCellValue
(
parseDateToStr
(
dateFormat
,
value
));
}
else
if
(
StringUtils
.
isNotEmpty
(
readConverterExp
)
&&
StringUtils
.
isNotNull
(
value
))
{
}
else
if
(
StringUtils
.
isNotEmpty
(
readConverterExp
)
&&
StringUtils
.
isNotNull
(
value
))
{
cell
.
setCellValue
(
convertByExp
(
Convert
.
toStr
(
value
),
readConverterExp
,
separator
));
}
else
if
(
StringUtils
.
isNotEmpty
(
dictType
)
&&
StringUtils
.
isNotNull
(
value
))
{
if
(!
sysDictMap
.
containsKey
(
dictType
+
value
))
{
}
else
if
(
StringUtils
.
isNotEmpty
(
dictType
)
&&
StringUtils
.
isNotNull
(
value
))
{
if
(!
sysDictMap
.
containsKey
(
dictType
+
value
))
{
String
lable
=
convertDictByExp
(
Convert
.
toStr
(
value
),
dictType
,
separator
);
sysDictMap
.
put
(
dictType
+
value
,
lable
);
}
cell
.
setCellValue
(
sysDictMap
.
get
(
dictType
+
value
));
}
else
if
(
value
instanceof
BigDecimal
&&
-
1
!=
attr
.
scale
())
{
}
else
if
(
value
instanceof
BigDecimal
&&
-
1
!=
attr
.
scale
())
{
cell
.
setCellValue
((((
BigDecimal
)
value
).
setScale
(
attr
.
scale
(),
attr
.
roundingMode
())).
doubleValue
());
}
else
if
(!
attr
.
handler
().
equals
(
ExcelHandlerAdapter
.
class
))
{
}
else
if
(!
attr
.
handler
().
equals
(
ExcelHandlerAdapter
.
class
))
{
cell
.
setCellValue
(
dataFormatHandlerAdapter
(
value
,
attr
));
}
else
{
}
else
{
// 设置列类型
setCellVo
(
value
,
attr
,
cell
);
}
addStatisticsData
(
column
,
Convert
.
toStr
(
value
),
attr
);
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"导出Excel失败{}"
,
e
);
}
return
cell
;
...
...
@@ -1071,35 +926,30 @@ public class ExcelUtil<T>
/**
* 设置 POI XSSFSheet 单元格提示或选择框
*
* @param sheet 表单
* @param textlist 下拉框显示的内容
* @param sheet
表单
* @param textlist
下拉框显示的内容
* @param promptContent 提示内容
* @param firstRow 开始行
* @param endRow 结束行
* @param firstCol 开始列
* @param endCol 结束列
* @param firstRow
开始行
* @param endRow
结束行
* @param firstCol
开始列
* @param endCol
结束列
*/
public
void
setPromptOrValidation
(
Sheet
sheet
,
String
[]
textlist
,
String
promptContent
,
int
firstRow
,
int
endRow
,
int
firstCol
,
int
endCol
)
{
int
firstCol
,
int
endCol
)
{
DataValidationHelper
helper
=
sheet
.
getDataValidationHelper
();
DataValidationConstraint
constraint
=
textlist
.
length
>
0
?
helper
.
createExplicitListConstraint
(
textlist
)
:
helper
.
createCustomConstraint
(
"DD1"
);
CellRangeAddressList
regions
=
new
CellRangeAddressList
(
firstRow
,
endRow
,
firstCol
,
endCol
);
DataValidation
dataValidation
=
helper
.
createValidation
(
constraint
,
regions
);
if
(
StringUtils
.
isNotEmpty
(
promptContent
))
{
if
(
StringUtils
.
isNotEmpty
(
promptContent
))
{
// 如果设置了提示信息则鼠标放上去提示
dataValidation
.
createPromptBox
(
""
,
promptContent
);
dataValidation
.
setShowPromptBox
(
true
);
}
// 处理Excel兼容性问题
if
(
dataValidation
instanceof
XSSFDataValidation
)
{
if
(
dataValidation
instanceof
XSSFDataValidation
)
{
dataValidation
.
setSuppressDropDownArrow
(
true
);
dataValidation
.
setShowErrorBox
(
true
);
}
else
{
}
else
{
dataValidation
.
setSuppressDropDownArrow
(
false
);
}
sheet
.
addValidationData
(
dataValidation
);
...
...
@@ -1108,20 +958,18 @@ public class ExcelUtil<T>
/**
* 设置某些列的值只能输入预制的数据,显示下拉框(兼容超出一定数量的下拉框).
*
* @param sheet 要设置的sheet.
* @param textlist 下拉框显示的内容
* @param sheet
要设置的sheet.
* @param textlist
下拉框显示的内容
* @param promptContent 提示内容
* @param firstRow 开始行
* @param endRow 结束行
* @param firstCol 开始列
* @param endCol 结束列
* @param firstRow
开始行
* @param endRow
结束行
* @param firstCol
开始列
* @param endCol
结束列
*/
public
void
setXSSFValidationWithHidden
(
Sheet
sheet
,
String
[]
textlist
,
String
promptContent
,
int
firstRow
,
int
endRow
,
int
firstCol
,
int
endCol
)
{
public
void
setXSSFValidationWithHidden
(
Sheet
sheet
,
String
[]
textlist
,
String
promptContent
,
int
firstRow
,
int
endRow
,
int
firstCol
,
int
endCol
)
{
String
hideSheetName
=
"combo_"
+
firstCol
+
"_"
+
endCol
;
Sheet
hideSheet
=
wb
.
createSheet
(
hideSheetName
);
// 用于存储 下拉菜单数据
for
(
int
i
=
0
;
i
<
textlist
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
textlist
.
length
;
i
++)
{
hideSheet
.
createRow
(
i
).
createCell
(
0
).
setCellValue
(
textlist
[
i
]);
}
// 创建名称,可被其他单元格引用
...
...
@@ -1135,20 +983,16 @@ public class ExcelUtil<T>
CellRangeAddressList
regions
=
new
CellRangeAddressList
(
firstRow
,
endRow
,
firstCol
,
endCol
);
// 数据有效性对象
DataValidation
dataValidation
=
helper
.
createValidation
(
constraint
,
regions
);
if
(
StringUtils
.
isNotEmpty
(
promptContent
))
{
if
(
StringUtils
.
isNotEmpty
(
promptContent
))
{
// 如果设置了提示信息则鼠标放上去提示
dataValidation
.
createPromptBox
(
""
,
promptContent
);
dataValidation
.
setShowPromptBox
(
true
);
}
// 处理Excel兼容性问题
if
(
dataValidation
instanceof
XSSFDataValidation
)
{
if
(
dataValidation
instanceof
XSSFDataValidation
)
{
dataValidation
.
setSuppressDropDownArrow
(
true
);
dataValidation
.
setShowErrorBox
(
true
);
}
else
{
}
else
{
dataValidation
.
setSuppressDropDownArrow
(
false
);
}
...
...
@@ -1161,32 +1005,24 @@ public class ExcelUtil<T>
* 解析导出值 0=男,1=女,2=未知
*
* @param propertyValue 参数值
* @param converterExp 翻译注解
* @param separator 分隔符
* @param converterExp
翻译注解
* @param separator
分隔符
* @return 解析后值
*/
public
static
String
convertByExp
(
String
propertyValue
,
String
converterExp
,
String
separator
)
{
public
static
String
convertByExp
(
String
propertyValue
,
String
converterExp
,
String
separator
)
{
StringBuilder
propertyString
=
new
StringBuilder
();
String
[]
convertSource
=
converterExp
.
split
(
","
);
for
(
String
item
:
convertSource
)
{
for
(
String
item
:
convertSource
)
{
String
[]
itemArray
=
item
.
split
(
"="
);
if
(
StringUtils
.
containsAny
(
propertyValue
,
separator
))
{
for
(
String
value
:
propertyValue
.
split
(
separator
))
{
if
(
itemArray
[
0
].
equals
(
value
))
{
if
(
StringUtils
.
containsAny
(
propertyValue
,
separator
))
{
for
(
String
value
:
propertyValue
.
split
(
separator
))
{
if
(
itemArray
[
0
].
equals
(
value
))
{
propertyString
.
append
(
itemArray
[
1
]
+
separator
);
break
;
}
}
}
else
{
if
(
itemArray
[
0
].
equals
(
propertyValue
))
{
}
else
{
if
(
itemArray
[
0
].
equals
(
propertyValue
))
{
return
itemArray
[
1
];
}
}
...
...
@@ -1198,32 +1034,24 @@ public class ExcelUtil<T>
* 反向解析值 男=0,女=1,未知=2
*
* @param propertyValue 参数值
* @param converterExp 翻译注解
* @param separator 分隔符
* @param converterExp
翻译注解
* @param separator
分隔符
* @return 解析后值
*/
public
static
String
reverseByExp
(
String
propertyValue
,
String
converterExp
,
String
separator
)
{
public
static
String
reverseByExp
(
String
propertyValue
,
String
converterExp
,
String
separator
)
{
StringBuilder
propertyString
=
new
StringBuilder
();
String
[]
convertSource
=
converterExp
.
split
(
","
);
for
(
String
item
:
convertSource
)
{
for
(
String
item
:
convertSource
)
{
String
[]
itemArray
=
item
.
split
(
"="
);
if
(
StringUtils
.
containsAny
(
propertyValue
,
separator
))
{
for
(
String
value
:
propertyValue
.
split
(
separator
))
{
if
(
itemArray
[
1
].
equals
(
value
))
{
if
(
StringUtils
.
containsAny
(
propertyValue
,
separator
))
{
for
(
String
value
:
propertyValue
.
split
(
separator
))
{
if
(
itemArray
[
1
].
equals
(
value
))
{
propertyString
.
append
(
itemArray
[
0
]
+
separator
);
break
;
}
}
}
else
{
if
(
itemArray
[
1
].
equals
(
propertyValue
))
{
}
else
{
if
(
itemArray
[
1
].
equals
(
propertyValue
))
{
return
itemArray
[
0
];
}
}
...
...
@@ -1235,12 +1063,11 @@ public class ExcelUtil<T>
* 解析字典值
*
* @param dictValue 字典值
* @param dictType 字典类型
* @param dictType
字典类型
* @param separator 分隔符
* @return 字典标签
*/
public
static
String
convertDictByExp
(
String
dictValue
,
String
dictType
,
String
separator
)
{
public
static
String
convertDictByExp
(
String
dictValue
,
String
dictType
,
String
separator
)
{
return
DictUtils
.
getDictLabel
(
dictType
,
dictValue
,
separator
);
}
...
...
@@ -1248,12 +1075,11 @@ public class ExcelUtil<T>
* 反向解析值字典值
*
* @param dictLabel 字典标签
* @param dictType 字典类型
* @param dictType
字典类型
* @param separator 分隔符
* @return 字典值
*/
public
static
String
reverseDictByExp
(
String
dictLabel
,
String
dictType
,
String
separator
)
{
public
static
String
reverseDictByExp
(
String
dictLabel
,
String
dictType
,
String
separator
)
{
return
DictUtils
.
getDictValue
(
dictType
,
dictLabel
,
separator
);
}
...
...
@@ -1264,16 +1090,12 @@ public class ExcelUtil<T>
* @param excel 数据注解
* @return
*/
public
String
dataFormatHandlerAdapter
(
Object
value
,
Excel
excel
)
{
try
{
public
String
dataFormatHandlerAdapter
(
Object
value
,
Excel
excel
)
{
try
{
Object
instance
=
excel
.
handler
().
newInstance
();
Method
formatMethod
=
excel
.
handler
().
getMethod
(
"format"
,
new
Class
[]
{
Object
.
class
,
String
[].
class
});
Method
formatMethod
=
excel
.
handler
().
getMethod
(
"format"
,
new
Class
[]
{
Object
.
class
,
String
[].
class
});
value
=
formatMethod
.
invoke
(
instance
,
value
,
excel
.
args
());
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
"不能格式化数据 "
+
excel
.
handler
(),
e
.
getMessage
());
}
return
Convert
.
toStr
(
value
);
...
...
@@ -1282,21 +1104,15 @@ public class ExcelUtil<T>
/**
* 合计统计信息
*/
private
void
addStatisticsData
(
Integer
index
,
String
text
,
Excel
entity
)
{
if
(
entity
!=
null
&&
entity
.
isStatistics
())
{
private
void
addStatisticsData
(
Integer
index
,
String
text
,
Excel
entity
)
{
if
(
entity
!=
null
&&
entity
.
isStatistics
())
{
Double
temp
=
0
D
;
if
(!
statistics
.
containsKey
(
index
))
{
if
(!
statistics
.
containsKey
(
index
))
{
statistics
.
put
(
index
,
temp
);
}
try
{
try
{
temp
=
Double
.
valueOf
(
text
);
}
catch
(
NumberFormatException
e
)
{
}
catch
(
NumberFormatException
e
)
{
}
statistics
.
put
(
index
,
statistics
.
get
(
index
)
+
temp
);
}
...
...
@@ -1305,18 +1121,15 @@ public class ExcelUtil<T>
/**
* 创建统计行
*/
public
void
addStatisticsRow
()
{
if
(
statistics
.
size
()
>
0
)
{
public
void
addStatisticsRow
()
{
if
(
statistics
.
size
()
>
0
)
{
Row
row
=
sheet
.
createRow
(
sheet
.
getLastRowNum
()
+
1
);
Set
<
Integer
>
keys
=
statistics
.
keySet
();
Cell
cell
=
row
.
createCell
(
0
);
cell
.
setCellStyle
(
styles
.
get
(
"total"
));
cell
.
setCellValue
(
"合计"
);
for
(
Integer
key
:
keys
)
{
for
(
Integer
key
:
keys
)
{
cell
=
row
.
createCell
(
key
);
cell
.
setCellStyle
(
styles
.
get
(
"total"
));
cell
.
setCellValue
(
DOUBLE_FORMAT
.
format
(
statistics
.
get
(
key
)));
...
...
@@ -1328,8 +1141,7 @@ public class ExcelUtil<T>
/**
* 编码文件名
*/
public
String
encodingFilename
(
String
filename
)
{
public
String
encodingFilename
(
String
filename
)
{
filename
=
UUID
.
randomUUID
()
+
"_"
+
filename
+
".xlsx"
;
return
filename
;
}
...
...
@@ -1339,12 +1151,10 @@ public class ExcelUtil<T>
*
* @param filename 文件名称
*/
public
String
getAbsoluteFile
(
String
filename
)
{
public
String
getAbsoluteFile
(
String
filename
)
{
String
downloadPath
=
ShuZhiHuaConfig
.
getDownloadPath
()
+
filename
;
File
desc
=
new
File
(
downloadPath
);
if
(!
desc
.
getParentFile
().
exists
())
{
if
(!
desc
.
getParentFile
().
exists
())
{
desc
.
getParentFile
().
mkdirs
();
}
return
downloadPath
;
...
...
@@ -1353,28 +1163,22 @@ public class ExcelUtil<T>
/**
* 获取bean中的属性值
*
* @param vo 实体对象
* @param vo
实体对象
* @param field 字段
* @param excel 注解
* @return 最终的属性值
* @throws Exception
*/
private
Object
getTargetValue
(
T
vo
,
Field
field
,
Excel
excel
)
throws
Exception
{
private
Object
getTargetValue
(
T
vo
,
Field
field
,
Excel
excel
)
throws
Exception
{
Object
o
=
field
.
get
(
vo
);
if
(
StringUtils
.
isNotEmpty
(
excel
.
targetAttr
()))
{
if
(
StringUtils
.
isNotEmpty
(
excel
.
targetAttr
()))
{
String
target
=
excel
.
targetAttr
();
if
(
target
.
contains
(
"."
))
{
if
(
target
.
contains
(
"."
))
{
String
[]
targets
=
target
.
split
(
"[.]"
);
for
(
String
name
:
targets
)
{
for
(
String
name
:
targets
)
{
o
=
getValue
(
o
,
name
);
}
}
else
{
}
else
{
o
=
getValue
(
o
,
target
);
}
}
...
...
@@ -1389,10 +1193,8 @@ public class ExcelUtil<T>
* @return value
* @throws Exception
*/
private
Object
getValue
(
Object
o
,
String
name
)
throws
Exception
{
if
(
StringUtils
.
isNotNull
(
o
)
&&
StringUtils
.
isNotEmpty
(
name
))
{
private
Object
getValue
(
Object
o
,
String
name
)
throws
Exception
{
if
(
StringUtils
.
isNotNull
(
o
)
&&
StringUtils
.
isNotEmpty
(
name
))
{
Class
<?>
clazz
=
o
.
getClass
();
Field
field
=
clazz
.
getDeclaredField
(
name
);
field
.
setAccessible
(
true
);
...
...
@@ -1404,8 +1206,7 @@ public class ExcelUtil<T>
/**
* 得到所有定义字段
*/
private
void
createExcelField
()
{
private
void
createExcelField
()
{
this
.
fields
=
getFields
();
this
.
fields
=
this
.
fields
.
stream
().
sorted
(
Comparator
.
comparing
(
objects
->
((
Excel
)
objects
[
1
]).
sort
())).
collect
(
Collectors
.
toList
());
this
.
maxHeight
=
getRowHeight
();
...
...
@@ -1414,27 +1215,21 @@ public class ExcelUtil<T>
/**
* 获取字段注解信息
*/
public
List
<
Object
[]>
getFields
()
{
public
List
<
Object
[]>
getFields
()
{
List
<
Object
[]>
fields
=
new
ArrayList
<
Object
[]>();
List
<
Field
>
tempFields
=
new
ArrayList
<>();
tempFields
.
addAll
(
Arrays
.
asList
(
clazz
.
getSuperclass
().
getDeclaredFields
()));
tempFields
.
addAll
(
Arrays
.
asList
(
clazz
.
getDeclaredFields
()));
for
(
Field
field
:
tempFields
)
{
if
(!
ArrayUtils
.
contains
(
this
.
excludeFields
,
field
.
getName
()))
{
for
(
Field
field
:
tempFields
)
{
if
(!
ArrayUtils
.
contains
(
this
.
excludeFields
,
field
.
getName
()))
{
// 单注解
if
(
field
.
isAnnotationPresent
(
Excel
.
class
))
{
if
(
field
.
isAnnotationPresent
(
Excel
.
class
))
{
Excel
attr
=
field
.
getAnnotation
(
Excel
.
class
);
if
(
attr
!=
null
&&
(
attr
.
type
()
==
Excel
.
Type
.
ALL
||
attr
.
type
()
==
type
))
{
if
(
attr
!=
null
&&
(
attr
.
type
()
==
Excel
.
Type
.
ALL
||
attr
.
type
()
==
type
))
{
field
.
setAccessible
(
true
);
fields
.
add
(
new
Object
[]
{
field
,
attr
});
fields
.
add
(
new
Object
[]
{
field
,
attr
});
}
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
()))
{
if
(
Collection
.
class
.
isAssignableFrom
(
field
.
getType
()))
{
subMethod
=
getSubMethod
(
field
.
getName
(),
clazz
);
ParameterizedType
pt
=
(
ParameterizedType
)
field
.
getGenericType
();
Class
<?>
subClass
=
(
Class
<?>)
pt
.
getActualTypeArguments
()[
0
];
...
...
@@ -1443,17 +1238,14 @@ public class ExcelUtil<T>
}
// 多注解
if
(
field
.
isAnnotationPresent
(
Excels
.
class
))
{
if
(
field
.
isAnnotationPresent
(
Excels
.
class
))
{
Excels
attrs
=
field
.
getAnnotation
(
Excels
.
class
);
Excel
[]
excels
=
attrs
.
value
();
for
(
Excel
attr
:
excels
)
{
for
(
Excel
attr
:
excels
)
{
if
(!
ArrayUtils
.
contains
(
this
.
excludeFields
,
field
.
getName
()
+
"."
+
attr
.
targetAttr
())
&&
(
attr
!=
null
&&
(
attr
.
type
()
==
Excel
.
Type
.
ALL
||
attr
.
type
()
==
type
)))
{
&&
(
attr
!=
null
&&
(
attr
.
type
()
==
Excel
.
Type
.
ALL
||
attr
.
type
()
==
type
)))
{
field
.
setAccessible
(
true
);
fields
.
add
(
new
Object
[]
{
field
,
attr
});
fields
.
add
(
new
Object
[]
{
field
,
attr
});
}
}
}
...
...
@@ -1465,11 +1257,9 @@ public class ExcelUtil<T>
/**
* 根据注解获取最大行高
*/
public
short
getRowHeight
()
{
public
short
getRowHeight
()
{
double
maxHeight
=
0
;
for
(
Object
[]
os
:
this
.
fields
)
{
for
(
Object
[]
os
:
this
.
fields
)
{
Excel
excel
=
(
Excel
)
os
[
1
];
maxHeight
=
Math
.
max
(
maxHeight
,
excel
.
height
());
}
...
...
@@ -1479,8 +1269,7 @@ public class ExcelUtil<T>
/**
* 创建一个工作簿
*/
public
void
createWorkbook
()
{
public
void
createWorkbook
()
{
this
.
wb
=
new
SXSSFWorkbook
(
500
);
this
.
sheet
=
wb
.
createSheet
();
wb
.
setSheetName
(
0
,
sheetName
);
...
...
@@ -1491,13 +1280,11 @@ public class ExcelUtil<T>
* 创建工作表
*
* @param sheetNo sheet数量
* @param index 序号
* @param index
序号
*/
public
void
createSheet
(
int
sheetNo
,
int
index
)
{
public
void
createSheet
(
int
sheetNo
,
int
index
)
{
// 设置工作表的名称.
if
(
sheetNo
>
1
&&
index
>
0
)
{
if
(
sheetNo
>
1
&&
index
>
0
)
{
this
.
sheet
=
wb
.
createSheet
();
this
.
createTitle
();
wb
.
setSheetName
(
index
,
sheetName
+
index
);
...
...
@@ -1507,58 +1294,39 @@ public class ExcelUtil<T>
/**
* 获取单元格值
*
* @param row 获取的行
* @param row
获取的行
* @param column 获取单元格列号
* @return 单元格值
*/
public
Object
getCellValue
(
Row
row
,
int
column
)
{
if
(
row
==
null
)
{
public
Object
getCellValue
(
Row
row
,
int
column
)
{
if
(
row
==
null
)
{
return
row
;
}
Object
val
=
""
;
try
{
try
{
Cell
cell
=
row
.
getCell
(
column
);
if
(
StringUtils
.
isNotNull
(
cell
))
{
if
(
cell
.
getCellType
()
==
CellType
.
NUMERIC
||
cell
.
getCellType
()
==
CellType
.
FORMULA
)
{
if
(
StringUtils
.
isNotNull
(
cell
))
{
if
(
cell
.
getCellType
()
==
CellType
.
NUMERIC
||
cell
.
getCellType
()
==
CellType
.
FORMULA
)
{
val
=
cell
.
getNumericCellValue
();
if
(
DateUtil
.
isCellDateFormatted
(
cell
))
{
if
(
DateUtil
.
isCellDateFormatted
(
cell
))
{
val
=
DateUtil
.
getJavaDate
((
Double
)
val
);
// POI Excel 日期格式转换
}
else
{
if
((
Double
)
val
%
1
!=
0
)
{
}
else
{
if
((
Double
)
val
%
1
!=
0
)
{
val
=
new
BigDecimal
(
val
.
toString
());
}
else
{
}
else
{
val
=
new
DecimalFormat
(
"0"
).
format
(
val
);
}
}
}
else
if
(
cell
.
getCellType
()
==
CellType
.
STRING
)
{
}
else
if
(
cell
.
getCellType
()
==
CellType
.
STRING
)
{
val
=
cell
.
getStringCellValue
();
}
else
if
(
cell
.
getCellType
()
==
CellType
.
BOOLEAN
)
{
}
else
if
(
cell
.
getCellType
()
==
CellType
.
BOOLEAN
)
{
val
=
cell
.
getBooleanCellValue
();
}
else
if
(
cell
.
getCellType
()
==
CellType
.
ERROR
)
{
}
else
if
(
cell
.
getCellType
()
==
CellType
.
ERROR
)
{
val
=
cell
.
getErrorCellValue
();
}
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
return
val
;
}
return
val
;
...
...
@@ -1570,17 +1338,13 @@ public class ExcelUtil<T>
* @param row 判断的行
* @return
*/
private
boolean
isRowEmpty
(
Row
row
)
{
if
(
row
==
null
)
{
private
boolean
isRowEmpty
(
Row
row
)
{
if
(
row
==
null
)
{
return
true
;
}
for
(
int
i
=
row
.
getFirstCellNum
();
i
<
row
.
getLastCellNum
();
i
++)
{
for
(
int
i
=
row
.
getFirstCellNum
();
i
<
row
.
getLastCellNum
();
i
++)
{
Cell
cell
=
row
.
getCell
(
i
);
if
(
cell
!=
null
&&
cell
.
getCellType
()
!=
CellType
.
BLANK
)
{
if
(
cell
!=
null
&&
cell
.
getCellType
()
!=
CellType
.
BLANK
)
{
return
false
;
}
}
...
...
@@ -1590,21 +1354,17 @@ public class ExcelUtil<T>
/**
* 获取Excel2003图片
*
* @param sheet 当前sheet对象
* @param sheet
当前sheet对象
* @param workbook 工作簿对象
* @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
*/
public
static
Map
<
String
,
PictureData
>
getSheetPictures03
(
HSSFSheet
sheet
,
HSSFWorkbook
workbook
)
{
public
static
Map
<
String
,
PictureData
>
getSheetPictures03
(
HSSFSheet
sheet
,
HSSFWorkbook
workbook
)
{
Map
<
String
,
PictureData
>
sheetIndexPicMap
=
new
HashMap
<
String
,
PictureData
>();
List
<
HSSFPictureData
>
pictures
=
workbook
.
getAllPictures
();
if
(!
pictures
.
isEmpty
())
{
for
(
HSSFShape
shape
:
sheet
.
getDrawingPatriarch
().
getChildren
())
{
if
(!
pictures
.
isEmpty
())
{
for
(
HSSFShape
shape
:
sheet
.
getDrawingPatriarch
().
getChildren
())
{
HSSFClientAnchor
anchor
=
(
HSSFClientAnchor
)
shape
.
getAnchor
();
if
(
shape
instanceof
HSSFPicture
)
{
if
(
shape
instanceof
HSSFPicture
)
{
HSSFPicture
pic
=
(
HSSFPicture
)
shape
;
int
pictureIndex
=
pic
.
getPictureIndex
()
-
1
;
HSSFPictureData
picData
=
pictures
.
get
(
pictureIndex
);
...
...
@@ -1613,9 +1373,7 @@ public class ExcelUtil<T>
}
}
return
sheetIndexPicMap
;
}
else
{
}
else
{
return
sheetIndexPicMap
;
}
}
...
...
@@ -1623,23 +1381,18 @@ public class ExcelUtil<T>
/**
* 获取Excel2007图片
*
* @param sheet 当前sheet对象
* @param sheet
当前sheet对象
* @param workbook 工作簿对象
* @return Map key:图片单元格索引(1_1)String,value:图片流PictureData
*/
public
static
Map
<
String
,
PictureData
>
getSheetPictures07
(
XSSFSheet
sheet
,
XSSFWorkbook
workbook
)
{
public
static
Map
<
String
,
PictureData
>
getSheetPictures07
(
XSSFSheet
sheet
,
XSSFWorkbook
workbook
)
{
Map
<
String
,
PictureData
>
sheetIndexPicMap
=
new
HashMap
<
String
,
PictureData
>();
for
(
POIXMLDocumentPart
dr
:
sheet
.
getRelations
())
{
if
(
dr
instanceof
XSSFDrawing
)
{
for
(
POIXMLDocumentPart
dr
:
sheet
.
getRelations
())
{
if
(
dr
instanceof
XSSFDrawing
)
{
XSSFDrawing
drawing
=
(
XSSFDrawing
)
dr
;
List
<
XSSFShape
>
shapes
=
drawing
.
getShapes
();
for
(
XSSFShape
shape
:
shapes
)
{
if
(
shape
instanceof
XSSFPicture
)
{
for
(
XSSFShape
shape
:
shapes
)
{
if
(
shape
instanceof
XSSFPicture
)
{
XSSFPicture
pic
=
(
XSSFPicture
)
shape
;
XSSFClientAnchor
anchor
=
pic
.
getPreferredSize
();
CTMarker
ctMarker
=
anchor
.
getFrom
();
...
...
@@ -1656,30 +1409,21 @@ public class ExcelUtil<T>
* 格式化不同类型的日期对象
*
* @param dateFormat 日期格式
* @param val 被格式化的日期对象
* @param val
被格式化的日期对象
* @return 格式化后的日期字符
*/
public
String
parseDateToStr
(
String
dateFormat
,
Object
val
)
{
if
(
val
==
null
)
{
public
String
parseDateToStr
(
String
dateFormat
,
Object
val
)
{
if
(
val
==
null
)
{
return
""
;
}
String
str
;
if
(
val
instanceof
Date
)
{
if
(
val
instanceof
Date
)
{
str
=
DateUtils
.
parseDateToStr
(
dateFormat
,
(
Date
)
val
);
}
else
if
(
val
instanceof
LocalDateTime
)
{
}
else
if
(
val
instanceof
LocalDateTime
)
{
str
=
DateUtils
.
parseDateToStr
(
dateFormat
,
DateUtils
.
toDate
((
LocalDateTime
)
val
));
}
else
if
(
val
instanceof
LocalDate
)
{
}
else
if
(
val
instanceof
LocalDate
)
{
str
=
DateUtils
.
parseDateToStr
(
dateFormat
,
DateUtils
.
toDate
((
LocalDate
)
val
));
}
else
{
}
else
{
str
=
val
.
toString
();
}
return
str
;
...
...
@@ -1688,31 +1432,25 @@ public class ExcelUtil<T>
/**
* 是否有对象的子列表
*/
public
boolean
isSubList
()
{
public
boolean
isSubList
()
{
return
StringUtils
.
isNotNull
(
subFields
)
&&
subFields
.
size
()
>
0
;
}
/**
* 是否有对象的子列表,集合不为空
*/
public
boolean
isSubListValue
(
T
vo
)
{
public
boolean
isSubListValue
(
T
vo
)
{
return
StringUtils
.
isNotNull
(
subFields
)
&&
subFields
.
size
()
>
0
&&
StringUtils
.
isNotNull
(
getListCellValue
(
vo
))
&&
getListCellValue
(
vo
).
size
()
>
0
;
}
/**
* 获取集合的值
*/
public
Collection
<?>
getListCellValue
(
Object
obj
)
{
public
Collection
<?>
getListCellValue
(
Object
obj
)
{
Object
value
;
try
{
value
=
subMethod
.
invoke
(
obj
,
new
Object
[]
{});
}
catch
(
Exception
e
)
{
try
{
value
=
subMethod
.
invoke
(
obj
,
new
Object
[]{});
}
catch
(
Exception
e
)
{
return
new
ArrayList
<
Object
>();
}
return
(
Collection
<?>)
value
;
...
...
@@ -1721,22 +1459,18 @@ public class ExcelUtil<T>
/**
* 获取对象的子列表方法
*
* @param name 名称
* @param name
名称
* @param pojoClass 类对象
* @return 子列表方法
*/
public
Method
getSubMethod
(
String
name
,
Class
<?>
pojoClass
)
{
public
Method
getSubMethod
(
String
name
,
Class
<?>
pojoClass
)
{
StringBuffer
getMethodName
=
new
StringBuffer
(
"get"
);
getMethodName
.
append
(
name
.
substring
(
0
,
1
).
toUpperCase
());
getMethodName
.
append
(
name
.
substring
(
1
));
Method
method
=
null
;
try
{
method
=
pojoClass
.
getMethod
(
getMethodName
.
toString
(),
new
Class
[]
{});
}
catch
(
Exception
e
)
{
try
{
method
=
pojoClass
.
getMethod
(
getMethodName
.
toString
(),
new
Class
[]{});
}
catch
(
Exception
e
)
{
log
.
error
(
"获取对象异常{}"
,
e
.
getMessage
());
}
return
method
;
...
...
dsk-operate-ui/src/assets/images/more.png
0 → 100644
View file @
ad80560a
246 Bytes
dsk-operate-ui/src/assets/styles/public.css
View file @
ad80560a
...
...
@@ -1217,4 +1217,5 @@ select {
}
.enterprise_contatiner
{
padding
:
0
;
padding-bottom
:
16px
;
}
\ No newline at end of file
dsk-operate-ui/src/layout/index.vue
View file @
ad80560a
...
...
@@ -2,7 +2,7 @@
<div
:class=
"classObj"
class=
"app-wrapper"
:style=
"
{'--current-color': theme}">
<div
v-if=
"device==='mobile'&&sidebar.opened"
class=
"drawer-bg"
@
click=
"handleClickOutside"
/>
<sidebar
v-if=
"!sidebar.hide"
class=
"sidebar-container"
@
handleBar=
"handleSideBar"
id=
"sidebar"
/>
<div
:class=
"
{hasTagsView:needTagsView,sidebarHide:sidebar.hide,EnterpriseData:$route.name=='
EnterpriseData
'}" class="main-container">
<div
:class=
"
{hasTagsView:needTagsView,sidebarHide:sidebar.hide,EnterpriseData:$route.name=='
Group
'}" class="main-container">
<div
:class=
"
{'fixed-header':fixedHeader}">
<navbar
:offsetWidth=
"offsetWidth"
/>
</div>
...
...
@@ -129,6 +129,6 @@ export default {
width
:
100%
;
}
.EnterpriseData
{
min-width
:
1
648
px
;
min-width
:
1
710
px
;
}
</
style
>
dsk-operate-ui/src/views/component/noData.vue
View file @
ad80560a
...
...
@@ -2,7 +2,8 @@
<div
class=
"no-data"
>
<div
class=
"no-data-box"
>
<img
:src=
"noData"
alt=
"抱歉,没找到相关数据"
/>
<div>
抱歉,没找到相关数据
</div>
<div
v-if=
"text"
>
抱歉,您还未添加
{{
text
}}
项目
</div>
<div
v-else
>
抱歉,没找到相关数据
</div>
<span
v-if=
"condition"
>
建议调整关键词或筛选条件,重新搜索
</span>
</div>
</div>
...
...
@@ -15,6 +16,10 @@ export default {
condition
:
{
type
:
Boolean
,
default
:
false
},
text
:
{
type
:
String
,
default
:
''
}
},
data
()
{
...
...
dsk-operate-ui/src/views/enterpriseData/components/Group/index.vue
View file @
ad80560a
...
...
@@ -312,8 +312,8 @@ export default {
anchorClick
(
i
)
{
var
a
=
document
.
getElementById
(
'anchor-'
+
i
)
a
.
scrollIntoView
()
document
.
body
.
scrollTop
+=
-
56
document
.
documentElement
.
scrollTop
+=
-
56
// document.body.scrollTop += -40
// document.documentElement.scrollTop += -40
setTimeout
(()
=>
{
this
.
anchorIndex
=
i
},
1
);
...
...
@@ -498,7 +498,7 @@ export default {
background
:
#FFFFFF
;
border-radius
:
4px
4px
4px
4px
;
padding
:
16px
;
max-height
:
700
px
;
max-height
:
848
px
;
.anchor
{
height
:
24px
;
}
...
...
dsk-operate-ui/src/views/project/overview/index.vue
View file @
ad80560a
...
...
@@ -143,7 +143,7 @@
</el-table>
</div>
</div>
<no-data
v-if=
"viewData1.length==0"
/>
<no-data
text=
"储备"
v-if=
"viewData1.length==0"
/>
</el-card>
<el-card
class=
"box-card noborder pd16"
>
<h3>
储备项目资金来源
</h3>
...
...
@@ -171,7 +171,7 @@
</el-table>
</div>
</div>
<no-data
v-if=
"viewData2.length==0"
/>
<no-data
text=
"储备"
v-if=
"viewData2.length==0"
/>
</el-card>
<el-card
class=
"box-card noborder pd16"
>
<h3>
已合作项目统计
</h3>
...
...
@@ -199,7 +199,7 @@
</el-table>
</div>
</div>
<no-data
v-if=
"viewData3.length==0"
/>
<no-data
text=
"已合作"
v-if=
"viewData3.length==0"
/>
</el-card>
<el-card
class=
"box-card noborder pd16"
>
<h3>
公招项目地区统计
</h3>
...
...
dsk-operate-ui/src/views/radar/MajorProject/details.vue
0 → 100644
View file @
ad80560a
<
template
>
<div
class=
"app-container qyzx-details"
>
<div
class=
"bottomlist"
>
<ul
class=
"bottomlist-content"
>
<li
class=
"bottomlist-list"
>
<p
class=
"list-titel"
>
{{
textList
.
name
}}
</p>
<div
class=
"content-label"
>
<span
class=
"list-label list-label-zb"
v-if=
"textList.province||textList.city||textList.district"
>
{{
textList
.
province
}}
<template
v-if=
"textList.city"
>
-
{{
textList
.
city
}}
</
template
>
<
template
v-if=
"textList.district"
>
-
{{
textList
.
district
}}
</
template
>
</span>
</div>
<div
class=
"list-content"
>
<p
class=
"list-content-text"
>
<span>
发布时间:
</span>
<span
>
{{textList.publishTime||'--'}}
</span>
</p>
<p
class=
"list-content-text"
>
<span>
来源网站:
</span>
<span>
{{textList.source||'--'}}
</span>
</p>
</div>
</li>
</ul>
</div>
<div
class=
"content main5"
>
<div
class=
"common-title"
>
投标人列表
</div>
<div
class=
"table-item"
>
<el-table
:data=
"tableData"
element-loading-text=
"Loading"
border
>
<el-table-column
label=
"序号"
width=
"80"
>
<
template
slot-scope=
"scope"
>
<span>
{{
(
pageNum
-
1
)
*
20
+
scope
.
$index
+
1
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"企业名称"
>
<
template
slot-scope=
"scope"
>
<router-link
v-if=
"scope.row.uipId||scope.row.companyId"
:to=
"scope.row.uipId?'/enterprise/' + encodeStr(scope.row.companyId) :'/company/' + encodeStr(scope.row.companyId) "
tag=
"a"
class=
"list-titel-a blue"
v-html=
"scope.row.companyName"
></router-link>
<span
v-else
>
{{
scope
.
row
.
companyName
||
'--'
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"投标报价(万)"
width=
"300"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
tenderOffer
||
'--'
}}
</
template
>
</el-table-column>
<!-- <el-table-column label="工期" width="182" >
<template slot-scope="scope">
{{ scope.row.tenderOffer||'--'}}
</template>
</el-table-column> -->
</el-table>
<!-- <div class="pagination clearfix" v-show="total>10">`
<el-pagination background :page-size="pageSize" :current-page="pageNum"
@current-change="handleCurrentChange" layout="prev, pager, next" :total="total">
</el-pagination>
</div> -->
</div>
</div>
<div
class=
"content main3"
>
<div
class=
"common-title"
>
原文信息
</div>
<div
class=
"list-content-img"
@
mouseenter=
"showimg=false"
@
mouseleave=
"showimg=true"
>
<img
v-if=
"showimg"
src=
"@/assets/images/bxpro/original1.png"
>
<img
v-else
src=
"@/assets/images/bxpro/original.png"
>
<span>
<a
:href=
"textList.url"
target=
"_blank"
>
原文链接
</a>
</span>
</div>
<div
class=
"main3-box"
v-html=
"textList.content"
>
</div>
</div>
</div>
</template>
<
script
>
import
"@/assets/styles/public.css"
;
import
{
encodeStr
}
from
"@/assets/js/common.js"
import
api
from
'@/api/radar/radar.js'
;
export
default
{
name
:
'BidRecordDetails'
,
data
()
{
return
{
encodeStr
,
id
:
''
,
tableData
:
[],
"pageNum"
:
1
,
"pageSize"
:
10
,
total
:
0
,
textList
:
{},
showimg
:
true
}
},
created
()
{
this
.
id
=
this
.
$route
.
params
.
id
;
this
.
tenderPage
();
this
.
tenderDetail
();
},
methods
:
{
tenderDetail
()
{
api
.
tenderDetail
({
id
:
this
.
id
}).
then
(
res
=>
{
// console.log(res);
this
.
textList
=
res
.
data
;
if
(
this
.
textList
.
companys
){
this
.
textList
.
companys
=
JSON
.
parse
(
this
.
textList
.
companys
);
this
.
tableData
=
this
.
textList
.
companys
;
}
}).
catch
(
error
=>
{
});
},
handleCurrentChange
(
pageNum
)
{
this
.
pageNum
=
pageNum
;
this
.
search
(
pageNum
,
this
.
pageSize
);
},
tenderPage
(
pageNum
,
pageSize
)
{
if
(
!
pageNum
)
{
this
.
pageNum
=
1
;
}
if
(
!
pageSize
)
{
this
.
pageSize
=
20
;
}
var
data
=
{
cid
:
this
.
id
,
pageNum
:
this
.
pageNum
,
pageSize
:
this
.
pageSize
}
// api.tenderPage(data).then(res => {
// // console.log(res);
// this.tableData = res.rows;
// this.total = res.total;
// console.log(this.tableData);
// }).catch(error => {
// });
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.bottomlist
{
width
:
100%
;
background-color
:
#FFFFFF
;
border-radius
:
4px
4px
4px
4px
;
.bottomlist-title
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
margin-top
:
12px
;
padding
:
16px
;
border-bottom
:
1px
solid
#EFEFEF
;
.title-right
{
display
:
flex
;
align-items
:
center
;
p
:first-child
{
font-size
:
12px
;
font-weight
:
400
;
color
:
#3D3D3D
;
margin-right
:
10px
;
}
p
:last-child
{
display
:
flex
;
align-items
:
center
;
font-size
:
14px
;
font-weight
:
400
;
color
:
rgba
(
35
,
35
,
35
,
0
.8
);
}
img
{
width
:
18px
;
height
:
18px
;
}
}
}
.bottomlist-content
{
padding-bottom
:
0px
;
}
.bottomlist-list
{
padding
:
16px
;
font-size
:
14px
;
border-bottom
:
1px
solid
#EFEFEF
;
padding-bottom
:
14px
;
.list-titel
{
font-size
:
16px
;
font-weight
:
700
;
color
:
#3D3D3D
;
line-height
:
19px
;
.list-titel-a
{
text-decoration
:
none
;
color
:
#3D3D3D
;
}
a
:hover
,
a
:visited
,
a
:link
,
a
:active
{
color
:
#3D3D3D
;
}
}
.content-label
{
margin-top
:
7px
;
.list-label
{
background
:
#F3F3FF
;
color
:
#8491E8
;
border-radius
:
1px
1px
1px
1px
;
padding
:
3px
7px
;
font-size
:
12px
;
}
}
.list-content
{
margin-top
:
3px
;
display
:
flex
;
justify-content
:
start
;
align-items
:
center
;
.list-content-text
{
margin-top
:
7px
;
display
:
flex
;
justify-content
:
start
;
align-items
:
center
;
margin-right
:
27px
;
font-size
:
14px
;
span
:first-child
{
font-weight
:
400
;
color
:
rgba
(
35
,
35
,
35
,
0
.4
);
line-height
:
15px
}
span
:last-child
{
font-weight
:
400
;
color
:
rgba
(
35
,
35
,
35
,
0
.8
);
line-height
:
15px
}
.blue
{
color
:
#0081FF
!
important
;
cursor
:
pointer
;
}
}
}
.list-addree
{
width
:
auto
;
background
:
#F3F4F5
;
display
:
inline-flex
;
margin-top
:
7px
;
.list-content-text
{
margin-top
:
0px
;
span
{
line-height
:
30px
!
important
;
}
}
img
{
width
:
14px
;
margin
:
0
8px
;
}
}
}
.bottomlist-list
:hover
{
background
:
#F6F9FC
;
cursor
:
pointer
;
}
.pagination
{
padding
:
14px
;
.el-pagination
{
float
:
right
;
}
}
}
.app-container
{
padding
:
0
;
}
.qyzx-details
{
.content
{
margin-top
:
16px
;
background
:
#FFFFFF
;
padding
:
16px
;
border-radius
:
4px
;
}
.common-title
{
margin-bottom
:
8px
;
}
.main3
{
position
:
relative
;
.main3-box
{
margin-top
:
22px
;
min-height
:
400px
;
border
:
1px
solid
#D8D8D8
;
}
.list-content-img
{
position
:
absolute
;
top
:
16px
;
right
:
14px
;
color
:
#0081FF
;
display
:
flex
;
align-items
:
center
;
font-size
:
14px
;
cursor
:
pointer
;
img
{
width
:
14px
;
height
:
14px
;
margin-right
:
4px
;
}
}
.list-content-img
:hover
{
color
:
#0067CC
;
}
}
.main5
{
.table-item
{
margin-top
:
22px
;
.blue
{
color
:
#0081FF
!
important
;
cursor
:
pointer
;
}
}
.pagination
{
padding
:
14px
;
.el-pagination
{
float
:
right
;
}
}
}
}
</
style
>
\ No newline at end of file
dsk-operate-ui/src/views/radar/components/MajorProject/index.vue
0 → 100644
View file @
ad80560a
<
template
>
<div>
<div
class=
"content"
>
<div
class=
"content_item content_item_padding0"
>
<div
class=
"label"
>
关键字
</div>
<div
class=
"content_right"
>
<el-input
class=
"ename_input"
placeholder=
"请输入关键字查询"
v-model=
"keyword"
></el-input>
<el-checkbox-group
v-model=
"keywordType"
class=
"keyword_checkbox"
>
<el-checkbox
v-for=
"item in keywordTypeList"
:label=
"item"
:key=
"item"
>
{{
item
}}
</el-checkbox>
</el-checkbox-group>
</div>
</div>
<div
class=
"content_item"
>
<div
class=
"label"
>
基本信息
</div>
<div
class=
"content_right"
>
<div
class=
"select-popper"
>
<span
:class=
"
{color_text:jskBidQueryDto.province.length ||jskBidQueryDto.city.length ||jskBidQueryDto.county.length,}">
行政区划
{{
jskBidQueryDto
.
province
.
length
||
jskBidQueryDto
.
city
.
length
||
jskBidQueryDto
.
county
.
length
?
jskBidQueryDto
.
province
.
length
+
jskBidQueryDto
.
city
.
length
+
jskBidQueryDto
.
county
.
length
+
"项"
:
""
}}
<i
class=
"el-icon-caret-bottom"
></i>
</span>
<el-cascader
ref=
"address"
class=
"cascader-region"
v-model=
"addressType"
:options=
"addressList"
:props=
"props"
@
change=
"domicileChange"
collapse-tags
clearable
></el-cascader>
</div>
<el-dropdown
@
command=
"punishDatehandleCommand"
trigger=
"click"
placement=
"bottom-start"
class=
"el-dropdown-land"
ref=
"punishDateShowPopper"
:hide-on-click=
"false"
>
<span
class=
"el-dropdown-link"
:class=
"punishDateValue ? 'color_text' : ''"
>
发布时间
{{
punishDateValue
?
" 1项"
:
""
}}
<i
class=
"el-icon-caret-bottom"
></i>
</span>
<div>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item
v-for=
"(item, i) in punishDateOptions"
class=
"el-dropdown-land"
:class=
" punishDateValue && punishDateValue == item.value ? 'color_text': '' "
:key=
"i"
:command=
"item.value"
>
<div
@
mouseenter=
"hidePoper"
>
{{
item
.
label
}}
</div>
</el-dropdown-item>
<el-dropdown-item
command=
"自定义"
style=
"padding: 0; text-indent: 20px"
>
<div
@
mouseenter=
"mouseenter"
>
<span
:class=
"punishDateValue == '自定义' ? 'color_text' : ''"
>
自定义
<i
class=
"el-icon-arrow-right"
></i>
</span>
<el-date-picker
v-if=
"punishDateShowPopper"
@
change=
"changepunishDate"
class=
"land_date_picker"
v-model=
"punishDate"
ref=
"datePicker"
value-format=
"yyyy-MM-dd"
type=
"daterange"
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
>
</el-date-picker>
</div>
</el-dropdown-item>
</el-dropdown-menu>
</div>
</el-dropdown>
<el-dropdown
@
command=
"tenderDatehandleCommand"
class=
"el-dropdown-land"
placement=
"bottom-start"
trigger=
"click"
ref=
"tenderDateShowPopper"
:hide-on-click=
"false"
>
<span
class=
"el-dropdown-link"
:class=
"tenderDateValue ? 'color_text' : ''"
>
开标时间
{{
tenderDateValue
?
" 1项"
:
""
}}
<i
class=
"el-icon-caret-bottom"
></i>
</span>
<div>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item
v-for=
"(item, i) in punishDateOptions"
:class=
" tenderDateValue && tenderDateValue == item.value ? 'color_text' : ''"
:key=
"i"
:command=
"item.value"
>
<div
@
mouseenter=
"hidePoper('bid')"
>
{{
item
.
label
}}
</div>
</el-dropdown-item>
<el-dropdown-item
command=
"自定义"
style=
"padding: 0; text-indent: 20px"
>
<div
@
mouseenter=
"mouseenter('bid')"
>
<span
:class=
"tenderDateValue == '自定义' ? 'color_text' : ''"
>
自定义
<i
class=
"el-icon-arrow-right"
></i></span>
<el-date-picker
v-if=
"tenderDateShowPopper"
@
change=
"changepunishDate('bid')"
class=
"land_date_picker"
v-model=
"tenderDate"
ref=
"tenderDatePicker"
value-format=
"yyyy-MM-dd"
type=
"daterange"
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
>
</el-date-picker>
</div>
</el-dropdown-item>
</el-dropdown-menu>
</div>
</el-dropdown>
<el-dropdown
@
command=
"transactionPricehandleCommand"
class=
"el-dropdown-land"
placement=
"bottom-start"
trigger=
"click"
ref=
"transactionPriceShowPopper"
:hide-on-click=
"false"
>
<span
class=
"el-dropdown-link"
:class=
"landMarketDto.startTransactionPrice ||landMarketDto.endTransactionPrice ? 'color_text': ''"
>
项目投资额(万元)
{{
landMarketDto
.
startTransactionPrice
||
landMarketDto
.
endTransactionPrice
?
" 1项"
:
""
}}
<i
class=
"el-icon-caret-bottom"
></i>
</span>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item
v-for=
"(item, i) in transactionPriceOptions"
:class=
"landMarketDto.startTransactionPrice == item.value[0] &&landMarketDto.endTransactionPrice == item.value[1] &&
!startTransactionPrice &&!endTransactionPrice? 'color_text': '' "
:key=
"i"
:command=
"item.value"
>
{{
item
.
label
}}
</el-dropdown-item>
<el-dropdown-item
command=
""
style=
"padding: 0; text-indent: 20px"
>
<div
@
mouseenter=
"transactionPriceShowPopper = true"
@
mouseleave=
"transactionPriceShowPopper = false"
>
<span
:class=
"(startTransactionPrice || endTransactionPrice) &&landMarketDto.startTransactionPrice ==startTransactionPrice &&
landMarketDto.endTransactionPrice == endTransactionPrice? 'color_text': '' "
>
自定义
<i
class=
"el-icon-arrow-right"
></i>
</span>
<div
class=
"jabph_popper_box"
style=
"position: absolute"
v-if=
"transactionPriceShowPopper"
>
<div
class=
"jabph_popper_wrap"
>
从
<el-input
class=
"jabph_popper_input"
v-limit-num
clearable
v-model=
"startTransactionPrice"
></el-input>
万
</div>
<div
class=
"jabph_popper_wrap"
>
到
<el-input
class=
"jabph_popper_input"
v-limit-num
clearable
v-model=
"endTransactionPrice"
></el-input>
万
</div>
<div
style=
""
>
<el-button
size=
"mini"
@
click=
"transactionPriceCancel"
>
取消
</el-button>
<el-button
type=
"primary"
size=
"mini"
@
click=
"transactionPricePopperConfirm"
>
确定
</el-button>
</div>
</div>
</div>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</div>
<div
class=
"content_item"
>
<div
class=
"label"
>
项目级别
</div>
<div
class=
"content_right"
>
<el-radio
v-model=
"projectLevel"
label=
"1"
>
省级
</el-radio>
<el-radio
v-model=
"projectLevel"
label=
"2"
>
市级
</el-radio>
<el-radio
v-model=
"projectLevel"
label=
"3"
>
区/县级
</el-radio>
</div>
</div>
<div
class=
"content_item content_item1"
>
<div
class=
"label"
>
项目类型
</div>
<div
class=
"content_right"
>
<el-checkbox-group
v-model=
"projectType"
>
<template
v-for=
"(item,index) in projectTypeList"
>
<el-checkbox
v-if=
"index
<showNum
"
:label=
"item"
:key=
"index"
>
{{
item
}}
</el-checkbox>
</
template
>
</el-checkbox-group>
<span
class=
"more"
v-if=
"showNum==11"
@
click=
"showNum=99"
>
更多
<img
src=
"@/assets/images/more.png"
alt=
""
></span>
<span
class=
"more more1"
v-if=
"showNum==99"
@
click=
"showNum=11"
>
收起
<img
src=
"@/assets/images/more.png"
alt=
""
></span>
</div>
</div>
<div
class=
"content_item content_item_padding0"
>
<div
class=
"geduan"
>
</div>
</div>
<div
class=
"content_item content_item_padding0"
>
<div
class=
"search-new"
>
<span
@
click=
"search()"
>
查询
</span>
<span
@
click=
"reset"
>
重置
</span>
</div>
</div>
</div>
<div
class=
"bottomlist"
>
<div
class=
"bottomlist-title"
>
<div
class=
"bottomlist-title-left"
>
<p
class=
"title-left"
>
查询结果
</p>
</div>
<div
class=
"title-right"
>
<p>
共有{{total}}条
</p>
<p>
<img
src=
"@/assets/images/EXCEL.png"
alt=
""
>
<span
class=
"excel"
@
click=
"$message({message: '功能正在开发中',type: 'warning'})"
>
导出EXCEL
</span>
</p>
</div>
</div>
<div
class=
"table-item-jf1"
v-if=
"tableData.length==0&& !isSkeleton"
>
<img
class=
"item-jf-img"
src=
"@/assets/images/kong.png"
alt=
""
>
<div
class=
"item-jf-titel"
>
抱歉,没找到相关数据!
</div>
<div
class=
"item-jf-text"
>
建议调整关键词或筛选条件,重新搜索!
</div>
</div>
<skeleton
style=
"margin-left:16px;"
v-if=
"isSkeleton"
></skeleton>
<ul
class=
"bottomlist-content"
v-if=
"tableData.length>0&& !isSkeleton"
>
<li
class=
"bottomlist-list"
v-for=
"item in tableData"
>
<p
class=
"list-titel"
>
<router-link
:to=
"'/radar/BidRecord/details/'+ item.id"
tag=
"a"
class=
"list-titel-a"
v-html=
"item.projectName"
></router-link>
</p>
<div
class=
"content-label"
v-if=
"item.domicile"
>
<span
class=
"list-label list-label-zb"
v-if=
"item.domicile"
>
{{item.domicile}}
</span>
</div>
<div
class=
"list-content list-content1"
v-if=
"item.tenderTime||item.source||item.punishDate"
>
<p
class=
"list-content-text"
v-if=
"item.tenderTime"
>
<span>
开标时间:
</span>
<span>
{{item.tenderTime||'--'}}
</span>
</p>
<p
class=
"list-content-text"
v-if=
"item.punishDate"
>
<span>
发布时间:
</span>
<span>
{{item.punishDate||'--'}}
</span>
</p>
<p
class=
"list-content-text"
v-if=
"item.source"
>
<span>
来源网站:
</span>
<span>
{{item.source||'--'}}
</span>
</p>
</div>
</li>
</ul>
<div
class=
"pagination clearfix"
v-show=
"total>0"
>
<el-pagination
background
:page-size=
"limit"
:current-page=
"page"
@
current-change=
"handleCurrentChange"
layout=
"prev, pager, next"
:total=
"total"
>
</el-pagination>
</div>
</div>
</div>
</template>
<
script
>
import
jsk_data
from
'../../../../../public/jsk.json'
;
import
{
encodeStr
}
from
"@/assets/js/common.js"
import
skeleton
from
'@/views/project/projectList/component/skeleton'
import
api
from
'@/api/radar/radar.js'
;
export
default
{
name
:
'BidRecord'
,
components
:{
skeleton
},
data
()
{
return
{
isSkeleton
:
true
,
addressList
:
[],
addressType
:
[],
props
:
{
multiple
:
true
,
expandTrigger
:
"hover"
,
value
:
"id"
,
},
keyword
:
""
,
keywordType
:[],
keywordTypeList
:[
'项目名称'
,
'项目法人'
,
'主管单位'
,
'建设规模'
],
landMarketDto
:
{
landUse
:
[],
province
:
[],
city
:
[],
area
:
[],
supplyLandWay
:
[],
industry
:
[],
},
startTransactionPrice
:
""
,
endTransactionPrice
:
""
,
transactionPriceShowPopper
:
false
,
projectLevel
:
""
,
projectType
:
""
,
projectTypeList
:[
'项目名称'
,
'项目法人'
,
'主管单位'
,
'建设规模'
,
'项目名称'
,
'项目法人'
,
'主管单位'
,
'建设规模'
,
'项目名称'
,
'项目法人'
,
'主管单位'
,
'建设规模'
,
'项目名称'
,
'项目法人'
,
'主管单位'
,
'建设规模'
],
transactionPriceOptions
:
[
{
value
:
[
0
,
20000
],
label
:
"2亿以下"
,
},
{
value
:
[
20000
,
""
],
label
:
"2亿以上"
,
},
{
value
:
[
50000
,
""
],
label
:
"5亿以上"
,
},
{
value
:
[
80000
,
""
],
label
:
"8亿以上"
,
},
{
value
:
[
100000
,
""
],
label
:
"10亿以上"
,
},
],
showNum
:
11
,
keywordNot
:
""
,
fieldshow
:
false
,
fieldText
:
'默认排序'
,
field
:
''
,
//查询结果排序方式
fieldOptions
:
[
{
key
:
""
,
value
:
"默认排序"
,
status
:
true
,
},
{
key
:
"publishDate"
,
value
:
"发布日期从晚到早"
,
status
:
false
,
},
],
punishDateOptions
:
[
{
label
:
"不限"
,
value
:
""
,
},
{
label
:
"今天"
,
value
:
"今天"
,
},
{
label
:
"近3日"
,
value
:
"近3日"
,
},
{
label
:
"近7日"
,
value
:
"近7日"
,
},
{
label
:
"近1个月"
,
value
:
"近1个月"
,
},
{
label
:
"近3个月"
,
value
:
"近3个月"
,
},
{
label
:
"近半年"
,
value
:
"近半年"
,
},
{
label
:
"近1年"
,
value
:
"近1年"
,
},
],
punishDateValue
:
""
,
jskBidQueryDto
:
{
province
:
[],
city
:
[],
county
:
[]
},
domicile
:
[],
provinceText
:[],
provinceList
:[],
punishDate
:
""
,
punishDateShowPopper
:
false
,
tenderDateValue
:
""
,
tenderDate
:
""
,
tenderDateShowPopper
:
false
,
pageFlag
:
true
,
conditionsArr
:
[],
tableData
:[],
total
:
0
,
page
:
1
,
limit
:
20
,
};
},
computed
:
{
checkJskBidQueryDto
()
{
let
arr
=
[];
let
flag
=
false
;
let
data
=
{};
if
(
this
.
keyword
){
data
=
{
title
:
"项目包含:"
,
keyid
:
"keyword"
,
value
:
this
.
keyword
,
key
:
"keyword"
}
flag
=
true
;
arr
.
push
(
data
)
}
if
(
this
.
keywordNot
){
data
=
{
title
:
"项目排除:"
,
keyid
:
"keywordNot"
,
value
:
this
.
keywordNot
,
key
:
"keywordNot"
}
flag
=
true
;
arr
.
push
(
data
)
}
if
(
this
.
jskBidQueryDto
.
companyName
){
data
=
{
title
:
"参投单位:"
,
keyid
:
"companyName"
,
value
:
this
.
jskBidQueryDto
.
companyName
,
key
:
"companyName"
}
flag
=
true
;
arr
.
push
(
data
)
}
if
(
this
.
jskBidQueryDto
.
startBidMoney
){
data
=
{
title
:
"最低金额:"
,
keyid
:
"startBidMoney"
,
value
:
this
.
jskBidQueryDto
.
startBidMoney
,
key
:
"startBidMoney"
}
flag
=
true
;
arr
.
push
(
data
)
}
if
(
this
.
jskBidQueryDto
.
endBidMoney
){
data
=
{
title
:
"最高金额:"
,
keyid
:
"endBidMoney"
,
value
:
this
.
jskBidQueryDto
.
endBidMoney
,
key
:
"endBidMoney"
}
flag
=
true
;
arr
.
push
(
data
)
}
if
(
this
.
jskBidQueryDto
.
hasMoney
){
data
=
{
title
:
"包含投标报价未公示"
,
keyid
:
"hasMoney"
,
value
:
this
.
jskBidQueryDto
.
hasMoney
,
key
:
"hasMoney"
}
flag
=
true
;
arr
.
push
(
data
)
}
if
(
this
.
domicile
.
length
>
0
)
{
data
=
{
title
:
"行政区划:"
,
keyid
:
"domicile"
,
value
:
this
.
domicile
.
join
(
","
),
key
:
"domicile"
}
flag
=
true
;
arr
.
push
(
data
)
}
if
(
this
.
punishDateValue
==
"自定义"
){
data
=
{
title
:
"发布时间:"
,
keyid
:
"punishDate"
,
value
:
this
.
jskBidQueryDto
.
startPunishDate
+
"~"
+
this
.
jskBidQueryDto
.
endPunishDate
,
key
:
"punishDate"
}
flag
=
true
;
arr
.
push
(
data
)
}
if
(
this
.
punishDateValue
&&
this
.
punishDateValue
!=
"自定义"
){
data
=
{
title
:
"发布时间:"
,
keyid
:
"punishDate"
,
value
:
this
.
punishDateValue
,
key
:
"punishDate"
}
flag
=
true
;
arr
.
push
(
data
)
}
if
(
this
.
tenderDateValue
==
"自定义"
){
data
=
{
title
:
"开标时间:"
,
keyid
:
"tenderDate"
,
value
:
this
.
jskBidQueryDto
.
startTenderTime
+
"~"
+
this
.
jskBidQueryDto
.
endTenderTime
,
key
:
"tenderDate"
}
flag
=
true
;
arr
.
push
(
data
)
}
if
(
this
.
tenderDateValue
&&
this
.
tenderDateValue
!=
"自定义"
){
data
=
{
title
:
"开标时间:"
,
keyid
:
"tenderDate"
,
value
:
this
.
tenderDateValue
,
key
:
"tenderDate"
}
flag
=
true
;
arr
.
push
(
data
)
}
this
.
conditionsArr
=
arr
return
flag
;
},
},
mounted
()
{
this
.
addressListfn
();
this
.
search
();
},
methods
:
{
refresh
(
value
)
{
if
(
value
)
{
this
.
$router
.
go
(
0
)
}
},
search
(
page
,
limit
,
exportFlag
)
{
if
(
!
page
)
{
this
.
page
=
1
;
}
if
(
!
limit
)
{
this
.
limit
=
20
;
}
if
(
!
page
&&
!
limit
)
{
this
.
reloadPage
();
}
var
data
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
jskBidQueryDto
));
data
.
province
=
data
.
province
.
join
(
","
);
data
.
city
=
data
.
city
.
join
(
","
);
data
.
county
=
data
.
county
.
join
(
","
);
let
params
=
{
page
:
{
page
:
this
.
page
,
limit
:
this
.
limit
,
field
:
this
.
field
,
},
jskBidQueryDto
:
data
,
};
if
(
this
.
keyword
){
params
.
keyword
=
this
.
keyword
}
else
{
delete
params
.
keyword
}
if
(
this
.
keywordNot
){
params
.
keywordNot
=
this
.
keywordNot
}
else
{
delete
params
.
keywordNot
}
this
.
isSkeleton
=
true
;
api
.
jskBidTenderPage
(
params
).
then
(
res
=>
{
this
.
isSkeleton
=
false
;
if
(
res
.
code
==
200
)
{
this
.
tableData
=
res
.
data
.
list
;
this
.
total
=
res
.
data
.
total
;
}
}).
catch
(
error
=>
{
});
},
//关闭支付弹窗
resolve
(
value
)
{
if
(
value
)
{
this
.
$router
.
go
(
0
)
}
},
provinceChange
(
arr
){
this
.
provinceText
=
[];
if
(
arr
.
length
>
0
){
arr
.
map
(
item
=>
{
this
.
provinceText
.
push
(
item
.
label
);
})
}
},
changeMoney
(
text
)
{
if
(
this
.
jskBidQueryDto
.
startBidMoney
&&
this
.
jskBidQueryDto
.
endBidMoney
&&
Number
(
this
.
jskBidQueryDto
.
startBidMoney
)
>
Number
(
this
.
jskBidQueryDto
.
endBidMoney
)
)
{
this
.
$message
.
warning
(
"最低金额不能大于最高金额!"
);
text
==
"start"
?
(
this
.
jskBidQueryDto
.
startBidMoney
=
""
)
:
(
this
.
jskBidQueryDto
.
endBidMoney
=
""
);
}
},
reloadPage
()
{
this
.
pageFlag
=
false
;
this
.
$nextTick
(()
=>
{
this
.
pageFlag
=
true
;
});
},
handleCurrentChange
(
page
)
{
this
.
page
=
page
;
this
.
search
(
page
,
this
.
limit
);
},
handleSizeChange
(
limit
)
{
this
.
limit
=
limit
;
this
.
search
(
this
.
page
,
limit
);
},
deleteDomicile
()
{
this
.
$refs
.
address
.
handleClear
();
},
domicileChange
()
{
let
arr
=
this
.
$refs
.
address
.
getCheckedNodes
();
let
province
=
[],
city
=
[],
county
=
[];
this
.
domicile
=
[];
for
(
var
i
in
arr
)
{
if
(
arr
[
i
].
parent
)
{
if
(
!
arr
[
i
].
parent
.
checked
)
{
arr
[
i
].
hasChildren
&&
city
.
push
(
arr
[
i
].
value
);
arr
[
i
].
hasChildren
&&
this
.
domicile
.
push
(
arr
[
i
].
label
);
!
arr
[
i
].
hasChildren
&&
county
.
push
(
arr
[
i
].
value
);
!
arr
[
i
].
hasChildren
&&
this
.
domicile
.
push
(
arr
[
i
].
label
);
}
}
else
{
province
.
push
(
arr
[
i
].
value
);
this
.
domicile
.
push
(
arr
[
i
].
label
);
}
}
var
obj
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
jskBidQueryDto
));
obj
.
province
=
province
;
obj
.
city
=
city
;
obj
.
county
=
county
;
this
.
jskBidQueryDto
=
obj
;
},
punishDatehandleCommand
(
command
)
{
var
obj
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
jskBidQueryDto
));
if
(
command
&&
command
!=
"自定义"
)
{
this
.
punishDateValue
=
command
;
this
.
$refs
.
punishDateShowPopper
.
hide
();
const
datetime
=
new
Date
();
var
startTime
,
endTime
,
Year
,
Month
,
Day
;
Year
=
datetime
.
getFullYear
();
Month
=
datetime
.
getMonth
()
+
1
;
Day
=
datetime
.
getDate
();
switch
(
command
)
{
case
"今天"
:
startTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
endTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
break
;
case
"近3日"
:
endTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
if
(
Day
>
3
)
{
startTime
=
Year
+
"-"
+
Month
+
"-"
+
(
Day
-
3
);
}
else
{
let
newTime
=
datetime
.
getTime
()
-
3
*
24
*
60
*
60
*
1000
Year
=
new
Date
(
newTime
).
getFullYear
();
Month
=
new
Date
(
newTime
).
getMonth
()
+
1
;
Day
=
new
Date
(
newTime
).
getDate
();
startTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
}
break
;
case
"近7日"
:
endTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
if
(
Day
>
7
)
{
startTime
=
Year
+
"-"
+
Month
+
"-"
+
(
Day
-
7
);
}
else
{
let
newTime
=
datetime
.
getTime
()
-
7
*
24
*
60
*
60
*
1000
Year
=
new
Date
(
newTime
).
getFullYear
();
Month
=
new
Date
(
newTime
).
getMonth
()
+
1
;
Day
=
new
Date
(
newTime
).
getDate
();
startTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
}
break
;
case
"近1个月"
:
endTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
if
(
Month
>
1
)
{
startTime
=
Year
+
"-"
+
(
Month
-
1
)
+
"-1"
;
}
else
{
startTime
=
Year
-
1
+
"-"
+
(
12
+
Month
-
1
)
+
"-1"
;
}
break
;
case
"近3个月"
:
endTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
if
(
Month
>
3
)
{
startTime
=
Year
+
"-"
+
(
Month
-
3
)
+
"-1"
;
}
else
{
startTime
=
Year
-
1
+
"-"
+
(
12
+
Month
-
3
)
+
"-1"
;
}
break
;
case
"近半年"
:
endTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
if
(
Month
>
6
)
{
startTime
=
Year
+
"-"
+
(
Month
-
6
)
+
"-1"
;
}
else
{
startTime
=
Year
-
1
+
"-"
+
(
12
+
Month
-
6
)
+
"-1"
;
}
break
;
case
"近1年"
:
startTime
=
Year
-
1
+
"-"
+
Month
+
"-"
+
Day
;
endTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
break
;
case
"自定义"
:
if
(
!
this
.
punishDate
)
{
this
.
punishDateValue
=
""
;
}
break
;
}
if
(
startTime
){
var
start
=
startTime
.
split
(
'-'
);
startTime
=
start
.
map
((
item
)
=>
{
if
(
item
.
length
==
1
){
return
'0'
+
item
}
else
{
return
item
}
})
startTime
=
startTime
.
join
(
'-'
)
}
if
(
endTime
){
var
end
=
endTime
.
split
(
'-'
);
endTime
=
end
.
map
((
item
)
=>
{
if
(
item
.
length
==
1
){
return
'0'
+
item
}
else
{
return
item
}
})
endTime
=
endTime
.
join
(
'-'
)
}
obj
.
startPunishDate
=
startTime
;
obj
.
endPunishDate
=
endTime
;
}
else
if
(
command
==
"自定义"
)
{
this
.
$refs
.
datePicker
.
pickerVisible
=
true
;
}
else
{
this
.
$refs
.
punishDateShowPopper
.
hide
();
this
.
punishDateValue
=
""
;
this
.
punishDate
=
""
;
obj
.
startPunishDate
=
""
;
obj
.
endPunishDate
=
""
;
}
this
.
jskBidQueryDto
=
obj
;
},
transactionPricehandleCommand
(
command
)
{
if
(
command
)
{
this
.
$refs
.
transactionPriceShowPopper
.
hide
();
var
obj
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
landMarketDto
));
this
.
startTransactionPrice
=
""
;
this
.
endTransactionPrice
=
""
;
if
(
command
==
"不限"
)
{
obj
.
startTransactionPrice
=
""
;
obj
.
endTransactionPrice
=
""
;
}
else
{
obj
.
startTransactionPrice
=
command
[
0
];
obj
.
endTransactionPrice
=
command
[
1
];
}
this
.
landMarketDto
=
obj
;
}
},
transactionPriceCancel
()
{
this
.
transactionPriceShowPopper
=
false
;
this
.
$refs
.
transactionPriceShowPopper
.
hide
();
},
transactionPricePopperConfirm
()
{
if
(
this
.
startTransactionPrice
&&
this
.
endTransactionPrice
&&
!
(
Number
(
this
.
endTransactionPrice
)
>
Number
(
this
.
startTransactionPrice
))
)
{
return
this
.
$message
.
warning
(
"最小值必须小于最大值,请重新输入!"
);
}
this
.
transactionPriceShowPopper
=
false
;
var
obj
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
landMarketDto
));
obj
.
startTransactionPrice
=
this
.
startTransactionPrice
;
obj
.
endTransactionPrice
=
this
.
endTransactionPrice
;
this
.
landMarketDto
=
obj
;
this
.
$refs
.
transactionPriceShowPopper
.
hide
();
},
transactionPricehandleCommand
(
command
)
{
if
(
command
)
{
this
.
$refs
.
transactionPriceShowPopper
.
hide
();
var
obj
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
landMarketDto
));
this
.
startTransactionPrice
=
""
;
this
.
endTransactionPrice
=
""
;
if
(
command
==
"不限"
)
{
obj
.
startTransactionPrice
=
""
;
obj
.
endTransactionPrice
=
""
;
}
else
{
obj
.
startTransactionPrice
=
command
[
0
];
obj
.
endTransactionPrice
=
command
[
1
];
}
this
.
landMarketDto
=
obj
;
}
},
tenderDatehandleCommand
(
command
)
{
var
obj
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
jskBidQueryDto
));
if
(
command
&&
command
!=
"自定义"
)
{
this
.
tenderDateValue
=
command
;
this
.
$refs
.
tenderDateShowPopper
.
hide
();
const
datetime
=
new
Date
();
var
startTime
,
endTime
,
Year
,
Month
,
Day
;
Year
=
datetime
.
getFullYear
();
Month
=
datetime
.
getMonth
()
+
1
;
Day
=
datetime
.
getDate
();
switch
(
command
)
{
case
"今天"
:
startTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
endTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
break
;
case
"近3日"
:
endTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
if
(
Day
>
3
)
{
startTime
=
Year
+
"-"
+
Month
+
"-"
+
(
Day
-
3
);
}
else
{
let
newTime
=
datetime
.
getTime
()
-
3
*
24
*
60
*
60
*
1000
Year
=
new
Date
(
newTime
).
getFullYear
();
Month
=
new
Date
(
newTime
).
getMonth
()
+
1
;
Day
=
new
Date
(
newTime
).
getDate
();
startTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
}
break
;
case
"近7日"
:
endTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
if
(
Day
>
7
)
{
startTime
=
Year
+
"-"
+
Month
+
"-"
+
(
Day
-
7
);
}
else
{
let
newTime
=
datetime
.
getTime
()
-
7
*
24
*
60
*
60
*
1000
Year
=
new
Date
(
newTime
).
getFullYear
();
Month
=
new
Date
(
newTime
).
getMonth
()
+
1
;
Day
=
new
Date
(
newTime
).
getDate
();
startTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
}
break
;
case
"近1个月"
:
endTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
if
(
Month
>
1
)
{
startTime
=
Year
+
"-"
+
(
Month
-
1
)
+
"-1"
;
}
else
{
startTime
=
Year
-
1
+
"-"
+
(
12
+
Month
-
1
)
+
"-1"
;
}
break
;
case
"近3个月"
:
endTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
if
(
Month
>
3
)
{
startTime
=
Year
+
"-"
+
(
Month
-
3
)
+
"-1"
;
}
else
{
startTime
=
Year
-
1
+
"-"
+
(
12
+
Month
-
3
)
+
"-1"
;
}
break
;
case
"近半年"
:
endTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
if
(
Month
>
6
)
{
startTime
=
Year
+
"-"
+
(
Month
-
6
)
+
"-1"
;
}
else
{
startTime
=
Year
-
1
+
"-"
+
(
12
+
Month
-
6
)
+
"-1"
;
}
break
;
case
"近1年"
:
startTime
=
Year
-
1
+
"-"
+
Month
+
"-"
+
Day
;
endTime
=
Year
+
"-"
+
Month
+
"-"
+
Day
;
break
;
case
"自定义"
:
if
(
!
this
.
tenderDate
)
{
this
.
tenderDateValue
=
""
;
}
break
;
}
if
(
startTime
){
var
start
=
startTime
.
split
(
'-'
);
startTime
=
start
.
map
((
item
)
=>
{
if
(
item
.
length
==
1
){
return
'0'
+
item
}
else
{
return
item
}
})
startTime
=
startTime
.
join
(
'-'
)
}
if
(
endTime
){
var
end
=
endTime
.
split
(
'-'
);
endTime
=
end
.
map
((
item
)
=>
{
if
(
item
.
length
==
1
){
return
'0'
+
item
}
else
{
return
item
}
})
endTime
=
endTime
.
join
(
'-'
)
}
obj
.
startTenderTime
=
startTime
;
obj
.
endTenderTime
=
endTime
;
}
else
if
(
command
==
"自定义"
)
{
this
.
$refs
.
tenderDatePicker
.
pickerVisible
=
true
;
}
else
{
this
.
$refs
.
tenderDateShowPopper
.
hide
();
this
.
tenderDateValue
=
""
;
this
.
tenderDate
=
""
;
obj
.
startTenderTime
=
""
;
obj
.
endTenderTime
=
""
;
}
this
.
jskBidQueryDto
=
obj
;
},
changepunishDate
(
type
)
{
if
(
type
==
'bid'
&&
this
.
tenderDate
){
this
.
tenderDateValue
=
"自定义"
;
var
obj
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
jskBidQueryDto
));
obj
.
startTenderTime
=
this
.
tenderDate
[
0
];
obj
.
endTenderTime
=
this
.
tenderDate
[
1
];
this
.
jskBidQueryDto
=
obj
;
}
else
if
(
this
.
punishDate
)
{
this
.
punishDateValue
=
"自定义"
;
var
obj
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
jskBidQueryDto
));
obj
.
startPunishDate
=
this
.
punishDate
[
0
];
obj
.
endPunishDate
=
this
.
punishDate
[
1
];
this
.
jskBidQueryDto
=
obj
;
}
},
addressListfn
()
{
var
str
=
[];
for
(
let
x
=
0
;
x
<
3
;
x
++
)
{
for
(
let
i
=
0
;
i
<
jsk_data
.
length
;
i
++
)
{
if
(
jsk_data
[
i
].
regionLevel
==
x
+
1
&&
x
+
1
==
1
)
{
str
.
push
({
id
:
jsk_data
[
i
].
id
,
label
:
jsk_data
[
i
].
regionName
,
short
:
jsk_data
[
i
].
short
,
value
:
jsk_data
[
i
].
parentId
,
children
:
jsk_data
[
i
].
id
==
900000
?
undefined
:[],
});
}
else
if
(
jsk_data
[
i
].
regionLevel
==
x
+
1
&&
x
+
1
==
2
&&
str
)
{
for
(
let
j
=
0
;
j
<
str
.
length
;
j
++
)
{
if
(
str
[
j
].
id
==
jsk_data
[
i
].
parentId
)
{
str
[
j
].
children
.
push
({
id
:
jsk_data
[
i
].
id
,
label
:
jsk_data
[
i
].
regionName
,
short
:
jsk_data
[
i
].
short
,
value
:
jsk_data
[
i
].
parentId
,
children
:
[],
});
}
}
}
else
if
(
jsk_data
[
i
].
regionLevel
==
x
+
1
&&
x
+
1
==
3
)
{
for
(
let
j
=
0
;
j
<
str
.
length
;
j
++
)
{
if
(
str
[
j
].
children
){
for
(
let
k
=
0
;
k
<
str
[
j
].
children
.
length
;
k
++
)
{
if
(
str
[
j
].
children
[
k
].
id
==
jsk_data
[
i
].
parentId
)
{
str
[
j
].
children
[
k
].
children
.
push
({
id
:
jsk_data
[
i
].
id
,
label
:
jsk_data
[
i
].
regionName
,
short
:
jsk_data
[
i
].
short
,
value
:
jsk_data
[
i
].
parentId
,
});
}
}
}
}
}
}
}
this
.
addressList
=
str
;
},
hidePoper
(
type
)
{
if
(
type
==
'bid'
&&
this
.
$refs
.
tenderDatePicker
){
this
.
$refs
.
tenderDatePicker
.
pickerVisible
=
false
;
}
else
if
(
this
.
$refs
.
datePicker
){
this
.
$refs
.
datePicker
.
pickerVisible
=
false
;
}
},
mouseenter
(
type
)
{
if
(
type
==
'bid'
){
this
.
tenderDateShowPopper
=
true
;
if
(
this
.
tenderDateValue
==
"自定义"
){
this
.
$nextTick
(()
=>
{
this
.
$refs
.
tenderDatePicker
.
pickerVisible
=
true
;
});
}
}
else
{
this
.
punishDateShowPopper
=
true
;
if
(
this
.
punishDateValue
==
"自定义"
){
this
.
$nextTick
(()
=>
{
this
.
$refs
.
datePicker
.
pickerVisible
=
true
;
});
}
}
},
clearpunishDate
(
type
)
{
var
obj
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
jskBidQueryDto
));
if
(
type
==
'bid'
){
this
.
tenderDate
=
""
;
this
.
tenderDateValue
=
""
;
obj
.
startTenderTime
=
""
;
obj
.
endTenderTime
=
""
;
}
else
{
this
.
punishDate
=
""
;
this
.
punishDateValue
=
""
;
obj
.
startPunishDate
=
""
;
obj
.
endPunishDate
=
""
;
}
this
.
jskBidQueryDto
=
obj
;
},
reset
()
{
Object
.
assign
(
this
.
$data
,
this
.
$options
.
data
.
call
(
this
));
//重置data
this
.
init
();
this
.
$emit
(
"reset"
);
},
init
(){
this
.
search
();
this
.
addressListfn
();
},
handsequencingList
(
index
)
{
this
.
fieldshow
=
false
;
this
.
field
=
this
.
fieldOptions
[
index
].
key
;
for
(
let
i
=
0
;
i
<
this
.
fieldOptions
.
length
;
i
++
)
{
this
.
fieldOptions
[
i
].
status
=
false
;
}
this
.
fieldText
=
this
.
fieldOptions
[
index
].
value
;
this
.
fieldOptions
[
index
].
status
=
true
;
this
.
search
();
},
},
};
</
script
>
<
style
lang=
"scss"
scoped
>
.content
{
padding
:
0px
16px
;
padding-top
:
16px
;
border-radius
:
4px
4px
4px
4px
;
background
:
#FFFFFF
;
.content_item
{
padding-top
:
20px
;
display
:
flex
;
align-items
:
baseline
;
.label
{
width
:
84px
;
font-size
:
14px
;
font-weight
:
400
;
color
:
rgba
(
35
,
35
,
35
,
0
.8
);
}
.content_right
{
display
:
flex
;
position
:
relative
;
.ename_input
{
width
:
240px
;
margin-right
:
20px
;
}
.keyword_checkbox
{
margin-top
:
6px
;
}
.el-checkbox-group
{
width
:
1064px
}
.el-checkbox
{
margin-right
:
24px
;
height
:
22px
;
line-height
:
22px
;
margin-bottom
:
16px
;
}
.more
{
font-size
:
12px
;
cursor
:
pointer
;
color
:
#0081FF
;
position
:
absolute
;
right
:
0
;
img
{
width
:
12px
;
height
:
8px
;
}
}
.more1
{
img
{
}
}
}
.item_ckquery_list
{
display
:
flex
;
}
.item_ckquery_list
.el-input__icon
{
position
:
relative
;
top
:
1px
;
}
.ckquery_list_right
{
width
:
640px
;
}
.register_count_ipt
{
margin-left
:
0px
;
}
.register_count_ipt
.el-input__inner
{
width
:
174px
;
}
::v-deep
.el-input-group__prepend
{
padding
:
0
8px
;
}
.content-projecttype
{
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
.projecttype
{
font-weight
:
400
;
color
:
#232323
;
padding
:
1px
5px
;
margin-right
:
4px
;
cursor
:
pointer
;
border-radius
:
3px
3px
3px
3px
;
font-size
:
14px
;
}
.projecttype
:first-child
{
padding-left
:
0px
;
}
.projecttype
:hover
{
background
:
#F3F4F5
;
padding
:
1px
5px
;
}
.activetype
{
background
:
#F3F4F5
;
padding
:
1px
5px
!
important
;
}
}
}
.content_item1
{
display
:
block
;
}
.content_item_padding0
{
padding
:
0
;
}
}
.bottomlist
{
width
:
100%
;
background-color
:
#FFFFFF
;
border-radius
:
4px
4px
4px
4px
;
.bottomlist-title
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
margin-top
:
12px
;
padding
:
16px
;
border-bottom
:
1px
solid
#EFEFEF
;
.title-right
{
display
:
flex
;
align-items
:
center
;
p
:first-child
{
font-size
:
12px
;
font-weight
:
400
;
color
:
#3D3D3D
;
margin-right
:
10px
;
}
p
:last-child
{
display
:
flex
;
align-items
:
center
;
font-size
:
14px
;
font-weight
:
400
;
color
:
rgba
(
35
,
35
,
35
,
0
.8
);
}
img
{
width
:
18px
;
height
:
18px
;
}
.excel
{
cursor
:
pointer
;
}
}
.bottomlist-title-left
{
display
:
inline-flex
;;
align-items
:
center
;
.title-left
{
border-left
:
2px
solid
#445781
;
padding-left
:
8px
;
padding-right
:
32px
;
font-size
:
16px
;
height
:
16px
;
line-height
:
16px
;
font-weight
:
bold
;
color
:
#232323
;
}
}
}
.bottomlist-content
{
padding-bottom
:
0px
;
}
.bottomlist-list
{
padding
:
16px
;
font-size
:
14px
;
border-bottom
:
1px
solid
#EFEFEF
;
padding-bottom
:
14px
;
.list-titel
{
font-size
:
16px
;
font-weight
:
700
;
color
:
#3D3D3D
;
line-height
:
19px
;
.list-titel-a
{
text-decoration
:
none
;
color
:
#3D3D3D
;
}
a
:hover
,
a
:visited
,
a
:link
,
a
:active
{
color
:
#3D3D3D
;
}
}
.content-label
{
margin-top
:
8px
;
.list-label
{
background
:
#F3F3FF
;
color
:
#8491E8
;
border-radius
:
1px
1px
1px
1px
;
padding
:
3px
7px
;
font-size
:
12px
;
}
}
.list-content
{
margin-top
:
8px
;
display
:
flex
;
justify-content
:
start
;
align-items
:
center
;
.list-content-text
{
display
:
flex
;
justify-content
:
start
;
align-items
:
center
;
margin-right
:
32px
;
font-size
:
14px
;
span
:first-child
{
font-weight
:
400
;
color
:
rgba
(
35
,
35
,
35
,
0
.4
);
line-height
:
15px
}
span
:last-child
{
font-weight
:
400
;
color
:
rgba
(
35
,
35
,
35
,
0
.8
);
line-height
:
15px
}
.blue
{
color
:
#0081FF
!
important
;
cursor
:
pointer
;
}
}
}
.list-addree
{
width
:
auto
;
background
:
#F3F4F5
;
display
:
inline-flex
;
margin-top
:
7px
;
.list-content-text
{
margin-top
:
0px
;
span
{
line-height
:
30px
!
important
;
}
}
img
{
width
:
14px
;
margin
:
0
8px
;
}
}
.list-content1
{
margin-top
:
12px
;
}
}
.bottomlist-list
:hover
{
background
:
#F6F9FC
;
cursor
:
pointer
;
}
.pagination
{
padding
:
14px
;
.el-pagination
{
float
:
right
;
}
}
}
.jabph_popper_box
{
left
:
101px
;
}
</
style
>
dsk-operate-ui/src/views/radar/index.vue
View file @
ad80560a
...
...
@@ -14,6 +14,8 @@
</div>
<p
class=
"solid"
></p>
</div>
<!-- 重点项目清单 -->
<MajorProject
v-if=
"personnelHerf=='MajorProject'"
/>
<!-- 政府专项债 -->
<debtProject
v-if=
"personnelHerf=='debtProject'"
/>
<!-- 土地交易 -->
...
...
@@ -41,15 +43,23 @@
import
Tender
from
"./components/Tender/index.vue"
;
import
BidRecord
from
"./components/BidRecord/index.vue"
;
import
Bidding
from
"./components/Bidding/index.vue"
;
import
MajorProject
from
"./components/MajorProject/index.vue"
;
import
"@/assets/styles/public.css"
;
export
default
{
name
:
'Radar'
,
components
:
{
debtProject
,
Land
,
Establishment
,
bxprozbgg
,
Tender
,
BidRecord
,
Bidding
},
components
:
{
MajorProject
,
debtProject
,
Land
,
Establishment
,
bxprozbgg
,
Tender
,
BidRecord
,
Bidding
},
data
()
{
return
{
// tablist
personnelList
:
[{
personnelList
:
[
// {
// key: 'MajorProject',
// status: true,
// value: '重点项目清单',
// },
{
key
:
'debtProject'
,
status
:
true
,
value
:
'政府专项债项目'
,
...
...
dsk-system/src/main/java/com/dsk/system/domain/dsk/dto/JskCombineBidPageDto.java
0 → 100644
View file @
ad80560a
package
com
.
dsk
.
system
.
domain
.
dsk
.
dto
;
import
com.dsk.common.core.domain.model.BasePage
;
import
lombok.Data
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
import
java.util.List
;
/**
* 集团户相关查询条件实体类
*
* @author Dgm
* @create 2023/8/7
*/
@Data
public
class
JskCombineBidPageDto
extends
BasePage
implements
Serializable
{
/**
* 集团id
*/
@NotNull
(
message
=
"集团id不能为空!"
)
private
String
combineId
;
/**
* 集团名称
*/
private
String
combineName
;
/**
* 筛选参数
*/
private
String
keys
;
/**
* 集团层级
*/
private
List
<
String
>
combineMemberLevels
;
/**
* 省id
*/
private
List
<
Integer
>
provinceIds
;
/**
* 市id
*/
private
List
<
Integer
>
cityIds
;
/**
* 区id
*/
private
List
<
Integer
>
areaIds
;
/**
* 最大金额
*/
private
Integer
maxAmount
;
/**
* 最小金额
*/
private
Integer
minAmount
;
/**
* 业务类型
*/
private
String
businessType
;
/**
* 科技型企业类型
*/
private
List
<
String
>
companyTypes
;
/**
* 企业类型
*/
private
String
companyType
;
/**
* 最大持股比例
*/
private
Double
maxStockPercent
;
/**
* 最小持股比例
*/
private
Double
minStockPercent
;
/**
* 时间(开始)
*/
private
String
startTime
;
/**
* 时间(结束)
*/
private
String
endTime
;
/**
* 招采类型
*/
private
List
<
String
>
subjectMatters
;
/**
* 项目类型
*/
private
List
<
String
>
projectTypes
;
}
dsk-system/src/main/java/com/dsk/system/domain/dsk/dto/JskCombineSearchDto.java
View file @
ad80560a
...
...
@@ -20,6 +20,10 @@ public class JskCombineSearchDto implements Serializable {
*/
@NotNull
(
message
=
"集团id不能为空!"
)
private
String
combineId
;
/**
* 集团名称
*/
private
String
combineName
;
/**
* 筛选参数
*/
...
...
dsk-system/src/main/java/com/dsk/system/domain/dsk/vo/JskCombineBidProjectExportVo.java
0 → 100644
View file @
ad80560a
package
com
.
dsk
.
system
.
domain
.
dsk
.
vo
;
import
com.dsk.common.annotation.Excel
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* 集团中标业绩
* @author lcl
* @create 2023/8/28
*/
@Data
public
class
JskCombineBidProjectExportVo
implements
Serializable
{
@Excel
(
name
=
"序号"
,
width
=
6
)
private
Integer
id
;
@Excel
(
name
=
"招标发布时间"
,
width
=
15
,
dateFormat
=
"yyyy/MM/dd"
)
private
Date
issueTime
;
@Excel
(
name
=
"招标成员"
,
width
=
30
)
private
String
tenderee
;
@Excel
(
name
=
"持股比例"
,
suffix
=
"%"
,
width
=
15
)
private
Double
stockPercent
;
@Excel
(
name
=
"成员等级"
,
width
=
15
)
private
String
memberLevel
;
@Excel
(
name
=
"项目名称"
,
width
=
50
)
private
String
projectName
;
@Excel
(
name
=
"预算金额"
,
suffix
=
"万元"
)
private
Double
bidAmount
;
@Excel
(
name
=
"项目地区"
,
width
=
20
)
private
String
address
;
@Excel
(
name
=
"招标采购分类"
,
width
=
15
)
private
String
subjectMatter
;
@Excel
(
name
=
"项目类型"
,
width
=
15
)
private
String
projectType
;
@Excel
(
name
=
"代理单位"
,
width
=
30
)
private
String
agency
;
}
dsk-system/src/main/java/com/dsk/system/domain/dsk/vo/JskCombineWinBidProjectExportVo.java
0 → 100644
View file @
ad80560a
package
com
.
dsk
.
system
.
domain
.
dsk
.
vo
;
import
com.dsk.common.annotation.Excel
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* 集团中标业绩
* @author lcl
* @create 2023/8/28
*/
@Data
public
class
JskCombineWinBidProjectExportVo
implements
Serializable
{
@Excel
(
name
=
"序号"
,
width
=
6
)
private
Integer
id
;
@Excel
(
name
=
"中标时间"
,
width
=
15
,
dateFormat
=
"yyyy/MM/dd"
)
private
Date
bidTime
;
@Excel
(
name
=
"成员名称"
,
width
=
30
)
private
String
companyName
;
@Excel
(
name
=
"持股比例"
,
suffix
=
"%"
,
width
=
15
)
private
Double
stockPercent
;
@Excel
(
name
=
"成员等级"
,
width
=
15
)
private
String
memberLevel
;
@Excel
(
name
=
"项目名称"
,
width
=
50
)
private
String
projectName
;
@Excel
(
name
=
"中标金额"
,
suffix
=
"万元"
)
private
Double
bidAmount
;
@Excel
(
name
=
"中标地区"
,
width
=
20
)
private
String
address
;
@Excel
(
name
=
"业绩类型"
,
width
=
15
)
private
String
boundType
;
@Excel
(
name
=
"项目类型"
,
width
=
15
)
private
String
projectType
;
@Excel
(
name
=
"业主单位"
,
width
=
30
)
private
String
projectUnit
;
}
dsk-system/src/main/java/com/dsk/system/dskService/JskCombineInfoService.java
View file @
ad80560a
package
com
.
dsk
.
system
.
dskService
;
import
cn.hutool.core.bean.BeanException
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.map.MapUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.dsk.common.core.domain.AjaxResult
;
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.system.domain.dsk.dto.JskCombineBidPageDto
;
import
com.dsk.system.domain.dsk.dto.JskCombineCertificateDto
;
import
com.dsk.system.domain.dsk.dto.JskCombineSearchDto
;
import
com.dsk.system.domain.dsk.vo.JskCombineBidProjectExportVo
;
import
com.dsk.system.domain.dsk.vo.JskCombineWinBidProjectExportVo
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.MapUtils
;
import
org.apache.ibatis.util.MapUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.ObjectUtils
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -81,7 +83,7 @@ public class JskCombineInfoService {
return
dskOpenApiUtil
.
responsePage
(
map
);
}
public
TableDataInfo
menberCertificateList
(
JskCombineCertificateDto
dto
)
throws
Exception
{
public
TableDataInfo
menberCertificateList
(
JskCombineCertificateDto
dto
)
throws
Exception
{
Map
<
String
,
Object
>
map
=
dskOpenApiUtil
.
requestBody
(
"/operate/combine/member/certificateList"
,
BeanUtil
.
beanToMap
(
dto
,
false
,
false
));
// if (!ObjectUtils.isEmpty(map.get("data"))) {
// Map<String, Object> data = BeanUtil.beanToMap(map.get("data"));
...
...
@@ -141,4 +143,86 @@ public class JskCombineInfoService {
Map
<
String
,
Object
>
map
=
dskOpenApiUtil
.
requestBody
(
"/nationzj/enterprice/centralEnterprse/social/page"
,
object
);
return
BeanUtil
.
toBean
(
map
,
AjaxResult
.
class
);
}
public
List
<
JskCombineWinBidProjectExportVo
>
exportWinBid
(
JskCombineSearchDto
dto
)
{
if
(
ObjectUtils
.
isEmpty
(
dto
.
getPageSize
()))
throw
new
ServiceException
(
"导出条数不能为空!"
);
if
(
dto
.
getPageSize
()
>
2000
)
dto
.
setPageSize
(
2000
);
Map
<
String
,
Object
>
map
=
dskOpenApiUtil
.
requestBody
(
"/operate/combine/businessList"
,
BeanUtil
.
beanToMap
(
dto
,
false
,
false
));
if
(
ObjectUtils
.
isEmpty
(
map
.
get
(
"data"
)))
throw
new
ServiceException
(
"导出失败,系统错误!"
);
Map
<
String
,
Object
>
data
=
BeanUtil
.
beanToMap
(
map
.
get
(
"data"
));
if
(
ObjectUtils
.
isEmpty
(
data
.
get
(
"list"
)))
throw
new
ServiceException
(
"导出失败,系统错误!"
);
List
<
Map
<
String
,
Object
>>
list
=
(
List
<
Map
<
String
,
Object
>>)
data
.
get
(
"list"
);
if
(
ObjectUtils
.
isEmpty
(
list
))
throw
new
ServiceException
(
"导出失败,无数据导出!"
);
List
<
JskCombineWinBidProjectExportVo
>
result
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
list
.
size
();
i
++)
{
JskCombineWinBidProjectExportVo
vo
=
new
JskCombineWinBidProjectExportVo
();
vo
.
setId
(
i
+
1
);
vo
.
setBidTime
(
MapUtil
.
getDate
(
list
.
get
(
i
),
"bidTime"
));
vo
.
setCompanyName
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"companyName"
));
vo
.
setStockPercent
(
MapUtil
.
getDouble
(
list
.
get
(
i
),
"stockPercent"
));
vo
.
setMemberLevel
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"memberLevel"
));
vo
.
setProjectName
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"projectName"
));
vo
.
setBidAmount
(
MapUtil
.
getDouble
(
list
.
get
(
i
),
"bidAmount"
));
vo
.
setAddress
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"address"
));
vo
.
setBoundType
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"boundType"
));
vo
.
setProjectType
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"projectType"
));
vo
.
setProjectUnit
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"projectUnit"
));
result
.
add
(
vo
);
}
return
result
;
}
public
List
<
JskCombineBidProjectExportVo
>
exportBid
(
JskCombineBidPageDto
dto
)
{
if
(
ObjectUtils
.
isEmpty
(
dto
.
getPageSize
()))
throw
new
ServiceException
(
"导出条数不能为空!"
);
if
(
dto
.
getPageSize
()
>
2000
)
dto
.
setPageSize
(
2000
);
Map
<
String
,
Object
>
map
=
dskOpenApiUtil
.
requestBody
(
"/operate/combine/bidPage"
,
BeanUtil
.
beanToMap
(
dto
,
false
,
false
));
if
(
ObjectUtils
.
isEmpty
(
map
.
get
(
"data"
)))
throw
new
ServiceException
(
"导出失败,系统错误!"
);
Map
<
String
,
Object
>
data
=
BeanUtil
.
beanToMap
(
map
.
get
(
"data"
));
if
(
ObjectUtils
.
isEmpty
(
data
.
get
(
"list"
)))
throw
new
ServiceException
(
"导出失败,系统错误!"
);
List
<
Map
<
String
,
Object
>>
list
=
(
List
<
Map
<
String
,
Object
>>)
data
.
get
(
"list"
);
if
(
ObjectUtils
.
isEmpty
(
list
))
throw
new
ServiceException
(
"导出失败,无数据导出!"
);
List
<
JskCombineBidProjectExportVo
>
result
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
list
.
size
();
i
++)
{
JskCombineBidProjectExportVo
vo
=
new
JskCombineBidProjectExportVo
();
vo
.
setId
(
i
+
1
);
vo
.
setIssueTime
(
MapUtil
.
getDate
(
list
.
get
(
i
),
"issueTime"
));
vo
.
setTenderee
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"tenderee"
));
vo
.
setStockPercent
(
MapUtil
.
getDouble
(
list
.
get
(
i
),
"stockPercent"
));
vo
.
setMemberLevel
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"memberLevel"
));
vo
.
setProjectName
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"projectName"
));
vo
.
setBidAmount
(
MapUtil
.
getDouble
(
list
.
get
(
i
),
"bidAmount"
));
vo
.
setAddress
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"address"
));
vo
.
setSubjectMatter
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"subjectMatter"
));
vo
.
setProjectType
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"projectType"
));
vo
.
setAgency
(
MapUtil
.
getStr
(
list
.
get
(
i
),
"agency"
));
result
.
add
(
vo
);
}
return
result
;
}
public
TableDataInfo
bidPage
(
JskCombineBidPageDto
dto
)
throws
Exception
{
Map
<
String
,
Object
>
map
=
dskOpenApiUtil
.
requestBody
(
"/operate/combine/bidPage"
,
BeanUtil
.
beanToMap
(
dto
,
false
,
false
));
if
(
ObjectUtil
.
isNotEmpty
(
map
.
get
(
"data"
)))
{
Map
<
String
,
Object
>
data
=
BeanUtil
.
beanToMap
(
map
.
get
(
"data"
));
if
(!
ObjectUtils
.
isEmpty
(
data
.
get
(
"list"
)))
{
List
<
Map
<
String
,
Object
>>
list
=
(
List
<
Map
<
String
,
Object
>>)
data
.
get
(
"list"
);
list
.
parallelStream
().
forEach
(
res
->
{
//招标企业
Integer
tendereeId
=
MapUtils
.
getInteger
(
res
,
"tendereeId"
);
String
tenderee
=
MapUtils
.
getString
(
res
,
"tenderee"
);
// 代理机构名称
Integer
agencyId
=
MapUtils
.
getInteger
(
res
,
"agencyId"
);
String
agency
=
MapUtils
.
getString
(
res
,
"agency"
);
res
.
put
(
"tendereeUipId"
,
enterpriseService
.
getUipIdByCompanyNameOrCompanyId
(
tenderee
,
tendereeId
));
res
.
put
(
"agencyUipId"
,
enterpriseService
.
getUipIdByCompanyNameOrCompanyId
(
agency
,
agencyId
));
});
}
}
return
dskOpenApiUtil
.
responsePage
(
map
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment