This commit is contained in:
zyronon 2024-03-26 17:57:07 +08:00
parent c0c9ab8c44
commit 7c262f403d
30 changed files with 637 additions and 942 deletions

View File

@ -781,172 +781,6 @@
] ]
} }
}, },
{
"aweme_id": "7344265295055310132",
"desc": "“国服柳如烟上线”#如烟#这谁顶得住",
"create_time": 1709970027,
"music": {
"id": 7337886325556727000,
"title": "@小欣儿创作的原声",
"author": "小欣儿",
"cover_medium": {
"uri": "720x720/aweme-avatar/tos-cn-avt-0015_a6d8094050c5a9aac6137aae126b7a47",
"url_list": [
"https://p3-pc.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-avt-0015_a6d8094050c5a9aac6137aae126b7a47.jpeg?from=116350172"
],
"width": 720,
"height": 720
},
"cover_thumb": {
"uri": "100x100/aweme-avatar/tos-cn-avt-0015_a6d8094050c5a9aac6137aae126b7a47",
"url_list": [
"https://p3-pc.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_a6d8094050c5a9aac6137aae126b7a47.jpeg?from=116350172"
],
"width": 720,
"height": 720
},
"play_url": {
"uri": "https://sf6-cdn-tos.douyinstatic.com/obj/ies-music/7337886324118031113.mp3",
"url_list": [
"https://sf6-cdn-tos.douyinstatic.com/obj/ies-music/7337886324118031113.mp3",
"https://sf3-cdn-tos.douyinstatic.com/obj/ies-music/7337886324118031113.mp3"
],
"width": 720,
"height": 720,
"url_key": "7337886325556726565"
},
"duration": 11,
"user_count": 0,
"owner_id": "110935171531",
"owner_nickname": "小欣儿",
"is_original": false
},
"video": {
"play_addr": {
"uri": "v0200fg10000cnm149rc77u1u62fpfa0",
"url_list": [
"https://www.douyin.com/aweme/v1/play/?video_id=v0200fg10000cnm149rc77u1u62fpfa0&line=0&file_id=de5d861881cb4c3ba5ba7f73851d1531&sign=593ac30f710cedcdbb5458afe1ae625f&is_play_url=1&source=PackSourceEnum_PUBLISH"
],
"width": 1080,
"height": 1920,
"url_key": "v0200fg10000cnm149rc77u1u62fpfa0_h264_1080p_1573778",
"data_size": 2219814,
"file_hash": "593ac30f710cedcdbb5458afe1ae625f",
"file_cs": "c:0-10214-c463|d:0-1109906-c9ec,1109907-2219813-7d47|a:v0200fg10000cnm149rc77u1u62fpfa0"
},
"cover": {
"uri": "tos-cn-i-0813c001/oUAIgDcA9JDElAEbsAf7DBmgcymnACepChkAkp",
"url_list": [
"6mGGKOOF7psnNoFKnjgVF.png"
],
"width": 720,
"height": 720
},
"height": 1920,
"width": 1080,
"ratio": "1080p",
"use_static_cover": true,
"duration": 11284
},
"share_url": "https://www.iesdouyin.com/share/video/7344265295055310132/?region=CN&mid=7337886325556726565&u_code=13kgm680k&did=MS4wLjABAAAAiOgYyZm8XbWZMr5o3OvhR-TEOuNygb_hQOwkie-VXJpDYaR4vZfpiIGBfAWKCFHB&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&share_sign=qLwbH_SIOvxZIUHxEYTsfovxpxr4G1WZXSYaitKR.Zs-&share_version=170400&ts=1710488945&from_aid=6383&from_ssr=1",
"statistics": {
"admire_count": 4,
"comment_count": 105,
"digg_count": 24454,
"collect_count": 3199,
"play_count": 0,
"share_count": 2565
},
"status": {
"listen_video_status": 0,
"is_delete": false,
"allow_share": true,
"is_prohibited": false,
"in_reviewing": false,
"part_see": 0,
"private_status": 0,
"review_result": {
"review_status": 0
}
},
"text_extra": [
{
"start": 9,
"end": 12,
"type": 1,
"hashtag_name": "如烟",
"hashtag_id": "1601875223142424",
"is_commerce": false,
"caption_start": 9,
"caption_end": 12
},
{
"start": 12,
"end": 18,
"type": 1,
"hashtag_name": "这谁顶得住",
"hashtag_id": "1620356061458446",
"is_commerce": false,
"caption_start": 12,
"caption_end": 18
}
],
"is_top": 0,
"share_info": {
"share_url": "https://www.iesdouyin.com/share/video/7344265295055310132/?region=CN&mid=7337886325556726565&u_code=13kgm680k&did=MS4wLjABAAAAiOgYyZm8XbWZMr5o3OvhR-TEOuNygb_hQOwkie-VXJpDYaR4vZfpiIGBfAWKCFHB&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&share_sign=qLwbH_SIOvxZIUHxEYTsfovxpxr4G1WZXSYaitKR.Zs-&share_version=170400&ts=1710488945&from_aid=6383&from_ssr=1",
"share_link_desc": "3.33 PkC:/ 01/17 t@r.eo “国服柳如烟上线”# 如烟# 这谁顶得住 %s 复制此链接打开Dou音搜索直接观看视频"
},
"duration": 11284,
"image_infos": null,
"risk_infos": {
"vote": false,
"warn": false,
"risk_sink": false,
"type": 0,
"content": ""
},
"position": null,
"author_user_id": 2739632844317827,
"prevent_download": false,
"long_video": null,
"aweme_control": {
"can_forward": true,
"can_share": true,
"can_comment": true,
"can_show_comment": true
},
"images": null,
"suggest_words": {
"suggest_words": [
{
"words": [
{
"word": "柳如烟扮演者",
"word_id": "6595880057841915140",
"info": "{\"qrec_for_search\":\"{}\"}"
}
],
"scene": "comment_top_rec",
"icon_url": "",
"hint_text": "大家都在搜:",
"extra_info": "{}"
},
{
"words": [
{
"word": "柳如烟",
"word_id": "6538743212901684488",
"info": "{\"qrec_for_search\":\"{}\"}"
}
],
"scene": "detail_inbox_rex",
"icon_url": "",
"hint_text": "",
"extra_info": "{}"
}
]
}
},
{ {
"aweme_id": "7343597612525767976", "aweme_id": "7343597612525767976",
"desc": "男生:今天出门遇见一傻子#真实了#心动", "desc": "男生:今天出门遇见一傻子#真实了#心动",
@ -1769,172 +1603,6 @@
] ]
} }
}, },
{
"aweme_id": "7330570097842457871",
"desc": "好险~差点就打进了#越南卡点舞#看好了",
"create_time": 1706781368,
"music": {
"id": 7316830999415983000,
"title": "@killerGirl Dance创作的原声",
"author": "killerGirl Dance",
"cover_medium": {
"uri": "720x720/aweme-avatar/tos-cn-avt-0015_dda77a5c5ac0eda5fcb9ec522d191fba",
"url_list": [
"https://p3-pc.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-avt-0015_dda77a5c5ac0eda5fcb9ec522d191fba.jpeg?from=116350172"
],
"width": 720,
"height": 720
},
"cover_thumb": {
"uri": "100x100/aweme-avatar/tos-cn-avt-0015_dda77a5c5ac0eda5fcb9ec522d191fba",
"url_list": [
"https://p3-pc.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_dda77a5c5ac0eda5fcb9ec522d191fba.jpeg?from=116350172"
],
"width": 720,
"height": 720
},
"play_url": {
"uri": "https://sf6-cdn-tos.douyinstatic.com/obj/ies-music/7316830969424595721.mp3",
"url_list": [
"https://sf6-cdn-tos.douyinstatic.com/obj/ies-music/7316830969424595721.mp3",
"https://sf3-cdn-tos.douyinstatic.com/obj/ies-music/7316830969424595721.mp3"
],
"width": 720,
"height": 720,
"url_key": "7316830999415982886"
},
"duration": 15,
"user_count": 0,
"owner_id": "2058705326387616",
"owner_nickname": "killerGirl Dance",
"is_original": false
},
"video": {
"play_addr": {
"uri": "v0200fg10000cmtmlbbc77u3fj22iva0",
"url_list": [
"https://www.douyin.com/aweme/v1/play/?video_id=v0200fg10000cmtmlbbc77u3fj22iva0&line=0&file_id=d3c241ed123a4f348f1e54b075f24500&sign=9db49a599aecc07dcfa816e6d50391be&is_play_url=1&source=PackSourceEnum_PUBLISH"
],
"width": 1080,
"height": 1920,
"url_key": "v0200fg10000cmtmlbbc77u3fj22iva0_h264_1080p_2001386",
"data_size": 2576785,
"file_hash": "9db49a599aecc07dcfa816e6d50391be",
"file_cs": "c:0-9630-6390|d:0-1288391-8190,1288392-2576784-f302|a:v0200fg10000cmtmlbbc77u3fj22iva0"
},
"cover": {
"uri": "tos-cn-i-0813c001/ocrAbNb78gYezUAIANPhAbCCaA3fEmMNy3V0AC",
"url_list": [
"NWUFgBo8ObwTjCuyye-Sp.png"
],
"width": 720,
"height": 720
},
"height": 1920,
"width": 1080,
"ratio": "1080p",
"use_static_cover": true,
"duration": 10300
},
"share_url": "https://www.iesdouyin.com/share/video/7330570097842457871/?region=CN&mid=7316830999415982886&u_code=13kgm680k&did=MS4wLjABAAAAiOgYyZm8XbWZMr5o3OvhR-TEOuNygb_hQOwkie-VXJpDYaR4vZfpiIGBfAWKCFHB&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&share_sign=QRtsbif6VtGC1e4wmw7wqq.x4F9hAvU5hiSa838fUR4-&share_version=170400&ts=1710488945&from_aid=6383&from_ssr=1",
"statistics": {
"admire_count": 4,
"comment_count": 2198,
"digg_count": 126157,
"collect_count": 12966,
"play_count": 0,
"share_count": 89630
},
"status": {
"listen_video_status": 0,
"is_delete": false,
"allow_share": true,
"is_prohibited": false,
"in_reviewing": false,
"part_see": 0,
"private_status": 0,
"review_result": {
"review_status": 0
}
},
"text_extra": [
{
"start": 9,
"end": 15,
"type": 1,
"hashtag_name": "越南卡点舞",
"hashtag_id": "1695366198798343",
"is_commerce": false,
"caption_start": 9,
"caption_end": 15
},
{
"start": 15,
"end": 19,
"type": 1,
"hashtag_name": "看好了",
"hashtag_id": "1576631662196749",
"is_commerce": false,
"caption_start": 15,
"caption_end": 19
}
],
"is_top": 0,
"share_info": {
"share_url": "https://www.iesdouyin.com/share/video/7330570097842457871/?region=CN&mid=7316830999415982886&u_code=13kgm680k&did=MS4wLjABAAAAiOgYyZm8XbWZMr5o3OvhR-TEOuNygb_hQOwkie-VXJpDYaR4vZfpiIGBfAWKCFHB&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&share_sign=QRtsbif6VtGC1e4wmw7wqq.x4F9hAvU5hiSa838fUR4-&share_version=170400&ts=1710488945&from_aid=6383&from_ssr=1",
"share_link_desc": "5.66 Z@m.qe 02/05 Tyt:/ 好险~差点就打进了# 越南卡点舞# 看好了 %s 复制此链接打开Dou音搜索直接观看视频"
},
"duration": 10300,
"image_infos": null,
"risk_infos": {
"vote": false,
"warn": false,
"risk_sink": false,
"type": 0,
"content": ""
},
"position": null,
"author_user_id": 2739632844317827,
"prevent_download": false,
"long_video": null,
"aweme_control": {
"can_forward": true,
"can_share": true,
"can_comment": true,
"can_show_comment": true
},
"images": null,
"suggest_words": {
"suggest_words": [
{
"words": [
{
"word": "无忧传媒",
"word_id": "6581780195580089608",
"info": "{\"qrec_for_search\":\"{}\"}"
}
],
"scene": "comment_top_rec",
"icon_url": "",
"hint_text": "大家都在搜:",
"extra_info": "{}"
},
{
"words": [
{
"word": "无忧传媒",
"word_id": "6581780195580089608",
"info": "{\"qrec_for_search\":\"{}\"}"
}
],
"scene": "detail_inbox_rex",
"icon_url": "",
"hint_text": "",
"extra_info": "{}"
}
]
}
},
{ {
"aweme_id": "7326149953959628067", "aweme_id": "7326149953959628067",
"desc": "我知天高任鸟飞 台球必须轻轻推#轻推#杆法", "desc": "我知天高任鸟飞 台球必须轻轻推#轻推#杆法",

View File

@ -30,11 +30,12 @@
"@types/lodash-es": "^4.17.9", "@types/lodash-es": "^4.17.9",
"@vitejs/plugin-vue": "4.0.0", "@vitejs/plugin-vue": "4.0.0",
"@vitejs/plugin-vue-jsx": "3.0.0", "@vitejs/plugin-vue-jsx": "3.0.0",
"axios-mock-adapter": "^1.22.0",
"less": "4.1.3", "less": "4.1.3",
"rollup-plugin-visualizer": "^5.9.2", "rollup-plugin-visualizer": "^5.9.2",
"unplugin-vue-define-options": "^1.4.1", "unplugin-vue-define-options": "^1.4.1",
"unplugin-vue-macros": "^2.7.10", "unplugin-vue-macros": "^2.7.10",
"vite-plugin-cdn-import": "0.3.5", "vite": "4.5.2",
"vite": "4.5.2" "vite-plugin-cdn-import": "0.3.5"
} }
} }

