table,dialog初始化

文章介绍了在Vue.js环境中,处理父组件中的多选表格功能时的关键点,包括@selection-change事件用于处理选择变化,row-key设置为唯一ID,reserve-selection属性保持选择状态,以及使用clearSelection和toggleRowSelection方法来控制选中项。内容涉及到表格数据的加载、编辑和分页操作。
摘要由CSDN通过智能技术生成

父组件多选内容注意点

// 1.@selection-change="handleSelectionChange" 事件内自行处理需要的值
// 2.:row-key="row=>row.id" table数据的唯一id值
// 3.:reserve-selection="true"  selection属性到)
// 4.this.$refs.table.$refs.YTSRTable.clearSelection() 重置清空操作
// 5.this.$refs.table.$refs.YTSRTable.toggleRowSelection(value) 选择其中的某一项(回显时用
<template>
  <div>
	<el-button  type="primary" @click="add">新增</el-button>
	<YTSR-table ref="table"  @selection-change="handleSelectionChange" :row-key="row=>row.id" v-loading="listLoading" :data="tableData" border  :hasNO='false'  :cell-style="rowStyle" :header-cell-style="{textAlign:'center'}">
		<el-table-column :reserve-selection="true" type="selection" width="55" align="center"></el-table-column>
		>>>
		<el-table-column label="操作" :width="140" fixed="right" align="center">
           <template slot-scope="{ row }">
            <el-button type="text" @click="edit(row)" size="small">编辑</el-button>
          </template>
        </el-table-column>
	</YTSR-table>
	<pagination :total="tableData.total" :page.sync="currentPage" :limit.sync="pageSize" @pagination="initial" />
	<createApply ref="createApply" @save="init"></createApply>
  </div>
</template>
<script>
import createApplyfrom './createApply'
export default {
  	components: { createApplyfrom},
	data() {
		return {
			// ========== 加载相关 ==========
			listLoading: false, // 表格加载
			// ========== 接口参数 ==========
			create_date: [], // 日期搜索
			tableFrom: {}, // 请求参数
			// ========== 表格相关 ==========
			tableData: { // 列表数据
				data: [], // 列表
				total: 0, // 页码
			},
			// ============ select列表 =============
			listData: {
				status: [
					{ label: "已开启", value: 1 },
					{ label: "未开启", value: 2 },
					{ label: "已失效", value: 3 },
				],
			},
		}
	},
	created(){
		// 页面初始化
		this.init()
	},
	methods: {
		// ========= 初始化 =========
		init(){
		  this.tableFrom = {
	        id: null, // id
	        name: '', // 姓名
	        create_date:'', // 开始时间
	        status: '', // 1已开启 2未开启 3已失效
	        page: 1, // 页数
	        limit: 20, // 每页条数
	      }
	      this.getList()
		},
		// ========= 获取table数据 =========
		getList(){
			this.listLoading = true;
			xxx_name(this.tableFrom).then(res => {
				console.log('根据api获取数据', res)
				this.tableData.data = res.data.list;
				this.tableData.total = res.data.total;
				this.listLoading = false;
			}).catch((err)=> {
				this.listLoading = false;
			})
		},
		// ========= 多选 =========
		handleSelectionChange(row){
			this.idList= row.map((item,index)=>{
				return item.id
			})
		},
		// ========= 分页 =========
	    handleSizeChange(val) {
		  this.tableFrom.page= val.page
		  this.tableFrom.limit= val.limit
		  this.getList()
      	},
		// ========== 新增 ==========
	    add () {
	      this.$refs.createApply.dialogVisible = true
	      this.$refs.createApply.init()
	    },
	    // ========== 编辑 ==========
	    edit (row) {
	      this.$refs.createApply.dialogVisible = true
	      this.$refs.createApply.init(row)
	    },
	},
}
<script>

子组件

<!--
  ==================== 说明 ====================.命名方式:
    dialog_add_order === dialog:弹窗,add:新增,order:订单
  二.参数
    1.title 弹窗名
    2.dialogVisible 是否打开
    3.formValidate 具体参数
    4.loadingbtn 按钮状态
	三.方法
    1.init() 初始化组件 调用
    2.getInfo() 根据id 获取详情
    3.save() 保存
 -->
<template>
  <div>
	<el-dialog
		:title="title"
		:visible.sync="dialogVisible"
		width="640px">
		<template>
		<el-form
		label-position="left"
		ref="ruleForm"
		:model="formValidate"
		class="demo-form-inline form_box"
		:rules="ruleValidate"
		label-width="100px">
			<el-form
	          label-position="left"
	          ref="ruleForm"
	          :model="formValidate"
	          class="demo-form-inline form_box"
	          :rules="ruleValidate"
	          label-width="100px">
				<el-form-item label="姓名:" prop="name">
					<el-input class="selWidth" clearable type="text" placeholder="请输入姓名" v-model="formValidate.name" maxlength="30" show-word-limit></el-input>
				</el-form-item>
			</el-form>
			<span slot="footer" class="dialog-footer">
				<el-button @click="dialogVisible = false">取 消</el-button>
				<el-button type="primary" :loading="loadingbtn" @click="save('ruleForm')">保存</el-button>
			</span>
	</el-dialog>
  </div>
</template>

<script>
  import {
    detailBuild, // 详情
    addBuild, // 新增
    updateBuild, // 编辑
  } from "@/api/card-v";
  export default {
    components: {
    },
    data() {
      return {
        title: '新增',
        dialogVisible: false,
        formLoading: false,
        loadingbtn: false, // 按钮
        formValidate: {},
        ruleValidate: {
          name: [
            { required: true, message: "请输入姓名", trigger: "blur"},
          ],
          time: [
            { required: true, message: "请选择时间", trigger: "change", type: "array"},
          ],
          image: [
            { required: true, message: "请选择图片", trigger: "change" },
          ],
          images: [
            { required: true, message: "请选择图片(多)", trigger: "change", type: "array"},
          ],
          nums: [
            { required: true, message: "请输入数量", trigger: "blur"},
          ],
          sort: [
            { required: true, message: "请输入排序", trigger: "blur"},
          ]
        },
      }
    },
    methods: {
      // ========== 初始化 ==========
	init(val) {
		this.formValidate = {
			name: '', // 姓名
			time: [], // 时间
			nums: '', // 数量
			sort: 0, // 排序
		}
		if (val) {
			this.getInfo(val)
		}
	},
	// ========== 获取详情 ==========
		getInfo (val) {
			this.formLoading = true
			getInfoApi(val.id).then(res => {
				console.log('api获取详情', res.data)
				this.formValidate = res.data
				this.formLoading = false
			}).catch(err=>{
				this.formLoading = false
			))
		},
		// ========== 保存 ==========
		save (form) {
			// 如果id存在则编辑,否则新增
			this.$refs[form].validate((valid) => {
				if (valid) {
					if ( this.formValidate.id ) {
						this.loadingbtn = true
						updateBuild(this.formValidate.id, this.formValidate).then(res => {
							this.$emit('saveInit')
							this.loadingbtn = false
						}).catch(err => {
							this.loadingbtn = false
						})
						} else {
							this.loadingbtn = true
							addBuild(this.formValidate).then(res => {
								this.$emit('save')
								this.loadingbtn = false
							}).catch(err => {
								this.loadingbtn = false
						})
					}
				}
			})
		},
    }
  }
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值