zoukankan      html  css  js  c++  java
  • Avue-curd通用模板(二)

    Avue-curd通用模板

    上一篇已经把所有使用Avue的准备工作做好了,下面就通过一个简单的例子来体验一下avue能带给我们的便利。

    1、增加路由菜单

    在 src/router/index.js,增加一个路由(由于这只是用来测试学习的,所以放在了demo路由下,生产使用的话最好还是放在动态路由里):

    { path: '/demo-temp', component: _import('demo/temp'), name: 'demo-temp', meta: { title: 'demo-temp', isTab: true } },
    

    在src/views/main-sidebar.vue 文件中添加跳转的组件:

      <el-menu-item index="demo-temp" @click="$router.push({ name: 'demo-temp' })">
        <icon-svg name="temp" class="site-sidebar__menu-icon"></icon-svg>
        <span slot="title">temp</span>
      </el-menu-item>
    

    在src/views/demo/ 下新建temp.vue页面,这样根据renren-fast-vue自己的路由规则,path:/demo-temp会找到 demo下的temp.vue视图:

    temp.vue

    <template>
      <avue-crud ref="crud"
                 :option="option"
                 :page.sync="page"
                 :table-loading="loading"
                 @on-load="getList"
                 @row-update="rowUpdate"
                 @row-save="rowSave"
                 @row-del="rowDel"
                 @refresh-change="refreshChange"
                 @search-reset="searchChange"
                 @search-change="searchChange"
                 v-model="form"
                 :data="data">
      </avue-crud>
    </template>
    
    <script>
      import {mapGetters} from 'vuex'
      import {getList, update, add, del} from '@/api/temp-api.js'
      import option from '@/option/temp-option.js'
    
      export default {
        data () {
          return {
            page: {},
            form: {},
            params: {},
            loading: false,
            data: [],
            option: option(this)
          }
        },
        created () {
    
        },
        computed: {
          ...mapGetters(['userInfo'])
        },
        methods: {
          getList () {
            this.loading = true
            const data = Object.assign({
              pageNum: this.page.currentPage,
              pageSize: this.page.pageSize
            }, this.params)
            this.data = []
            getList(data).then(res => {
              console.log(res.data)
              const data = res.data
              this.loading = false
              this.page.total = data.total
              const result = data.list
              this.data = result
            })
          },
          rowSave (row, done, loading) {
            add(Object.assign({
              createUser: this.userInfo.name
            }, row)).then(() => {
              this.$message.success('新增成功')
              done()
              this.getList()
            }).catch(() => {
              loading()
            })
          },
          rowUpdate (row, index, done, loading) {
            update(Object.assign({
              updateUser: this.userInfo.name
            }, row)).then(() => {
              this.$message.success('修改成功')
              done()
              this.getList()
            }).catch(() => {
              loading()
            })
          },
          rowDel (row) {
            this.$confirm('此操作将永久删除, 是否继续?', '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning'
            }).then(() => {
              return del(row.id)
            }).then(() => {
              this.$message.success('删除成功')
              this.getList()
            })
          },
          searchChange (params, done) {
            if (done) done()
            this.params = params
            this.page.currentPage = 1
            this.getList()
            this.$message.success('搜索成功')
          },
          refreshChange () {
            this.getList()
            this.$message.success('刷新成功')
          }
        }
      }
    </script>
    

    2、通用模板

    根据官网的通用模板例子:https://avuejs.com/doc/crud-temp

    创建2个目录:

    
    mkdir -p src/{api,option}
    
    • ①、 在api 文件夹下新建temp-api.js文件:

    temp-api.js

    
    import request from '@/utils/httpRequest'
    
    export const getList = (data) => {
      return request({
        url: request.adornUrl('/sys/menu/list'),
        method: 'get',
        params: request.adornParams(data)
      })
    }
    export const del = (id) => {
      return request({
        url: request.adornUrl(`/sys/menu/delete/${id}`),
        method: 'post',
        data: request.adornData()
      })
    }
    export const add = (data) => request({
      url: request.adornUrl(`/sys/menu/save`),
      method: 'post',
      data: request.adornData(data)
    })
    export const update = (data) => request({
      url: request.adornUrl(`/sys/menu/update`),
      method: 'post',
      data: request.adornData(data)
    })
    
    • ②、 在option下创建 temp-option.js文件:

    temp-option.js

    
    export default (safe) => {
      // vue的this对象
      console.log(safe)
      return {
        index: true,
        align: 'center',
        headerAlign: 'center',
        border: true,
        stripe: true,
        column: [{
          label: '名称',
          prop: 'name',
          search: true,
          rules: [{
            required: true,
            message: '请输入名称(name)',
            trigger: 'blur'
          }]
        }, {
          label: '值',
          prop: 'value',
          search: true,
          rules: [{
            required: true,
            message: '请输入值(value)',
            trigger: 'blur'
          }]
        }, {
          label: '参数',
          prop: 'code',
          search: true,
          rules: [{
            required: true,
            message: '请输入参数(code)',
            trigger: 'blur'
          }]
        }, {
          label: '备注',
          prop: 'note'
        }]
      }
    }
    

    查看效果:

    3、踩坑

    虽然上面页面已经可以展示成功了,但是我们打开开发者工具可以看到,其实是有报错的:

    • 原因:

    出现这个错的原因是,renren-fast-vue这个脚手架工程在引入element ui时,默认没有加入<el-collapse-transition></el-collapse-transition><el-drawer></el-drawer>组件。

    • 解决:

    在 src/element-ui/index.js 文件里,引入这2个组件:

    import CollapseTransition from 'element-ui/lib/transitions/collapse-transition'
    
    Vue.component(CollapseTransition.name, CollapseTransition)
    
    import {
      ...
      ...
      Drawer
    } from 'element-ui'
    
    Vue.use(Drawer)
    

    4、表格空数据样式

    _base.scss

    
    .el-table__empty-block {
        position: relative;
        min-height: 120px;
        text-align: center;
         100%;
        height: 100%;
    }
    
  • 相关阅读:
    git命令无法自动补全(sles11.3)
    linux下安装svn出现configure: error: We require OpenSSL; try --with-openssl
    Linux系统下升级Python版本步骤(suse系统)
    git commit --amend
    关于device tree中的interrupts选项
    BufferedInputStream
    FileInputStream
    FileOutputStream
    泛型上下限
    泛型接口
  • 原文地址:https://www.cnblogs.com/zhaoxxnbsp/p/13589683.html
Copyright © 2011-2022 走看看