npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

hidden-danger-test-web

v1.0.6

Published

### 一、目录 1. 版本说明 2. 如何引用biyi-admin组件 3. 如何配置页面的静态路由 4. 如何配置页面的异步路由 5. 如何控制按钮级权限 6. 旧项目迁移到新模板里的注意事项 7. 项目编译后如何使用外挂文件替换util中的属性(主要是http请求的接口地址) 8. i18n国际化配置 9. 其他

Downloads

4

Readme

比翼前端模板新版本说明(v4.4.0)

一、目录

  1. 版本说明
  2. 如何引用biyi-admin组件
  3. 如何配置页面的静态路由
  4. 如何配置页面的异步路由
  5. 如何控制按钮级权限
  6. 旧项目迁移到新模板里的注意事项
  7. 项目编译后如何使用外挂文件替换util中的属性(主要是http请求的接口地址)
  8. i18n国际化配置
  9. 其他

二、版本说明

v4.4.0版本做了如下改变:

  • iview版本升级到4.x,v4.3.1如需升级请参考官网教程
  • biyi-admin和biyi-captcha跟随进行优化,最新版为v2.1.0
  • 前端模板删除一些不必要的插件和代码,优化打包体积(默认一直是开启gzip打包的,服务端配置下就可以使用)

三、如何引用biyi-admin组件

注意:以下步骤生成工程时自动会执行,无需手动操作。这里说明只是为了如果根据自身业务需要移除或修改时,需要在哪里修改。

  • 安装biyi-admin相关组件包
npm install --save biyi-admin biyi-captcha
  • 在router.js里进行引用,并调用相关方法
import initAsyncRouter from 'biyi-admin'

// 在路由全局守卫中调用相关方法,具体逻辑请看相关源码
// 重新获取异步菜单和权限数据
initAsyncRouter().then(() => {
  next(router.resolve(to).route.fullPath)
}).catch(() => {
  next('/login')
})

四、如何配置页面的静态路由

注意:为保证程序能够正确解析数据,请严格按照下面说明的数据结构进行静态路由的配置。

我们将菜单页面和非菜单页面放在同一个数据结构了,然后根据不同的属性来判断来数据对应的是否是菜单页面。 具体请参考用下面的数据结构(router/static-routes.js):

  • 第一种,路由出口在App.vue
const singleRoutes = [
  {
    // 设置初始页面
    path: '',
    redirect: '/login'
  },
  {
    path: '/login',
    name: 'login',
    component: login
  },
  {
    path: '/404',
    name: '404',
    component: () => import('../views/error-pages/404.vue')
  }
]

说明:如果不想使用biyi-admin默认的登录页面,可以使用自己的项目登录页面替换。方法是:

// 在static-router.js的最上方的引入 import { login } from 'biyi-admin' 替换实际的login引入就行
// 例:
import login from 'views/login.vue'
  • 第二种,路由出口在main.vue
/**
** 对于出口在main.vue,又分为了三种数据:
** (1)一级菜单,对应的component固定为'../views/main/main.vue'
** (2)二级菜单,又可以细分为包含三级菜单和不包含三级菜单的。其中不包含三级菜单的component就实际对应一个.vue文件;而包含三级菜单的,此二级菜单并没有实际对应的.vue文件,所有对应的url和component需要为空!
** (3)不在菜单显示的页面,这种数据component有实际对应的.vue文件,但是type类型为非menu(只要menu属性!=='menu'就行)
**
**  注意事项:
** (1)如果children长度为1,那么菜单显示的标题以children[0]的为准
** (2)如果子path属性以'/'开头,则会替换父path;反之则是在父path后自动拼接。例如下例:home对应的路由路径为'/home',而不是'/home_index/home'
** (3)所有数据都要设置name和title属性
** (4)菜单数据type属性值一定为'menu',非菜单数据可以不设置type属性或是非'menu'的值
** (5)如果二级菜单下还包含三级菜单,那么该二级菜单的数据中path和component属性一定不要设置或是设为空串
*/

