封装表格_分页组件

renderCards(cards) {
	return cards.map(card => {
		return (
			<el-card class="box-card">
			<div slot="header">
				<span>{card.name}</span>
			</div>
			{card.children && this.renderRows(card.children)}
			</el-card>
)})}
  • 加margin-bottom
.box-card {
	margin-bottom:10px;
	>div {
		>div {
			text-align:left;
}}}
  • 加日期 element ui 的DateTimePicker
case 'datetime' :
return <el-date-picker
v-model = {this.form[item.key]}
type = "date"
placeholder = "选择日期">
</el-date-picker>

在这里插入图片描述

  • 写按钮的点击事件

loan-input index下

<GformCreator ref="createForm" :conf="inputConf">
<template>
<div>
<el-button @click="createUser" type="primary"></el-button>
<el-button @click="reset">重置</el-button>
</div>
</template>
</GformCreatot>

点击事件createUser,拿到数据,没有数据输出验证不通过
有的话打印
通过ref绑定组件,调用子组件的方法
resetFields()? 专门用来重置表单的嘛?

methods: {
	createUser() {
		// 验证
		this.$refs.createForm.validate((data) => {
				if(!date) return this.$message('表单验证不通过');
				console.log('数据:',data);
			})},
	reset() {
		this.$refs.createForm.reset()
}
},

createUser()方法生效在这里插入图片描述
reset方法生效
在这里插入图片描述

  • 设置mockdata
在这里插入代码片
  • apis 下新建loan.js
    api应该是专门请求接口数据的
import { request,pretty } from '@/utils/request'

export const createLoan = (data) => {
		return pretty(request(
		{url: '/loan/create'
		method:'post',
		data,
		)})}

在这里插入图片描述

  • loan-input index.vue
    == 请求接口获取数据,==
import {createLoan} from '@/apis/loan'

let[res,err] = await createLoan(mockdata);
if(err) return this.$message('创建用户失败');
console.log(res,'res');
  • request.js
if(response?.data?.code === 20000) {
		Message.success(response?.data?.data);
		return response;
}

在这里插入图片描述

$data组件里面存数据

inputManager

<template>
<GTable :options="conf.options">

</Gtable>
</template>
<script>
export default {
		data() {
			return {}
}}
</script>

loanListConf.js配置数据结构的

export default {
		options:{}, // table 属性
		pageOptions:{}, // 分页器属性
		columns:[] // column的配置
}

在这里插入图片描述
多写了一个.
在这里插入图片描述
没有给组件名字
传递4个属性
inputManager

<script> import loanListConf from './loanListConf';</script> 
<template>
<GTable 
:options="conf.options" 
:data = "tableData",
pageOptions:{},//分页器属性
:columns = "conf.columns">
</Gtable>
</template>

plugin中引入和注册组件GTable
GTable.vue
接收父组件的传值

