微信公众号新人欢迎语消息推送

问题记录

1.使用的vue2  对象新增属性不具备响应性

 this.$set(item, 'miniTitle', item.title)
this.$set(item, 'miniPagepath', item.pagepath)

2.使用wangeidtor4.6.0富文本组件,富文本组件更改后,值不会马上双绑到自己的值上面

使用onchange进行绑定

<template><div class="hy-editor"><!-- 富文本编辑框 --><div :id="id"></div></div>
</template>
<script>
import E from 'wangeditor'
export default {name: 'MessageEditor',data() {return {wEditor: '',}},props: {content: {type: String},id: {type: String,required: true,},isDisabled: {type: Boolean,required: false,},},methods: {//获取编辑器中内容getContent() {return this.wEditor.txt.html()},setContent(content) {this.wEditor.txt.html(content)},clearContent() {this.wEditor.txt.clear()},},mounted() {this.wEditor = new E('#' + this.id);this.wEditor.config.showFullScreen = false;this.wEditor.config.emotions = [{// tab 的标题title: '表情',type: 'emoji',// content -> 数组content: '❤️ ☀️ ✊'.split(/\s/),},]this.wEditor.config.menus = ['emoticon', // 表情]this.wEditor.config.fontNames = ['宋体', '微软雅黑', '黑体', '楷体', '仿宋', '华文行楷', '华文楷体', '方正兰亭黑体'];this.wEditor.config.maxLength = 500;// 创建一个富文本编辑器this.wEditor.create()// 富文本内容this.wEditor.txt.html(this.content)this.wEditor.config.onchange = (html) => {this.$emit('changeEditor', html);}// 设置富文本内容不可编辑let That = this;if (this.isDisabled) {this.$nextTick(() => {That.wEditor.disable();});}}
}
</script>
 <MessageEditor v-if="msg.msgTypeStr === '文本消息'":class="['message-editor', action === 'view' ? 'disabled' : '']":ref="'messageEditor' + msg.id" :id="id + msg.id" :isDisabled="action === 'view'":content="msg.content" @changeEditor="changeEditor(arguments, msg.id)" />...changeEditor(html, id) {if (html.length > 0) this.tabsData.forEach(item => {let messageEditor = this.$refs['messageEditor' + item.id] && this.$refs['messageEditor' + item.id][0];if (messageEditor && id === item.id) {item.content = html[0];}});},

3.图片上传后,接口返回了url但是图片没有回显

如果是循环的多个el-upload,所有子元素一定要绑定id并记录,上传后才能进行对应回显

                        <el-upload v-loading="isLoading" ref="mediaidUploader" :disabled="action === 'view'"v-if="msg.msgTypeStr === '图片消息'":class="['image-msg-uploader', action === 'view' ? 'disabled' : '']" :auto-upload="false"action="#" :show-file-list="false" :limit="1" :http-request="submitUpload"accept=".jpg,.jpeg,.png" :on-change="handleChange" :on-exceed="handleExceed":before-upload="beforeImageMsgUpload"><img v-if="msg.mediaUrl" :src="msg.mediaUrl" class="image-url" @click="setUploadId(msg.id)"><i v-if="!msg.mediaUrl" class="el-icon-plus image-msg-uploader-icon"@click="setUploadId(msg.id)"></i><div v-if="!msg.mediaUrl" @click="setUploadId(msg.id)">点击上传图片</div><div v-if="!msg.mediaUrl" class="el-upload__tip" slot="tip" @click="setUploadId(msg.id)">大小不超过10M,支持JPG、PNG格式</div></el-upload>

因为是循环的多个组件上传,所以找到对应id进行设置url,但是需要记录id,且给el-upload下面所有 元素绑定点击事件进行记录(否则可能点击的元素没有记录id上传方法里面就不会重新给imageUrl赋值)

        /*** 记录当前上传图片的id*/setUploadId(id) {this.currentId = id;},/*** 上传素材*/async submitUpload({ file }) {let formData = new FormData();formData.append("file", file);formData.append("type", "image");formData.append("appid", this.appId);this.isLoading = true;const { code, msg, result } = await uploadMedia(formData);if (code === 0) {this.tabsData.map((item => {if (item.id === this.currentId) {item.mediaId = result.mediaId;item.mediaUrl = result.mediaUrl;}}));this.isLoading = false;this.$message.success('上传成功');} else {this.isLoading = false;this.$message.error(msg)}},

4.elementUI的日期时间组件(开始时间/结束时间),当天之前不可点击,精确到时分秒

使用el-date-picker的数组形式没有实现,只能分开写

                                    <el-form-item label='时间范围' style="display: inline-block"><el-form-item prop="taskStartTime" style="display: inline-block"><el-date-picker :disabled="isPermanentDisabled"v-model="messageHandleForm.taskStartTime" type="datetime"placeholder="开始时间" default-time="00:00:00" @blur="endTimeBlur":picker-options="pickerOptions" value-format="timestamp"></el-date-picker></el-form-item><el-form-item style="display: inline-block">~</el-form-item><el-form-item prop="taskEndTime" style="display: inline-block"><el-date-picker :disabled="isPermanentDisabled" @blur="endTimeBlur"v-model="messageHandleForm.taskEndTime" type="datetime"placeholder="结束时间" default-time="23:59:59":picker-options="pickerOptions" value-format="timestamp"></el-date-picker></el-form-item></el-form-item>
        var validateTaskStartTime = (rule, value, callback) => {if(this.messageHandleForm.permanent === 1){if(value === ''){return callback(new Error('请选择开始时间'));}else{callback();}}else{callback();}};var validateTaskEndTime = (rule, value, callback) => {if(this.messageHandleForm.permanent === 1){if(value === ''){return callback(new Error('请选择结束时间'));}else{callback();}}else{callback();}};
 validateTaskStartTime, //时间范围校验方法validateTaskEndTime, //时间范围校验方法rules: {taskStartTime: [{ required: true, type: 'date', validator: validateTaskStartTime, trigger: 'change' }],taskEndTime: [{ required: true, type: 'date', validator: validateTaskEndTime, trigger: 'change' }],
}
        endTimeBlur() {console.log(this.messageHandleForm.taskEndTime,this.messageHandleForm.taskStartTime,"endTimeBlur");if (this.messageHandleForm.taskEndTime !== '' && this.messageHandleForm.taskStartTime !== '' && this.messageHandleForm.taskEndTime <= this.messageHandleForm.taskStartTime) {this.$message.warning("结束时间必须大于开始时间");}},