// 下方是一个比较完整的静态路由示例
const staticTree = [
  {
    path: '/home_index',
    name: 'home_index',
    title: '首页',
    icon: 'ios-paper',
    type: 'menu',
    component: () => import('../views/main/main.vue'),
    children: [
      {
        path: '/home',
        name: 'home',
        title: '首页',
        icon: 'ios-paper',
        type: 'menu',
        component: () => import('../views/home/home.vue')
      }
    ]
  },
  {
    path: '/level1',
    name: 'level1',
    title: '一级菜单',
    icon: 'ios-paper',
    type: 'menu',
    component: () => import('../views/main/main.vue'),
    children: [
      {
        path: 'level2-1',
        name: 'level2-1',
        title: '二级菜单-1',
        icon: 'ios-paper',
        type: 'menu',
        component: () => import('../views/home/home.vue')
      },
      {
        path: '',
        name: 'level2-2',
        title: '二级菜单-2',
        icon: 'ios-paper',
        type: 'menu',
        component: '',
        children: [
          {
            path: 'level3',
            name: 'level3',
            title: '三级菜单',
            icon: 'ios-paper',
            type: 'menu',
            component: () => import('../views/test/level3.vue')
          },
          {
            path: 'non-menu-page',
            name: 'non-menu-page',
            title: '非菜单页面',
            component: () => import('../views/test/non-menu-page.vue')
          }
        ]
      }
    ]
  },
  // 非菜单页面也可以这么配,只要是挂载在一个component为main.vue的结构下就行,具体可以根据需要进行处理,区别就是显示的路径可能不太一样,如果需要覆盖掉父级路径,可以将子path属性以'/'开头
  {
    path: '/main',
    name: 'main',
    component: () => import('../views/main/main.vue'),
    children: [
      {
        path: 'non-menu-page',
        name: 'non-menu-page',
        title: '非菜单页面',
        component: () => import('../views/test/non-menu-page.vue')
      }
    ]
  }
]

五、如何配置页面的异步路由

注意:要使用页面路由异步化,需要使用biyi-admin组件;如需根据自身业务自行实现,已提供相关源码,可作参考。

第一步 新建相关.vue页面文件

第二步 在异步路由管理页面进行配置

页面的异步路由配置位置:权限管理 => 异步路由管理 (注意:你的角色首先要拥有该页面访问权限,一般该页面只有的在开发阶段会用到,还有biyi-admin内置的几个页面数据一般不需要修改,避免无法正常组件使用)

异步路由配置页面

添加新的节点数据

注意:请仔细阅读下面的内容。

首先, 将页面显示的位置分为两种:一种是路由出口在App.vue(就是和login页面,404页面平级的页面,可以参考上一章静态路由的配置),另一种路由出口在main.vue(即你的页面路由是嵌套在main的路由里的,这部分知识点请看vue-router官方文档路由嵌套一节)。

然后, 我们将异步路由数据分为了以下三类:

(1)一级菜单:即在左侧菜单栏里显示为一级菜单。

(2)二级菜单(不含三级菜单),三级菜单:即在左侧菜单显示为二级菜单或三级菜单,并且点击菜单项会跳转到目标页面。

(3)二级菜单(含三级菜单):即在左侧菜单显示为二级菜单,但是该二级菜单下包含三级菜单,所以该二级菜单并不对应一个页面。

(4)非菜单页面:即不会在左侧菜单显示,但是存在该页面。一般通过点击按钮或是超链接跳转到该页面,比如新建按钮、编辑按钮等。

(5)按钮:即普通的按钮,点击该按钮不会进行页面跳转,只会留在当前页面执行一些其他操作,比如删除按钮。注意和(4)进行区分。

开始配置异步路由

下面介各种使用场景下的异步路由配置:

第一种:页面的路由出口在main.vue,即你的页面显示位置在下图红框内

添加新的节点数据

(1)一级菜单

一级菜单的页面配置如下(图标和权限码非必填,其余属性都是必填)

*注意:Vue组件的值固定为: views/main/main.vue(下图红色框,即main.vue文件的实际路径)

添加新的节点数据

(2)二级菜单(不含三级菜单)

二级菜单(不含三级菜单),即点击会前往具体的页面,具体配置数据如下:

添加新的节点数据

(3)二级菜单(含三级菜单)

二级菜单(含三级菜单),即点击不会前往页面,而是展开三级菜单,具体配置数据如下:

