11 changed files with 576 additions and 256 deletions
@ -1,25 +1,215 @@ |
|||
<template> |
|||
<view class="wrap bg-white px-2"> |
|||
<role-list @getTasks="getTasks" /> |
|||
<view class="home-box u-skeleton"> |
|||
<scroll-view :enable-flex="true" :scroll-left="scrollLeft" :throttle="false" scroll-with-animation scroll-x> |
|||
<view class="tab-box"> |
|||
<view :key="index" @click="changeIndex(item.id, index)" class="tab-item" v-for="(item, index) in roles"> |
|||
<view :class="setColor(item.mine, item.id)" class="tab-children u-skeleton-fillet">{{ item.name }}</view> |
|||
</view> |
|||
</view> |
|||
</scroll-view> |
|||
</view> |
|||
<u-skeleton :animation="true" :loading="loading" bg-color="#fff"></u-skeleton> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import RoleList from './component/RoleList'; |
|||
import { mapState, mapMutations, mapActions } from 'vuex'; |
|||
|
|||
export default { |
|||
name: 'Roles', |
|||
components: { RoleList }, |
|||
data() { |
|||
return {}; |
|||
return { |
|||
tabIndex: 0, //当前访问的 index 默认为0 |
|||
tabList: [], //tab dom节点集合 |
|||
scrollLeft: 0, //scrollview需要滚动的距离 |
|||
loading: false, // 是否显示骨架屏组件 |
|||
roles: [ |
|||
{ |
|||
id: 1, |
|||
name: '项目经理', |
|||
mine: 0, |
|||
pm: 1, |
|||
sequence: 1, |
|||
}, |
|||
{ |
|||
id: 2, |
|||
name: '运维', |
|||
mine: 0, |
|||
pm: 0, |
|||
sequence: 2, |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
|
|||
computed: { ...mapState('home', ['visibleRoles', 'roleId', 'tasks']) }, |
|||
|
|||
watch: { |
|||
visibleRoles(val) { |
|||
if (val && val.length) { |
|||
this.roles = [...this.visibleRoles]; |
|||
this.loading = false; |
|||
} |
|||
}, |
|||
}, |
|||
|
|||
mounted() { |
|||
if (!this.visibleRoles || !this.visibleRoles.length) { |
|||
this.loading = true; |
|||
} else { |
|||
this.roles = [...this.visibleRoles]; |
|||
} |
|||
}, |
|||
|
|||
methods: { |
|||
getTasks(query) { |
|||
console.log('query: ', query); |
|||
this.$emit('getTasks', query); |
|||
...mapMutations('home', ['setRoleId', 'setTasks']), |
|||
...mapActions('home', ['handleRegularTask']), |
|||
|
|||
// 设置滚动位置 |
|||
setCurrentRole(index) { |
|||
const data = document.getElementsByClassName('tab-children'); |
|||
// 获取当前所有子元素 并插入到 tabList 列表中 |
|||
data.forEach(item => { |
|||
this.tabList.push({ |
|||
width: item.clientWidth, |
|||
left: item.offsetLeft, |
|||
}); |
|||
}); |
|||
//当前滚动的位置 |
|||
let left = 0; |
|||
let screenWidth = window.screen.width; |
|||
for (let i = 0; i < index; i++) { |
|||
left += this.tabList[i].width + this.tabList[i].left * 2; |
|||
} |
|||
left += this.tabList[index].width; |
|||
this.scrollLeft = left - screenWidth / 2; |
|||
}, |
|||
|
|||
// 切换角色 |
|||
async changeIndex(id, index) { |
|||
try { |
|||
this.setRoleId(id); |
|||
//改变index 即手动点击切换 我在此时将当前元素赋值给左边距 实现自动滚动 |
|||
this.setCurrentRole(index); |
|||
// 清空定期任务数据 |
|||
this.setTasks([]); |
|||
// 根据时间基准点和角色查找定期任务 |
|||
await this.$emit('getTasksByRole'); |
|||
} catch (error) { |
|||
console.log('error: ', error); |
|||
} |
|||
}, |
|||
|
|||
// 设置文字颜色 |
|||
setColor(mine, id) { |
|||
const { roleId } = this; |
|||
if (mine === '1' && roleId === id) { |
|||
return 'default-tab-choice'; |
|||
} |
|||
if (mine === '1' && roleId !== id) { |
|||
return 'default-tab-item'; |
|||
} |
|||
if (mine === '0' && roleId === id) { |
|||
return 'tab-choice'; |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped lang="scss"></style> |
|||
<style lang="scss" scoped> |
|||
.home-box { |
|||
// 对此盒子进行 sticky 粘性定位 |
|||
position: sticky; |
|||
top: 0; |
|||
background: #fff; // 设置背景 否则会透明 |
|||
|
|||
/* #ifdef H5 */ |
|||
//粘性定位 在h5下 加 原生头部高度 44px |
|||
top: 88rpx; |
|||
/* #endif */ |
|||
|
|||
.tab-box { |
|||
position: relative; |
|||
white-space: nowrap; |
|||
// height: 84rpx; |
|||
|
|||
.tab-item { |
|||
// width: 20%; |
|||
// height: 84rpx; |
|||
padding: 20rpx 24rpx; |
|||
position: relative; |
|||
display: inline-block; |
|||
text-align: center; |
|||
font-size: 30rpx; |
|||
transition-property: background-color, width; |
|||
} |
|||
|
|||
.default-tab-item { |
|||
color: $roleChoiceColor; |
|||
} |
|||
|
|||
.default-tab-choice { |
|||
//当前选中 基于此类名给与底部选中框 |
|||
position: relative; |
|||
color: $roleChoiceColor; |
|||
font-weight: 600; |
|||
} |
|||
|
|||
.default-tab-choice:before { |
|||
content: ''; |
|||
position: absolute; |
|||
left: 0; |
|||
bottom: -20rpx; |
|||
width: 100%; |
|||
height: 6rpx; |
|||
border-radius: 2rpx; |
|||
background: $roleChoiceColor; |
|||
} |
|||
|
|||
.tab-choice { |
|||
//当前选中 基于此类名给与底部选中框 |
|||
position: relative; |
|||
color: $uni-color-primary; |
|||
font-weight: 600; |
|||
} |
|||
|
|||
.tab-choice:before { |
|||
content: ''; |
|||
position: absolute; |
|||
left: 0; |
|||
bottom: -20rpx; |
|||
width: 100%; |
|||
height: 6rpx; |
|||
border-radius: 2rpx; |
|||
background: $uni-color-primary; |
|||
} |
|||
} |
|||
} |
|||
|
|||
// // 删除 底部滚动条 |
|||
/* #ifndef APP-NVUE */ |
|||
::-webkit-scrollbar, |
|||
::-webkit-scrollbar, |
|||
::-webkit-scrollbar { |
|||
display: none; |
|||
width: 0 !important; |
|||
height: 0 !important; |
|||
-webkit-appearance: none; |
|||
background: transparent; |
|||
} |
|||
|
|||
/* #endif */ |
|||
/* #ifdef H5 */ |
|||
// 通过样式穿透,隐藏H5下,scroll-view下的滚动条 |
|||
scroll-view ::v-deep ::-webkit-scrollbar { |
|||
display: none; |
|||
} |
|||
|
|||
/* #endif */ |
|||
|
|||
.skeleton { |
|||
height: 44rpx; |
|||
} |
|||
</style> |
|||
|
@ -1,225 +0,0 @@ |
|||
<template> |
|||
<view> |
|||
<view class="home-box u-skeleton"> |
|||
<scroll-view :enable-flex="true" :scroll-left="scrollLeft" :throttle="false" scroll-with-animation scroll-x> |
|||
<view class="tab-box"> |
|||
<view :key="index" @click="changeIndex(item.id, index)" class="tab-item" v-for="(item, index) in roles"> |
|||
<view :class="setColor(item.mine, item.id)" class="tab-children u-skeleton-fillet">{{ item.name }}</view> |
|||
</view> |
|||
</view> |
|||
</scroll-view> |
|||
</view> |
|||
<u-skeleton :animation="true" :loading="loading" bg-color="#fff"></u-skeleton> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapMutations, mapActions } from 'vuex'; |
|||
|
|||
export default { |
|||
name: 'RoleList', |
|||
data() { |
|||
return { |
|||
tabIndex: 0, //当前访问的 index 默认为0 |
|||
tabList: [], //tab dom节点集合 |
|||
scrollLeft: 0, //scrollview需要滚动的距离 |
|||
loading: false, // 是否显示骨架屏组件 |
|||
roles: [ |
|||
{ |
|||
id: 1, |
|||
name: '项目经理', |
|||
mine: 0, |
|||
pm: 1, |
|||
sequence: 1, |
|||
}, |
|||
{ |
|||
id: 2, |
|||
name: '运维', |
|||
mine: 0, |
|||
pm: 0, |
|||
sequence: 2, |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
|
|||
computed: { ...mapState('home', ['visibleRoles', 'roleId', 'tasks']) }, |
|||
|
|||
watch: { |
|||
visibleRoles(val) { |
|||
if (val && val.length) { |
|||
this.roles = [...this.visibleRoles]; |
|||
this.loading = false; |
|||
} |
|||
}, |
|||
}, |
|||
|
|||
mounted() { |
|||
if (!this.visibleRoles || !this.visibleRoles.length) { |
|||
this.loading = true; |
|||
} |
|||
}, |
|||
|
|||
methods: { |
|||
...mapMutations('home', ['setRoleId']), |
|||
...mapActions('home', ['handleRegularTask']), |
|||
|
|||
setCurrentRole(index) { |
|||
const data = document.getElementsByClassName('tab-children'); |
|||
// 获取当前所有子元素 并插入到 tabList 列表中 |
|||
data.forEach(item => { |
|||
this.tabList.push({ |
|||
width: item.clientWidth, |
|||
left: item.offsetLeft, |
|||
}); |
|||
}); |
|||
//当前滚动的位置 |
|||
let left = 0; |
|||
let screenWidth = window.screen.width; |
|||
for (let i = 0; i < index; i++) { |
|||
left += this.tabList[i].width + this.tabList[i].left * 2; |
|||
} |
|||
left += this.tabList[index].width; |
|||
this.scrollLeft = left - screenWidth / 2; |
|||
}, |
|||
|
|||
async changeIndex(id, index) { |
|||
this.setRoleId(id); |
|||
//改变index 即手动点击切换 我在此时将当前元素赋值给左边距 实现自动滚动 |
|||
this.setCurrentRole(index); |
|||
// 根据时间基准点和角色查找定期任务 |
|||
await this.$emit('getTasks', { queryType: 0 }); |
|||
await this.$emit('getTasks', { queryType: 1 }); |
|||
console.log('this.tasks && this.tasks.length: ', this.tasks && this.tasks.length); |
|||
if (this.tasks && this.tasks.length) { |
|||
debugger; |
|||
// 查上下的任务 |
|||
const upQuery = { |
|||
timeNode: +this.tasks[0].planStart, |
|||
queryType: 0, |
|||
queryNum: 6, |
|||
}; |
|||
console.log('upQuery: ', upQuery); |
|||
await this.$emit('getTasks', upQuery); |
|||
const downQuery = { |
|||
timeNode: +this.tasks[this.tasks.length - 1].planStart, |
|||
queryType: 0, |
|||
queryNum: 6, |
|||
}; |
|||
console.log('downQuery: ', downQuery); |
|||
await this.$emit('getTasks', downQuery); |
|||
} |
|||
}, |
|||
|
|||
// 设置文字颜色 |
|||
setColor(mine, id) { |
|||
const { roleId } = this; |
|||
if (mine === '1' && roleId === id) { |
|||
return 'default-tab-choice'; |
|||
} |
|||
if (mine === '1' && roleId !== id) { |
|||
return 'default-tab-item'; |
|||
} |
|||
if (mine === '0' && roleId === id) { |
|||
return 'tab-choice'; |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.home-box { |
|||
// 对此盒子进行 sticky 粘性定位 |
|||
position: sticky; |
|||
top: 0; |
|||
background: #fff; // 设置背景 否则会透明 |
|||
|
|||
/* #ifdef H5 */ |
|||
//粘性定位 在h5下 加 原生头部高度 44px |
|||
top: 88rpx; |
|||
/* #endif */ |
|||
|
|||
.tab-box { |
|||
position: relative; |
|||
white-space: nowrap; |
|||
// height: 84rpx; |
|||
|
|||
.tab-item { |
|||
// width: 20%; |
|||
// height: 84rpx; |
|||
padding: 20rpx 24rpx; |
|||
position: relative; |
|||
display: inline-block; |
|||
text-align: center; |
|||
font-size: 30rpx; |
|||
transition-property: background-color, width; |
|||
} |
|||
|
|||
.default-tab-item { |
|||
color: $roleChoiceColor; |
|||
} |
|||
|
|||
.default-tab-choice { |
|||
//当前选中 基于此类名给与底部选中框 |
|||
position: relative; |
|||
color: $roleChoiceColor; |
|||
font-weight: 600; |
|||
} |
|||
|
|||
.default-tab-choice:before { |
|||
content: ''; |
|||
position: absolute; |
|||
left: 0; |
|||
bottom: -20rpx; |
|||
width: 100%; |
|||
height: 6rpx; |
|||
border-radius: 2rpx; |
|||
background: $roleChoiceColor; |
|||
} |
|||
|
|||
.tab-choice { |
|||
//当前选中 基于此类名给与底部选中框 |
|||
position: relative; |
|||
color: $uni-color-primary; |
|||
font-weight: 600; |
|||
} |
|||
|
|||
.tab-choice:before { |
|||
content: ''; |
|||
position: absolute; |
|||
left: 0; |
|||
bottom: -20rpx; |
|||
width: 100%; |
|||
height: 6rpx; |
|||
border-radius: 2rpx; |
|||
background: $uni-color-primary; |
|||
} |
|||
} |
|||
} |
|||
|
|||
// // 删除 底部滚动条 |
|||
/* #ifndef APP-NVUE */ |
|||
::-webkit-scrollbar, |
|||
::-webkit-scrollbar, |
|||
::-webkit-scrollbar { |
|||
display: none; |
|||
width: 0 !important; |
|||
height: 0 !important; |
|||
-webkit-appearance: none; |
|||
background: transparent; |
|||
} |
|||
|
|||
/* #endif */ |
|||
/* #ifdef H5 */ |
|||
// 通过样式穿透,隐藏H5下,scroll-view下的滚动条 |
|||
scroll-view ::v-deep ::-webkit-scrollbar { |
|||
display: none; |
|||
} |
|||
|
|||
/* #endif */ |
|||
|
|||
.skeleton { |
|||
height: 44rpx; |
|||
} |
|||
</style> |
@ -0,0 +1,297 @@ |
|||
import dayjs from 'dayjs'; |
|||
var advancedFormat = require('dayjs/plugin/advancedFormat'); |
|||
var weekOfYear = require('dayjs/plugin/weekOfYear'); |
|||
dayjs.extend(advancedFormat); |
|||
dayjs.extend(weekOfYear); |
|||
|
|||
/** |
|||
* 格式化数字 |
|||
* @param {*} n |
|||
*/ |
|||
const formatNumber = n => { |
|||
const str = n.toString(); |
|||
return str[1] ? str : `0${str}`; |
|||
}; |
|||
|
|||
/** |
|||
* 格式化时间 |
|||
* @param {number} beginTime |
|||
*/ |
|||
const formatTime = beginTime => { |
|||
const date = new Date(beginTime); |
|||
const year = date.getFullYear(); |
|||
const month = date.getMonth() + 1; |
|||
const day = date.getDate(); |
|||
const hour = date.getHours(); |
|||
const minute = date.getMinutes(); |
|||
const second = date.getSeconds(); |
|||
|
|||
return `${[year, month, day].map(formatNumber).join('/')} ${[hour, minute, second].map(formatNumber).join(':')}`; |
|||
}; |
|||
|
|||
/** |
|||
* 时间转换 08:00 转换成8小时0分钟 |
|||
* @param {string} time |
|||
* @returns {{hours: number, minutes: number}} |
|||
*/ |
|||
const convertTime = time => { |
|||
const arr = time.split(':'); |
|||
return { |
|||
hours: parseInt(arr[0], 10), |
|||
minutes: parseInt(arr[1], 10), |
|||
}; |
|||
}; |
|||
|
|||
/** |
|||
* 将秒 -> 分 秒 |
|||
* @param {number} seconds |
|||
*/ |
|||
const secondToMinute = seconds => { |
|||
const minute = formatNumber(Math.floor(seconds / 60)); |
|||
const second = formatNumber(parseInt(seconds % 60, 10)); |
|||
return { |
|||
minute, |
|||
second, |
|||
}; |
|||
}; |
|||
|
|||
/** |
|||
* 将时间戳 -> 时:分 |
|||
* @param {Number} timestamp 时间戳 |
|||
* @return date:2018/10/09 time: 12:59 |
|||
*/ |
|||
const setTimestampToStr = timestamp => { |
|||
const timeObj = new Date(timestamp); |
|||
const year = timeObj.getFullYear(); |
|||
const month = formatNumber(timeObj.getMonth() + 1); |
|||
const day = formatNumber(timeObj.getDate()); |
|||
const hour = formatNumber(timeObj.getHours()); |
|||
const minute = formatNumber(timeObj.getMinutes()); |
|||
const date = `${year}/${month}/${day}`; |
|||
const time = `${hour}:${minute}`; |
|||
return { |
|||
date, |
|||
time, |
|||
}; |
|||
}; |
|||
|
|||
/** |
|||
* 检测时间(ms)是不是今天 |
|||
* @param {Number} time 时间戳 |
|||
*/ |
|||
const validateTimeIsToday = time => { |
|||
const timeDate = new Date(time); |
|||
const date = new Date(); |
|||
return timeDate.getFullYear() === date.getFullYear() && timeDate.getMonth() === date.getMonth() && timeDate.getDate() === date.getDate(); |
|||
}; |
|||
|
|||
/** |
|||
* 格式化开始时间 |
|||
* @param {Number} timestamp 时间戳 |
|||
* @return |
|||
* 如果是今天 -> 时:分 |
|||
* 如果不是今年 -> 年/月/日 时:分 |
|||
* 否则 *月*日 时:分 |
|||
*/ |
|||
const formatBeginTime = timestamp => { |
|||
const timeObj = new Date(timestamp); |
|||
const year = timeObj.getFullYear(); |
|||
const month = formatNumber(timeObj.getMonth() + 1); |
|||
const day = formatNumber(timeObj.getDate()); |
|||
const hour = formatNumber(timeObj.getHours()); |
|||
const minute = formatNumber(timeObj.getMinutes()); |
|||
const date = `${year}/${month}/${day}`; |
|||
const time = `${hour}:${minute}`; |
|||
const currentYear = new Date().getFullYear(); |
|||
|
|||
if (validateTimeIsToday(timestamp)) { |
|||
// 今天
|
|||
return `今天 ${time}`; |
|||
} else if (currentYear !== year) { |
|||
// 不是今年
|
|||
return `${date} ${time}`; |
|||
} else { |
|||
return `${month}月${day}日 ${time}`; |
|||
} |
|||
}; |
|||
|
|||
/** |
|||
* 格式化时长 |
|||
* @param {Number} duration 时长 |
|||
* 超过24小时( 24 * 60 * 60 * 1000 ms) 转换成天数 + 小时 + 分钟 |
|||
* 小于1分钟( 60 * 1000 ms) 转换成秒钟 |
|||
* 其余的显示分钟 |
|||
* 超过2小时( 2 * 60 * 60 * 1000 ms) 转换成小时 + 分钟数 |
|||
*/ |
|||
const formatDuration = duration => { |
|||
const minuteTime = 60 * 1000; |
|||
const hourTime = 60 * minuteTime; |
|||
const dayTime = 24 * hourTime; |
|||
const days = Math.floor(duration / dayTime); |
|||
const hours = Math.floor((duration % dayTime) / hourTime); |
|||
const minutes = Math.floor((duration % hourTime) / minuteTime); |
|||
if (duration <= 60 * 1000) { |
|||
// 小于1分钟 返回几秒
|
|||
return `${Math.floor(duration / 1000)}秒`; |
|||
} else if (duration > dayTime) { |
|||
// 大于1天
|
|||
if (minutes === 0) { |
|||
if (hours === 0) { |
|||
// 分钟数是0 和 小时数是0 返回 几天
|
|||
return `${days}天`; |
|||
} else { |
|||
// 分钟是0 小时不是0 返回 几天几小时
|
|||
return `${days}天${hours}小时`; |
|||
} |
|||
} else { |
|||
// 分钟不是0 返回几天几时几分
|
|||
return `${days}天${hours}时${minutes}分`; |
|||
} |
|||
} else if (duration > 2 * hourTime) { |
|||
// 大于2h
|
|||
if (minutes === 0) { |
|||
// 分钟是0 返回几小时
|
|||
return `${hours}小时`; |
|||
} else { |
|||
// 分钟不是0 返回几小时几分钟
|
|||
return `${hours}小时${minutes}分钟`; |
|||
} |
|||
} else { |
|||
// 其余情况 返回 几分钟
|
|||
return `${parseInt(duration / minuteTime)}分钟`; |
|||
} |
|||
}; |
|||
|
|||
/** |
|||
* 格式化时长 转换成对象格式 |
|||
* @param {Number} duration 时长 |
|||
* 超过24小时( 24 * 60 * 60 * 1000 ms) 转换成{days, hours, minutes, seconds: 0} |
|||
* 小于1分钟( 60 * 1000 ms) 转换成秒钟 { days: 0, hours: 0, minutes: 0, seconds } |
|||
* 其余的显示分钟 { days: 0, hours: 0, minutes, seconds: 0 } |
|||
* 超过2小时( 2 * 60 * 60 * 1000 ms) 转换成{ days: 0, hours, minutes, seconds: 0 } |
|||
*/ |
|||
const formatDurationToObject = duration => { |
|||
const minuteTime = 60 * 1000; |
|||
const hourTime = 60 * minuteTime; |
|||
const dayTime = 24 * hourTime; |
|||
const days = Math.floor(duration / dayTime); |
|||
const hours = Math.floor((duration % dayTime) / hourTime); |
|||
const minutes = Math.floor((duration % hourTime) / minuteTime); |
|||
const result = { |
|||
days: 0, |
|||
hours: 0, |
|||
minutes: 0, |
|||
seconds: 0, |
|||
}; |
|||
if (duration <= 60 * 1000) { |
|||
// 小于1分钟 返回几秒
|
|||
result.seconds = Math.floor(duration / 1000); |
|||
} else if (duration > dayTime) { |
|||
// 大于1天
|
|||
if (minutes === 0) { |
|||
if (hours === 0) { |
|||
// 分钟数是0 和 小时数是0 返回 几天
|
|||
result.days = days; |
|||
} else { |
|||
// 分钟是0 小时不是0 返回 几天几小时
|
|||
result.days = days; |
|||
result.hours = hours; |
|||
} |
|||
} else { |
|||
// 分钟不是0 返回几天几时几分
|
|||
result.days = days; |
|||
result.hours = hours; |
|||
result.minutes = minutes; |
|||
} |
|||
} else if (duration > 2 * hourTime) { |
|||
// 大于2h
|
|||
if (minutes === 0) { |
|||
// 分钟是0 返回几小时
|
|||
result.hours = hours; |
|||
} else { |
|||
// 分钟不是0 返回几小时几分钟
|
|||
result.hours = hours; |
|||
result.minutes = minutes; |
|||
} |
|||
} else { |
|||
// 其余情况 返回 几分钟
|
|||
result.minutes = minutes; |
|||
} |
|||
return result; |
|||
}; |
|||
|
|||
/** |
|||
* 将对象格式的时间转换成时间戳 |
|||
* @param {obj} 对象格式的时间 days, hours, minutes, seconds |
|||
* @return 时长的ms |
|||
*/ |
|||
const formatObjectTimeToMs = (days = 0, hours = 0, minutes = 0, seconds = 0) => { |
|||
return days * 24 * 60 * 60 * 1000 + hours * 60 * 60 * 1000 + minutes * 60 * 1000 + seconds * 1000; |
|||
}; |
|||
|
|||
/** |
|||
* 计算过滤 周期 |
|||
* @param {string} time 周期字符串 |
|||
* @return {string} cycle 周期英文字符串 |
|||
*/ |
|||
const computeCycle = time => { |
|||
// 加载下一个周期的任务
|
|||
let cycle = 'day'; |
|||
switch (time) { |
|||
case '天': |
|||
cycle = 'day'; |
|||
break; |
|||
case '周': |
|||
cycle = 'week'; |
|||
break; |
|||
case '月': |
|||
cycle = 'month'; |
|||
break; |
|||
default: |
|||
cycle = '日程'; |
|||
break; |
|||
} |
|||
return cycle; |
|||
}; |
|||
|
|||
/** |
|||
* 将时间按周期语义化 |
|||
* @param {string} cycle 周期 |
|||
* @param {number|string} time 时间 |
|||
*/ |
|||
const formatStartTimeToCycleTime = (cycle, time) => { |
|||
let result = ''; |
|||
const _time = dayjs(+time); |
|||
switch (cycle) { |
|||
case '天': |
|||
result = _time.format('YYYY年M月D日'); |
|||
break; |
|||
case '周': |
|||
result = _time.format('YYYY年w周'); |
|||
break; |
|||
case '月': |
|||
result = _time.format('YYYY年M月'); |
|||
break; |
|||
case '日程': |
|||
result = _time.format('YYYY年M月D日 HH:mm'); |
|||
break; |
|||
default: |
|||
result = _time.format('YYYY年M月D日'); |
|||
break; |
|||
} |
|||
return result; |
|||
}; |
|||
|
|||
export default { |
|||
formatNumber, |
|||
formatTime, |
|||
convertTime, |
|||
secondToMinute, |
|||
setTimestampToStr, |
|||
formatBeginTime, |
|||
formatDuration, |
|||
formatDurationToObject, |
|||
formatObjectTimeToMs, |
|||
computeCycle, |
|||
formatStartTimeToCycleTime, |
|||
}; |
Loading…
Reference in new issue