Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
bdc
/
bdcjg-web
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
ce2113de
authored
2023-07-26 16:22:58 +0800
by
yuanbo
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
增加注释
1 parent
00fb6174
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
420 additions
and
0 deletions
src/components/DownLbTable/LbColumn.vue
src/components/DownLbTable/index.vue
src/components/DownLbTable/LbColumn.vue
0 → 100644
View file @
ce2113d
/*
* FileName: lb-column.vue
* Remark: element-column
* Project: lb-element-table
* Author: 任超
* File Created: Tuesday, 19th March 2019 9:58:23 am
* Last Modified: Tuesday, 19th March 2019 10:14:42 am
* Modified By: 任超
*/
<
template
>
<el-table-column
v-bind=
"$attrs"
v-on=
"$listeners"
:prop=
"column.prop"
:label=
"column.label"
:type=
"column.type"
:index=
"column.index"
:column-key=
"column.columnKey"
:width=
"column.width"
:min-width=
"column.minWidth"
:fixed=
"column.fixed"
:scoped-slot=
"column.renderHeader"
:sortable=
"column.sortable || false"
:sort-method=
"column.sortMethod"
:sort-by=
"column.sortBy"
:sort-orders=
"column.sortOrders"
:resizable=
"column.resizable || true"
:formatter=
"column.formatter"
:show-overflow-tooltip=
"column.showOverflowTooltip || false"
:align=
"column.align || align || 'center'"
:header-align=
"column.headerAlign || headerAlign || column.align || align || 'center'"
:class-name=
"column.className"
:label-class-name=
"column.labelClassName"
:selectable=
"column.selectable"
:reserve-selection=
"column.reserveSelection || false"
:filters=
"column.filters"
:filter-placement=
"column.filterPlacement"
:filter-multiple=
"column.filterMultiple"
:filter-method=
"column.filterMethod"
:filtered-value=
"column.filteredValue"
>
<template
slot=
"header"
slot-scope=
"scope"
>
<lb-render
v-if=
"column.renderHeader"
:scope=
"scope"
:render=
"column.renderHeader"
>
</lb-render>
<span
v-else
>
{{
scope
.
column
.
label
}}
</span>
</
template
>
<
template
slot-scope=
"scope"
>
<lb-render
:scope=
"scope"
:render=
"column.render"
>
</lb-render>
</
template
>
<
template
v-if=
"column.children"
>
<lb-column
v-for=
"(col, index) in column.children"
:key=
"index"
:column=
"col"
>
</lb-column>
</
template
>
</el-table-column>
</template>
<
script
>
import
LbRender
from
'./LbRender'
import
forced
from
'./forced.js'
export
default
{
name
:
'LbColumn'
,
props
:
{
column
:
Object
,
headerAlign
:
String
,
align
:
String
},
components
:
{
LbRender
},
methods
:
{
/**
* @description: setColumn
* @author: renchao
*/
setColumn
()
{
if
(
this
.
column
.
type
)
{
this
.
column
.
renderHeader
=
forced
[
this
.
column
.
type
].
renderHeader
this
.
column
.
render
=
this
.
column
.
render
||
forced
[
this
.
column
.
type
].
renderCell
}
if
(
this
.
column
.
formatter
)
{
this
.
column
.
render
=
(
h
,
scope
)
=>
{
return
<
span
>
{
scope
.
column
.
formatter
(
scope
.
row
,
scope
.
column
,
scope
.
row
,
scope
.
$index
)}
<
/span
>
}
}
if
(
!
this
.
column
.
render
)
{
this
.
column
.
render
=
(
h
,
scope
)
=>
{
return
<
span
>
{
scope
.
row
[
scope
.
column
.
property
]}
<
/span
>
}
}
}
},
watch
:
{
column
:
{
handler
()
{
this
.
setColumn
()
},
immediate
:
true
}
}
}
</
script
>
src/components/DownLbTable/index.vue
0 → 100644
View file @
ce2113d
/*
* FileName: lb-table.vue
* Remark: element table
* Project: lb-element-table
* Author: 任超
* File Created: Tuesday, 19th March 2019 9:55:27 am
* Last Modified: Tuesday, 19th March 2019 9:55:34 am
* Modified By: 任超
*/
<
template
>
<div
:class=
"['lb-table', customClass]"
>
<el-table
v-if=
"!heightNumSetting"
class=
"table-fixed"
:row-style=
"
{ height: '50px' }" ref="elTable" :border='border'
:row-class-name="tableRowClassName" :show-header='showHeader' @row-click="singleElection" v-bind="$attrs"
:height="tableHeight" v-on="$listeners" :data="data" style="width: 100%"
:span-method="this.merge ? this.mergeMethod : this.spanMethod">
<el-table-column
width=
"45"
align=
"center"
v-if=
"isRadio"
>
<template
slot-scope=
"scope"
>
<el-radio
v-model=
"selected"
:label=
"scope.$index"
></el-radio>
</
template
>
</el-table-column>
<el-table-column
:label=
"downTitle"
align=
"center"
>
<lb-column
v-bind=
"$attrs"
v-for=
"(item, index) in column"
:key=
"index"
:column=
"item"
>
</lb-column>
</el-table-column>
</el-table>
<br>
<el-pagination
class=
"lb-table-pagination"
v-if=
"pagination"
v-bind=
"$attrs"
v-on=
"$listeners"
background
layout=
"total, prev, pager, next"
@
current-change=
"paginationCurrentChange"
:style=
"{ 'margin-top': paginationTop, 'text-align': paginationAlign }"
>
</el-pagination>
</div>
</template>
<
script
>
import
LbColumn
from
'./LbColumn'
export
default
{
props
:
{
column
:
Array
,
data
:
Array
,
spanMethod
:
Function
,
pagination
:
{
type
:
Boolean
,
default
:
true
,
},
downExcel
:
{
type
:
Boolean
,
default
:
false
,
},
downTitle
:
{
type
:
String
,
default
:
'标题'
},
isRadio
:
{
type
:
Boolean
,
default
:
false
,
},
border
:
{
type
:
Boolean
,
default
:
false
,
},
showHeader
:
{
type
:
Boolean
,
default
:
true
,
},
paginationTop
:
{
type
:
String
,
default
:
'0'
,
},
heightNum
:
{
type
:
Number
,
default
:
355
,
},
maxHeight
:
{
type
:
Number
,
default
:
500
},
heightNumSetting
:
{
type
:
Boolean
,
default
:
false
,
},
customClass
:
{
type
:
String
,
default
:
''
,
},
paginationAlign
:
{
type
:
String
,
default
:
'left'
,
},
merge
:
Array
,
},
components
:
{
LbColumn
,
},
data
()
{
return
{
tableHeight
:
'auto'
,
mergeLine
:
{},
mergeIndex
:
{},
selected
:
''
}
},
created
()
{
this
.
getMergeArr
(
this
.
data
,
this
.
merge
)
this
.
getHeight
()
},
computed
:
{
dataLength
()
{
return
[]
||
this
.
data
.
length
},
},
methods
:
{
// 单选
/**
* @description: 单选
* @param {*} row
* @author: renchao
*/
singleElection
(
row
)
{
this
.
selected
=
this
.
data
.
indexOf
(
row
);
},
/**
* @description: tableRowClassName
* @param {*} row
* @param {*} rowIndex
* @author: renchao
*/
tableRowClassName
({
row
,
rowIndex
})
{
if
(
rowIndex
%
2
===
1
)
{
return
'interlaced'
;
}
},
/**
* @description: getHeight
* @author: renchao
*/
getHeight
()
{
if
(
!
this
.
heightNumSetting
)
{
let
_this
=
this
if
(
this
.
heightNum
)
{
_this
.
$nextTick
(()
=>
{
window
.
addEventListener
(
'resize'
,
()
=>
{
_this
.
tableHeight
=
_this
.
calcHeightx
(
230
)
});
_this
.
tableHeight
=
_this
.
calcHeightx
(
230
)
})
}
else
{
_this
.
tableHeight
=
window
.
innerHeight
-
_this
.
heightNum
}
}
},
/**
* @description: calcHeightx
* @param {*} value
* @param {*} wappered
* @author: renchao
*/
calcHeightx
(
value
,
wappered
=
true
)
{
//项目自定义的公共header部分的高度,可忽略
let
header
=
document
.
querySelector
(
".from-clues-header"
).
offsetHeight
;
//value为动态计算table界面高度时,减去的其他空白部分,需自行在调试找到临界值,剩下的就是table表格的高度(包含header+body部分)
value
=
value
==
undefined
?
100
:
value
;
let
res
=
window
.
innerHeight
-
parseInt
(
header
)
-
value
;
if
(
wappered
)
{
//通过原生方法,获取dom节点的高度------获取element-ui table表格body的元素
let
wapper
=
window
.
document
.
getElementsByClassName
(
'el-table__body-wrapper'
);
//通过原生方法,获取dom节点的高度------获取element-ui table表格header的元素
let
header
=
window
.
document
.
getElementsByClassName
(
'el-table__header-wrapper'
);
//必须加延时,要不然赋不上去值
setTimeout
(()
=>
{
//通过上边计算得到的table高度的value值,减去table表格的header高度,剩下的通过dom节点直接强行赋给table表格的body
wapper
[
0
].
style
.
height
=
(
value
-
header
[
0
].
clientHeight
)
},
100
)
}
return
res
;
},
/**
* @description: clearSelection
* @author: renchao
*/
clearSelection
()
{
this
.
$refs
.
elTable
.
clearSelection
()
},
/**
* @description: toggleRowSelection
* @param {*} row
* @param {*} selected
* @author: renchao
*/
toggleRowSelection
(
row
,
selected
)
{
this
.
$refs
.
elTable
.
toggleRowSelection
(
row
,
selected
)
},
/**
* @description: toggleAllSelection
* @author: renchao
*/
toggleAllSelection
()
{
this
.
$refs
.
elTable
.
toggleAllSelection
()
},
/**
* @description: toggleRowExpansion
* @param {*} row
* @param {*} expanded
* @author: renchao
*/
toggleRowExpansion
(
row
,
expanded
)
{
this
.
$refs
.
elTable
.
toggleRowExpansion
(
row
,
expanded
)
},
/**
* @description: setCurrentRow
* @param {*} row
* @author: renchao
*/
setCurrentRow
(
row
)
{
this
.
$refs
.
elTable
.
setCurrentRow
(
row
)
},
/**
* @description: clearSort
* @author: renchao
*/
clearSort
()
{
this
.
$refs
.
elTable
.
clearSort
()
},
/**
* @description: clearFilter
* @param {*} columnKey
* @author: renchao
*/
clearFilter
(
columnKey
)
{
this
.
$refs
.
elTable
.
clearFilter
(
columnKey
)
},
/**
* @description: doLayout
* @author: renchao
*/
doLayout
()
{
this
.
$refs
.
elTable
.
doLayout
()
},
/**
* @description: sort
* @param {*} prop
* @param {*} order
* @author: renchao
*/
sort
(
prop
,
order
)
{
this
.
$refs
.
elTable
.
sort
(
prop
,
order
)
},
/**
* @description: paginationCurrentChange
* @param {*} val
* @author: renchao
*/
paginationCurrentChange
(
val
)
{
this
.
$emit
(
'p-current-change'
,
val
)
},
/**
* @description: getMergeArr
* @param {*} tableData
* @param {*} merge
* @author: renchao
*/
getMergeArr
(
tableData
,
merge
)
{
if
(
!
merge
)
return
this
.
mergeLine
=
{}
this
.
mergeIndex
=
{}
merge
.
forEach
((
item
,
k
)
=>
{
tableData
.
forEach
((
data
,
i
)
=>
{
if
(
i
===
0
)
{
this
.
mergeIndex
[
item
]
=
this
.
mergeIndex
[
item
]
||
[]
this
.
mergeIndex
[
item
].
push
(
1
)
this
.
mergeLine
[
item
]
=
0
}
else
{
if
(
data
[
item
]
===
tableData
[
i
-
1
][
item
])
{
this
.
mergeIndex
[
item
][
this
.
mergeLine
[
item
]]
+=
1
this
.
mergeIndex
[
item
].
push
(
0
)
}
else
{
this
.
mergeIndex
[
item
].
push
(
1
)
this
.
mergeLine
[
item
]
=
i
}
}
})
})
},
/**
* @description: mergeMethod
* @param {*} row
* @param {*} column
* @param {*} rowIndex
* @param {*} columnIndex
* @author: renchao
*/
mergeMethod
({
row
,
column
,
rowIndex
,
columnIndex
})
{
const
index
=
this
.
merge
.
indexOf
(
column
.
property
)
if
(
index
>
-
1
)
{
const
_row
=
this
.
mergeIndex
[
this
.
merge
[
index
]][
rowIndex
]
const
_col
=
_row
>
0
?
1
:
0
return
{
rowspan
:
_row
,
colspan
:
_col
,
}
}
},
},
watch
:
{
merge
()
{
this
.
getMergeArr
(
this
.
data
,
this
.
merge
)
},
dataLength
()
{
this
.
getMergeArr
(
this
.
data
,
this
.
merge
)
}
},
}
</
script
>
<
style
rel=
"stylesheet/scss"
scoped
lang=
"scss"
>
.lb-table
{
margin-top
:
1px
;
.interlaced
{
background
:
#fafcff
;
border
:
1px
solid
#ebf2fa
;
}
}
/
deep
/
.el-table
.cell
{
padding-left
:
3px
;
padding-right
:
3px
;
}
/
deep
/
.el-radio__label
{
display
:
none
;
}
</
style
>
Please
register
or
sign in
to post a comment