66 lines
2.1 KiB
Vue
66 lines
2.1 KiB
Vue
<template>
|
|
<view class="page">
|
|
<fy-header title="查找聊天记录" back />
|
|
<view class="search">
|
|
<input v-model="q" placeholder="搜索文字 / 文件名" confirm-type="search" focus />
|
|
</view>
|
|
<view v-if="!q.trim()" class="empty">输入关键字查找本会话记录</view>
|
|
<view v-else-if="!hits.length" class="empty">没有找到相关记录</view>
|
|
<view v-for="m in hits" :key="m.id" class="item" @click="open(m)">
|
|
<text class="who">{{ who(m) }} · {{ timeOf(m) }}</text>
|
|
<text class="txt">{{ preview(m) }}</text>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import FyHeader from '../../components/fy-header.vue'
|
|
import { store, previewOf } from '../../utils/store.js'
|
|
import { fmtTime } from '../../utils/format.js'
|
|
|
|
export default {
|
|
components: { FyHeader },
|
|
data() {
|
|
return { sid: '', q: '' }
|
|
},
|
|
computed: {
|
|
hits() {
|
|
const q = this.q.trim()
|
|
const c = store.findConv(this.sid)
|
|
if (!q || !c) return []
|
|
return (c.messages || []).filter((m) => {
|
|
if (m.recalled) return false
|
|
return String(m.text || '') .indexOf(q) >= 0 || String(m.fileName || '').indexOf(q) >= 0
|
|
}).slice(-80).reverse()
|
|
}
|
|
},
|
|
onLoad(q) {
|
|
this.sid = decodeURIComponent(q.sid || '')
|
|
},
|
|
methods: {
|
|
preview(m) { return previewOf(m) },
|
|
timeOf(m) { return fmtTime(m.time) },
|
|
who(m) {
|
|
if (m.mine) return (store.me && store.me.name) || '我'
|
|
const p = store.person(m.fromId)
|
|
const c = store.findConv(this.sid)
|
|
return (p && p.name) || (c && c.name) || '同事'
|
|
},
|
|
open(m) {
|
|
if (m.kind === 'image' && m.fileUrl) {
|
|
uni.previewImage({ urls: [m.fileUrl], current: m.fileUrl })
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.search { padding: 16rpx 24rpx; }
|
|
.search input { height: 72rpx; background: #ededed; border-radius: 8rpx; padding: 0 24rpx; }
|
|
.empty { text-align: center; color: #888; padding: 80rpx 24rpx; font-size: 26rpx; }
|
|
.item { margin: 0 24rpx; padding: 20rpx 0; border-bottom: 1rpx solid #f0f0f0; }
|
|
.who { display: block; font-size: 22rpx; color: #888; }
|
|
.txt { display: block; font-size: 28rpx; margin-top: 6rpx; }
|
|
</style>
|