精华内容
下载资源
问答
  • vue随机生成二维码

    2019-08-31 17:07:30
    vue随机生成二维码 今天接到一个任务就是在页面加入一个二维码,不同的用户有不同的二维码,搜了很多的资料最后搜到一个比较适合我的业务的 1. npm install qrcodejs2 2.引入代码 html <div id="qrcode" >&...

    vue随机生成二维码

    今天接到一个任务就是在页面加入一个二维码,不同的用户有不同的二维码,搜了很多的资料最后搜到一个比较适合我的业务的

    1. npm install qrcodejs2
    
    2.引入代码 html
    
    <div
       id="qrcode"
    ></div>
    
    3.引入js代码
    
    import QRCode from "qrcodejs2"
    export default {
      data () {
        return {
    
        }
      },
      mounted () {
        this.$nextTick(function () {
          this.qrcode();
        })
      },
      methods: {
        //  生成二维码
        qrcode () {
          var qrcode = new QRCode("qrcode", {
            width: 180,
            height: 180,
          });
          function makeCode () {
            qrcode.makeCode(localStorage.getItem('phone'));
          }
          makeCode();
        }
      },
    
    }
    
    4.css代码
    
    <style lang="less">
    #qrcode {
      margin-top: 15px;
    }
    //二维码居中
    img {
      margin: 0 auto;
    }
    </style>
    
    5.在想要引入的页面进行注册
    
     components: {
        Qrcode
      },
    
    6.组件的完整代码
    
    <template>
      <div>
        <div
          id="qrcode"
          style="margin: 0 auto;"
        ></div>
      </div>
    </template>
    <script>
    /* eslint-disable */
    import QRCode from "qrcodejs2"
    export default {
      data () {
        return {
    
        }
      },
      mounted () {
      //防止报错
        this.$nextTick(function () {
          this.qrcode();
        })
      },
      methods: {
        //  生成二维码
        qrcode () {
          var qrcode = new QRCode("qrcode", {
            width: 180,
            height: 180,
            // text: 'http://localhost:8080/#/index'
          });
          function makeCode () {
          //
            qrcode.makeCode("http://192.168.0.102:80/#/index?code=" + localStorage.getItem('phone'));
          }
          makeCode();
        }
      },
    
    }
    </script>
    <style lang="less">
    #qrcode {
      // width: 160px;
      // height: 160px;
      margin-top: 15px;
    }
    img {
      margin: 0 auto;
    }
    </style>
    
    
    展开全文
  • 本文实例为大家分享了vue随机验证码组件的具体代码,供大家参考,具体内容如下 由于工作需要自己做了一个验证码组件,灵活性不高,但是可以用,代码也不太复杂 ...
  • Vue 随机验证码功能

    2021-06-29 11:30:24
    一 Css 样式 <div class="form-group...input type="text" id="code" v-model="code" class="code" placeholder="请输入您的验证码" /> </div> <div class="login-code" @click="refreshCode">...

    一 Css 样式

    <div class="form-group" >

       <div>

       <span>验证码:</span>

       <input type="text" id="code" v-model="code" class="code" placeholder="请输入您的验证码" />

       </div>

       <div class="login-code" @click="refreshCode">

      <!--验证码组件-->

      <s-identify :identifyCode="identifyCode"></s-identify>

      </div>

     </div>

    二  js引入验证码组件 定义三个变量

    import SIdentify from '../components/sidentify'

    components: { SIdentify },

    data () {

      return {

    identifyCodes: "1234567890",

      identifyCode: "",

      code:"",//text框输入的验证码

     }

    },

    mounted 代码

    mounted(){

     this.identifyCode = "";

     this.makeCode(this.identifyCodes, 4);

    },

    .在created里初始化验证码

    mounted(){

     this.identifyCode = "";

     this.makeCode(this.identifyCodes, 4);

    },

    methods里添加以下方法

    mounted(){

     //验证码

    randomNum(min, max) {

     return Math.floor(Math.random() * (max - min) + min);

    },

    refreshCode() {

     this.identifyCode = "";

     this.makeCode(this.identifyCodes, 4);

    },

    makeCode(o, l) {

     for (let i = 0; i < l; i++) {

     this.identifyCode += this.identifyCodes[

      this.randomNum(0, this.identifyCodes.length)

     ];

     }

     console.log(this.identifyCode);

    },

    };

      

    插件代码  sidentify  

    <template>
     <div class="s-canvas">
     <canvas id="s-canvas" :width="contentWidth" :height="contentHeight"></canvas>
     </div>
    </template>
    <script>
    export default {
     name: 'SIdentify',
     props: {
     identifyCode: {
      type: String,
      default: '1234'
     },
     fontSizeMin: {
      type: Number,
      default: 25
     },
     fontSizeMax: {
      type: Number,
      default: 30
     },
     backgroundColorMin: {
      type: Number,
      default: 255
     },
     backgroundColorMax: {
      type: Number,
      default: 255
     },
     colorMin: {
      type: Number,
      default: 0
     },
     colorMax: {
      type: Number,
      default: 160
     },
     lineColorMin: {
      type: Number,
      default: 100
     },
     lineColorMax: {
      type: Number,
      default: 255
     },
     dotColorMin: {
      type: Number,
      default: 0
     },
     dotColorMax: {
      type: Number,
      default: 255
     },
     contentWidth: {
      type: Number,
      default: 112
     },
     contentHeight: {
      type: Number,
      default: 31
     }
     },
     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(-45, 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 < 5; 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 < 80; 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>
    <style scoped>
    .s-canvas {
     height: 38px;
     
    }
    .s-canvas canvas{
     margin-top: 1px;
     margin-left: 8px;
    }
    </style>

    展开全文
  • vue随机校验码

    2020-09-01 14:30:21
    验证码组件 <template>... id="s-canvas" :width="contentWidth" :height="contentHeight" @click="refreshCode" ></canvas> </div> </template> <script> expor.

     验证码组件

    <template>
      <div class="canvas-box">
        <canvas
          id="s-canvas"
          :width="contentWidth"
          :height="contentHeight"
          @click="refreshCode"
        ></canvas>
      </div>
    </template>
    <script>
    export default {
      name: 'sidentify',
      data() {
        return {
          identifyCode: ''
        };
      },
      props: {
        // 父组件双向绑定
        identifyValue: {
          type: String,
          default: ''
        },
        // 校验码生成规则,可以添加字母等
        identifyCodes: {
          type: String,
          default: '1234567890'
        },
        fontSizeMin: {
          type: Number,
          default: 25
        },
        fontSizeMax: {
          type: Number,
          default: 30
        },
        backgroundColorMin: {
          type: Number,
          default: 255
        },
        backgroundColorMax: {
          type: Number,
          default: 255
        },
        colorMin: {
          type: Number,
          default: 0
        },
        colorMax: {
          type: Number,
          default: 160
        },
        lineColorMin: {
          type: Number,
          default: 100
        },
        lineColorMax: {
          type: Number,
          default: 255
        },
        dotColorMin: {
          type: Number,
          default: 0
        },
        dotColorMax: {
          type: Number,
          default: 255
        },
        contentWidth: {
          type: Number,
          default: 112
        },
        contentHeight: {
          type: Number,
          default: 32
        }
      },
      model: {
        prop: 'identifyValue',
        event: 'change'
      },
      mounted() {
        this.refreshCode();
      },
      methods: {
        refreshCode() {
          this.identifyCode = '';
          this.makeCode(this.identifyCodes, 4);
        },
        makeCode(o, l) {
          for (let i = 0; i < l; i++) {
            this.identifyCode += this.identifyCodes[
              this.randomNum(0, this.identifyCodes.length)
            ];
          }
          this.$emit('change', this.identifyCode);
        },
        // 生成一个随机数
        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(-45, 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 < 5; 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 < 80; 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();
        }
      }
    };
    </script>
    <style scoped>
    .canvas-box {
      display: flex;
      align-items: center;
    }
    #s-canvas {
      cursor: pointer;
      margin-left: 8px;
    }
    </style>
    

    父组件

    <template>
      <div>
        <sidentify v-model="identifyValue"></sidentify>
      </div>
    </template>
    
    <script>
    export default {
      data() {
        return {
          identifyValue: ''
        };
      }
    };
    </script>

     

    展开全文
  • vue 随机动态验证码

    2020-02-22 13:20:04
    <canvas id="s-canvas" :width="contentWidth" :height="contentHeight"> export default{ name: 'SIdentify', props: { identifyCode: { //默认注册码 type: String, default: '1234' }, fontSizeMin:...
    <el-form-item prop="phoneCode" label="验证码">
      <el-input
        ref="phoneCode"
        v-model="loginForm.phoneCode"
        placeholder="请输入验证码"
        name="phoneCode"
        type="text"
        tabindex="1" //tab键切换
        auto-complete="on"
        style="width: 65%"
      />
      <div class="code" @click="refreshCode" style="float: right">
        <s-identify :identifyCode="identifyCode"></s-identify>
      </div>
    </el-form-item>
    <el-button :loading="loading" type="success" style="width: 81%;  margin-bottom: 10px;  letter-spacing: 5px; float: right;border-radius: 0;" @click.native.prevent="handleLogin">登录</el-button>
    import SIdentify from '../../components/page/identify'
    
    components:{
      SIdentify
    },
    data() {
      const validateUsername = (rule, value, callback) => {
        if (value.trim().length > 0) {
          callback()
        } else {
          callback(new Error('请输入用户名'))
        }
      };
      const validatePassword = (rule, value, callback) => {
        if (value.length < 6) {
          callback(new Error('密码不能少于6位'))
        } else {
          callback()
        }
      };
      const validatephoneCode = (rule, value, callback) => {
        if (value !== this.identifyCode) {
          callback(new Error('请输入正确的验证码'));
          //当错误时刷新验证码
          this.identifyCode = '';
          this.makeCode(this.identifyCodes, 4);
        } else {
          callback()
        }
      };
      return {
        identifyCodes: "1234567890",
        identifyCode: "",
        loginForm: {
          username: '',
          password: '',
          phoneCode: '',
        },
        loginRules: {
          username: [{ trigger: 'blur', validator: validateUsername }],
          password: [{ trigger: 'blur', validator: validatePassword }],
          phoneCode: [{trigger: true, validator: validatephoneCode }],//点击登录时校验,而不是在光标离开后校验
        },
        loading: false,
        passwordType: 'password',
        redirect: undefined,
        pasChecked:false
      }
    },
    watch: {
      $route: {
        handler: function(route) {
          this.redirect = route.query && route.query.redirect
        },
        immediate: true
      }
    },
    mounted() {
      this.identifyCode = "";
      this.makeCode(this.identifyCodes, 4);
      tokenUtils.getCookie()
    },
    methods: {
      randomNum(min, max) {
        return Math.floor(Math.random() * (max - min) + min);
      },
      refreshCode() {
        this.identifyCode = "";
        this.makeCode(this.identifyCodes, 4);
      },
      makeCode(o, l) {
        for (let i = 0; i < l; i++) {
          this.identifyCode += this.identifyCodes[
            this.randomNum(0, this.identifyCodes.length)
            ];
        }
      },
      showPwd() {
        if (this.passwordType === 'password') {
          this.passwordType = ''
        } else {
          this.passwordType = 'password'
        }
        this.$nextTick(() => {
          this.$refs.password.focus()
        })
      },
    
      changeChecked() {
        this.pasChecked = !this.pasChecked;
        this.handleLogin();
      },
      handleLogin() {
        //保存的账号
        let name=this.loginForm.username;
        //保存的密码
        let pass=this.loginForm.password;
        //判断复选框是否被勾选 勾选则调用配置cookie方法
        if(this.pasChecked == true){
          //传入账号名,密码,和保存天数3个参数
          tokenUtils.setCookie(name,pass,7);
        }else{
          tokenUtils.clearCookie()
        }
        this.$refs.loginForm.validate(valid => {
          if (valid) {
            this.loading = true;
            this.$store.dispatch('login_store', this.loginForm).then(response => {
              var res=response.data;
              console.log(res);
              if (res.status === 200){
                console.log('用户名密码和验证码',this.loginForm);
                console.log('验证码图片中数字',this.identifyCode);
                this.loading = false;
                this.$router.push({ path: '/' })
              }else {
                Message({
                  message: res.message,
                  type: 'error',
                  duration: 800
                })
              }
              this.loading = false
            }).catch(() => {
              this.loading = false
            })
          }
        });
      },
    

    /components/page/identify文件

    <template>
      <div class="s-canvas">
        <canvas id="s-canvas" :width="contentWidth" :height="contentHeight"></canvas>
      </div>
    </template>
    <script>
      export default{
        name: 'SIdentify',
        props: {
          identifyCode: { //默认注册码
            type: String,
            default: '1234'
          },
          fontSizeMin: { // 字体最小值
            type: Number,
            default: 25
          },
          fontSizeMax: { // 字体最大值
            type: Number,
            default: 35
          },
          backgroundColorMin: { // 验证码图片背景色最小值
            type: Number,
            default: 200
          },
          backgroundColorMax: {  // 验证码图片背景色最大值
            type: Number,
            default: 220
          },
          dotColorMin: { // 背景干扰点最小值
            type: Number,
            default: 60
          },
          dotColorMax: { // 背景干扰点最大值
            type: Number,
            default: 120
          },
          contentWidth: { //容器宽度
            type: Number,
            default: 85
          },
          contentHeight: { //容器高度
            type: Number,
            default: 32
          }
        },
        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(50, 160) //随机生成字体颜色
            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)
            // 修改坐标原点和旋转角度
            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 < 4; i++) {
              ctx.strokeStyle = this.randomColor(100, 200)
              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 < 30; 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>
    

     

    点击图片切换数字,并在输入错误后点击登录会刷新验证码

    展开全文
  • 一、验证码组件 ...canvas width="112" height="38" id="verifyCanvas"></canvas> </div> <img id="code_img" @click="refreshCode"> </div> </template> <scrip
  • Vue实现随机点名

    千次阅读 2020-07-07 00:49:29
    Vue实现随机点名 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>...
  • 本文介绍了vue生成随机验证码的示例代码,分享给大家,具体如下: 样式自调,最终效果如图: 实现效果: 点击右边input框会自动切换,如果输入的值与字不同,则清空换一串随机数 HTML <input type="text" ...
  • 插件shortID生成随机ID 如何使用: 1.在webstorm项目中右击,Open in Terminal 2.输入npm i shortid --save 安装对应的插件 npm i shortid --save 3.在要使用的组件中导入 4.shortId.generate() import shortId ...
  • vue 简单随机点名效果

    2021-01-14 11:42:02
    <template> <div class="random"> <span id="adopt">开始点名</span>...{ name: ‘余光中’, id: 1 }, { name: ‘郑愁予’, id: 2 }, { name: ‘戴望舒’, id: 3 }, { name: ‘乐毅’, id
  • 1、安装 1.项目终端中输入 ...3.定义数组,根据需要配合的数组或对象创建相应数量的id,这里需要使用到插件中的方法**shortid.generate()** 2、使用方法举例 <template> <div class="hello"> <ul.
  • 情况是这样子的,每周四是我们小组打扫卫生,一共有四件活,7个人分配。...所以跟小组长提出,随机分配、 #需求:  每个人随机选择自己的工作  按数组排列 7个人  打乱顺序 显示到页面即可  ...
  • Vue实现随机验证码功能

    千次阅读 2020-12-28 15:09:06
    步骤1 创建一个名为identify.vue的子组件 <template> <div class="s-canvas"> <canvas id="s-canvas" :width="contentWidth" :height="contentHeight"></canvas> </div> </...
  • vue生成随机订单号

    千次阅读 2020-03-13 11:11:01
    data() { return { isSign: false, signSrc: '', clientHeight: '', uid: null, } }, //第一种简单的 生成随机订单号,时间+日期,格式为:20200313123456,这种数据量大的时候有可能会重复 order_nums() { var ...
  • vue四位随机验证码

    2020-12-10 16:47:03
    1、新建生成验证码的组件Sidentify.vue(代码如下): 下面展示一些 内联代码片。 <template> <div class="s-canvas"> <canvas id="s-canvas" :width="contentWidth" :height="contentHeight"><...
  • 先给大家展示下效果图: ... 验证码: <input type=text id=code v-model=code class=code placeholder=请输入您的验证码 /> <!--验证码组件--> <s-identify :identifyC
  • Vue实现随机点名

    千次阅读 2020-05-20 10:58:24
    "> (v, i) in students" :key="i" :class="{ active: selectedStudentIndexs.includes(i) }">{{ v }}</li> </ul> </div> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> ...
  • vue-unique-id Vue.js插件,可生成在表单输入,标签,...另外,此插件还会为每个Vue.js组件生成一个唯一的id属性(默认情况下为uid)。 该插件没有外部依赖性。 通过npm安装(节点软件包管理器)$ npm install vue
  • 效果图: 1.html代码 验证码: <input type=text id=code v-model=code class=code placeholder=请输入您的验证码 /> <!--验证码组件--> <s identifyCode=identifyCode></
  • sidentify.vue组件代码: 代码: 1 < template > 2 < div class ="s-canvas" > 3 < canvas id ="s-canvas" :width ="contentWidth" :height ="contentHeight" > canvas > 4 div > ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,915
精华内容 2,766
关键字:

vue随机id

vue 订阅