添加新的节点数据

(3)三级菜单

添加完二级菜单(含三级菜单),别忘了添加三级菜单,具体配置数据如下:

添加新的节点数据

(4)非菜单的页面

添加新的节点数据

说明:关于非菜单页面的的挂载位置,可以是任意的。可以挂载在一级菜单、二级菜单、三级菜单...它们的共同点都是根节点的component一定都是对应main.vue,同时自身的 type !== 'menu'。 比如上面的例子中非菜单页面就是挂载在一个三级菜单下的,你也可以把它挂载非菜单页面下面(项目生成时自动会生成该节点,你可以把所有的非菜单页面都挂在这个节点下)。 但是不同的挂载位置可能会导致访问页面的url会不一样,同时在首页头部显示的面包屑路径不一样,这就取决于你想要什么样的效果。

第二种:页面的路由出口在App.vue,即你的页面是和login、404这些页面平级的,显示位置在下图红框内

添加新的节点数据

(1)点击一级菜单跳到目标页面

注意这里的vue组件就是你实际页面的路径,而不再是之前的 'views/main/main.vue'

添加新的节点数据

(2)非菜单页面

注意这里的非菜单页面路由出口是在App.vue,注意和第一种的进行区分。

添加新的节点数据

注意该节点只能是根节点(即一级菜单位置),但是在选择类型时为‘非菜单页面’,同时该节点下不能再挂载子节点,除非你的页面里嵌套了其他的路由出口。

添加新的节点数据

(3)点击二级菜单跳转到目标页面

这个使用场景是:有一个一级菜单,然后下面有多个二级菜单(至少2个),然后点击其中一个二级菜单都会跳转到目标页面。(注意该二级菜单页面的路由出口在App.vue)

首先按照上一步(2)步配置好你的页面路由数据;

然后设置一菜单。这里的一级菜单配置方式就是 第一种类型(1) 方式。没错,就是看似挂载main下面的。

最后在设置该二级菜单数据如下图:

添加新的节点数据

注意这里的类型选‘二级菜单(含三级菜单)’,然后路由名为上一步(第二种(2)方式)你配好的路由的路由名。

到这里就配置完毕了,根据你的需要进行相应的配置就行!

第三种:按钮

添加新的节点数据

权限码是用于控制用户能否操作该按钮,需要配合biyi-admin中封装的按钮进行使用,具体使用请看下一章目录6

注意: 为保证biyi-admin相关功能能正常使用,请不要随意修改biyi-admin相关的路由数据

第三步 为相关角色添加访问新页面的权限

当完成第二步后,动态新添加的.vue文件的路由数据已存在数据库中,但是所有角色都是默认无法访问的,还需要在:角色管理页面 为相关角色配置访问和操作新添加的页面的权限

添加新的节点数据

六、如何控制按钮级权限

在配置异步路由或是按钮的时候,会设置权限码(比如编辑、删除、查询)。在用户登录获取相关权限时,会同时保存相关权限码,当在业务页面中的按钮需要根据权限来控制时,可以使用模板重新封装集成的Button组件进行使用。

具体使用方式如下:

// 只需添加code属性和对应的code码,组件自动去校验该按钮是否有相关权限,若没有,则该按钮不可见(v-if)
<Button code="cscp.user.add" type="primary" icon="md-add" @click="handleClick">新建</Button>

注意:

  • 重新封装的Button组件是基于iview的Button组件,所以原有的组件api一样可以使用。

七、将接口配置提取到静态文件,方便构建编译后修改

在4.4.0版本中,util.js中的接口变量配置提取到静态文件,方便构建编译后修改。

对应的文件为:public/configs/congfig.js

/**
* 配置规则:
* (1)'$'符号开头的合法变量名
* (2)配置环境变量固定变量名为:$env
* (3)如果变量的值为null,undefined,''或0,则不会进行属性的添加(覆盖)
*/
$env = ''
$baseUrl = ''

注意:

  • 若想配置文件中的属性生效,则该属性值必须有效(null, undefined, 0都不行,具体处理逻辑可在util.js中查看)。
  • 在configs配置的所有有效属性都会添加(覆盖)到util对象中。
  • 如果不是必须使用,请无视micro-service-config.js文件。

