Files
api-client/src/views/spring/user/viewRecord/index.vue
zzc 911a182143
All checks were successful
continuous-integration/drone/tag Build is passing
fix: share token
2026-02-10 01:25:49 +08:00

267 lines
8.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="view-record-container">
<vab-query-form>
<!-- <vab-query-form-left-panel :span="12"> -->
<!-- <el-button icon="el-icon-plus" type="primary" @click="handleEdit">添加</el-button> -->
<!-- <el-button icon="el-icon-delete" type="danger" @click="handleDelete">批量删除</el-button> -->
<!-- </vab-query-form-left-panel> -->
<vab-query-form-left-panel :span="12">
<el-form :inline="true" :model="queryForm" @submit.native.prevent>
<el-form-item>
<el-input v-model.trim="queryForm.userId" clearable placeholder="请输入查询条件" />
</el-form-item>
<el-form-item>
<el-select v-model="queryForm.scene" clearable placeholder="请选择浏览场景" @change="queryData">
<el-option label="祝福卡片" value="card_generate" />
<el-option label="抽签" value="fortune_draw" />
<el-option label="壁纸" value="wallpaper_download" />
<el-option label="头像" value="avatar_download" />
</el-select>
</el-form-item>
<el-form-item>
<el-button icon="el-icon-search" type="primary" @click="queryData">查询</el-button>
</el-form-item>
</el-form>
</vab-query-form-left-panel>
</vab-query-form>
<el-table v-loading="listLoading" :data="list" :element-loading-text="elementLoadingText" @selection-change="setSelectRows">
<el-table-column align="center" label="浏览内容" width="100">
<template slot-scope="scope">
<el-tooltip class="item" :content="scope.row.id" effect="dark" placement="top">
<el-image
fit="cover"
:preview-src-list="[scope.row?.detail?.imageUrl]"
:src="getThumbUrl(scope.row?.detail?.imageUrl)"
style="width: 50px; height: 50px"
/>
</el-tooltip>
</template>
</el-table-column>
<el-table-column align="center" label="浏览类型" show-overflow-tooltip>
<template #default="{ row }">
{{ getSceneName(row.scene) }}
</template>
</el-table-column>
<el-table-column align="left" label="信息" show-overflow-tooltip>
<template #default="{ row }">
<div>
<div>
<strong>shareToken</strong>
<template v-if="row.shareToken">
<el-link type="primary" :underline="false" @click="goToShareRecord(row.shareToken)">{{ row.shareToken }}</el-link>
</template>
<template v-else>--</template>
</div>
<div>
<strong>是否是作者</strong>
{{ row.isOwner ? '是' : '否' }}
</div>
<div>
<strong>设备</strong>
<template v-if="row.deviceId">
<el-link type="primary" :underline="false" @click="goToDevice(row.deviceId)">{{ row.deviceModel || row.deviceId }}</el-link>
</template>
<template v-else>--</template>
</div>
<div>
<strong>查看地址</strong>
{{ row.address }}
</div>
</div>
</template>
</el-table-column>
<el-table-column align="left" label="查看人" show-overflow-tooltip>
<template #default="{ row }">
<div v-if="row.userId" class="author-cell">
<img alt="avatar" class="author-avatar" :src="getThumbUrl(row?.fromUser?.avatar)" />
<div class="author-meta">
<div>
<strong>id</strong>
{{ row?.fromUser?.id || '--' }}
</div>
<div>
<strong>昵称</strong>
{{ row?.fromUser?.nickname || '--' }}
</div>
</div>
</div>
<span v-else>未登录用户</span>
</template>
</el-table-column>
<el-table-column align="center" label="查看时间" show-overflow-tooltip>
<template #default="{ row }">
{{ formatTime(row.createdAt) }}
</template>
</el-table-column>
<!-- <el-table-column label="操作" show-overflow-tooltip width="200">
<template #default="{ row }">
<el-button type="text" @click="handleEdit(row)">编辑</el-button>
<el-button type="text" @click="handleDelete(row)">删除</el-button>
</template>
</el-table-column> -->
</el-table>
<el-pagination
background
:current-page="queryForm.pageNo"
:layout="layout"
:page-size="queryForm.pageSize"
:total="total"
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
/>
</div>
</template>
<script>
import { getViewList } from '@/api/spring/user'
import { formatTime } from '@/utils'
import { getSceneName, getThumbUrl } from '@/utils/blessing'
export default {
name: 'ViewRecord',
data() {
return {
host: 'https://file.lihailezzc.com/',
list: null,
listLoading: true,
layout: 'total, sizes, prev, pager, next, jumper',
total: 0,
selectRows: '',
elementLoadingText: '正在加载...',
queryForm: {
pageNo: 1,
pageSize: 10,
scene: '',
keyword: '',
userId: '',
},
timeOutID: null,
}
},
created() {
if (this.$route.query.userId) {
this.queryForm.userId = this.$route.query.userId
}
this.fetchData()
},
beforeDestroy() {
clearTimeout(this.timeOutID)
},
methods: {
formatTime,
getSceneName,
getThumbUrl,
setSelectRows(val) {
this.selectRows = val
},
handleEdit(row) {
if (row.id) {
this.$refs['edit'].showEdit(row)
} else {
this.$refs['edit'].showEdit()
}
},
handleDelete(row) {
if (row.id) {
this.$baseConfirm('你确定要删除当前项吗', null, async () => {
const { msg } = await doDelete({ ids: [row.id] })
this.$baseMessage(msg, 'success')
this.fetchData()
})
} else {
if (this.selectRows.length > 0) {
const ids = this.selectRows.map((item) => item.id).join()
this.$baseConfirm('你确定要删除选中项吗', null, async () => {
const { msg } = await doDelete({ ids: ids.split(',') })
this.$baseMessage(msg, 'success')
this.fetchData()
})
} else {
this.$baseMessage('未选中任何行', 'error')
return false
}
}
},
handleSizeChange(val) {
this.queryForm.pageSize = val
this.fetchData()
},
handleCurrentChange(val) {
this.queryForm.pageNo = val
this.fetchData()
},
queryData() {
this.queryForm.pageNo = 1
this.fetchData()
},
goToShareRecord(shareToken) {
this.$router.push({ path: '/spring/user/shareRecord', query: { keyword: shareToken } })
},
goToDevice(deviceId) {
this.$router.push({ path: '/spring/user/userChat', query: { deviceId } })
},
goToTemplate(templateId) {
this.$router.push({ path: '/spring/blessing/template', query: { templateId } })
},
goToContentTemplate(templateId) {
this.$router.push({ path: '/spring/blessing/contentTemplate', query: { templateId } })
},
async fetchData() {
this.listLoading = true
const { data } = await getViewList(this.queryForm)
this.list = data.list
this.total = data.totalCount
this.timeOutID = setTimeout(() => {
this.listLoading = false
}, 300)
},
},
}
</script>
<style scoped>
.author-option {
display: flex;
align-items: center;
}
.author-avatar {
width: 24px;
height: 24px;
border-radius: 50%;
object-fit: cover;
margin-right: 8px;
}
.author-name {
font-size: 14px;
}
.author-cell {
display: flex;
align-items: center;
gap: 12px;
}
.author-avatar {
width: 50px;
height: 50px;
object-fit: cover;
border-radius: 50%;
}
.author-meta {
display: flex;
flex-direction: column;
}
.image-grid {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.grid-image {
width: 80px;
height: 80px;
object-fit: cover;
border-radius: 8px;
}
</style>