You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

200 lines
4.6 KiB

<template>
<view class="table-demo">
<view style="padding:20rpx 20rpx 10rpx 20rpx;">
<vol-alert>
<view>1完全自定义vol-table列表内容及样式,:table4.vue</view>
<view>2内部已处理高度自适应自动分页数据源自动加载</view>
<view>3此示例通过tableData属性手动绑定数据</view>
</vol-alert>
</view>
<vol-table @scrolltolower="scrolltolower" :tableData="tableData" custom ref="table" :columns.sync="columns">
<!-- 自定义内容 -->
<template v-slot:data="{rows}">
<view @click="rowClick(row,index)" v-for="(row,index) in rows" class="grid-item">
<view class="grid-content">
<view class="grid-title">{{index+1}}、{{row.title}}</view>
<view class="grid-bottom">
<view class="grid-bottom-item">
<view>发布人</view>
<view>{{row.creator}}</view>
</view>
<view class="grid-bottom-item">
<view>发布时间</view>
<view>{{row.createDate}}</view>
</view>
<view class="grid-bottom-item">
<view>修改人</view>
<view>{{row.creator}}</view>
</view>
<view class="grid-bottom-item">
<view>修改时间</view>
<view>{{row.createDate}}</view>
</view>
<!-- 小程序不支持标签里面调用方法。manifest.json并且要配置 "scopedSlotsCompiler":"legacy",属性 -->
</view>
<view class="btns">
<view class="btn-item">
<u-button @click="rowClick(row,index)" shape="circle" type="primary" size="mini">
<u-icon name="file-text" size="12" color="#ffff"></u-icon>查看
</u-button>
</view>
<view class="btn-item">
<u-button @click="delClick(row,index)" shape="circle" type="error" size="mini">
<u-icon name="trash" size="12" color="#ffff"></u-icon>删除
</u-button>
</view>
</view>
</view>
</view>
</template>
</vol-table>
<u-modal showCancelButton @confirm="confirm" @cancel="show=false" :show="show" title="警告" content='确定要删除数据吗'>
</u-modal>
</view>
</template>
<script>
export default {
data() {
return {
show: false,
page: 0,
tableData: [],
columns: [{
field: 'id',
title: '主键ID'
},
{
field: 'title',
title: '标题'
},
{
field: 'creator',
title: '发布人',
},
{
field: 'createDate',
title: '发布时间',
type: 'datetime',
},
{
field: 'modifier',
title: '修改人',
type: 'string',
width: 130,
hidden: true,
align: 'left'
},
{
field: 'modifyDate',
title: '修改时间',
type: 'datetime'
}
],
}
},
onLoad() {
this.getData()
},
methods: {
//分页事件
scrolltolower() {
this.getData();
},
getData() {
if (this.page < 0) {
return;
}
this.page++;
let url = 'api/app_news/getList?newsType=1&&page=' + this.page;
this.http.get(url, {}, false).then(result => {
result.forEach(item => {
item.imageUrl = this.http.ipAddress + item.imageUrl;
item.createDate = (item.createDate || '').substr(0, 10);
item.modifyDate = (item.modifyDate || '').substr(0, 10);
})
if (!result.length) {
this.page = -1;
}
this.tableData.push(...result);
})
},
rowClick(row, index) {
console.log('点击了第' + index + '行')
return this.$toast('点击了第' + index + '行');
},
delClick(row, index) {
this.row = row;
this.index = index;
this.show = true;
},
confirm() {
this.tableData.splice(this.index, 1);
this.show = false;
this.$toast('删除成功')
}
}
}
</script>
<style lang="less" scoped>
.table-demo {
background: #f4f4f4;
}
.grid-item {
margin: 10rpx 20rpx;
padding: 16rpx;
border-radius: 8rpx;
display: flex;
background: #ffff;
.grid-content {
display: flex;
flex: 1;
flex-direction: column;
padding-left: 20rpx;
.grid-title {
font-size: 28rpx;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.grid-bottom {
flex: 1;
align-items: flex-end;
padding-top: 10rpx;
display: flex;
font-size: 24rpx;
color: #959595;
.grid-bottom-item {
flex: 1;
padding-right: 20rpx;
}
.grid-bottom-item>view:first-child {
color: #353535;
font-size: 22rpx;
}
}
}
}
.btns {
padding: 20rpx 20rpx 0 0;
display: flex;
justify-content: flex-end;
.btn-item {
margin-left: 20rpx;
}
}
</style>