douyin/src/mock/index.ts
2024-04-23 15:37:55 +08:00

365 lines
8.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}