UNPKG

miue-ui

Version:

ali miniProgram UI components for vehicle.

274 lines (268 loc) 7.62 kB
/** * author:dansion@163.com * data:2022-07-01 * version:V1.0.0 */ var TYPES={ PLAY:"play", LIKE:"like", NEXT:"next", PREV:"prev", LIST:"list", MODE:"mode", RATE:"rate", FORWARD:'forw', BACKWARD:'back', VOLUME:'volu', COLLECT:'collect', } var STATES={ PLAY:'play', PAUSE:'pause', LIST:'list', LIST_OPEN:'listOpen', PREV:'prev', NEXT:'next', LIKE:'like', LIKED:'liked', MODE_NORMAL:'normal', MODE_SINGLE:'single', MODE_LOOP:'loop', MODE_RANDOM:'random', MODE_FORWARD:'forward', RATE_05:'rate05', RATE_10:'rate10', RATE_15:'rate15', RATE_20:'rate20', FORWARD:'playforward', BACKWARD:'playbackward', VOLUME_NONE:'volumenone', VOLUME_LOW:'volumelow', VOLUME_HIGH:'volumehigh', COLLECT:'collect', COLLECTED:'collected', } // 定义合法按扭变量 var BUTTONS=new Map(); //播放:按扭的状态 BUTTONS.set(TYPES.PLAY,{ type:TYPES.PLAY, legalStates:new Map([ [STATES.PLAY,{key:STATES.PLAY,voice:'播放',info:'开始播放'}], [STATES.PAUSE,{key:STATES.PAUSE,voice:'暂停',info:'暂停播放'}], ]), extendsData:{zoom:1.2,progress:true} }); //喜欢:按扭状态 BUTTONS.set(TYPES.LIKE,{ type:TYPES.LIKE, legalStates:new Map([ [STATES.LIKE,{key:STATES.LIKE,voice:'喜欢',info:'喜欢(末)'}], [STATES.LIKDE,{key:STATES.LIKDE,voice:'喜欢',info:'喜欢(末)'}], ]), }); //下一首:按扭状态 BUTTONS.set(TYPES.NEXT,{ type:TYPES.NEXT, legalStates:new Map([ [STATES.NEXT,{key:STATES.NEXT,voice:'下一首',info:'下一首'}], ]), }); //上一首:按扭状态 BUTTONS.set(TYPES.PREV,{ type:TYPES.PREV, legalStates:new Map([ [STATES.PREV,{key:STATES.PREV,voice:'上一首',info:'上一首'}], ]), }); //列表:按扭状态 BUTTONS.set(TYPES.LIST,{ type:TYPES.LIST, legalStates:new Map([ [STATES.LIST,{key:STATES.LIST,voice:'列表',info:'列表(合)'}], [STATES.LIST_OPEN,{key:STATES.LIST_OPEN,voice:'关闭列表',info:'列表(开)'}], ]), extendsData:{showTotal:true} }); //模式:按扭状态 BUTTONS.set(TYPES.MODE,{ type:TYPES.MODE, legalStates:new Map([ [STATES.MODE_NORMAL,{key:STATES.MODE_NORMAL,voice:'正序',info:'正序'}], [STATES.MODE_SINGLE,{key:STATES.MODE_SINGLE,voice:'单曲',info:'单曲'}], [STATES.MODE_LOOP,{key:STATES.MODE_LOOP,voice:'循环',info:'循环'}], [STATES.MODE_RANDOM,{key:STATES.MODE_RANDOM,voice:'随机',info:'随机'}], [STATES.MODE_FORWARD,{key:STATES.MODE_FORWARD,voice:'倒序',info:'倒序'}], ]) }); //播速:按扭状态 BUTTONS.set(TYPES.RATE,{ type:TYPES.RATE, legalStates:new Map([ [STATES.RATE_05,{key:STATES.RATE_05,voice:'慢速播放',info:'慢速播放'}], [STATES.RATE_10,{key:STATES.RATE_10,voice:'正常速度播放',info:'正常速度播放'}], [STATES.RATE_15,{key:STATES.RATE_15,voice:'1.5速度播放',info:'1.5速度播放'}], [STATES.RATE_20,{key:STATES.RATE_20,voice:'2倍速度播放',info:'2倍速度播放'}], ]), }); //快前:按扭状态 BUTTONS.set(TYPES.FORWARD,{ type:TYPES.FORWARD, legalStates:new Map([ [STATES.FORWARD,{key:STATES.FORWARD,voice:'快进',info:'快进'}], ]), }); //快退:按扭状态 BUTTONS.set(TYPES.BACKWARD,{ type:TYPES.BACKWARD, legalStates:new Map([ [STATES.BACKWARD,{key:STATES.BACKWARD,voice:'快退',info:'快退'}], ]), }); //快退:按扭状态 BUTTONS.set(TYPES.VOLUME,{ type:TYPES.VOLUME, legalStates:new Map([ [STATES.VOLUME_NONE,{key:STATES.VOLUME_NONE,voice:'静音',info:'静音'}], [STATES.VOLUME_LOW,{key:STATES.VOLUME_LOW,voice:'低音量',info:'低音量'}], [STATES.VOLUME_HIGH,{key:STATES.VOLUME_HIGH,voice:'高音量',info:'高音量'}], ]), }); //收藏:按扭状态 BUTTONS.set(TYPES.COLLECT,{ type:TYPES.COLLECT, legalStates:new Map([ [STATES.COLLECT,{key:STATES.COLLECT,voice:'喜欢',info:'喜欢(末)'}], [STATES.COLLECTED,{key:STATES.COLLECTED,voice:'喜欢',info:'喜欢(末)'}], ]), }); // var verify=(type,state)=>{ let _legalStates=BUTTONS.get(type).legalStates; // 合法的 map 对象 state=state.toLowerCase(); //忽略大小写 if(_legalStates.has(state)){ return true; }else{ return false; } } //校验入参状态列表是不是可用。 var verifyState=(obj)=>{ let {type,states}=obj; //合法的状态,默认状态KEY和样式定义相同 let _legalStates=BUTTONS.get(type).legalStates; // 合法的 map 对象 let _return=new Map(); if(states==undefined){ //状态列表为空,输出默认可用状列表项 return _legalStates; }else{ //需要验证的状态列表 let _verify=new Set(states); for(let i of _verify.keys()){ i=i.toLowerCase(); //忽略大小写 if(_legalStates.has(i)){ _return.set(i,_legalStates.get(i)) }else{ if(my.isIDE){ console.warn(`组件参数:${type} 的配置值 :${i} 不合法,合法值为:${[..._legal]}` ) } } } if(_return.size>0){ return _return; }else{ return _legalStates; } } } var ControlButton=(obj)=>{ /** * index:当前唯一标识数 * type: 类型key * current:当前指状态 * state:当前状态,对指 states.key * states:状态种类,数组 * - key: * - info:状态种类说明,文本字符 * - voice:语音指令热词 * - style:状态对应的CSS变量,和状态states数组对应 * statesMap:map组构数据 * disabled:是否可用。 * extend:{ * zoom:0-10 * progress:true|false * } */ let {index,type,current=0,states=null,voice=null,styles=null,disabled=false,extendsData=null}=obj; /** * 处理 大写,添加 + 号的逻辑 * extendsData */ //是不是放大按扭 let result=false; let _zoom=false; if(type==type.toUpperCase()){ _zoom=true; } //是不是有扩展信息 let _noExtends=true; if(type.indexOf('+')>-1){ _noExtends=false; } // 请除非字符部份并转成小写 type=type.replace(/\W+/ig,"") type=type.toLowerCase(); if(BUTTONS.has(type)){ result=BUTTONS.get(type); result.current=current; result.disabled=disabled; //入参优先 if(extendsData!=null){ result.extendsData=extendsData; } //没有入参的情况,对 get 结果进行处理 if(result.extendsData==undefined){ result.extendsData={}; } //没有+号,相当于不需要扩展数据 if(_noExtends){ result.extendsData={}; } // 状态 let _states=verifyState({type:type,states:states}); // Map 对象 if(states!=null){ // result.states=[..._states] } result.current=current; result.states=[..._states.values()]; result.statesMap=_states; result.state=[..._states][current][0]; result.zoom=_zoom; // 为按扭注册输出VGUI的文本; Object.defineProperty(result,'voices',{ enumerable:true, configurable:true, get(){ let _voices=[]; result.statesMap.forEach((ele,v) => { _voices.push(ele.voice); }); //console.log(_voices); return _voices; } }) result.hasVoice=function(t){ let key=''; let ismatch=false; result.statesMap.forEach((ele,v) => { if(ele.voice==t){ console.warn(`${t}=::${ele.voice}`) ismatch=true; key=ele.key; } }); return {match:ismatch,voice:t,key:key,state:key,type:result.type,disabled:result.disabled}; } } return result; } export default {create:ControlButton,verify:verify,TYPE:TYPES,STATE:STATES,BUTTONS:BUTTONS}