refactor(member): 提取公共登录态清理和注销逻辑到mixin

重构会员相关页面的重复代码,将清除登录态、退出登录、账号注销相关逻辑抽离到公共mixin中,统一复用代码并减少重复维护成本
This commit is contained in:
2026-06-16 17:34:56 +08:00
parent c01a026149
commit e9ee61f509
6 changed files with 109 additions and 155 deletions

View File

@@ -78,7 +78,10 @@
</template>
<script>
import memberPublic from './public/js/member-public.js';
export default {
mixins: [memberPublic],
data() {
return {
accountInfo: {},
@@ -116,28 +119,7 @@ export default {
this.$util.redirectTo('/pages_tool/member/cancellation');
},
submit() {
uni.showModal({
title: '风险提示',
content: '确定要注销当前账号吗?',
confirmColor: '#000000',
success: res => {
if (res.confirm) {
this.$api.sendRequest({
url: '/membercancel/api/membercancel/apply',
success: rres => {
let cancellation_condition = rres.data.is_audit;
if (rres.code >= 0) {
this.$util.redirectTo('/pages_tool/member/cancelstatus');
} else {
this.$util.showToast({
title: rres.message
});
}
}
});
}
}
});
this.submitCancelApply();
}
}
};

View File

@@ -37,7 +37,10 @@
</template>
<script>
import memberPublic from './public/js/member-public.js';
export default {
mixins: [memberPublic],
data() {
return {
state: 0
@@ -67,10 +70,7 @@
}
if (res.code == -1) {
this.$store.commit('setToken', '');
this.$store.commit('setMemberInfo', '');
this.$store.commit('setMemberInfo', '');
this.$store.dispatch('emptyCart');
this.clearLoginState();
this.$util.redirectTo(this.$util.INDEX_PAGE_URL);
}
}

View File

@@ -12,7 +12,10 @@
</template>
<script>
import memberPublic from './public/js/member-public.js';
export default {
mixins: [memberPublic],
components: {},
data() {
return {
@@ -33,18 +36,20 @@
methods: {
getStatus() {
this.$api.sendRequest({
url: '/membercancel/api/membercancel/info',
success: res => {
if (res.code >= 0) {
this.state = res.data.state;
if (res.data.state == 1) {
this.$store.commit('setToken', '');
this.$store.commit('setMemberInfo', '');
this.$store.dispatch('emptyCart');
if (res.data && res.data.status == 1) {
this.clearLoginState();
this.$util.redirectTo(this.$util.INDEX_PAGE_URL);
}
}
}
});
},
success() {
this.clearLoginState();
this.$util.redirectTo(this.$util.INDEX_PAGE_URL);
}
}
};

View File

@@ -76,6 +76,7 @@
<script>
import diyJs from '@/common/js/diy.js';
import indexJs from './public/js/index.js';
import memberPublic from './public/js/member-public.js';
import nsBirthdayGift from '../_components/ns-birthday-gift/ns-birthday-gift.vue';
import nsNewGift from '../_components/ns-new-gift/ns-new-gift.vue';
@@ -85,7 +86,7 @@ export default {
nsBirthdayGift,
nsNewGift
},
mixins: [diyJs, indexJs],
mixins: [diyJs, indexJs, memberPublic],
onLoad() {
this.$util.hideHomeButton();
},
@@ -96,55 +97,6 @@ export default {
tourl(url) {
this.$util.redirectTo(url);
},
// 退出登录
logout() {
uni.showModal({
title: this.$lang('logoutTitle'),
content: this.$lang('logoutContent'),
success: (res) => {
if (res.confirm) {
this.$store.commit('setToken', '');
this.$store.commit('setMemberInfo', '');
this.$store.dispatch('emptyCart');
uni.removeStorageSync('authInfo');
uni.removeStorageSync('privacyAgreed');
this.$util.redirectTo(this.$util.MEMBER_PAGE_URL);
}
}
});
},
// 账号注销
cancellation() {
uni.showModal({
title: this.$lang('cancellationTitle'),
content: this.$lang('cancellationContent'),
confirmColor: '#000000',
success: res => {
if (res.confirm) {
this.$api.sendRequest({
url: '/membercancel/api/membercancel/apply',
success: rres => {
if (rres.code >= 0) {
this.$store.commit('setToken', '');
this.$store.commit('setMemberInfo', '');
this.$store.dispatch('emptyCart');
uni.removeStorageSync('authInfo');
uni.removeStorageSync('privacyAgreed');
this.$util.redirectTo(this.$util.MEMBER_PAGE_URL);
} else {
this.$util.showToast({
title: rres.message
});
}
}
});
}
}
});
}
}

View File

@@ -1,4 +1,5 @@
import validate from '@/common/js/validate.js';
import memberPublic from './member-public.js';
export default {
data() {
@@ -136,6 +137,7 @@ export default {
}
},
methods: {
...memberPublic.methods,
// 初始化语言
initLang() {
//获取语言列表
@@ -239,63 +241,6 @@ export default {
});
}
},
cancellation() {
uni.showModal({
title: '风险提示',
content: '确定要注销当前账号吗?',
confirmColor: '#000000',
success: res => {
if (res.confirm) {
this.$api.sendRequest({
url: '/membercancel/api/membercancel/apply',
success: rres => {
let cancellation_condition = rres.data.is_audit;
if (rres.code >= 0) {
this.$store.commit('setToken', '');
this.$store.commit('setMemberInfo', '');
this.$store.dispatch('emptyCart');
this.$store.dispatch('emptyCart');
uni.removeStorageSync('authInfo');
this.$util.redirectTo(this.$util.MEMBER_PAGE_URL);
} else {
this.$util.showToast({
title: rres.message
});
}
}
});
}
}
});
},
getCancelStatus() {
this.$api.sendRequest({
url: '/membercancel/api/membercancel/info',
success: res => {
if (res.code >= 0) {
if (res.data) {
if (res.data.status == 0) {
this.$util.redirectTo('/pages_tool/member/cancelstatus', {
back: '/pages_tool/member/info'
});
} else if (res.data.status == 1) {
this.$util.redirectTo('/pages_tool/member/cancelsuccess', {
back: '/pages_tool/member/info'
});
} else {
this.$util.redirectTo('/pages_tool/member/cancelrefuse', {
back: '/pages_tool/member/info'
});
}
} else {
this.$util.redirectTo('/pages_tool/member/assets', {
back: '/pages_tool/member/info'
});
}
}
}
});
},
// 导航返回
NavReturn() {
uni.navigateBack({
@@ -317,23 +262,6 @@ export default {
}
});
},
// 退出登录
logout() {
uni.showModal({
title: '提示',
content: '确定要退出登录吗',
success: (res) => {
if (res.confirm) {
this.$store.commit('setToken', '');
this.$store.commit('setMemberInfo', '');
this.$store.dispatch('emptyCart');
this.$store.dispatch('emptyCart');
uni.removeStorageSync('authInfo');
this.$util.redirectTo(this.$util.MEMBER_PAGE_URL);
}
}
});
},
headImage() {
this.$util.redirectTo("/pages_tool/member/modify_face");
},

View File

@@ -0,0 +1,87 @@
export default {
methods: {
// 清除登录态(token / 用户信息 / 购物车 / 本地存储)
clearLoginState() {
this.$store.commit('setToken', '');
this.$store.commit('setMemberInfo', '');
this.$store.dispatch('emptyCart');
uni.removeStorageSync('authInfo');
uni.removeStorageSync('privacyAgreed');
},
// 退出登录
logout() {
uni.showModal({
title: this.$lang ? this.$lang('logoutTitle') : '提示',
content: this.$lang ? this.$lang('logoutContent') : '确定要退出登录吗',
success: (res) => {
if (res.confirm) {
this.clearLoginState();
this.$util.redirectTo(this.$util.MEMBER_PAGE_URL);
}
}
});
},
// 账号注销入口:先查状态,根据状态分流
cancellation() {
this.getCancelStatus();
},
// 查询注销状态并跳转对应页面
// status: undefined/null → 未申请 → 协议页 cancellation.vue
// status: 0 → 审核中 → 状态页 cancelstatus.vue
// status: 1 → 通过 → 成功页 cancelsuccess.vue
// status: -1 → 拒绝 → 拒绝页 cancelrefuse.vue
getCancelStatus() {
this.$api.sendRequest({
url: '/membercancel/api/membercancel/info',
success: res => {
if (res.code >= 0) {
if (res.data) {
if (res.data.status == 0) {
this.$util.redirectTo('/pages_tool/member/cancelstatus');
} else if (res.data.status == 1) {
this.$util.redirectTo('/pages_tool/member/cancelsuccess');
} else {
this.$util.redirectTo('/pages_tool/member/cancelrefuse');
}
} else {
this.$util.redirectTo('/pages_tool/member/cancellation');
}
}
}
});
},
// 提交注销申请并清理登录态(供 assets.vue 等页面调用)
submitCancelApply(options = {}) {
uni.showModal({
title: options.title || '风险提示',
content: options.content || '确定要注销当前账号吗?',
confirmColor: '#000000',
success: res => {
if (res.confirm) {
this.$api.sendRequest({
url: '/membercancel/api/membercancel/apply',
success: rres => {
if (rres.code >= 0) {
if (options.clearStateAndRedirect) {
this.clearLoginState();
this.$util.redirectTo(this.$util.MEMBER_PAGE_URL);
} else {
this.$util.redirectTo('/pages_tool/member/cancelstatus');
}
} else {
this.$util.showToast({
title: rres.message
});
}
}
});
}
}
});
}
}
};