当前位置: 首页 > Web前端 > vue.js

vue-cli3+typeScript+腾讯ai界面前端认证效果

时间:2023-03-31 18:35:43 vue.js

前言TypeScript是一个js超强,提供类型系统和es6支持,由微软开发,2012年10月发布第一个版本,经过多次更新,已经成为前端社区不可忽视的一股力量,在微软内部得到了广泛的应用。Google的angular2也是使用TypeScript开发语言,这也是我们学习ts背景的原因。我们常用的vue框架也支持使用typeScript开发。今天我们将学习如何使用vue-cli3+typeScript开发一个简单的项目。最近在研究腾讯的ai界面,完成一个简单的demo。话不多。贴一下代码1.创建项目1.安装vue-cli3,查看版本,创建项目,直接创建全局已经安装了vue-cli3的项目,和之前一样npminstall-g@vue/clivue--versionvue创建my-ts-ai2。需要注意的是,如果是第一次使用ts,可以选择Manuallyselectfeature来自由选择函数。常用的有vuex、vue-router、CSSPre-processors等,我们必须勾选typescript,回车On才能进行下一步。PS:勾选的操作是按空格键。需要注意的是,如果选择formatcheck,需要选择TSlint,否则写ts会标红并报错;3、创建成功后,执行启动命令:npmrunserve;启动后可以访问本地项目,用ts写代码2.vue-property-decorator这是一些覆盖vue的对象的集合,我们可以从这里取出一些东西import{Component,Prop,Vue,Watch}from'vue-属性-装饰器';这几个取出来的Attributes分别是组件定义Component、父组件传递的参数Prop、原始Vue对象Vue、数据监听对象Watch。它还包括这里没有列出的Model、Emit、Inject、Provide,大家可以自行尝试。我们看一下经常使用的属性prop、watch一般写法prop;@Prop()privatemsg!:string;watch://watch@Watch('active')privatechageActive(newVal:string,oldVal:string){console.log(`将txt:${oldVal}更改为${newVal}`);}@Watch('sticker')privatechageSticker(newVal:string,oldVal:string){console.log(`changetxt:${oldVal}to${newVal}`);}data://dataprivatenum:number=0;私有appId:number=2140682408;私人应用凯:字符串='3gP0QJTqC3j8qP6M';私有imgBase64:字符串='';privateeffectImg:string='';methods:privatechoose(id:number,index:number){this.sticker=id;this.active=索引;}privatepostData(url:string,params:object){constself:IParams=this;axios.post(url,qs.stringify(params),{headers:{'Content-Type':'application/x-www-form-urlencoded'},}).then((response)=>{console.log(response.data);如果(response.data.ret===0){self.effectImg='data:image/jp例如;base64,'+response.data.data.image;}}).catch((error)=>{console.log(error);});}computed://computedgetgetMsg(){返回这个。味精+'11111';}gettestTxt(){returnthis.$store.state.testTxt;}3.vuex在store中的使用基本一样只要遵循ts的规则即可;主要是使用时的注意事项,废话不多说,直接上代码举例//Usevueximport{State,Getter,Action,Mutation,namespace,}from'vuex-class';constuserModule=namespace('user')声明@State('testNum')publictestNum!:any;@Action('UPDATA_CHANGE_LOGIN')publicUPDATA_CHANGE_LOGIN!:函数;@Mutation('CHANGE_LOGIN')publicCHANGE_LOGIN!:函数;@userModule.State('firstName')publicfirstName!:string;@userModule.State('lastName')publiclastName!:string;@userModule.Mutation('UPDATE_FIRST_NAME')publicUPDATE_FIRST_NAME!:函数然后像以前一样使用它;以上是我使用typeScript和vue-cli3框架编写的demo的要点;下面主要讲前端使用腾讯ai接口做一些效果;关于注册和创建应用,大家可以自己去网站上试试1.接口认证前端没有权限直接调用接口认证,因为有跨域问题,一般需要后台配合,所以如下代码可以使用nodejs开发;因为是在vue框架下开发的,vue帮我们做服务器代理,所以我们可以在本地配置代理服务器,看到效果,同时了解基本步骤,然后使用nodejs做接口认证;代码主要是签名算法,遵循腾讯的签名算法规则详见https://ai.qq.com/doc/auth.shtml签名算法步骤Sort请求参数对按字典升序排列key得到参数对的有序列表N参数对按照URL键值对的格式拼接成字符串,得到一个字符串T(eg:key1=value1&key2=value2)。URL键值拼接过程中的value部分需要进行URL编码,URL编码算法使用大写字母,比如%E8,而不是小写的%e8。将app_key作为应用key的键名,组成一个URL键值,拼接在字符串T的末尾,得到字符串S(如:key1=value1&key2=value2&app_key=key)。对字符串S进行MD5计算,将得到的MD5值的字符全部转为大写,得到接口请求签名privatepostPurikura(){//调用facesticker的接口,参见腾讯开放平台apihttps://ai.qq.com/doc/facesticker.shtml对于参数constparams:IParams={app_id:this.appId,time_stamp:parseInt((newDate().getTime()/1000).toString(),10),nonce_str:Math.random().toString().substr(3,8)+Date.now().toString(36),图片:this.imgBase64,贴纸:this.sticker,};constsign=this.getSign(params,this.appKay);//签名算法,遵循腾讯的签名算法规则,参见https://ai.qq.com/doc/auth.shtmlparams.sign=sign;this.postData(apis.facesticker,参数);}私人egetSign(params:any,appkey:string){constsortArr=Object.keys(params).sort((x:string,y:string):number=>{返回x.localeCompare(y,'zh-Hans-CN',{灵敏度:'accent'});});constnewParams:IParams={};sortArr.forEach((ele:string)=>{newParams[ele]=params[ele];});//将请求参数按**字典升序**排序console.log(newParams);让url:string='';Object.keys(newParams).forEach((key:string,i)=>{if(newParams[key]!==''){url+=key+'='+encodeURIComponent(newParams[key])+'&';}});url+='app_key='+appkey;//list中N个参数对按照**URL键值对**的格式拼接成字符串,应用key以app\_key为键名,URL键值为在字符串T的末尾拼接得到**字符串S**(eg:key1=value1&key2=value2&app\_key=key)constmd5url=md5(url);//对字符串S进行MD5运算constsign=md5url.toUpperCase();//**所有字符的MD5值转为大写**得到接口**请求签名**console.log(sign);返回标志;}ts编写过程中的注意事项1.对象必须创建接口;直接定义type为object,必须要确定属性和值,如果新增了一个属性,会用红色标记,表示没有这个属性值;创建接口的方式如下interfaceIParams{[x:string]:any}//使用时可以随意给reader添加属性`constreader:IParams=newFileReader();`2,parseInt需要传2个parameters,否则会报Missingradixparameter,也就是说少了一个radixrootparseInt(string,radix)函数。该函数一共需要两个参数:string:必须解析的字符串。基数:可选。指示要解析的数字的基数。取值在2到36之间,如果省略该参数或值为0,则以10为底进行解析。如果以“0x”或“0X”开头,则以16为底。如果参数小于2或大于36,parseInt()将返回NaN。3.控制台报错Callsto'console.log'arenotallowed。不允许写入控制台,因此在tslint.json中的规则中添加"no-console":false。方便测试4.注意和js区分开来。在一句代码的末尾,加上;,加上对象的最后一个属性。5.如果VSCode编辑器有警告提示,例如:对装饰器的实验性支持是一个特性,在未来的版本中可能会发生变化。设置'experimentalDecorators'选项以删除此警告。可以移除工作区中的其他项目,或者将这个项目拖到工作区顶部,或者将这个项目的tsconfig.json复制到工作区第一个项目的根目录下,重启编辑器,有一个比较高警告提示可以解决的概率。