美文网首页
vue中使用mockjs实现增删改查

vue中使用mockjs实现增删改查

作者: Ropynn | 来源:发表于2018-11-24 13:39 被阅读0次

    安装开发依赖

    npm install mockjs -D
    安装mockjs在你的开发依赖上,因为你生产环境用的是正式的接口,安装在开发依赖上可以减少你包的大小。

    建立mock文件夹

    在src目录中,建立一个mock的文件夹。在mock目录下,建一个index.js和一些其他的js文件(下文是user.js)


    image.png

    这是一个带分页的mock数据,可以实现增删改查的功能。

    在user.js中

    import Mock from 'mockjs'
    
    function param2Obj(url) {
      const search = url.split('?')[1]
      if (!search) {
        return {}
      }
      return JSON.parse('{"' + decodeURIComponent(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"') + '"}')
    }
    
    let List = []
    const count = 60
    
    for (let i = 0; i < count; i++) {
      List.push(Mock.mock({
        id: Mock.Random.guid(),
        name: Mock.Random.cname(),
        addr: Mock.mock('@county(true)'),
        'age|18-60': 1,
        birth: Mock.Random.date(),
        sex: Mock.Random.integer(0, 1)
      }))
    }
    
    export default {
      /**
       * 获取列表
       * 要带参数 name, page, limt; name可以不填, page,limit有默认值。
       * @param name, page, limit
       * @return {{code: number, count: number, data: *[]}}
       */
      getUserList: config => {
        const { name, page = 1, limit = 20 } = param2Obj(config.url)
        const mockList = List.filter(user => {
          if (name && user.name.indexOf(name) === -1) return false
          return true
        })
        const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1))
        return {
          code: 20000,
          count: mockList.length,
          data: pageList
        }
      },
      /**
       * 增加用户
       * @param name, addr, age, birth, sex
       * @return {{code: number, data: {message: string}}}
       */
      createUser: config => {
        const { name, addr, age, birth, sex } = param2Obj(config.url)
        List.push({
          id: Mock.Random.guid(),
          name: name,
          addr: addr,
          age: age,
          birth: birth,
          sex: sex
        })
        return {
          code: 20000,
          data: {
            message: '添加成功'
          }
        }
      },
      /**
       * 删除用户
       * @param id
       * @return {*}
       */
      deleteUser: config => {
        const { id } = param2Obj(config.url)
        if (!id) {
          return {
            code: -999,
            message: '参数不正确'
          }
        } else {
          List = List.filter(u => u.id !== id)
          return {
            code: 20000,
            data: {
              message: '删除成功'
            }
          }
        }
      },
      /**
       * 批量删除
       * @param config
       * @return {{code: number, data: {message: string}}}
       */
      batchremove: config => {
        let { ids } = param2Obj(config.url)
        ids = ids.split(',')
        List = List.filter(u => !ids.includes(u.id))
        return {
          code: 20000,
          data: {
            message: '批量删除成功'
          }
        }
      },
      /**
       * 修改用户
       * @param id, name, addr, age, birth, sex
       * @return {{code: number, data: {message: string}}}
       */
      updateUser: config => {
        const { id, name, addr, age, birth, sex } = param2Obj(config.url)
        const sex_num = parseInt(sex)
        List.some(u => {
          if (u.id === id) {
            u.name = name
            u.addr = addr
            u.age = age
            u.birth = birth
            u.sex = sex_num
            return true
          }
        })
        return {
          code: 20000,
          data: {
            message: '编辑成功'
          }
        }
      }
    }
    

    在index.js中

    import Mock from 'mockjs'
    
    import tableAPI from './user'
    
    // 用户相关
    Mock.mock(/\/user\/getUser/, 'get', tableAPI.getUserList)
    Mock.mock(/\/user\/remove/, 'get', tableAPI.deleteUser)
    Mock.mock(/\/user\/batchremove/, 'get', tableAPI.batchremove)
    Mock.mock(/\/user\/add/, 'get', tableAPI.createUser)
    Mock.mock(/\/user\/edit/, 'get', tableAPI.updateUser)
    
    

    在main.js中

    import './mock'  //引用mock
    

    在组件中使用

    <template>
      <div>
        mock
      </div>
    </template>
    
    <script>
    import axios from 'axios'
    export default {
      name: 'HelloWorld',
      data() {
        return {
          listQuery: {
            page: 1,
            limit: 10
          }
        }
      },
      created() {
        // api就是你线上的网址
        axios.get('/api/user/getUser', this.listQuery).then((res) => {
          console.log(res)
        }).catch((err) => {
          console.log(err)
        });
      }
    }
    </script>
    

    请求回来的数据

    image.png

    相关文章

      网友评论

          本文标题:vue中使用mockjs实现增删改查

          本文链接:https://www.haomeiwen.com/subject/foueqqtx.html