| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- import qs from 'query-string'
- import appState from '/src/state'
- import SettingState from '/src/pages/detail/setting-state'
- import instruments from '/src/constant/instruments'
- import instrumentsClassfiy from '/src/constant/instrumentsClassfiy'
- /**是否是开发环境 */
- export const getDevelopment = function () {
- return /(192\.168|localhost)/ig.test(location.host)
- }
- export const addZero = (num: number) => {
- return num < 10 ? '0' + num : num
- }
- export const formatTime = (time: number) => {
- const s = time % 60
- const m = time / 60
- return addZero(Math.floor(m)) + ':' + addZero(Math.floor(s))
- }
- export const browser = () => {
- var u = navigator.userAgent
- // app = navigator.appVersion;
- 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终端
- android: u.indexOf('ORCHESTRAAPPA') > -1 || u.indexOf('Adr') > -1, //android终端
- iPhone: u.indexOf('ORCHESTRAAPPI') > -1, //是否为iPhone或者QQHD浏览器
- isApp:
- u.indexOf('ORCHESTRAAPPI') > -1 ||
- u.indexOf('ORCHESTRAAPPA') > -1,
- isTeacher: u.indexOf('ORCHESTRATEACHER') > -1,
- isStudent: u.indexOf('ORCHESTRASTUDENT') > -1,
- isSchool: u.indexOf('ORCHESTRASCHOOL') > -1,
- iPad: u.indexOf('iPad') > -1, //是否iPad
- webApp: u.indexOf('Safari') == -1, //是否web应该程序,没有头部与底部
- weixin: u.indexOf('MicroMessenger') > -1, //是否微信 (2015-01-22新增)
- huawei: !!u.match(/huawei/i) || !!u.match(/honor/i),
- xiaomi: !!u.match(/mi\s/i) || !!u.match(/redmi/i) || !!u.match(/mix/i),
- }
- }
- export const getRequestHostname = () => {
- let search : any = ''
- try {
- search = qs.parse(location.search)
- } catch (error) {}
- if(search?.client){
- return search.client === 'student' ? '/api-student' : search.client === 'teacher' ? '/api-teacher' : '/api-backend'
- }
- const browserInfo = browser();
- if (browserInfo.isStudent){
- return '/api-student'
- }
- if (browserInfo.isTeacher){
- return '/api-teacher'
- }
- return '/api-backend'
- }
- export const getRandomKey = () => {
- let key = '' + new Date().getTime() + Math.floor(Math.random() * 1000000)
- return key
- }
- export const findNearestNumber = (arr: number[], target: number) => {
- return arr.reduce((pre, curr) => {
- return Math.abs(pre - target) > Math.abs(curr - target) ? curr : pre
- })
- }
- export const toNext = (hash: string, query?: any) => {
- const setPrefix = (url: string): string => {
- if (url) {
- return '?' + url
- }
- return ''
- }
- const searchStr = qs.stringify({
- ...qs.parse(location.search),
- _t: new Date().getTime(),
- })
- const hashSearchStr = qs.stringify(query)
- const nextUrl = location.origin + location.pathname + setPrefix(searchStr) + hash + setPrefix(hashSearchStr)
- return nextUrl
- // location.replace(nextUrl)
- }
- export const noop = (): void => {}
- export const getImageUrl = (name: string) => {
- return new URL(`./dir/${name}.png`, location.origin).href
- }
- export const setTongjiTag = (event: any[]) => {
- if ((window as any)._czc) {
- ;(window as any)._czc.push(event)
- }
- }
- export type IPlatform = 'ANDROID' | 'IOS' | 'WEB'
- export const getPlatform = (): IPlatform => {
- const browserInfo = browser()
- if (browserInfo.ios) {
- return 'IOS'
- }
- if (browserInfo.android) {
- return 'ANDROID'
- }
- return 'WEB'
- }
- type IJavaScriptAnimate = {
- timing: (timeFraction: number) => number
- draw: (progress: number) => void
- duration: number
- }
- export function JavaScriptAnimate({ timing, draw, duration }: IJavaScriptAnimate) {
- let start = performance.now()
- requestAnimationFrame(function animate(time) {
- // timeFraction 从 0 增加到 1
- let timeFraction = (time - start) / duration
- if (timeFraction > 1) timeFraction = 1
- // 计算当前动画状态
- let progress = timing(timeFraction)
- draw(progress) // 绘制
- if (timeFraction < 1) {
- requestAnimationFrame(animate)
- }
- })
- }
- /** 格式化当前曲谱缩放比例 */
- export const formatZoom = (num = 1) => {
- const size = {
- small: 0.5,
- middle: 0.7,
- large: 1,
- }
- const zoom = size[SettingState.sett.scoreSize]
- return num * zoom
- }
- /**
- * 设置声部初始化信息
- */
- export const setVoiceInit = () => {
- const chinesePartName = { ...instruments }
- const MusicalInstrumentClassification = { ...instrumentsClassfiy }
- appState.chinesePartName = chinesePartName
- appState.MusicalInstrumentClassification = MusicalInstrumentClassification
- }
- export const getVoiceChinesName = (name: string | undefined) => {
- let viewname = name || ''
- if (name) {
- const cname = appState.chinesePartName[name]
- if (!cname) {
- const names = Object.keys(appState.chinesePartName)
- for (const n of names) {
- if (name.match(n)) {
- // console.table({
- // 输入名称: name,
- // 循环名称: n,
- // 匹配: name.match(n)
- // })
- viewname = name.replace(n, appState.chinesePartName[n])
- break
- }
- }
- } else {
- viewname = cname
- }
- }
- return viewname ? name + (name !== viewname ? ' (' + viewname + ')' : '') : ''
- }
- // 判断是否被转译
- export const isEncoded = (uri: string) => {
- uri = uri || '';
- return uri !== decodeURI(uri);
- }
|