125 lines
3.4 KiB
JavaScript
125 lines
3.4 KiB
JavaScript
export function asList(raw) {
|
|
if (Array.isArray(raw)) return raw.filter((x) => x && typeof x === 'object')
|
|
if (raw && typeof raw === 'object') {
|
|
const nested = raw.records || raw.list || raw.items || raw.messages || raw.projects || raw.data
|
|
if (Array.isArray(nested)) return nested.filter((x) => x && typeof x === 'object')
|
|
return [raw]
|
|
}
|
|
return []
|
|
}
|
|
|
|
export function firstText(row, keys, fallback = '') {
|
|
for (const k of keys) {
|
|
const v = row && row[k]
|
|
if (v != null && String(v).trim() && String(v) !== 'null') return String(v).trim()
|
|
}
|
|
return fallback
|
|
}
|
|
|
|
export function initial(name) {
|
|
const s = String(name || '').trim()
|
|
return s ? s.slice(0, 1) : '?'
|
|
}
|
|
|
|
export function maskPhone(phone) {
|
|
const s = String(phone || '')
|
|
if (s.length < 7) return s
|
|
return s.slice(0, 3) + '****' + s.slice(-4)
|
|
}
|
|
|
|
function asDate(t) {
|
|
if (t == null || t === '') return null
|
|
let d
|
|
const n = Number(t)
|
|
if (!Number.isNaN(n) && String(t).length >= 10) {
|
|
d = new Date(n < 1e12 ? n * 1000 : n)
|
|
} else {
|
|
d = new Date(t)
|
|
}
|
|
if (Number.isNaN(d.getTime())) return null
|
|
return d
|
|
}
|
|
|
|
function dayStart(d) {
|
|
return new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime()
|
|
}
|
|
|
|
function period(d) {
|
|
const h = d.getHours()
|
|
if (h < 6) return '凌晨'
|
|
if (h < 12) return '上午'
|
|
if (h < 13) return '中午'
|
|
if (h < 18) return '下午'
|
|
return '晚上'
|
|
}
|
|
|
|
function hm12(d) {
|
|
const h = d.getHours() % 12 || 12
|
|
const m = String(d.getMinutes()).padStart(2, '0')
|
|
return `${h}:${m}`
|
|
}
|
|
|
|
export function fmtTime(t) {
|
|
const d = asDate(t)
|
|
if (!d) return t == null ? '' : String(t)
|
|
const label = period(d) + hm12(d)
|
|
const now = new Date()
|
|
const diff = (dayStart(now) - dayStart(d)) / 86400000
|
|
if (diff === 0) return label
|
|
if (diff === 1) return '昨天 ' + label
|
|
if (diff < 7) {
|
|
const week = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
|
|
return week[d.getDay()] + ' ' + label
|
|
}
|
|
return `${d.getMonth() + 1}月${d.getDate()}日 ${label}`
|
|
}
|
|
|
|
export function fmtListTime(t) {
|
|
const d = asDate(t)
|
|
if (!d) return t == null ? '' : String(t)
|
|
const now = new Date()
|
|
const diff = (dayStart(now) - dayStart(d)) / 86400000
|
|
if (diff === 0) return period(d) + hm12(d)
|
|
if (diff === 1) return '昨天'
|
|
if (diff < 7) {
|
|
const week = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
|
|
return week[d.getDay()]
|
|
}
|
|
return `${d.getMonth() + 1}月${d.getDate()}日`
|
|
}
|
|
|
|
export function pad2(n) {
|
|
return String(n).padStart(2, '0')
|
|
}
|
|
|
|
export function clockText(date) {
|
|
const d = date || new Date()
|
|
return `${pad2(d.getHours())}:${pad2(d.getMinutes())}:${pad2(d.getSeconds())}`
|
|
}
|
|
|
|
export function yuan(v) {
|
|
const n = Number(v)
|
|
if (Number.isNaN(n)) return ''
|
|
return n.toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })
|
|
}
|
|
|
|
export function dmId(a, b) {
|
|
const pair = [String(a), String(b)].sort()
|
|
return `dm:${pair[0]}:${pair[1]}`
|
|
}
|
|
|
|
export function convType(s) {
|
|
const t = String((s && s.type) || '')
|
|
if (t === 'dm') return 'direct'
|
|
if (t === 'group' || t === 'work' || t === 'files' || t === 'direct') return t
|
|
const id = String((s && s.id) || '')
|
|
if (id.startsWith('g:')) return 'group'
|
|
if (id.startsWith('work:')) return 'work'
|
|
if (id.startsWith('files:')) return 'files'
|
|
return 'direct'
|
|
}
|
|
|
|
export function toast(title, icon = 'none') {
|
|
uni.showToast({ title: String(title || ''), icon, duration: 2200 })
|
|
}
|