365 lines
8.8 KiB
TypeScript
365 lines
8.8 KiB
TypeScript
import resource from '../assets/data/resource.js'
|
||
import posts6 from '@/assets/data/posts6.json'
|
||
import { _fetch, cloneDeep, random } from '@/utils'
|
||
import { BASE_URL, FILE_URL } from '@/config'
|
||
import { useBaseStore } from '@/store/pinia'
|
||
import { axiosInstance } from '@/utils/request'
|
||
import MockAdapter from 'axios-mock-adapter'
|
||
|
||
const mock = new MockAdapter(axiosInstance, { delayResponse: 300 })
|
||
|
||
function getPage2(params: any): { limit: number; offset: number; pageNo: number } {
|
||
const offset = params.pageNo * params.pageSize
|
||
const limit = params.pageNo * params.pageSize + params.pageSize
|
||
return { limit, offset, pageNo: params.pageNo }
|
||
}
|
||
|
||
let allRecommendPosts = []
|
||
let userVideos = []
|
||
let allRecommendVideos = posts6.map((v: any) => {
|
||
v.type = 'recommend-video'
|
||
return v
|
||
})
|
||
|
||
// console.log('allRecommendVideos', allRecommendVideos)
|
||
// eslint-disable-next-line
|
||
const t = [
|
||
{
|
||
type: 'imgs',
|
||
src: `https://imgapi.cn/bing.php`,
|
||
author: {
|
||
unique_id: 1,
|
||
avatar_168x168: {
|
||
url_list: []
|
||
},
|
||
avatar_300x300: {
|
||
url_list: []
|
||
},
|
||
cover_url: [
|
||
{
|
||
url_list: []
|
||
}
|
||
],
|
||
white_cover_url: [
|
||
{
|
||
url_list: []
|
||
}
|
||
]
|
||
}
|
||
}
|
||
// {
|
||
// type: 'user',
|
||
// src: `https://imgapi.cn/bing.php`,
|
||
// author: {
|
||
// unique_id: 2,
|
||
// avatar_168x168: {
|
||
// url_list: []
|
||
// },
|
||
// avatar_300x300: {
|
||
// url_list: []
|
||
// },
|
||
// cover_url: [
|
||
// {
|
||
// url_list: []
|
||
// }
|
||
// ],
|
||
// white_cover_url: [
|
||
// {
|
||
// url_list: []
|
||
// }
|
||
// ]
|
||
// }
|
||
// },
|
||
// {
|
||
// type: 'img',
|
||
// src: `https://imgapi.cn/bing.php`,
|
||
// author: {
|
||
// unique_id: 3,
|
||
// avatar_168x168: {
|
||
// url_list: []
|
||
// },
|
||
// avatar_300x300: {
|
||
// url_list: []
|
||
// },
|
||
// cover_url: [
|
||
// {
|
||
// url_list: []
|
||
// }
|
||
// ],
|
||
// white_cover_url: [
|
||
// {
|
||
// url_list: []
|
||
// }
|
||
// ]
|
||
// }
|
||
// }
|
||
]
|
||
|
||
// allRecommendVideos.unshift(...t)
|
||
// {
|
||
// type: 'user-imgs',
|
||
// src: `http://douyin.ttentau.top/0.mp4?vframe/jpg/offset/0/w/${document.body.clientWidth}`,
|
||
// author: {
|
||
// unique_id: uniqueId('list_')
|
||
// }
|
||
// },
|
||
// {
|
||
// type: 'user',
|
||
// src: `http://douyin.ttentau.top/0.mp4?vframe/jpg/offset/0/w/${document.body.clientWidth}`,
|
||
// author: {
|
||
// unique_id: uniqueId('list_')
|
||
// }
|
||
// },
|
||
|
||
async function fetchData() {
|
||
const baseStore = useBaseStore()
|
||
_fetch(BASE_URL + '/data/videos.md').then((r) => {
|
||
r.json().then(async (v) => {
|
||
let userList = cloneDeep(baseStore.users)
|
||
if (!userList.length) {
|
||
await baseStore.init()
|
||
userList = cloneDeep(baseStore.users)
|
||
}
|
||
v = v.map((w) => {
|
||
w.type = 'recommend-video'
|
||
const item: any = userList.find((a) => String(a.uid) === String(w.author_user_id))
|
||
if (item) w.author = item
|
||
return w
|
||
})
|
||
allRecommendVideos = allRecommendVideos.concat(v)
|
||
})
|
||
})
|
||
}
|
||
|
||
//TODO 有个bug,一开始只返回了6条数据,但第二次前端传过来的pageNo是2了,就是会从第10条数据开始返回,导致中间漏了4条
|
||
export async function startMock() {
|
||
mock.onGet(/video\/recommended/).reply(async (config) => {
|
||
const page = getPage2(config.params)
|
||
console.log('allRecommendVideos', cloneDeep(allRecommendVideos.length), page)
|
||
return [
|
||
200,
|
||
{
|
||
data: {
|
||
total: 844,
|
||
list: allRecommendVideos.slice(page.offset, page.limit) // list: allRecommendVideos.slice(0, 6),
|
||
},
|
||
code: 200,
|
||
msg: ''
|
||
}
|
||
]
|
||
})
|
||
|
||
mock.onGet(/video\/comments/).reply(async (config) => {
|
||
const videoIds = [
|
||
'7260749400622894336',
|
||
'7128686458763889956',
|
||
'7293100687989148943',
|
||
'6923214072347512068',
|
||
'7005490661592026405',
|
||
'7161000281575148800',
|
||
'7267478481213181238',
|
||
'6686589698707590411',
|
||
'7321200290739326262',
|
||
'7194815099381484860',
|
||
'6826943630775831812',
|
||
'7110263965858549003',
|
||
'7295697246132227343',
|
||
'7270431418822446370',
|
||
'6882368275695586568',
|
||
'7000587983069957383'
|
||
]
|
||
let id = config.params.id
|
||
if (!videoIds.includes(String(id))) {
|
||
id = videoIds[random(0, videoIds.length - 1)]
|
||
}
|
||
const r2 = await _fetch(`${FILE_URL}/comments/video_id_${id}.md`)
|
||
const v = await r2.json()
|
||
if (v) {
|
||
return [200, { data: v, code: 200 }]
|
||
}
|
||
return [200, { code: 500 }]
|
||
})
|
||
|
||
mock.onGet(/video\/private/).reply(async (config) => {
|
||
const page = getPage2(config.params)
|
||
return [
|
||
200,
|
||
{
|
||
data: {
|
||
total: 10,
|
||
list: allRecommendVideos.slice(100, 110).slice(page.offset, page.limit)
|
||
},
|
||
code: 200,
|
||
msg: ''
|
||
}
|
||
]
|
||
})
|
||
|
||
mock.onGet(/video\/like/).reply(async (config) => {
|
||
const page = getPage2(config.params)
|
||
return [
|
||
200,
|
||
{
|
||
data: {
|
||
total: 150,
|
||
list: allRecommendVideos.slice(200, 350).slice(page.offset, page.limit)
|
||
},
|
||
code: 200,
|
||
msg: ''
|
||
}
|
||
]
|
||
})
|
||
|
||
mock.onGet(/video\/my/).reply(async (config) => {
|
||
const page = getPage2(config.params)
|
||
if (!userVideos.length) {
|
||
// let r = await fetch(BASE_URL + '/data/user-71158770.json')
|
||
// let r = await fetch(BASE_URL + '/data/user-8357999.json')
|
||
const r = await _fetch(BASE_URL + '/data/user_video_list/user-12345xiaolaohu.md')
|
||
const list = await r.json()
|
||
const baseStore = useBaseStore()
|
||
const userList = cloneDeep(baseStore.users)
|
||
|
||
userVideos = list.map((w) => {
|
||
if (userList.length) {
|
||
const item = userList.find((a) => String(a.uid) === String(w.author_user_id))
|
||
if (item) w.author = item
|
||
}
|
||
return w
|
||
})
|
||
}
|
||
|
||
return [
|
||
200,
|
||
{
|
||
data: {
|
||
pageNo: page.pageNo,
|
||
total: userVideos.length,
|
||
list: userVideos.slice(page.offset, page.limit)
|
||
},
|
||
code: 200,
|
||
msg: ''
|
||
}
|
||
]
|
||
})
|
||
|
||
mock.onGet(/video\/history/).reply(async (config) => {
|
||
const page = getPage2(config.params)
|
||
return [
|
||
200,
|
||
{
|
||
data: {
|
||
total: 150,
|
||
list: allRecommendVideos.slice(200, 350).slice(page.offset, page.limit)
|
||
},
|
||
code: 200,
|
||
msg: ''
|
||
}
|
||
]
|
||
})
|
||
|
||
mock.onGet(/user\/collect/).reply(async () => {
|
||
return [
|
||
200,
|
||
{
|
||
data: {
|
||
video: {
|
||
total: 50,
|
||
list: allRecommendVideos.slice(350, 400)
|
||
},
|
||
music: {
|
||
total: resource.music.length,
|
||
list: resource.music
|
||
}
|
||
},
|
||
code: 200,
|
||
msg: ''
|
||
}
|
||
]
|
||
})
|
||
|
||
mock.onGet(/user\/video_list/).reply(async (config) => {
|
||
const id = config.params.id
|
||
const r2 = await _fetch(`${FILE_URL}/user_video_list/user-${id}.md`)
|
||
const v = await r2.json()
|
||
if (v) {
|
||
return [200, { data: v, code: 200 }]
|
||
}
|
||
return [200, { code: 500 }]
|
||
})
|
||
|
||
mock.onGet(/user\/panel/).reply(async () => {
|
||
const r2 = await _fetch(BASE_URL + '/data/users.md')
|
||
const v = await r2.json()
|
||
// let item = v.find(a => a.uid === '68310389333')
|
||
// let item = v.find(a => a.uid === '59054327754')
|
||
const item = v.find((a) => a.uid === '2739632844317827')
|
||
if (item) {
|
||
return [200, { data: item, code: 200 }]
|
||
}
|
||
return [200, { code: 500 }]
|
||
})
|
||
|
||
mock.onGet(/user\/friends/).reply(async () => {
|
||
const r2 = await _fetch(BASE_URL + '/data/users.md')
|
||
const v = await r2.json()
|
||
return [200, { data: v, code: 200 }]
|
||
})
|
||
|
||
mock.onGet(/historyOther/).reply(async (config) => {
|
||
const page = getPage2(config.params)
|
||
return [
|
||
200,
|
||
{
|
||
data: {
|
||
pageNo: page.pageNo,
|
||
total: 0,
|
||
list: []
|
||
},
|
||
code: 200,
|
||
msg: ''
|
||
}
|
||
]
|
||
})
|
||
|
||
mock.onGet(/post\/recommended/).reply(async (config) => {
|
||
const page = getPage2(config.params)
|
||
|
||
if (!allRecommendPosts.length) {
|
||
const r = await _fetch(BASE_URL + '/data/posts.md')
|
||
allRecommendPosts = await r.json()
|
||
}
|
||
return [
|
||
200,
|
||
{
|
||
data: {
|
||
pageNo: page.pageNo,
|
||
total: allRecommendPosts.length,
|
||
list: allRecommendPosts.slice(0, 1000).slice(page.offset, page.limit)
|
||
},
|
||
code: 200,
|
||
msg: ''
|
||
}
|
||
]
|
||
})
|
||
|
||
mock.onGet(/shop\/recommended/).reply(async (config) => {
|
||
const page = getPage2(config.params)
|
||
|
||
const r2 = await _fetch(BASE_URL + '/data/goods.md')
|
||
const v = await r2.json()
|
||
return [
|
||
200,
|
||
{
|
||
data: {
|
||
total: v.length,
|
||
list: v.slice(page.offset, page.limit)
|
||
},
|
||
code: 200
|
||
}
|
||
]
|
||
})
|
||
|
||
setTimeout(fetchData, 1000)
|
||
}
|