Avue的CRUD最强封装(三)

摘要:
1.封装积垢。js@/mixins/crud。jsimport{mapGetters}from“vuex”importRequestfrom“@/utils/httpRequest”exportconcurrentMixin={data(){return{data:data:option:“refresh change”:“search reset”:“搜索更改”:

目录

CRUD最强封装-极简增删改查

由于@/api/x-api.js@/option/xx-option.js@/views/modules/xx-vue.js中有大量的重复代码,因此我们可以把它封装一下,这样让我们的看起来更简单。

原理: 利用vue的mixins混入,把共同的代码或者类似的代码抽取到mixins属性中。

1、封装crud.js

@/mixins/crud.js

import {mapGetters} from 'vuex'
import request from '@/utils/httpRequest'

export const curdMixin = {
  data () {
    return {
      data: [],
      option: {},
      form: {},
      params: {},
      loading: false,
      page: {},
      config: {}
    }
  },
  computed: {
    ...mapGetters(['user']),
    bindVal () {
      return {
        ref: 'crud',
        data: this.data,
        option: this.option,
        tableLoading: this.loading
      }
    },
    onEvent () {
      return {
        'on-load': this.getList,
        'row-save': this.rowSave,
        'row-update': this.rowUpdate,
        'row-del': this.rowDel,
        'refresh-change': this.refreshChange,
        'search-reset': this.searchChange,
        'search-change': this.searchChange
      }
    },
    rowKey () {
      return this.config.rowKey || 'id'
    }
  },
  methods: {
    getList () {
      const callback = () => {
        this.loading = true
        let pageParams = {}
        pageParams['page'] = this.page.currentPage
        pageParams['limit'] = this.page.pageSize

        const data = Object.assign(pageParams, this.params)
        this.data = []
        request({
          url: request.adornUrl(this.config['list']),
          method: 'get',
          params: request.adornParams(data)
        }).then(res => {
          this.loading = false
          const data = res.data
          this.data = data.page.list
          this.page.total = data.page.totalCount
          if (this.listAfter) {
            this.listAfter(data)
          } else {
            this.$message.success('获取成功')
          }
        })
      }
      if (this.listBefore) {
        this.listBefore()
      }
      callback()
    },
    rowSave (row, done, loading) {
      const callback = () => {
        delete this.form.params
        request({
          url: request.adornUrl(this.config['save']),
          method: 'post',
          data: request.adornData(this.form)
        }).then((data) => {
          this.getList()
          if (this.addAfter) {
            this.addAfter(data)
          } else {
            this.$message.success('新增成功')
          }
          done()
        }).catch(() => {
          loading()
        })
      }
      if (this.addBefore) {
        this.addBefore()
      }
      callback()
    },
    rowUpdate (row, index, done, loading) {
      const callback = () => {
        delete this.form.params
        request({
          url: request.adornUrl(this.config['update']),
          method: 'post',
          data: request.adornData(this.form)
        }).then((data) => {
          this.getList()
          if (this.updateAfter) {
            this.updateAfter(data)
          } else {
            this.$message.success('更新成功')
          }
          done()
        }).catch(() => {
          loading()
        })
      }
      if (this.updateBefore) {
        this.updateBefore()
      }
      callback()
    },
    rowDel (row, index) {
      const callback = () => {
        request({
          url: request.adornUrl(this.config['delete']),
          method: 'post',
          data: request.adornData(row[this.rowKey], false)
        }).then((data) => {
          this.getList()
          if (this.delAfter) {
            this.delAfter(data, row, index)
          } else {
            this.$message.success('删除成功')
          }
        })
      }
      if (this.delBefore) {
        this.delBefore()
        callback()
      } else {
        this.$confirm(`此操作将永久删除序号【${index}】的数据, 是否继续?`, '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          callback()
        })
      }
    },
    searchChange (params, done) {
      if (done) done()
      this.params = params
      this.page.currentPage = 1
      this.getList()
    },
    refreshChange () {
      this.getList()
    }
  }
}

2、在@/views/modules/下新建.vue页面

Avue的CRUD最强封装(三)第1张

这样,代码就清爽很多,而且不再需要xx-api.jsxx-option.js了。

注意:

config 里面配置的是接口请求如:

config: {
    save: '/mcl/customer/save',
    delete: '/mcl/customer/delete',
    update: '/mcl/customer/update',
    list: '/mcl/customer/list'
}

3、live template 模板

<template>
  <avue-crud v-bind="bindVal" v-on="onEvent" v-model="form" :page.sync="page">
  </avue-crud>
</template>

<script>
  import {curdMixin} from '@/mixins/crud'

  export default {
    mixins: [curdMixin],
    data () {
      return {
        config: {
          save: '/mcl/customer/save',
          delete: '/mcl/customer/delete',
          update: '/mcl/customer/update',
          list: '/mcl/customer/list'
        },
        option: {
          index: true,
          align: 'center',
          headerAlign: 'center',
          border: true,
          stripe: true,
          refreshBtn: true,
          columnBtn: false,
          excelBtn: true,
          column: [
            
          ]
        }
      }
    }
  }
</script>

<style scoped>

</style>

免责声明:文章转载自《Avue的CRUD最强封装(三)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python2.7的IDLE启动没有反应python 把数据 json格式输出下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Use // eslint-disable-next-line to ignore the next line.

解决 在build/webpack.base.conf.js文件中,注释或者删除掉:module->rules中有关eslint的规则 参考---https://blog.csdn.net/qq_42108487/article/details/89814708...

echarts-JSON请求数据

1、问题背景      将数据封装在JSON文件中,利用get方法请求数据 2、实现源码 <script> layui.use(['layer', 'echarts'], function () { var $ = layui.jquery, layer = layui.layer,...

【转帖】在SQL Server中如何获得刚插入一条新记录的自动ID号

转自http://blog.csdn.net/wangji163163/archive/2008/05/09/2424191.aspx 在SQL Server中如何获得刚插入一条新记录的自动ID号收藏 ---------------------------------------------------------------  使用[IDENT_C...

primary库新增数据文件后,standby库无法创建文件并终止数据同步

主库是RAC环境,使用asm存放数据文件,备库是操作系统本地文件系统存放数据文件。在主库执行以下操作: SQL> alter tablespace ysdv add datafile '+data' size 1024m autoextend on next 100m maxsize 10240m; 备库的alert日志报以下错误: Mon Ju...

wampserver修改mysql数据库密码的简单方式

刚装好的wampserver的数据库是没有密码的,所以可以直接登录,要设置密码,一种简单的方式如下: 打开phpMyadmin 初始状态没有密码,可以直接登录 登录之后,点击账户 点击修改权限,设置你的密码即可。 之后打开目录wamp>apps>phpmyadmin文件夹下的【config.inc.PHP】文件, 修改【$cfg['Se...

Python获取list中指定元素的索引

在平时开发过程中,经常遇到需要在数据中获取特定的元素的信息,如到达目的地最近的车站,橱窗里面最贵的物品等等。怎么办?看下面 方法一: 利用数组自身的特性 list.index(target), 其中a是你的目标list,target是你需要的下标对应的值 1 li = [10,8,9,26,72,6,28] 2 print(li.index(8)) 但是,...