backup: kefu state before examiner-add feature on ExaminerManage

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-06-28 00:31:26 +08:00
parent a7f7bd0c39
commit b161077400
53 changed files with 6254 additions and 567 deletions

View File

@@ -305,6 +305,8 @@
:disabled="!hasMemberPermission"
>添加会员</el-button>
</div>
<div v-if="!hasMemberPermission" class="member-hint warn">需要 001ff 或超级管理权限</div>
<div v-else class="member-hint">添加/移除会员请在弹窗点确认与顶部保存无关</div>
</template>
<div class="member-list">
<div v-for="member in memberList" :key="member.id" class="member-item">
@@ -335,6 +337,14 @@
<span class="copyable" @click="copyText(playerInfo.yaoqingren)">
{{ playerInfo.yaoqingren || '--' }} <el-icon><CopyDocument /></el-icon>
</span>
<el-button
v-if="canChangeInviter"
type="primary"
link
size="small"
style="margin-left: 8px"
@click="openInviterDialog"
>更换邀请人</el-button>
</el-descriptions-item>
<el-descriptions-item label="介绍">
<el-tooltip v-if="playerInfo.jieshao" :content="playerInfo.jieshao" placement="top">
@@ -348,6 +358,23 @@
</el-row>
</div>
<!-- 更换邀请人弹窗 -->
<el-dialog v-model="inviterDialogVisible" title="更换打手邀请人" width="420px">
<el-form label-width="100px">
<el-form-item label="当前邀请人">
<span>{{ playerInfo.yaoqingren || '无' }}</span>
</el-form-item>
<el-form-item label="新邀请人ID" required>
<el-input v-model="newInviterId" placeholder="请输入管事用户ID7位" maxlength="7" />
<div class="form-tip">新邀请人必须是已存在的管事用户</div>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="inviterDialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitChangeInviter" :loading="inviterChanging">确认更换</el-button>
</template>
</el-dialog>
<!-- 添加会员弹窗 -->
<el-dialog v-model="memberDialogVisible" title="添加会员" width="400px">
<el-form :model="memberForm" label-width="80px">
@@ -404,8 +431,63 @@ const memberAdding = ref(false)
const userPermissions = ref([])
const isGoldTitle = computed(() => playerInfo.value.chenghao === '金牌选手')
const hasMemberPermission = computed(() => userPermissions.value.includes('001ff') || userPermissions.value.includes('001gg'))
const hasMemberPermission = computed(() =>
userPermissions.value.includes('000001') ||
userPermissions.value.includes('001ff') ||
userPermissions.value.includes('001gg')
)
const hasChenghaoPermission = computed(() => userPermissions.value.includes('001hh'))
const canChangeInviter = computed(() => userPermissions.value.includes('001ee') || userPermissions.value.includes('000001'))
const inviterDialogVisible = ref(false)
const newInviterId = ref('')
const inviterChanging = ref(false)
const openInviterDialog = () => {
newInviterId.value = ''
inviterDialogVisible.value = true
}
const submitChangeInviter = async () => {
const newId = newInviterId.value.trim()
if (!newId) {
ElMessage.warning('请输入新邀请人ID')
return
}
if (newId === playerId.value) {
ElMessage.warning('不能将自己设为邀请人')
return
}
try {
await ElMessageBox.confirm(
`确认将打手 ${playerId.value} 的邀请人更换为 ${newId}?新上级必须是管事。`,
'确认更换',
{ type: 'warning' }
)
} catch { return }
inviterChanging.value = true
try {
const res = await request.post('/houtai/htghyqr', {
username: username.value,
yonghuid: playerId.value,
target_type: 'dashou',
new_yaoqingren: newId
})
if (res.code === 0) {
ElMessage.success('邀请人更换成功')
inviterDialogVisible.value = false
await fetchDetail()
} else {
ElMessage.error(res.msg || '更换失败')
}
} catch (e) {
console.error(e)
ElMessage.error('更换失败')
} finally {
inviterChanging.value = false
}
}
// 辅助函数
const getFullImageUrl = (url) => {
@@ -448,7 +530,10 @@ const fetchDetail = async () => {
})
if (res.code === 0) {
const data = res.data
playerInfo.value = data.user_info || {}
playerInfo.value = {
...(data.user_info || {}),
create_time: data.user_info?.create_time || data.user_info?.CreateTime || '',
}
originalInfo.value = JSON.parse(JSON.stringify(playerInfo.value))
memberList.value = data.member_list || []
allMembers.value = data.all_members || []
@@ -569,6 +654,13 @@ const handleChenghaoChange = async () => {
// 添加会员
const openMemberDialog = () => {
if (!hasMemberPermission.value) {
ElMessage.warning('无添加会员权限(需要 001ff 或超级管理)')
return
}
if (allMembers.value.length === 0) {
ElMessage.warning('会员类型列表为空,请刷新页面后重试')
}
memberForm.huiyuan_id = ''
memberForm.days = 30
memberDialogVisible.value = true
@@ -655,6 +747,14 @@ onMounted(() => {
text-align: center;
padding: 20px;
}
.member-hint {
font-size: 12px;
color: #909399;
margin-bottom: 8px;
}
.member-hint.warn {
color: #e6a23c;
}
/* 其余样式保持不变(从原代码复制) */
@@ -810,4 +910,9 @@ onMounted(() => {
font-size: 20px;
}
}
.form-tip {
font-size: 12px;
color: #909399;
margin-top: 4px;
}
</style>