UNPKG

vue-django

Version:

个人实验项目, 本框架的目标是借鉴并超越django admin的自动化思想, 实现UI前端的极简快速定制开发

99 lines (94 loc) 2.75 kB
/** * Created by denishuang on 2020/2/8. */ import {throttle} from 'lodash' import {$http} from '@/configs/axios' import Qs from 'qs' import {parseTime} from './filters' let INTERVAL = 5 function DailyLog() { let a = { m: {}, saveTime: undefined, delayMethods: {}, async log (app, model, id, metics, subMetics, v, interval) { let k = `${app}.${model}.${id}.${metics}.${subMetics}` let dk = parseTime(new Date(), '{y}-{m}-{d}') let dm = this.m[dk] || {} let it = interval || INTERVAL dm[k] = v this.m[dk] = dm this.delayMethods[`save${it}s`]() }, save () { return $http.post('/dailylog/dailylog/write/', this.m) }, init () { for (var i = 1; i <= 3; i++) { let p = Math.pow(2, i - 1) * INTERVAL this.delayMethods[`save${p}s`] = throttle(() => this.save(), p * 1000) } return this } } return a.init() } export default DailyLog() // created () { // // console.log(this.delayMethods) // } // }) export function Performance(app, model, ownerId, target, interval) { let qd = {app, model, owner_id: ownerId} return { data: { parts: [], dates: [], target, score: null, times: 0 }, post () { let d = {...qd, detail: this.data} return $http.post('/dailylog/performance/write/', d) }, save: throttle(function () { this.post() }, interval || 10000), stack (s, v) { if (s[s.length - 1] !== v) { s.push(v) } }, read () { return $http.get(`/dailylog/performance/read/?${Qs.stringify(qd)}`).then(({data}) => { Object.assign(this.data, data.detail, {target}) return this.data }) }, addPart (p) { this.stack(this.data.parts, p) let d = parseTime(new Date(), '{y}-{m}-{d}') this.stack(this.data.dates, d) return this }, addScore (score) { this.data.score = Math.max(this.data.score, score) return this }, addTimes (times) { this.data.times += times return this } } } export function userOnlineTimeCounter(callBack) { let delta = 30 function action () { $http.post(`/dailylog/user/count/`, {metics: 'online_time', delta}).then(({data}) => { callBack({delta, result:data.detail}) }) } action() setInterval(action, delta * 1000) }