oa_app仓库初始化

This commit is contained in:
2026-09-23 16:52:48 +08:00
commit 65c5e9f66f
82 changed files with 6490 additions and 0 deletions
+124
View File
@@ -0,0 +1,124 @@
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 })
}