View File

@ -67,6 +67,9 @@ devDependencies:
'@vitejs/plugin-vue-jsx': '@vitejs/plugin-vue-jsx':
specifier: 3.0.0 specifier: 3.0.0
version: 3.0.0(vite@4.5.2)(vue@3.4.21) version: 3.0.0(vite@4.5.2)(vue@3.4.21)
axios-mock-adapter:
specifier: ^1.22.0
version: 1.22.0(axios@1.6.0)
less: less:
specifier: 4.1.3 specifier: 4.1.3
version: 4.1.3 version: 4.1.3
@ -1280,7 +1283,16 @@ packages:
/asynckit@0.4.0: /asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
dev: false
/axios-mock-adapter@1.22.0(axios@1.6.0):
resolution: {integrity: sha512-dmI0KbkyAhntUR05YY96qg2H6gg0XMl2+qTW0xmYg6Up+BFBAJYRLROMXRdDEL06/Wqwa0TJThAYvFtSFdRCZw==}
peerDependencies:
axios: '>= 0.17.0'
dependencies:
axios: 1.6.0
fast-deep-equal: 3.1.3
is-buffer: 2.0.5
dev: true
/axios@1.6.0: /axios@1.6.0:
resolution: {integrity: sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==} resolution: {integrity: sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==}
@ -1290,7 +1302,6 @@ packages:
proxy-from-env: 1.1.0 proxy-from-env: 1.1.0
transitivePeerDependencies: transitivePeerDependencies:
- debug - debug
dev: false
/balanced-match@1.0.2: /balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@ -1412,7 +1423,6 @@ packages:
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
dependencies: dependencies:
delayed-stream: 1.0.0 delayed-stream: 1.0.0
dev: false
/commander@1.1.1: /commander@1.1.1:
resolution: {integrity: sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==} resolution: {integrity: sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==}
@ -1497,7 +1507,6 @@ packages:
/delayed-stream@1.0.0: /delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
dev: false
/delegates@1.0.0: /delegates@1.0.0:
resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
@ -1584,6 +1593,10 @@ packages:
resolution: {integrity: sha512-ipiDYhdQSCZ4hSbX4rMW+XzNKMD1prg/sTvoVmSLkuQ1MVlwjJQQA+sW8tMYR3BLUr9KjodFV4pvzunvRhd33Q==} resolution: {integrity: sha512-ipiDYhdQSCZ4hSbX4rMW+XzNKMD1prg/sTvoVmSLkuQ1MVlwjJQQA+sW8tMYR3BLUr9KjodFV4pvzunvRhd33Q==}
dev: false dev: false
/fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
dev: true
/fill-range@7.0.1: /fill-range@7.0.1:
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
@ -1605,7 +1618,6 @@ packages:
peerDependenciesMeta: peerDependenciesMeta:
debug: debug:
optional: true optional: true
dev: false
/form-data@4.0.0: /form-data@4.0.0:
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
@ -1614,7 +1626,6 @@ packages:
asynckit: 0.4.0 asynckit: 0.4.0
combined-stream: 1.0.8 combined-stream: 1.0.8
mime-types: 2.1.35 mime-types: 2.1.35
dev: false
/fs-minipass@2.1.0: /fs-minipass@2.1.0:
resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
@ -1778,6 +1789,11 @@ packages:
binary-extensions: 2.2.0 binary-extensions: 2.2.0
dev: true dev: true
/is-buffer@2.0.5:
resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
engines: {node: '>=4'}
dev: true
/is-docker@2.2.1: /is-docker@2.2.1:
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
@ -1942,14 +1958,12 @@ packages:
/mime-db@1.52.0: /mime-db@1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'} engines: {node: '>= 0.6'}
dev: false
/mime-types@2.1.35: /mime-types@2.1.35:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'} engines: {node: '>= 0.6'}
dependencies: dependencies:
mime-db: 1.52.0 mime-db: 1.52.0
dev: false
/mime@1.6.0: /mime@1.6.0:
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
@ -2245,7 +2259,6 @@ packages:
/proxy-from-env@1.1.0: /proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
dev: false
/prr@1.0.1: /prr@1.0.1:
resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}

View File