5.多个el-tab卡片维护一个对象的数据,且其中两个卡片数据字段使用的相同

数组传入到子组件前就对数据进行拆分;保存数据时对数据进行合并

                    if(this.messageHandleForm.replyInfoList.length>0){this.messageHandleForm.replyInfoList.forEach(item=>{if(item.msgType === 6){this.$set(item, 'miniTitle', item.title)this.$set(item, 'miniPagepath', item.pagepath)item.title = '';item.pagepath = '';}else if(item.msgType === 1){this.$set(item, 'miniTitle', '')this.$set(item, 'miniPagepath', '')}});}
                    item.title = item.miniTitle;item.pagepath = item.miniPagepath;

6.微信公众号平台规定

文本消息不能有图片,只能有文字,链接、表情包等。

文本消息的链接只能有一个;

这个表情包不能是gif这种,而且必须是微信那一套表情包;

Vue组件富文本组件的表情包和微信表情包的不通用,需要自己手动配置成微信的,且不同版本配置不一样;

图片消息和小程序卡片消息对图片的格式和大小都有不同限制

    this.wEditor.config.emotions = [{// tab 的标题title: '表情',type: 'emoji',// content -> 数组content: '❤️ ☀️ ✊'.split(/\s/),},]

7.一种复杂表单的校验写法

 :prop="'seedDropRules.' + index + '.taskGroupId'" :rules="rules['taskGroupId']" 

8.微信小程序链接,后端推送使用的格式

后端必须通过?来截取H5页面还是小程序的中转地址,所以需要使用一些在线URLDecode转换工具将link后面的进行转义:

比如:pages/newHomeMain/transfer/index?link=https://www-test.heyejk.com/heye-h5/transfer?type=7&template=template3&pageId=340

就需要转成:


pages/newHomeMain/transfer/index?link=https%3A%2F%2Fwww.heyejk.com%2Fheye-h5%2Ftransfer%3Ftype%3D7%26template%3Dtemplate3%26pageId%3D59&toH5=1

9.vue项目实现滚动到顶部

如果没有层级因素,可以直接获取元素,然后滚动到元素的顶部

提示错误时,是否要跳到错误区域(跳到顶部):这里主要是body设置了100%,导致app和app-main里面的高度100%是跟随body的,所以设置body里面的scrollTop不生效this.$nextTick(() => {document.documentElement.scrollTop = 0;document.body.scrollTop = 0;})

10.el-tabs传递多个参数

el-tabs传递多个参数:
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="(tab, event) => { handleClick(tab, event, 'bb') }"><el-tab-pane v-for="(item,index) in array" :label="item.label" :name="item.name" >{{item.label}}</el-tab-pane>
</el-tabs>

11.富文本框报错

bug:添加时富文本没有出来,报错初始化节点已存在编辑器实例,无法重复创建编辑器 ok 解决方案:给一个动态的ref值
富文本报错2: 错误:初始化编辑器时候未传入任何参数,请查阅文档。miniappDialogForm数据的v-model有问题

解决:使用的一个富文本框实例,数据混乱,将富文本框抽成组件即可

12.校验图片尺寸

        // 图片格式校验(支持JPG格式)beforeImageMsgUpload(file) {// 解决图片上传不显示问题this.thumbMediaUrl = URL.createObjectURL(file);const isJPG = file.type === 'image/jpg' || file.type === 'image/jpeg';if (!isJPG) {this.$message.error('上传失败,请上传jpg格式图片');}// 校验尺寸 fileconst isSize = new Promise(function (resolve, reject) {let _URL = window.URL || window.webkitURL;let image = new Image();image.onload = function () {let valid = image.width <= 520 && image.height <= 416;valid ? resolve() : reject();};image.onerror = function () {this.$message.error("无法加载图片");};image.src = _URL.createObjectURL(file);}).then(() => {Promise.resolve();return file;},() => {this.$message.error("上传图片尺寸不符合,尺寸必须为520*416以内");return Promise.reject();});return isJPG && isSize;},

13.校验图片大小

        beforeImageMsgUpload(file) {// 解决图片上传后不显示问题this.tabsData.map((item => {if (item.id === this.currentId) {item.mediaUrl = URL.createObjectURL(file);}}));const isJPGOrPNGorJPEG = file.type === 'image/jpg' || file.type === 'image/jpeg' || file.type === 'image/png';const isLt10M = file.size / 1024 / 1024 < 10;if (!isJPGOrPNGorJPEG) {this.$message.error('上传失败,请上传jpg、png格式图片');}if (!isLt10M) {this.$message.error('上传失败,缩略图大小不能超过 10MB!');}return isJPGOrPNGorJPEG && isLt10M;},

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/779647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

芒果YOLOv5改进87:轻量化检测头篇:LiteShiftHead 独家原创检测头 | 即插即用,大幅减少参数量,轻量化的同时精度更高效涨点,全网独家改进

💡本篇内容:芒果YOLOv5改进87:轻量化检测头篇:LiteShiftHead 独家原创检测头 | 即插即用,独家新颖更新,大幅减少参数量,轻量化的同时精度高效涨点,全网独家 芒果专栏提出多种原创的轻量化检测头 LiteShiftHead 结构,改进源码教程 | 详情如下🥇 同时本文将演示说清楚二…

Python 和 Go:一文了解

Python 和 Go 各具特色&#xff0c;能够互补。 有一个常见的误解认为 简单&#xff08;simple&#xff09;和 容易&#xff08;easy&#xff09;指的是同一件事。毕竟&#xff0c;如果某样东西易于使用&#xff0c;那么其内在机制必须也简单易懂&#xff0c;对吗&#xff1f;或…

1332多元bfs

/* 多元bfs就是从多个点开始&#xff0c;开始的时候多往初始队列放几个进去 距离数组中最好初始化为-1&#xff1b;然后再起点入队时赋值为0 */ #include<bits/stdc.h> using namespace std; int dx[4]{0,1,0,-1}; int dy[4]{1,0,-1,0}; int f[510][510],dist[510][510];…

math模块篇(五)

文章目录 math.remainder(x, y)math.sumprod(p, q)math.trunc(x)math.ulp(x)math.cbrt(x)math.exp(x)math.exp2(x)math.expm1(x) math.remainder(x, y) math.remainder(x, y) 是 Python 3.8 版本中新增的一个函数&#xff0c;用于计算两个数 x 和 y 相除后的余数。这个函数的行…

Python中的文件读取与保存

1、文件的读取 常用的函数&#xff1a; 1. open()&#xff1a;用于打开文件&#xff0c;可以指定不同的模式&#xff08;读取、写入、追加等&#xff09;来操作文件内容。 2. write()&#xff1a;用于将数据写入文件。 3. close()&#xff1a;用于关闭文件&#xff0c;确保文件…

C++ set 常用部分

文章目录 关键特性定义及初始化一些基本操作查找插入删除清空遍历lower_bound()、upper_bound()set与unordered_set的区别 关键特性 唯一性&#xff1a;Set容器内的元素都是唯一的&#xff0c;每个元素都是不同的有序性&#xff1a;Set容器内的元素总是排序的&#xff08;C中默…

electron+VUE Browserwindow与webview通信

仅做记录 前言&#xff1a; electronVUEVITE框架&#xff0c;用的是VUE3.0 主进程定义&#xff1a;用于接收webview发送的消息 ipcMain.on(MyWebviewMessage, (event, message) > {logger.info(收到webmsg message)//转发给渲染进程}) porelaod/webPreload.js定义 cons…

C语言编译与链接

前言 我们想一个问题&#xff0c;我们写的C语言代码都是文本信息&#xff0c;电脑能直接执行c语言代码吗&#xff1f;肯定不能啊&#xff0c;计算机能执行的是二进制指令&#xff0c;所以将C语言转化为二进制指令需要一段过程&#xff0c;这篇博客讲一下编译与链接&#xff0c;…

跨域问题详解(vue工程中的解决办法)

目录 1. 什么是跨域 2. 如何解决跨域问题 1. 配置request.js 2. 配置vite.config.js 1. 什么是跨域 跨域问题指的是当一个网页的源&#xff08;origin&#xff09;与另一个网页的源不同时&#xff0c;浏览器出于安全考虑&#xff0c;会限制页面中的跨域请求。源是由协议、主…

五种主流数据库:高级分组

除了基本的分组功能之外&#xff0c;GROUP BY 子句还提供了几个高级选项&#xff0c;可以用来实现更复杂的报表功能。 本文比较五种主流数据库实现的高级分组功能&#xff0c;包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。 功能MySQLOracleSQL ServerPostgreSQL…

Day26 手撕各种集合底层源码(一)

Day26 手撕各种集合底层源码&#xff08;一&#xff09; 一、手撕ArrayList底层源码 1、概念&#xff1a; ArrayList的底层实现是基于数组的动态扩容结构。 2、思路&#xff1a; 1.研究继承关系 2.研究属性 3.理解创建集合的过程 – 构造方法的底层原理 4.研究添加元素的过程…

vue实现把Ox格式颜色值转换成rgb渐变颜色值(开箱即用)

图示&#xff1a; 核心代码&#xff1a; //将0x格式的颜色转换为Hex格式&#xff0c;并计算插值返回rgb颜色 Vue.prototype.$convertToHex function (colorCode1, colorCode2, amount) {// 确保输入是字符串&#xff0c;并检查是否以0x开头let newCode1 let newCode2 if (t…

关系型数据库mysql(5)存储引擎

目录 一.存储引擎的概念 二. MyISAM 和 InnoDB 2.1MyISAM介绍 2.2MyISAM支持的存储格式 2.2.1静态表&#xff08;固定长度表&#xff09; 2.2.2动态表 2.2.3压缩表 2.3场景举例 2.4.InnoDB 2.4.1场景举例 2.4.2企业选择存储引擎依据 三.查看存储引擎 3.1查看当前数…

IMU预积分【SLAM】

前言 预积分的推导过程比较多&#xff0c;所以这里只记录关键结论。 其实这些公式不太好记忆&#xff0c;因为预积分推导过程的想法来源很巧妙&#xff0c;无法看出物理意义。 预积分定义式&#xff08;必须记住&#xff09; 一切推导的来源&#xff1a; 最好记忆的旋转相对…

c语言教务成绩管理系统1000+

定制魏:QTWZPW,获取更多源码等 目录 题目 代码主函数 教务信息头文件 题目 编写一个C语言程序,实现一个教务成绩管理系统,至少能够管理30条学生信息。其中: 1)学生信息包括:基本信息和成绩信息。 2)基本信息包括:班级,学号,姓名,性别,专业,普通课程选修数…

C++中的STL简介与string类

目录 STL简介 STL的版本 STL的六大组件 string类 标准库中的string类 string类的常用接口 string类对象对容量的操作 size()函数与length()函数 capacity()函数 capacity的扩容方式 reserve()函数 resize()函数 string类对象的操作 push_back()函数 append()函数 operator()函数…

【01-20】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了

【01-20】计算机网络基础知识&#xff08;非常详细&#xff09;从零基础入门到精通&#xff0c;看完这一篇就够了 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用1、OSI 的七层模型分别是&#xff1f;各自的功能是什么&#xff1f;2、说一下一次完整的HTTP请求…

1688中国站按关键字搜索工厂数据 API

公共参数 名称类型必须描述keyString是申请免费调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_shop等]cacheString否[yes,no]默认y…

记录何凯明在MIT的第一堂课:神经网络发展史

https://www.youtube.com/watch?vZ5qJ9IxSuKo 目录 表征学习 主要特点&#xff1a; 方法和技术&#xff1a; LeNet 全连接层​ 主要特点&#xff1a; 主要特点&#xff1a; 网络结构&#xff1a; AlexNet 主要特点&#xff1a; 网络结构&#xff1a; Sigmoid Re…