vue前端分页--增删改查

<template>
  <div>
    <div class="btn">
      <Button type="primary" @click="addHandClick()">新增</Button>
      &nbsp; &nbsp;
      <Button type="error" @click="deleClick()">批量删除</Button>
      &nbsp; &nbsp;
      <Upload
        action=""
        :before-upload="upload_dp_itly"
        slot="extra"
        :loading="true"
      >
        <Button type="primary" icon="ios-cloud-upload-outline" class="aaa"
          >加载</Button
        >
        &nbsp;
      </Upload>
    </div>

    <Table
      border
      :columns="columns2"
      :data="tableData"
      @on-selection-change="changeSelect"
    ></Table>
    <Page
      :total="total"
      show-elevator
      show-total
      show-sizer
      :page-size-opts="pageSizeOpts"
      :page-size="pageSize"
      :current="current"
      @on-change="handPageChange"
    ></Page>

    <Modal v-model="modal1" :title="title">
      <Form
        ref="formValidate"
        :model="formValidate"
        :rules="ruleValidate"
        :label-width="80"
      >
        <Form-item label="姓名" prop="name">
          <Input
            v-model="formValidate.name"
            :disabled="flag"
            placeholder="请输入姓名"
          ></Input>
        </Form-item>
        <Form-item label="年龄" prop="age">
          <Input
            v-model="formValidate.age"
            number
            placeholder="请输入年龄"
            :disabled="flag"
          ></Input>
        </Form-item>
        <Form-item label="地址" prop="address">
          <Input
            v-model="formValidate.address"
            placeholder="请输入地址"
            :disabled="flag"
          ></Input>
        </Form-item>
        <Form-item label="省份" prop="province">
          <Input
            v-model="formValidate.province"
            placeholder="请输入省份"
            :disabled="flag"
          ></Input>
        </Form-item>
        <Form-item label="市区" prop="city">
          <Input
            v-model="formValidate.city"
            :disabled="flag"
            placeholder="请输入市区"
          ></Input>
        </Form-item>
        <Form-item label="邮编" prop="zip">
          <Input
            v-model="formValidate.zip"
            number
            :disabled="flag"
            placeholder="请输入邮编"
          ></Input>
        </Form-item>
      </Form>
      <div slot="footer">
        <Button type="primary" @click="handleSubmit('formValidate')"
          >确定</Button
        >
        <Button @click="handleReset('formValidate')">取消</Button>
      </div>
    </Modal>
  </div>
