diff --git a/src/App.vue b/src/App.vue
index 367f9a5..d054c50 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,7 +1,7 @@
-
+
-
+
diff --git a/src/main.js b/src/main.js
index 367a208..a4ac13d 100644
--- a/src/main.js
+++ b/src/main.js
@@ -32,12 +32,10 @@ const router = createRouter({
history: createWebHashHistory(),
routes,
scrollBehavior(to, from, savedPosition) {
- if (to.meta.cache && savedPosition)
- return new Promise((resolve, reject) => {
- resolve(savedPosition);
- });
- else
- return { top: 0 };
+ if (to.meta.cache && savedPosition) {
+ return savedPosition;
+ }
+ return { top: 0 };
}
});
diff --git a/src/router.js b/src/router.js
index 9d8b13d..e8e9750 100644
--- a/src/router.js
+++ b/src/router.js
@@ -1,6 +1,3 @@
-import { createRouter, createWebHashHistory } from 'vue-router'
-import { useUserStore } from './stores/user'
-
const routes = [
{
path: '/',
@@ -24,7 +21,7 @@ const routes = [
path: '/Mall',
name: 'Mall',
component: () => import('./views/Tabbars/Mall.vue'),
- meta: { title: '商城' }
+ meta: { title: '商城', cache: true }
},
{
path: '/PointMall',
@@ -39,7 +36,7 @@ const routes = [
meta: { title: '我的' }
},
],
- meta: { noLogin: true }
+ meta: { noLogin: true, cache: true }
},
{
path: '/WxCallback',
@@ -226,7 +223,7 @@ const routes = [
path: '/Category',
name: 'Category',
component: () => import('./views/Goods/Category.vue'),
- meta: { title: '全部分类', noLogin: true, }
+ meta: { title: '全部分类', noLogin: true, cache: true }
},
{
path: '/Operations',
@@ -306,20 +303,20 @@ const routes = [
component: () => import('./views/User/Checkout/CheckoutTrade.vue'),
meta: { title: '订单详情' }
},
- {
- path: '/Refresh',
- name: 'Refresh',
- component: { render: () => null },
- meta: { noLogin: true },
- beforeRouteEnter(to, from, next) {
- next(vm => {
- setTimeout(() => {
- const redirect = to.query.redirect || '/Home'
- vm.$router.replace(decodeURIComponent(redirect))
- }, 50)
- })
- }
- },
+ // {
+ // path: '/Refresh',
+ // name: 'Refresh',
+ // component: { render: () => null },
+ // meta: { noLogin: true },
+ // beforeRouteEnter(to, from, next) {
+ // next(vm => {
+ // setTimeout(() => {
+ // const redirect = to.query.redirect || '/Home'
+ // vm.$router.replace(decodeURIComponent(redirect))
+ // }, 50)
+ // })
+ // }
+ // },
{
path: '/SyncAuth',
name: 'SyncAuth',
diff --git a/src/views/Goods/Category.vue b/src/views/Goods/Category.vue
index 3e6da2d..477ee39 100644
--- a/src/views/Goods/Category.vue
+++ b/src/views/Goods/Category.vue
@@ -59,7 +59,7 @@
销量
-
+
@@ -80,7 +80,7 @@
¥{{ item.saleprice?.toFixed(2) }}
销量{{
item.salenums
- }}
+ }}
@@ -130,32 +130,80 @@ export default {
"/img/pro-list-px-1.png",
"/img/pro-list-px-2.png",
],
+ _scrollRestored: false,
+ _pauseScroll: false,
}
},
+ activated() {
+ this._scrollRestored = false
+ this._pauseScroll = false
+ this.$nextTick(() => {
+ const container = document.querySelector('.product_content')
+ if (container) {
+ container.addEventListener('scroll', this.saveScroll)
+ this.restoreScroll(container)
+ }
+ })
+ },
beforeRouteLeave(to, from, next) {
- sessionStorage.setItem('category_scroll', window.scrollY)
+ this._pauseScroll = true
+ const container = document.querySelector('.product_content')
+ if (container) {
+ sessionStorage.setItem('Category_scroll', container.scrollTop || 0)
+ }
next()
},
deactivated() {
- sessionStorage.setItem('category_scroll', window.scrollY)
+ this._pauseScroll = true
+ const container = document.querySelector('.product_content')
+ if (container) {
+ sessionStorage.setItem('Category_scroll', container.scrollTop || 0)
+ }
},
mounted() {
+
+ const container = document.querySelector('.product_content')
+ if (container) {
+ container.addEventListener('scroll', this.saveScroll)
+ }
this.init()
},
- activated() {
+ beforeUnmount() {
+ const container = document.querySelector('.product_content')
+ if (container) {
+ container.removeEventListener('scroll', this.saveScroll)
+ }
},
methods: {
+ saveScroll() {
+ if (this._pauseScroll) return
+ const container = document.querySelector('.product_content')
+ if (container) {
+ sessionStorage.setItem('Category_scroll', container.scrollTop || 0)
+ }
+ },
+ restoreScroll(container) {
+ const scrollTop = sessionStorage.getItem('Category_scroll')
+ if (scrollTop && scrollTop !== '0' && !this._scrollRestored) {
+ this._scrollRestored = true
+ container.removeEventListener('scroll', this.saveScroll)
+ this.$nextTick(() => {
+ container.scrollTo(0, Number(scrollTop))
+ })
+ setTimeout(() => {
+ container.addEventListener('scroll', this.saveScroll)
+ }, 100)
+ }
+ },
async init() {
await this.loadCategories();
if (this.$route.query.id) {
this.changeMainById(Number(this.$route.query.id));
}
- // 如果URL带有SortType=2(从热销入口进入),默认以销量排序
if (this.$route.query.SortType == 2) {
this.searchParams.SortType = 2;
this.searchParams.IsDesc = true;
}
- // 如果URL带有name参数,初始化搜索
if (this.$route.query.name) {
this.searchKey = this.$route.query.name;
this.queryParams.name = this.searchKey;
@@ -254,9 +302,6 @@ export default {
this.queryParams.name = this.searchKey;
this.refreshProductList();
},
- onLoad() {
- // loaded
- },
refreshProductList() {
this.$refs.productList?.refresh();
},
diff --git a/src/views/Goods/GoodsDetail.vue b/src/views/Goods/GoodsDetail.vue
index b70b27a..97981b6 100644
--- a/src/views/Goods/GoodsDetail.vue
+++ b/src/views/Goods/GoodsDetail.vue
@@ -1,5 +1,5 @@
-
+
![]()
diff --git a/src/views/Tabbars/Mall.vue b/src/views/Tabbars/Mall.vue
index 87f0a73..ea8d2ed 100644
--- a/src/views/Tabbars/Mall.vue
+++ b/src/views/Tabbars/Mall.vue
@@ -207,17 +207,48 @@ export default {
hotData: [],
typeData: [],
bgcolor: '',
- _fromDetail: false,
+ _pauseScroll: false,
}
},
mounted() {
- this.init();
+ console.log('[Mall] mounted')
+ window.addEventListener('scroll', this.saveScroll)
+ this.init().then(() => {
+ console.log('[Mall] init completed')
+ const scroll = sessionStorage.getItem('Mall_scroll')
+ window.scrollTo(0, Number(scroll))
+ })
+ },
+
+ unmounted() {
+ window.removeEventListener('scroll', this.saveScroll)
+ },
+
+ beforeRouteLeave(to, from) {
+ if (to.name === 'GoodsDetail') {
+ sessionStorage.setItem('Mall_fromDetail', '1')
+ }
+ },
+
+ activated() {
+ if (sessionStorage.getItem('Mall_fromDetail') === '1') {
+ sessionStorage.removeItem('Mall_fromDetail')
+ const scroll = sessionStorage.getItem('Mall_scroll')
+ setTimeout(() => {
+ window.scrollTo(0, Number(scroll))
+ }, 100)
+ } else {
+ window.scrollTo(0, 0)
+ }
},
methods: {
+ saveScroll() {
+ sessionStorage.setItem('Mall_scroll', window.scrollY || 0)
+ },
init() {
- Promise.all([
+ return Promise.all([
this.$get('/v1/client/EProcatesClient').then(res => {
this.data.SpuType = res.data.filter(i => i.homeshowed)
}),
diff --git a/src/views/Trade/TradeDetail.vue b/src/views/Trade/TradeDetail.vue
index 2cef111..f5b7581 100644
--- a/src/views/Trade/TradeDetail.vue
+++ b/src/views/Trade/TradeDetail.vue
@@ -33,7 +33,9 @@
- ¥{{ data.proskusaleprice?.toFixed(2) }}
+ ¥
+ {{ data.proskusaleprice?.toFixed(2) }}
+ 积分
x{{ data.buynums }}
@@ -47,7 +49,52 @@
-
+
+
+ 积分数量
+ {{ data.payjifen?.toFixed(2) }}
+
+
+ 支付方式
+ {{ data.paychannelname }}
+
+
+ 赠送积分
+ {{ data.zongsongjifen?.toFixed(2) }}
+
+
+
+ 订单号:
+ {{ data.ordernum }}
+
+
+
+
+ 下单时间
+ {{ $formatGMT(data.addtime, 'yyyy-MM-dd HH:mm:ss') }}
+
+
+ 付款时间
+ {{ $formatGMT(data.paytime, 'yyyy-MM-dd HH:mm:ss') }}
+
+
+ 发货时间
+ {{ $formatGMT(data.exporttime, 'yyyy-MM-dd HH:mm:ss') }}
+
+
+ 完成时间
+ {{ $formatGMT(data.receipttime, 'yyyy-MM-dd HH:mm:ss') }}
+
+
+ 评价时间
+ {{ $formatGMT(data.evaltime, 'yyyy-MM-dd HH:mm:ss') }}
+
+
+
商品总价
¥{{ data.ordermoney?.toFixed(2) }}
diff --git a/src/views/Trade/Tradelist.vue b/src/views/Trade/Tradelist.vue
index c8242c8..841fa46 100644
--- a/src/views/Trade/Tradelist.vue
+++ b/src/views/Trade/Tradelist.vue
@@ -38,14 +38,18 @@
x{{ item.buynums }}
-
¥{{ item.proskusaleprice?.toFixed(2) }}
-
惠利{{ item.discountratio }}%
+
¥{{ item.proskusaleprice?.toFixed(2) }}
+
{{ item.proskusaleprice?.toFixed(2) }}积分
+
惠利{{ item.discountratio }}%
-
+
实付:¥{{ item.realmoney?.toFixed(2) }}
+
+ 实付:{{ item.ordermoney?.toFixed(2) }}
+
{{ item.statename }}
diff --git a/src/views/User/Wallet/Certificate.vue b/src/views/User/Wallet/Certificate.vue
index 74a9e36..f3e4799 100644
--- a/src/views/User/Wallet/Certificate.vue
+++ b/src/views/User/Wallet/Certificate.vue
@@ -78,6 +78,11 @@ export default {
this.init()
this.stopPolling()
this.pollingTimer = setInterval(() => {
+ // 如果全部已核销,停止轮询
+ if (this.items.length > 0 && this.items.every(i => i.state === 1)) {
+ this.stopPolling()
+ return
+ }
this.init()
}, 3000)
},