| @@ -312,7 +312,29 @@ const en = { | |||||
| star: 'Star', | star: 'Star', | ||||
| fork: 'Fork', | fork: 'Fork', | ||||
| noReposfound: 'No matching repositories found.', | noReposfound: 'No matching repositories found.', | ||||
| } | |||||
| }, | |||||
| timeObj: { | |||||
| ago: '{msg} ago', | |||||
| from_now: '{msg} from now', | |||||
| now: 'now', | |||||
| future: 'future', | |||||
| '1s': '1 second', | |||||
| '1m': '1 minute', | |||||
| '1h': '1 hour', | |||||
| '1d': '1 day', | |||||
| '1w': '1 week', | |||||
| '1mon': '1 month', | |||||
| '1y': '1 year', | |||||
| seconds: '{msg} seconds', | |||||
| minutes: '{msg} minutes', | |||||
| hours: '{msg} hours', | |||||
| days: '{msg} days', | |||||
| weeks: '{msg} weeks', | |||||
| months: '{msg} months', | |||||
| years: '{msg} years', | |||||
| raw_seconds: 'seconds', | |||||
| raw_minutes: 'minutes', | |||||
| }, | |||||
| } | } | ||||
| export default en; | export default en; | ||||
| @@ -220,7 +220,7 @@ const zh = { | |||||
| graphicMemory: "显存", | graphicMemory: "显存", | ||||
| memory: "内存", | memory: "内存", | ||||
| sharedMemory: "共享内存", | sharedMemory: "共享内存", | ||||
| tips:'本次新建的调试任务会放在您名下项目openi-notebook中,如果没有该项目系统会自动新建一个。' | |||||
| tips: '本次新建的调试任务会放在您名下项目openi-notebook中,如果没有该项目系统会自动新建一个。' | |||||
| }, | }, | ||||
| tranformImageFailed: '图片脱敏失败', | tranformImageFailed: '图片脱敏失败', | ||||
| originPicture: '原始图片', | originPicture: '原始图片', | ||||
| @@ -330,6 +330,28 @@ const zh = { | |||||
| fork: '派生', | fork: '派生', | ||||
| noReposfound: '未找到匹配的项目。', | noReposfound: '未找到匹配的项目。', | ||||
| }, | }, | ||||
| timeObj: { | |||||
| ago: '{msg}前', | |||||
| from_now: '{msg} 之后', | |||||
| now: '现在', | |||||
| future: '将来', | |||||
| '1s': '1 秒', | |||||
| '1m': '1 分钟', | |||||
| '1h': '1 小时', | |||||
| '1d': '1 天', | |||||
| '1w': '1 周', | |||||
| '1mon': '1 个月', | |||||
| '1y': '1 年', | |||||
| seconds: '{msg} 秒', | |||||
| minutes: '{msg} 分钟', | |||||
| hours: '{msg} 小时', | |||||
| days: '{msg} 天', | |||||
| weeks: '{msg} 周', | |||||
| months: '{msg} 个月', | |||||
| years: '{msg} 年', | |||||
| raw_seconds: '秒', | |||||
| raw_minutes: '分钟', | |||||
| }, | |||||
| } | } | ||||
| export default zh; | export default zh; | ||||
| @@ -12,6 +12,7 @@ | |||||
| <span class="title-1"> / </span> | <span class="title-1"> / </span> | ||||
| <span class="title-2" v-html="data.NameShow"></span> | <span class="title-2" v-html="data.NameShow"></span> | ||||
| </a> | </a> | ||||
| <i v-if="data.IsArchived" class="archive icon archived-icon"></i> | |||||
| <svg v-if="(data.IsPrivate || data.IsOwnerPrivate)" class="svg octicon-lock" width="15" height="15" | <svg v-if="(data.IsPrivate || data.IsOwnerPrivate)" class="svg octicon-lock" width="15" height="15" | ||||
| aria-hidden="true"> | aria-hidden="true"> | ||||
| <use xlink:href="#octicon-lock"></use> | <use xlink:href="#octicon-lock"></use> | ||||
| @@ -98,6 +99,7 @@ import 'dayjs/locale/zh-cn'; | |||||
| import 'dayjs/locale/en'; | import 'dayjs/locale/en'; | ||||
| import dayjs from 'dayjs'; | import dayjs from 'dayjs'; | ||||
| import { lang } from '~/langs'; | import { lang } from '~/langs'; | ||||
| import { timeSinceUnix } from '~/utils'; | |||||
| dayjs.locale(lang == 'zh-CN' ? 'zh-cn' : 'en'); | dayjs.locale(lang == 'zh-CN' ? 'zh-cn' : 'en'); | ||||
| dayjs.extend(relativeTime); | dayjs.extend(relativeTime); | ||||
| @@ -117,7 +119,8 @@ export default { | |||||
| }, | }, | ||||
| methods: { | methods: { | ||||
| calcFromNow(unix) { | calcFromNow(unix) { | ||||
| return dayjs(unix * 1000).fromNow(); | |||||
| // return dayjs(unix * 1000).fromNow(); | |||||
| return timeSinceUnix(unix, Date.now() / 1000); | |||||
| }, | }, | ||||
| dateFormat(unix) { | dateFormat(unix) { | ||||
| return lang == 'zh-CN' ? dayjs(unix * 1000).format('YYYY年MM月DD日 HH时mm分ss秒') : | return lang == 'zh-CN' ? dayjs(unix * 1000).format('YYYY年MM月DD日 HH时mm分ss秒') : | ||||
| @@ -72,7 +72,9 @@ export default { | |||||
| } | } | ||||
| }); | }); | ||||
| this.total = res.Data.Total; | this.total = res.Data.Total; | ||||
| LetterAvatar.transform(); | |||||
| this.$nextTick(() => { | |||||
| LetterAvatar.transform(); | |||||
| }); | |||||
| } else { | } else { | ||||
| this.list = []; | this.list = []; | ||||
| this.total = 0; | this.total = 0; | ||||
| @@ -27,7 +27,7 @@ export const transFileSize = (srcSize) => { | |||||
| srcSize = parseFloat(srcSize); | srcSize = parseFloat(srcSize); | ||||
| const index = Math.floor(Math.log(srcSize) / Math.log(1024)); | const index = Math.floor(Math.log(srcSize) / Math.log(1024)); | ||||
| const size = (srcSize / Math.pow(1024, index)).toFixed(2); | const size = (srcSize / Math.pow(1024, index)).toFixed(2); | ||||
| return size + ' ' + unitArr[index]; | |||||
| return size + ' ' + unitArr[index]; | |||||
| }; | }; | ||||
| export const renderSpecStr = (spec, showPoint) => { | export const renderSpecStr = (spec, showPoint) => { | ||||
| @@ -39,3 +39,91 @@ export const renderSpecStr = (spec, showPoint) => { | |||||
| var specStr = `${ngpu}, CPU: ${spec.CpuCores}, ${gpuMemStr}${i18n.t('resourcesManagement.mem')}: ${spec.MemGiB}GB${sharedMemStr}${pointStr}`; | var specStr = `${ngpu}, CPU: ${spec.CpuCores}, ${gpuMemStr}${i18n.t('resourcesManagement.mem')}: ${spec.MemGiB}GB${sharedMemStr}${pointStr}`; | ||||
| return specStr; | return specStr; | ||||
| }; | }; | ||||
| const Minute = 60; | |||||
| const Hour = 60 * Minute; | |||||
| const Day = 24 * Hour; | |||||
| const Week = 7 * Day; | |||||
| const Month = 30 * Day; | |||||
| const Year = 12 * Month; | |||||
| const computeTimeDiff = (diff) => { | |||||
| let diffStr = ''; | |||||
| switch (true) { | |||||
| case diff <= 0: | |||||
| diff = 0; | |||||
| diffStr = i18n.t('timeObj.now'); | |||||
| break; | |||||
| case diff < 2: | |||||
| diff = 0; | |||||
| diffStr = i18n.t('timeObj.1s'); | |||||
| break; | |||||
| case diff < 1 * Minute: | |||||
| diffStr = i18n.t('timeObj.seconds', { msg: Math.floor(diff) }); | |||||
| diff = 0; | |||||
| break; | |||||
| case diff < 2 * Minute: | |||||
| diff -= 1 * Minute; | |||||
| diffStr = i18n.t('timeObj.1m'); | |||||
| break; | |||||
| case diff < 1 * Hour: | |||||
| diffStr = i18n.t('timeObj.minutes', { msg: Math.floor(diff / Minute) }); | |||||
| diff -= diff / Minute * Minute; | |||||
| break; | |||||
| case diff < 2 * Hour: | |||||
| diff -= 1 * Hour; | |||||
| diffStr = i18n.t('timeObj.1h'); | |||||
| break; | |||||
| case diff < 1 * Day: | |||||
| diffStr = i18n.t('timeObj.hours', { msg: Math.floor(diff / Hour) }); | |||||
| diff -= diff / Hour * Hour; | |||||
| break; | |||||
| case diff < 2 * Day: | |||||
| diff -= 1 * Day; | |||||
| diffStr = i18n.t('timeObj.1d'); | |||||
| break; | |||||
| case diff < 1 * Week: | |||||
| diffStr = i18n.t('timeObj.days', { msg: Math.floor(diff / Day) }); | |||||
| diff -= diff / Day * Day; | |||||
| break; | |||||
| case diff < 2 * Week: | |||||
| diff -= 1 * Week; | |||||
| diffStr = i18n.t('timeObj.1w'); | |||||
| break; | |||||
| case diff < 1 * Month: | |||||
| diffStr = i18n.t('timeObj.weeks', { msg: Math.floor(diff / Week) }); | |||||
| diff -= diff / Week * Week; | |||||
| break; | |||||
| case diff < 2 * Month: | |||||
| diff -= 1 * Month; | |||||
| diffStr = i18n.t('timeObj.1mon'); | |||||
| break; | |||||
| case diff < 1 * Year: | |||||
| diffStr = i18n.t('timeObj.months', { msg: Math.floor(diff / Month) }); | |||||
| diff -= diff / Month * Month; | |||||
| break; | |||||
| case diff < 2 * Year: | |||||
| diff -= 1 * Year; | |||||
| diffStr = i18n.t('timeObj.1y'); | |||||
| break; | |||||
| default: | |||||
| diffStr = i18n.t('timeObj.years', { msg: Math.floor(diff / Year) }); | |||||
| diff -= (diff / Year) * Year; | |||||
| break; | |||||
| } | |||||
| return { diff, diffStr }; | |||||
| }; | |||||
| export const timeSinceUnix = (then, now) => { | |||||
| let lbl = 'timeObj.ago'; | |||||
| let diff = now - then; | |||||
| if (then > now) { | |||||
| lbl = 'timeObj.from_now'; | |||||
| diff = then - now; | |||||
| } | |||||
| if (diff <= 0) { | |||||
| return i18n.t('timeObj.now'); | |||||
| } | |||||
| const out = computeTimeDiff(diff); | |||||
| return i18n.t(lbl, { msg: out.diffStr }); | |||||
| }; | |||||