</template>
<script>
export default {
  data() {
    return {
      ID: [],
      pageSizeOpts: [10, 20, 30, 40],
      total: 0,
      current: 1,
      pageSize: 5,
      nums: 1,
      flag: false,
      title: "新增",
      modal1: false,
      columns2: [
        {
          type: "selection",
          width: 60,
          fixed: "left",
        },
        {
          title: "姓名",
          key: "name",
          width: 100,
        },
        {
          title: "年龄",
          key: "age",
          width: 100,
        },
        {
          title: "省份",
          key: "province",
          width: 100,
        },
        {
          title: "市区",
          key: "city",
          width: 100,
        },
        {
          title: "地址",
          key: "address",
          width: 200,
        },
        {
          title: "邮编",
          key: "zip",
          width: 100,
        },
        {
          title: "操作",
          key: "action",
          width: 250,
          fixed: "right",
          render: (h, params) => {
            return h("div", [
              h(
                "Button",
                {
                  props: {
                    type: "primary",
                    size: "small",
                  },
                  style: {
                    marginRight: "10px",
                  },
                  on: {
                    click: () => {
                      this.nums = 2;
                      this.addHandClick(params.row);
                    },
                  },
                },
                "查看"
              ),
              h("Tooltip", {
                props: {
                  placement: "top",
                  transfer: true,
                  content: "ReStart this task……",
                },
              }),
              h(
                "Button",
                {
                  props: {
                    type: "error",
                    size: "small",
                  },
                  style: {
                    marginRight: "5px",
                  },
                  on: {
                    click: () => {
                      this.handDele(params.row, params.index);
                    },
                  },
                },
                "删除"
              ),
              h(
                "Button",
                {
                  props: {
                    type: "success",
                    size: "small",
                  },
                  style: {},
                  on: {
                    click: () => {
                      this.nums = 1;
                      this.addHandClick(params.row);
                    },
                  },
                },
                "编辑"
              ),
            ]);
          },
        },
      ],
      data4: [
        {
          id: 1,
          name: "王小明",
          age: 18,
          address: "北京市朝阳区芍药居",
          province: "北京市",
          city: "朝阳区",
          zip: 100000,
        },
        {
          id: 2,
          name: "张小刚",
          age: 25,
          address: "北京市海淀区西二旗",
          province: "北京市",
          city: "海淀区",
          zip: 100000,
        },
        {
          id: 3,
          name: "李小红",
          age: 30,
          address: "上海市浦东新区世纪大道",
          province: "上海市",
          city: "浦东新区",
          zip: 100000,
        },
        {
          id: 4,
          name: "周小伟",
          age: 26,
          address: "深圳市南山区深南大道",
          province: "广东",
          city: "南山区",
          zip: 100000,
        },
        {
          id: 5,
          name: "王小明",
          age: 18,
          address: "北京市朝阳区芍药居",
          province: "北京市",
          city: "朝阳区",
          zip: 100000,
        },
        {
          id: 6,
          name: "张小刚",
          age: 25,
          address: "北京市海淀区西二旗",
          province: "北京市",
          city: "海淀区",
          zip: 100000,
        },
        {
          id: 7,
          name: "李小红",
          age: 30,
          address: "上海市浦东新区世纪大道",
          province: "上海市",
          city: "浦东新区",
          zip: 100000,
        },
        {
          id: 8,
          name: "周小伟",
          age: 26,
          address: "深圳市南山区深南大道",
          province: "广东",
          city: "南山区",
          zip: 100000,
        },
      ],
      formValidate: {
        name: "",
        age: "",
        address: "",
        province: "",
        city: "",
        zip: "",
      },
      ruleValidate: {
        name: [
          {
            required: true,
            message: "姓名不能为空",
            trigger: "blur",
          },
        ],
        // age: [{ required: true, message: "年龄不能为空", trigger: "blur" }],
        age: [
          {
            required: true,
            message: "年龄不能为空",
            trigger: "blur",
            transform: (value) => String(value),
          },
        ],
        address: [{ required: true, message: "地址不能为空", trigger: "blur" }],
        province: [
          { required: true, message: "省份不能为空", trigger: "blur" },
        ],
        city: [{ required: true, message: "城市不能为空", trigger: "blur" }],
        zip: [
          {
            transform: (value) => String(value),
            required: true,
            message: "姓名不能为空",
            trigger: "blur",
          },
        ],
      },
      tableData:[],
      allData1: [],
    };
  },
  methods: {
    handleSubmit(name) {
      if (this.formValidate.age && typeof this.formValidate.age !== "number") {
        this.$Message.error("年龄必须为数字");
        return;
      }

      if (this.formValidate.zip && typeof this.formValidate.zip !== "number") {
        this.$Message.error("邮编必须为数字");
        return;
      }

      this.$refs[name].validate((valid) => {
        if (valid) {
          this.$Message.success("提交成功!");
          switch (this.nums) {
            case 3:
              console.log("新增接口");
              break;
            case 2:
              console.log("查看接口");
              break;
            case 1:
              console.log("编辑接口");
              break;
          }
          this.modal1 = false;
        } else {
          this.$Message.error("必填項未填!");
        }
      });
    },
    handleReset(name) {
      this.modal1 = false;
      // this.formValidate.name = "";
      // this.formValidate.age = "";
      // this.formValidate.address = "";
      // this.formValidate.province = "";
      // this.formValidate.city = "";
      // this.formValidate.zip = "";
      this.$refs[name].resetFields();
    },
    addHandClick(row) {
      this.modal1 = true;
      console.log(row);
      if (row === undefined) {
        this.nums = 3;
      }

      switch (this.nums) {
        case 1:
          this.title = "编辑";
          this.flag = false;
          this.formValidate.name = row.name;
          this.formValidate.age = row.age;
          this.formValidate.address = row.address;
          this.formValidate.province = row.province;
          this.formValidate.city = row.city;
          this.formValidate.zip = row.zip;
          break;
        case 2:
          this.title = "查看";
          this.flag = true;
          this.formValidate.name = row.name;
          this.formValidate.age = row.age;
          this.formValidate.address = row.address;
          this.formValidate.province = row.province;
          this.formValidate.city = row.city;
          this.formValidate.zip = row.zip;
          break;
        case 3:
          this.title = "新增";
          this.flag = false;
          this.formValidate.name = "";
          this.formValidate.age = "";
          this.formValidate.address = "";
          this.formValidate.province = "";
          this.formValidate.city = "";
          this.formValidate.zip = "";
          break;
      }

      // if (row === undefined) {
      //   this.title = "新增";
      //   this.formValidate.name = "";
      //   this.formValidate.age = "";
      //   this.formValidate.address = "";
      //   this.formValidate.province = "";
      //   this.formValidate.city = "";
      //   this.formValidate.zip = "";
      // } else {
      //   this.title = "编辑";
      //   this.formValidate.name = row.name;
      //   this.formValidate.age = row.age;
      //   this.formValidate.address = row.address;
      //   this.formValidate.province = row.province;
      //   this.formValidate.city = row.city;
      //   this.formValidate.zip = row.zip;
      // }
    },
    handDele(row, index) {
      this.$Modal.confirm({
        title: "警告",
        content: "<p>确定删除 " + row.name + " 吗?</p>",
        onOk: () => {
          // this.data.splice(index, 1);
          this.$Message.success("删除成功!");
        },
        onCancel: () => {
          this.$Message.info("取消删除");
        },
      });
    },

    handPageChange(index) {
      console.log(index);
      this.current = index;
      this.getTabelData();
    },

    async upload_dp_itly(file) {
      let param = new FormData();
      param.append("file", file);
      // await uploadDPItly(param).then((res) => (this.data4 = res.data));
    },

    //全选
    changeSelect(selection) {
      console.log(111, selection);
      this.ID = [];
      selection.forEach((item) => this.ID.push(item.id));
    },

    //全选删除
    deleClick() {
      if (this.ID.length === 0) {
        this.$Message.error("请选中要删除的内容");
        return;
      }
      console.log("批量删除接口", this.ID);
      this.$Message.success("删除成功");
    },

    getTabelData() {
      this.tableData = this.allData1.slice(
        (this.current - 1) * this.pageSize,
        this.current * this.pageSize
      );
      this.total = this.allData1.length;
    },
  },
  mounted() {
    this.allData1 = this.data4;
    this.getTabelData();
  },
};
</script>

