import numeral from 'numeral'; import dayjs from 'dayjs'; import qs from 'query-string'; export function vaildMusicScoreUrl() { const url: string = window.location.href; let returnUrl = ''; if (/192/.test(url) || /localhost/.test(url)) { //本地环境 returnUrl = 'https://test.kt.colexiu.com'; } else if (/test/.test(url)) { // dev 环境 returnUrl = 'https://test.kt.colexiu.com'; } else if (/dev/.test(url)) { returnUrl = 'https://dev.kt.colexiu.com'; } else { // 默认dev环境 returnUrl = 'https://mec.colexiu.com'; } return returnUrl; } export const browser = () => { // https://blog.csdn.net/qq_19309473/article/details/124138954 const u = navigator.userAgent; const isAndroid = /(?:Android)/.test(u); const isFireFox = /(?:Firefox)/.test(u); function isIpadFun() { const ua = window.navigator.userAgent; let IsIPad = false; if (/ipad/i.test(ua)) { IsIPad = true; } // iPad from IOS13 const macApp = ua.match(/Macintosh/i) != null; if (macApp) { // need to distinguish between Macbook and iPad const canvas = document.createElement('canvas'); if (canvas != null) { const context: any = canvas.getContext('webgl') || canvas.getContext('experimental-webgl'); if (context) { const info = context.getExtension('WEBGL_debug_renderer_info'); if (info) { const renderer = context.getParameter(info.UNMASKED_RENDERER_WEBGL); if (renderer.indexOf('Apple') != -1) IsIPad = true; } } } } return IsIPad; } return { trident: u.indexOf('Trident') > -1, //IE内核 presto: u.indexOf('Presto') > -1, //opera内核 webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核 gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核 mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端 ios: !!u.match(/Mac OS X/), //ios终端 // ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端 android: u.indexOf('COLEXIUSTUDENT') > -1 || u.indexOf('Adr') > -1, //android终端 iPhone: u.indexOf('COLEXIUAPPI') > -1, //是否为iPhone或者QQHD浏览器 isApp: u.indexOf('COLEXIUAPPI') > -1 || u.indexOf('COLEXIUAPPA') > -1 || u.indexOf('Adr') > -1, isTablet: /(?:iPad|PlayBook)/.test(u) || (isAndroid && !/(?:Mobile)/.test(u)) || (isFireFox && /(?:Tablet)/.test(u)) || isIpadFun(), iPad: u.indexOf('iPad') > -1, //是否iPad webApp: u.indexOf('Safari') == -1, //是否web应该程序,没有头部与底部 weixin: u.indexOf('MicroMessenger') > -1, //是否微信 (2015-01-22新增) alipay: u.indexOf('AlipayClient') > -1, //是否支付宝 huawei: !!u.match(/huawei/i) || !!u.match(/honor/i), xiaomi: !!u.match(/mi\s/i) || !!u.match(/redmi/i) || !!u.match(/mix/i) }; }; // 获取授权的code码 export const getUrlCode = (name = 'code') => { // 截取url中的code方法 // const url = location.search; // const theRequest: any = new Object(); // if (url.indexOf('?') != -1) { // const str = url.substr(1); // const strs = str.split('&'); // for (let i = 0; i < strs.length; i++) { // theRequest[strs[i].split('=')[0]] = strs[i].split('=')[1]; // } // } // console.log(theRequest, 'theRequest'); // return theRequest[name]; let search: any = {}; try { search = { ...qs.parse(location.search), ...qs.parse(location.hash.split('?')[1]) }; } catch (error) { // } return search[name]; }; export const getRandomKey = () => { const key = '' + new Date().getTime() + Math.floor(Math.random() * 1000000); return key; }; export function checkPhone(phone: string) { const phoneRule = /^((13[0-9])|(14(0|[5-7]|9))|(15([0-3]|[5-9]))|(16(2|[5-7]))|(17[0-8])|(18[0-9])|(19([0-3]|[5-9])))\d{8}$/; return phoneRule.test(phone); } /** * @description 格式化日期控件显示内容 * @param type * @param option * @returns OBJECT */ export const formatterDatePicker = (type: any, option: any) => { if (type === 'year') { option.text += '年'; } if (type === 'month') { option.text += '月'; } if (type === 'day') { option.text += '日'; } return option; }; /** * 数字转成汉字 * @params num === 要转换的数字 * @return 汉字 * */ export const toChinesNum = (num: any) => { const changeNum = [ '零', '一', '二', '三', '四', '五', '六', '七', '八', '九' ]; const unit = ['', '十', '百', '千', '万']; num = parseInt(num); const getWan = (temp: any) => { const strArr = temp.toString().split('').reverse(); let newNum = ''; const newArr: string[] = []; strArr.forEach((item: any, index: any) => { newArr.unshift( item === '0' ? changeNum[item] : changeNum[item] + unit[index] ); }); const numArr: number[] = []; newArr.forEach((m, n) => { if (m !== '零') numArr.push(n); }); if (newArr.length > 1) { newArr.forEach((m, n) => { if (newArr[newArr.length - 1] === '零') { if (n <= numArr[numArr.length - 1]) { newNum += m; } } else { newNum += m; } }); } else { newNum = newArr[0]; } return newNum; }; const overWan = Math.floor(num / 10000); let noWan: any = num % 10000; if (noWan.toString().length < 4) { noWan = '0' + noWan; } return overWan ? getWan(overWan) + '万' + getWan(noWan) : getWan(num); }; // 秒转分 export const getSecondRPM = (second: number, type?: string) => { if (isNaN(second)) return '00:00'; const mm = Math.floor(second / 60) .toString() .padStart(2, '0'); const dd = Math.floor(second % 60) .toString() .padStart(2, '0'); if (type === 'cn') { return mm + '分' + dd + '秒'; } else { return mm + ':' + dd; } }; export const getWeekCh = (week: number, type = 0) => { const template = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']; const template2 = [ '星期天', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六' ]; return type ? template2[week] : template[week]; }; export const getGradeCh = (grade: number) => { const template = [ '一年级', '二年级', '三年级', '四年级', '五年级', '六年级', '七年级', '八年级', '九年级' ]; return template[grade]; }; export const numberFormat = (num: number, type?: string) => { if (type === 'percent') { return numeral(num).format('0.0%'); } return numeral(num).format('0,0'); }; export const moneyFormat = (value: number, format = '0,0.00') => { return numeral(value).format(format); }; export const dateFormat = ( value: string | Date, format = 'YYYY-MM-DD HH:mm:ss' ) => { return dayjs(value).format(format); }; const instruments: any = { 'Acoustic Grand Piano': '大钢琴', 'Bright Acoustic Piano': '明亮的钢琴', 'Electric Grand Piano': '电钢琴', 'Rhodes Piano': '柔和的电钢琴', 'Chorused Piano': '加合唱效果的电钢琴', Harpsichord: '羽管键琴', Clavichord: '科拉维科特琴', Celesta: '钢片琴', Glockenspiel: '钢片琴', 'Music box': '八音盒', Vibraphone: '颤音琴', Marimba: '马林巴', Xylophone: '木琴', 'Tubular Bells': '管钟', Dulcimer: '大扬琴', 'Hammond Organ': '击杆风琴', 'Percussive Organ': '打击式风琴', 'Rock Organ': '摇滚风琴', 'Church Organ': '教堂风琴', 'Reed Organ': '簧管风琴', Accordian: '手风琴', Harmonica: '口琴', 'Tango Accordian': '探戈手风琴', 'Acoustic Guitar': '钢弦吉他', 'Electric Guitar': '闷音电吉他', 'Overdriven Guitar': '加驱动效果的电吉他', 'Distortion Guitar': '加失真效果的电吉他', 'Guitar Harmonics': '吉他和音', 'Acoustic Bass': '大贝司', 'Electric Bass': '电贝司', 'Fretless Bass': '无品贝司', 'Slap Bass': '掌击', 'Synth Bass': '电子合成', Violin: '小提琴', Viola: '中提琴', Cello: '大提琴', Contrabass: '低音大提琴', 'Tremolo Strings': '弦乐群颤音音色', 'Pizzicato Strings': '弦乐群拨弦音色', 'Orchestral Harp': '竖琴', Timpani: '定音鼓', 'String Ensemble': '弦乐合奏音色', 'Synth Strings': '合成弦乐合奏音色', 'Choir Aahs': '人声合唱', 'Voice Oohs': '人声', 'Synth Voice': '合成人声', 'Orchestra Hit': '管弦乐敲击齐奏', Trumpet: '小号', Trombone: '长号', Tuba: '大号', 'Muted Trumpet': '加弱音器小号', 'French Horn': '法国号', 'Brass Section': '铜管组', 'Synth Brass': '合成铜管音色', 'Soprano Sax': '高音萨克斯管', 'Alto Sax': '中音萨克斯管', 'Tenor Sax': '次中音萨克斯管', 'Baritone Sax': '低音萨克斯管', Oboe: '双簧管', 'English Horn': '英国管', Bassoon: '巴松', Clarinet: '单簧管', 'Soprano Saxophone': '高音萨克斯管', 'Alto Saxophone': '中音萨克斯管', 'Tenor Saxophone': '次中音萨克斯管', 'Baritone Saxophone': '低音萨克斯管', Piccolo: '短笛', Flute: '长笛', Recorder: '竖笛', 'Soprano Recorder': '高音竖笛', 'Pan Flute': '排箫', 'Bottle Blow': '瓶木管', Whistle: '口哨声', Ocarina: '陶笛', Lead: '合成主音', 'Lead lead': '合成主音', 'Pad age': '合成音色', Pad: '合成音色', FX: '合成效果 科幻', Sitar: '西塔尔', Banjo: '班卓琴', Shamisen: '三昧线', Koto: '十三弦筝', Kalimba: '卡林巴', Bagpipe: '风笛', Fiddle: '民族提琴', Shanai: '山奈', 'Tinkle Bell': '叮当铃', Agogos: '阿戈戈铃', 'Steel Drums': '钢鼓', 'Taiko Drum': '太鼓', 'Melodic Toms': '嗵嗵鼓', 'Synth Drums': '合成鼓', 'Reverse Cymbals': '反向镲', 'Agogo Bells': '阿戈戈铃', 'Taiko Drums': '太鼓', Bongos: '邦戈鼓', 'Bongo Bell': '邦戈铃', Congas: '康加鼓', Guiro: '刮壶', 'Guitar Fret Noise': '吉他换把杂音', 'Breath Noise': '呼吸声', Seashore: '海浪声', 'Bird Tweet': '鸟鸣', 'Telephone Ring': '电话铃', Helicopter: '直升机', Applause: '鼓掌声', Gunshot: '枪声', 'Acoustic Bass Drum': '大鼓', 'Bass Drum': '大鼓', 'Side Drum': '小鼓鼓边', 'Acoustic Snare': '小鼓', 'Hand Claps': '拍手', 'Electric Snare': '小鼓', 'Low Floor Tom': '低音嗵鼓', 'Closed Hi-Hat': '闭合踩镲', 'High Floor Tom': '高音落地嗵鼓', 'Pedal Hi-Hat': '脚踏踩镲', 'Low Tom': '低音嗵鼓', 'Open Hi-Hat': '开音踩镲', 'Low-Mid Tom': '中低音嗵鼓', 'Hi Mid Tom': '高音鼓', 'Crash Cymbals': '对镲', 'High Tom': '高音嗵鼓', 'Ride Cymbals': '叮叮镲', 'Chinese Cymbals': '中国镲', 'Ride Bell': '圆铃', Tambourine: '铃鼓', 'Splash Cymbal': '溅音镲', Cowbell: '牛铃', 'Crash Cymbal': '强音钹', 'Vibra-Slap': '颤音器', 'Ride Cymbal': '打点钹', 'Hi Bongo': '高音邦戈鼓', 'Low Bongo': '低音邦戈鼓', 'Mute Hi Conga': '弱音高音康加鼓', 'Open Hi Conga': '强音高音康加鼓', 'Low Conga': '低音康加鼓', 'High Timbale': '高音天巴鼓', 'Low Timbale': '低音天巴鼓', 'High Agogo': '高音阿戈戈铃', 'Low Agogo': '低音阿戈戈铃', Cabasa: '卡巴萨', Maracas: '沙锤', 'Short Whistle': '短口哨', 'Long Whistle': '长口哨', 'Short Guiro': '短刮壶', 'Long Guiro': '长刮壶', Claves: '响棒', 'Hi Wood Block': '高音木鱼', 'Low Wood Block': '低音木鱼', 'Mute Triangle': '弱音三角铁', 'Open Triangle': '强音三角铁', 'Drum Set': '架子鼓', 'Hulusi flute': '葫芦丝', Melodica: '口风琴', Nai: '口风琴', 'Snare Drum': '小军鼓', Cymbal: '镲', Cymbals: '镲', 'Horn in F': '圆号', Triangle: '三角铁', Vibrato: '颤音琴', 'Suspend Cymbals': '吊镲', 'Suspended Cymbals': '吊镲', 'Tom-Toms': '嗵嗵鼓', Bell: '铃铛', Bells: '铃铛', 'Alto Clarinet': '中音单簧管', 'Bass Clarinet': '低音单簧管', Cornet: '短号', Euphonium: '上低音号', 'crash cymbals': '对镲', Castanets: '响板', Shaker: '沙锤', 'Mark tree': '音树', Chimes: '管钟', 'Mark Tree': '音树', 'Tom-toms': '嗵嗵鼓', 'Hi-Hat': '踩镲', 'Sleigh Bells': '雪橇铃', Flexatone: '弹音器', 'Brake drum': '闸鼓', Gong: '锣', 'concert tom': '音乐会嗵嗵鼓', 'brake drum': '车轮鼓', 'finger cymbal': '指钹', 'ride cymbal': '叮叮镲', 'Concert Toms': '音乐会嗵嗵鼓', Vibraslap: '弹音器', 'Wood Blocks': '木鱼', 'Temple Blocks': '木鱼', 'Wood Block': '木鱼', 'Field Drum': '军鼓', 'Quad-Toms': '筒鼓', Quads: '筒鼓', 'Drums set': '架子鼓', 'High Bongo': '邦戈', Timbales: '天巴鼓' }; /** 获取分轨名称 */ export const getInstrumentName = (name = '') => { name = name.toLocaleLowerCase().replace(/ /g, ''); if (!name) return ''; for (let key in instruments) { const _key = key.toLocaleLowerCase().replace(/ /g, ''); if (_key.includes(name)) { return instruments[key]; } } for (let key in instruments) { const _key = key.toLocaleLowerCase().replace(/ /g, ''); if (name.includes(_key)) { return instruments[key]; } } return ''; }; /** * 乐器排序 * 排序顺序:长笛、单簧管、中音单簧管、低音单簧管、高音萨克斯风、中音萨克斯风、次中音萨克斯风、低音萨克斯风、小号、长号、圆号、大号、上低音号 * */ export const sortMusical = (name: string, index: number) => { let sortId = 0; switch (name) { case '长笛': sortId = 1; break; case '单簧管': sortId = 2; break; case '中音单簧管': sortId = 3; break; case '低音单簧管': sortId = 4; break; case '高音萨克斯风': sortId = 5; break; case '中音萨克斯风': sortId = 6; break; case '次中音萨克斯风': sortId = 7; break; case '低音萨克斯风': sortId = 8; break; case '小号': sortId = 9; break; case '长号': sortId = 10; break; case '圆号': sortId = 11; break; case '大号': sortId = 12; break; case '上低音号': sortId = 13; break; default: sortId = index + 14; break; } return sortId; };