147 lines
3.8 KiB
JavaScript
147 lines
3.8 KiB
JavaScript
import request from '@/utils/request'
|
||
|
||
/**
|
||
* 服务商权限检查 Mixin
|
||
* 用于需要服务商权限的页面
|
||
*/
|
||
export default {
|
||
data() {
|
||
return {
|
||
providerStatus: null, // null: 未申请, pending: 审核中, approved: 已通过, rejected: 已拒绝
|
||
isProviderChecking: false
|
||
}
|
||
},
|
||
|
||
methods: {
|
||
/**
|
||
* 检查服务商状态
|
||
* @param {Object} options 配置选项
|
||
* @param {Boolean} options.showGuide 是否显示引导(默认 true)
|
||
* @param {Boolean} options.blockAccess 是否阻止访问(默认 true)
|
||
* @returns {Promise<Boolean>} 是否有权限
|
||
*/
|
||
async checkProviderStatus(options = {}) {
|
||
const { showGuide = true, blockAccess = true } = options
|
||
|
||
if (this.isProviderChecking) {
|
||
return false
|
||
}
|
||
|
||
this.isProviderChecking = true
|
||
|
||
try {
|
||
const res = await request({
|
||
url: '/api/provider/status',
|
||
method: 'GET'
|
||
})
|
||
|
||
if (res && res.code === 200 && res.data) {
|
||
this.providerStatus = res.data.status
|
||
|
||
// 已通过认证
|
||
if (this.providerStatus === 'approved') {
|
||
return true
|
||
}
|
||
|
||
// 审核中
|
||
if (this.providerStatus === 'pending') {
|
||
if (showGuide) {
|
||
this.showPendingTip()
|
||
}
|
||
if (blockAccess) {
|
||
setTimeout(() => uni.navigateBack(), 2000)
|
||
}
|
||
return false
|
||
}
|
||
|
||
// 未申请或已拒绝
|
||
if (showGuide) {
|
||
this.showApplyGuide()
|
||
} else if (blockAccess) {
|
||
uni.navigateBack()
|
||
}
|
||
return false
|
||
}
|
||
|
||
// 接口返回错误,可能是未申请
|
||
if (res && res.code === 500 && res.message && res.message.includes('不是服务商')) {
|
||
this.providerStatus = null
|
||
if (showGuide) {
|
||
this.showApplyGuide()
|
||
} else if (blockAccess) {
|
||
uni.navigateBack()
|
||
}
|
||
return false
|
||
}
|
||
|
||
return false
|
||
} catch (error) {
|
||
console.error('检查服务商状态失败:', error)
|
||
|
||
// 网络错误,允许继续访问但提示
|
||
uni.showToast({
|
||
title: '网络错误,请稍后重试',
|
||
icon: 'none'
|
||
})
|
||
return false
|
||
} finally {
|
||
this.isProviderChecking = false
|
||
}
|
||
},
|
||
|
||
/**
|
||
* 显示申请引导
|
||
*/
|
||
showApplyGuide() {
|
||
uni.showModal({
|
||
title: '权限不足',
|
||
content: '您还不是服务商,需要先申请认证才能使用此功能',
|
||
confirmText: '去申请',
|
||
cancelText: '返回',
|
||
success: (res) => {
|
||
if (res.confirm) {
|
||
uni.redirectTo({
|
||
url: '/provider-package/pages/service-provider/apply'
|
||
})
|
||
} else {
|
||
uni.navigateBack()
|
||
}
|
||
}
|
||
})
|
||
},
|
||
|
||
/**
|
||
* 显示审核中提示
|
||
*/
|
||
showPendingTip() {
|
||
uni.showModal({
|
||
title: '审核中',
|
||
content: '您的服务商申请正在审核中,请耐心等待。审核通过后即可使用全部功能。',
|
||
showCancel: false,
|
||
confirmText: '我知道了'
|
||
})
|
||
},
|
||
|
||
/**
|
||
* 显示已拒绝提示
|
||
*/
|
||
showRejectedTip(reason) {
|
||
uni.showModal({
|
||
title: '审核未通过',
|
||
content: reason || '您的服务商申请未通过审核,请重新提交申请',
|
||
confirmText: '重新申请',
|
||
cancelText: '返回',
|
||
success: (res) => {
|
||
if (res.confirm) {
|
||
uni.redirectTo({
|
||
url: '/provider-package/pages/service-provider/apply'
|
||
})
|
||
} else {
|
||
uni.navigateBack()
|
||
}
|
||
}
|
||
})
|
||
}
|
||
}
|
||
}
|