关于自己在vue2.0中遇到的一些问题

638 阅读2分钟

vue-canvas-poster的生成海报

安装:npm i vue-canvas-poster --save

方法一:main.js中使用

import VueCanvasPoster from 'vue-canvas-poster'
Vue.use(VueCanvasPoster)

方法二:组件中直接使用

在template模板中

<vue-canvas-poster :widthPixels="1000" :painting="painting" @success="success" @fail="fail" ></vue-canvas-poster>
<img :src="posterImg" v-if='posterImg' :style="{width: clientWidth*0.6+'px',height: clientWidth*2.16*0.6+'px'}">

1. 首先获取屏幕的宽度,对生成的图片等比缩放,我这里是将海报图的宽高同时缩放0.6倍以后再等比缩放的,2.16为 海报的height/海报的width

2. clientWidth 为 clientWidth:document.documentElement.clientWidth

3. 重点是画布也要按照海报图等比缩放,不然画上的头像或者txt文字会失真,模糊

假定设置画布宽为500 时,高度也要缩放到海报的宽高比

posterImg: '',//生成的海报
        painting: {
            width: '500px',
            height: `${500*2.16}px`,
            background: require('../assets/images/bg.jpg'),
            views: [{
                type: 'image',
                url: '',
                css: {
                    top: '460px',
                    left: '210px',
                    borderRadius: '100px',
                    width: '100px',
                    height: '100px',
                },
            }, {
                type: 'text',
                text: '',
                css: {
                    top: '565px',
                    left: `${260-260/2}px`,
                    width: '260px',
                    color:'#fff',
                    maxLines: 1,
                    fontSize: '32px',
                    textAlign:'center'
                },
            }, {
                    type: 'qrcode',
                    content: '',
                    css: {
                        bottom: '200px',
                        right: '150px',
                        color: '#000',
                        background: '#fff',
                        width: '190px',
                        height: '190px',
                        borderWidth: '10px',
                        borderColor: '#fff'
                    },
            },],
      },

获取海报内容填充视图

let {data}=await this.$fetch.getShareCode({shareId:'',founderId:this.founderId})//获取分享码,分销商shareId为空字符串
this.painting.views[0].url=data.avatar;
this.painting.views[1].text=data.nick;
this.painting.views[2].content=`${baseUrl}/web/Home?shareId=${data.shareId}`;

效果图即为

;

使用qrcodejs2生成二维码有的手机长按无法识别和转发的问题

方法也比较简单就是将画布隐藏,生成的base64的图片地赋值到自己新建的img标签中

	<template>
    	 <div id="qrcode" style='display:none'></div> 
          <img src="../assets/images/qiye2.png" style='display:none' id="myLogo" /> //二维码logo
          <div id="codeDiv"></div>
    </template>
  createAddCode(qrcodeValue){
        let qrcode =new QRCode(document.getElementById('qrcode'), {
              render: qrcodeValue,
              text: 'xxxxx',
              width: 150,
              height: 150,
              colorDark: "#000",
              colorLight: "#ffffff",
              correctLevel : QRCode.CorrectLevel.H
         });
        //  $("#qrcode canvas")[0].getContext('2d').drawImage($("#myLogo")[0], (qrWidth - logoQrWidth) / 2, (qrHeight - logoQrHeight) / 2, logoQrWidth, logoQrHeight);
        this.$nextTick(() => {
          let canvas = document.getElementsByTagName('canvas')[0];
          var qrWidth = 150;
          var qrHeight = 150;
          var logoQrWidth = qrWidth / 4;
          var logoQrHeight = qrHeight / 4;
          //再二维码中间放置一个logo
          canvas.getContext('2d').drawImage(document.getElementById('myLogo'), (qrWidth - logoQrWidth) / 2, (qrHeight - logoQrHeight) / 2, logoQrWidth, logoQrHeight);
          let img = this.convertCanvasToImage(canvas)
          let box = document.getElementById('codeDiv');
          box.append(img)
        })
    },

效果图

vue 部署服务器 history路由白屏问题

在 router.js中配置

   de:'history',
  base: '/web',

在 vue.config.js中配置 publicPath: '/web'

const path = require("path");
module.exports = {
  // 如果你不需要使用eslint,把lintOnSave设为false即可
  lintOnSave: false,
  // 设为false打包时不生成.map文件
  productionSourceMap: false,
  //   baseUrl: "/", // 基本路径
  pluginOptions: {
    "style-resources-loader": {
      preProcessor: "less",
      patterns: [
        // 这个是加上自己的路径,不能使用(如下:alias)中配置的别名路径
        path.resolve(__dirname, "./src/style/theme.less"),
      ]
    }
  },
  css: {
    loaderOptions: {
      css: {},
      postcss: {
        plugins: [
          // 补全css前缀(解决兼容性)
          require("autoprefixer")(),
          // 把px单位换算成rem单位
          require("postcss-pxtorem")({
            rootValue: 75, // 换算的基数(设计图750的根字体为32)
            selectorBlackList: [".van", ".my-van"], // 要忽略的选择器并保留为px。
            propList: ["*"], // 可以从px更改为rem的属性。
            minPixelValue: 2 // 设置要替换的最小像素值。
          })
        ]
      }
    }
  },
  publicPath: '/web',
  outputDir: "dist",
  devServer: {
    /* 自动打开浏览器 */
    open: true,
    /* 设置为0.0.0.0则所有的地址均能访问 */
    host: "localhost",
    port: 80,
    https: false,
    hotOnly: false,
    disableHostCheck: true,
    /* 使用代理 */
    proxy: {
      "/api": {
        target: "xxx"
        changeOrigin: true,
        secure: false,
        pathRewrite: {
          "^/api": ""
        }
      }
    }
  }
};

服务器端配置 转载 blog.csdn.net/weixin_4339…

help help help 有个问题,openid的获取是转发一个链接后台写入到cookie ,我只有部分接口用到,因为使用场景不同,我退出需要清除openid,我不想每次都去判读openid是否存在,如果不放拦截里我该如何解决,只要openid不存在就先去转发链接,再去获获取数据,希望大佬指点。。给与精神上的帮助!!