Vue以弹窗形式实现导入功能

目录

前言

由于个人工作原因,偏全栈,对于前端的总结还有些初出茅庐,后续会进行规整化的总结

对应的前端框架由:【vue】avue-crud表单属性配置(表格以及列)

最终实现的表单样式如下:

点击导入按钮

在这里插入图片描述

出现的画面如下:

在这里插入图片描述

正文

直奔主题,其vue的按钮样式:

<template>
  <basic-container>
    <el-form :inline="true" ref="formInline" :model="formInline" label-width="80px">

    <avue-crud :option="option"
               :table-loading="loading"
               :data="data"
               :page="page"
               :permission="permissionList"
               :before-open="beforeOpen"
               v-model="form"
               ref="crud"
               @row-update="rowUpdate"
               @row-save="rowSave"
               @row-del="rowDel"
               @search-change="searchChange"
               @search-reset="searchReset"
               @selection-change="selectionChange"
               @current-change="currentChange"
               @size-change="sizeChange"
               @refresh-change="refreshChange"
               @on-load="onLoad"
               @current-row-change="handleCurrentRowChange"
               @row-click="handleRowClick"
    >
      <template slot="menuLeft">


        <el-button type="success"
                    size="small"
                    plain
                    icon="el-icon-upload2"
                    @click="handleImport">一键导入
        </el-button>

      </template>

    </avue-crud>

    <el-dialog title="导入"
                   append-to-body
                   :visible.sync="excelBox"
                   width="555px">
          <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
            <template slot="excelTemplate">
              <el-button type="primary" @click="handleTemplate">
                点击下载<i class="el-icon-download el-icon--right"></i>
              </el-button>
            </template>
          </avue-form>
        </el-dialog>

  </basic-container>
</template>

对应的样式如下:

export default {
    data() {
      return {
        form: {},
        query: {},
        loading: true,
        page: {
          pageSize: 10,
          currentPage: 1,
          total: 0
        },


		 // 导入的按钮
        excelForm: {},
        excelBox:false,
        excelOption: {
          submitBtn: false,
          emptyBtn: false,
          column: [
            {
              label: '模板上传',
              prop: 'excelFile',
              type: 'upload',
              drag: true,
              loadText: '模板上传中,请稍等',
              span: 24,
              propsHttp: {
                res: 'data'
              },
              tip: '请上传 .xls,.xlsx 标准格式文件',
              action: '/此处为api的接口下载'
            },
            {
              label: '模板下载',
              prop: 'excelTemplate',
              formslot: true,
              span: 24,
            }
          ]
        },

其主要方法如下:

 methods: {

		// 执行模板下载
      handleTemplate() {
        window.open(`http://10.197.0.67:10086/monthplan.xlsx`);
      },
      // 上传之后处理的事情
      uploadAfter(res, done, loading, column) {
        window.console.log(res);
        this.excelBox = false;
        this.onLoadChild(this.pageChild);
        done();
      },
      // 点击导入
      handleImport() {
        this.excelBox = true;
      },

更多的导入功能由后端实现,可结合我这篇文章:详细讲解Java使用EasyExcel函数来操作Excel表(附实战)

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以使用第三方的弹窗组件库,例如 Element UI 或者 Vuetify。这些组件库都提供了弹窗组件,并且可以轻松地在 Vue 中使用。 对于分页的实现,你可以使用 Vue 的计算属性来计算当前页要显示的数据。根据你的具体需求,你可以在弹窗中嵌入一个分页组件,或者手动编写分页逻辑。 以下是一个示例代码,使用 Element UI 的弹窗组件和分页组件: ```html <template> <div> <el-button @click="showDialog">打开弹窗</el-button> <el-dialog :visible.sync="dialogVisible"> <el-table :data="pagedData" border> <el-table-column prop="id" label="ID"></el-table-column> <el-table-column prop="name" label="名称"></el-table-column> </el-table> <el-pagination :current-page.sync="currentPage" :page-size="pageSize" :total="total" @current-change="handleCurrentChange" ></el-pagination> </el-dialog> </div> </template> <script> import { reactive, computed } from 'vue'; import { Dialog, Table, TableColumn, Pagination, Button } from 'element-ui'; import axios from 'axios'; export default { components: { ElDialog: Dialog, ElTable: Table, ElTableColumn: TableColumn, ElPagination: Pagination, ElButton: Button, }, setup() { const state = reactive({ dialogVisible: false, data: [], // 所有数据 currentPage: 1, // 当前页码 pageSize: 10, // 每页数量 }); // 获取数据 const fetchData = async () => { const res = await axios.get('/api/data'); state.data = res.data; }; // 计算当前页要显示的数据 const pagedData = computed(() => { const start = (state.currentPage - 1) * state.pageSize; const end = start + state.pageSize; return state.data.slice(start, end); }); // 数据总数 const total = computed(() => state.data.length); // 处理当前页码变化 const handleCurrentChange = (page) => { state.currentPage = page; }; // 打开弹窗 const showDialog = () => { fetchData(); state.dialogVisible = true; }; return { dialogVisible: state.dialogVisible, pagedData, currentPage: state.currentPage, pageSize: state.pageSize, total, handleCurrentChange, showDialog, }; }, }; </script> ``` 在这个示例中,我们使用了 Element UI 的弹窗组件和分页组件,以及 Axios 库来获取数据。在 `setup` 函数中,我们使用了 Vue 3 的新特性 `reactive` 来创建响应式对象,以及 `computed` 来计算当前页要显示的数据和数据总数。在模板中,我们嵌入了一个表格和一个分页组件,在弹窗中显示数据。当用户点击分页组件的页码时,我们会更新当前页码,同时计算出新的要显示的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农研究僧

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值