八、旧项目迁移到新模板里的注意事项(4.3.1之前的)

  • 旧项目里的静态页面(路由)迁移

    在新模板里,静态页面(路由)的配置都在router/static-routes.js文件中进行配置。具体的数据格式要求请参考第四章

  • 旧项目里的动态页面(路由)迁移

    在新模板里,动态页面(路由)的配置不再提供相关文件(旧模板提供dynamic-router.js),biyi-admin提供相关的配置页面进行配置。具体方式请参考第五章

  • util中的相关工具方法

http请求方法: 为了应对五花八门的接口传输数据格式的要求,新版本对http请求方法进行修改。

util.http = axios.create({
  baseURL: util.baseUrl,
  timeout: 5000000
})

// 常用的几种请求方法
util.http.get(url[,config])

util.http.delete(url[,config])

util.http.head(url[,config])

util.http.post(url[,data[,config]])

util.http.put(url[,data[,config]])

// 注意:如果delete的参数是在body里,请在config中添加data属性。例如:
this.$http.delete(url, {
  data: {
    'cscpOrgDTOs': [{ id: data.id }]
  }
}).then(response => {}).catch(error => {})

说明: 如果想继续使用旧模板中的请求方法,按照下面的方法进行修改。

// 添加下面代码在util.js中
util.ajax = util.http

// 然后将原来的方法拷贝到util.js文件中即可
// 同时对http请求和响应进行拦截在util.http.interceptors.request.use和util.http.interceptors.response.use中进行修改

接口参数转换为x-www-form-urlencoded格式

util.formUrlencoded = function (data) {
  return qs.stringify(data)
}

// 使用示例,roles数据类型为object
const data = this.$util.formUrlencoded({ roles })
this.$http.post(url, data).then(response => {}).catch(error => {})

数据加密

// 数据加密方法
const rsaPubKey = ''
util.encryptPassword = function (str) {
  if (rsaPubKey) {
    // 对密码进行加密
    let encryptor = new JSEncrypt() // 新建JSEncrypt对象
    encryptor.setPublicKey(rsaPubKey) // 设置公钥
    return encryptor.encrypt(str) // 加密
  } else {
    return str
  }
}

九、如何进行i18n国际化配置

新模板支持多语言的国际化配置(i18n),默认提供中、美、日、韩四国语言(不需要可以自行移除,以减少项目打包文件体积)。

  • 配置文件地址:src/i18n

  • 需要添加新的语言(默认支持中,中(繁体),美,日,韩,应该够用) 在config添加本地新语言文件,同时别忘了在iview.lang.config.js中进行iview组件库的语言配置,最后再在index.js引入使用即可。

  • 使用方式: 在页面中任何符合js语法规范的地方使用

    // 首先在相关语言文件定义变量,比如i18n/config/zh-CN.js中定义
    home: {
      welcome: '欢迎使用比翼后台管理系统模板工程',
      versionDoc: '新版本文档说明'
    }
    
    // 然后在页面中引用
    $t('home.versionDoc')

九、其他

1. JavaScript代码规范

本项目遵循的JavaScript代码风格为JavaScript Standard Style

github地址

若想关闭代码规范检查,可进行如下操作: 在.eslintrc.js文件中,注释或删除 '@vue/standard', 然后再重启项目即可。

2. 删除无用的文档说明

内置了markdown转html的相关组件,如果不需要,自行移除,减少项目打包文件的体积。 (正式开发后,记得要把public/markdown/下的readMe和assets中的图片删除,避免无意义的文件出现在项目里)

  • 在home.vue中删除无用标签
// 删除下面的标签
<markdown v-show="showReadMe"></markdown>
  • 删除views/components/markdown.vue

  • 删除public/markdown文件夹

  • 删除package.json里marked

3. 如何开启图片压缩

首先安装相关依赖:

npm install --save-dev image-webpack-loader

然后在vue.config.js中添加如下配置:

// 开启图片压缩
config.module.rule('images')
.test(/\.(png|jpe?g|gif|svg)(\?.*)?$/)
.use('image-webpack-loader')
.loader('image-webpack-loader')
.options({ bypassOnDebug: true })