已经封装好的
<template>
<div>
<i-table
:loading="loading"
:columns="columns"
:data="data"
@on-select="onSelect"
@on-select-cancel="onSelectCancel"
@on-select-all="onSelectAll"
@on-select-all-cancel="onSelectAllCancel"
/>
<i-page
:total="total"
:current="page"
:page-size="size"
flex="main:center"
class="c-gap-top"
show-total
@on-change="changePage"
/>
</div>
</template>
<script>
import iTable from '@components/table';
import iPage from '@components/page';
export default {
components: {
iTable,
iPage,
},
props: {
columns: {
type: Array,
default: () => [],
},
data: {
type: Array,
default: () => [],
},
loading: {
type: Boolean,
default: true,
},
page: {
type: Number,
default: 1,
},
size: {
type: Number,
default: 10,
},
total: {
type: Number,
default: 1,
},
val: {
type: String,
default: '',
},
type: {
type: String,
default: '',
},
},
data() {
return {
selectList: [],
tempArr: [],
};
},
methods: {
changePage(index) {
this.$emit('changePage', index);
},
onSelect(selection, row) {
this.selectList.push(row);
this.data.forEach(item => {
if (item[this.val] === row[this.val]) {
item._checked = true;
};
});
},
onSelectCancel(selection, row) {
this.selectList.forEach((item, index) => this.tDelete(item, row, index));
},
onSelectAll(all) {
this.type ? this.$emit('tableList') : this.handle(all);
},
tableList(all) {
this.handle(all);
},
onSelectAllCancel() {
this.tempArr.forEach(item => {
this.selectList.forEach((key, index) => this.tDelete(item, key, index));
});
},
handleTableChecked(data) {
this.selectList.forEach(item => {
data.forEach(every => {
if (item[this.val] === every[this.val]) {
every._checked = true;
};
});
});
},
tDelete(item, key, index) {
if (item[this.val] === key[this.val]) {
this.selectList.splice(index, 1);
};
},
handle(all) {
const newArr = {};
const that = this;
this.tempArr = all;
this.selectList = all.map(item => item);
this.selectList = this.selectList.reduce(function (item, next) {
newArr[next[that.val]] ? '' : newArr[next[that.val]] = true && item.push(next);
return item;
}, []);
},
},
watch: {
selectList(item) {
this.$emit('selectData', item);
},
},
};
</script>
没封装的
<i-table
stripe ref="selection"
:columns="columns"
:data="dataList"
:loading="loading"
@on-select="onSelect"
@on-select-cancel="onSelectCancel"
@on-select-all="onSelectAll"
@on-select-all-cancel="onSelectAllCancel"
/>
<i-page
:total="total"
:current="curPage"
:page-size="pageSize"
flex="main:center"
class="c-gap-top"
show-total
@on-change="changePage"
></i-page>
data() {
return {
total: 0,
curPage: 1,
pageSize: 10,
dataList: [],
selectList: [],
gdatalist: [],
tempArr: [],
};
},
methods: {
onSelect(selection, row) {
this.tempArr.push(row);
this.dataList.forEach(item => {
if (item.doctor_id === row.doctor_id) {
item._checked = true;
};
});
},
onSelectCancel(selection, row) {
this.tempArr.forEach((item, index) => {
if (row.doctor_id === item.doctor_id) {
this.tempArr.splice(index, 1);
};
});
},
async onSelectAll(selection) {
const {
data,
status
} = await this.$http.post(Api.doctorStatus, {
...this.g_params(),
page: 1,
size: 10000000,
}, {
headers: {
'Content-type': 'application/json'
},
});
if (+status === 0) {
this.gdatalist = data.List;
this.gdatalist.forEach(item => {
this.tempArr.push(item);
});
this.tempArr = Array.from(new Set(this.tempArr));
}
},
onSelectAllCancel(selection) {
this.gdatalist.forEach(item => {
this.tempArr.forEach((e, index) => {
if (item.doctor_id === e.doctor_id) {
this.tempArr.splice(index, 1);
};
});
});
},
handleTableChecked(datas) {
this.tempArr.forEach(item => {
datas.forEach(e => {
if (item.doctor_id === e.doctor_id) {
e._checked = true;
};
});
});
},
async getList() {
const {data, status} = await this.$http.post(Api.doctorStatus, {
...this.g_params(),
size: this.pageSize,
page: this.curPage,
},
{
headers: {
'Content-type': 'application/json'
},
},
);
if (+status === 0) {
this.dataList = data.List != null ? data.List : [];
this.handleTableChecked(this.dataList);
this.total = data.total_count;
};
},
}