Vue3 + Pinia + Vite5 仿抖音,完全度90% . Vue3 + Pinia + Vite5 imitate TikTok with 90% completeness
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

147 lines
4.1 KiB

import Mock from 'mockjs'
import globalMethods from '../utils'
import resource from "../assets/data/resource.js";
import {shuffle} from "lodash";
function getParams(options) {
let params = globalMethods.$parseURL(options.url).params
params.pageNo = ~~params.pageNo
params.pageSize = ~~params.pageSize
return params
}
function getPage(options) {
let params = getParams(options)
let offset = params.pageNo * params.pageSize
let limit = params.pageNo * params.pageSize + params.pageSize
return {limit, offset, pageNo: params.pageNo}
}
Mock.setup({
timeout: '500-1000'
})
let allRecommendVideos = resource.videos.map(v => {
v.type = 'recommend-video'
return v
})
for (let i = 0; i < 50; i++) {
allRecommendVideos = allRecommendVideos.concat(
shuffle(resource.videos)
.slice(0, 10)
.map(v => {
v.type = 'recommend-video'
return v
}))
}
Mock.mock(/recommended/, options => {
let page = getPage(options)
return Mock.mock({
data: {
total: allRecommendVideos.length, list: allRecommendVideos.slice(page.offset, page.limit),
}, code: 200, msg: '',
})
})
// Mock.Random.extend({
// imgs: function (date) {
// return this.pick([
// require('../assets/img/poster/1.jpg'),
// require('../assets/img/poster/2.jpg'),
// require('../assets/img/poster/3.jpg'),
// require('../assets/img/poster/4.jpg'),
// require('../assets/img/poster/5.jpg'),
// require('../assets/img/poster/6.jpg'),
// require('../assets/img/poster/7.jpg'),
// require('../assets/img/poster/8.jpg'),
// require('../assets/img/poster/9.jpg'),
// require('../assets/img/poster/10.jpg'),
// require('../assets/img/poster/11.jpg'),
// ])
// }
// })
// !(function me() {
// let my = {total: Mock.Random.natural(1, 20)}
// my[`list|${my.total > 10 ? 10 : my.total}`] = [{'like|10000-990000': 1000000, src: '@imgs'}]
//
// let private1 = {total: Mock.Random.natural(1, 20)}
// private1[`list|${private1.total > 10 ? 10 : private1.total}`] = [{'like|10000-990000': 1000000, src: '@imgs'}]
//
// let like = {total: Mock.Random.natural(1, 20)}
// like[`list|${like.total > 10 ? 10 : like.total}`] = [{'like|10000-990000': 1000000, src: '@imgs'}]
//
// let collect = {total: Mock.Random.natural(1, 20)}
// collect[`list|${collect.total > 10 ? 10 : collect.total}`] = [{'like|10000-990000': 1000000, src: '@imgs'}]
//
// const data = Mock.mock({
// 'data': {
// my,
// private: private1,
// like,
// collect
// },
// code: 200,
// msg: '',
// })
// Mock.mock('me', data)
// }())
Mock.mock(/my/, options => {
let page = getPage(options)
console.log('mock', page)
return Mock.mock({
data: {
pageNo: page.pageNo, total: resource.my.length, list: resource.my.slice(page.offset, page.limit),
}, code: 200, msg: '',
})
})
Mock.mock(/like/, options => {
let page = getPage(options)
return Mock.mock({
data: {
pageNo: page.pageNo, total: resource.like.length, list: resource.like.slice(page.offset, page.limit),
}, code: 200, msg: '',
})
})
Mock.mock(/private1/, options => {
let page = getPage(options)
return Mock.mock({
data: {
pageNo: page.pageNo, total: resource.private1.length, list: resource.private1.slice(page.offset, page.limit),
}, code: 200, msg: '',
})
})
Mock.mock(/collect/, options => {
return Mock.mock({
data: {
video: {
total: resource.videos.length, list: resource.videos,
}, music: {
total: resource.music.length, list: resource.music,
}
}, code: 200, msg: '',
})
})
Mock.mock(/historyVideo/, options => {
let page = getPage(options)
return Mock.mock({
data: {
pageNo: page.pageNo, // total: resource.my.length,
total: 50, list: resource.my.slice(page.offset, page.limit),
}, code: 200, msg: '',
})
})
Mock.mock(/historyOther/, options => {
let page = getPage(options)
return Mock.mock({
data: {
pageNo: page.pageNo, total: 0, list: [],
}, code: 200, msg: '',
})
})
Mock.mock(/user\/friends/, options => {
return Mock.mock({
data: resource.users, code: 200, msg: '',
})
})