vue-admin-template + element-ui 改造table组件实现二次封装简化调用(三):组件调用操作表格数据--删除table表格数据

本文介绍了如何在使用自定义Name插件时,实现在点击删除按钮后,通过修改tabledata数据驱动表格实时更新。作者展示了利用Vue访问父组件实例的方法,实现了与Element UI表格的交互并确保了数据同步删除。

前面讲到到用自己封装的方法来实现table表格组件

 tableHead: [
        { field: 'date', label: 'date' },
        { field: 'name', label: 'name', component: Name },//传入 Name组件渲染
        { field: 'address', label: 'address' }
      ]

这里的name就是我们自定议的插件,那么如果这个插件是个按钮,比如下面这样,那么在组件里操作了删除,我们肯定想让table也同步删除,查了element-ui的文档,文档里没有提供接口,那么我们就来自己实现好了,我这里的思路是直接修改tabledata的数据,然后表格会自动渲染,并且也成功了,说明我的思路还是正确的,代码如下

<template>
  <el-button :row="row" type="warning" @click="delete">删除</el-button>
</template>
<script>
import { delete } from '@/api/my/delete'
export default {
  props: {
    row: {
      type: Object,
      default() {
        return {}
      }
    }
  },
  data() {
    return {
    }
  },
  methods: {
    open() {
      this.$prompt('请输入操作理由', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        inputErrorMessage: '请输入操作理由'
      }).then(({ value }) => {
        delete ({ id:id }).then(response => {
          this.$message({
            type: 'success',
            message: '操作成功'
          })
          //这里直接使用vue的访问父组件实例的方法的操作
          // 文档地址 https://cn.vuejs.org/v2/guide/components-edge-cases.html#%E8%AE%BF%E9%97%AE%E7%88%B6%E7%BA%A7%E7%BB%84%E4%BB%B6%E5%AE%9E%E4%BE%8B
          // 循环找到对应的数据进行删除
          for (let index = 0; index < this.$parent.$parent.$parent.tabledata.list.length; index++) {
          //因为这里在table中有两层,所以总共是有三个parent,直接修改的最原始的数据
            const element = this.$parent.$parent.$parent.tabledata.list[index]
           //这里是按id值来查找数据的
           //暂时没有能拿到行的下标
            if (element.id === this.row.id) {
              this.$parent.$parent.$parent.tabledata.list.splice(index, 1)
            }
          }
        }).catch(error => {
          this.$message({
            type: 'fail',
            message: error
          })
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '取消输入'
        })
      })
    }
  }
}
</script>

### 使用 vue-element-admin 开发医疗挂号系统的具体步骤 #### 1. 环境准备 在开发前,需确保本地已安装 Node.js 和 npm/yarn 工具链。这些工具用于构建 Vue.js 应用程序及其依赖项[^2]。 ```bash node -v && npm -v ``` 如果未安装,请先完成安装并验证版本。 --- #### 2. 初始化项目 克隆 `vue-element-admin` 的 GitHub 仓库至本地工作目录: ```bash git clone https://github.com/PanJiaChen/vue-element-admin.git my-medical-system cd my-medical-system npm install ``` 此操作会下载项目源码及所需依赖包。完成后可启动开发服务器测试初始状态: ```bash npm run dev ``` 访问浏览器中的默认地址(通常是 http://localhost:9527),确认基础框架运行正常[^2]。 --- #### 3. 配置路由与菜单 根据医疗挂号系统的需求,定义新的路由模块来支持功能扩展。例如,“公告管理”、“科室管理”等功能需要对应的路径映射。 编辑文件 `/src/router/index.js` 添加自定义路由配置: ```javascript // 新增路由示例 { path: '/announcement', component: () => import('@/views/announcement'), name: 'Announcement', meta: { title: '系统公告', icon: 'el-icon-document' } }, { path: '/department', component: () => import('@/views/department'), name: 'Department', meta: { title: '科室管理', icon: 'el-icon-setting' } } ``` 同步更新侧边栏导航组件 `/src/layout/Sidebar.vue` 中的动态渲染逻辑以显示新菜单项[^3]。 --- #### 4. 创建视图页面 针对每项功能创建独立的 `.vue` 文件作为其专属界面模板。以下是两个典型场景的例子: ##### (1)公告管理页面 (`@/views/announcement/index.vue`) 利用 Element UI 提供的数据表格组件展示现有公告列表,并提供按钮触发新增、编辑或删除动作。 ```html <template> <div class="app-container"> <el-table :data="announcements" style="width: 100%"> <el-table-column prop="title" label="标题"></el-table-column> <el-table-column prop="content" label="内容"></el-table-column> <el-table-column fixed="right" label="操作" width="180"> <template slot-scope="scope"> <el-button @click="edit(scope.row)" type="text">编辑</el-button> <el-button @click="remove(scope.row.id)" type="text">删除</el-button> </template> </el-table-column> </el-table> <!-- 对话框 --> <el-dialog :visible.sync="dialogVisible" title="发布公告"> <el-form ref="form" :model="formData" label-width="80px"> <el-form-item label="标题"><el-input v-model="formData.title"/></el-form-item> <el-form-item label="内容"><el-input v-model="formData.content" type="textarea"/></el-form-item> </el-form> <span slot="footer" class="dialog-footer"> <el-button @click="dialogVisible = false">取消</el-button> <el-button type="primary" @click="submit()">保存</el-button> </span> </el-dialog> </div> </template> <script> export default { data() { return { announcements: [], dialogVisible: false, formData: {} }; }, methods: { edit(row) {}, remove(id) {}, submit() {} } }; </script> ``` ##### (2)科室管理页面 (`@/views/department/index.vue`) 同样采用数据表格形式呈现所有可用科室的信息,并允许管理员执行 CRUD 操作--- #### 5. 后端 API 调用集成 为了使前端具备实际交互能力,需对接后端 RESTful 接口获取真实数据。借助 Axios 或其他 HTTP 客户端库发起请求。 全局注册 Axios 实例于 `/src/utils/request.js` 并封装常用方法: ```javascript import axios from 'axios'; const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // 替换为您的API网关URL timeout: 5000 }); service.interceptors.request.use(config => config); service.interceptors.response.use( response => response.data, error => Promise.reject(error) ); export function fetchList(url, params={}) { return service.get(url, {params}); } export function createItem(url, payload) { return service.post(url, payload); } export function updateItem(url, id, payload) { return service.put(`${url}/${id}`, payload); } export function deleteItem(url, id) { return service.delete(`${url}/${id}`); } ``` 随后,在各视图组件内部调用上述函数加载远程资源[^4]。 --- #### 6. 测试与部署 完成全部编码之后进行全面的功能性测试,修复潜在缺陷后再打包上线正式环境。 生产模式下编译命令如下所示: ```bash npm run build ``` 最终产物会被放置到 `/dist` 目录中,可通过 Nginx/Apache 等 Web Server 托管静态资产[^2]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值