考务管理系统(一)

一、验证码的生成代码

<template>
  <div>
   <canvas id="canvas" width="100" height="40" @click="reclick()" ref= 'canvas' style="border: 1px solid #ccc; border-radius: 5px;"></canvas>
  </div>
</template>

<script>
export default {
  name: 'JudgeCode',
  data () {
    return {
      ShowNum: []
    }
  },
  mounted () {
    this.draw()
  },
  methods: {
    reclick () {
      // 点击更新
      this.draw()
    },
    draw () {
      const CanvasWidth = this.$refs.canvas.clientWidth
      const CanvasHeigth = this.$refs.canvas.clientHeight
      const canvas = this.$refs.canvas// 获取到canvas的对象,演员
      const context = canvas.getContext('2d')// 获取到canvas画图的环境,演员表演的舞台
      canvas.width = CanvasWidth
      canvas.height = CanvasHeigth
      var sCode = 'A,B,C,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0,q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m'
      const aCode = sCode.split(',')
      const aLength = aCode.length// 获取到数组的长度
      for (let i = 0; i <= 3; i++) {
        const j = Math.floor(Math.random() * aLength)// 获取到随机的索引值
        const deg = Math.random() * 30 * Math.PI / 180// 产生0~30之间的随机弧度
        const txt = aCode[j]// 得到随机的一个内容
        this.ShowNum[i] = txt
        const x = 10 + i * 20// 文字在canvas上的x坐标
        const y = 20 + Math.random() * 8// 文字在canvas上的y坐标
        context.font = 'bold 23px 微软雅黑'

        context.translate(x, y)
        context.rotate(deg)

        context.fillStyle = this.randomColor()
        context.fillText(txt, 0, 0)

        context.rotate(-deg)
        context.translate(-x, -y)
      }
      for (let i = 0; i <= 5; i++) { // 验证码上显示线条
        context.strokeStyle = this.randomColor()
        context.beginPath()
        context.moveTo(Math.random() * CanvasWidth, Math.random() * CanvasHeigth)
        context.lineTo(Math.random() * CanvasWidth, Math.random() * CanvasHeigth)
        context.stroke()
      }
      for (let i = 0; i <= 30; i++) { // 验证码上显示小点
        context.strokeStyle = this.randomColor()
        context.beginPath()
        const x = Math.random() * CanvasWidth
        const y = Math.random() * CanvasHeigth
        context.moveTo(x, y)
        context.lineTo(x + 1, y + 1)
        context.stroke()
      }
      this.sendcode()
    },
    randomColor () { // 得到随机的颜色值
      const r = Math.floor(Math.random() * 256)
      const g = Math.floor(Math.random() * 256)
      const b = Math.floor(Math.random() * 256)
      return 'rgb(' + r + ',' + g + ',' + b + ')'
    },
    sendcode () {
      // console.log(this.ShowNum)
      // 把验证码发送到 loginUI 进行验证
      this.$emit('getCode', this.ShowNum)
    }
  }
}
</script>

<style lang="stylus" scoped>

</style>

在这里插入图片描述


$emit 传递多个参数注意点

在这里插入图片描述


三、vueRouter Error: Avoided redundant navigation to current location: “/XX“.

错显示路由重复,对功能没有影响,可是强迫症看着不爽。

解决方案:

 // 解决ElementUI导航栏中的vue-router在3.0版本以上重复点菜单报错问题
    const originalPush = VueRouter.prototype.push
    VueRouter.prototype.push = function push (location) {
      return originalPush.call(this, location).catch(err => err)
    }

在这里插入图片描述

router 文件下 index.js 中添加上面代码即可。

四、router-view 组件间传值

情况一:router-view 子组件发生变化导致父组件发生改变

父组件:

<router-view @getMessage="showMsg"></router-view>
showMsg (val) {   // methods方法  val即为子组件传过来的值
  console.log(val)
}

子组件:

this.$emit('getMessage', “传给父组件的值”);

情况二:router-view 父组件发生变化导致子组件发生改变

父组件:

<router-view  :search-val="searchVal"></router-view>
searchVal: '需要传给子组件的值',  // data里面申明

子组件:

props: ['searchVal'],

小贴士: props 注意书写规范,建议接收用 短横线命名, props读取用 驼峰式


五、vue 格式化文档 " " -> ’ ’ , 自动去分号

在根目录新建 .prettierrc 文件 , 写入如下代码即可

{
  "semi": false,
  "singleQuote": true
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0rta1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值