elementUI-新增,编辑,详情组件

2023-11-11

父↓

<template>
  <div>
    <!-- 数据操作部分 -->
    <div class="search" style="float:left">
      <el-form :inline="true" :model="dataForm" class="demo-form-inline">
        <el-form-item label="计划名">
          <el-input placeholder="请输入XXXX..." clearable style="width: 300px; margin-right: 10px"
            v-model="dataForm.planName"></el-input>
        </el-form-item>
        <el-form-item>
          <el-button icon="el-icon-search" type="primary" @click="initDatalist">查询</el-button>
        </el-form-item>
        <el-form-item>
          <el-button icon="el-icon-search" type="primary" @click="searchRest()">重置
          </el-button>
        </el-form-item>
      </el-form>
      <el-row>

        <el-button style="float:left;margin-bottom:10px" type="primary" icon="el-icon-plus"
          @click="addInfo(row= {},status=1)">新增</el-button>

      </el-row>
    </div>
    <!-- 数据列表部分 -->
    <div>
      <el-table @selection-change="handleSelectionChange" id="tableData" :data="dataList" border v-loading="loading"
        style="width: 100%">
        <el-table-column type="selection" width="55">
        </el-table-column>
        <el-table-column prop="planName" label="计划名"></el-table-column>
        <el-table-column prop="valid" label="是否有效">
          <template slot-scope="scope">
            <span v-if="scope.row.valid==1">有效</span>
            <span v-else>无效</span>
          </template>
        </el-table-column>
        <el-table-column label="操作" width="180" fixed="right">
          <template slot-scope="scope">
            <el-button type="text" size="small" @click="addInfo(scope.row,status = 2)">编辑</el-button>
            <el-divider direction="vertical"></el-divider>
            <el-dropdown>
              <el-button type="text" size="small">更多...</el-button>
              <el-dropdown-menu slot="dropdown">
                <el-dropdown-item @click.native="addInfo(scope.row,status = 3)">详情</el-dropdown-item>
                <!-- <el-dropdown-item @click.native="deleteRow(scope.row)">删除</el-dropdown-item> -->
              </el-dropdown-menu>
            </el-dropdown>
          </template>
        </el-table-column>
      </el-table>
    </div>

    <!-- 分页 -->
    <div class="block">
      <el-pagination style="margin-top: 20px" @size-change="sizeChangeHandle" @current-change="currentChangeHandle"
        :current-page="pageIndex" :page-sizes="[10, 20, 50, 100]" :page-size="pageSize" :total="totalPage"
        :hide-on-single-page="true
        layout=" total, sizes, prev, pager, next, jumper">
      </el-pagination>
    </div>
    <item-add v-if="addEditDetailVisible" ref="addEditDetailDoms" @refreshDataList="initDatalist"></item-add>
  </div>

</template>

<script>
import ItemAdd from "../ptrlListManager/item-add.vue";
export default {
  name: "dataListManager",
  components: {
    ItemAdd,
  },
  data() {
    return {
      addEditDetailVisible: false,
      loading: false,
      dataList: [],
      pageIndex: 1,
      pageSize: 10,
      totalPage: 0,
      dataForm: {},
      // Rules:规则在此编写
      dataFormRules: {},
      multipleSelection: []
    };
  },
  methods: {
    searchRest() {
      this.dataForm = {}
      this.initDatalist()
    },
    // 每页数
    sizeChangeHandle(val) {
      this.pageSize = val;
      this.pageIndex = 1;
      this.initDatalist();
    },
    // 当前页
    currentChangeHandle(val) {
      this.pageIndex = val;
      this.initDatalist();
    },
    addInfo(row, status) {
      this.addEditDetailVisible = true;
      this.$nextTick(() => {
        this.$refs.addEditDetailDoms.init(row, status);
      });
    },
    // 分页方法
    currentPageChange(currPage) {
      this.currPage = currPage;
      this.initDatalist();
    },
    // 数据初始化
    initDatalist() {
      this.loading = true;
      let url = "xxxxxx";
      let params = {
        page: this.pageIndex,
        pageSize: this.pageSize,
        planName: this.dataForm.planName,
        planType: this.dataForm.planType,
        valid: this.dataForm.valid,
      };
      this.getRequest(url, params).then((resp) => {
        if (resp && resp.code == 200) {
          this.dataList = resp.result;
          this.totalPage = resp.result.total;
          this.pageSize = resp.result.size;
          this.pageIndex = resp.result.pages;
          this.loading = false;
          this.$message.success("获取成功");
        } else {
          let error = response.errMessage || "查询失败";
          this.$message.error(error);
        }
      });
    },
    handleSelectionChange(val) {
      this.multipleSelection = val;
    }
  },
  mounted() {
    this.initDatalist();
  },
};
</script>

