首页 > 其他分享 >vue2.x接入mockJs

vue2.x接入mockJs

时间:2023-07-27 09:46:39浏览次数:28  
标签:return 接入 url Mock vue2 integer mockJs data mock

1、安装

npm install mockjs

2、创建文件

src/mock/api、src/mock/index

import Mock from 'mockjs'
import MockApi from "./api"
Mock.setup({
timeout: "300",
});
const mocks = [...MockApi];
export function mockXHR() {
for (let i of mocks) {
Mock.mock(new RegExp(i.url), i.type || "get", i.response);
}
}
import Mock from "mockjs";
//处理路径传参
import { parameteUrl } from "@/utils/query-param"

function ArrSet(Arr: any[], id: string): any[] {
    let obj: any = {}
    const arrays = Arr.reduce((setArr, item) => {
        obj[item[id]] ? '' : (obj[item[id]] = true && setArr.push(item))
        return setArr
    }, [])
    return arrays
}
/**
* @description: min ≤ r ≤ max  随机数
* @param {*} Min
* @param {*} Max
* @return {*}
*/
function RandomNumBoth(Min: any, Max: any) {
    var Range = Max - Min;
    var Rand = Math.random();
    var num = Min + Math.round(Rand * Range); //四舍五入
    return num;
}
//左中
export default [
    {
        url: "/bigscreen/countUserNum",
        type: "get",
        response: () => {
            const a = Mock.mock({
                success: true,
                data: {
                    offlineNum: '@integer(50, 100)',
                    alarmNum: '@integer(20, 100)',
                    lockNum: '@integer(10, 50)',
                    totalNum: 368
                }
            })
            a.data.onlineNum = a.data.totalNum - a.data.offlineNum - a.data.lockNum - a.data.alarmNum
            return a
        },
    },
    {
        url: "/bigscreen/countDeviceNum",
        type: "get",
        response: () => {
            const a = Mock.mock({
                success: true,
                data: {
                    alarmNum: '@integer(100, 1000)',
                    offlineNum: '@integer(0, 50)',
                    totalNum: 698
                }
            })
            a.data.onlineNum = a.data.totalNum - a.data.offlineNum
            return a
        }
    },
    //左下
    {
        url: "/bigscreen/leftBottom",
        type: "get",
        response: () => {
            const a = Mock.mock({
                success: true,
                data: {
                    "list|20": [
                        {
                            provinceName: "@province()",
                            cityName: '@city()',
                            countyName: "@county()",
                            createTime: "@datetime('yyyy-MM-dd HH:mm:ss')",
                            deviceId: "6c512d754bbcd6d7cd86abce0e0cac58",
                            "gatewayno|+1": 10000,
                            "onlineState|1": [0, 1],

                        }
                    ]
                }
            })
            return a
        }
    },
    //右上
    {
        url: "/bigscreen/alarmNum",
        type: "get",
        response: () => {
            const a = Mock.mock({
                success: true,
                data: {
                    dateList: ['2021-11', '2021-12', '2022-01', '2022-02', '2022-03', "2022-04"],
                    "numList|6": [
                        '@integer(0, 1000)'
                    ],
                    "numList2|6": [
                        '@integer(0, 1000)'
                    ]
                }
            })
            return a
        }
    },
    //右中
    {
        url: "/bigscreen/ranking",
        type: "get",
        response: () => {
            let num = Mock.mock({ "list|80": [{ value: "@integer(50,1000)", name: "@city()" }] }).list
            //   console.log("ranking",num);
            let newNum: any = [], numObj: any = {}
            num.map((item: any) => {
                if (!numObj[item.name] && newNum.length < 8) {
                    numObj[item.name] = true
                    newNum.push(item)
                }
            })
            let arr = newNum.sort((a: any, b: any) => {
                return b.value - a.value
            })
            let a = {
                success: true,
                data: arr
            }
            return a
        }
    },
    //右下
    {
        url: "/bigscreen/rightBottom",
        type: "get",
        response: () => {
            const a = Mock.mock({
                success: true,
                data: {
                    "list|40": [{
                        alertdetail: "@csentence(5,10)",
                        "alertname|1": ["水浸告警", "各种报警"],
                        alertvalue: "@float(60, 200)",
                        createtime: "2022-04-19 08:38:33",
                        deviceid: null,
                        "gatewayno|+1": 10000,
                        phase: "A1",
                        sbInfo: "@csentence(10,18)",
                        "terminalno|+1": 100,
                        provinceName: "@province()",
                        cityName: '@city()',
                        countyName: "@county()",
                    }],

                }
            })
            return a
        }
    },
    //安装计划
    {
        url: "/bigscreen/installationPlan",
        type: "get",
        response: () => {

            let num = RandomNumBoth(26, 32);
            const a = Mock.mock({
                ["category|" + num]: ["@city()"],
                ["barData|" + num]: ["@integer(10, 100)"],
            })
            let lineData = [], rateData = [];
            for (let index = 0; index < num; index++) {
                let lineNum = Mock.mock('@integer(0, 100)') + a.barData[index]
                lineData.push(lineNum)
                let rate = a.barData[index] / lineNum;
                rateData.push((rate * 100).toFixed(0))
            }
            a.lineData = lineData
            a.rateData = rateData
            return {
                success: true,
                data: a
            }
        }
    },
    {
        url: "/bigscreen/centerMap",
        type: "get",
        response: (options: any) => {
            let params = parameteUrl(options.url)
            //不是中国的时候
            if (params.regionCode && !["china"].includes(params.regionCode)) {
                const a = Mock.mock({
                    success: true,
                    data: {
                        "dataList|100": [
                            {
                                name: "@city()",
                                value: '@integer(1, 1000)'
                            }
                        ],
                        regionCode: params.regionCode,//-代表中国
                    }
                })
                return a
            } else {
                const a = Mock.mock({
                    success: true,
                    data: {
                        "dataList|12": [
                            {
                                name: "@province()",
                                value: '@integer(1, 1100)'
                            }
                        ],
                        regionCode: 'china',
                    }
                })
                // 去重
                a.data.dataList = ArrSet(a.data.dataList, "name")
                return a
            }
        }
    }
];
/**
 * @description: 获取路径参数
 * @param {*} url
 * @return {*}
 */