<script>
	export default {
		props:{
			options:{
			type:Object,
			default:()=>{
					return this.gOptions
}},
			pageOptions: {
				type:Object,
				default:() => {
					return this.gpageOptions;
		}},
			data: {
					type:Array,
					required:true,
				},
			columns :{
					type:Array,
					default: () =>[]
				}}
</script>

设置一些表格的默认值:

data() {
	return {
			//multiSelect:true,
			//index:true,
		gOptions:{
			height:400,
			stripe:true,
			border:false,
			fit:true,
			showHeader:true,
			rowKey:'id',
},
	gPageOptions: {}
}}
computed: {
	g_options() {
		return Object.assign({},this.gOptions,this.option)
}},

computed 监视外部属性的改变,合并本来的配置 g_options 返回合并属性

表格渲染

attrs:

render() {
// const {g_options} = this;
console.log(this.g_options,'this');
return (
<div>
{this.g_options}
<div>
)}

打印的时候有,输出没有。
在这里插入图片描述
g_options: 是computed里面的
gOptions是data里面的

render() {
		const {gOptions} = this;
		console.log(this.g_options,'this');
		return (
		<div>
		<el-table attrs = {gOptions}>
		</el-table>
		{this.g_options}
<div>
)}

在这里插入图片描述
发请求,拿到data下的数据

  • api 下的loan.js

别忘记引入request

export const queryLoan = (params) => {
		return pretty( request( {
				url:'/loan/list',
				params,
}))}

在这里插入图片描述

input-manager index下

import {queryLoan} from '@/apis/loan'
created () {
			this.loanLoanByPage();
},
export default {
data() {
	tableData:[],  // 表格的data API接口获取
	conf:loanListConf  // 定义的数据结构

methods:{
// 分页函数
	async	loadLoanByPage() {
			// 1 后续需要管理pageNo 页码
			// 2 发请求获取数据,传递到table组件中
		let [res,err] = await	queryLoan({
				pageNo:1,
				pageSize:10
}) ;
	console.log(res,err,'list数据')
	this.tableData = res?.data?.data?.data?.data;
	console.log(this.tableData)
}}}

在这里插入图片描述
数据给了GTable,由于:data绑定了tableData

GTable下
render渲染的DOM
添加 data={data},渲染到表格上

render() {
		const {gOptions} = this;
		console.log(this.g_options,'this');
		return (
		<div>
		<el-table data={data} attrs = {gOptions}>
		</el-table>
		{this.g_options}
<div>
)}

下有了数据,如图。但是没有渲染到页面,因为缺少列
在这里插入图片描述

产生列和列表? column 也就是el-table-column

render() {
		const {gOptions} = this;
		console.log(this.g_options,'this');
		return (
		<div>
		<el-table data={data} attrs = {gOptions}>
				<el-table-column
					prop = "name"
					label = "姓名"
					width = "180">
					</el-table-column>
					<el-table-column
					prop = "address"
					label = "地址">
					</el-table-column>
		</el-table>
		{this.g_options}
<div>
)}

渲染成功一列
在这里插入图片描述

封装方法 renderTable() ,renderPagination(options)

	renderTable() {
	return (
		const {g_options,data} = this;
			<el-table data={data} attrs={g_options}>
				<el-table-column
			prop = "name"
			label = "姓名"
			width = "180">
			</el-table-column>
			<el-table-column
			prop = "address"
			label = "地址">
			</el-table-column>
					</el-table>)
}}
renderPagination(options) {
	return(
				<el-pagination
				onSize-change = "handleSizeChange"
				onCurrent-change = "handleCurrentChange"
				cunrrent-page ={1}
				page-sizes = {[100,200,300,400]}
				page-size={100}
				layout= "total,sizes,prev,pager,next,"
				total = {400}>
				</el-pagination>
				)
},

分页是个假的分页
在这里插入图片描述用attrs = {options}代替原来的属性,将原来的属性写入options上

renderPagination(options) {
	return(
				<el-pagination
				onSize-change = "handleSizeChange"
				onCurrent-change = "handleCurrentChange"
				attrs = {options}
				total = {400}>
				</el-pagination>
				)
},
render() {
return (
	<div>
				{this.renderTable() }
				{this.renderPagination(this.gPageOption) }
	</div>
)}

一些默认值

data() {
return {
	gPageOptions:{
		currentPage:1,
		pageSizes:[100,200,300,400]
		pageSize:100,
		total:400,
}
}}

添加解构

render() {
		const {gPageOptions} = this;
		return (
			<div>
				{this.renderTable()}
				{this.renderPagination(gPageOptions)}
			</div>
)}

computed 下加值

computed() {
g_options() {
		return Object.assign({},this.gOption,this.options)
}
g_pageOptions() {
	return Object.assign({},this.gPageOptions,this.pageOptions)
}}
render() {
		const {g_pageOptions} = this;
		return (
			<div>
				{this.renderTable()}
				{this.renderPagination(g_pageOptions)}
			</div>
)}

在这里插入图片描述
GTable下
handleCurrentChange:子组件的方法
innerHandleCurrentChange:父组件的事件

handleCurrentChange(page) {
	this.$emit('handleCurrentChange',page)
}

index.vue
组件传值

@handleCurrentChange = "innerHandleCurrentChange">

声明分页方法

innerHandleCurrentChange() {
	console.log(page,'翻页了');
	}

翻页了,重新发起请求
在这里插入图片描述

再次调用函数loadLoanByPage()
加一个参数1

created () {
			this.loanLoanByPage(1);
}

加一个参数page

innerHandleCurrentChange(page) {
	console.log(page,'翻页了');
	this.loadLoanByPage(page);	
}

加一个参数page

aync loadLoanByPage(page) {
	let [res,err] = await queryLoan({
			pageNo:page,
			pageSize:10
});
	this.tableData = res?.data?.data?.data?.data;
}

报错信息:
在这里插入图片描述
错误原因:dom节点错了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

今天就这样吧,表格没渲染出来,明天继续,今天这种学习方式不是很好,应该记笔记一段,再敲代码一段的。

表格loading

上午重听了一遍,发现函数没有加return,导致表格没有渲染上去,还有数据请求不成功,报错图二
在这里插入图片描述
在这里插入图片描述
上图是因为接收数据的数据结构错了,不用数组就可以拿到数据了。下图这个鬼样子,还把res和err换了位置。得到图1
在这里插入图片描述

可能实现的逻辑更重要一些吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值