<style>

</style>

复杂子(带表格)↓

<template>
  <div>
    <el-dialog :title="statusTitle" :visible.sync="dialogFormVisible" :close-on-click-modal="false" width="900px">
      <el-form :model="dataForm" label-width="100px" :inline="false" ref="dataForm" :rules="rules">
        <el-row>
          <el-col :span="12">
            <el-form-item label="计划名" prop="planName">
              <el-input style="width: 200px" v-model="dataForm.planName" autocomplete="off" :disabled="statusFlg == 3">
              </el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="巡检时间" prop="planTime">
              <el-date-picker style="width: 200px" v-model="dataForm.planTime" type="datetime" placeholder="选择日期时间"
                value-format="yyyy-MM-dd HH:mm:ss " :disabled="statusFlg == 3">
              </el-date-picker>

            </el-form-item>
          </el-col>

      </el-form>
      <el-table ref="multipleTable" :data="dataList" tooltip-effect="dark" style="width: 100%" height="250"
        @selection-change="handleSelectionChange">
        <el-table-column type="selection" width="55" :selectable="checkSelectable"> </el-table-column>

        <el-table-column label="巡检区域" prop="areaName"> </el-table-column>

        <el-table-column header-align="center" align="center" label="操作" fixed="right" v-if="statusFlg != 3">
          <template slot-scope="scope">
            <el-button type="text" size="small" v-if="scope.row.associated === '1'" @click="deleteRow(scope.row)"
              style="color: #e32222">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <el-pagination style="margin-top: 20px" @size-change="sizeChangeHandle" @current-change="currentChangeHandle"
        :current-page="pageIndex" :page-sizes="[10, 20, 50, 100]" :page-size="pageSize" :total="totalPage"
        layout="total, sizes, prev, pager, next, jumper">
      </el-pagination>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">关 闭</el-button>
        <el-button @click="submit()" type="success" v-if="statusFlg != 3">保 存</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {
      pageIndex: 1,
      pageSize: 10,
      totalPage: 0,
      dataForm: {},
      addFlg: true,
      statusTitle: "",
      statusFlg: 1,
      dialogFormVisible: false,
      rules: {
        areaName: [
          { required: true, message: "请输入巡检区域", trigger: "blur" },
        ]
      },
      dataList: [],
      multipleSelection: [],
      planId: "",
      areaIds: []
    };
  },
  methods: {
    handleSelectionChange(selection) {
      this.multipleSelection = selection;
    },
    checkSelectable(row, rowIndex) {
      if (row.associated == 1) {
        return false //不禁用
      } else {
        return true// 禁用
      }
    },
    deleteRow(row) {
      let url = "xxxx";
      this.deleteRequest(url, { id: row.relationId }).then((resp) => {
        if (resp && resp.code == 200) {
          this.initDatalist();
          this.$message.success("删除成功");
        } else {
          let error = response.errMessage || "删除失败";
          this.$message.error(error);
        }
      });
    },
    // 每页数
    sizeChangeHandle(val) {
      this.pageSize = val;
      this.pageIndex = 1;
      this.initDatalist();
    },
    // 当前页
    currentChangeHandle(val) {
      this.pageIndex = val;
      this.initDatalist();
    },
    initDatalist() {
      this.dataList = []
      this.loading = true;

      let url = "xxxx";
      let params = {
        page: this.pageIndex,
        pageSize: this.pageSize,
        planId: this.planId
      };
      this.getRequest(url, params).then((resp) => {
        if (resp && resp.code == 200) {
          this.dataList = resp.result.records;
          this.totalPage = resp.result.total;
          this.pageSize = resp.result.size;
          this.pageIndex = resp.result.pages;
          this.loading = false;
        }else{
          let error = response.errMessage || "查询失败";
          this.$message.error(error);
        }
      });
    },
    addRelation() {
      let url = "子表增加";
      let params = {
        planId: this.planId,
        areaIds: this.areaIds,
      };
      this.postRequest(url, params).then((resp) => {
        if (resp && resp.code == 200) {
          this.initDatalist();
          this.$message.success("增加成功");
        }else{
          let error = response.errMessage || "增加失败";
          this.$message.error(error);
        }
      });
    },
    init(row, status) {
      console.log(row)
      if (row) {
        this.planId = row.id;
      } else {
        this.planId = null;
      }
      this.pageIndex = 1
      this.pageSize = 10
      this.totalPage = 0
      this.initDatalist();
      this.dialogFormVisible = true;
      switch (status) {
        case 1:
          this.dataForm = {};
          this.addFlg = true;
          this.statusFlg = 1;
          break;
        case 2:
          this.dataForm = row;
          this.addFlg = false;
          this.statusFlg = 2;
          break;
        case 3:
          this.dataForm = row;
          this.addFlg = false;
          this.statusFlg = 3;
          break;
      }
    },
    submit() {
      this.$refs["dataForm"].validate((valid) => {
        if (valid) {
          if (this.addFlg) {
            let url = "新增";
            this.dataForm.areaIds = this.areaIds
            this.postRequest(url, this.dataForm).then((resp) => {
              if (resp && resp.code == 200) {
                this.dialogFormVisible = false;
                this.$emit("refreshDataList");
                this.$message.success("保存成功");
              } else {
                let error = response.errMessage || "保存失败";
                this.$message.error(error);
              }
            });
          } else {
            let url = "编辑";
            this.postRequest(url, this.dataForm).then((resp) => {
              if (resp && resp.code == 200) {
                this.dialogFormVisible = false;
                this.addRelation();
                this.$emit("refreshDataList");
                this.$message.success("保存成功");
              } else {
                let error = response.errMessage || "保存失败";
                this.$message.error(error);
              }
            });
          }
        }
      });
    },
  },
  watch: {
    statusFlg: {
      immediate: true,
      handler(val) {
        switch (val) {
          case 1:
            this.statusTitle = "新增";
            break;
          case 2:
            this.statusTitle = "编辑";
            break;
          case 3:
            this.statusTitle = "详情";
            break;
        }
      },
    },
    multipleSelection: {
      handler(val) {
        let self = this
        this.areaIds = []
        this.multipleSelection.forEach(function (item, index) {
          self.areaIds.push(item.areaId)
        })
      },
    }
  },
};
</script>

