小程序钉钉语音录入组件
前言
本文章的代码,主要针对于钉钉上小程序的开发,实现语音录入转化为文本的功能。如有什么问题欢迎留言交流。
注意:
本功能只有钉钉Version4.6.5以后的版本才支持,目前钉钉的小程序开发工具v0.26.0-beta.3版本上暂时不支持此功能,会导致报错。需要将本代码有关语音的部分注释掉,当在真机上预览或发布的时候放开注释掉的代码即可。我相信后续钉钉应该会完善对应的支持,如果你的版本已经支持,无需看本条提示。
代码效果
引入组件的页面
//.axml页面
//使用组件
<speech label="备注(可选)" keyName="remarks" placeholder="请按住语音图片录入语音..." maxlength="100" onChange="onChange"/>//.json页面
{"usingComponents": {//引用speech组件"speech": "/component/speech/speech",}
}
speech组件代码
//speech .axml文件
<view class="speechInputBox"><view class="labelBox"><view class="{{required?'labelSpeech dingding-required':'labelSpeech'}}">{{label}}</view></view><textarea value="{{value}}" onBlur="onBlur" placeholderClass="placeholder" onInput="onItemInput" maxlength="{{maxlength}}" placeholder="{{placeholder}}" auto-height placeholder="自动变高" />
<view class="speech" data-index="{{currentIndex}}"><image onTouchStart="startRecord" onTouchEnd="stopRecord" src="{{isHold?'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1545977468089&di=e84e59b12acbaef93c912c282b2f43c7&imgtype=0&src=http%3A%2F%2Fpic.58pic.com%2F58pic%2F12%2F06%2F32%2F58PIC1B58PICEQa.jpg':'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1545977468000&di=eb455dbd345f76f6ca613bce1ad29020&imgtype=0&src=http%3A%2F%2Fimg.zjbiz.net%2Fupload%2Fproduct%2F2016p1%2F2016062312%2F22916.png'}}"/>
</view><view class="errorMessageSpeech" hidden="{{errorMessage===''?true:false}}">{{errorMessage}}</view>
</view>//speech .js文件
let rm = dd.getRecorderManager();
Component({mixins: [{didMount() {this.handleValidated(this.data.value)this.props.onChange({ "keyName": this.props.keyName, "value": this.data.value, "validated": this.data.validated, "currentIndex": this.props.currentIndex })},}],data: {value: "",errorMessage: "",validated: true,//验证是否通过,通过为true,否则为false isHold: false,//是否在录音},props: {label: "",keyName: "",currentIndex: "",maxlength: "100",placeholder: "",required: false,isSubmit: false,onChange: (data) => {}},didUpdate(prevProps, prevData) {if (this.props.required) {//点击确定if (this.props.isSubmit) {if (this.data.value === "") {this.setData({errorMessage: "必填项,请输入",})} else {this.setData({errorMessage: "",})}}}},didUnmount() { },methods: {handleValidated(value) {if (this.props.required == "true") {if (this.data.value && this.data.value != "") {this.setData({ validated: true })} else {this.setData({ validated: false })}}},onBlur(e) {this.setData({ value: e.detail.value })this.handleValidated(this.data.value)this.props.onChange({ "keyName": this.props.keyName, "value": this.data.value, "validated": this.data.validated, "currentIndex": this.props.currentIndex })},onItemInput(e) {this.setData({value: e.detail.value,})this.handleValidated(this.data.value)this.props.onChange({ "keyName": this.props.keyName, "value": this.data.value, "validated": this.data.validated, "currentIndex": this.props.currentIndex })},startRecord(event) {//开始录音rm.start({ duration: 30 }); //最长录音时间为30sthis.setData({ isHold: true })},stopRecord(event) {//停止录音this.setData({ isHold: false })let self =this;rm.stop();rm.onstop = (res) => {console.log("res.tempFilePath in on stop:", res.tempFilePath);dd.uploadFile({url: '上传到远程的路径',fileType: 'audio',fileName: 'file',filePath: res.tempFilePath,formData: { info: res.tempFilePath },//上传到远程的参数success: res => {//上传后后台解析后的语音文本let data= JSON.parse(res.data);if (data.code ==200) {self.setData({ value: recordInfo.data });this.props.onChange({ "keyName": this.props.keyName, "value": recordInfo.data, "validated": this.data.validated, "currentIndex": this.props.currentIndex })}},fail: function(res) {console.log('fail in onstop : ', JSON.stringify(res))},});}},},
})//speech .acss
.speechInputBox{padding: 32rpx;background: white;
}
.labelBox{display: flex;flex-direction:row;justify-content: space-between;
}
.speech{text-align: center;
}
.speech image{width: 104rpx;height: 104rpx;}
.labelSpeech{width: 40%;font-size:30rpx;font-weight:500;color:rgba(25,31,37,1);margin-bottom: 24rpx;
}
textarea{font-size: 30rpx;margin-left: -12rpx;
}.errorMessageSpeech{display: block;color: red;margin-left:26%;font-size: 25rpx;padding-bottom: 20rpx;background: white;
}
.placeholder{ color:#B3B3B3; font-size:28rpx;
}//speech .json
{"component": true
}
小程序钉钉语音录入组件相关推荐
- 微信小程序转钉钉小程序适配问题
与阿里云项目合作,作为ISV,不能使用腾讯系产品,必须将微信小程序转成钉钉小程序. 经过12天的艰苦奋斗,基本完成.将经验教训整理一下给大家. 不支持wxs,无法自定义页面函数 很方便的{{mc.to ...
- ngrok内网穿透工具搭建,方便微信公众号,小程序、钉钉等开发【已投入使用】
前言:微信公众号,小程序.钉钉等开发需要内网穿透工具. 1.经过不断的摸索和调试,完成ngrok内网穿透的工具的搭建,对于微信公众号,小程序.钉钉等开发提供便利性. 2.搭建环境Linux cento ...
- uniapp小程序文字与语音互相转化
小程序文字与语音互相转化 插件名称: 微信同声传译 插件使用 文字转语音功能 语音转文字 总结 插件名称: 微信同声传译 微信同声传译由微信智聆语音团队.微信翻译团队与公众平台联合推出的同传开放接口, ...
- 微信小程序开发03-这是一个组件
编写组件 基本结构 接上文:微信小程序开发02-小程序基本介绍 我们今天先来实现这个弹出层: 之前这个组件是一个容器类组件,弹出层可设置载入的html结构,然后再设置各种事件即可,这种组件有一个特点: ...
- 微信小程序如何封装自己的组件?
在现在前端领域,最常见的话语就是组件化.工程化的内容.所有的框架都在朝着这方面发展.作为前端生态中的新兴热人物小程序的出现,同样支持组件化开发. 在我们的日常开发中,可以封装一些常用的组件达到复用效果 ...
- 小程序日期加时间筛选组件
小程序日期加时间筛选组件 新建component->date-time-picker .wxml <picker mode="multiSelector" class= ...
- 微信小程序,自定义导航栏组件
微信小程序,自定义导航栏组件,可兼容iPhone 11及以上留海屏显示,关于参数获取设置参照微信小程序-收藏_羽筠的博客-CSDN博客 可定义设置的内容如下: 文字及返回箭头颜色 背景图片(优先级高于 ...
- 微信小程序简易搭建之框架/组件库
微信小程序简易搭建之框架/组件库 Vant weapp 下面看看如何导入 https://github.com/youzan/vant-weapp 使用教程: 1.下载后找到dist 2. 在你的项目 ...
- 微信小程序学习笔记(四)自定义组件
文章目录 1. 组件的创建与引用 1.1 创建组件 1.2 引用组件 1.3 全局引用 VS 局部引用 1.4 组件和页面的区别 2. 样式 2.1 组件样式隔离 2.2 修改组件的样式隔离选项 3. ...
- uniapp 小程序封装左滑效果组件
uniapp 小程序封装左滑效果组件 引言 封装组件 页面使用 注意事项 引言 小程序电商项目购物车,往往都会有左滑删除功能,在不想使用插件的前提下,就需要自己编写,因此我个人写了一个左滑效果组件 封 ...
最新文章
- Access denied for user(这个几乎让我怀疑人生的异常)
- 【转载】哈希表的原理,真的很难弄懂么?
- GDCM:gdcm::SequenceOfItems的测试程序
- Debian下IPv6设定主地址 Set primary IPv6 address under Debian Linux
- 如何优雅地检测类型/表达式有效性?
- 两万字深度介绍分布式系统原理,一篇通透
- 讨论一道求质数的面试题
- 双系统在linux中修复引导文件,windows ubuntu双系统重装后修复grub引导
- 借博客发泄一下对ExtJs的不满
- C语言·数组·密码编译(阿斯克码法)
- CSND博客☞盘码之路开始
- 移动距离 X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3... 当排满一行时,从下一行相邻的楼往反方向排号。 比如:当小区排号宽度为6时,开始情形如下:
- mysql干嘛的_mysql和sql是干什么的?
- ffmpeg nvenc编码
- The type new ActionListener(){} must implement the inherited abstract method ActionListener.actionPe
- EdgeBoard中“活灵活现”的算子
- TP5 短信宝 发送短信验证码
- 面试挂在JVM?别慌,图文讲解JVM工作原理,看完还不懂我跪键盘
- mongoTemplate使用group函数进行分组和统计
- java生成excel下载_java生成excel并下载功能
热门文章
- 《Python金融大数据风控建模实战》 第6章 变量分箱方法
- 如何用foobar200转换无损wma!
- 如何将iPhone升级到ios 14
- 5. Resampling Methods
- 接缝雕刻算法:一种看似不可能的图像大小调整方法
- 服务器启动文件夹,win10系统开机启动文件夹的路径是什么_网站服务器运行维护...
- 极光魔链(JMLink)使用教程
- 学编程买什么类型的电脑适合?从预算到配置,给你安排的明明白白!
- OpenCV—python 图像相似度算法(dHash,方差)
- 2019 年 (A 题) 电动小车动态无线充电系统