VUE 后台管理系统登录图片验证码

创建验证码组件: ./components/SIdentify

<template>
    <div class="s-canvas">
      <canvas id="s-canvas" style="border-radius: 5px;" :width="contentWidth" :height="contentHeight"></canvas>
    </div>
  </template>
  <script>
    export default {
      name: 'SIdentify',
      props: {
        identifyCode: {
          type: String,
          default: '1234'
        },
        fontSizeMin: {
          type: Number,
          default: 18
        },
        fontSizeMax: {
          type: Number,
          default: 40
        },
        backgroundColorMin: {
          type: Number,
          default: 180
        },
        backgroundColorMax: {
          type: Number,
          default: 240
        },
        colorMin: {
          type: Number,
          default: 50
        },
        colorMax: {
          type: Number,
          default: 160
        },
        lineColorMin: {
          type: Number,
          default: 40
        },
        lineColorMax: {
          type: Number,
          default: 180
        },
        dotColorMin: {
          type: Number,
          default: 0
        },
        dotColorMax: {
          type: Number,
          default: 255
        },
        contentWidth: {
          type: Number,
          default: 111
        },
        contentHeight: {
          type: Number,
          default: 50
        }
      },
      methods: {
        // 生成一个随机数
        randomNum(min, max) {
          return Math.floor(Math.random() * (max - min) + min)
        },
        // 生成一个随机的颜色
        randomColor(min, max) {
          let r = this.randomNum(min, max)
          let g = this.randomNum(min, max)
          let b = this.randomNum(min, max)
          return `rgb(${r}, ${g}, ${b})`
        },
        drawPic() {
          let canvas = document.getElementById('s-canvas')
          let ctx = canvas.getContext('2d')
          ctx.textBaseline = 'bottom'
          // 绘制背景
          ctx.fillStyle = this.randomColor(this.backgroundColorMin, this.backgroundColorMax)
          ctx.fillRect(0, 0, this.contentWidth, this.contentHeight)
          // 绘制文字
          for (let i = 0; i < this.identifyCode.length; i++) {
            this.drawText(ctx, this.identifyCode[i], i)
          }
          this.drawLine(ctx) // 绘制干扰线
          this.drawDot(ctx) // 绘制干扰点
        },
        // 绘制文本
        drawText(ctx, txt, i) {
          ctx.fillStyle = this.randomColor(this.colorMin, this.colorMax)
          ctx.font = this.randomNum(this.fontSizeMin, this.fontSizeMax) + 'px SimHei'
          let x = (i + 1) * (this.contentWidth / (this.identifyCode.length + 1))
          let y = this.randomNum(this.fontSizeMax, this.contentHeight - 5)
          var deg = this.randomNum(-30, 30) // 字符旋转角度(不超过45度比较好)
          // 修改坐标原点和旋转角度
          ctx.translate(x, y)
          ctx.rotate(deg * Math.PI / 180)
          ctx.fillText(txt, 0, 0)
          // 恢复坐标原点和旋转角度
          ctx.rotate(-deg * Math.PI / 180)
          ctx.translate(-x, -y)
        },
        drawLine(ctx) {
          // 绘制干扰线
          for (let i = 0; i < 3; i++) {
            ctx.strokeStyle = this.randomColor(this.lineColorMin, this.lineColorMax)
            ctx.beginPath()
            ctx.moveTo(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight))
            ctx.lineTo(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight))
            ctx.stroke()
          }
        },
        drawDot(ctx) {
          // 绘制干扰点
          for (let i = 0; i < 20; i++) {
            ctx.fillStyle = this.randomColor(0, 255)
            ctx.beginPath()
            ctx.arc(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight), 1, 0, 2 * Math.PI)
            ctx.fill()
          }
        }
      },
      watch: {
        identifyCode() {
          this.drawPic()
        }
      },
      mounted() {
        this.drawPic()
      }
    }
  </script>

父组件:

<template>
      <el-form-item prop="verificationCode" style="width: 320px;">
          <span class="svg-container">
            <svg-icon icon-class="password" />
          </span>
          <el-input
            :key="passwordType"
            ref="password"
            v-model="loginForm.password"
            type="text"
            placeholder="Verification Code"
            name="verificationCode"
            tabindex="2"
            autocomplete="on"
            @keyup.native="checkCapslock"
            @blur="capsTooltip = false"
            @keyup.enter.native="handleLogin"
          />
        </el-form-item>
        <s-identify style="position: relative;top: -73px;left: 340px;" :identifyCode="identifyCode" @click="refreshCode()"></s-identify>
</template>