简单子↓

<template>
  <div>
    <el-dialog :title="statusTitle" :visible.sync="dialogFormVisible" :close-on-click-modal="false" width="900px">
      <el-form :model="dataForm" label-width="100px" :inline="false" ref="dataForm" :rules="rules">
        <el-row>
          <el-col :span="12">
            <el-form-item label="计划名" prop="planName">
              <el-input style="width: 200px" v-model="dataForm.planName" autocomplete="off" :disabled="statusFlg == 3">
              </el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="巡检时间" prop="planTime">
              <el-date-picker style="width: 200px" v-model="dataForm.planTime" type="datetime" placeholder="选择日期时间"
                value-format="yyyy-MM-dd HH:mm:ss " :disabled="statusFlg == 3">
              </el-date-picker>

            </el-form-item>
          </el-col>

      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">关 闭</el-button>
        <el-button @click="submit()" type="success" v-if="statusFlg != 3">保 存</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {
      pageIndex: 1,
      pageSize: 10,
      totalPage: 0,
      dataForm: {},
      addFlg: true,
      statusTitle: "",
      statusFlg: 1,
      dialogFormVisible: false,
      rules: {
        areaName: [
          { required: true, message: "请输入巡检区域", trigger: "blur" },
        ]
      },
      dataList: [],
      multipleSelection: [],
      planId: ""
    };
  },
  methods: {
    handleSelectionChange(selection) {
      this.multipleSelection = selection;
    },
    checkSelectable(row, rowIndex) {
      if (row.associated == 1) {
        return false //不禁用
      } else {
        return true// 禁用
      }
    },
    // 每页数
    sizeChangeHandle(val) {
      this.pageSize = val;
      this.pageIndex = 1;
      this.initDatalist();
    },
    // 当前页
    currentChangeHandle(val) {
      this.pageIndex = val;
      this.initDatalist();
    },
    initDatalist() {
      this.dataList = []
      this.loading = true;
      let url = "xxxx";
      let params = {
        page: this.pageIndex,
        pageSize: this.pageSize,
        planId: this.planId
      };
      this.getRequest(url, params).then((resp) => {
        if (resp && resp.code == 200) {
          this.dataList = resp.result.records;
          this.totalPage = resp.result.total;
          this.pageSize = resp.result.size;
          this.pageIndex = resp.result.pages;
          this.loading = false;
        }else{
          let error = response.errMessage || "查询失败";
          this.$message.error(error);
        }
      });
    },
    init(row, status) {
      if (row) {
        this.planId = row.id;
      } else {
        this.planId = null;
      }
      this.pageIndex = 1
      this.pageSize = 10
      this.totalPage = 0
      this.initDatalist();
      this.dialogFormVisible = true;
      switch (status) {
        case 1:
          this.dataForm = {};
          this.addFlg = true;
          this.statusFlg = 1;
          break;
        case 2:
          this.dataForm = row;
          this.addFlg = false;
          this.statusFlg = 2;
          break;
        case 3:
          this.dataForm = row;
          this.addFlg = false;
          this.statusFlg = 3;
          break;
      }
    },
    submit() {
      this.$refs["dataForm"].validate((valid) => {
        if (valid) {
          if (this.addFlg) {
            let url = "新增";
            this.postRequest(url, this.dataForm).then((resp) => {
              if (resp && resp.code == 200) {
                this.dialogFormVisible = false;
                this.$emit("refreshDataList");
                this.$message.success("保存成功");
              } else {
                let error = response.errMessage || "保存失败";
                this.$message.error(error);
              }
            });
          } else {
            let url = "编辑";
            this.postRequest(url, this.dataForm).then((resp) => {
              if (resp && resp.code == 200) {
                this.dialogFormVisible = false;
                this.$emit("refreshDataList");
                this.$message.success("保存成功");
              } else {
                let error = response.errMessage || "保存失败";
                this.$message.error(error);
              }
            });
          }
        }
      });
    },
  },
  watch: {
    statusFlg: {
      immediate: true,
      handler(val) {
        switch (val) {
          case 1:
            this.statusTitle = "新增";
            break;
          case 2:
            this.statusTitle = "编辑";
            break;
          case 3:
            this.statusTitle = "详情";
            break;
        }
      },
    },

  },
};
</script>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

