Refactor activity tab components

This commit is contained in:
the1812 2019-08-13 11:24:49 +08:00
parent b011595cf5
commit 254731badf
4 changed files with 140 additions and 163 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -889,6 +889,39 @@ class NotifyIframe extends Iframe {
}
}
}
const getActivityTabComponent = ({ dataObject, apiUrl, name, handleJson, template }) => {
return {
template,
methods: {
handleJson,
async fetchData (silent = false) {
try {
const json = await Ajax.getJsonWithCredentials(apiUrl)
if (json.code !== 0) {
if (silent === true) {
return
}
throw new Error(json.message)
}
await this.handleJson(json)
} catch (error) {
logError(`加载${name}动态失败, error = ${error}`)
} finally {
this.loading = false
}
}
},
data () {
return Object.assign({
loading: true,
}, dataObject)
},
mounted () {
this.fetchData()
setInterval(() => this.fetchData(true), Activities.updateInterval)
},
}
}
class Activities extends NavbarComponent {
constructor () {
super();
@ -913,7 +946,10 @@ class Activities extends NavbarComponent {
this.onPopup = () => {
this.setNotifyCount(0)
}
setInterval(() => this.getNotifyCount(), 60 * 1000)
setInterval(() => this.getNotifyCount(), Activities.updateInterval)
}
static get updateInterval () {
return 60 * 1000 // 每分钟更新1次动态提醒数字
}
static getLatestID () {
return document.cookie.replace(new RegExp(`(?:(?:^|.*;\\s*)bp_t_offset_${userInfo.mid}\\s*\\=\\s*([^;]*).*$)|^.*$`), '$1')
@ -1039,7 +1075,7 @@ class Activities extends NavbarComponent {
}
},
},
'video-activity': {
'video-activity': Object.assign({
components: {
'video-card': {
props: ['card', 'watchlaterInit'],
@ -1084,6 +1120,13 @@ class Activities extends NavbarComponent {
`,
},
},
}, getActivityTabComponent({
dataObject: {
leftCards: [],
rightCards: [],
},
apiUrl: `https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=${userInfo.mid}&type_list=8`,
name: '视频',
template: /*html*/`
<div class="video-activity" :class="{center: loading || (leftCards.length + rightCards.length) === 0}">
<activity-loading :loading="loading"></activity-loading>
@ -1096,22 +1139,7 @@ class Activities extends NavbarComponent {
</div>
</div>
`,
data () {
return {
leftCards: [],
rightCards: [],
loading: true,
}
},
async mounted () {
try {
const json = await Ajax.getJsonWithCredentials(`https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=${userInfo.mid}&type_list=8`)
if (json.code !== 0) {
throw new Error(json.message)
}
if (!json.data.cards) {
return
}
handleJson: async function (json) {
const { getWatchlaterList } = await import('../../video/watchlater-api')
const watchlaterList = await getWatchlaterList()
const cards = json.data.cards.map(card => {
@ -1138,14 +1166,12 @@ class Activities extends NavbarComponent {
this.leftCards.pop()
}
Activities.updateLatestID(cards)
} catch (error) {
logError(`加载视频动态失败, error = ${error}`)
} finally {
this.loading = false
}
},
},
'bangumi-activity': {
})),
'bangumi-activity': getActivityTabComponent({
dataObject: { cards: [] },
apiUrl: `https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=${userInfo.mid}&type_list=512`,
name: '番剧',
template: /*html*/`
<div class="bangumi-activity" :class="{center: loading || cards.length === 0}">
<activity-loading :loading="loading"></activity-loading>
@ -1160,21 +1186,7 @@ class Activities extends NavbarComponent {
</a>
</div>
`,
data () {
return {
cards: [],
loading: true,
}
},
async mounted () {
try {
const json = await Ajax.getJsonWithCredentials(`https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=${userInfo.mid}&type_list=512`)
if (json.code !== 0) {
throw new Error(json.message)
}
if (!json.data.cards) {
return
}
handleJson: async function (json) {
this.cards = json.data.cards.map(card => {
const cardJson = JSON.parse(card.card)
return {
@ -1188,14 +1200,11 @@ class Activities extends NavbarComponent {
}
})
Activities.updateLatestID(this.cards)
} catch (error) {
logError(`加载番剧动态失败, error = ${error}`)
} finally {
this.loading = false
}
},
},
'column-activity': {
}),
'column-activity': getActivityTabComponent({
dataObject: { cards: [] },
apiUrl: `https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=${userInfo.mid}&type_list=64`,
template: /*html*/`
<div class="column-activity" :class="{center: loading || cards.length === 0}">
<activity-loading :loading="loading"></activity-loading>
@ -1213,21 +1222,7 @@ class Activities extends NavbarComponent {
</a>
</div>
`,
data () {
return {
cards: [],
loading: true,
}
},
async mounted () {
try {
const json = await Ajax.getJsonWithCredentials(`https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=${userInfo.mid}&type_list=64`)
if (json.code !== 0) {
throw new Error(json.message)
}
if (!json.data.cards) {
return
}
handleJson: async function (json) {
this.cards = json.data.cards.map(card => {
const cardJson = JSON.parse(card.card)
return {
@ -1244,15 +1239,11 @@ class Activities extends NavbarComponent {
}
})
Activities.updateLatestID(this.cards)
} catch (error) {
logError(`加载专栏动态失败, error = ${error}`)
} finally {
this.loading = false
}
},
},
// 'photos-activity': {},
'live-activity': {
}),
'live-activity': getActivityTabComponent({
dataObject: { cards: [] },
apiUrl: `https://api.live.bilibili.com/relation/v1/feed/feed_list?page=1&pagesize=24`,
template: /*html*/`
<div class="live-activity" :class="{center: loading || cards.length === 0}">
<activity-loading :loading="loading"></activity-loading>
@ -1264,18 +1255,7 @@ class Activities extends NavbarComponent {
</a>
</div>
`,
data () {
return {
cards: [],
loading: true,
}
},
async mounted () {
try {
const json = await Ajax.getJsonWithCredentials(`https://api.live.bilibili.com/relation/v1/feed/feed_list?page=1&pagesize=24`)
if (json.code !== 0) {
throw new Error(json.message)
}
handleJson: async function (json) {
this.cards = json.data.list.map(card => {
return {
faceUrl: card.face,
@ -1285,13 +1265,8 @@ class Activities extends NavbarComponent {
url: card.link,
}
})
} catch (error) {
logError(`加载直播动态失败, error = ${error}`)
} finally {
this.loading = false
}
},
},
}),
},
computed: {
content () {
@ -1302,6 +1277,7 @@ class Activities extends NavbarComponent {
},
},
mounted () {
setInterval(() => {
for (const tab of this.tabs) {
if (tab.notifyApi) {
Ajax.getJsonWithCredentials(tab.notifyApi).then(json => {
@ -1312,6 +1288,7 @@ class Activities extends NavbarComponent {
})
}
}
}, Activities.updateInterval)
},
watch: {
selectedTab (name) {