edu/app/src/utils/util.ts

129 lines
3.7 KiB
TypeScript
Raw Normal View History

2022-09-09 06:44:55 +00:00
import { isObject } from '@vue/shared'
import { getToken } from './auth'
2022-09-09 06:44:55 +00:00
/**
* @description ctx
* @param { String } selector '.app' | '#app'
* @param { Boolean } all
* @param { ctx } context
*/
2022-09-09 01:50:39 +00:00
export const getRect = (selector: string, all = false, context?: any) => {
return new Promise((resolve, reject) => {
let qurey = uni.createSelectorQuery()
if (context) {
qurey = uni.createSelectorQuery().in(context)
}
2022-09-09 01:50:39 +00:00
qurey[all ? 'selectAll' : 'select'](selector)
.boundingClientRect(function (rect) {
if (all && Array.isArray(rect) && rect.length) {
return resolve(rect)
}
if (!all && rect) {
return resolve(rect)
}
reject('找不到元素')
})
.exec()
})
2022-09-09 01:50:39 +00:00
}
2022-09-09 06:44:55 +00:00
/**
* @description
*/
export function currentPage() {
const pages = getCurrentPages()
const currentPage = pages[pages.length - 1]
return currentPage || {}
}
/**
* @description
*/
interface Link {
path: string
name?: string
type: string
isTab: boolean
query?: Record<string, any>
}
export enum LinkTypeEnum {
'SHOP_PAGES' = 'shop',
'CUSTOM_LINK' = 'custom'
}
export function navigateTo(link: Link, navigateType: 'navigateTo' | 'reLaunch' = 'navigateTo') {
const url = link.query ? `${link.path}?${objectToQuery(link.query)}` : link.path
2022-09-15 03:40:20 +00:00
navigateType == 'navigateTo' && uni.navigateTo({ url })
navigateType == 'reLaunch' && uni.reLaunch({ url })
2022-09-09 06:44:55 +00:00
}
/**
* @description
* @param {unknown} value
* @return {Boolean}
*/
export const isEmpty = (value: unknown) => {
return value == null && typeof value == 'undefined'
}
/**
* @description Query语法
* @param { Object } params
* @return {string} Query语法
*/
export function objectToQuery(params: Record<string, any>): string {
let query = ''
for (const props of Object.keys(params)) {
const value = params[props]
const part = encodeURIComponent(props) + '='
if (!isEmpty(value)) {
console.log(encodeURIComponent(props), isObject(value))
if (isObject(value)) {
for (const key of Object.keys(value)) {
if (!isEmpty(value[key])) {
const params = props + '[' + key + ']'
const subPart = encodeURIComponent(params) + '='
query += subPart + encodeURIComponent(value[key]) + '&'
}
}
} else {
query += part + encodeURIComponent(value) + '&'
}
}
}
return query.slice(0, -1)
}
2022-09-09 06:27:52 +00:00
/**
* @description
* @param { String } path
*/
export function uploadFile(path: any) {
return new Promise((resolve, reject) => {
const token = getToken()
uni.uploadFile({
2022-09-09 08:06:58 +00:00
url: `${import.meta.env.VITE_APP_BASE_URL}/api/upload/image`,
filePath: path,
name: 'file',
header: {
token
},
fileType: 'image',
success: (res) => {
console.log('uploadFile res ==> ', res)
const data = JSON.parse(res.data)
2022-09-09 10:42:41 +00:00
console.log('data.code', data.code)
2022-09-09 08:06:58 +00:00
if (data.code == 200) {
resolve(data.data)
} else {
reject()
}
},
fail: (err) => {
console.log(err)
reject()
}
})
})
2022-09-09 06:27:52 +00:00
}