<style scoped>
.btn {
  display: inline-flex;
}
</style>

### 回答1: Vue-element-admin 是一个基于 Vue.js 和 Element UI 的后台管理系统解决方案,其功能包括登录、权限管理、Dashboard、表单等常见的后台管理系统功能。 要进行增删改查的操作,需要先了解 Vue-element-admin 的代码结构和数据流,以下是一些常用的操作指南: 1. 添加新页面:可以在 src/views 目录下新建一个.vue 文件,然后在 src/router/index.js 中添加路由。 2. 修页面:直接修 src/views 目录下的相应.vue 文件即可。 3. 删除页面:删除 src/views 目录下的相应.vue 文件,并在 src/router/index.js 中删除相应的路由即可。 4. 增加/修 API 接口:在 src/api 目录下添加/修对应的.js 文件即可。 5. 增加/修菜单项:在 src/layout/components/Sidebar/index.vue 文件中找到对应的位置,添加/修菜单项。 6. 增加/修权限:在 src/permission.js 文件中修对应的权限即可。 需要注意的是,在修 Vue-element-admin 的代码时,建议先熟悉 Vue.js 和 Element UI 的使用,以及了解前端的基本知识。此外,修代码前最好先备份原有代码,以防止出现不可预料的错误。 ### 回答2: vue-element-admin是一个基于Vue.js和Element UI的后台管理系统,它提供了一套完整的后台管理模板和常用组件,方便开发者快速开发管理系统。 在vue-element-admin中,实现增删改查功能是非常常见的需求。下面就来具体介绍一下如何实现增删改查。 增加数据 在vue-element-admin中,我们通常使用表单来添加新的数据。首先需要定义一个表单组件,可以使用Element UI提供的组件,也可以自行编写。然后,在表单组件中,需要监听表单的提交事件,将表单中的数据发送到后端,以添加新的数据。 对于后端,需要提供一个API,用于接收前端传递过来的数据。通过API将数据保存到数据库中。 删除数据 在vue-element-admin中,删除数据通常是通过点击列表项的删除按钮来实现的。首先需要在列表项中加入删除按钮,并定义一个删除方法。当用户点击删除按钮时,会调用该方法。 然后,在该方法中,需要向后端发送一个请求,告诉后端需要删除的数据的ID。后端需要提供一个API,将指定的数据从数据库中删除。 修数据 在vue-element-admin中,修数据通常是通过点击列表项的编辑按钮来实现的。首先需要在列表项中加入编辑按钮,并定义一个编辑方法。当用户点击编辑按钮时,会调用该方法。 然后,在该方法中,需要获取需要编辑的数据的ID,并将其发送到后端。后端需要提供一个API,用于获取指定ID的数据,并将其返回给前端。 返回数据后,将其填充到表单组件中,易于修。当用户修完数据后,需要将数据发送到后端,以更新到数据库中。 查询数据 在vue-element-admin中,实现查询数据通常是在页面顶部加入一个查询表单。当用户输入查询条件后,需要向后端发送一个请求,告诉后端需要查询的条件。后端需要提供一个API,接收查询条件,并返回查询结果给前端。 查询结果需要渲染到页面中,以便用户查看。同时,如果查询结果很多,可以考虑进行分页,提高查询效率。 以上就是在vue-element-admin中实现增删改查的大致过程,需要注意的是,每个步骤都需要前后端协同,才能实现完整的功能。 ### 回答3: vue-element-admin是一个基于Vue.js后台管理系统解决方案,它提供的各种组件和功能可以帮助我们快速搭建出一个完整的后台管理系统。其中,增删改查后台管理系统中最常见的功能,下面就来详细介绍一下vue-element-admin的增删改查。 一、增加数据 在vue-element-admin中,增加数据分为两种情况:新增数据和批量增加数据。对于新增数据,我们需要引用element-ui的Dialog组件实现弹窗输入新数据,然后将数据通过api的方法传给后端实现数据的插入操作。对于批量增加数据,我们可以使用Vue.js的v-for指令和el-table组件展示已有数据,并通过上传Excel表格的方式批量增加数据。 二、删除数据 删除数据同样需要使用element-ui的Dialog组件来实现删除数据的确认框。在调用删除api接口时,我们需要传递一个或多个需要删除的数据的唯一标识符,并在后端进行相应的删除操作。不过需要注意的是,对于某些敏感数据,我们可以通过后端开发的方式做出逻辑删除而非物理删除的处理。 三、修数据 修数据也需要使用element-ui的Dialog组件实现弹窗,并将原有的数据展示在弹窗中,让用户修之后提交保存。我们需要传递修后的数据和原有数据的唯一标识符给api接口,然后在后端进行相应的修操作。 四、查询数据 查询数据是后台管理系统中最常用的功能之一,vue-element-admin通过使用el-form和el-input组件实现数据的模糊查询、精确查询等功能。同时,Vue.js的自定义过滤器可以帮助我们对查询出的数据进行格式化,以便展示给用户。 综上所述,vue-element-admin的增删改查功能涉及到多个组件和功能,需要结合具体业务场景进行设计和开发。不过通过使用vue-element-admin提供的各种组件和api接口,我们可以快速实现一个完整的后台管理系统,并满足各种业务需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值