elementUI-新增,编辑,详情组件 的相关文章

  • 解析:Promise.when 有很多 Promise?

    解析文档 https www parse com docs js symbols Parse Promise html when https www parse com docs js symbols Parse Promise html
  • Bootstrap 按钮的检查状态

    我想在 Bootstrap 3 0 2 中设置组复选框的选中状态 docs http getbootstrap com javascript buttons html div class btn group div
  • Web Worker 中的 RequireJS

    我正在尝试在网络工作者中使用 RequireJS 问题是我在使用它时不断收到以下错误 Uncaught Error importScripts failed for underscore at lib underscore js 我已经测试
  • Mat select - 获取selectionChange的旧值

    我有一个项目 其中有一个包含以下内容的表单mat select选择器 每当用户更改输入时 我都会向用户显示一个对话框来确认此操作 现在 The selectionChange 通知值何时更改并将新值传递为 event 当用户取消对话框时 有
  • 如何在 mongodb-native findAndModify 中使用变量作为字段名称?

    在使用 mongodb native 驱动程序的这段代码中 我想增加在单独变量中指定的字段的值 问题在于 在这种情况下 inc 子句中的字段名称将是 变量 而不是变量的内容 在查询部分中 所选变量按预期工作并找到正确的 ID var sel
  • div 准备好后如何调用函数?

    我的 javascript 文件中有以下内容 var divId divIDer jQuery divId ready function createGrid Adds a grid to the html html 看起来像这样 div
  • 如何提高 highcharts 图表创建和渲染的性能

    我本地有一个文件JSON格式化数据 我创造了一点点PHP脚本在调用时回显该文件的输出AJAX 数据文件的大小是59k 我按照 highcharts 建议禁用动画和阴影 当我加载图表时 渲染需要非常非常长的时间 我已经粘贴了下面的脚本 我有什
  • 如何从 github 安装需要构建步骤的 npm 包,例如什么时候分叉一个库?

    假设您使用类似的库vue3 datepicker https www npmjs com package vue3 datepicker 您意识到您需要自定义某些内容 并且作为第一步 您想要使用它的自定义分支 问题是 当包被推送到 npm
  • ES6 在defineAsyncComponent 中命名导入

    我想异步加载我的网络应用程序的一些元素 这是旧的导入 import Popover PopoverButton PopoverPanel from headlessui vue export default components Popov
  • JavaScript 语法是什么:{Ci, CC}? [复制]

    这个问题在这里已经有答案了 我正在做一些 FF 附加开发 我看到这样的语法 var Cc Ci require chrome 只是好奇这个语法是什么 以及它是否对 FF 开发或其他东西有特殊意义 这称为解构赋值 它的一个特点是JavaScr
  • 如何在模态窗口中显示pdf? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个模式窗口 其中包含锚文本 当我单击此链接时 它必须调用其他位置的 pdf 并将其显示在弹出窗口中 我怎样才能做到这一点 请帮忙
  • 对 UPDATE 行的 POST 请求

    我是 javascript 的新手 所以我正在寻找一些帮助来创建一种拖放地理编码标记的方法 以允许交互式更改地址 我相信通过更新 LOCATION 列行可以实现这一点 第一步是 发送 POST 请求 对吧 好吧 所以我想问是否有人可以给我看
  • Vue: vue-i18n: 无法翻译 keypath 的值,使用 keypath 的值作为默认值

    我正在使用 Vue 我想展示三种语言 英语 他加禄语和宿务语 现在我有错误 无法转换键路径 NavbarMobile home 的值 使用 keypath 的值作为默认值 我通过 console log this i18n locale 检
  • jQuery/JavaScript“this”指针混淆

    当函数时 this 的行为bar被称为让我困惑 请参阅下面的代码 当从单击处理程序调用 bar 时 有什么方法可以将 this 安排为普通的旧 js 对象实例 而不是 html 元素 a class with a method functi
  • Chrome 本机消息传递 - 为什么我会收到“找不到指定的本机消息传递主机”错误?

    根据 Chrome Native Messaging 文档 成功调用 connectNative 会返回一个端口 您可以使用该端口将消息发布到本机应用程序 Mac 应用程序 在我的例子中 nativeConnect 确实返回了一个有效的端口
  • 禁用 HTML 验证。如何为全局每个表单设置“novalidate”?

    我想知道是否可以做一些事情来禁用应用程序中每个表单的 HTML 验证 有什么办法可以做到这一点或者我应该添加novalidate每个表单标签的属性 看来唯一的方法是添加novalidate使用 JavaScript jQuery 为每个表单
  • 谷歌colab录音,如何实现更精确的方式告诉用户开始对着麦克风说话

    我正在尝试创建一个为机器学习项目录制音频的程序 我想使用 google colab 这样人们就不必在他们的系统上安装或运行任何东西 我在网上找到了这个录制和播放音频的示例 单元格 1 包含用于录制音频的 js 代码和用于将其转换为字节对象的
  • 如何阻止用户重复单击 jQuery AJAX 调用?

    我有一个包含以下脚本的网页 JavaScript function LinkClicked var stage this id var stop ContentPlaceHolderMenu txtDate val var nDays Co
  • 带数字键的 Immutable.js 映射(包括性能测试)

    我在 React Native 应用程序中将 Immutable js 与 Redux 结合使用 元数据 例如查找表 是从服务器获取的 并作为 Immutable Map 保存在应用程序本地 查找值的键是整数 数据库中的主键 当我获取数据时
  • Tizen SDK:找不到变量:tizen

    我正在尝试使用 Tizen SDK 创建一个 Web 应用程序 当我启动应用程序时 一切都很好 但是当我在模拟器上按 后退 按钮时 没有任何反应 并且我看到一条消息 55435 js main js 9 ReferenceError 找不到

随机推荐