@ -1562,7 +1562,7 @@
"content": "" "content": ""
}, },
"position": null, "position": null,
"author_user_id": 4283310552125104, "author_user_id": 2739632844317827,
"prevent_download": false, "prevent_download": false,
"long_video": null, "long_video": null,
"aweme_control": { "aweme_control": {

View File

@ -16,6 +16,9 @@ try {navigator.control.longpressMenu(false);} catch (e) {} //关闭长按弹出
import {mapState} from "vuex"; import {mapState} from "vuex";
import routes from "./router/routes"; import routes from "./router/routes";
import Call from "./components/Call"; import Call from "./components/Call";
import {useBaseStore} from "@/store/pinia";
import {mapActions} from 'pinia'
export default { export default {
name: 'App', name: 'App',
@ -49,12 +52,14 @@ export default {
}, },
}, },
methods: { methods: {
...mapActions(useBaseStore, ['init']),
setVh() { setVh() {
let vh = window.innerHeight * 0.01 let vh = window.innerHeight * 0.01
document.documentElement.style.setProperty('--vh', `${vh}px`) document.documentElement.style.setProperty('--vh', `${vh}px`)
} }
}, },
mounted() { mounted() {
this.init()
this.setVh() this.setVh()
// resize 1vh // resize 1vh
window.addEventListener('resize', () => { window.addEventListener('resize', () => {

View File

@ -3,5 +3,5 @@ import user from './user'
export default { export default {
videos, videos,
user, // user,
} }

View File

@ -7,4 +7,16 @@ export default {
author(params, data) { author(params, data) {
return request({url: '/user/author', method: 'get', params, data}) return request({url: '/user/author', method: 'get', params, data})
}, },
}
export function userinfo(params, data) {
return request({url: '/user/userinfo', method: 'get', params, data})
}
export function friends(params, data) {
return request({url: '/user/friends', method: 'get', params, data})
}
export function userCollect(params, data) {
return request({url: '/user/collect', method: 'get', params, data})
} }

View File

@ -1,22 +1,6 @@
import request from "../utils/request"; import request from "../utils/request";
export default { export default {
me(params, data) {
return request({url: '/me', method: 'get', params, data})
},
my(params, data) {
// console.log('api - params',params)
return request({url: '/me/my', method: 'get', params, data})
},
private(params, data) {
return request({url: '/me/private1', method: 'get', params, data})
},
like(params, data) {
return request({url: '/me/like', method: 'get', params, data})
},
collect(params, data) {
return request({url: '/me/collect', method: 'get', params, data})
},
recommended(params, data) { recommended(params, data) {
return request({url: '/video/recommended', method: 'get', params, data}) return request({url: '/video/recommended', method: 'get', params, data})
}, },
@ -26,4 +10,16 @@ export default {
historyOther(params, data) { historyOther(params, data) {
return request({url: '/video/historyOther', method: 'get', params, data}) return request({url: '/video/historyOther', method: 'get', params, data})
}, },
}
export function myVideo(params, data) {
return request({url: '/video/my', method: 'get', params, data})
}
export function privateVideo(params, data) {
return request({url: '/video/private', method: 'get', params, data})
}
export function likeVideo(params, data) {
return request({url: '/video/like', method: 'get', params, data})
} }

View File

@ -1,4 +1,300 @@
[ [
{
"aweme_id": "7260749400622894336",
"desc": "你说爱像云 要自在漂浮才美丽",
"create_time": 1690524964,
"music": {
"id": 7123453673090321000,
"title": "禁盗用",
"author": "LoveW_",
"cover_medium": {
"uri": "720x720/aweme-avatar/tos-cn-avt-0015_5374859713808b0007ba979b1f18171c",
"url_list": [
"https://p3-pc.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-avt-0015_5374859713808b0007ba979b1f18171c.jpeg?from=116350172"
],
"width": 720,
"height": 720
},
"cover_thumb": {
"uri": "100x100/aweme-avatar/tos-cn-avt-0015_5374859713808b0007ba979b1f18171c",
"url_list": [
"https://p3-pc.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_5374859713808b0007ba979b1f18171c.jpeg?from=116350172"
],
"width": 720,
"height": 720
},
"play_url": {
"uri": "https://sf5-hl-cdn-tos.douyinstatic.com/obj/ies-music/7123453672335690532.mp3",
"url_list": [
"https://sf5-hl-cdn-tos.douyinstatic.com/obj/ies-music/7123453672335690532.mp3",
"https://sf3-cdn-tos.douyinstatic.com/obj/ies-music/7123453672335690532.mp3"
],
"width": 720,
"height": 720,
"url_key": "7123453673090321159"
},
"duration": 17,
"user_count": 0,
"owner_id": "1711265034548715",
"owner_nickname": "LoveW_",
"is_original": false
},
"video": {
"play_addr": {
"uri": "v0d00fg10000cj1lq4jc77u0ng6s1gt0",
"url_list": [
"https://www.douyin.com/aweme/v1/play/?video_id=v0d00fg10000cj1lq4jc77u0ng6s1gt0&line=0&file_id=bed51c00899b458cbc5d8280147c22a1&sign=7749aec7bd62a3760065f60e40fc1867&is_play_url=1&source=PackSourceEnum_PUBLISH"
],
"width": 1080,
"height": 1920,
"url_key": "v0d00fg10000cj1lq4jc77u0ng6s1gt0_h264_1080p_2053262",
"data_size": 3480280,
"file_hash": "7749aec7bd62a3760065f60e40fc1867",
"file_cs": "c:0-16104-634c|d:0-1740139-1d83,1740140-3480279-e5a6|a:v0d00fg10000cj1lq4jc77u0ng6s1gt0"
},
"cover": {
"uri": "tos-cn-i-0813/oYVDeaFZyENAAAAKXCYfxD6hI4zADNAURgtySl",
"url_list": [
"jwWCPZVTIA4IKM-8WipLF.png"
],
"width": 720,
"height": 720
},
"height": 3840,
"width": 2160,
"ratio": "1080p",
"use_static_cover": true,
"duration": 13560
},
"share_url": "https://www.iesdouyin.com/share/video/7260749400622894336/?region=CN&mid=7123453673090321159&u_code=13kgm680k&did=MS4wLjABAAAAiOgYyZm8XbWZMr5o3OvhR-TEOuNygb_hQOwkie-VXJpDYaR4vZfpiIGBfAWKCFHB&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&share_sign=LF.QuEh0GZk3quR7m.I3KpyKn2XyfNLNYHzuQDgWLpc-&share_version=170400&ts=1710491656&from_aid=6383&from_ssr=1",
"statistics": {
"admire_count": 0,
"comment_count": 21582,
"digg_count": 1246636,
"collect_count": 64460,
"play_count": 0,
"share_count": 172803
},
"status": {
"listen_video_status": 0,
"is_delete": false,
"allow_share": true,
"is_prohibited": false,
"in_reviewing": false,
"part_see": 0,
"private_status": 0,
"review_result": {
"review_status": 0
}
},
"text_extra": [],
"is_top": 1,
"share_info": {
"share_url": "https://www.iesdouyin.com/share/video/7260749400622894336/?region=CN&mid=7123453673090321159&u_code=13kgm680k&did=MS4wLjABAAAAiOgYyZm8XbWZMr5o3OvhR-TEOuNygb_hQOwkie-VXJpDYaR4vZfpiIGBfAWKCFHB&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&share_sign=LF.QuEh0GZk3quR7m.I3KpyKn2XyfNLNYHzuQDgWLpc-&share_version=170400&ts=1710491656&from_aid=6383&from_ssr=1",
"share_link_desc": "7.46 04/12 Duf:/ D@h.ba 你说爱像云 要自在漂浮才美丽 %s 复制此链接打开Dou音搜索直接观看视频"
},
"duration": 13560,
"image_infos": null,
"risk_infos": {
"vote": false,
"warn": false,
"risk_sink": false,
"type": 0,
"content": ""
},
"position": null,
"author_user_id": 59054327754,
"prevent_download": false,
"long_video": null,
"aweme_control": {
"can_forward": true,
"can_share": true,
"can_comment": true,
"can_show_comment": true
},
"images": null,
"suggest_words": {
"suggest_words": [
{
"words": [
{
"word": "一只顾",
"word_id": "6658760941217256711",
"info": "{\"qrec_for_search\":\"{\\\"video_ecom\\\":\\\"1\\\"}\"}"
}
],
"scene": "comment_top_rec",
"icon_url": "",
"hint_text": "大家都在搜:",
"extra_info": "{}"
},
{
"words": [
{
"word": "香秀早期照片护士",
"word_id": "6999224590481708302",
"info": "{\"qrec_for_search\":\"{\\\"video_ecom\\\":\\\"1\\\"}\"}"
}
],
"scene": "feed_bottom_rec",
"icon_url": "",
"hint_text": "相关搜索",
"extra_info": "{}"
},
{
"words": [
{
"word": "一只顾",
"word_id": "6658760941217256711",
"info": "{\"qrec_for_search\":\"{\\\"video_ecom\\\":\\\"1\\\"}\"}"
}
],
"scene": "detail_inbox_rex",
"icon_url": "",
"hint_text": "",
"extra_info": "{}"
}
]
},
"author": {
"avatar_168x168": {
"height": 720,
"uri": "aweme-avatar/mosaic-legacy_20b7700050147c01968f3",
"url_list": [
"https://p3-pc.douyinpic.com/img/aweme-avatar/mosaic-legacy_20b7700050147c01968f3~c5_168x168.jpeg?from=2956013662"
],
"width": 720
},
"avatar_300x300": {
"height": 720,
"uri": "aweme-avatar/mosaic-legacy_20b7700050147c01968f3",
"url_list": [
"https://p3-pc.douyinpic.com/img/aweme-avatar/mosaic-legacy_20b7700050147c01968f3~c5_300x300.jpeg?from=2956013662"
],
"width": 720
},
"aweme_count": 296,
"birthday_hide_level": 1,
"can_show_group_card": 1,
"card_entries": [
{
"card_data": "{\"is_order_card\":false,\"has_new\":false,\"is_store\":false,\"shop_id\":\"\",\"product_count\":6,\"store_type\":\"window\",\"icon_is_repeat\":false,\"icon_type\":\"png\",\"is_promotion_icon\":false,\"subtitle_resource_list\":\"\"}",
"event_params": "{\"entrance_location\":\"others_homepage\"}",
"goto_url": "sslocal://goods/shop?uid=59054327754&sec_uid=MS4wLjABAAAAe_AKPvxBX0C_4vyLj5Wye-_BU8M0S6tZFZUu61FuycU",
"icon_dark": {
"url_list": [
"https://lf3-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_dark-3x.png",
"https://lf9-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_dark-3x.png",
"https://lf26-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_dark-3x.png",
"https://lf3-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_dark-2x.png",
"https://lf9-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_dark-2x.png",
"https://lf26-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_dark-2x.png"
]
},
"icon_light": {
"url_list": [
"https://lf3-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_light-3x.png",
"https://lf9-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_light-3x.png",
"https://lf26-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_light-3x.png",
"https://lf3-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_light-2x.png",
"https://lf9-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_light-2x.png",
"https://lf26-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_light-2x.png"
]
},
"sub_title": "6件好物",
"title": "进入橱窗",
"type": 1
}
],
"city": "",
"commerce_info": {
"challenge_list": null,
"head_image_list": null,
"offline_info_list": [],
"smart_phone_list": null,
"task_list": null
},
"commerce_user_info": {
"ad_revenue_rits": null,
"has_ads_entry": true,
"show_star_atlas_cooperation": true,
"star_atlas": 1
},
"commerce_user_level": 0,
"country": "",
"cover_colour": "#03997706",
"cover_url": [
{
"uri": "douyin-user-image-file/f2196ddaa37f3097932d8a29ff0d0ca5",
"url_list": [
"AiIEMkIA7Cb3s5c4e7e6g.png"
]
},
{
"uri": "c8510002be9a3a61aad2",
"url_list": [
"aHzLr77vcdBMUil15rXBa.png"
]
}
],
"district": "",
"favoriting_count": 0,
"follow_status": 0,
"follower_count": 7078268,
"follower_request_status": 0,
"follower_status": 0,
"following_count": 88,
"forward_count": 79,
"gender": 2,
"ip_location": "IP属地天津",
"max_follower_count": 7078290,
"mplatform_followers_count": 7078268,
"nickname": "我是香秀🐂🍺",
"province": "",
"public_collects_count": 0,
"share_info": {
"bool_persist": 1,
"share_desc": "长按复制此条消息打开抖音搜索查看TA的更多作品。",
"share_image_url": {
"uri": "tos-cn-p-0015/oge0HBDnlBbbZHjeDc4WtAI7AA0xb88gd9Ipjc",
"url_list": [
"5jTb5yW0_50o6UaLR5hvo.png"
]
},
"share_qrcode_url": {
"uri": "216a001823018b74cedd",
"url_list": [
"https://p3.douyinpic.com/obj/216a001823018b74cedd",
"https://p6.douyinpic.com/obj/216a001823018b74cedd",
"https://p11.douyinpic.com/obj/216a001823018b74cedd"
]
},
"share_title": "快来加入抖音,让你发现最有趣的我!",
"share_url": "www.iesdouyin.com/share/user/MS4wLjABAAAAe_AKPvxBX0C_4vyLj5Wye-_BU8M0S6tZFZUu61FuycU?did=MS4wLjABAAAAiOgYyZm8XbWZMr5o3OvhR-TEOuNygb_hQOwkie-VXJpDYaR4vZfpiIGBfAWKCFHB&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&sec_uid=MS4wLjABAAAAe_AKPvxBX0C_4vyLj5Wye-_BU8M0S6tZFZUu61FuycU&from_ssr=1&from_aid=6383&u_code=13kgm680k",
"share_weibo_desc": "长按复制此条消息打开抖音搜索查看TA的更多作品。"
},
"short_id": "8357999",
"signature": "合作X229896备注品牌 ",
"total_favorited": 202309485,
"uid": "59054327754",
"unique_id": "",
"user_age": -1,
"white_cover_url": [
{
"uri": "douyin-user-image-file/f2196ddaa37f3097932d8a29ff0d0ca5",
"url_list": [
"N_SVO2HXIpaY04hgsXYDI.png"
]
},
{
"uri": "318f1000413827e122102",
"url_list": [
"Sfz4PgDDqyNYHkFyXub5g.png"
]
}
]
}
},
{ {
"aweme_id": "7128686458763889956", "aweme_id": "7128686458763889956",
"desc": "你们爱看的又来了!《黑白战袍 双倍快乐》#战袍 #丢钱摇摆舞", "desc": "你们爱看的又来了!《黑白战袍 双倍快乐》#战袍 #丢钱摇摆舞",
@ -348,302 +644,6 @@
] ]
} }
}, },
{
"aweme_id": "7260749400622894336",
"desc": "你说爱像云 要自在漂浮才美丽",
"create_time": 1690524964,
"music": {
"id": 7123453673090321000,
"title": "禁盗用",
"author": "LoveW_",
"cover_medium": {
"uri": "720x720/aweme-avatar/tos-cn-avt-0015_5374859713808b0007ba979b1f18171c",
"url_list": [
"https://p3-pc.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-avt-0015_5374859713808b0007ba979b1f18171c.jpeg?from=116350172"
],
"width": 720,
"height": 720
},
"cover_thumb": {
"uri": "100x100/aweme-avatar/tos-cn-avt-0015_5374859713808b0007ba979b1f18171c",
"url_list": [
"https://p3-pc.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_5374859713808b0007ba979b1f18171c.jpeg?from=116350172"
],
"width": 720,
"height": 720
},
"play_url": {
"uri": "https://sf5-hl-cdn-tos.douyinstatic.com/obj/ies-music/7123453672335690532.mp3",
"url_list": [
"https://sf5-hl-cdn-tos.douyinstatic.com/obj/ies-music/7123453672335690532.mp3",
"https://sf3-cdn-tos.douyinstatic.com/obj/ies-music/7123453672335690532.mp3"
],
"width": 720,
"height": 720,
"url_key": "7123453673090321159"
},
"duration": 17,
"user_count": 0,
"owner_id": "1711265034548715",
"owner_nickname": "LoveW_",
"is_original": false
},
"video": {
"play_addr": {
"uri": "v0d00fg10000cj1lq4jc77u0ng6s1gt0",
"url_list": [
"https://www.douyin.com/aweme/v1/play/?video_id=v0d00fg10000cj1lq4jc77u0ng6s1gt0&line=0&file_id=bed51c00899b458cbc5d8280147c22a1&sign=7749aec7bd62a3760065f60e40fc1867&is_play_url=1&source=PackSourceEnum_PUBLISH"
],
"width": 1080,
"height": 1920,
"url_key": "v0d00fg10000cj1lq4jc77u0ng6s1gt0_h264_1080p_2053262",
"data_size": 3480280,
"file_hash": "7749aec7bd62a3760065f60e40fc1867",
"file_cs": "c:0-16104-634c|d:0-1740139-1d83,1740140-3480279-e5a6|a:v0d00fg10000cj1lq4jc77u0ng6s1gt0"
},
"cover": {
"uri": "tos-cn-i-0813/oYVDeaFZyENAAAAKXCYfxD6hI4zADNAURgtySl",
"url_list": [
"jwWCPZVTIA4IKM-8WipLF.png"
],
"width": 720,
"height": 720
},
"height": 3840,
"width": 2160,
"ratio": "1080p",
"use_static_cover": true,
"duration": 13560
},
"share_url": "https://www.iesdouyin.com/share/video/7260749400622894336/?region=CN&mid=7123453673090321159&u_code=13kgm680k&did=MS4wLjABAAAAiOgYyZm8XbWZMr5o3OvhR-TEOuNygb_hQOwkie-VXJpDYaR4vZfpiIGBfAWKCFHB&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&share_sign=LF.QuEh0GZk3quR7m.I3KpyKn2XyfNLNYHzuQDgWLpc-&share_version=170400&ts=1710491656&from_aid=6383&from_ssr=1",
"statistics": {
"admire_count": 0,
"comment_count": 21582,
"digg_count": 1246636,
"collect_count": 64460,
"play_count": 0,
"share_count": 172803
},
"status": {
"listen_video_status": 0,
"is_delete": false,
"allow_share": true,
"is_prohibited": false,
"in_reviewing": false,
"part_see": 0,
"private_status": 0,
"review_result": {
"review_status": 0
}
},
"text_extra": [],
"is_top": 1,
"share_info": {
"share_url": "https://www.iesdouyin.com/share/video/7260749400622894336/?region=CN&mid=7123453673090321159&u_code=13kgm680k&did=MS4wLjABAAAAiOgYyZm8XbWZMr5o3OvhR-TEOuNygb_hQOwkie-VXJpDYaR4vZfpiIGBfAWKCFHB&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&titleType=title&share_sign=LF.QuEh0GZk3quR7m.I3KpyKn2XyfNLNYHzuQDgWLpc-&share_version=170400&ts=1710491656&from_aid=6383&from_ssr=1",
"share_link_desc": "7.46 04/12 Duf:/ D@h.ba 你说爱像云 要自在漂浮才美丽 %s 复制此链接打开Dou音搜索直接观看视频"
},
"duration": 13560,
"image_infos": null,
"risk_infos": {
"vote": false,
"warn": false,
"risk_sink": false,
"type": 0,
"content": ""
},
"position": null,
"author_user_id": 59054327754,
"prevent_download": false,
"long_video": null,
"aweme_control": {
"can_forward": true,
"can_share": true,
"can_comment": true,
"can_show_comment": true
},
"images": null,
"suggest_words": {
"suggest_words": [
{
"words": [
{
"word": "一只顾",
"word_id": "6658760941217256711",
"info": "{\"qrec_for_search\":\"{\\\"video_ecom\\\":\\\"1\\\"}\"}"
}
],
"scene": "comment_top_rec",
"icon_url": "",
"hint_text": "大家都在搜:",
"extra_info": "{}"
},
{
"words": [
{
"word": "香秀早期照片护士",
"word_id": "6999224590481708302",
"info": "{\"qrec_for_search\":\"{\\\"video_ecom\\\":\\\"1\\\"}\"}"
}
],
"scene": "feed_bottom_rec",
"icon_url": "",
"hint_text": "相关搜索",
"extra_info": "{}"
},
{
"words": [
{
"word": "一只顾",
"word_id": "6658760941217256711",
"info": "{\"qrec_for_search\":\"{\\\"video_ecom\\\":\\\"1\\\"}\"}"
}
],
"scene": "detail_inbox_rex",
"icon_url": "",
"hint_text": "",
"extra_info": "{}"
}
]
},
"author": {
"avatar_168x168": {
"height": 720,
"uri": "aweme-avatar/mosaic-legacy_20b7700050147c01968f3",
"url_list": [
"https://p3-pc.douyinpic.com/img/aweme-avatar/mosaic-legacy_20b7700050147c01968f3~c5_168x168.jpeg?from=2956013662"
],
"width": 720
},
"avatar_300x300": {
"height": 720,
"uri": "aweme-avatar/mosaic-legacy_20b7700050147c01968f3",
"url_list": [
"https://p3-pc.douyinpic.com/img/aweme-avatar/mosaic-legacy_20b7700050147c01968f3~c5_300x300.jpeg?from=2956013662"
],
"width": 720
},
"aweme_count": 296,
"birthday_hide_level": 1,
"can_show_group_card": 1,
"card_entries": [
{
"card_data": "{\"is_order_card\":false,\"has_new\":false,\"is_store\":false,\"shop_id\":\"\",\"product_count\":6,\"store_type\":\"window\",\"icon_is_repeat\":false,\"icon_type\":\"png\",\"is_promotion_icon\":false,\"subtitle_resource_list\":\"\"}",
"event_params": "{\"entrance_location\":\"others_homepage\"}",
"goto_url": "sslocal://goods/shop?uid=59054327754&sec_uid=MS4wLjABAAAAe_AKPvxBX0C_4vyLj5Wye-_BU8M0S6tZFZUu61FuycU",
"icon_dark": {
"url_list": [
"https://lf3-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_dark-3x.png",
"https://lf9-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_dark-3x.png",
"https://lf26-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_dark-3x.png",
"https://lf3-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_dark-2x.png",
"https://lf9-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_dark-2x.png",
"https://lf26-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_dark-2x.png"
]
},
"icon_light": {
"url_list": [
"https://lf3-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_light-3x.png",
"https://lf9-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_light-3x.png",
"https://lf26-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_light-3x.png",
"https://lf3-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_light-2x.png",
"https://lf9-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_light-2x.png",
"https://lf26-static.bytednsdoc.com/obj/eden-cn/azlylaup_j_tvjl/ljhwZthlaukjlkulzlp/ecom_window/ecom_window_other_light-2x.png"
]
},
"sub_title": "6件好物",
"title": "进入橱窗",
"type": 1
}
],
"city": "",
"commerce_info": {
"challenge_list": null,
"head_image_list": null,
"offline_info_list": [],
"smart_phone_list": null,
"task_list": null
},
"commerce_user_info": {
"ad_revenue_rits": null,
"has_ads_entry": true,
"show_star_atlas_cooperation": true,
"star_atlas": 1
},
"commerce_user_level": 0,
"country": "",
"cover_colour": "#03997706",
"cover_url": [
{
"uri": "douyin-user-image-file/f2196ddaa37f3097932d8a29ff0d0ca5",
"url_list": [
"AiIEMkIA7Cb3s5c4e7e6g.png"
]
},
{
"uri": "c8510002be9a3a61aad2",
"url_list": [
"aHzLr77vcdBMUil15rXBa.png"
]
}
],
"district": "",
"favoriting_count": 0,
"follow_status": 0,
"follower_count": 7078268,
"follower_request_status": 0,
"follower_status": 0,
"following_count": 88,
"forward_count": 79,
"gender": 2,
"ip_location": "IP属地天津",
"max_follower_count": 7078290,
"mplatform_followers_count": 7078268,
"nickname": "我是香秀🐂🍺",
"province": "",
"public_collects_count": 0,
"share_info": {
"bool_persist": 1,
"share_desc": "长按复制此条消息打开抖音搜索查看TA的更多作品。",
"share_image_url": {
"uri": "tos-cn-p-0015/oge0HBDnlBbbZHjeDc4WtAI7AA0xb88gd9Ipjc",
"url_list": [
"5jTb5yW0_50o6UaLR5hvo.png"
]
},
"share_qrcode_url": {
"uri": "216a001823018b74cedd",
"url_list": [
"https://p3.douyinpic.com/obj/216a001823018b74cedd",
"https://p6.douyinpic.com/obj/216a001823018b74cedd",
"https://p11.douyinpic.com/obj/216a001823018b74cedd"
]
},
"share_title": "快来加入抖音,让你发现最有趣的我!",
"share_url": "www.iesdouyin.com/share/user/MS4wLjABAAAAe_AKPvxBX0C_4vyLj5Wye-_BU8M0S6tZFZUu61FuycU?did=MS4wLjABAAAAiOgYyZm8XbWZMr5o3OvhR-TEOuNygb_hQOwkie-VXJpDYaR4vZfpiIGBfAWKCFHB&iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ&with_sec_did=1&sec_uid=MS4wLjABAAAAe_AKPvxBX0C_4vyLj5Wye-_BU8M0S6tZFZUu61FuycU&from_ssr=1&from_aid=6383&u_code=13kgm680k",
"share_weibo_desc": "长按复制此条消息打开抖音搜索查看TA的更多作品。"
},
"short_id": "8357999",
"signature": "合作X229896备注品牌 ",
"total_favorited": 202309485,
"uid": "59054327754",
"unique_id": "",
"user_age": -1,
"white_cover_url": [
{
"uri": "douyin-user-image-file/f2196ddaa37f3097932d8a29ff0d0ca5",
"url_list": [
"N_SVO2HXIpaY04hgsXYDI.png"
]
},
{
"uri": "318f1000413827e122102",
"url_list": [
"Sfz4PgDDqyNYHkFyXub5g.png"
]
}
]
}
},
{ {
"aweme_id": "7293100687989148943", "aweme_id": "7293100687989148943",
"desc": "", "desc": "",

View File

@ -6,10 +6,6 @@ export default {
], ],
my: [ my: [
], ],
like: [
],
private1: [
],
users:{ users:{
"all": [ "all": [
{ {

View File

@ -35,12 +35,6 @@ const props = defineProps({
return [] return []
} }
}, },
author: {
type: Object,
default: () => {
return {}
}
},
mode: { mode: {
type: String, type: String,
default: 'normal'//date,music default: 'normal'//date,music
@ -52,7 +46,7 @@ defineOptions({
}) })
function goDetail(index) { function goDetail(index) {
store.routeData = cloneDeep({list: props.list, author: props.author, index}) store.routeData = cloneDeep({list: props.list, index})
nav.push({path: '/video-detail'}) nav.push({path: '/video-detail'})
} }

View File

@ -51,7 +51,7 @@
<div class="number" v-else> <div class="number" v-else>
<span>抖音号{{ _getUserDouyinId(props.currentItem) }}</span> <span>抖音号{{ _getUserDouyinId(props.currentItem) }}</span>
<img src="@/assets/img/icon/me/copy.png" alt="" <img src="@/assets/img/icon/me/copy.png" alt=""
@click.stop="Utils.copy(props.currentItem.author.unique_id || props.currentItem.author.short_id)"> @click.stop="Utils.copy(_getUserDouyinId(props.currentItem))">
</div> </div>
</div> </div>
</div> </div>
@ -168,7 +168,6 @@
<div class="videos"> <div class="videos">
<Posters v-if="props.currentItem.aweme_list.length" <Posters v-if="props.currentItem.aweme_list.length"
:list="props.currentItem.aweme_list" :list="props.currentItem.aweme_list"
:author="props.currentItem.author"
></Posters> ></Posters>
<Loading :isFullScreen="false" v-else/> <Loading :isFullScreen="false" v-else/>
</div> </div>
@ -213,66 +212,15 @@ const total = ref(null)
const state = reactive({ const state = reactive({
isShowRecommend: false,// isShowRecommend: false,//
previewImg: '', previewImg: '',
contentIndex: 0,
baseActiveIndex: 0,
tabContents: [],
floatFixed: false, floatFixed: false,
floatShowName: false,
isScroll: false,
isMoreFunction: false,
showFollowSetting: false, showFollowSetting: false,
refs: {
header: null,
headerHeight: 0,
descHeight: 0,
videoSlideHeight: 0,
maxSlideHeight: 0
},
videoItemHeight: 0,
startLocationY: 0,
fixedLocationY: 0,
lastMoveYDistance: 0,
canTransformY: 0,
startTime: 0,
floatHeight: 52, floatHeight: 52,
videos: {
my: {
list: [],
total: -1,
pageNo: 0
},
private: {
list: [],
total: -1
},
like: {
list: [],
total: -1
},
collect: {
video: {
list: [],
total: -1,
},
audio: {
list: [],
total: -1,
}
},
},
pageSize: 15,
initSlideHeight: 0,
loadings: { loadings: {
loading0: false,
loading1: false,
loading2: false,
loading3: false,
showRecommend: false showRecommend: false
}, },
tempScroll: false,
acceleration: 1.2, acceleration: 1.2,
sprint: 15,
canScroll: true,
start: {x: 0, y: 0, time: 0}, start: {x: 0, y: 0, time: 0},
move: {x: 0, y: 0}, move: {x: 0, y: 0},
isTop: false, isTop: false,
@ -292,6 +240,10 @@ watch(() => props.active,
fetch(`${FILE_URL}user-${id}.json`).then(r => { fetch(`${FILE_URL}user-${id}.json`).then(r => {
r.json().then(l => { r.json().then(l => {
setTimeout(() => { setTimeout(() => {
l = l.map(a => {
a.author = props.currentItem.author
return a
})
emit('update:currentItem', merge(props.currentItem, {aweme_list: l})) emit('update:currentItem', merge(props.currentItem, {aweme_list: l}))
}, 300) }, 300)
}) })
@ -307,10 +259,6 @@ watch(() => props.currentItem.author.uid,
} }
}) })
onMounted(() => {
state.videos.my.list = resource.my
state.videos.my.total = resource.my.length
})
function stop(e) { function stop(e) {
e.stopPropagation() e.stopPropagation()
@ -379,7 +327,6 @@ function touchEnd(e) {
<style scoped lang="less"> <style scoped lang="less">
.fade1-enter-active, .fade1-enter-active,
.fade1-leave-active { .fade1-leave-active {
transition: all 0.3s ease; transition: all 0.3s ease;
@ -395,7 +342,6 @@ function touchEnd(e) {
left: inherit; left: inherit;
} }
#UserPanel { #UserPanel {
position: fixed; position: fixed;
background: var(--color-user); background: var(--color-user);
@ -966,9 +912,6 @@ function touchEnd(e) {
} }
} }
.videos {
}
} }
.float { .float {

View File

@ -7,6 +7,7 @@ import SlideItem from '@/components/slide/SlideItem.vue'
import bus, {EVENT_KEY} from "../../utils/bus"; import bus, {EVENT_KEY} from "../../utils/bus";
import {useStore} from 'vuex' import {useStore} from 'vuex'
import Loading from "@/components/Loading.vue"; import Loading from "@/components/Loading.vue";
import {cloneDeep} from "lodash-es";
const props = defineProps({ const props = defineProps({
index: { index: {
@ -189,7 +190,7 @@ function dislike(item) {
defineExpose({dislike}) defineExpose({dislike})
function getInsEl(item, index, play = false) { function getInsEl(item, index, play = false) {
// console.log('index', index, play) console.log('index', cloneDeep(item), index, play)
let slideVNode = props.render(item, index, play, props.uniqueId) let slideVNode = props.render(item, index, play, props.uniqueId)
const parent = document.createElement('div') const parent = document.createElement('div')
//TODO 线 //TODO 线

View File

@ -2,14 +2,10 @@ export default {
baseUrl: 'https://dy.ttentau.top/imgs/', baseUrl: 'https://dy.ttentau.top/imgs/',
imgPath: '/imgs/', imgPath: '/imgs/',
filePreview: 'http://192.168.0.103/static/uploads/', filePreview: 'http://192.168.0.103/static/uploads/',
// baseUrl: 'http://192.168.10.164/index.php/v1',
// filePreview:'http://192.168.10.164/static/uploads/'
// baseUrl: 'http://localhost/index.php/v1',
// filePreview:'http://localhost/static/uploads/'
} }
// export const BASE_URL = 'https://dy.ttentau.top' // export const BASE_URL = 'https://dy.ttentau.top'
export const BASE_URL = '' export const BASE_URL = ''
// export const BASE_URL = 'https://gitee.com/zyronon/douyin/raw/master/public'
export const IMG_URL = BASE_URL + '/images/' export const IMG_URL = BASE_URL + '/images/'
export const FILE_URL = BASE_URL + '/data/' export const FILE_URL = BASE_URL + '/data/'

View File

@ -2,7 +2,7 @@ import * as Vue from 'vue'
import App from './App.vue' import App from './App.vue'
import mitt from 'mitt' import mitt from 'mitt'
import './assets/less/index.less' import './assets/less/index.less'
import './mock' import {startMock} from './mock'
import api from './api' import api from './api'
import router from "./router"; import router from "./router";
import store from "./store"; import store from "./store";
@ -10,6 +10,7 @@ import mixin from "./utils/mixin";
import VueLazyload from '@jambonn/vue-lazyload' import VueLazyload from '@jambonn/vue-lazyload'
import {VueMasonryPlugin} from "vue-masonry"; import {VueMasonryPlugin} from "vue-masonry";
import {createPinia} from "pinia"; import {createPinia} from "pinia";
const pinia = createPinia() const pinia = createPinia()
// const vConsole = new VConsole(); // const vConsole = new VConsole();
@ -32,3 +33,7 @@ app.use(router)
app.use(store) app.use(store)
app.use(pinia) app.use(pinia)
app.mount('#app') app.mount('#app')
//放到最后才可以使用pinia
startMock()

View File

@ -2,8 +2,13 @@ import Mock from 'mockjs'
import globalMethods from '../utils' import globalMethods from '../utils'
import resource from "../assets/data/resource.js"; import resource from "../assets/data/resource.js";
import posts6 from "@/assets/data/posts6.json"; import posts6 from "@/assets/data/posts6.json";
import {uniqueId} from "lodash-es"; import {cloneDeep, uniqueId} from "lodash-es";
import {BASE_URL} from "@/config"; import {BASE_URL} from "@/config";
import {useBaseStore} from "@/store/pinia";
import axiosInstance from "@/utils/request";
import MockAdapter from "axios-mock-adapter";
const mock = new MockAdapter(axiosInstance);
function getParams(options) { function getParams(options) {
let params = globalMethods.$parseURL(options.url).params let params = globalMethods.$parseURL(options.url).params
@ -19,40 +24,31 @@ function getPage(options) {
return {limit, offset, pageNo: params.pageNo} return {limit, offset, pageNo: params.pageNo}
} }
Mock.setup({ function getPage2(params) {
timeout: '500-1000' let offset = params.pageNo * params.pageSize
// timeout: '5000' let limit = params.pageNo * params.pageSize + params.pageSize
}) return {limit, offset, pageNo: params.pageNo}
// console.log('posts20',posts20) }
let allRecommendVideos = posts6.map(v => { let allRecommendVideos = posts6.map(v => {
v.type = 'recommend-video' v.type = 'recommend-video'
return v return v
}) })
// console.log('allRecommendVideos', allRecommendVideos) // console.log('allRecommendVideos', allRecommendVideos)
let t = [ let t = [{
{ type: 'imgs', src: `https://imgapi.cn/bing.php`, author: {
type: 'imgs', unique_id: uniqueId('list_')
src: `https://imgapi.cn/bing.php`, }
author: { }, {
unique_id: uniqueId('list_') type: 'user', src: `https://imgapi.cn/bing.php`, author: {
} unique_id: uniqueId('list_')
}, }
{ }, {
type: 'user', type: 'img', src: `https://imgapi.cn/bing.php`, author: {
src: `https://imgapi.cn/bing.php`, unique_id: uniqueId('list_')
author: { }
unique_id: uniqueId('list_') },]
}
},
{
type: 'img',
src: `https://imgapi.cn/bing.php`,
author: {
unique_id: uniqueId('list_')
}
},
]
// allRecommendVideos.unshift(...t) // allRecommendVideos.unshift(...t)
// { // {
// type: 'user-imgs', // type: 'user-imgs',
@ -69,104 +65,132 @@ let t = [
// } // }
// }, // },
function initData() {
async function fetchData() {
const baseStore = useBaseStore()
fetch(BASE_URL + '/data/posts.json').then(r => { fetch(BASE_URL + '/data/posts.json').then(r => {
r.json().then(v => { r.json().then(v => {
allRecommendVideos = allRecommendVideos.concat(v) let userList = cloneDeep(baseStore.users)
allRecommendVideos = allRecommendVideos.map(w => { v = v.map(w => {
w.type = 'recommend-video' w.type = 'recommend-video'
if (userList.length) {
let item = userList.find(a => String(a.uid) === String(w.author_user_id))
if (item) w.author = item
}
return w return w
}) })
resource.like = allRecommendVideos.slice(0, 15) allRecommendVideos = allRecommendVideos.concat(v)
resource.videos = allRecommendVideos.slice(0, 15)
})
})
fetch(BASE_URL + '/data/user-71158770.json').then(r => {
r.json().then(v => {
resource.my = v
}) })
}) })
} }
setTimeout(initData, 3000) export async function startMock() {
mock.onGet(/recommended/).reply(async (config) => {
Mock.mock(/recommended/, options => { let page = getPage2(config.params)
// console.log('recommended', allRecommendVideos.length) return [200, {
let page = getPage(options) data: {
return Mock.mock({ total: allRecommendVideos.length,
data: { list: allRecommendVideos.slice(page.offset, page.limit), // list: allRecommendVideos.slice(0, 6),
total: allRecommendVideos.length, }, code: 200, msg: '',
list: allRecommendVideos.slice(page.offset, page.limit), }]
// list: allRecommendVideos.slice(0, 6),
}, code: 200, msg: '',
}) })
})
Mock.mock(/my/, options => { mock.onGet(/video\/private/).reply(async (config) => {
let page = getPage(options) let page = getPage2(config.params)
// console.log('mock', page) return [200, {
return Mock.mock({ data: {
data: { total: 10,
pageNo: page.pageNo, total: resource.my.length, list: resource.my.slice(page.offset, page.limit), list: allRecommendVideos.slice(100, 110).slice(page.offset, page.limit)
}, code: 200, msg: '', }, code: 200, msg: '',
}]
}) })
})
Mock.mock(/like/, options => { mock.onGet(/video\/like/).reply(async (config) => {
let page = getPage(options) let page = getPage2(config.params)
return Mock.mock({ return [200, {
data: { data: {
pageNo: page.pageNo, total: resource.like.length, list: resource.like.slice(page.offset, page.limit), total: 150,
}, code: 200, msg: '', list: allRecommendVideos.slice(200, 350).slice(page.offset, page.limit)
}, code: 200, msg: '',
}]
}) })
})
Mock.mock(/private1/, options => { mock.onGet(/user\/collect/).reply(async (config) => {
let page = getPage(options) return [200, {
return Mock.mock({ data: {
data: { video: {
pageNo: page.pageNo, total: resource.private1.length, list: resource.private1.slice(page.offset, page.limit), total: 50, list: allRecommendVideos.slice(350, 400),
}, code: 200, msg: '', }, music: {
total: resource.music.length, list: resource.music,
},
}, code: 200, msg: '',
}]
}) })
})
Mock.mock(/collect/, options => { mock.onGet(/video\/my/).reply(async (config) => {
return Mock.mock({ let page = getPage2(config.params)
data: { // let r = await fetch(BASE_URL + '/data/user-71158770.json')
video: { // let r = await fetch(BASE_URL + '/data/user-8357999.json')
total: resource.videos.length, let r = await fetch(BASE_URL + '/data/user-12345xiaolaohu.json')
list: resource.videos, let list = await r.json()
}, const baseStore = useBaseStore()
music: { let userList = cloneDeep(baseStore.users)
total: resource.music.length,
list: resource.music, list = list.map(w => {
if (userList.length) {
let item = userList.find(a => String(a.uid) === String(w.author_user_id))
if (item) w.author = item
} }
}, code: 200, msg: '', return w
}) })
})
Mock.mock(/historyVideo/, options => { return [200, {
let page = getPage(options) data: {
return Mock.mock({ pageNo: page.pageNo,
data: { total: list.length,
pageNo: page.pageNo, // total: resource.my.length, list: list.slice(page.offset, page.limit),
total: 50, list: resource.my.slice(page.offset, page.limit), }, code: 200, msg: '',
}, code: 200, msg: '', }]
}) });
})
Mock.mock(/historyOther/, options => { mock.onGet(/user\/userinfo/).reply(async (config) => {
let page = getPage(options) let r2 = await fetch(BASE_URL + '/data/users.json')
return Mock.mock({ let v = await r2.json()
data: { // let item = v.find(a => a.uid === '68310389333')
pageNo: page.pageNo, total: 0, list: [], // let item = v.find(a => a.uid === '59054327754')
}, code: 200, msg: '', let item = v.find(a => a.uid === '2739632844317827')
if (item) {
return [200, {data: item, code: 200}]
}
return [200, {code: 500}];
}) })
})
Mock.mock(/user\/friends/, options => { mock.onGet(/user\/friends/).reply(async (config) => {
return Mock.mock({ let r2 = await fetch(BASE_URL + '/data/users.json')
data: resource.users, code: 200, msg: '', let v = await r2.json()
return [200, {data: v, code: 200}]
}) })
})
mock.onGet(/historyVideo/).reply(async (config) => {
let page = getPage2(config.params)
return [200, {
data: {
total: 150,
list: allRecommendVideos.slice(200, 350).slice(page.offset, page.limit)
}, code: 200, msg: '',
}]
})
mock.onGet(/historyOther/).reply(async (config) => {
let page = getPage2(config.params)
return [200, {
data: {
pageNo: page.pageNo,
total: 0,
list: []
}, code: 200, msg: '',
}]
})
setTimeout(fetchData, 0)
}

View File

@ -99,6 +99,7 @@ import DouyinCode from "../../components/DouyinCode";
import ConfirmDialog from "../../components/dialog/ConfirmDialog"; import ConfirmDialog from "../../components/dialog/ConfirmDialog";
import ShareToFriend from "./components/ShareToFriend"; import ShareToFriend from "./components/ShareToFriend";
import resource from "../../assets/data/resource"; import resource from "../../assets/data/resource";
import {myVideo} from "@/api/videos";
export default { export default {
name: "Music", name: "Music",
@ -179,7 +180,7 @@ export default {
this.pageNo++ this.pageNo++
} }
this.loading = true this.loading = true
let res = await this.$api.videos.my({pageNo: this.pageNo, pageSize: this.pageSize,}) let res = await myVideo({pageNo: this.pageNo, pageSize: this.pageSize,})
this.loading = false this.loading = false
if (res.code === this.SUCCESS) { if (res.code === this.SUCCESS) {
this.videos = this.videos.concat(res.data.list) this.videos = this.videos.concat(res.data.list)

View File

@ -196,7 +196,7 @@ import SlideItem from '@/components/slide/SlideItem.vue'
import Comment from "../../components/Comment.vue"; import Comment from "../../components/Comment.vue";
import Share from "../../components/Share.vue"; import Share from "../../components/Share.vue";
import IndicatorHome from "./components/IndicatorHome.vue"; import IndicatorHome from "./components/IndicatorHome.vue";
import {computed, onActivated, onDeactivated, onMounted, onUnmounted, reactive} from "vue"; import {computed, onMounted, onUnmounted, reactive} from "vue";
import bus, {EVENT_KEY} from "../../utils/bus"; import bus, {EVENT_KEY} from "../../utils/bus";
import {useNav} from "@/utils/hooks/useNav"; import {useNav} from "@/utils/hooks/useNav";
import {useStore} from "vuex"; import {useStore} from "vuex";
@ -215,7 +215,7 @@ import Slide0 from "@/pages/home/slide/Slide0.vue";
import Slide2 from "@/pages/home/slide/Slide2.vue"; import Slide2 from "@/pages/home/slide/Slide2.vue";
import Slide4 from "@/pages/home/slide/Slide4.vue"; import Slide4 from "@/pages/home/slide/Slide4.vue";
import {DefaultUser} from "@/utils/const_var"; import {DefaultUser} from "@/utils/const_var";
import {$no, _getUserDouyinId} from "@/utils"; import {$no} from "@/utils";
import LongVideo from "@/pages/home/slide/LongVideo.vue"; import LongVideo from "@/pages/home/slide/LongVideo.vue";
const nav = useNav() const nav = useNav()

View File

@ -305,7 +305,7 @@
} }
.name { .name {
font-size: 18rem; font-size: 16rem;
margin-bottom: 5rem; margin-bottom: 5rem;
} }

View File

@ -15,7 +15,7 @@
</div> </div>
<transition name="fade"> <transition name="fade">
<div class="center" v-if="floatShowName"> <div class="center" v-if="floatShowName">
<p class="name f15 mt1r mb1r">{{ userinfo.nickname }}</p> <p class="name f14 mt1r mb1r">{{ userinfo.nickname }}</p>
</div> </div>
</transition> </transition>
<div class="right"> <div class="right">
@ -43,15 +43,17 @@
@touchmove="touchMove($event)" @touchmove="touchMove($event)"
@touchend="touchEnd($event)"> @touchend="touchEnd($event)">
<div ref="desc" class="desc"> <div ref="desc" class="desc">
<header ref="header" @click="previewImg = new URL('../../assets/img/header-bg.png')"> <header ref="header"
:style="{backgroundImage:`url(${_checkImgUrl(userinfo.cover_url[0].url_list[0])})`}"
@click="previewImg = _checkImgUrl(userinfo.cover_url[0].url_list[0])">
<div class="info"> <div class="info">
<img :src="$imgPreview(userinfo.avatar)" class="avatar" <img :src="_checkImgUrl(userinfo.avatar_168x168.url_list[0])" class="avatar"
@click="previewImg = userinfo.avatar"> @click="previewImg = _checkImgUrl(userinfo.avatar_300x300.url_list[0])">
<div class="right"> <div class="right">
<p class="name">{{ userinfo.nickname }}</p> <p class="name">{{ userinfo.nickname }}</p>
<div class="number mb1r"> <div class="number mb1r">
<span class="mr1r" v-if="userinfo.is_private">私密账号</span> <span class="mr1r" v-if="userinfo.is_private">私密账号</span>
<span>抖音号{{ userinfo.unique_id }}</span> <span>抖音号{{ _getUserDouyinId({author: userinfo}) }}</span>
<img src="../../assets/img/icon/me/qrcode-gray.png" alt="" @click.stop="$nav('/me/my-card')"> <img src="../../assets/img/icon/me/qrcode-gray.png" alt="" @click.stop="$nav('/me/my-card')">
</div> </div>
</div> </div>
@ -61,30 +63,30 @@
<div class="head"> <div class="head">
<div class="heat"> <div class="heat">
<div class="text" @click="isShowStarCount = true"> <div class="text" @click="isShowStarCount = true">
<span class="num">{{ formatNumber(userinfo.aweme_count) }}</span> <span class="num">{{ _formatNumber(userinfo.aweme_count) }}</span>
<span>获赞</span> <span>获赞</span>
</div> </div>
<div class="text" @click="$nav('/people/follow-and-fans',{type:0})"> <div class="text" @click="$nav('/people/follow-and-fans',{type:0})">
<span class="num">{{ formatNumber(userinfo.following_count) }}</span> <span class="num">{{ _formatNumber(userinfo.following_count) }}</span>
<span>朋友</span> <span>朋友</span>
</div> </div>
<div class="text" @click="$nav('/people/follow-and-fans',{type:0})"> <div class="text" @click="$nav('/people/follow-and-fans',{type:0})">
<span class="num">{{ formatNumber(userinfo.following_count) }}</span> <span class="num">{{ _formatNumber(userinfo.following_count) }}</span>
<span>关注</span> <span>关注</span>
</div> </div>
<div class="text" @click="$nav('/people/follow-and-fans',{type:1})"> <div class="text" @click="$nav('/people/follow-and-fans',{type:1})">
<span class="num">{{ formatNumber(userinfo.follower_count) }}</span> <span class="num">{{ _formatNumber(userinfo.follower_count) }}</span>
<span>粉丝</span> <span>粉丝</span>
</div> </div>
</div> </div>
<div class="button" @click="$nav('/people/find-acquaintance')">添加朋友</div> <div class="button" @click="$nav('/people/find-acquaintance')">添加朋友</div>
</div> </div>
<div class="signature" @click="$nav('/me/edit-userinfo-item',{type:3})"> <div class="signature" @click="$nav('/me/edit-userinfo-item',{type:3})">
<template v-if="!userinfo.desc"> <template v-if="!userinfo.signature">
<span>点击添加介绍让大家认识你...</span> <span>点击添加介绍让大家认识你...</span>
<img src="../../assets/img/icon/me/write-gray.png" alt=""> <img src="../../assets/img/icon/me/write-gray.png" alt="">
</template> </template>
<div v-else class="text" v-html="userinfo.desc"></div> <div v-else class="text" v-html="userinfo.signature"></div>
</div> </div>
<div class="more" @click="$nav('/me/edit-userinfo')"> <div class="more" @click="$nav('/me/edit-userinfo')">
<div class="age item" v-if="userinfo.birthday"> <div class="age item" v-if="userinfo.birthday">
@ -99,7 +101,7 @@
</template> </template>
{{ userinfo.city }} {{ userinfo.city }}
</div> </div>
<div class="item" v-if="userinfo.school.name"> <div class="item" v-if="userinfo.school?.name">
{{ userinfo.school.name }} {{ userinfo.school.name }}
</div> </div>
</div> </div>
@ -182,16 +184,7 @@
<dy-back direction="right"></dy-back> <dy-back direction="right"></dy-back>
</div> </div>
</div> </div>
<div class="list"> <Posters v-if="videos.collect.video.total !== -1" :list="videos.collect.video.list"></Posters>
<div class="item"
v-for="i in videos.collect.video.list.slice(0,3)">
<img class="poster" :src="$imgPreview(i.video+videoPoster)" alt="">
<div class="num">
<img class="love" src="../../assets/img/icon/love.svg" alt="">
<span>{{ formatNumber(i.likeNum) }}</span>
</div>
</div>
</div>
</div> </div>
<div class="music" v-if=" videos.collect.music.total !== -1"> <div class="music" v-if=" videos.collect.music.total !== -1">
@ -339,7 +332,7 @@
<ConfirmDialog <ConfirmDialog
v-model:visible="isShowStarCount" v-model:visible="isShowStarCount"
:subtitle='`"${userinfo.nickname}"共获得${this.formatNumber(userinfo.aweme_count)}个赞`' :subtitle='`"${userinfo.nickname}"共获得${_formatNumber(userinfo.aweme_count)}个赞`'
okText="确认" okText="确认"
cancelText="取消" cancelText="取消"
@ok="isShowStarCount = false" @ok="isShowStarCount = false"
@ -356,11 +349,15 @@ import Posters from '../../components/Posters'
import Footer from "../../components/Footer"; import Footer from "../../components/Footer";
import Indicator from '../../components/slide/Indicator' import Indicator from '../../components/slide/Indicator'
import {nextTick} from 'vue' import {nextTick} from 'vue'
import {mapState} from "vuex"; import {mapState} from 'pinia'
import bus from "../../utils/bus"; import bus from "../../utils/bus";
import ConfirmDialog from "../../components/dialog/ConfirmDialog"; import ConfirmDialog from "../../components/dialog/ConfirmDialog";
import {$no} from "@/utils"; import {$no, _checkImgUrl, _formatNumber, _getUserDouyinId} from "@/utils";
import SlideHorizontal from "@/components/slide/SlideHorizontal.vue"; import SlideHorizontal from "@/components/slide/SlideHorizontal.vue";
import {likeVideo, myVideo, privateVideo} from "@/api/videos";
import {useBaseStore} from "@/store/pinia";
import {userCollect} from "@/api/user";
export default { export default {
name: "Me", name: "Me",
@ -398,11 +395,13 @@ export default {
}, },
private: { private: {
list: [], list: [],
total: -1 total: -1,
pageNo: 0
}, },
like: { like: {
list: [], list: [],
total: -1 total: -1,
pageNo: 0
}, },
collect: { collect: {
video: { video: {
@ -444,9 +443,7 @@ export default {
if (this.tempScroll || this.isScroll) return {overflow: 'auto'} if (this.tempScroll || this.isScroll) return {overflow: 'auto'}
return {overflow: 'hidden'} return {overflow: 'hidden'}
}, },
...mapState({ ...mapState(useBaseStore, ['userinfo'])
userinfo: 'userinfo',
})
}, },
watch: { watch: {
contentIndex(newVal, oldVal) { contentIndex(newVal, oldVal) {
@ -468,6 +465,9 @@ export default {
bus.on('baseSlide-end', () => this.canScroll = true) bus.on('baseSlide-end', () => this.canScroll = true)
}, },
methods: { methods: {
_getUserDouyinId,
_checkImgUrl,
_formatNumber,
$no, $no,
setLoadingFalse() { setLoadingFalse() {
this.loadings.loading0 = false this.loadings.loading0 = false
@ -511,7 +511,8 @@ export default {
if (newVal === 3) { if (newVal === 3) {
if (videoOb.video.total === -1) { if (videoOb.video.total === -1) {
this.loadings['loading' + newVal] = true this.loadings['loading' + newVal] = true
let res = await this.$api.videos.collect() let res = await userCollect()
console.log('res',res)
if (res.code === this.SUCCESS) this.videos.collect = res.data if (res.code === this.SUCCESS) this.videos.collect = res.data
} }
} else { } else {
@ -520,16 +521,15 @@ export default {
let res let res
switch (newVal) { switch (newVal) {
case 0: case 0:
res = await this.$api.videos.my({pageNo: this.videos.my.pageNo, pageSize: this.pageSize,}) res = await myVideo({pageNo: this.videos.my.pageNo, pageSize: this.pageSize,})
console.log(res)
if (res.code === this.SUCCESS) this.videos.my = res.data if (res.code === this.SUCCESS) this.videos.my = res.data
break break
case 1: case 1:
res = await this.$api.videos.private({pageNo: this.videos.private.pageNo, pageSize: this.pageSize,}) res = await privateVideo({pageNo: this.videos.private.pageNo, pageSize: this.pageSize,})
if (res.code === this.SUCCESS) this.videos.private = res.data if (res.code === this.SUCCESS) this.videos.private = res.data
break break
case 2: case 2:
res = await this.$api.videos.like({pageNo: this.videos.like.pageNo, pageSize: this.pageSize,}) res = await likeVideo({pageNo: this.videos.like.pageNo, pageSize: this.pageSize,})
if (res.code === this.SUCCESS) this.videos.like = res.data if (res.code === this.SUCCESS) this.videos.like = res.data
break break
} }
@ -569,16 +569,16 @@ export default {
let res let res
switch (this.contentIndex) { switch (this.contentIndex) {
case 0: case 0:
res = await this.$api.videos.my({pageNo: videoOb.pageNo, pageSize: this.pageSize,}) res = await myVideo({pageNo: videoOb.pageNo, pageSize: this.pageSize,})
break break
case 1: case 1:
res = await this.$api.videos.private({pageNo: videoOb.pageNo, pageSize: this.pageSize,}) res = await privateVideo({pageNo: videoOb.pageNo, pageSize: this.pageSize,})
break break
case 2: case 2:
res = await this.$api.videos.like({pageNo: videoOb.pageNo, pageSize: this.pageSize,}) res = await likeVideo({pageNo: videoOb.pageNo, pageSize: this.pageSize,})
break break
case 3: case 3:
res = await this.$api.videos.collect({pageNo: videoOb.pageNo, pageSize: this.pageSize,}) res = await userCollect({pageNo: videoOb.pageNo, pageSize: this.pageSize,})
break break
} }
this.loadings['loading' + this.contentIndex] = false this.loadings['loading' + this.contentIndex] = false

View File

@ -120,6 +120,7 @@ import FromBottomDialog from "../../components/dialog/FromBottomDialog";
import GuessMusic from "./components/GuessMusic"; import GuessMusic from "./components/GuessMusic";
import CollectMusic from "./components/CollectMusic"; import CollectMusic from "./components/CollectMusic";
import Loading from "../../components/Loading"; import Loading from "../../components/Loading";
import {userCollect} from "@/api/user";
//TODO page //TODO page
export default { export default {
@ -189,7 +190,7 @@ export default {
}, },
async getCollectMusic() { async getCollectMusic() {
this.loading = true this.loading = true
let res = await this.$api.videos.collect() let res = await userCollect()
this.loading = false this.loading = false
if (res.code === this.SUCCESS) { if (res.code === this.SUCCESS) {
this.collectMusic = res.data.music.list.slice(0, 2) this.collectMusic = res.data.music.list.slice(0, 2)

View File

@ -111,9 +111,7 @@
<script setup> <script setup>
import Search from "../../components/Search"; import Search from "../../components/Search";
import FromBottomDialog from "../../components/dialog/FromBottomDialog"; import FromBottomDialog from "../../components/dialog/FromBottomDialog";
import SlideList from "@/pages/home/slide/SlideList.vue"; import {onMounted, reactive} from "vue";
import api from "@/api";
import {nextTick, onMounted, reactive} from "vue";
import {useBaseStore} from "@/store/pinia"; import {useBaseStore} from "@/store/pinia";
import SlideVerticalInfinite from "@/components/slide/SlideVerticalInfinite.vue"; import SlideVerticalInfinite from "@/components/slide/SlideVerticalInfinite.vue";
import {uniqueId} from "lodash-es"; import {uniqueId} from "lodash-es";
@ -144,11 +142,9 @@ const render = useSlideListItemRender()
onMounted(() => { onMounted(() => {
console.log('s', store.routeData) console.log('s', store.routeData)
state.index = store.routeData.index state.index = store.routeData.index
state.list = store.routeData.list.map(v => { state.list = store.routeData.list
v.type = 'recommend-video'
v.author = store.routeData.author console.log('sss', state.list[state.index])
return v
})
}) })
</script> </script>

View File

@ -55,6 +55,7 @@
</template> </template>
<script> <script>
import {mapState} from "vuex"; import {mapState} from "vuex";
import {userCollect} from "@/api/user";
export default { export default {
name: "MusicCollect", name: "MusicCollect",
@ -88,7 +89,7 @@ export default {
methods: { methods: {
async getData() { async getData() {
this.loading = true this.loading = true
let res = await this.$api.videos.collect() let res = await userCollect()
this.loading = false this.loading = false
if (res.code === this.SUCCESS) { if (res.code === this.SUCCESS) {
this.list = res.data.music.list this.list = res.data.music.list

View File

@ -19,6 +19,7 @@
import resource from "../../../assets/data/resource"; import resource from "../../../assets/data/resource";
import Posters from "../../../components/Posters"; import Posters from "../../../components/Posters";
import Scroll from "../../../components/Scroll"; import Scroll from "../../../components/Scroll";
import {myVideo} from "@/api/videos";
export default { export default {
name: "VideoCollect", name: "VideoCollect",
@ -49,7 +50,7 @@ export default {
this.pageNo++ this.pageNo++
} }
this.loading = true this.loading = true
let res = await this.$api.videos.my({pageNo: this.pageNo, pageSize: this.pageSize,}) let res = await myVideo({pageNo: this.pageNo, pageSize: this.pageSize,})
this.loading = false this.loading = false
if (res.code === this.SUCCESS) { if (res.code === this.SUCCESS) {
this.videos = this.videos.concat(res.data.list) this.videos = this.videos.concat(res.data.list)

View File

@ -70,6 +70,7 @@
import {nextTick} from "vue"; import {nextTick} from "vue";
import globalMethods from "../../../utils"; import globalMethods from "../../../utils";
import gaobaiqiqiu from "../../../assets/data/lyrics/gaobaiqiqiu.lrc?raw"; import gaobaiqiqiu from "../../../assets/data/lyrics/gaobaiqiqiu.lrc?raw";
import {userCollect} from "@/api/user";
export default { export default {
name: "SlideItemMusic", name: "SlideItemMusic",
@ -183,7 +184,7 @@ export default {
}, },
async getCollectMusic() { async getCollectMusic() {
this.loading = true this.loading = true
let res = await this.$api.videos.collect() let res = await userCollect()
this.loading = false this.loading = false
if (res.code === this.SUCCESS) { if (res.code === this.SUCCESS) {
this.collectMusic = res.data.music.list.slice(0, 2) this.collectMusic = res.data.music.list.slice(0, 2)

View File

@ -122,7 +122,6 @@ const routes = [
{path: '/message/chat/detail', component: ChatDetail}, {path: '/message/chat/detail', component: ChatDetail},
{path: '/message/chat/red-packet-detail', component: RedPacketDetail}, {path: '/message/chat/red-packet-detail', component: RedPacketDetail},
{path: '/people/find-acquaintance', component: FindAcquaintance}, {path: '/people/find-acquaintance', component: FindAcquaintance},
{path: '/people/follow-and-fans', component: FollowAndFans}, {path: '/people/follow-and-fans', component: FollowAndFans},
@ -148,7 +147,7 @@ const routes = [
{path: '/message/share-to-friend', component: Share2Friend}, {path: '/message/share-to-friend', component: Share2Friend},
{path: '/video-detail', name: 'video-detail', component: VideoDetail}, {path: '/video-detail', name: 'video-detail', component: VideoDetail},
{path: '/album-detail', name: 'video-detail', component: AlbumDetail}, {path: '/album-detail', component: AlbumDetail},
{path: '/home/search', component: Search}, {path: '/home/search', component: Search},

View File

@ -1,11 +1,46 @@
import {defineStore} from "pinia"; import {defineStore} from "pinia";
import {friends, userinfo} from "@/api/user.js";
import enums from "@/utils/enums";
export const useBaseStore = defineStore('base', { export const useBaseStore = defineStore('base', {
state: () => { state: () => {
return { return {
routeData: null routeData: null,
users: [],
userinfo: {
school: {
name: '中央戏剧学院',
department: null,
joinTime: null,
education: null,
displayType: enums.DISPLAY_TYPE.ALL,
},
"avatar_168x168": {
"url_list": [],
},
"avatar_300x300": {
"url_list": [],
},
"cover_url": [{
"url_list": [],
}],
"white_cover_url": [{
"url_list": [],
}],
}
} }
}, },
getters: {}, getters: {},
actions: {}, actions: {
async init() {
let r = await userinfo()
if (r.success) {
this.userinfo = r.data
}
let r2 = await friends()
if (r2.success) {
this.users = r2.data
}
}
},
}) })

View File

@ -6,32 +6,33 @@ export function useSlideListItemRender(props) {
return function render(item, index, play, uniqueId) { return function render(item, index, play, uniqueId) {
// console.log('item', item) // console.log('item', item)
let node let node
if (item.type === 'img') { switch (item.type) {
node = <img src={item.src} style="height:100%;"/> case 'img':
} node = <img src={item.src} style="height:100%;"/>
if (item.type === 'imgs') { break
node = <SlideAlbum case 'imgs':
isPlay={play} node = <SlideAlbum
index={index} isPlay={play}
position={{uniqueId, index}} index={index}
{...props} position={{uniqueId, index}}
/> {...props}
} />
if (item.type === 'user') { break
node = <SlideUser {...props}/> case 'user':
} node = <SlideUser {...props}/>
if (item.type === 'send-video') { break
node = <video src={item.src} style="height:100%;"/> case 'send-video':
} node = <video src={item.src} style="height:100%;"/>
// onGoUserInfo={() => cb('onGoUserInfo')} break
if (item.type === 'recommend-video') { default:
node = <BVideo node = <BVideo
isPlay={play} isPlay={play}
item={item} item={item}
index={index} index={index}
position={{uniqueId, index}} position={{uniqueId, index}}
{...props} {...props}
/> />
break
} }
return node return node
} }

View File

@ -2,15 +2,14 @@ import axios from 'axios'
import config from '@/config' import config from '@/config'
import store from '../store' import store from '../store'
import globalMethods from './index' import globalMethods from './index'
//这里必须使用axios实例因为已经有一个没有创建实例而直接使用的axio了
// 在request.js这里如果直接使用axios的话request.js里面的拦截器也会执行 const axiosInstance = axios.create({
//创建一个实例再去使用这个实例请求request.js里面的axios配置就不会生效
const instance = axios.create({
baseURL: config.baseUrl, baseURL: config.baseUrl,
timeout: 60000, timeout: 60000,
}) })
// request拦截器 // request拦截器
instance.interceptors.request.use((config) => { axiosInstance.interceptors.request.use((config) => {
// 如果没有设置Content-Type默认application/json // 如果没有设置Content-Type默认application/json
if (!config.headers['Content-Type']) { if (!config.headers['Content-Type']) {
config.headers['Content-Type'] = 'application/json' config.headers['Content-Type'] = 'application/json'
@ -24,7 +23,7 @@ instance.interceptors.request.use((config) => {
* 响应拦截器目前的处理是无论失败或者成功都会返回{ code: xxx, data: xxx }这种类型的数据没有reject和抛error * 响应拦截器目前的处理是无论失败或者成功都会返回{ code: xxx, data: xxx }这种类型的数据没有reject和抛error
* 如果有问题拦截器里会进行提示然后返回{ code: Xxx, data:xxx }这种数据在then里面总是会接收到 * 如果有问题拦截器里会进行提示然后返回{ code: Xxx, data:xxx }这种数据在then里面总是会接收到
* */ * */
instance.interceptors.response.use( axiosInstance.interceptors.response.use(
response => { response => {
// console.log('response',response) // console.log('response',response)
/* /*
@ -34,9 +33,9 @@ instance.interceptors.response.use(
// console.log(response) // console.log(response)
if (data === undefined || data === null || data === '') { if (data === undefined || data === null || data === '') {
globalMethods.$notice('请求失败,请稍后重试!') globalMethods.$notice('请求失败,请稍后重试!')
return {code: 500, data: []} return {success: false, code: 500, data: []}
} else if (typeof data === 'string') { } else if (typeof data === 'string') {
return {code: 200, data} return {success: true, code: 200, data}
} else { } else {
if (data.data === undefined || data.data === null) { if (data.data === undefined || data.data === null) {
data.data = {...data} data.data = {...data}
@ -47,46 +46,51 @@ instance.interceptors.response.use(
resCode = Number(resCode) resCode = Number(resCode)
} catch (e) { } catch (e) {
data.code = resCode = 500 data.code = resCode = 500
data.success = false
} }
if (resCode === 0) { if (resCode === 0) {
data.code = resCode = 200 data.code = resCode = 200
data.success = true
} }
if (resCode !== 200) { if (resCode !== 200) {
globalMethods.$notice(response.data.message || '请求失败,请稍后重试!') globalMethods.$notice(response.data.message || '请求失败,请稍后重试!')
} else {
data.success = true
} }
} else { } else {
data.code = 200 data.code = 200
data.success = true
} }
return data return data
} }
}, },
error => { error => {
// console.log('error', error) console.log('error', error)
// console.log(error.response) // console.log(error.response)
// console.log(error.response.status) // console.log(error.response.status)
if (error.response === undefined) { if (error.response === undefined) {
globalMethods.$notice('服务器响应超时') globalMethods.$notice('服务器响应超时')
return {code: 500, msg: '服务器响应超时', data: []} return {success: false, code: 500, msg: '服务器响应超时', data: []}
} }
if (error.response.status >= 500) { if (error.response.status >= 500) {
globalMethods.$notice('服务器出现错误') globalMethods.$notice('服务器出现错误')
return {code: 500, msg: '服务器出现错误', data: []} return {success: false, code: 500, msg: '服务器出现错误', data: []}
} }
if (error.response.status === 404) { if (error.response.status === 404) {
globalMethods.$notice('接口不存在') globalMethods.$notice('接口不存在')
return {code: 404, msg: '接口不存在', data: []} return {success: false, code: 404, msg: '接口不存在', data: []}
} }
if (error.response.status === 400) { if (error.response.status === 400) {
globalMethods.$notice('接口报错') globalMethods.$notice('接口报错')
return {code: 400, msg: '接口报错', data: []} return {success: false, code: 400, msg: '接口报错', data: []}
} }
if (error.response.status === 401) { if (error.response.status === 401) {
return {code: 401, msg: '用户名或密码不正确', data: []} return {success: false, code: 401, msg: '用户名或密码不正确', data: []}
} else { } else {
let {data} = error.response let {data} = error.response
if (data === null || data === undefined) { if (data === null || data === undefined) {
globalMethods.$notice('请求失败,请稍后重试!') globalMethods.$notice('请求失败,请稍后重试!')
return {code: 200, data: []} return {success: true, code: 200, data: []}
} else { } else {
let resCode = data.code let resCode = data.code
if (data.data === undefined || data.data === null) { if (data.data === undefined || data.data === null) {
@ -96,12 +100,13 @@ instance.interceptors.response.use(
globalMethods.$notice('请求失败,请稍后重试!') globalMethods.$notice('请求失败,请稍后重试!')
} else { } else {
data.code = 200 data.code = 200
data.success = true
} }
return data return data
} }
} }
}) })
export default instance export default axiosInstance