【从0到1打造vue element-ui管理后台 】 第二十二课 编写选择出版社子组件

201 阅读1分钟

第二十二课 编写选择出版社子组件

一、创建src/views/press/press.vue子组件

<template>
  <div class="press">
      21312
  </div>
</template>

<script>
export default {

}
</script>

<style>

</style>

二、src/views/book/bookinfo.vue中加入子组件

 <el-dialog title="选择出版社" :visible.sync="dialogPressVisible" width="800px">
   <Press></Press>
</el-dialog>


import Press from "@/views/press/press.vue"

components:{
    Press
  },
  
  
  dialogPressVisible:true,

image.png

三、在bookinfo中加入触发子组件的地方

加入一下两个地方:

1)@click.native在el-form-item中加入,控制弹窗显示

2)readonly,让文本框只读

<el-form-item label="出版社" size="mini" prop="press" @click.native="dialogPressVisible=true">
  <el-input readonly v-model="searchWhewe.press" placeholder="请输入出版社"></el-input>
</el-form-item>

image.png

如果你想在某个组件的根元素上绑定事件,直接使用 @click=''function' 是不生效的,我们可以添加.native修饰符

四、编写press.vue文件

<template>
  <div class="press">
    <el-form
      :inline="true"
      :model="searchWhewe"
      class="demo-form-inline"
      style="margin-top: 20px"
      ref="ruleForm"
    >
      <el-form-item label="出版社名称" size="mini" prop="press">
        <el-input
          v-model="searchWhewe.press"
          placeholder="请输入出版社"
        ></el-input>
      </el-form-item>
      <el-form-item size="mini">
        <el-button type="primary" @click="fetchData">查询</el-button>
      </el-form-item>
    </el-form>

    <el-table :data="bookinfolist" highlight-current-row @current-change="currentChange">
      <el-table-column fixed label="序号" type="index"></el-table-column>
      <el-table-column label="出版社" prop="press"></el-table-column>
    </el-table>
    <el-pagination
      @size-change="handleSizeChage"
      @current-change="handleCurrentChange"
      :current-page="currentPage"
      :page-sizes="[100, 200, 300, 400]"
      :page-size="pageSize"
      layout="total,sizes,prev,pager,next,jumper"
      :total="total"
    >
    </el-pagination>
  </div>
</template>

<script>
import bookinfoApi from "@/api/bookinfo";
export default {
  data() {
    return {
      bookinfolist: [],
      searchWhewe: {
        press: "",
      },
      total: 1, //总记录数
      currentPage: 1, //当前页
      pageSize: 10, //每页显示条数,为10条
    };
  },
  created() {
    this.fetchData();
  },
  methods: {
    fetchData() {
      let data = {
        pageSize: this.pageSize,
        currentPage: this.currentPage,
        searchWhewe: this.searchWhewe,
      };
      bookinfoApi.getBookInfoList(data).then((response) => {
        const resp = response.data.data;
        this.bookinfolist = resp;
      });
    },
    handleSizeChage(size) {
      this.pageSize = size;
      this.fetchData();
    },
    handleCurrentChange(currentPage) {
      this.currentPage = currentPage;
      this.fetchData();
    },
    currentChange(currentRow,oldCurrentRow){
        this.$emit('sendData',currentRow)
    }  
  },
};
</script>

image.png

五、编写选中后还需要在父组件的bookinfo中显示

<el-dialog title="选择出版社" :visible.sync="dialogPressVisible" width="800px">
        <Press @sendData="getData"></Press>
</el-dialog>

 getData(currentRow){
      console.log(currentRow)
      this.searchWhewe.press = currentRow.press;
      this.dialogPressVisible = false
    }

image.png