hookehuyr

✨ feat: 修复keepAlive页面返回在微信中适配问题

...@@ -60,8 +60,6 @@ export default { ...@@ -60,8 +60,6 @@ export default {
60 if (res.data.code === 1) { 60 if (res.data.code === 1) {
61 this.detail[`is_${type}`] = res.data.data[`is_${type}`]; 61 this.detail[`is_${type}`] = res.data.data[`is_${type}`];
62 this.detail[`${type}_num`] = res.data.data[`${type}_num`]; 62 this.detail[`${type}_num`] = res.data.data[`${type}_num`];
63 - // 传回数据
64 - this.$emit('on-click', this.detail);
65 } else { 63 } else {
66 // tslint:disable-next-line: no-console 64 // tslint:disable-next-line: no-console
67 console.warn(res); 65 console.warn(res);
......
...@@ -92,6 +92,8 @@ export default { ...@@ -92,6 +92,8 @@ export default {
92 ] 92 ]
93 }) 93 })
94 this.detail = _.cloneDeep(this.item); 94 this.detail = _.cloneDeep(this.item);
95 + // 传回数据
96 + this.$emit('on-click', this.detail);
95 var video = mp.video(); 97 var video = mp.video();
96 // 监听原生video事件 98 // 监听原生video事件
97 var _this = this; 99 var _this = this;
...@@ -113,4 +115,4 @@ export default { ...@@ -113,4 +115,4 @@ export default {
113 padding-bottom: 0.5rem; 115 padding-bottom: 0.5rem;
114 } 116 }
115 } 117 }
116 -</style>
...\ No newline at end of file ...\ No newline at end of file
118 +</style>
......
...@@ -7,7 +7,8 @@ export const mainStore = defineStore('main', { ...@@ -7,7 +7,8 @@ export const mainStore = defineStore('main', {
7 count: 0, 7 count: 0,
8 auth: false, 8 auth: false,
9 comment_num: 0, 9 comment_num: 0,
10 - video_detail: {} 10 + video_detail: {},
11 + scrollTop: 0,
11 }; 12 };
12 }, 13 },
13 getters: {}, 14 getters: {},
...@@ -20,6 +21,9 @@ export const mainStore = defineStore('main', { ...@@ -20,6 +21,9 @@ export const mainStore = defineStore('main', {
20 }, 21 },
21 changeVideoDetail (v) { 22 changeVideoDetail (v) {
22 this.video_detail = v; 23 this.video_detail = v;
23 - } 24 + },
25 + changeScrollTop (v) {
26 + this.scrollTop = v;
27 + },
24 }, 28 },
25 }); 29 });
......
...@@ -122,6 +122,8 @@ import axios from '@/utils/axios'; ...@@ -122,6 +122,8 @@ import axios from '@/utils/axios';
122 import $ from 'jquery' 122 import $ from 'jquery'
123 import _ from 'lodash' 123 import _ from 'lodash'
124 import { Toast } from 'vant'; 124 import { Toast } from 'vant';
125 +import { wxInfo } from '@/utils/tools';
126 +
125 const $route = useRoute(); 127 const $route = useRoute();
126 const $router = useRouter(); 128 const $router = useRouter();
127 129
...@@ -265,6 +267,21 @@ onActivated(() => { // keepAlive 重置后执行回调 ...@@ -265,6 +267,21 @@ onActivated(() => { // keepAlive 重置后执行回调
265 }) 267 })
266 // 触发更新 268 // 触发更新
267 prod_list.value = arr.value; 269 prod_list.value = arr.value;
270 + /**
271 + * 判断微信环境
272 + */
273 + if (wxInfo().isiOS || wxInfo().isAndroid) {
274 + // TODO: 手机微信浏览器位置变动了,需要手动调整位置,但是无刷新是起作用的
275 + const { scrollTop } = storeToRefs(store);
276 + if (scrollTop.value) {
277 + $("html,body").animate({ "scrollTop": scrollTop.value })
278 + }
279 + window.addEventListener('scroll',()=>{
280 + if (window.scrollY) {
281 + store.changeScrollTop(window.scrollY)
282 + }
283 + });
284 + }
268 }); 285 });
269 286
270 const changeRouterKeepAlive = (path, keepAlive) => { 287 const changeRouterKeepAlive = (path, keepAlive) => {
...@@ -287,6 +304,7 @@ onBeforeRouteLeave((to, from) => { ...@@ -287,6 +304,7 @@ onBeforeRouteLeave((to, from) => {
287 }) 304 })
288 305
289 /*********************************************************/ 306 /*********************************************************/
307 +
290 </script> 308 </script>
291 309
292 <script> 310 <script>
...@@ -296,9 +314,27 @@ export default { ...@@ -296,9 +314,27 @@ export default {
296 mixins: [mixin.init], 314 mixins: [mixin.init],
297 data() { 315 data() {
298 return { 316 return {
317 + scrollTop: ''
299 } 318 }
300 }, 319 },
301 - created() { 320 + mounted() {
321 + // 监听滚动恢复
322 + // this.$nextTick(() => {
323 + // let top = localStorage.getItem('scrollPosTop') ? Number(localStorage.getItem('scrollPosTop')) : 0;
324 + // $("html,body").animate({ "scrollTop": top })
325 + // })
326 + // setTimeout(() => {
327 + // // let top = localStorage.getItem('scrollPosTop') ? Number(localStorage.getItem('scrollPosTop')) : 0;
328 + // let top = Cookies.get('scrollPosTop') ? Number(Cookies.get('scrollPosTop')) : 0;
329 + // $("html,body").animate({ "scrollTop": top })
330 + // }, 1000)
331 + // window.addEventListener('scroll',()=>{
332 + // if (window.scrollY) {
333 + // this.scrollTop = window.scrollY
334 + // }
335 + // localStorage.setItem('scrollPosTop', this.scrollTop)
336 + // Cookies.set(scrollPosTop, this.scrollTop)
337 + // })
302 }, 338 },
303 methods: { 339 methods: {
304 } 340 }
......
...@@ -58,38 +58,43 @@ import { storeToRefs } from 'pinia' ...@@ -58,38 +58,43 @@ import { storeToRefs } from 'pinia'
58 58
59 import VideoCard from '@/components/VideoCard/index.vue' 59 import VideoCard from '@/components/VideoCard/index.vue'
60 60
61 -import { ref, onActivated } from 'vue' 61 +import { ref, onActivated, onMounted } from 'vue'
62 import { useRoute, useRouter, onBeforeRouteLeave } from 'vue-router' 62 import { useRoute, useRouter, onBeforeRouteLeave } from 'vue-router'
63 import axios from '@/utils/axios'; 63 import axios from '@/utils/axios';
64 import _ from 'lodash'; 64 import _ from 'lodash';
65 +import $ from 'jquery';
65 import { Toast } from 'vant'; 66 import { Toast } from 'vant';
66 const $route = useRoute(); 67 const $route = useRoute();
67 const $router = useRouter(); 68 const $router = useRouter();
68 69
69 -// 获取表演者信息 70 +const store = mainStore();
70 -const userInfo = ref({}) 71 +
71 -axios.get('/srv/?a=perf_info', { 72 +const userInfo = ref({});
72 - params: { 73 +onMounted(() => {
73 - perf_id: $route.query.perf_id 74 + // 获取表演者信息
74 - } 75 + axios.get('/srv/?a=perf_info', {
75 -}) 76 + params: {
76 - .then(res => { 77 + perf_id: $route.query.perf_id
77 - if (res.data.code === 1) {
78 - _.each(res.data.data.prod, (item) => {
79 - item.path = 'personIndex'
80 - })
81 - userInfo.value = res.data.data;
82 - } else {
83 - console.warn(res);
84 - Toast({
85 - icon: 'close',
86 - message: res.data.msg
87 - });
88 } 78 }
89 }) 79 })
90 - .catch(err => { 80 + .then(res => {
91 - console.error(err); 81 + if (res.data.code === 1) {
92 - }); 82 + _.each(res.data.data.prod, (item) => {
83 + item.path = 'personIndex'
84 + })
85 + userInfo.value = res.data.data;
86 + } else {
87 + console.warn(res);
88 + Toast({
89 + icon: 'close',
90 + message: res.data.msg
91 + });
92 + }
93 + })
94 + .catch(err => {
95 + console.error(err);
96 + });
97 +})
93 98
94 // 关注个人用户 99 // 关注个人用户
95 const followUser = (status) => { 100 const followUser = (status) => {
...@@ -122,8 +127,8 @@ const followUser = (status) => { ...@@ -122,8 +127,8 @@ const followUser = (status) => {
122 127
123 onActivated(() => { // keepAlive 重置后执行回调 128 onActivated(() => { // keepAlive 重置后执行回调
124 // TAG: pinia应用,动态刷新数据 129 // TAG: pinia应用,动态刷新数据
125 - // 处理数据未刷新数据显示问题
126 const store = mainStore() 130 const store = mainStore()
131 + // 处理数据未刷新数据显示问题
127 // Pinia 解构方法:storeToRefs 132 // Pinia 解构方法:storeToRefs
128 const { video_detail } = storeToRefs(store); 133 const { video_detail } = storeToRefs(store);
129 // 如果作品信息有变化及时修正 134 // 如果作品信息有变化及时修正
......
...@@ -31,8 +31,6 @@ ...@@ -31,8 +31,6 @@
31 </van-col> 31 </van-col>
32 </van-row> 32 </van-row>
33 </div> 33 </div>
34 -
35 -
36 </div> 34 </div>
37 </template> 35 </template>
38 36
...@@ -50,12 +48,15 @@ const $route = useRoute(); ...@@ -50,12 +48,15 @@ const $route = useRoute();
50 const $router = useRouter(); 48 const $router = useRouter();
51 49
52 const getUserInfo = () => { 50 const getUserInfo = () => {
53 - $router.push({ 51 + // 从个人头像进入的,不能再往下级进入
54 - path: '/client/personIndex', 52 + if (!$route.query.path) {
55 - query: { 53 + $router.push({
56 - perf_id: videoInfo.value.perf_id 54 + path: '/client/personIndex',
57 - } 55 + query: {
58 - }) 56 + perf_id: videoInfo.value.perf_id
57 + }
58 + })
59 + }
59 } 60 }
60 61
61 const active = ref(0); // index 0 为简介,1 为留言 62 const active = ref(0); // index 0 为简介,1 为留言
...@@ -110,7 +111,7 @@ onMounted(() => { ...@@ -110,7 +111,7 @@ onMounted(() => {
110 }) 111 })
111 .catch(err => { 112 .catch(err => {
112 console.error(err); 113 console.error(err);
113 - }) 114 + });
114 }) 115 })
115 116
116 const onVideoDetail = (v) => { 117 const onVideoDetail = (v) => {
......