优化
This commit is contained in:
parent
1e4c4dc702
commit
c9fcbf0d5a
@ -44,6 +44,7 @@
|
||||
<script crossorigin="anonymous"
|
||||
integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ=="
|
||||
src="https://lib.baomitu.com/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.min.js" type="application/javascript"></script>
|
||||
<!-- <script crossorigin="anonymous"-->
|
||||
<!-- integrity="sha512-KkkY/3auRhaXDFzFMpwtZ+BrS8EBQ+GfiBxdJ9jGMi6Gg74/sYbq/IZpY593pkNjTmbeRfBwjpZo+7gcpH45Ww=="-->
|
||||
<!-- src="https://lib.baomitu.com/eruda/3.0.1/eruda.min.js"></script>-->
|
||||
|
||||
@ -13,17 +13,16 @@
|
||||
"core-js": "3.21.1",
|
||||
"dayjs": "1.11.0",
|
||||
"gl-matrix": "3.4.3",
|
||||
"mitt": "3.0.0",
|
||||
"lodash-es": "^4.17.21",
|
||||
"mitt": "3.0.0",
|
||||
"mobile-select": "1.1.2",
|
||||
"mockjs": "1.1.0",
|
||||
"pinia": "^2.1.7",
|
||||
"pinyin": "2.11.1",
|
||||
"swiper": "8.4.6",
|
||||
"vue": "3.4.21",
|
||||
"vue-masonry": "0.16.0",
|
||||
"vue-router": "4.3.0",
|
||||
"vue-switches": "2.0.1",
|
||||
"mobile-select": "1.1.2",
|
||||
"vuex": "4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
@ -32,9 +31,9 @@
|
||||
"@vitejs/plugin-vue": "4.0.0",
|
||||
"@vitejs/plugin-vue-jsx": "3.0.0",
|
||||
"less": "4.1.3",
|
||||
"unplugin-vue-macros": "^2.7.10",
|
||||
"rollup-plugin-visualizer": "^5.9.2",
|
||||
"unplugin-vue-define-options": "^1.4.1",
|
||||
"unplugin-vue-macros": "^2.7.10",
|
||||
"vite": "4.5.2"
|
||||
}
|
||||
}
|
||||
|
||||
@ -38,9 +38,6 @@ dependencies:
|
||||
pinyin:
|
||||
specifier: 2.11.1
|
||||
version: 2.11.1
|
||||
swiper:
|
||||
specifier: 8.4.6
|
||||
version: 8.4.6
|
||||
vue:
|
||||
specifier: 3.4.21
|
||||
version: 3.4.21
|
||||
@ -1507,12 +1504,6 @@ packages:
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/dom7@4.0.6:
|
||||
resolution: {integrity: sha512-emjdpPLhpNubapLFdjNL9tP06Sr+GZkrIHEXLWvOGsytACUrkbeIdjO5g77m00BrHTznnlcNqgmn7pCN192TBA==}
|
||||
dependencies:
|
||||
ssr-window: 4.0.2
|
||||
dev: false
|
||||
|
||||
/electron-to-chromium@1.4.563:
|
||||
resolution: {integrity: sha512-dg5gj5qOgfZNkPNeyKBZQAQitIQ/xwfIDmEQJHCbXaD9ebTZxwJXUsDYcBlAvZGZLi+/354l35J1wkmP6CqYaw==}
|
||||
dev: true
|
||||
@ -2373,10 +2364,6 @@ packages:
|
||||
engines: {node: '>= 8'}
|
||||
dev: true
|
||||
|
||||
/ssr-window@4.0.2:
|
||||
resolution: {integrity: sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==}
|
||||
dev: false
|
||||
|
||||
/string-width@4.2.3:
|
||||
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
|
||||
engines: {node: '>=8'}
|
||||
@ -2412,15 +2399,6 @@ packages:
|
||||
resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==}
|
||||
dev: true
|
||||
|
||||
/swiper@8.4.6:
|
||||
resolution: {integrity: sha512-HACW035vBz2T6Kfut23EAzXhcDpgR8doX+wjq0ZUvJgS5SQApGrV885DAPLBFnmPUISsAhNSVxPKDxqroFvXvQ==}
|
||||
engines: {node: '>= 4.7.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
dom7: 4.0.6
|
||||
ssr-window: 4.0.2
|
||||
dev: false
|
||||
|
||||
/tar@6.2.0:
|
||||
resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
@ -7,7 +7,4 @@ export default {
|
||||
author(params, data) {
|
||||
return request({url: '/user/author', method: 'get', params, data})
|
||||
},
|
||||
profile(params, data) {
|
||||
return request({url: '/user/profile/other', method: 'get', params, data})
|
||||
},
|
||||
}
|
||||
@ -26,7 +26,4 @@ export default {
|
||||
historyOther(params, data) {
|
||||
return request({url: '/video/historyOther', method: 'get', params, data})
|
||||
},
|
||||
post(params, data) {
|
||||
return request({url: '/aweme/post', method: 'get', params, data})
|
||||
},
|
||||
}
|
||||
@ -3,16 +3,12 @@ import posts6 from "@/assets/data/posts6.json";
|
||||
|
||||
export default {
|
||||
videos: [
|
||||
...posts6
|
||||
],
|
||||
my: [
|
||||
...posts6
|
||||
],
|
||||
like: [
|
||||
...posts6
|
||||
],
|
||||
private1: [
|
||||
...posts6
|
||||
],
|
||||
users:{
|
||||
"all": [
|
||||
|
||||
@ -1,582 +0,0 @@
|
||||
[
|
||||
{
|
||||
"extra": {
|
||||
"fatal_item_ids": [],
|
||||
"logid": "20230222232911D35C903406FC00209A46",
|
||||
"now": 1677079751000
|
||||
},
|
||||
"log_pb": {
|
||||
"impr_id": "20230222232911D35C903406FC00209A46"
|
||||
},
|
||||
"status_code": 0,
|
||||
"status_msg": null,
|
||||
"user": {
|
||||
"apple_account": 0,
|
||||
"avatar_168x168": {
|
||||
"height": 720,
|
||||
"uri": "aweme-avatar/mosaic-legacy_330b002fd56a93e8b6f1",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/img/aweme-avatar/mosaic-legacy_330b002fd56a93e8b6f1~c5_168x168.jpeg?from=2956013662"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"avatar_300x300": {
|
||||
"height": 720,
|
||||
"uri": "aweme-avatar/mosaic-legacy_330b002fd56a93e8b6f1",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/img/aweme-avatar/mosaic-legacy_330b002fd56a93e8b6f1~c5_300x300.jpeg?from=2956013662"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"avatar_larger": {
|
||||
"height": 720,
|
||||
"uri": "aweme-avatar/mosaic-legacy_330b002fd56a93e8b6f1",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/aweme/1080x1080/aweme-avatar/mosaic-legacy_330b002fd56a93e8b6f1.jpeg?from=2956013662"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"avatar_medium": {
|
||||
"height": 720,
|
||||
"uri": "aweme-avatar/mosaic-legacy_330b002fd56a93e8b6f1",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/aweme/720x720/aweme-avatar/mosaic-legacy_330b002fd56a93e8b6f1.jpeg?from=2956013662"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"avatar_thumb": {
|
||||
"height": 720,
|
||||
"uri": "aweme-avatar/mosaic-legacy_330b002fd56a93e8b6f1",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/aweme/100x100/aweme-avatar/mosaic-legacy_330b002fd56a93e8b6f1.jpeg?from=2956013662"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"aweme_count": 772,
|
||||
"aweme_count_correction_threshold": -1,
|
||||
"birthday_hide_level": 0,
|
||||
"can_set_item_cover": false,
|
||||
"can_show_group_card": 1,
|
||||
"card_entries": [
|
||||
{
|
||||
"card_data": "{\"is_order_card\":false,\"has_new\":false,\"is_store\":false,\"shop_id\":\"\",\"product_count\":19,\"store_type\":\"window\",\"icon_is_repeat\":false,\"icon_type\":\"png\",\"is_promotion_icon\":false}",
|
||||
"goto_url": "sslocal://goods/shop?uid=68310389333\u0026sec_uid=MS4wLjABAAAAPCnTQLqza4Xqu-uO7KZHcKuILkO7RRz2oapyOC04AQ0",
|
||||
"icon_dark": {
|
||||
"url_list": [
|
||||
"https://lf3-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_light-2x.png",
|
||||
"https://lf9-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_light-2x.png",
|
||||
"https://lf26-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_light-2x.png",
|
||||
"https://lf3-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_light-3x.png",
|
||||
"https://lf9-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_light-3x.png",
|
||||
"https://lf26-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_light-3x.png"
|
||||
]
|
||||
},
|
||||
"icon_light": {
|
||||
"url_list": [
|
||||
"https://lf3-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_dark-2x.png",
|
||||
"https://lf9-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_dark-2x.png",
|
||||
"https://lf26-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_dark-2x.png",
|
||||
"https://lf3-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_dark-3x.png",
|
||||
"https://lf9-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_dark-3x.png",
|
||||
"https://lf26-static.bytednsdoc.com/obj/eden-cn/fylmmlqeh7nupanuhog/ic_dark-3x.png"
|
||||
]
|
||||
},
|
||||
"sub_title": "19件好物",
|
||||
"title": "进入橱窗",
|
||||
"type": 1
|
||||
}
|
||||
],
|
||||
"city": "绵阳",
|
||||
"close_friend_type": 0,
|
||||
"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": false,
|
||||
"star_atlas": 1
|
||||
},
|
||||
"commerce_user_level": 0,
|
||||
"country": "中国",
|
||||
"cover_and_head_image_info": {
|
||||
"cover_list": null,
|
||||
"profile_cover_list": []
|
||||
},
|
||||
"cover_colour": "#02161823",
|
||||
"cover_url": [
|
||||
{
|
||||
"uri": "c8510002be9a3a61aad2",
|
||||
"url_list": [
|
||||
"https://p3-pc-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1677722400\u0026x-signature=1BdhTmQL2kXZwLI5pNxxhe2RgNw%3D\u0026from=2480802190",
|
||||
"https://p6-pc-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1677722400\u0026x-signature=JGroDaQRgXedx%2FITX%2BSIagTik%2Bo%3D\u0026from=2480802190",
|
||||
"https://p9-pc-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1677722400\u0026x-signature=%2BcjNQrq4xrGtPru099aHZgW3wx8%3D\u0026from=2480802190"
|
||||
]
|
||||
}
|
||||
],
|
||||
"custom_verify": "美食自媒体",
|
||||
"district": null,
|
||||
"dongtai_count": 0,
|
||||
"dynamic_cover": {},
|
||||
"enable_wish": false,
|
||||
"enterprise_user_info": "{\"commerce_info\":{\"offline_info_list\":[],\"challenge_list\":null,\"task_list\":null,\"head_image_list\":null,\"smart_phone_list\":null},\"homepage_bottom_toast\":null,\"permissions\":[{\"Id\":3,\"Key\":\"ItemShop\",\"Name\":\"视频电商\",\"AppId\":1128,\"Status\":1,\"Extra\":null,\"Customization\":null,\"Parent\":0,\"Actions\":null},{\"Id\":4,\"Key\":\"LiveShop\",\"Name\":\"直播电商\",\"AppId\":1128,\"Status\":1,\"Extra\":null,\"Customization\":null,\"Parent\":0,\"Actions\":null},{\"Id\":5,\"Key\":\"UserShop\",\"Name\":\"个人橱窗\",\"AppId\":1128,\"Status\":1,\"Extra\":null,\"Customization\":null,\"Parent\":1,\"Actions\":null}],\"tab_ceiling_toast\":null,\"limiters\":null,\"attic_info\":null,\"profile_edit_button\":null,\"elite_center\":null,\"enterprise_card_visibility\":false,\"blue_label_edit_jump_url\":\"aweme://webview/?url=https%3A%2F%2Fapi.amemv.com%2Finsights%2Flite%2FcontactSetting%3Fhide_nav_bar%3D1%26title%3D%25E8%2581%2594%25E7%25B3%25BB%25E6%2596%25B9%25E5%25BC%258F%26enter_from%3Dcustomized_tab\u0026hide_nav_bar=1\u0026title=%E8%81%94%E7%B3%BB%E6%96%B9%E5%BC%8F\u0026rn_schema=aweme%3A%2F%2Freactnative%2F%3Fchannel_name%3Drn_patch%26bundle_name%3Dbusiness%26module_name%3Dpage_e_lite_contactSetting%26force_h5%3D1%26hide_nav_bar%3D1%26bundle_url%3D%26title%3D%25E8%2581%2594%25E7%25B3%25BB%25E6%2596%25B9%25E5%25BC%258F%26enter_from%3Dcustomized_tab\"}",
|
||||
"enterprise_verify_reason": "",
|
||||
"favorite_permission": 0,
|
||||
"favoriting_count": 0,
|
||||
"follow_guide": true,
|
||||
"follow_status": 1,
|
||||
"follower_count": 42898157,
|
||||
"follower_request_status": 0,
|
||||
"follower_status": 0,
|
||||
"following_count": 1,
|
||||
"forward_count": 1,
|
||||
"gender": 0,
|
||||
"has_e_account_role": true,
|
||||
"has_subscription": false,
|
||||
"im_primary_role_id": 1001,
|
||||
"im_role_ids": [
|
||||
1001,
|
||||
8,
|
||||
19,
|
||||
9,
|
||||
15
|
||||
],
|
||||
"image_send_exempt": false,
|
||||
"ins_id": "",
|
||||
"is_activity_user": false,
|
||||
"is_ban": false,
|
||||
"is_block": false,
|
||||
"is_blocked": false,
|
||||
"is_effect_artist": false,
|
||||
"is_gov_media_vip": false,
|
||||
"is_mix_user": true,
|
||||
"is_not_show": false,
|
||||
"is_series_user": false,
|
||||
"is_sharing_profile_user": 0,
|
||||
"is_star": false,
|
||||
"iso_country_code": "CN",
|
||||
"life_story_block": {
|
||||
"life_story_block": false
|
||||
},
|
||||
"live_commerce": true,
|
||||
"live_status": 0,
|
||||
"max_follower_count": 45635987,
|
||||
"message_chat_entry": true,
|
||||
"mix_count": 9,
|
||||
"mplatform_followers_count": 50635962,
|
||||
"new_friend_type": 0,
|
||||
"nickname": "李子柒",
|
||||
"original_musician": {
|
||||
"digg_count": 0,
|
||||
"music_count": 0,
|
||||
"music_used_count": 0
|
||||
},
|
||||
"pigeon_daren_status": "",
|
||||
"pigeon_daren_warn_tag": "0",
|
||||
"profile_tab_type": 0,
|
||||
"province": "四川",
|
||||
"publish_landing_tab": 3,
|
||||
"r_fans_group_info": {},
|
||||
"recommend_reason_relation": "",
|
||||
"recommend_user_reason_source": 0,
|
||||
"risk_notice_text": "",
|
||||
"room_id": 0,
|
||||
"school_name": "",
|
||||
"sec_uid": "MS4wLjABAAAAPCnTQLqza4Xqu-uO7KZHcKuILkO7RRz2oapyOC04AQ0",
|
||||
"secret": 0,
|
||||
"series_count": 0,
|
||||
"share_info": {
|
||||
"bool_persist": 1,
|
||||
"share_desc": "长按复制此条消息,打开抖音搜索,查看TA的更多作品。",
|
||||
"share_image_url": {
|
||||
"uri": "tos-cn-p-0015/b01c417ab84c48a18151df6f4874c517_1651306670",
|
||||
"url_list": [
|
||||
"https://p9-pc-sign.douyinpic.com/obj/tos-cn-p-0015/b01c417ab84c48a18151df6f4874c517_1651306670?x-expires=1677250800\u0026x-signature=VJdYZKRToIVzHdI51FwQBKPhrlA%3D\u0026from=2480802190",
|
||||
"https://p3-pc-sign.douyinpic.com/obj/tos-cn-p-0015/b01c417ab84c48a18151df6f4874c517_1651306670?x-expires=1677250800\u0026x-signature=oEIUk4jxtjHvBU8VlBE%2FSV%2FAqwE%3D\u0026from=2480802190",
|
||||
"https://p6-pc-sign.douyinpic.com/obj/tos-cn-p-0015/b01c417ab84c48a18151df6f4874c517_1651306670?x-expires=1677250800\u0026x-signature=xyfxdevA30BVgmbG%2BrPp0vD2rkw%3D\u0026from=2480802190"
|
||||
]
|
||||
},
|
||||
"share_qrcode_url": {
|
||||
"uri": "330b002fd4ab5b64f36e",
|
||||
"url_list": [
|
||||
"https://p3.douyinpic.com/obj/330b002fd4ab5b64f36e",
|
||||
"https://p6.douyinpic.com/obj/330b002fd4ab5b64f36e",
|
||||
"https://p26.douyinpic.com/obj/330b002fd4ab5b64f36e"
|
||||
]
|
||||
},
|
||||
"share_title": "快来加入抖音,让你发现最有趣的我!",
|
||||
"share_url": "www.iesdouyin.com/share/user/MS4wLjABAAAAPCnTQLqza4Xqu-uO7KZHcKuILkO7RRz2oapyOC04AQ0?sec_uid=MS4wLjABAAAAPCnTQLqza4Xqu-uO7KZHcKuILkO7RRz2oapyOC04AQ0\u0026from_ssr=1\u0026u_code=13kgm680k\u0026did=MS4wLjABAAAABJ_mRs4sEJHvG-sf_h49g7UCwbYtpzHo5DOznrSMhG6eweub_gtwy8cDOYAldLiv\u0026iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ\u0026with_sec_did=1",
|
||||
"share_weibo_desc": "长按复制此条消息,打开抖音搜索,查看TA的更多作品。"
|
||||
},
|
||||
"short_id": "71158770",
|
||||
"show_favorite_list": true,
|
||||
"show_subscription": false,
|
||||
"signature": "李家有女,人称子柒。联系邮箱:loveliziqi777@163.com",
|
||||
"signature_display_lines": 0,
|
||||
"signature_language": "un",
|
||||
"special_follow_status": 0,
|
||||
"sync_to_toutiao": 0,
|
||||
"tab_settings": {
|
||||
"private_tab": {
|
||||
"private_tab_style": 1,
|
||||
"show_private_tab": false
|
||||
}
|
||||
},
|
||||
"total_favorited": 222136300,
|
||||
"total_favorited_correction_threshold": -1,
|
||||
"twitter_id": "",
|
||||
"twitter_name": "",
|
||||
"uid": "68310389333",
|
||||
"unique_id": "",
|
||||
"urge_detail": {
|
||||
"user_urged": 0
|
||||
},
|
||||
"user_age": -1,
|
||||
"user_not_see": 0,
|
||||
"user_not_show": 1,
|
||||
"verification_type": 1,
|
||||
"video_cover": {},
|
||||
"video_icon": {
|
||||
"height": 720,
|
||||
"uri": "",
|
||||
"url_list": [],
|
||||
"width": 720
|
||||
},
|
||||
"watch_status": false,
|
||||
"white_cover_url": [
|
||||
{
|
||||
"uri": "318f1000413827e122102",
|
||||
"url_list": [
|
||||
"https://p9-pc-sign.douyinpic.com/obj/318f1000413827e122102?x-expires=1677250800\u0026x-signature=qpCkHogzhoVxIwezDfN5t2FkG3Q%3D\u0026from=2480802190",
|
||||
"https://p6-pc-sign.douyinpic.com/obj/318f1000413827e122102?x-expires=1677250800\u0026x-signature=hAHznbrHUDBWy3UJuU%2FIHGgVCCU%3D\u0026from=2480802190",
|
||||
"https://p3-pc-sign.douyinpic.com/obj/318f1000413827e122102?x-expires=1677250800\u0026x-signature=eRLwT5DOpXyUqOpwu4ArZB3EZ%2Bo%3D\u0026from=2480802190"
|
||||
]
|
||||
}
|
||||
],
|
||||
"with_commerce_enterprise_tab_entry": false,
|
||||
"with_commerce_entry": true,
|
||||
"with_fusion_shop_entry": true,
|
||||
"with_new_goods": false,
|
||||
"youtube_channel_id": "",
|
||||
"youtube_channel_title": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"extra": {
|
||||
"fatal_item_ids": [],
|
||||
"logid": "202302222325039B0ED70A0ED70D24FD4B",
|
||||
"now": 1677079503000
|
||||
},
|
||||
"log_pb": {
|
||||
"impr_id": "202302222325039B0ED70A0ED70D24FD4B"
|
||||
},
|
||||
"status_code": 0,
|
||||
"status_msg": null,
|
||||
"user": {
|
||||
"apple_account": 0,
|
||||
"avatar_168x168": {
|
||||
"height": 720,
|
||||
"uri": "aweme-avatar/tos-cn-i-0813_be03b84b932345a982f2820331c448c1",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/img/aweme-avatar/tos-cn-i-0813_be03b84b932345a982f2820331c448c1~c5_168x168.jpeg?from=2956013662"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"avatar_300x300": {
|
||||
"height": 720,
|
||||
"uri": "aweme-avatar/tos-cn-i-0813_be03b84b932345a982f2820331c448c1",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/img/aweme-avatar/tos-cn-i-0813_be03b84b932345a982f2820331c448c1~c5_300x300.jpeg?from=2956013662"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"avatar_larger": {
|
||||
"height": 720,
|
||||
"uri": "aweme-avatar/tos-cn-i-0813_be03b84b932345a982f2820331c448c1",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-i-0813_be03b84b932345a982f2820331c448c1.jpeg?from=2956013662"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"avatar_medium": {
|
||||
"height": 720,
|
||||
"uri": "aweme-avatar/tos-cn-i-0813_be03b84b932345a982f2820331c448c1",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-i-0813_be03b84b932345a982f2820331c448c1.jpeg?from=2956013662"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"avatar_thumb": {
|
||||
"height": 720,
|
||||
"uri": "aweme-avatar/tos-cn-i-0813_be03b84b932345a982f2820331c448c1",
|
||||
"url_list": [
|
||||
"https://p3-pc.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-i-0813_be03b84b932345a982f2820331c448c1.jpeg?from=2956013662"
|
||||
],
|
||||
"width": 720
|
||||
},
|
||||
"aweme_count": 2416,
|
||||
"aweme_count_correction_threshold": -1,
|
||||
"birthday_hide_level": 0,
|
||||
"can_set_item_cover": false,
|
||||
"can_show_group_card": 1,
|
||||
"card_entries": [
|
||||
{
|
||||
"goto_url": "aweme://im/FansGroup/GuestState",
|
||||
"icon_dark": {
|
||||
"uri": "https://p3.douyinpic.com/obj/im-resource/old_fans_group_manage_dark.png",
|
||||
"url_list": [
|
||||
"https://p3.douyinpic.com/obj/im-resource/old_fans_group_manage_dark.png",
|
||||
"https://p6.douyinpic.com/obj/im-resource/old_fans_group_manage_dark.png",
|
||||
"https://p9.douyinpic.com/obj/im-resource/old_fans_group_manage_dark.png"
|
||||
]
|
||||
},
|
||||
"icon_light": {
|
||||
"uri": "https://p3.douyinpic.com/obj/im-resource/old_fans_group_manage_light.png",
|
||||
"url_list": [
|
||||
"https://p3.douyinpic.com/obj/im-resource/old_fans_group_manage_light.png",
|
||||
"https://p6.douyinpic.com/obj/im-resource/old_fans_group_manage_light.png",
|
||||
"https://p9.douyinpic.com/obj/im-resource/old_fans_group_manage_light.png"
|
||||
]
|
||||
},
|
||||
"sub_title": "3个群聊",
|
||||
"title": "粉丝群",
|
||||
"type": 2
|
||||
},
|
||||
{
|
||||
"card_data": "{\"has_yellow_point\":false,\"announcement_release_time\":0,\"preview_video_release_time\":0,\"precipitation_video_release_time\":0,\"style\":0,\"appointment_id\":0,\"typ\":0,\"subscribe_cnt\":0,\"subscribe_status\":0,\"top_title\":\"\",\"top_subtitle\":\"\",\"cycle\":0}",
|
||||
"goto_url": "sslocal://webcast_lynxview?url=https%3A%2F%2Flf-webcast-gr-sourcecdn.bytegecko.com%2Fobj%2Fbyte-gurd-source-gr%2Fwebcast%2Fmono%2Flynx%2Fcommunity_live_dynamic_douyin%2Ftemplate%2Fpages%2Flive_dynamic%2Ftemplate.js%3Fanchor_id%3D73785429445%26sec_anchor_id%3DMS4wLjABAAAAwr4Piy1xyx9h5Yc8JWzo7HoueJ2gjy9a-fHl9OwysTU\u0026web_bg_color=%23161823\u0026status_bar_color=white\u0026type=fullscreen\u0026hide_nav_bar=1\u0026trans_status_bar=1\u0026enable_preload=main\u0026fallback_url=sslocal%3A%2F%2Fwebcast_webview%3Furl%3Dhttps%253A%252F%252Flf-webcast-gr-sourcecdn.bytegecko.com%252Fobj%252Fbyte-gurd-source-gr%252Fwebcast%252Fmono%252Flynx%252Fcommunity_live_dynamic_douyin%252Fweb%252Ftemplate%252Fpages%252Flive_dynamic%252Findex.html%253Fanchor_id%253D73785429445%2526sec_anchor_id%253DMS4wLjABAAAAwr4Piy1xyx9h5Yc8JWzo7HoueJ2gjy9a-fHl9OwysTU%26web_bg_color%3D%2523161823%26status_bar_color%3Dwhite%26type%3Dfullscreen%26hide_nav_bar%3D1%26trans_status_bar%3D1",
|
||||
"icon_dark": {
|
||||
"uri": "obj/eden-cn/91eh7uhfnult/all_cards_old_version/type6_live_dynamic_dark.png",
|
||||
"url_list": [
|
||||
"https://p6-dy-ipv6.byteimg.com/obj/eden-cn/91eh7uhfnult/all_cards_old_version/type6_live_dynamic_dark.png",
|
||||
"https://p3-dy-ipv6.byteimg.com/obj/eden-cn/91eh7uhfnult/all_cards_old_version/type6_live_dynamic_dark.png",
|
||||
"https://p9-dy.byteimg.com/obj/eden-cn/91eh7uhfnult/all_cards_old_version/type6_live_dynamic_dark.png"
|
||||
]
|
||||
},
|
||||
"icon_light": {
|
||||
"uri": "obj/eden-cn/91eh7uhfnult/all_cards_old_version/type6_live_dynamic_light.png",
|
||||
"url_list": [
|
||||
"https://p6-dy-ipv6.byteimg.com/obj/eden-cn/91eh7uhfnult/all_cards_old_version/type6_live_dynamic_light.png",
|
||||
"https://p3-dy-ipv6.byteimg.com/obj/eden-cn/91eh7uhfnult/all_cards_old_version/type6_live_dynamic_light.png",
|
||||
"https://p9-dy.byteimg.com/obj/eden-cn/91eh7uhfnult/all_cards_old_version/type6_live_dynamic_light.png"
|
||||
]
|
||||
},
|
||||
"sub_title": "查看历史记录",
|
||||
"title": "直播动态",
|
||||
"type": 6
|
||||
}
|
||||
],
|
||||
"city": "永州",
|
||||
"close_friend_type": 0,
|
||||
"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": false,
|
||||
"star_atlas": 1
|
||||
},
|
||||
"commerce_user_level": 0,
|
||||
"country": "中国",
|
||||
"cover_and_head_image_info": {
|
||||
"cover_list": null,
|
||||
"profile_cover_list": [
|
||||
{
|
||||
"cover_url": {
|
||||
"uri": "tos-cn-i-0813/1ff05821523b48c282558e7ce5ea380e",
|
||||
"url_list": [
|
||||
"https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-0813/1ff05821523b48c282558e7ce5ea380e?x-expires=1677250800\u0026x-signature=tT4BAtVy%2BORxf%2B%2BLPjj9c7bjc08%3D\u0026from=2480802190",
|
||||
"https://p6-pc-sign.douyinpic.com/obj/tos-cn-i-0813/1ff05821523b48c282558e7ce5ea380e?x-expires=1677250800\u0026x-signature=2B5FqhB1YV2tuz5aXbMduKfWzTs%3D\u0026from=2480802190",
|
||||
"https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-0813/1ff05821523b48c282558e7ce5ea380e?x-expires=1677250800\u0026x-signature=yxEGUOiFl3B2JQO5fxCXw%2BZ2g70%3D\u0026from=2480802190"
|
||||
]
|
||||
},
|
||||
"dark_cover_color": "#FF353c40",
|
||||
"light_cover_color": "#FF353c40"
|
||||
}
|
||||
]
|
||||
},
|
||||
"cover_colour": "#03373EE5",
|
||||
"cover_url": [
|
||||
{
|
||||
"uri": "tos-cn-i-0813/1ff05821523b48c282558e7ce5ea380e",
|
||||
"url_list": [
|
||||
"https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-0813/1ff05821523b48c282558e7ce5ea380e?x-expires=1677250800\u0026x-signature=tT4BAtVy%2BORxf%2B%2BLPjj9c7bjc08%3D\u0026from=2480802190",
|
||||
"https://p6-pc-sign.douyinpic.com/obj/tos-cn-i-0813/1ff05821523b48c282558e7ce5ea380e?x-expires=1677250800\u0026x-signature=2B5FqhB1YV2tuz5aXbMduKfWzTs%3D\u0026from=2480802190",
|
||||
"https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-0813/1ff05821523b48c282558e7ce5ea380e?x-expires=1677250800\u0026x-signature=yxEGUOiFl3B2JQO5fxCXw%2BZ2g70%3D\u0026from=2480802190"
|
||||
]
|
||||
},
|
||||
{
|
||||
"uri": "c8510002be9a3a61aad2",
|
||||
"url_list": [
|
||||
"https://p6-pc-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1677250800\u0026x-signature=aSKWohOsN3YcSdNEFuHttwQHTUo%3D\u0026from=2480802190",
|
||||
"https://p9-pc-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1677250800\u0026x-signature=SN2tjONsQKiPA5pmooY48%2BvkdBs%3D\u0026from=2480802190",
|
||||
"https://p3-pc-sign.douyinpic.com/obj/c8510002be9a3a61aad2?x-expires=1677250800\u0026x-signature=aB3UEiGyz3ag9Xd%2BKFv6kCU%2BAxU%3D\u0026from=2480802190"
|
||||
]
|
||||
}
|
||||
],
|
||||
"custom_verify": "",
|
||||
"district": null,
|
||||
"dongtai_count": 0,
|
||||
"dynamic_cover": {},
|
||||
"enable_wish": false,
|
||||
"enterprise_user_info": "{\"commerce_info\":{\"offline_info_list\":[],\"challenge_list\":null,\"task_list\":null,\"head_image_list\":null,\"smart_phone_list\":null},\"homepage_bottom_toast\":null,\"tab_ceiling_toast\":null,\"limiters\":null,\"attic_info\":null,\"profile_edit_button\":null,\"elite_center\":null,\"enterprise_card_visibility\":false,\"blue_label_edit_jump_url\":\"aweme://webview/?url=https%3A%2F%2Fapi.amemv.com%2Finsights%2Flite%2FcontactSetting%3Fhide_nav_bar%3D1%26title%3D%25E8%2581%2594%25E7%25B3%25BB%25E6%2596%25B9%25E5%25BC%258F%26enter_from%3Dcustomized_tab\u0026hide_nav_bar=1\u0026title=%E8%81%94%E7%B3%BB%E6%96%B9%E5%BC%8F\u0026rn_schema=aweme%3A%2F%2Freactnative%2F%3Fchannel_name%3Drn_patch%26bundle_name%3Dbusiness%26module_name%3Dpage_e_lite_contactSetting%26force_h5%3D1%26hide_nav_bar%3D1%26bundle_url%3D%26title%3D%25E8%2581%2594%25E7%25B3%25BB%25E6%2596%25B9%25E5%25BC%258F%26enter_from%3Dcustomized_tab\"}",
|
||||
"enterprise_verify_reason": "",
|
||||
"favorite_permission": 0,
|
||||
"favoriting_count": 0,
|
||||
"follow_status": 1,
|
||||
"follower_count": 2445127,
|
||||
"follower_request_status": 0,
|
||||
"follower_status": 0,
|
||||
"following_count": 188,
|
||||
"forward_count": 69,
|
||||
"gender": 1,
|
||||
"general_permission": {
|
||||
"following_follower_list_toast": 1
|
||||
},
|
||||
"has_e_account_role": false,
|
||||
"has_subscription": false,
|
||||
"im_primary_role_id": 8,
|
||||
"im_role_ids": [
|
||||
8,
|
||||
19,
|
||||
9
|
||||
],
|
||||
"image_send_exempt": false,
|
||||
"ins_id": "",
|
||||
"ip_location": "IP属地:湖南",
|
||||
"is_activity_user": false,
|
||||
"is_ban": false,
|
||||
"is_block": false,
|
||||
"is_blocked": false,
|
||||
"is_effect_artist": false,
|
||||
"is_gov_media_vip": false,
|
||||
"is_mix_user": true,
|
||||
"is_not_show": false,
|
||||
"is_series_user": false,
|
||||
"is_sharing_profile_user": 0,
|
||||
"is_star": false,
|
||||
"iso_country_code": "CN",
|
||||
"life_story_block": {
|
||||
"life_story_block": false
|
||||
},
|
||||
"live_commerce": false,
|
||||
"live_status": 0,
|
||||
"max_follower_count": 2445127,
|
||||
"message_chat_entry": true,
|
||||
"mix_count": 16,
|
||||
"mplatform_followers_count": 2506113,
|
||||
"new_friend_type": 0,
|
||||
"nickname": "伟哥(动物之声)",
|
||||
"original_musician": {
|
||||
"digg_count": 0,
|
||||
"music_count": 0,
|
||||
"music_used_count": 0
|
||||
},
|
||||
"pigeon_daren_status": "",
|
||||
"pigeon_daren_warn_tag": "",
|
||||
"profile_tab_type": 0,
|
||||
"province": "湖南",
|
||||
"publish_landing_tab": 3,
|
||||
"r_fans_group_info": {},
|
||||
"recommend_reason_relation": "",
|
||||
"recommend_user_reason_source": 0,
|
||||
"risk_notice_text": "",
|
||||
"room_id": 0,
|
||||
"school_name": "中国政法大学",
|
||||
"sec_uid": "MS4wLjABAAAAwr4Piy1xyx9h5Yc8JWzo7HoueJ2gjy9a-fHl9OwysTU",
|
||||
"secret": 0,
|
||||
"series_count": 0,
|
||||
"share_info": {
|
||||
"bool_persist": 1,
|
||||
"share_desc": "长按复制此条消息,打开抖音搜索,查看TA的更多作品。",
|
||||
"share_image_url": {
|
||||
"uri": "tos-cn-p-0015/0582dd4685974943b7553f7920c47be5_1677068689",
|
||||
"url_list": [
|
||||
"https://p6-pc-sign.douyinpic.com/obj/tos-cn-p-0015/0582dd4685974943b7553f7920c47be5_1677068689?x-expires=1677250800\u0026x-signature=N69FD0eoa6nZOCkoTseWQyDlr2c%3D\u0026from=2480802190",
|
||||
"https://p3-pc-sign.douyinpic.com/obj/tos-cn-p-0015/0582dd4685974943b7553f7920c47be5_1677068689?x-expires=1677250800\u0026x-signature=VKbtXyv7E4XWOhUdYKwvWpkPQr8%3D\u0026from=2480802190",
|
||||
"https://p9-pc-sign.douyinpic.com/obj/tos-cn-p-0015/0582dd4685974943b7553f7920c47be5_1677068689?x-expires=1677250800\u0026x-signature=YQSrhvNNPwvDYKNIAbGybUDfEGA%3D\u0026from=2480802190"
|
||||
]
|
||||
},
|
||||
"share_qrcode_url": {
|
||||
"uri": "42da001a6c9915794b93",
|
||||
"url_list": [
|
||||
"https://p3.douyinpic.com/obj/42da001a6c9915794b93",
|
||||
"https://p26.douyinpic.com/obj/42da001a6c9915794b93",
|
||||
"https://p6.douyinpic.com/obj/42da001a6c9915794b93"
|
||||
]
|
||||
},
|
||||
"share_title": "快来加入抖音,让你发现最有趣的我!",
|
||||
"share_url": "www.iesdouyin.com/share/user/MS4wLjABAAAAwr4Piy1xyx9h5Yc8JWzo7HoueJ2gjy9a-fHl9OwysTU?u_code=13kgm680k\u0026did=MS4wLjABAAAABJ_mRs4sEJHvG-sf_h49g7UCwbYtpzHo5DOznrSMhG6eweub_gtwy8cDOYAldLiv\u0026iid=MS4wLjABAAAANwkJuWIRFOzg5uCpDRpMj4OX-QryoDgn-yYlXQnRwQQ\u0026with_sec_did=1\u0026sec_uid=MS4wLjABAAAAwr4Piy1xyx9h5Yc8JWzo7HoueJ2gjy9a-fHl9OwysTU\u0026from_ssr=1",
|
||||
"share_weibo_desc": "长按复制此条消息,打开抖音搜索,查看TA的更多作品。"
|
||||
},
|
||||
"short_id": "0",
|
||||
"show_favorite_list": false,
|
||||
"show_subscription": false,
|
||||
"signature": "请爱护好身边的动物宠物们哦!只在抖音西瓜头条有账号,其他平台均非本人!不接广告。本人视频可任意下载转发编辑。",
|
||||
"signature_display_lines": 0,
|
||||
"signature_language": "zh",
|
||||
"special_follow_status": 0,
|
||||
"sync_to_toutiao": 0,
|
||||
"tab_settings": {
|
||||
"private_tab": {
|
||||
"private_tab_style": 1,
|
||||
"show_private_tab": false
|
||||
}
|
||||
},
|
||||
"total_favorited": 42775612,
|
||||
"total_favorited_correction_threshold": -1,
|
||||
"twitter_id": "",
|
||||
"twitter_name": "",
|
||||
"uid": "73785429445",
|
||||
"unique_id": "xiaoyu22707",
|
||||
"urge_detail": {
|
||||
"user_urged": 0
|
||||
},
|
||||
"user_age": 41,
|
||||
"user_not_see": 0,
|
||||
"user_not_show": 1,
|
||||
"verification_type": 0,
|
||||
"video_cover": {},
|
||||
"video_icon": {
|
||||
"height": 720,
|
||||
"uri": "",
|
||||
"url_list": [],
|
||||
"width": 720
|
||||
},
|
||||
"watch_status": false,
|
||||
"white_cover_url": [
|
||||
{
|
||||
"uri": "tos-cn-i-0813/1ff05821523b48c282558e7ce5ea380e",
|
||||
"url_list": [
|
||||
"https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-0813/1ff05821523b48c282558e7ce5ea380e?x-expires=1677250800\u0026x-signature=tT4BAtVy%2BORxf%2B%2BLPjj9c7bjc08%3D\u0026from=2480802190",
|
||||
"https://p6-pc-sign.douyinpic.com/obj/tos-cn-i-0813/1ff05821523b48c282558e7ce5ea380e?x-expires=1677250800\u0026x-signature=2B5FqhB1YV2tuz5aXbMduKfWzTs%3D\u0026from=2480802190",
|
||||
"https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-0813/1ff05821523b48c282558e7ce5ea380e?x-expires=1677250800\u0026x-signature=yxEGUOiFl3B2JQO5fxCXw%2BZ2g70%3D\u0026from=2480802190"
|
||||
]
|
||||
},
|
||||
{
|
||||
"uri": "318f1000413827e122102",
|
||||
"url_list": [
|
||||
"https://p6-pc-sign.douyinpic.com/obj/318f1000413827e122102?x-expires=1677250800\u0026x-signature=hAHznbrHUDBWy3UJuU%2FIHGgVCCU%3D\u0026from=2480802190",
|
||||
"https://p9-pc-sign.douyinpic.com/obj/318f1000413827e122102?x-expires=1677250800\u0026x-signature=qpCkHogzhoVxIwezDfN5t2FkG3Q%3D\u0026from=2480802190",
|
||||
"https://p3-pc-sign.douyinpic.com/obj/318f1000413827e122102?x-expires=1677250800\u0026x-signature=eRLwT5DOpXyUqOpwu4ArZB3EZ%2Bo%3D\u0026from=2480802190"
|
||||
]
|
||||
}
|
||||
],
|
||||
"with_commerce_enterprise_tab_entry": false,
|
||||
"with_commerce_entry": false,
|
||||
"with_fusion_shop_entry": false,
|
||||
"with_new_goods": false,
|
||||
"youtube_channel_id": "",
|
||||
"youtube_channel_title": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -1,684 +0,0 @@
|
||||
<template>
|
||||
<div id="UserPanel">
|
||||
<div class="scroll"
|
||||
ref="scroll"
|
||||
@touchstart="touchStart($event)"
|
||||
@touchmove="touchMove($event)"
|
||||
@touchend="touchEnd($event)">
|
||||
<div ref="desc" class="desc">
|
||||
<header ref="header"
|
||||
:style='{backgroundImage: `url(${state.localAuthor.cover})`}'
|
||||
@click="state.previewImg = state.localAuthor.cover"></header>
|
||||
<div class="detail">
|
||||
<div class="detail-wrapper">
|
||||
<div class="head">
|
||||
<img v-lazy="Utils.$imgPreview(state.localAuthor.avatar)" class="head-image"
|
||||
@click="state.previewImg = state.localAuthor.avatar">
|
||||
<div class="heat">
|
||||
<div class="text">
|
||||
<span>获赞</span>
|
||||
<span class="num">{{ Utils.formatNumber(state.localAuthor.aweme_count) }}</span>
|
||||
</div>
|
||||
<div class="text">
|
||||
<span>关注</span>
|
||||
<span class="num">{{ state.localAuthor.following_count }}</span>
|
||||
</div>
|
||||
<div class="text">
|
||||
<span>粉丝</span>
|
||||
<span class="num">{{ Utils.formatNumber(state.localAuthor.follower_count) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="description">
|
||||
<p class="name f22 mt1r mb1r">{{ state.localAuthor.nickname }}</p>
|
||||
<div class="certification" v-if="state.localAuthor.certification ">
|
||||
<img src="../../assets/img/icon/me/certification.webp">
|
||||
{{ state.localAuthor.certification }}
|
||||
</div>
|
||||
<div class="number" v-else>
|
||||
<span>抖音号:{{ state.localAuthor.unique_id }}</span>
|
||||
<img src="../../assets/img/icon/me/copy.png" alt="" @click.stop="copy">
|
||||
</div>
|
||||
<div class="signature f12" v-if="state.localAuthor.desc">
|
||||
<div class="text" v-html="state.localAuthor.desc"></div>
|
||||
</div>
|
||||
<div class="more">
|
||||
<div class="age item" v-if="state.localAuthor.birthday">
|
||||
<img v-if="state.localAuthor.sex === '0'" src="../../assets/img/icon/me/woman.png" alt="">
|
||||
<img v-if="state.localAuthor.sex === '1'" src="../../assets/img/icon/me/man.png" alt="">
|
||||
<span>{{ filterAge(state.localAuthor.birthday) }}岁</span>
|
||||
</div>
|
||||
<div class="item" v-if="state.localAuthor.province || state.localAuthor.city">
|
||||
{{ state.localAuthor.province }}
|
||||
<template v-if="state.localAuthor.province && state.localAuthor.city">
|
||||
-
|
||||
</template>
|
||||
{{ state.localAuthor.city }}
|
||||
</div>
|
||||
<div class="item" v-if="state.localAuthor.school?.name">
|
||||
{{ state.localAuthor.school?.name }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="other">
|
||||
<div class="item">
|
||||
<img src="../../assets/img/icon/me/shopping-cart-white.png" alt="">
|
||||
<div class="right">
|
||||
<div class="top">抖音商城</div>
|
||||
<div class="bottom">发现超值好物</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<img src="../../assets/img/icon/me/music-white.png" alt="">
|
||||
<div class="right">
|
||||
<div class="top">我的音乐</div>
|
||||
<div class="bottom">已收藏20首</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="my-buttons">
|
||||
<div class="follow-display">
|
||||
<div class="follow-wrapper" :class="state.localAuthor.is_follow ? 'follow-wrapper-followed' : ''">
|
||||
<div class="no-follow" @click="state.localAuthor.is_follow = true">
|
||||
<img src="../../assets/img/icon/add-white.png" alt="">
|
||||
<span>关注</span>
|
||||
</div>
|
||||
<div class="followed">
|
||||
<div class="l-button" @click="$emit('showFollowSetting2')">
|
||||
<span>已关注</span>
|
||||
<img src="../../assets/img/icon/arrow-up-white.png" alt="">
|
||||
</div>
|
||||
<div class="l-button" @click="$nav('/message/chat')">
|
||||
<span>私信</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="option"
|
||||
:class="state.isShowRecommend?'option-recommend':''"
|
||||
@click="toggleRecommend">
|
||||
<img v-if="loadings.showRecommend" class="loading" src="../../assets/img/icon/loading-gray.png" alt="">
|
||||
<img v-else class="arrow" src="../../assets/img/icon/arrow-up-white.png" alt="">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="recommend" :class="{hidden:!state.isShowRecommend}">
|
||||
<div class="title">
|
||||
<div class="left">
|
||||
<span>你可能感兴趣</span>
|
||||
<img src="../../assets/img/icon/about-gray.png">
|
||||
</div>
|
||||
<div class="right" @click="$nav('/people/find-acquaintance')">
|
||||
<span>查看更多</span>
|
||||
<dy-back direction="right"></dy-back>
|
||||
</div>
|
||||
</div>
|
||||
<div class="friends"
|
||||
@touchstart="friendsTouchStart"
|
||||
@touchend="friendsTouchEnd">
|
||||
<div class="friend" v-for="item in state.friends.all">
|
||||
<img :style="item.select?'opacity: .5;':''" class="avatar" :src="$imgPreview(item.avatar)" alt="">
|
||||
<span class="name">{{ item.name }}</span>
|
||||
<span class="tips">可能感兴趣的人</span>
|
||||
<dy-button type="primary">关注</dy-button>
|
||||
<div class="close">
|
||||
<dy-back img="close" scale=".6"></dy-back>
|
||||
</div>
|
||||
</div>
|
||||
<div class="more" @click="$nav('/people/find-acquaintance')">
|
||||
<div class="notice">
|
||||
<div>点击查看</div>
|
||||
<div>更多好友</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {nextTick, reactive} from "vue";
|
||||
import Utils from "@/utils";
|
||||
import {useNav} from "@/utils/hooks/useNav";
|
||||
|
||||
const $nav = useNav()
|
||||
const props = defineProps({
|
||||
author: {
|
||||
type: Object,
|
||||
default: {}
|
||||
},
|
||||
isOnThisPage: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
})
|
||||
const state = reactive({
|
||||
isShowRecommend: false,//是否显示推荐
|
||||
isLoadRecommendFriends: false,//是否已经加载了显示推荐,直接判断friends.all数据长度的话,没有一开始的加载动画
|
||||
previewImg: '',
|
||||
contentIndex: 0,
|
||||
baseActiveIndex: 0,
|
||||
tabContents: [],
|
||||
floatFixed: false,
|
||||
floatShowName: false,
|
||||
isScroll: false,
|
||||
isMoreFunction: 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: 46,
|
||||
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: {
|
||||
loading0: false,
|
||||
loading1: false,
|
||||
loading2: false,
|
||||
loading3: false,
|
||||
showRecommend: false
|
||||
},
|
||||
tempScroll: false,
|
||||
acceleration: 1.2,
|
||||
sprint: 15,
|
||||
canScroll: true,
|
||||
localAuthor: {}
|
||||
})
|
||||
|
||||
function back() {
|
||||
if (this.$route.path === '/me/uploader') {
|
||||
this.$back()
|
||||
} else {
|
||||
this.$emit('back')
|
||||
}
|
||||
}
|
||||
|
||||
function copy() {
|
||||
const input = document.createElement('input');
|
||||
input.setAttribute('readonly', 'readonly');
|
||||
input.setAttribute('value', state.localAuthor.unique_id);
|
||||
document.body.appendChild(input);
|
||||
input.setSelectionRange(0, 9999);
|
||||
if (document.execCommand('copy')) {
|
||||
document.execCommand('copy');
|
||||
this.$notice('已复制')
|
||||
}
|
||||
document.body.removeChild(input);
|
||||
}
|
||||
|
||||
function cancelFollow() {
|
||||
state.localAuthor.is_follow = false
|
||||
}
|
||||
|
||||
function changeIndicatorIndex(index) {
|
||||
this.$refs.Indicator.changeIndex(index)
|
||||
}
|
||||
|
||||
async function getAuthor() {
|
||||
this.changeIndex(0, null)
|
||||
let res = await this.$api.user.author({id: this.author.id})
|
||||
// let res = await this.$api.user.author({id: '54884802577'})
|
||||
if (res.code === this.SUCCESS) {
|
||||
state.localAuthor = {...state.localAuthor, ...res.data}
|
||||
this.refreshDescHeight()
|
||||
}
|
||||
}
|
||||
|
||||
function toggleRecommend() {
|
||||
if (this.isLoadRecommendFriends) {
|
||||
state.isShowRecommend = !state.isShowRecommend
|
||||
this.refreshDescHeight()
|
||||
} else {
|
||||
this.loadings.showRecommend = true
|
||||
setTimeout(() => {
|
||||
this.loadings.showRecommend = false
|
||||
this.isLoadRecommendFriends = true
|
||||
state.isShowRecommend = !state.isShowRecommend
|
||||
this.refreshDescHeight()
|
||||
}, 1000)
|
||||
}
|
||||
}
|
||||
|
||||
function refreshDescHeight() {
|
||||
//这里nextTick不生效
|
||||
setTimeout(() => {
|
||||
let desc = $('.desc')
|
||||
this.refs.descHeight = desc.height()
|
||||
this.initSlideHeight = this.bodyHeight - 50 - this.refs.descHeight
|
||||
this.canTransformY = this.refs.descHeight - this.floatHeight
|
||||
}, 300)
|
||||
}
|
||||
|
||||
function friendsTouchStart() {
|
||||
this.$emit('toggleCanMove', false)
|
||||
}
|
||||
|
||||
function friendsTouchEnd() {
|
||||
this.$emit('toggleCanMove', true)
|
||||
}
|
||||
|
||||
function followButton() {
|
||||
if (state.localAuthor.is_follow) {
|
||||
this.$nav('/message/chat')
|
||||
} else {
|
||||
state.localAuthor.is_follow = true
|
||||
}
|
||||
}
|
||||
|
||||
function setLoadingFalse() {
|
||||
this.loadings.loading0 = false
|
||||
this.loadings.loading1 = false
|
||||
this.loadings.loading2 = false
|
||||
this.loadings.loading3 = false
|
||||
}
|
||||
|
||||
function click(e) {
|
||||
if (this.baseActiveIndex === 0) return
|
||||
if (this.baseActiveIndex === 1) {
|
||||
this.baseActiveIndex = 0
|
||||
this.$stopPropagation(e)
|
||||
}
|
||||
}
|
||||
|
||||
async function getScrollAreaHeight(index = this.contentIndex) {
|
||||
let scrollAreaHeight = 0
|
||||
if (index === 3) {
|
||||
await nextTick(async () => {
|
||||
scrollAreaHeight = this.$refs.collect.clientHeight + 60 + 40
|
||||
})
|
||||
} else {
|
||||
scrollAreaHeight = Math.ceil(this.videos[Object.keys(this.videos)[index]].list.length / 3) * this.videoItemHeight
|
||||
switch (index) {
|
||||
case 0:
|
||||
scrollAreaHeight += 60
|
||||
break
|
||||
case 1:
|
||||
scrollAreaHeight += 60 + state.localAuthor.is_private === 1 ? 0 : 40
|
||||
break
|
||||
case 2:
|
||||
scrollAreaHeight += 60 + 40
|
||||
break
|
||||
}
|
||||
}
|
||||
return scrollAreaHeight
|
||||
}
|
||||
|
||||
async function changeIndex(newVal, oldVal) {
|
||||
// debugger
|
||||
if (this.loadings['loading' + newVal]) return
|
||||
let videoOb = this.videos[Object.keys(this.videos)[newVal]]
|
||||
if (newVal === 3) {
|
||||
if (videoOb.video.total === -1) {
|
||||
this.loadings['loading' + newVal] = true
|
||||
let res = await this.$api.videos.collect({pageNo: this.videos.collect.pageNo, pageSize: this.pageSize,})
|
||||
if (res.code === this.SUCCESS) this.videos.collect = res.data
|
||||
}
|
||||
} else {
|
||||
if (videoOb.total === -1) {
|
||||
this.loadings['loading' + newVal] = true
|
||||
let res
|
||||
switch (newVal) {
|
||||
case 0:
|
||||
res = await this.$api.videos.my({pageNo: this.videos.my.pageNo, pageSize: this.pageSize,})
|
||||
if (res.code === this.SUCCESS) this.videos.my = res.data
|
||||
break
|
||||
case 1:
|
||||
res = await this.$api.videos.private({pageNo: this.videos.private.pageNo, pageSize: this.pageSize,})
|
||||
if (res.code === this.SUCCESS) this.videos.private = res.data
|
||||
break
|
||||
case 2:
|
||||
res = await this.$api.videos.like({pageNo: this.videos.like.pageNo, pageSize: this.pageSize,})
|
||||
if (res.code === this.SUCCESS) this.videos.like = res.data
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
this.setLoadingFalse()
|
||||
|
||||
let scrollAreaHeight = await this.getScrollAreaHeight(newVal)
|
||||
|
||||
if (oldVal !== null) {
|
||||
let transformY = this.getTransform(this.$refs.scroll)
|
||||
let screenSlideHeight = this.initSlideHeight + Math.abs(transformY)
|
||||
if (this.isScroll) {
|
||||
this.refs.videoSlideHeight = this.refs.maxSlideHeight
|
||||
} else {
|
||||
if (scrollAreaHeight > screenSlideHeight) {
|
||||
this.refs.videoSlideHeight = this.refs.maxSlideHeight
|
||||
} else {
|
||||
this.refs.videoSlideHeight = screenSlideHeight
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (scrollAreaHeight < this.refs.maxSlideHeight) {
|
||||
this.refs.videoSlideHeight = scrollAreaHeight
|
||||
} else {
|
||||
this.refs.videoSlideHeight = this.refs.maxSlideHeight
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function loadMoreData() {
|
||||
if (this.loadings['loading' + this.contentIndex]) return
|
||||
console.log('到底了')
|
||||
let videoOb = this.videos[Object.keys(this.videos)[this.contentIndex]]
|
||||
if (videoOb.total > videoOb.list.length) {
|
||||
videoOb.pageNo++
|
||||
this.loadings['loading' + this.contentIndex] = true
|
||||
let res
|
||||
switch (this.contentIndex) {
|
||||
case 0:
|
||||
res = await this.$api.videos.my({pageNo: videoOb.pageNo, pageSize: this.pageSize,})
|
||||
break
|
||||
case 1:
|
||||
res = await this.$api.videos.private({pageNo: videoOb.pageNo, pageSize: this.pageSize,})
|
||||
break
|
||||
case 2:
|
||||
res = await this.$api.videos.like({pageNo: videoOb.pageNo, pageSize: this.pageSize,})
|
||||
break
|
||||
case 3:
|
||||
res = await this.$api.videos.collect({pageNo: videoOb.pageNo, pageSize: this.pageSize,})
|
||||
break
|
||||
}
|
||||
this.loadings['loading' + this.contentIndex] = false
|
||||
if (res.code === this.SUCCESS) {
|
||||
videoOb.list = videoOb.list.concat(res.data.list)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function touchStart(e) {
|
||||
this.$refs.scroll.style.transition = 'none'
|
||||
this.fixedLocationY = this.startLocationY = e.touches[0].pageY
|
||||
this.startTime = Date.now()
|
||||
}
|
||||
|
||||
function move(e) {
|
||||
// (!this.isScroll) && e.preventDefault();
|
||||
}
|
||||
|
||||
async function scroll() {
|
||||
if (this.isScroll) {
|
||||
let SlideItems = document.querySelectorAll('.SlideItem')
|
||||
let SlideItem = SlideItems[this.contentIndex]
|
||||
if (SlideItem.scrollHeight - SlideItem.clientHeight < SlideItem.scrollTop + 60) {
|
||||
this.loadMoreData()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function touchMove(e) {
|
||||
if (!this.canScroll) return
|
||||
let moveDistance = e.touches[0].pageY - this.startLocationY
|
||||
let pageMoveDistance = this.lastMoveYDistance + moveDistance * this.acceleration
|
||||
// console.log('move-pageMoveDistance', pageMoveDistance)
|
||||
// console.log('move-moveDistance', moveDistance)
|
||||
//手指往上划,是负
|
||||
|
||||
if (this.isScroll) {
|
||||
let SlideItems = document.querySelectorAll('.SlideItem')
|
||||
let SlideItem = SlideItems[this.contentIndex]
|
||||
if (SlideItem.scrollTop === 0) {
|
||||
this.tempScroll = this.isScroll = false
|
||||
this.startLocationY = e.touches[0].pageY
|
||||
this.lastMoveYDistance = -this.canTransformY
|
||||
}
|
||||
} else {
|
||||
//手指往下划,页面向上动
|
||||
if (moveDistance > 0) {
|
||||
if (pageMoveDistance > 0) {
|
||||
this.$refs.scroll.style.transform = `translate3d(0,0,0)`
|
||||
if (pageMoveDistance < 400) {
|
||||
this.refs.header.style.transition = 'all 0s'
|
||||
this.refs.header.style.height = this.refs.headerHeight + (pageMoveDistance / 2) + 'px'
|
||||
}
|
||||
} else {
|
||||
let scrollAreaHeight = await this.getScrollAreaHeight()
|
||||
//如果可滚动区的高度大于posterHeight,并且移动超过30,就直接滚到顶
|
||||
if (this.refs.videoSlideHeight > scrollAreaHeight && Math.abs(moveDistance) > 20) {
|
||||
this.$refs.scroll.style.transition = 'all .2s'
|
||||
this.$refs.scroll.style.transform = `translate3d(0,0,0)`
|
||||
let SlideItems = document.querySelectorAll('.SlideItem')
|
||||
SlideItems.forEach(SlideItem => {
|
||||
SlideItem.scrollTop = 0
|
||||
})
|
||||
this.floatShowName = this.floatFixed = this.isScroll = false
|
||||
this.lastMoveYDistance = 0
|
||||
this.startLocationY = e.touches[0].pageY
|
||||
this.changeIndex(this.contentIndex, this.contentIndex)
|
||||
return;
|
||||
}
|
||||
if (Math.abs(pageMoveDistance) < this.canTransformY) {
|
||||
let SlideItems = document.querySelectorAll('.SlideItem')
|
||||
SlideItems.forEach(SlideItem => {
|
||||
SlideItem.scrollTop = 0
|
||||
})
|
||||
this.tempScroll = false
|
||||
}
|
||||
this.floatFixed = Math.abs(pageMoveDistance) > 100
|
||||
this.floatShowName = Math.abs(pageMoveDistance) > 150
|
||||
this.$refs.scroll.style.transform = `translate3d(0,${pageMoveDistance}px,0)`
|
||||
}
|
||||
} else {
|
||||
//手指往上划,页面向下动
|
||||
if (Math.abs(pageMoveDistance) < this.canTransformY) {
|
||||
|
||||
if (this.refs.videoSlideHeight < this.refs.maxSlideHeight) {
|
||||
let endTransformY = Math.abs(this.canTransformY) - (this.refs.maxSlideHeight - this.refs.videoSlideHeight)
|
||||
let moveTransformY = Math.abs(pageMoveDistance) < Math.abs(endTransformY) ? pageMoveDistance : -endTransformY
|
||||
this.$refs.scroll.style.transform = `translate3d(0,${moveTransformY}px,0)`
|
||||
|
||||
this.startLocationY = e.touches[0].pageY
|
||||
this.lastMoveYDistance = moveTransformY
|
||||
|
||||
this.floatFixed = Math.abs(moveTransformY) > 100
|
||||
this.floatShowName = Math.abs(moveTransformY) > 150
|
||||
} else {
|
||||
this.floatFixed = Math.abs(pageMoveDistance) > 100
|
||||
this.floatShowName = Math.abs(pageMoveDistance) > 150
|
||||
this.$refs.scroll.style.transform = `translate3d(0,${pageMoveDistance}px,0)`
|
||||
}
|
||||
} else {
|
||||
this.refs.header.style.height = this.refs.headerHeight + 'px'
|
||||
this.$refs.scroll.style.transform = `translate3d(0,${-this.canTransformY}px,0)`
|
||||
let SlideItems = document.querySelectorAll('.SlideItem')
|
||||
let SlideItem = SlideItems[this.contentIndex]
|
||||
|
||||
if (!this.isScroll) {
|
||||
this.tempScroll = true
|
||||
SlideItem.scrollTop = Math.abs(pageMoveDistance) - this.refs.descHeight + this.floatHeight
|
||||
}
|
||||
if (SlideItem.scrollHeight - SlideItem.clientHeight < SlideItem.scrollTop + 60) {
|
||||
this.loadMoreData()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function touchEnd(e) {
|
||||
if (!this.canScroll) return
|
||||
let moveDistance = e.changedTouches[0].pageY - this.startLocationY
|
||||
let pageMoveDistance = this.lastMoveYDistance + moveDistance * this.acceleration
|
||||
|
||||
// console.log('end-pageMoveDistance', pageMoveDistance)
|
||||
// console.log('end-moveDistance', moveDistance)
|
||||
|
||||
if (this.isScroll) {
|
||||
this.tempScroll = false
|
||||
this.lastMoveYDistance = -this.canTransformY
|
||||
} else {
|
||||
let endTime = Date.now()
|
||||
let gapTime = endTime - this.startTime
|
||||
|
||||
// console.log('end-gapTime', gapTime)
|
||||
let endTransformY = Math.abs(this.canTransformY) - (this.refs.maxSlideHeight - this.refs.videoSlideHeight)
|
||||
|
||||
|
||||
//手指往下划,页面向上动
|
||||
if (moveDistance >= 0) {
|
||||
if (pageMoveDistance > 0) {
|
||||
this.refs.header.style.transition = 'all .3s'
|
||||
this.refs.header.style.height = this.refs.headerHeight + 'px'
|
||||
this.lastMoveYDistance = 0
|
||||
this.floatShowName = this.floatFixed = this.isScroll = this.tempScroll = false
|
||||
} else {
|
||||
//猛的划一下
|
||||
if ((Math.abs(moveDistance) > 100) && gapTime > 100 && gapTime < 150) {
|
||||
this.floatShowName = this.floatFixed = this.isScroll = false
|
||||
|
||||
//用cancelAnimationFrame快速滚动到顶部,要比transition = 'all .3s'快
|
||||
this.$refs.scroll.style.transition = 'none'
|
||||
let transformY = this.getTransform(this.$refs.scroll)
|
||||
//当前的transformY
|
||||
// console.log('transformY', transformY)
|
||||
let timer
|
||||
cancelAnimationFrame(timer);
|
||||
let fn = () => {
|
||||
//说明没到顶
|
||||
if (transformY < 0) {
|
||||
transformY = transformY + 40
|
||||
this.$refs.scroll.style.transform = `translate3d(0,${transformY > 0 ? 0 : transformY}px,0)`
|
||||
timer = requestAnimationFrame(fn);
|
||||
} else {
|
||||
//transformY === 0说明,本来就在顶部,然后猛的一划,这里要判断下
|
||||
if (transformY !== 0) {
|
||||
if (this.$getCss(this.refs.header, 'height') < 400) {
|
||||
this.refs.header.style.transition = 'none'
|
||||
this.refs.header.style.height = this.$getCss(this.refs.header, 'height') + 10 + 'px'
|
||||
timer = requestAnimationFrame(fn);
|
||||
} else {
|
||||
this.refs.header.style.transition = 'all .6s'
|
||||
this.refs.header.style.height = this.refs.headerHeight + 'px'
|
||||
this.lastMoveYDistance = 0
|
||||
cancelAnimationFrame(timer);
|
||||
}
|
||||
} else {
|
||||
//快速动画结束
|
||||
this.lastMoveYDistance = 0
|
||||
cancelAnimationFrame(timer);
|
||||
}
|
||||
}
|
||||
}
|
||||
timer = requestAnimationFrame(fn);
|
||||
|
||||
} else if ((Math.abs(moveDistance) > 100) && gapTime > 150 && gapTime < 300) {
|
||||
// //用cancelAnimationFrame快速滚动到顶部,要比transition = 'all .3s'快
|
||||
this.$refs.scroll.style.transition = 'all .3s'
|
||||
this.$refs.scroll.style.transform = `translate3d(0,0,0)`
|
||||
this.lastMoveYDistance = 0
|
||||
this.floatShowName = this.floatFixed = this.isScroll = false
|
||||
let SlideItems = document.querySelectorAll('.SlideItem')
|
||||
SlideItems.forEach(SlideItem => {
|
||||
SlideItem.scrollTop = 0
|
||||
})
|
||||
this.tempScroll = this.isScroll = false
|
||||
} else {
|
||||
this.lastMoveYDistance = pageMoveDistance
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ((Math.abs(moveDistance) > 100) && gapTime < 250) {
|
||||
//往下划
|
||||
this.$refs.scroll.style.transition = 'all .3s'
|
||||
if (this.refs.videoSlideHeight < this.refs.maxSlideHeight) {
|
||||
this.$refs.scroll.style.transform = `translate3d(0,${-endTransformY}px,0)`
|
||||
// this.floatShowName = this.floatFixed = true
|
||||
this.floatFixed = Math.abs(endTransformY) > 100
|
||||
this.floatShowName = Math.abs(endTransformY) > 150
|
||||
this.lastMoveYDistance = -endTransformY
|
||||
} else {
|
||||
this.$refs.scroll.style.transform = `translate3d(0,${-this.canTransformY}px,0)`
|
||||
this.floatShowName = this.floatFixed = this.isScroll = true
|
||||
this.tempScroll = false
|
||||
this.lastMoveYDistance = -this.canTransformY
|
||||
}
|
||||
} else {
|
||||
//手指往上划,页面向下动
|
||||
if (Math.abs(pageMoveDistance) < this.canTransformY) {
|
||||
if (this.refs.videoSlideHeight < this.refs.maxSlideHeight) {
|
||||
this.lastMoveYDistance = Math.abs(pageMoveDistance) < Math.abs(endTransformY) ? pageMoveDistance : -endTransformY
|
||||
} else {
|
||||
let endDistance = pageMoveDistance
|
||||
if (Math.abs(moveDistance) > 20) {
|
||||
if (moveDistance > 0) {
|
||||
endDistance += this.sprint
|
||||
} else {
|
||||
endDistance -= this.sprint
|
||||
}
|
||||
}
|
||||
this.lastMoveYDistance = endDistance
|
||||
this.$refs.scroll.style.transition = 'all .3s'
|
||||
this.$refs.scroll.style.transform = `translate3d(0,${endDistance}px,0)`
|
||||
}
|
||||
} else {
|
||||
this.isScroll = true
|
||||
this.tempScroll = false
|
||||
this.lastMoveYDistance = -this.canTransformY
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getTransform(el) {
|
||||
let transform = el.style.transform
|
||||
if (!transform) return 0
|
||||
// console.log('transform',transform)
|
||||
let transformY = transform.substring(transform.indexOf('0px') + 5, transform.lastIndexOf('0px') - 4)
|
||||
// console.log('transformY',transformY)
|
||||
//当前的transformY
|
||||
transformY = parseInt(transformY)
|
||||
return transformY
|
||||
}
|
||||
|
||||
function filterAge(age) {
|
||||
if (!age) return
|
||||
let date = new Date(age)
|
||||
return new Date().getFullYear() - date.getFullYear()
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
.UserPanel {
|
||||
|
||||
}
|
||||
</style>
|
||||
@ -2,7 +2,6 @@ import Mock from 'mockjs'
|
||||
import globalMethods from '../utils'
|
||||
import resource from "../assets/data/resource.js";
|
||||
import posts6 from "@/assets/data/posts6.json";
|
||||
import users from '@/assets/data/users.json'
|
||||
import {uniqueId} from "lodash-es";
|
||||
|
||||
function getParams(options) {
|
||||
@ -29,7 +28,7 @@ let allRecommendVideos = posts6.map(v => {
|
||||
return v
|
||||
})
|
||||
|
||||
console.log('allRecommendVideos', allRecommendVideos)
|
||||
// console.log('allRecommendVideos', allRecommendVideos)
|
||||
let t = [
|
||||
{
|
||||
type: 'imgs',
|
||||
@ -69,20 +68,27 @@ let t = [
|
||||
// }
|
||||
// },
|
||||
|
||||
// for (let i = 0; i < 50; i++) {
|
||||
// allRecommendVideos = allRecommendVideos.concat(shuffle(resource.videos)
|
||||
// .slice(0, 10)
|
||||
// .map(v => {
|
||||
// v.type = 'recommend-video'
|
||||
// return v
|
||||
// }))
|
||||
// }
|
||||
function initData() {
|
||||
fetch('/data/posts.json').then(r => {
|
||||
r.json().then(v => {
|
||||
allRecommendVideos = allRecommendVideos.concat(v)
|
||||
allRecommendVideos = allRecommendVideos.map(w => {
|
||||
w.type = 'recommend-video'
|
||||
return w
|
||||
})
|
||||
resource.like = allRecommendVideos.slice(0, 15)
|
||||
resource.videos = allRecommendVideos.slice(0, 15)
|
||||
})
|
||||
})
|
||||
|
||||
// fetch('/data/posts.json').then(r => {
|
||||
// r.json().then(v => {
|
||||
// allRecommendVideos = allRecommendVideos.concat(v)
|
||||
// })
|
||||
// })
|
||||
fetch('/data/user-71158770.json').then(r => {
|
||||
r.json().then(v => {
|
||||
resource.my = v
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
setTimeout(initData, 3000)
|
||||
|
||||
Mock.mock(/recommended/, options => {
|
||||
// console.log('recommended', allRecommendVideos.length)
|
||||
@ -98,13 +104,14 @@ Mock.mock(/recommended/, options => {
|
||||
|
||||
Mock.mock(/my/, options => {
|
||||
let page = getPage(options)
|
||||
console.log('mock', page)
|
||||
// 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({
|
||||
@ -113,6 +120,7 @@ Mock.mock(/like/, options => {
|
||||
}, code: 200, msg: '',
|
||||
})
|
||||
})
|
||||
|
||||
Mock.mock(/private1/, options => {
|
||||
let page = getPage(options)
|
||||
return Mock.mock({
|
||||
@ -121,17 +129,22 @@ Mock.mock(/private1/, options => {
|
||||
}, 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,
|
||||
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({
|
||||
@ -141,6 +154,7 @@ Mock.mock(/historyVideo/, options => {
|
||||
}, code: 200, msg: '',
|
||||
})
|
||||
})
|
||||
|
||||
Mock.mock(/historyOther/, options => {
|
||||
let page = getPage(options)
|
||||
return Mock.mock({
|
||||
@ -149,25 +163,9 @@ Mock.mock(/historyOther/, options => {
|
||||
}, code: 200, msg: '',
|
||||
})
|
||||
})
|
||||
|
||||
Mock.mock(/user\/friends/, options => {
|
||||
return Mock.mock({
|
||||
data: resource.users, code: 200, msg: '',
|
||||
})
|
||||
})
|
||||
|
||||
Mock.mock(/user\/profile\/other/, options => {
|
||||
return Mock.mock({
|
||||
// data: sample(users), code: 200, msg: '',
|
||||
data: {
|
||||
user: users[0].user,
|
||||
post: []
|
||||
}, code: 200, msg: '',
|
||||
})
|
||||
})
|
||||
|
||||
Mock.mock(/aweme\/post/, options => {
|
||||
return Mock.mock({
|
||||
// data: sample(users), code: 200, msg: '',
|
||||
data: [], code: 200, msg: '',
|
||||
})
|
||||
})
|
||||
@ -1,670 +0,0 @@
|
||||
@import "../../assets/less/index";
|
||||
|
||||
.fade1-enter-active,
|
||||
.fade1-leave-active {
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.fade1-enter-from,
|
||||
.fade1-leave-to {
|
||||
transform: translateY(10px);
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.FromBottomDialog {
|
||||
left: inherit;
|
||||
}
|
||||
|
||||
|
||||
#Uploader {
|
||||
position: fixed;
|
||||
background: @main-bg;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
font-size: 14rem;
|
||||
|
||||
.preview-img {
|
||||
z-index: 3;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
top: 0;
|
||||
background: black;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
.resource {
|
||||
width: 100vw;
|
||||
max-height: 100vw;
|
||||
}
|
||||
|
||||
.download {
|
||||
position: absolute;
|
||||
bottom: 20rem;
|
||||
right: 20rem;
|
||||
padding: 3rem;
|
||||
background: @second-btn-color-tran;
|
||||
width: 20rem;
|
||||
}
|
||||
}
|
||||
|
||||
.mask {
|
||||
background: #0000004f;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: calc(var(--vh, 1vh) * 100);
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
.scroll {
|
||||
.notice {
|
||||
font-size: 12rem;
|
||||
height: 40rem;
|
||||
color: @second-text-color;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
img {
|
||||
height: 12rem;
|
||||
margin-right: 5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.collect {
|
||||
padding: 7rem;
|
||||
|
||||
.video {
|
||||
background: @active-main-bg;
|
||||
border-radius: 5rem;
|
||||
padding: 10rem;
|
||||
margin-bottom: 7rem;
|
||||
|
||||
.top {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 10rem;
|
||||
|
||||
.left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
color: gainsboro;
|
||||
|
||||
img {
|
||||
height: 20rem;
|
||||
margin-right: 5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.right {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
color: @second-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
.list {
|
||||
display: grid;
|
||||
grid-template-columns: 33.33% 33.33% 33.33%;
|
||||
|
||||
.item {
|
||||
height: calc(33.33vw * 1.3);
|
||||
padding: 2rem;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
|
||||
.poster {
|
||||
border-radius: 4rem;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.num {
|
||||
color: white;
|
||||
position: absolute;
|
||||
bottom: 5rem;
|
||||
left: 5rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 14rem;
|
||||
|
||||
.love {
|
||||
width: 14rem;
|
||||
height: 14rem;
|
||||
margin-right: 5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.audio {
|
||||
background: @active-main-bg;
|
||||
border-radius: 5rem;
|
||||
padding: 10rem;
|
||||
|
||||
.top {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 10rem;
|
||||
|
||||
.left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
color: gainsboro;
|
||||
|
||||
img {
|
||||
height: 15rem;
|
||||
margin-right: 5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.right {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
color: @second-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
.list {
|
||||
display: grid;
|
||||
grid-template-columns: 33.33% 33.33% 33.33%;
|
||||
|
||||
.item {
|
||||
padding: 2rem;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
|
||||
.poster {
|
||||
border-radius: 4rem;
|
||||
width: 100%;
|
||||
height: calc((100vw - 34rem) / 3);
|
||||
display: block;
|
||||
}
|
||||
|
||||
.title {
|
||||
margin-top: 5rem;
|
||||
color: @second-text-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.float {
|
||||
position: fixed;
|
||||
box-sizing: border-box;
|
||||
width: 100vw;
|
||||
z-index: 2;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
height: 46rem;
|
||||
padding: 0 15rem;
|
||||
background: transparent;
|
||||
transition: all .2s;
|
||||
|
||||
.center {
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
position: absolute;
|
||||
color: white;
|
||||
}
|
||||
|
||||
&.fixed {
|
||||
background: @main-bg;
|
||||
|
||||
img {
|
||||
background: @main-bg !important;
|
||||
}
|
||||
}
|
||||
|
||||
.left {
|
||||
img {
|
||||
transform: rotate(180deg);
|
||||
border-radius: 50%;
|
||||
background: rgba(82, 80, 80, 0.5);
|
||||
padding: 6rem;
|
||||
width: 18rem;
|
||||
}
|
||||
}
|
||||
|
||||
.follow-btn {
|
||||
color: white;
|
||||
position: absolute;
|
||||
font-size: 12rem;
|
||||
padding: 3rem 12rem;
|
||||
border-radius: 2rem;
|
||||
right: 60rem;
|
||||
background: @primary-btn-color;
|
||||
|
||||
&.followed {
|
||||
background: @second-btn-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.right {
|
||||
display: flex;
|
||||
color: white;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
|
||||
.request {
|
||||
font-size: 12rem;
|
||||
height: 26rem;
|
||||
display: flex;
|
||||
padding-right: 13rem;
|
||||
padding-left: 5rem;
|
||||
align-items: center;
|
||||
border-radius: 20rem;
|
||||
background: rgba(82, 80, 80, 0.5);
|
||||
|
||||
img {
|
||||
padding: 6rem;
|
||||
width: 18rem;
|
||||
}
|
||||
}
|
||||
|
||||
.menu {
|
||||
margin-left: 15rem;
|
||||
border-radius: 50%;
|
||||
background: rgba(82, 80, 80, 0.5);
|
||||
padding: 6rem;
|
||||
width: 18rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.desc {
|
||||
header {
|
||||
color: white;
|
||||
height: 120rem;
|
||||
background-image: url('../../assets/img/header-bg.png');
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.detail {
|
||||
transform: translateY(-10rem);
|
||||
background: @main-bg;
|
||||
border-radius: 10rem 10rem 0 0;
|
||||
|
||||
.detail-wrapper {
|
||||
padding: 0 20rem 15rem 20rem;
|
||||
|
||||
.head {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
transform: translateY(-20rem);
|
||||
|
||||
.head-image {
|
||||
background: black;
|
||||
padding: 2px;
|
||||
border-radius: 50%;
|
||||
width: 80rem;
|
||||
height: 80rem;
|
||||
}
|
||||
|
||||
.heat {
|
||||
margin-top: 10rem;
|
||||
width: calc(100% - 120rem);
|
||||
color: @second-text-color;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
|
||||
.num {
|
||||
margin-top: 5rem;
|
||||
color: white;
|
||||
font-size: 16rem;
|
||||
font-weight: bold;
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
.text {
|
||||
font-size: 12rem;
|
||||
margin-right: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.description {
|
||||
font-size: 12rem;
|
||||
color: white;
|
||||
transform: translateY(-20rem);
|
||||
|
||||
.number, .certification {
|
||||
margin-bottom: 10rem;
|
||||
padding-bottom: 10rem;
|
||||
border-bottom: 1px solid @line-color;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
img {
|
||||
width: 14rem;
|
||||
margin-left: 5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.number {
|
||||
color: @second-text-color;
|
||||
|
||||
img {
|
||||
margin-left: 5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.certification {
|
||||
img {
|
||||
width: 14rem;
|
||||
margin-right: 5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.signature {
|
||||
color: white;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 5rem;
|
||||
|
||||
img {
|
||||
height: 12rem;
|
||||
margin-left: 6rem;
|
||||
}
|
||||
|
||||
.text {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
}
|
||||
|
||||
.more {
|
||||
color: @second-text-color;
|
||||
display: flex;
|
||||
|
||||
.item {
|
||||
padding: 2rem 5rem;
|
||||
border-radius: 2rem;
|
||||
background: @second-btn-color-tran;
|
||||
font-size: 10rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-right: 5rem;
|
||||
|
||||
img {
|
||||
height: 10rem;
|
||||
margin-right: 2rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.other {
|
||||
display: flex;
|
||||
margin-bottom: 20rem;
|
||||
|
||||
.item {
|
||||
margin-right: 25rem;
|
||||
display: flex;
|
||||
|
||||
img {
|
||||
margin-right: 8rem;
|
||||
border-radius: 4rem;
|
||||
background: @second-btn-color-tran;
|
||||
padding: 8rem;
|
||||
height: 22rem;
|
||||
}
|
||||
|
||||
.right {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-direction: column;
|
||||
|
||||
.top {
|
||||
color: white;
|
||||
font-size: 14rem;
|
||||
}
|
||||
|
||||
.bottom {
|
||||
color: @second-text-color;
|
||||
font-size: 12rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.my-buttons {
|
||||
margin-top: 20rem;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
@width: 36rem;
|
||||
|
||||
.follow-display {
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
|
||||
.follow-wrapper {
|
||||
width: 200%;
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
transition: all .3s ease;
|
||||
|
||||
&.follow-wrapper-followed {
|
||||
transform: translate3d(-50%, 0, 0);
|
||||
}
|
||||
|
||||
.no-follow {
|
||||
width: calc(100% - 5rem);
|
||||
color: white;
|
||||
border-radius: 2rem;
|
||||
background: @primary-btn-color;
|
||||
height: @width;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-right: 5rem;
|
||||
box-sizing: border-box;
|
||||
|
||||
span {
|
||||
margin-left: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.followed {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
|
||||
.l-button {
|
||||
color: white;
|
||||
border-radius: 2rem;
|
||||
background: @second-btn-color;
|
||||
height: @width;
|
||||
width: 50%;
|
||||
margin-right: 5rem;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
span {
|
||||
margin-left: 2rem;
|
||||
}
|
||||
|
||||
img {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
@width: 14rem;
|
||||
width: @width;
|
||||
height: @width;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.option {
|
||||
position: relative;
|
||||
width: @width;
|
||||
height: @width;
|
||||
font-size: 12rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 2rem;
|
||||
background: @second-btn-color;
|
||||
color: white;
|
||||
|
||||
&.option-recommend {
|
||||
.arrow {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.loading {
|
||||
@width: 12rem;
|
||||
width: @width;
|
||||
height: @width;
|
||||
animation: rotate .6s linear infinite;
|
||||
|
||||
@keyframes rotate {
|
||||
from {
|
||||
transform: rotate(0deg)
|
||||
}
|
||||
to {
|
||||
transform: rotate(360deg)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.arrow {
|
||||
transition: transform .3s ease;
|
||||
transform: rotate(180deg);
|
||||
@width: 16rem;
|
||||
width: @width;
|
||||
height: @width;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.recommend {
|
||||
transition: all .3s ease;
|
||||
height: 220rem;
|
||||
overflow: hidden;
|
||||
|
||||
&.hidden {
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.title {
|
||||
padding: 0 20rem 0 20rem;
|
||||
font-size: 12rem;
|
||||
color: @second-text-color;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
.left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
img {
|
||||
margin-left: 3rem;
|
||||
width: 13rem;
|
||||
height: 13rem;
|
||||
}
|
||||
|
||||
.right {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
|
||||
.friends {
|
||||
padding-left: 20rem;
|
||||
margin-top: 10rem;
|
||||
display: flex;
|
||||
overflow-x: scroll;
|
||||
|
||||
.friend {
|
||||
position: relative;
|
||||
background: @second-btn-color-tran;
|
||||
margin-right: 10rem;
|
||||
padding: 10rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
|
||||
.avatar {
|
||||
@width: 100rem;
|
||||
border-radius: 50%;
|
||||
width: @width;
|
||||
height: @width;
|
||||
}
|
||||
|
||||
.name {
|
||||
margin-top: 10rem;
|
||||
font-size: 12rem;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.tips {
|
||||
margin-top: 5rem;
|
||||
font-size: 12rem;
|
||||
color: @second-text-color;
|
||||
}
|
||||
|
||||
.button {
|
||||
margin-top: 10rem;
|
||||
width: 150rem;
|
||||
height: 26rem;
|
||||
font-size: 12rem;
|
||||
}
|
||||
|
||||
.close {
|
||||
position: absolute;
|
||||
top: 2rem;
|
||||
right: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.more {
|
||||
.notice {
|
||||
width: 100rem;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: @second-text-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,829 +0,0 @@
|
||||
<template>
|
||||
<div id="Uploader">
|
||||
<div ref="float" class="float" :class="floatFixed?'fixed':''">
|
||||
<div class="left" @click="back">
|
||||
<img src="../../assets/img/icon/next.svg" alt="">
|
||||
</div>
|
||||
<transition name="fade">
|
||||
<div class="center" v-if="floatShowName">
|
||||
<p class="name f22 mt1r mb1r">ttentau</p>
|
||||
</div>
|
||||
</transition>
|
||||
<transition name="fade">
|
||||
<div class="follow-btn" :class="{followed:localAuthor.is_follow}" v-if="floatFixed" @click="followButton">
|
||||
{{ localAuthor.is_follow ? '私信' : '关注' }}
|
||||
</div>
|
||||
</transition>
|
||||
<div class="right">
|
||||
<transition name="fade">
|
||||
<div class="request" v-if="!floatFixed">
|
||||
<img @click="$nav('/me/request-update')" src="../../assets/img/icon/me/finger-right.png" alt="">
|
||||
<span>求更新</span>
|
||||
</div>
|
||||
</transition>
|
||||
<img class="menu" src="../../assets/img/icon/more.svg" alt="" @click.stop="$emit('showFollowSetting')">
|
||||
</div>
|
||||
</div>
|
||||
<div class="scroll"
|
||||
ref="scroll"
|
||||
@touchstart="touchStart($event)"
|
||||
@touchmove="touchMove($event)"
|
||||
@touchend="touchEnd($event)">
|
||||
<div ref="desc" class="desc">
|
||||
<header ref="header"
|
||||
:style='{backgroundImage: `url(${localAuthor.cover})`}'
|
||||
@click="previewImg = localAuthor.cover"></header>
|
||||
<div class="detail">
|
||||
<div class="detail-wrapper">
|
||||
<div class="head">
|
||||
<img v-lazy="$imgPreview(localAuthor.avatar)" class="head-image"
|
||||
@click="previewImg = localAuthor.avatar">
|
||||
<div class="heat">
|
||||
<div class="text">
|
||||
<span>获赞</span>
|
||||
<span class="num">{{ formatNumber(localAuthor.aweme_count) }}</span>
|
||||
</div>
|
||||
<div class="text">
|
||||
<span>关注</span>
|
||||
<span class="num">{{ localAuthor.following_count }}</span>
|
||||
</div>
|
||||
<div class="text">
|
||||
<span>粉丝</span>
|
||||
<span class="num">{{ formatNumber(localAuthor.follower_count) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="description">
|
||||
<p class="name f22 mt1r mb1r">{{ localAuthor.nickname }}</p>
|
||||
<div class="certification" v-if="localAuthor.certification ">
|
||||
<img src="../../assets/img/icon/me/certification.webp">
|
||||
{{ localAuthor.certification }}
|
||||
</div>
|
||||
<div class="number" v-else>
|
||||
<span>抖音号:{{ localAuthor.unique_id }}</span>
|
||||
<img src="../../assets/img/icon/me/copy.png" alt="" @click.stop="copy">
|
||||
</div>
|
||||
<div class="signature f12" v-if="localAuthor.desc">
|
||||
<div class="text" v-html="localAuthor.desc"></div>
|
||||
</div>
|
||||
<div class="more">
|
||||
<div class="age item" v-if="localAuthor.birthday">
|
||||
<img v-if="localAuthor.sex === '0'" src="../../assets/img/icon/me/woman.png" alt="">
|
||||
<img v-if="localAuthor.sex === '1'" src="../../assets/img/icon/me/man.png" alt="">
|
||||
<span>{{ filterAge(localAuthor.birthday) }}岁</span>
|
||||
</div>
|
||||
<div class="item" v-if="localAuthor.province || localAuthor.city">
|
||||
{{ localAuthor.province }}
|
||||
<template v-if="localAuthor.province && localAuthor.city">
|
||||
-
|
||||
</template>
|
||||
{{ localAuthor.city }}
|
||||
</div>
|
||||
<div class="item" v-if="localAuthor.school?.name">
|
||||
{{ localAuthor.school?.name }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="other">
|
||||
<div class="item">
|
||||
<img src="../../assets/img/icon/me/shopping-cart-white.png" alt="">
|
||||
<div class="right">
|
||||
<div class="top">抖音商城</div>
|
||||
<div class="bottom">发现超值好物</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<img src="../../assets/img/icon/me/music-white.png" alt="">
|
||||
<div class="right">
|
||||
<div class="top">我的音乐</div>
|
||||
<div class="bottom">已收藏20首</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="my-buttons">
|
||||
<div class="follow-display">
|
||||
<div class="follow-wrapper" :class="localAuthor.is_follow ? 'follow-wrapper-followed' : ''">
|
||||
<div class="no-follow" @click="localAuthor.is_follow = true">
|
||||
<img src="../../assets/img/icon/add-white.png" alt="">
|
||||
<span>关注</span>
|
||||
</div>
|
||||
<div class="followed">
|
||||
<div class="l-button" @click="$emit('showFollowSetting2')">
|
||||
<span>已关注</span>
|
||||
<img src="../../assets/img/icon/arrow-up-white.png" alt="">
|
||||
</div>
|
||||
<div class="l-button" @click="$nav('/message/chat')">
|
||||
<span>私信</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="option"
|
||||
:class="isShowRecommend?'option-recommend':''"
|
||||
@click="toggleRecommend">
|
||||
<img v-if="loadings.showRecommend" class="loading" src="../../assets/img/icon/loading-gray.png" alt="">
|
||||
<img v-else class="arrow" src="../../assets/img/icon/arrow-up-white.png" alt="">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="recommend" :class="{hidden:!isShowRecommend}">
|
||||
<div class="title">
|
||||
<div class="left">
|
||||
<span>你可能感兴趣</span>
|
||||
<img src="../../assets/img/icon/about-gray.png">
|
||||
</div>
|
||||
<div class="right" @click="$nav('/people/find-acquaintance')">
|
||||
<span>查看更多</span>
|
||||
<dy-back direction="right"></dy-back>
|
||||
</div>
|
||||
</div>
|
||||
<div class="friends"
|
||||
@touchstart="friendsTouchStart"
|
||||
@touchend="friendsTouchEnd">
|
||||
<div class="friend" v-for="item in friends.all">
|
||||
<img :style="item.select?'opacity: .5;':''" class="avatar" :src="$imgPreview(item.avatar)" alt="">
|
||||
<span class="name">{{ item.name }}</span>
|
||||
<span class="tips">可能感兴趣的人</span>
|
||||
<dy-button type="primary">关注</dy-button>
|
||||
<div class="close">
|
||||
<dy-back img="close" scale=".6"></dy-back>
|
||||
</div>
|
||||
</div>
|
||||
<div class="more" @click="$nav('/people/find-acquaintance')">
|
||||
<div class="notice">
|
||||
<div>点击查看</div>
|
||||
<div>更多好友</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<Indicator
|
||||
ref="Indicator"
|
||||
name="videoList"
|
||||
tabStyleWidth="50%"
|
||||
:tabRender="tabRender"
|
||||
v-model:active-index="contentIndex">
|
||||
</Indicator>
|
||||
<SlideRowList
|
||||
ref="videoSlideRowList"
|
||||
name="videoList"
|
||||
:style="videoSlideRowListStyle"
|
||||
v-model:active-index="contentIndex">
|
||||
<SlideItem class="SlideItem"
|
||||
@scroll="scroll"
|
||||
:style="SlideItemStyle">
|
||||
<Posters v-if="videos.my.total !== -1" :list="videos.my.list"></Posters>
|
||||
<Loading v-if="loadings.loading0" :is-full-screen="false"></Loading>
|
||||
<no-more v-else/>
|
||||
</SlideItem>
|
||||
<SlideItem class="SlideItem"
|
||||
@scroll="scroll"
|
||||
:style="SlideItemStyle">
|
||||
<div class="notice" v-if="localAuthor.is_private === 1">
|
||||
<img src="../../assets/img/icon/me/lock-gray.png" alt="">
|
||||
<span>喜欢内容不可见</span>
|
||||
</div>
|
||||
<template v-else>
|
||||
<Posters v-if="videos.like.total !== -1" :list="videos.like.list"></Posters>
|
||||
<Loading v-if="loadings.loading2" :is-full-screen="false"></Loading>
|
||||
<no-more v-else/>
|
||||
</template>
|
||||
</SlideItem>
|
||||
</SlideRowList>
|
||||
</div>
|
||||
<transition name="fade">
|
||||
<div class="mask" v-if="baseActiveIndex === 1" @click="baseActiveIndex = 0"></div>
|
||||
</transition>
|
||||
<transition name="fade">
|
||||
<div class="preview-img" v-if="previewImg" @click="previewImg = ''">
|
||||
<img class="resource" :src="previewImg" alt="">
|
||||
<img class="download" src="../../assets/img/icon/components/video/download.png" alt="" @click.stop="$no">
|
||||
</div>
|
||||
</transition>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="jsx">
|
||||
import Posters from '../../components/Posters'
|
||||
import Indicator from '../../components/slide/Indicator'
|
||||
import {nextTick} from 'vue'
|
||||
import {mapState} from "vuex";
|
||||
import bus from "../../utils/bus";
|
||||
import FromBottomDialog from "../../components/dialog/FromBottomDialog";
|
||||
|
||||
export default {
|
||||
name: "Me",
|
||||
components: {FromBottomDialog, Posters, Indicator},
|
||||
props: {
|
||||
author: {
|
||||
type: Object,
|
||||
default: {}
|
||||
},
|
||||
isOnThisPage: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tabRender: () => {
|
||||
return (
|
||||
<div className="tabs" ref="tabs">
|
||||
<div className={this.contentIndex === 0 ? 'active tab' : 'tab'}
|
||||
onClick={e => this.changeIndicatorIndex(0)}
|
||||
style="width:50%">
|
||||
<span>作品 {this.localAuthor.video_count}</span>
|
||||
</div>
|
||||
<div className={this.contentIndex === 1 ? 'active tab' : 'tab'}
|
||||
onClick={e => this.changeIndicatorIndex(1)}
|
||||
style="width:50%">
|
||||
<span>喜欢</span>
|
||||
{
|
||||
this.localAuthor.is_private === 1 &&
|
||||
<img src={new URL('../../assets/img/icon/components/follow/lock.png', import.meta.url).href} alt=""/>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
},
|
||||
isShowRecommend: false,//是否显示推荐
|
||||
isLoadRecommendFriends: false,//是否已经加载了显示推荐,直接判断friends.all数据长度的话,没有一开始的加载动画
|
||||
previewImg: '',
|
||||
contentIndex: 0,
|
||||
baseActiveIndex: 0,
|
||||
tabContents: [],
|
||||
floatFixed: false,
|
||||
floatShowName: false,
|
||||
isScroll: false,
|
||||
isMoreFunction: 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: 46,
|
||||
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: {
|
||||
loading0: false,
|
||||
loading1: false,
|
||||
loading2: false,
|
||||
loading3: false,
|
||||
showRecommend: false
|
||||
},
|
||||
tempScroll: false,
|
||||
acceleration: 1.2,
|
||||
sprint: 15,
|
||||
canScroll: true,
|
||||
localAuthor: {}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState(['friends']),
|
||||
bodyHeight() {
|
||||
return this.$store.state.bodyHeight
|
||||
},
|
||||
bodyWidth() {
|
||||
return this.$store.state.bodyWidth
|
||||
},
|
||||
videoSlideRowListStyle() {
|
||||
return {height: this.refs.videoSlideHeight !== 0 ? this.refs.videoSlideHeight + 'px' : 'calc(var(--vh, 1vh) * 100 - 96rem)'}
|
||||
},
|
||||
SlideItemStyle() {
|
||||
if (this.tempScroll || this.isScroll) return {overflow: 'auto'}
|
||||
return {overflow: 'hidden'}
|
||||
},
|
||||
...mapState({
|
||||
userinfo: 'userinfo',
|
||||
})
|
||||
},
|
||||
watch: {
|
||||
contentIndex(newVal, oldVal) {
|
||||
this.changeIndex(newVal, oldVal)
|
||||
},
|
||||
'author.id'(newVal) {
|
||||
this.localAuthor = this.author
|
||||
console.log('变了', newVal)
|
||||
this.videos = {
|
||||
my: {
|
||||
list: [],
|
||||
childs: -1,
|
||||
pageNo: 0
|
||||
},
|
||||
private: {
|
||||
list: [],
|
||||
childs: -1
|
||||
},
|
||||
like: {
|
||||
list: [],
|
||||
childs: -1
|
||||
},
|
||||
collect: {
|
||||
item: {
|
||||
list: [],
|
||||
childs: -1,
|
||||
},
|
||||
audio: {
|
||||
list: [],
|
||||
childs: -1,
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
isOnThisPage(newVal) {
|
||||
if (newVal) {
|
||||
// this.getAuthor()
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
||||
setTimeout(() => {
|
||||
this.refs.header = this.$refs.header
|
||||
this.refs.headerHeight = this.$refs.header.offsetHeight
|
||||
this.refs.descHeight = this.$refs.desc.offsetHeight
|
||||
this.refs.maxSlideHeight = this.$refs.videoSlideRowList.wrapperHeight
|
||||
this.initSlideHeight = this.bodyHeight - 50 - this.refs.descHeight
|
||||
this.canTransformY = this.refs.descHeight - this.floatHeight
|
||||
// this.getAuthor()
|
||||
})
|
||||
this.videoItemHeight = this.bodyWidth / 3 * 1.2 + 2
|
||||
bus.on('baseSlide-moved', () => this.canScroll = false)
|
||||
bus.on('baseSlide-end', () => this.canScroll = true)
|
||||
},
|
||||
methods: {
|
||||
back() {
|
||||
if (this.$route.path === '/me/uploader') {
|
||||
this.$back()
|
||||
} else {
|
||||
this.$emit('back')
|
||||
}
|
||||
},
|
||||
copy() {
|
||||
const input = document.createElement('input');
|
||||
input.setAttribute('readonly', 'readonly');
|
||||
input.setAttribute('value', this.localAuthor.unique_id);
|
||||
document.body.appendChild(input);
|
||||
input.setSelectionRange(0, 9999);
|
||||
if (document.execCommand('copy')) {
|
||||
document.execCommand('copy');
|
||||
this.$notice('已复制')
|
||||
}
|
||||
document.body.removeChild(input);
|
||||
},
|
||||
cancelFollow() {
|
||||
this.localAuthor.is_follow = false
|
||||
},
|
||||
changeIndicatorIndex(index) {
|
||||
this.$refs.Indicator.changeIndex(index)
|
||||
},
|
||||
async getAuthor() {
|
||||
this.changeIndex(0, null)
|
||||
let res = await this.$api.user.author({id: this.author.id})
|
||||
// let res = await this.$api.user.author({id: '54884802577'})
|
||||
if (res.code === this.SUCCESS) {
|
||||
this.localAuthor = {...this.localAuthor, ...res.data}
|
||||
this.refreshDescHeight()
|
||||
}
|
||||
},
|
||||
toggleRecommend() {
|
||||
if (this.isLoadRecommendFriends) {
|
||||
this.isShowRecommend = !this.isShowRecommend
|
||||
this.refreshDescHeight()
|
||||
} else {
|
||||
this.loadings.showRecommend = true
|
||||
setTimeout(() => {
|
||||
this.loadings.showRecommend = false
|
||||
this.isLoadRecommendFriends = true
|
||||
this.isShowRecommend = !this.isShowRecommend
|
||||
this.refreshDescHeight()
|
||||
}, 1000)
|
||||
}
|
||||
},
|
||||
refreshDescHeight() {
|
||||
//这里nextTick不生效
|
||||
setTimeout(() => {
|
||||
let desc = $('.desc')
|
||||
this.refs.descHeight = desc.height()
|
||||
this.initSlideHeight = this.bodyHeight - 50 - this.refs.descHeight
|
||||
this.canTransformY = this.refs.descHeight - this.floatHeight
|
||||
}, 300)
|
||||
},
|
||||
friendsTouchStart() {
|
||||
this.$emit('toggleCanMove', false)
|
||||
},
|
||||
friendsTouchEnd() {
|
||||
this.$emit('toggleCanMove', true)
|
||||
},
|
||||
followButton() {
|
||||
if (this.localAuthor.is_follow) {
|
||||
this.$nav('/message/chat')
|
||||
} else {
|
||||
this.localAuthor.is_follow = true
|
||||
}
|
||||
},
|
||||
setLoadingFalse() {
|
||||
this.loadings.loading0 = false
|
||||
this.loadings.loading1 = false
|
||||
this.loadings.loading2 = false
|
||||
this.loadings.loading3 = false
|
||||
},
|
||||
click(e) {
|
||||
if (this.baseActiveIndex === 0) return
|
||||
if (this.baseActiveIndex === 1) {
|
||||
this.baseActiveIndex = 0
|
||||
this.$stopPropagation(e)
|
||||
}
|
||||
},
|
||||
async getScrollAreaHeight(index = this.contentIndex) {
|
||||
let scrollAreaHeight = 0
|
||||
if (index === 3) {
|
||||
await nextTick(async () => {
|
||||
scrollAreaHeight = this.$refs.collect.clientHeight + 60 + 40
|
||||
})
|
||||
} else {
|
||||
scrollAreaHeight = Math.ceil(this.videos[Object.keys(this.videos)[index]].list.length / 3) * this.videoItemHeight
|
||||
switch (index) {
|
||||
case 0:
|
||||
scrollAreaHeight += 60
|
||||
break
|
||||
case 1:
|
||||
scrollAreaHeight += 60 + this.localAuthor.is_private === 1 ? 0 : 40
|
||||
break
|
||||
case 2:
|
||||
scrollAreaHeight += 60 + 40
|
||||
break
|
||||
}
|
||||
}
|
||||
return scrollAreaHeight
|
||||
},
|
||||
async changeIndex(newVal, oldVal) {
|
||||
// debugger
|
||||
if (this.loadings['loading' + newVal]) return
|
||||
let videoOb = this.videos[Object.keys(this.videos)[newVal]]
|
||||
if (newVal === 3) {
|
||||
if (videoOb.video.total === -1) {
|
||||
this.loadings['loading' + newVal] = true
|
||||
let res = await this.$api.videos.collect({pageNo: this.videos.collect.pageNo, pageSize: this.pageSize,})
|
||||
if (res.code === this.SUCCESS) this.videos.collect = res.data
|
||||
}
|
||||
} else {
|
||||
if (videoOb.total === -1) {
|
||||
this.loadings['loading' + newVal] = true
|
||||
let res
|
||||
switch (newVal) {
|
||||
case 0:
|
||||
res = await this.$api.videos.my({pageNo: this.videos.my.pageNo, pageSize: this.pageSize,})
|
||||
if (res.code === this.SUCCESS) this.videos.my = res.data
|
||||
break
|
||||
case 1:
|
||||
res = await this.$api.videos.private({pageNo: this.videos.private.pageNo, pageSize: this.pageSize,})
|
||||
if (res.code === this.SUCCESS) this.videos.private = res.data
|
||||
break
|
||||
case 2:
|
||||
res = await this.$api.videos.like({pageNo: this.videos.like.pageNo, pageSize: this.pageSize,})
|
||||
if (res.code === this.SUCCESS) this.videos.like = res.data
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
this.setLoadingFalse()
|
||||
|
||||
let scrollAreaHeight = await this.getScrollAreaHeight(newVal)
|
||||
|
||||
if (oldVal !== null) {
|
||||
let transformY = this.getTransform(this.$refs.scroll)
|
||||
let screenSlideHeight = this.initSlideHeight + Math.abs(transformY)
|
||||
if (this.isScroll) {
|
||||
this.refs.videoSlideHeight = this.refs.maxSlideHeight
|
||||
} else {
|
||||
if (scrollAreaHeight > screenSlideHeight) {
|
||||
this.refs.videoSlideHeight = this.refs.maxSlideHeight
|
||||
} else {
|
||||
this.refs.videoSlideHeight = screenSlideHeight
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (scrollAreaHeight < this.refs.maxSlideHeight) {
|
||||
this.refs.videoSlideHeight = scrollAreaHeight
|
||||
} else {
|
||||
this.refs.videoSlideHeight = this.refs.maxSlideHeight
|
||||
}
|
||||
}
|
||||
},
|
||||
async loadMoreData() {
|
||||
if (this.loadings['loading' + this.contentIndex]) return
|
||||
console.log('到底了')
|
||||
let videoOb = this.videos[Object.keys(this.videos)[this.contentIndex]]
|
||||
if (videoOb.total > videoOb.list.length) {
|
||||
videoOb.pageNo++
|
||||
this.loadings['loading' + this.contentIndex] = true
|
||||
let res
|
||||
switch (this.contentIndex) {
|
||||
case 0:
|
||||
res = await this.$api.videos.my({pageNo: videoOb.pageNo, pageSize: this.pageSize,})
|
||||
break
|
||||
case 1:
|
||||
res = await this.$api.videos.private({pageNo: videoOb.pageNo, pageSize: this.pageSize,})
|
||||
break
|
||||
case 2:
|
||||
res = await this.$api.videos.like({pageNo: videoOb.pageNo, pageSize: this.pageSize,})
|
||||
break
|
||||
case 3:
|
||||
res = await this.$api.videos.collect({pageNo: videoOb.pageNo, pageSize: this.pageSize,})
|
||||
break
|
||||
}
|
||||
this.loadings['loading' + this.contentIndex] = false
|
||||
if (res.code === this.SUCCESS) {
|
||||
videoOb.list = videoOb.list.concat(res.data.list)
|
||||
}
|
||||
}
|
||||
},
|
||||
touchStart(e) {
|
||||
this.$refs.scroll.style.transition = 'none'
|
||||
this.fixedLocationY = this.startLocationY = e.touches[0].pageY
|
||||
this.startTime = Date.now()
|
||||
},
|
||||
move(e) {
|
||||
// (!this.isScroll) && e.preventDefault();
|
||||
},
|
||||
async scroll() {
|
||||
if (this.isScroll) {
|
||||
let SlideItems = document.querySelectorAll('.SlideItem')
|
||||
let SlideItem = SlideItems[this.contentIndex]
|
||||
if (SlideItem.scrollHeight - SlideItem.clientHeight < SlideItem.scrollTop + 60) {
|
||||
this.loadMoreData()
|
||||
}
|
||||
}
|
||||
},
|
||||
async touchMove(e) {
|
||||
if (!this.canScroll) return
|
||||
let moveDistance = e.touches[0].pageY - this.startLocationY
|
||||
let pageMoveDistance = this.lastMoveYDistance + moveDistance * this.acceleration
|
||||
// console.log('move-pageMoveDistance', pageMoveDistance)
|
||||
// console.log('move-moveDistance', moveDistance)
|
||||
//手指往上划,是负
|
||||
|
||||
if (this.isScroll) {
|
||||
let SlideItems = document.querySelectorAll('.SlideItem')
|
||||
let SlideItem = SlideItems[this.contentIndex]
|
||||
if (SlideItem.scrollTop === 0) {
|
||||
this.tempScroll = this.isScroll = false
|
||||
this.startLocationY = e.touches[0].pageY
|
||||
this.lastMoveYDistance = -this.canTransformY
|
||||
}
|
||||
} else {
|
||||
//手指往下划,页面向上动
|
||||
if (moveDistance > 0) {
|
||||
if (pageMoveDistance > 0) {
|
||||
this.$refs.scroll.style.transform = `translate3d(0,0,0)`
|
||||
if (pageMoveDistance < 400) {
|
||||
this.refs.header.style.transition = 'all 0s'
|
||||
this.refs.header.style.height = this.refs.headerHeight + (pageMoveDistance / 2) + 'px'
|
||||
}
|
||||
} else {
|
||||
let scrollAreaHeight = await this.getScrollAreaHeight()
|
||||
//如果可滚动区的高度大于posterHeight,并且移动超过30,就直接滚到顶
|
||||
if (this.refs.videoSlideHeight > scrollAreaHeight && Math.abs(moveDistance) > 20) {
|
||||
this.$refs.scroll.style.transition = 'all .2s'
|
||||
this.$refs.scroll.style.transform = `translate3d(0,0,0)`
|
||||
let SlideItems = document.querySelectorAll('.SlideItem')
|
||||
SlideItems.forEach(SlideItem => {
|
||||
SlideItem.scrollTop = 0
|
||||
})
|
||||
this.floatShowName = this.floatFixed = this.isScroll = false
|
||||
this.lastMoveYDistance = 0
|
||||
this.startLocationY = e.touches[0].pageY
|
||||
this.changeIndex(this.contentIndex, this.contentIndex)
|
||||
return;
|
||||
}
|
||||
if (Math.abs(pageMoveDistance) < this.canTransformY) {
|
||||
let SlideItems = document.querySelectorAll('.SlideItem')
|
||||
SlideItems.forEach(SlideItem => {
|
||||
SlideItem.scrollTop = 0
|
||||
})
|
||||
this.tempScroll = false
|
||||
}
|
||||
this.floatFixed = Math.abs(pageMoveDistance) > 100
|
||||
this.floatShowName = Math.abs(pageMoveDistance) > 150
|
||||
this.$refs.scroll.style.transform = `translate3d(0,${pageMoveDistance}px,0)`
|
||||
}
|
||||
} else {
|
||||
//手指往上划,页面向下动
|
||||
if (Math.abs(pageMoveDistance) < this.canTransformY) {
|
||||
|
||||
if (this.refs.videoSlideHeight < this.refs.maxSlideHeight) {
|
||||
let endTransformY = Math.abs(this.canTransformY) - (this.refs.maxSlideHeight - this.refs.videoSlideHeight)
|
||||
let moveTransformY = Math.abs(pageMoveDistance) < Math.abs(endTransformY) ? pageMoveDistance : -endTransformY
|
||||
this.$refs.scroll.style.transform = `translate3d(0,${moveTransformY}px,0)`
|
||||
|
||||
this.startLocationY = e.touches[0].pageY
|
||||
this.lastMoveYDistance = moveTransformY
|
||||
|
||||
this.floatFixed = Math.abs(moveTransformY) > 100
|
||||
this.floatShowName = Math.abs(moveTransformY) > 150
|
||||
} else {
|
||||
this.floatFixed = Math.abs(pageMoveDistance) > 100
|
||||
this.floatShowName = Math.abs(pageMoveDistance) > 150
|
||||
this.$refs.scroll.style.transform = `translate3d(0,${pageMoveDistance}px,0)`
|
||||
}
|
||||
} else {
|
||||
this.refs.header.style.height = this.refs.headerHeight + 'px'
|
||||
this.$refs.scroll.style.transform = `translate3d(0,${-this.canTransformY}px,0)`
|
||||
let SlideItems = document.querySelectorAll('.SlideItem')
|
||||
let SlideItem = SlideItems[this.contentIndex]
|
||||
|
||||
if (!this.isScroll) {
|
||||
this.tempScroll = true
|
||||
SlideItem.scrollTop = Math.abs(pageMoveDistance) - this.refs.descHeight + this.floatHeight
|
||||
}
|
||||
if (SlideItem.scrollHeight - SlideItem.clientHeight < SlideItem.scrollTop + 60) {
|
||||
this.loadMoreData()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
async touchEnd(e) {
|
||||
if (!this.canScroll) return
|
||||
let moveDistance = e.changedTouches[0].pageY - this.startLocationY
|
||||
let pageMoveDistance = this.lastMoveYDistance + moveDistance * this.acceleration
|
||||
|
||||
// console.log('end-pageMoveDistance', pageMoveDistance)
|
||||
// console.log('end-moveDistance', moveDistance)
|
||||
|
||||
if (this.isScroll) {
|
||||
this.tempScroll = false
|
||||
this.lastMoveYDistance = -this.canTransformY
|
||||
} else {
|
||||
let endTime = Date.now()
|
||||
let gapTime = endTime - this.startTime
|
||||
|
||||
// console.log('end-gapTime', gapTime)
|
||||
let endTransformY = Math.abs(this.canTransformY) - (this.refs.maxSlideHeight - this.refs.videoSlideHeight)
|
||||
|
||||
|
||||
//手指往下划,页面向上动
|
||||
if (moveDistance >= 0) {
|
||||
if (pageMoveDistance > 0) {
|
||||
this.refs.header.style.transition = 'all .3s'
|
||||
this.refs.header.style.height = this.refs.headerHeight + 'px'
|
||||
this.lastMoveYDistance = 0
|
||||
this.floatShowName = this.floatFixed = this.isScroll = this.tempScroll = false
|
||||
} else {
|
||||
//猛的划一下
|
||||
if ((Math.abs(moveDistance) > 100) && gapTime > 100 && gapTime < 150) {
|
||||
this.floatShowName = this.floatFixed = this.isScroll = false
|
||||
|
||||
//用cancelAnimationFrame快速滚动到顶部,要比transition = 'all .3s'快
|
||||
this.$refs.scroll.style.transition = 'none'
|
||||
let transformY = this.getTransform(this.$refs.scroll)
|
||||
//当前的transformY
|
||||
// console.log('transformY', transformY)
|
||||
let timer
|
||||
cancelAnimationFrame(timer);
|
||||
let fn = () => {
|
||||
//说明没到顶
|
||||
if (transformY < 0) {
|
||||
transformY = transformY + 40
|
||||
this.$refs.scroll.style.transform = `translate3d(0,${transformY > 0 ? 0 : transformY}px,0)`
|
||||
timer = requestAnimationFrame(fn);
|
||||
} else {
|
||||
//transformY === 0说明,本来就在顶部,然后猛的一划,这里要判断下
|
||||
if (transformY !== 0) {
|
||||
if (this.$getCss(this.refs.header, 'height') < 400) {
|
||||
this.refs.header.style.transition = 'none'
|
||||
this.refs.header.style.height = this.$getCss(this.refs.header, 'height') + 10 + 'px'
|
||||
timer = requestAnimationFrame(fn);
|
||||
} else {
|
||||
this.refs.header.style.transition = 'all .6s'
|
||||
this.refs.header.style.height = this.refs.headerHeight + 'px'
|
||||
this.lastMoveYDistance = 0
|
||||
cancelAnimationFrame(timer);
|
||||
}
|
||||
} else {
|
||||
//快速动画结束
|
||||
this.lastMoveYDistance = 0
|
||||
cancelAnimationFrame(timer);
|
||||
}
|
||||
}
|
||||
}
|
||||
timer = requestAnimationFrame(fn);
|
||||
|
||||
} else if ((Math.abs(moveDistance) > 100) && gapTime > 150 && gapTime < 300) {
|
||||
// //用cancelAnimationFrame快速滚动到顶部,要比transition = 'all .3s'快
|
||||
this.$refs.scroll.style.transition = 'all .3s'
|
||||
this.$refs.scroll.style.transform = `translate3d(0,0,0)`
|
||||
this.lastMoveYDistance = 0
|
||||
this.floatShowName = this.floatFixed = this.isScroll = false
|
||||
let SlideItems = document.querySelectorAll('.SlideItem')
|
||||
SlideItems.forEach(SlideItem => {
|
||||
SlideItem.scrollTop = 0
|
||||
})
|
||||
this.tempScroll = this.isScroll = false
|
||||
} else {
|
||||
this.lastMoveYDistance = pageMoveDistance
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ((Math.abs(moveDistance) > 100) && gapTime < 250) {
|
||||
//往下划
|
||||
this.$refs.scroll.style.transition = 'all .3s'
|
||||
if (this.refs.videoSlideHeight < this.refs.maxSlideHeight) {
|
||||
this.$refs.scroll.style.transform = `translate3d(0,${-endTransformY}px,0)`
|
||||
// this.floatShowName = this.floatFixed = true
|
||||
this.floatFixed = Math.abs(endTransformY) > 100
|
||||
this.floatShowName = Math.abs(endTransformY) > 150
|
||||
this.lastMoveYDistance = -endTransformY
|
||||
} else {
|
||||
this.$refs.scroll.style.transform = `translate3d(0,${-this.canTransformY}px,0)`
|
||||
this.floatShowName = this.floatFixed = this.isScroll = true
|
||||
this.tempScroll = false
|
||||
this.lastMoveYDistance = -this.canTransformY
|
||||
}
|
||||
} else {
|
||||
//手指往上划,页面向下动
|
||||
if (Math.abs(pageMoveDistance) < this.canTransformY) {
|
||||
if (this.refs.videoSlideHeight < this.refs.maxSlideHeight) {
|
||||
this.lastMoveYDistance = Math.abs(pageMoveDistance) < Math.abs(endTransformY) ? pageMoveDistance : -endTransformY
|
||||
} else {
|
||||
let endDistance = pageMoveDistance
|
||||
if (Math.abs(moveDistance) > 20) {
|
||||
if (moveDistance > 0) {
|
||||
endDistance += this.sprint
|
||||
} else {
|
||||
endDistance -= this.sprint
|
||||
}
|
||||
}
|
||||
this.lastMoveYDistance = endDistance
|
||||
this.$refs.scroll.style.transition = 'all .3s'
|
||||
this.$refs.scroll.style.transform = `translate3d(0,${endDistance}px,0)`
|
||||
}
|
||||
} else {
|
||||
this.isScroll = true
|
||||
this.tempScroll = false
|
||||
this.lastMoveYDistance = -this.canTransformY
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
getTransform(el) {
|
||||
let transform = el.style.transform
|
||||
if (!transform) return 0
|
||||
// console.log('transform',transform)
|
||||
let transformY = transform.substring(transform.indexOf('0px') + 5, transform.lastIndexOf('0px') - 4)
|
||||
// console.log('transformY',transformY)
|
||||
//当前的transformY
|
||||
transformY = parseInt(transformY)
|
||||
return transformY
|
||||
},
|
||||
filterAge(age) {
|
||||
if (!age) return
|
||||
let date = new Date(age)
|
||||
return new Date().getFullYear() - date.getFullYear()
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
@import "Uploader";
|
||||
</style>
|
||||
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="People" @click="$nav('/me/uploader')">
|
||||
<div class="People" >
|
||||
<img :src="$imgPreview(people.avatar)" alt="" class="head-image pull-left">
|
||||
<div class="content">
|
||||
<template v-if="mode === 'normal'">
|
||||
|
||||
@ -63,7 +63,6 @@ import PasswordLogin from "../pages/login/PasswordLogin";
|
||||
import VerificationCode from "../pages/login/VerificationCode";
|
||||
import RetrievePassword from "../pages/login/RetrievePassword";
|
||||
import Help from "../pages/login/Help";
|
||||
import Uploader from "../pages/me/Uploader";
|
||||
import GoodsDetail from "@/pages/shop/GoodsDetail.vue";
|
||||
|
||||
const routes = [
|
||||
@ -144,7 +143,6 @@ const routes = [
|
||||
//前面的要跳到这些页面,所以放后面
|
||||
{path: '/me/request-update', component: RequestUpdate},
|
||||
{path: '/me/my-request-update', component: MyRequestUpdate},
|
||||
{path: '/me/uploader', component: Uploader},
|
||||
{path: '/home/report', component: Report},
|
||||
{path: '/home/submit-report', component: SubmitReport},
|
||||
{path: '/message/share-to-friend', component: Share2Friend},
|
||||
|
||||
Loading…
Reference in New Issue
Block a user