<script>
import SIdentify from "./components/SIdentify"
  export default {
  components: { SIdentify },
  data() {
    return {
      identifyCode: "",
      identifyCodes: ['0','1','2','3','4','5','6','7','8','9','a','b','c','d'], //根据实际需求加入自己想要的字符
     }
  },

  mounted() {
    this.refreshCode()
  },
  destroyed() {
    // window.removeEventListener('storage', this.afterQRScan)
  },
  methods: {

   // 生成随机数
   randomNum(min, max) {
      max = max + 1
      return Math.floor(Math.random() * (max - min) + min);
    },
    // 更新验证码
    refreshCode() {
      this.identifyCode = "";
      this.makeCode(this.identifyCodes, 4);
      console.log('当前验证码:',this.identifyCode);
    },
    // 随机生成验证码字符串
    makeCode(data, len) {
      console.log('data, len:', data, len)
      for (let i = 0; i < len; i++) {
        this.identifyCode += this.identifyCodes[this.randomNum(0, this.identifyCodes.length-1)]
      }
    }
  }
}

</script>

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以通过以下几种方式下载Vue后台管理登录页模板: 1. 官方模板网站:Vue官方提供了一些开源的后台管理登录页模板,您可以访问Vue官方网站,找到相应的模板并下载。这些模板通常会包含登录页的设计和布局,您可以根据自己的需求进行自定义。 2. 第三方模板网站:有很多第三方的模板网站也提供Vue后台管理登录页模板的下载服务。您可以通过搜索引擎搜索"Vue后台管理登录页模板",然后选择一个可靠的第三方网站进行下载。 3. GitHub或开源社区:许多开发者会将自己开发的Vue后台管理登录页模板分享到GitHub等开源社区上,您可以在这些平台上搜索相关项目,并进行下载。在这些项目中,您可以查看源代码、文档和示例,以便更好地理解和使用模板。 4. 参考其他项目:如果您找不到合适的Vue后台管理登录页模板,您还可以参考其他类似项目的设计和布局,然后根据自己的需求进行修改和定制。在GitHub等平台上,您可以找到很多开源的后台管理项目,可以从中获取灵感和想法。 无论您选择哪种方式进行下载,建议您选择一个可靠的来源,确保模板的质量和安全性。另外,下载后的模板可以根据您的需要进行修改和定制,以符合您的具体要求。 ### 回答2: 要下载Vue后台管理登录页模板,可以通过以下方法进行: 1. 使用搜索引擎:在搜索引擎中输入关键词"Vue 后台管理登录页模板下载",会出现一系列相关的搜索结果。可以逐个点击链接,进入网站,查找是否有提供可下载的模板。 2. 使用开源平台:许多开源平台(如GitHub)上有许多开发者分享的Vue后台管理登录页模板。在开源平台中搜索关键词,即可找到相关的项目。下载模板需要先注册并登录平台账号,然后在模板项目页面找到下载按钮。 3. 使用Vue官方资源:Vue官方网站上有一些官方推荐的模板,可以前往Vue官网的资源页面,搜索适合的模板。在模板页面,可以找到相关的下载链接。 4. 使用模板网站:有许多网站专门提供Vue模板下载,例如在"Vue模板之家"、"Vue全家桶模板"等网站中搜索后台管理登录页模板,可以找到可下载的模板。在模板页面,可以找到下载按钮进行下载。 5. 使用社区论坛:在Vue开发者社区论坛(如VueVUE、掘金等)中,可以搜索类似的模板需求,并查看其他开发者分享的资源。在论坛中找到满意的模板后,可以通过提供的下载链接进行下载。 无论选择哪种方式,下载模板前最好先查看模板的演示效果、兼容性和文档说明,以确保满足项目需求和开发要求。 ### 回答3: Vue后台管理登录页模板是一种用于开发后台管理系统的界面模板,它提供了一套基本的登录页面布局和样式,可以作为开发者快速搭建后台管理系统的起点。 在互联网开发中,后台管理系统扮演着非常重要的角色,它是用于管理网站或应用程序的后台界面。Vue后台管理登录页模板的下载可以帮助开发者节省大量的时间和精力,因为它已经提供了一套完整的登录页面布局和样式,开发者只需根据自己的需求进行定制和修改即可。 Vue后台管理登录页模板通常包含了各种常见的登录相关的元素,如用户名输入框、密码输入框、记住密码选项、验证码输入框等,还包含了登录按钮、找回密码链接和注册链接等功能。 使用Vue后台管理登录页模板,开发者可以快速搭建一个美观、功能完善的登录页面,从而提升用户的登录体验和安全性。此外,模板还提供了一些常见的表单验证和交互效果,帮助开发者减少前端开发的复杂度。 通过下载Vue后台管理登录页模板,开发者可以直接引入到自己的项目中,并进行个性化的修改。这样,开发者不仅可以节省开发时间,还可以避免从零开始设计和实现登录页面所需的各种样式和功能。 总之,Vue后台管理登录页模板下载是一个方便开发者的工具,它可以帮助开发者快速搭建一个美观、功能完善的后台管理系统登录页面,提升开发效率和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值