错误处理
This commit is contained in:
parent
243a8e32e4
commit
a556577599
@ -3,8 +3,8 @@ VITE_NODE_ENV=development
|
||||
VITE_API_BASE_URL=https://api.likeichat.com
|
||||
VITE_APP_TITLE=Likei H5 (Development)
|
||||
|
||||
# 普通用户
|
||||
VITE_USER_AUTH=EB4BAD4C6439CF503B16267C712F5AB6.djIlM0ExOTU3MzQ1MzEyOTYxNTI3ODA5JTNBTElLRUklM0ExNzU4Mjc4MDEzNzQ0JTNBMTc1NTY4NjAxMzc0NA==
|
||||
# 普通用户 8826602
|
||||
#VITE_USER_AUTH=EB4BAD4C6439CF503B16267C712F5AB6.djIlM0ExOTU3MzQ1MzEyOTYxNTI3ODA5JTNBTElLRUklM0ExNzU4Mjc4MDEzNzQ0JTNBMTc1NTY4NjAxMzc0NA==
|
||||
|
||||
# 代理用户 8826603
|
||||
# VITE_USER_AUTH=747E27BE38B21A129CE41BB1F80EA924.djIlM0ExOTU3MzU2MTM4NTIzMDY2MzY5JTNBTElLRUklM0ExNzU4MDk3MDg4NDA0JTNBMTc1NTUwNTA4ODQwNA==
|
||||
VITE_USER_AUTH=747E27BE38B21A129CE41BB1F80EA924.djIlM0ExOTU3MzU2MTM4NTIzMDY2MzY5JTNBTElLRUklM0ExNzU4MDk3MDg4NDA0JTNBMTc1NTUwNTA4ODQwNA==
|
||||
|
||||
@ -20,10 +20,10 @@ export const getTeamMembers = async (teamId) => {
|
||||
* @param {string} memberId - 成员ID
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export const deleteMember = async (memberId) => {
|
||||
export const deleteMember = async (ids) => {
|
||||
try {
|
||||
const response = await post('/team-member/client/removeMemberTeam', {
|
||||
memberId: memberId
|
||||
ids: ids
|
||||
})
|
||||
return response
|
||||
} catch (error) {
|
||||
|
||||
@ -29,7 +29,7 @@ export function userBankCheckTransfer() {
|
||||
* @returns {Promise} 返回用户角色和权限信息
|
||||
*/
|
||||
export function userSalaryCheckExchange() {
|
||||
return get('/wallet/salary-diamond/check/exchange-gold')
|
||||
return get('/wallet/bank/check/exchange-gold')
|
||||
}
|
||||
|
||||
// 获取用户银行卡余额-兑换金币
|
||||
|
||||
@ -7,7 +7,13 @@
|
||||
<div class="user-card">
|
||||
<div class="user-info">
|
||||
<div class="avatar">
|
||||
<span>{{ userInfo.name.charAt(0) }}</span>
|
||||
<img
|
||||
v-if="userInfo.userAvatar"
|
||||
:src="userInfo.userAvatar"
|
||||
:alt="userInfo.name"
|
||||
@error="handleImageError"
|
||||
/>
|
||||
<span v-else class="avatar-placeholder">{{ getAvatarPlaceholder() }}</span>
|
||||
</div>
|
||||
<div class="user-details">
|
||||
<h3>{{ userInfo.name }}</h3>
|
||||
@ -155,8 +161,8 @@ import { ref, reactive, onMounted } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import MobileHeader from '../components/MobileHeader.vue'
|
||||
import { get } from '../utils/http.js'
|
||||
import {getBankBalance} from "@/api/wallet.js";
|
||||
import {getTeamId} from "@/utils/userStore.js";
|
||||
import {getBankBalance, getTeamEntry} from "@/api/wallet.js";
|
||||
import {getTeamId, setUserInfo} from "@/utils/userStore.js";
|
||||
import {showError} from "@/utils/toast.js";
|
||||
|
||||
const router = useRouter()
|
||||
@ -179,6 +185,7 @@ const salaryInfo = reactive({
|
||||
|
||||
// 用户信息
|
||||
const userInfo = reactive({
|
||||
userAvatar: '',
|
||||
name: 'User1',
|
||||
id: '1234567890'
|
||||
})
|
||||
@ -251,6 +258,17 @@ const fetchTeamMemberCount = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
const fetchTeamEntry = async () => {
|
||||
const response = await getTeamEntry()
|
||||
const member = response.body.memberProfile
|
||||
if (member) {
|
||||
// 更新用户信息显示
|
||||
userInfo.name = member.userNickname
|
||||
userInfo.id = member.account
|
||||
userInfo.userAvatar = member.userAvatar
|
||||
}
|
||||
}
|
||||
|
||||
// 获取银行余额
|
||||
const fetchBankBalance = async () => {
|
||||
|
||||
@ -271,8 +289,23 @@ const fetchBankBalance = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
// 处理头像图片加载失败
|
||||
const handleImageError = (event) => {
|
||||
// 图片加载失败时,清空userAvatar,显示占位符
|
||||
userInfo.userAvatar = ''
|
||||
}
|
||||
|
||||
// 获取头像占位符(用户名首字母)
|
||||
const getAvatarPlaceholder = () => {
|
||||
if (userInfo.name && userInfo.name.length > 0) {
|
||||
return userInfo.name.charAt(0).toUpperCase()
|
||||
}
|
||||
return 'U' // 默认显示 'U'
|
||||
}
|
||||
|
||||
// 组件挂载时获取数据
|
||||
onMounted(() => {
|
||||
fetchTeamEntry()
|
||||
fetchTeamMemberCount()
|
||||
fetchBankBalance()
|
||||
})
|
||||
@ -316,6 +349,21 @@ onMounted(() => {
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
margin-right: 12px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.avatar img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
border-radius: 25px;
|
||||
}
|
||||
|
||||
.avatar .avatar-placeholder {
|
||||
color: white;
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.user-details {
|
||||
|
||||
@ -53,7 +53,7 @@ import { ref, reactive, onMounted } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import MobileHeader from '../components/MobileHeader.vue'
|
||||
import { getBankBalance, userSalaryCheckExchange, userBankExchangeGold } from '../api/wallet.js'
|
||||
import { showError } from "@/utils/toast.js";
|
||||
import {showError, showWarning} from "@/utils/toast.js";
|
||||
|
||||
const router = useRouter()
|
||||
|
||||
@ -126,7 +126,7 @@ const checkUserRole = async () => {
|
||||
// 处理特定错误情况
|
||||
if (error.errorCode === 1083) {
|
||||
// NOT_OPEN_ERROR
|
||||
showError('Exchange function is not available')
|
||||
showWarning('Exchange NOT_OPEN_ERROR')
|
||||
} else if (error.message && error.message.includes('HTTP Error: 406')) {
|
||||
// 处理 406 Not Acceptable 状态码
|
||||
showError('The server cannot produce a response matching the list of acceptable values defined in the request headers')
|
||||
@ -211,8 +211,8 @@ const selectCoin = (coin) => {
|
||||
|
||||
// 页面加载时获取银行余额
|
||||
onMounted(() => {
|
||||
fetchBankBalance()
|
||||
checkUserRole()
|
||||
fetchBankBalance()
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@ -15,16 +15,17 @@
|
||||
|
||||
<div class="user-info">
|
||||
<div class="avatar">
|
||||
<span>{{ (userInfo.userNickname || userInfo.name).charAt(0) }}</span>
|
||||
<img
|
||||
v-if="userInfo.userAvatar"
|
||||
:src="userInfo.userAvatar"
|
||||
:alt="userInfo.name"
|
||||
@error="handleImageError"
|
||||
/>
|
||||
<span v-else class="avatar-placeholder">{{ getAvatarPlaceholder() }}</span>
|
||||
</div>
|
||||
<div class="user-details">
|
||||
<h3>{{ userInfo.userNickname || userInfo.name }}</h3>
|
||||
<p>ID: {{ userInfo.account || userInfo.id }}</p>
|
||||
<!-- 显示系统信息 -->
|
||||
<p v-if="headerInfo.sysOrigin" class="system-info">
|
||||
{{ headerInfo.sysOrigin }}
|
||||
<span v-if="headerInfo.appVersion"> v{{ headerInfo.appVersion }}</span>
|
||||
</p>
|
||||
</div>
|
||||
<button class="notification-btn" @click="goToNotification">
|
||||
<span>✏️</span>
|
||||
@ -250,6 +251,7 @@ const fetchWorkStatistics = async () => {
|
||||
const userInfo = reactive({
|
||||
name: 'User1',
|
||||
id: '1234567890',
|
||||
userAvatar: '',
|
||||
userNickname: 'User1',
|
||||
account: '1234567890'
|
||||
})
|
||||
@ -303,6 +305,7 @@ const fetchTeamEntry = async () => {
|
||||
// 更新用户信息显示
|
||||
userInfo.userNickname = response.body.memberProfile.userNickname
|
||||
userInfo.account = response.body.memberProfile.account
|
||||
userInfo.userAvatar = response.body.memberProfile.userAvatar
|
||||
}
|
||||
|
||||
// 获取用户ID后检查身份
|
||||
@ -380,6 +383,19 @@ const checkUserIdentity = async (userId) => {
|
||||
}
|
||||
}
|
||||
|
||||
// 处理头像图片加载失败
|
||||
const handleImageError = (event) => {
|
||||
// 图片加载失败时,清空userAvatar,显示占位符
|
||||
userInfo.userAvatar = ''
|
||||
}
|
||||
|
||||
// 获取头像占位符(用户名首字母)
|
||||
const getAvatarPlaceholder = () => {
|
||||
if (userInfo.name && userInfo.name.length > 0) {
|
||||
return userInfo.name.charAt(0).toUpperCase()
|
||||
}
|
||||
return 'U' // 默认显示 'U'
|
||||
}
|
||||
|
||||
const exchangeGoldCoins = () => {
|
||||
router.push('/exchange-gold-coins')
|
||||
@ -484,6 +500,21 @@ onMounted(async () => {
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
margin-right: 12px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.avatar img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
border-radius: 25px;
|
||||
}
|
||||
|
||||
.avatar .avatar-placeholder {
|
||||
color: white;
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.user-details {
|
||||
|
||||
@ -54,7 +54,7 @@ import MobileHeader from '../components/MobileHeader.vue'
|
||||
import { getApplyRecord } from '../api/teamBill.js'
|
||||
import { processUserApply } from '../api/wallet.js'
|
||||
import {getTeamId} from "@/utils/userStore.js";
|
||||
import {showError} from "@/utils/toast.js";
|
||||
import {showError, showSuccess, showWarning} from "@/utils/toast.js";
|
||||
|
||||
const router = useRouter()
|
||||
const loading = ref(false)
|
||||
@ -111,18 +111,18 @@ const handleAgree = async (message) => {
|
||||
})
|
||||
|
||||
if (response.status) {
|
||||
showError(`已同意 ${message.name} 的申请`)
|
||||
showSuccess(`Approved ${message.name}'s application`)
|
||||
// 从列表中移除
|
||||
const index = messages.value.findIndex(m => m.id === message.id)
|
||||
if (index > -1) {
|
||||
messages.value.splice(index, 1)
|
||||
}
|
||||
} else {
|
||||
showError('操作失败,请重试')
|
||||
showError('Operation failed, please try again')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('同意申请失败:', error)
|
||||
showError('操作失败,请重试')
|
||||
showError('Operation failed, please try again')
|
||||
}
|
||||
}
|
||||
|
||||
@ -135,18 +135,18 @@ const handleRefuse = async (message) => {
|
||||
})
|
||||
|
||||
if (response.status) {
|
||||
showError(`已拒绝 ${message.name} 的申请`)
|
||||
showWarning(`Rejected ${message.name}'s application`)
|
||||
// 从列表中移除
|
||||
const index = messages.value.findIndex(m => m.id === message.id)
|
||||
if (index > -1) {
|
||||
messages.value.splice(index, 1)
|
||||
}
|
||||
} else {
|
||||
showError('操作失败,请重试')
|
||||
showError('Operation failed, please try again')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('拒绝申请失败:', error)
|
||||
showError('操作失败,请重试')
|
||||
showError('Operation failed, please try again')
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -32,14 +32,14 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button
|
||||
<!-- <button
|
||||
class="delete-btn"
|
||||
@click="handleDeleteMember(member)"
|
||||
:disabled="deletingMemberId === member.id"
|
||||
>
|
||||
<span v-if="deletingMemberId === member.id">⏳</span>
|
||||
<span v-else>🗑️</span>
|
||||
</button>
|
||||
</button>-->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -147,7 +147,7 @@ const confirmDelete = async () => {
|
||||
deletingMemberId.value = memberToDelete.value.id
|
||||
|
||||
// 调用删除成员的API接口
|
||||
await deleteMemberApi(memberToDelete.value.id)
|
||||
await deleteMemberApi([memberToDelete.value.id])
|
||||
|
||||
// 从列表中移除成员
|
||||
const index = members.value.findIndex(m => m.id === memberToDelete.value.id)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user