export function parameteUrl(url: string) {
    var json: any = {}
    if (/\?/.test(url)) {
        var urlString = url.substring(url.indexOf("?") + 1);
        var urlArray = urlString.split("&");
        for (var i = 0; i < urlArray.length; i++) {
            var urlItem = urlArray[i];
            var item = urlItem.split("=");
            // console.log(item);
            json[item[0]] = item[1];
        }
        return json;
    }
    return {};
}

// get请求从config.url获取参数,post从config.body中获取参数
export function paramObj(url:string) {
    const search = url.split('?')[1]
    if (!search) {
      return {}
    }
    return JSON.parse(
      '{"' +
        decodeURIComponent(search)
          .replace(/"/g, '\\"')
          .replace(/&/g, '","')
          .replace(/=/g, '":"') +
        '"}'
    )
  }

配置

src/main.js

//不使用mock 请注释掉
import { mockXHR } from "@/mock/index";
mockXHR()

vue.config.js

devServer: {
    host: '0.0.0.0',
    port: 8112,
    open: false,
}    

axios调用

baseUrl: ""

baseUrl: "/api"

 

标签:return,接入,url,Mock,vue2,integer,mockJs,data,mock
From: https://www.cnblogs.com/Nyan-Workflow-FC/p/17584089.html

相关文章

  • Vue2的/deep/深度选择器失效了?
    /deep/在Vue2样式中的问题。太长不看:不要在VueSFC以外的地方使用/deep/。对于Vue3,请使用最新的:deep()伪类选择器。什么是/deep//deep/是Vue2中一个重要的样式选择器,可以用于选择封装好的组件内部的样式。如果直接在Vue组件上设置class属性,该属性只附加于子......
  • 用CSS样式 @keyframes、animation写一个旋转立体模型、动画模型,vue2
    需求:画一个正方体,让物体一直旋转环境:vue2、css效果:代码:模型1<template>2<div>3<!--旋转立体图-->4<divclass="cube">5<divclass="facefront"></div>6<divclass="faceba......
  • xxl-job docker 搭建&接入
    项目地址:https://github.com/xuxueli/xxl-job1初始化数据库新建表sql语句在项目里/xxl-job/doc/db/tables_xxl_job.sql在目标数据库执行语句建库、建表##XXL-JOBv2.4.1-SNAPSHOT#Copyright(c)2015-present,xuxueli.CREATEdatabaseifNOTEXISTS`xxl_job`......
  • vue 2 接入three.js
    1、安装[email protected]、在vue中引用(可以测试一下,是否ok,下面测试)1)、新建index.jsimport*asTHREEfrom'three';//引入Three.js扩展库import{OrbitControls}from'three/examples/jsm/controls/OrbitControls.js';//创建场景varscene=n......
  • 使用脚手架环境开发vue2项目
    一、检查node版本(1)有node.js(2)没有node.js安装地址:Node.js 二、使用npm,包管理工具,是node包管理和分发工具【需要配置仓库镜像地址,改为中国仓库镜像地址】1、查看当前镜像:npmgetregistry2、设置镜像地址的命令: 设置最新的国内淘宝镜像地址......
  • vue2-ace-editor基础配置
    简介Ace是一个用JavaScript编写的可嵌入代码编辑器。它与Sublime、Vim和TextMate等原生编辑器的功能和性能相匹配。它可以很容易地嵌入到任何网页和JavaScript应用程序中。Ace被维护为Cloud9IDE的主要编辑器,并且是MozillaSkywriter(Bespin)项目的继承者。快速开始......
  • Vue2语法知识总结
    下面总结Vue2的语法知识1、插值语法<!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <title>Vue插值语法</title> <scripttype="text/javascript"src="../javascriptdemo/vue.js"></script> &......
  • 从vue2到vue3,自定义组件的v-model实现原理
    前言相信使用vue开发的同学应该都体会过v-model的便利,它可以非常方便地进行双向数据绑定,只要重新输入内容,视图就会立刻发生改变。本文将着重介绍如何在自定义组件当中使用v-model,以及在vue2和vue3中使用方式上的差异。概述v-model是一个语法糖,它在组件使用时相当于如下简写://......
  • GB28181设备接入侧如何支持H.265?
    技术背景一直以来,GB28181-2022之前的规范版本让人诟病的一点:没有明确针对H.265的说明,特别是监控摄像机,H.265已然成为标配,GB/T28181-2022规范,终于针对H.265做了明确的说明,让我们来一起解读下规范:基于RTP的视音频数据PS封装基于RTP的PS封装首先按照ISO/IEC13818-1:2019将视音频流封......
  • GB28181设备接入端如何播放语音广播数据
    技术背景语音广播功能是GB28181设备接入端非常重要的功能属性,语音广播让终端和平台之间,有了实时双向互动,可以满足执法记录仪、智能安全帽、智能监控、智慧零售、智慧教育、远程办公、明厨亮灶、智慧交通、智慧工地、雪亮工程、平安乡村、生产运输、车载终端等场景的技术诉求。这里......