feat: feishu alert

This commit is contained in:
zzc
2026-06-24 23:15:47 +08:00
parent 0ef2b697a3
commit bb819d07a1
9 changed files with 153 additions and 306 deletions

View File

@@ -27,25 +27,7 @@
<el-table-column align="left" label="用户信息" min-width="180">
<template #default="{ row }">
<div v-if="row.user" class="user-info-cell">
<el-image
v-if="row.user.avatar"
class="user-avatar"
:preview-src-list="[row.user.avatar]"
:src="getThumbUrl(row.user.avatar)"
/>
<div v-else class="user-avatar-placeholder"><i class="el-icon-user" /></div>
<div class="user-details">
<div class="user-nickname">
{{ row.user.nickname || '未知用户' }}
<el-tag v-if="row.user.isRobot" size="mini" style="margin-left: 4px" type="info">机器人</el-tag>
<el-tag v-else size="mini" style="margin-left: 4px" type="success">真人</el-tag>
</div>
</div>
</div>
<div v-else class="user-details">
<div class="user-id">{{ row.userId }}</div>
</div>
<user-info :user="row.user" :user-id="row.userId" />
</template>
</el-table-column>
@@ -78,9 +60,11 @@
import { getCommentList, toggleEnable } from '@/api/rating/pk'
import { formatTime } from '@/utils'
import { getThumbUrl } from '@/utils/blessing'
import UserInfo from '@/components/UserInfo'
export default {
name: 'CommentReplyList',
components: { UserInfo },
data() {
return {
title: '回复列表',
@@ -188,46 +172,4 @@
.meta-item i {
margin-right: 4px;
}
.user-info-cell {
display: flex;
align-items: center;
}
.user-avatar,
.user-avatar-placeholder {
width: 32px;
height: 32px;
border-radius: 50%;
margin-right: 8px;
flex-shrink: 0;
}
.user-avatar-placeholder {
background-color: #f0f2f5;
display: flex;
align-items: center;
justify-content: center;
color: #909399;
font-size: 16px;
}
.user-details {
display: flex;
flex-direction: column;
overflow: hidden;
}
.user-nickname {
font-weight: bold;
color: #303133;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.user-id {
font-size: 12px;
color: #909399;
}
</style>

View File

@@ -79,26 +79,7 @@
<el-table-column align="left" label="用户信息" min-width="200">
<template #default="{ row }">
<div v-if="row.user" class="user-info-cell">
<el-image
v-if="row.user.avatar"
class="user-avatar"
:preview-src-list="[row.user.avatar]"
:src="getThumbUrl(row.user.avatar)"
/>
<div v-else class="user-avatar-placeholder"><i class="el-icon-user" /></div>
<div class="user-details">
<div class="user-nickname">
{{ row.user.nickname || '未知用户' }}
<el-tag v-if="row.user.isRobot" size="mini" style="margin-left: 4px" type="info">机器人</el-tag>
<el-tag v-else size="mini" style="margin-left: 4px" type="success">真人</el-tag>
</div>
<div class="user-id">{{ row.user.id }}</div>
</div>
</div>
<div v-else class="user-details">
<div class="user-id">{{ row.userId }}</div>
</div>
<user-info :user="row.user" :user-id="row.userId" />
</template>
</el-table-column>
@@ -135,13 +116,14 @@
import { getCommentList, toggleEnable, getList as getPkList } from '@/api/rating/pk'
import { formatTime } from '@/utils'
import { getThumbUrl } from '@/utils/blessing'
import UserInfo from '@/components/UserInfo'
import PkCommentEdit from './components/PkCommentEdit'
import PkCommentLikeEdit from './components/PkCommentLikeEdit'
import CommentReplyList from './components/CommentReplyList'
export default {
name: 'PkComment',
components: { PkCommentEdit, PkCommentLikeEdit, CommentReplyList },
components: { PkCommentEdit, PkCommentLikeEdit, CommentReplyList, UserInfo },
directives: {
loadmore: {
bind(el, binding) {
@@ -330,47 +312,4 @@
font-weight: bold;
color: #303133;
}
.user-info-cell {
display: flex;
align-items: center;
}
.user-avatar,
.user-avatar-placeholder {
width: 40px;
height: 40px;
border-radius: 50%;
margin-right: 12px;
flex-shrink: 0;
}
.user-avatar-placeholder {
background-color: #f0f2f5;
display: flex;
align-items: center;
justify-content: center;
color: #909399;
font-size: 20px;
}
.user-details {
display: flex;
flex-direction: column;
overflow: hidden;
}
.user-nickname {
font-weight: bold;
color: #303133;
margin-bottom: 4px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.user-id {
font-size: 12px;
color: #909399;
}
</style>

View File

@@ -3,14 +3,7 @@
<el-table v-loading="listLoading" :data="list" :element-loading-text="elementLoadingText">
<el-table-column align="left" label="投票用户" min-width="150">
<template #default="{ row }">
<div class="user-info-cell">
<el-image v-if="row.avatar" class="user-avatar" :preview-src-list="[row.avatar]" :src="getThumbUrl(row.avatar)" />
<div v-else class="user-avatar-placeholder"><i class="el-icon-user" /></div>
<div class="user-details">
<div class="user-nickname">{{ row.nickname || '未知用户' }}</div>
<div class="user-id">{{ row.id }}</div>
</div>
</div>
<user-info :user="row" :user-id="row.id" />
</template>
</el-table-column>
</el-table>
@@ -30,9 +23,11 @@
<script>
import { getParticipantList } from '@/api/rating/pk'
import { getThumbUrl } from '@/utils/blessing'
import UserInfo from '@/components/UserInfo'
export default {
name: 'PkParticipantList',
components: { UserInfo },
data() {
return {
title: '投票用户列表',
@@ -87,47 +82,3 @@
},
}
</script>
<style scoped>
.user-info-cell {
display: flex;
align-items: center;
}
.user-avatar,
.user-avatar-placeholder {
width: 36px;
height: 36px;
border-radius: 50%;
margin-right: 10px;
flex-shrink: 0;
}
.user-avatar-placeholder {
background-color: #f0f2f5;
display: flex;
align-items: center;
justify-content: center;
color: #909399;
font-size: 18px;
}
.user-details {
display: flex;
flex-direction: column;
overflow: hidden;
}
.user-nickname {
font-weight: bold;
color: #303133;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.user-id {
font-size: 12px;
color: #909399;
}
</style>