import _ from 'lodash' export function timeFix() { const time = new Date() const hour = time.getHours() return hour < 9 ? '早上好' : hour <= 11 ? '上午好' : hour <= 13 ? '中午好' : hour < 20 ? '下午好' : '晚上好' } export function welcome() { const arr = ['休息一会儿吧', '准备吃什么呢?', '要不要打一把 DOTA?', '我猜你可能累了', '你有一个小目标吗?'] const index = Math.floor(Math.random() * arr.length) return arr[index] } /** * 触发 window.resize */ export function triggerWindowResizeEvent() { const event = document.createEvent('HTMLEvents') event.initEvent('resize', true, true) event.eventType = 'message' window.dispatchEvent(event) } export function handleScrollHeader(callback) { let timer = 0 let beforeScrollTop = window.pageYOffset callback = callback || function () { } window.addEventListener( 'scroll', event => { clearTimeout(timer) timer = setTimeout(() => { let direction = 'up' const afterScrollTop = window.pageYOffset const delta = afterScrollTop - beforeScrollTop if (delta === 0) { return false } direction = delta > 0 ? 'down' : 'up' callback(direction) beforeScrollTop = afterScrollTop }, 50) }, false ) } /** * Remove loading animate * @param id parent element id or class * @param timeout */ export function removeLoadingAnimate(id = '', timeout = 1500) { if (id === '') { return } setTimeout(() => { document.body.removeChild(document.getElementById(id)) }, timeout) } export function debounce(fn, timeout = 300) { let timer return function (_this, ...args) { clearTimeout(timer) timer = setTimeout(() => { fn.apply(_this, args) }, timeout) } } export function copyArray(arr) { return arr.map((e) => { if (typeof e === 'object') { return Object.assign({}, e) } else { return e } }) } export async function sleep(n) { return new Promise((resolve) => setTimeout(resolve, n)) } export async function flicker(ele, property, value, interval = 300, times = 4) { const origin = ele.style[property] for (let i = 0; i < times * 2; i++) { if (i % 2) { ele.style[property] = value } else { ele.style[property] = origin } await sleep(interval) } ele.style[property] = origin } // 数字加逗号 export const toThousands = (num = 0) => { return num.toString().replace(/\d+/, function (n) { return n.replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') }) } // 从id得到部门名称 export const getDepartmentName = (allFlatDepartments, id) => { const _find = allFlatDepartments.find((item) => item.department_id === id) return _find?.department_name || '' } // 从id得到员工姓名 export const getDirectorName = (allFlatEmployees, id) => { const _find = allFlatEmployees.find((item) => item.employee_id === id) return _find?.nickname || '' } export const isEmptySubDepartments = (item) => { if (item.employees.length) { return false } for (let i = 0; i < item.sub_departments.length; i++) { if (!isEmptySubDepartments(item.sub_departments[i])) { return false } } return true } // format部门员工树 export const formatOption = (data, idType = 1, isDisabledAllCompany, departmentKey = 'department_id', employeeKey = 'employee_id') => { // idType 1 表示 员工id为`${department_id}-${employee_id}` // 2 表示 department-${department_id} employee-${employee_id} let _data = _.cloneDeep(data) _data = _data.filter((item) => { return item.employees.length || (item.sub_departments.length && !isEmptySubDepartments(item)) }) _data.forEach((item) => { if (isDisabledAllCompany) { item.isDisabled = !item.department_id } item.id = idType === 1 ? item[departmentKey] : `department-${item[departmentKey]}` item.label = item.department_name item.children = [ ...formatOption( item.sub_departments.map((dep) => { return { ...dep, id: idType === 1 ? dep[departmentKey] : `department-${dep[departmentKey]}`, label: dep.department_name } }), idType, isDisabledAllCompany, departmentKey, employeeKey ), ...item.employees.map((employee) => { return { ...employee, id: idType === 1 ? `${item[departmentKey]}-${employee[employeeKey]}` : `employee-${employee[employeeKey]}`, label: employee.nickname } }), ] }) return _data }