1.组件TableChoose
< template>
< div class = "tableChooseBox" >
< div class = "tableRow" >
< div class = "tableCard" >
< div class = "tableHeadTip" > 全部{ { labelTitle } } < / div>
< slot name= "body" / >
< / div>
< div class = "tableCardBlank" > < / div>
< div class = "tableCard" >
< div class = "tableHeadTip" > 已选择{ { labelTitle } } < / div>
< el- table
ref= "Table"
: data= "goodsList"
border
max- height= "300px"
: cell- style= "$style.cellStyle"
: header- cell- style= "$style.rowClass"
: row- key= "getRowKeys"
@select= "select"
@select- all= "selectAll"
@header- dragend= "headerDragend"
>
< el- table- column
label= "选择"
type= "selection"
align= "center"
reserve- selection
> < / el- table- column>
< el- table- column
v- for = "item in goodsLabelList"
: key= "item.prop"
: label= "item.label"
: prop= "item.prop"
: width= "item.width"
align= "center"
>
< template slot- scope= "scope" >
< span v- if = "item.state" >
< el- tag v- if = "scope.row.state == 0" type= "danger" > 禁用< / el- tag>
< el- tag v- else - if = "scope.row.state == 1" type= "success"
> 启用< / el- tag
>
< / span>
< span v- else - if = "item.type" >
< el- tag v- if = "scope.row.type == 1" >
{ { ROOM_TYPE [ scope. row. type] } } < / el- tag
>
< el- tag v- if = "scope.row.type == 0" type= "success" > { {
ROOM_TYPE [ scope. row. type]
} } < / el- tag>
< / span>
< span v- else > { { scope. row[ item. prop] } } < / span>
< / template> < / el- table- column
>
< / el- table>
< / div>
< / div>
< / div>
< / template>
< script>
import tableMixin from "@/mixin/tableMixin" ;
import { getDictionaries, dictionaryConstants } from "@/utils/dictionaries" ;
export default {
name : "TableChoose" ,
props : [ "goodsLabelList" , "goodsList" , "labelTitle" , "id" ] ,
mixins : [ tableMixin] ,
components : { } ,
data ( ) {
return {
ROOM_TYPE : getDictionaries ( dictionaryConstants. ROOM_TYPE . parentCode)
} ;
} ,
computed : { } ,
watch : {
goodsList ( n ) {
n. forEach ( ( row ) => {
this . $refs. Table. toggleRowSelection ( row, true ) ;
} ) ;
} ,
} ,
methods : {
getRowKeys ( row ) {
return row[ this . id] ;
} ,
select ( selection, row ) {
this . $emit ( "changeChooseList" , row, false ) ;
} ,
selectAll ( selection ) {
this . $emit ( "changeChooseList" , { } , true ) ;
} ,
} ,
} ;
< / script>
< style lang= "scss" scoped>
. tableChooseBox {
width : 100 % ;
}
. tableRow {
display : flex;
align- items: flex- start;
justify- content: space- between;
}
. tableCardBlank {
width : 20px;
height : 10px;
}
. tableCard {
padding : 20px;
box- shadow: 0px 3px 12px rgba ( 0 , 0 , 0 , 0.1 ) ;
opacity : 1 ;
border- radius: 10px;
flex : 1 ;
overflow : hidden;
. tableHeadTip {
font- size: 14px;
font- weight: bold;
line- height: 22px;
color : rgba ( 0 , 0 , 0 , 0.65 ) ;
opacity : 1 ;
margin- bottom: 10px;
text- align: left;
}
}
< / style>
2.页面使用
const goodsLabelList = [
{
label : "货主编号" ,
prop : "id" ,
} ,
{
label : "货主名称" ,
prop : "storeName" ,
} ,
{
label : "货主地址" ,
prop : "addressAll" ,
} ,
{
label : "货主电话" ,
prop : "storePhone" ,
} ,
] ;
import TableChoose from "@/components/TableExtend/TableChoose" ;
< table- choose
: goodsLabelList= "goodsLabelList"
: goodsList= "GoodsChexkboxs"
: labelTitle= "labelTitle"
id= "id"
@changeChooseList= "changeChooseList"
>
< template slot= "body" >
< el- table
: data= "StoreList"
ref= "GoodsTable"
border
max- height= "350px"
: header- cell- style= "$style.rowClass"
: row- key= "getRowKeys"
@selection- change= "GoodsHandleChange"
@header- dragend= "headerDragend"
: cell- style= "changeRowBgColorByIsPay"
>
< el- table- column
label= "选择"
type= "selection"
align= "center"
reserve- selection
: selectable= "selectEnable"
> < / el- table- column>
< el- table- column
v- for = "item in goodsLabelList"
: key= "item.prop"
: label= "item.label"
: prop= "item.prop"
align= "center"
show- overflow- tooltip
> < / el- table- column>
< / el- table>
< / template>
< / table- choose>
changeRowBgColorByIsPay ( { row, rowIndex } ) {
if ( this . forbidden. some ( ( item ) => item === row. id) ) {
return "background-color: rgba(230, 162, 60, 0.1) !important" ;
}
} ,
selectEnable ( row, rowIndex ) {
if ( this . forbidden. some ( ( item ) => item === row. id) ) {
return false ;
} else {
return true ;
}
} ,
changeChooseList ( row, clearAll ) {
const GoodsTable = this . $refs. GoodsTable;
if ( clearAll) {
GoodsTable. clearSelection ( ) ;
} else {
GoodsTable. toggleRowSelection ( row, false ) ;
}
} ,
submitForm ( ) {
var dataArr = [ ] ;
if ( this . GoodsChexkboxs. length === 0 ) {
this . $notification ( "操作失败" , "error" , "请勾选货主数据" ) ;
return ;
}
for ( let index = 0 ; index < this . GoodsChexkboxs. length; index++ ) {
const element = this . GoodsChexkboxs[ index] ;
dataArr. push ( {
qcExamineModeEnum : this . detail. qcExamineModeEnum,
ownerCode : element. id,
ownerId : element. id,
ownerName : element. storeName,
} ) ;
}
qcStoreInsert ( dataArr) . then ( ( res ) => {
const { code, msg } = res. data;
const title = code === 200 ? "操作成功" : "操作失败" ;
const type = code === 200 ? "success" : "error" ;
this . $notification ( title, type, msg) ;
if ( code === 200 ) {
this . popVisible = false ;
this . getQueryList ( ) ;
}
} ) ;
} ,
GoodsHandleChange ( selection ) {
this . GoodsChexkboxs = selection;
} ,