PyWxDump/pywxdump/ui/src/components/chat/ContactsList.vue

122 lines
3.9 KiB
Vue

<script setup lang="ts">
import {defineEmits, onMounted, ref} from 'vue';
import http from '@/utils/axios.js';
import {apiUserList, apiUserSessionList} from "@/api/chat";
import UserInfoShow from "@/components/chat/components/UserInfoShow.vue";
import {gen_show_name, type User} from "@/utils/common_utils";
import {api_img} from "@/api/base";
// "wxid": strUsrName, "nOrder": nOrder, "nUnReadCount": nUnReadCount, "strNickName": strNickName,
// "nStatus": nStatus, "nIsSend": nIsSend, "strContent": strContent, "nMsgLocalID": nMsgLocalID,
// "nMsgStatus": nMsgStatus, "nTime": nTime, "nMsgType": nMsgType, "nMsgSubType": nMsgSubType,
// "nickname": NickName, "remark": Remark, "account": Alias,
// "describe": describe, "headImgUrl": bigHeadImgUrl if bigHeadImgUrl else "",
// "ExtraBuf": ExtraBuf, "LabelIDList": tuple(LabelIDList)
const tableData = ref([]);
// 初始化请求session数据 START
const fetchData = async () => {
try {
tableData.value = await apiUserSessionList();
} catch (error) {
console.error('Error fetching data:', error);
return [];
}
};
onMounted(fetchData);
// END 初始化请求session数据 END
// 搜索框以及按钮 START
const search_word = ref('');
const search = async () => {
try {
// console.log(body_data);
if (search_word.value === '') {
tableData.value = await apiUserSessionList();
return;
}
console.log(search_word.value);
tableData.value = []
const ret = await apiUserList(search_word.value);
if (ret !== null && typeof ret === 'object') {
Object.entries(ret).forEach(([key, value]) => {
tableData.value.push(value);
});
}
// for (const key in ret) {
// if (ret.hasOwnProperty(key)) {
// tableData.value.push(ret[key]);
// }
// }
} catch (error) {
console.error('Error fetching data:', error);
return [];
}
}
// END 搜索框以及按钮 END
// 处理user数据 传递给父组件 START
const emits = defineEmits(['wxid']);
const handleCurrentChange = (val: User | undefined) => {
// 触发自定义事件,并传递数据
if (val !== undefined) {
// 处理user数据
// 判断val是否有wxid
if (val.wxid !== undefined) {
console.log('wxid:', val.wxid);
emits('wxid', val.wxid);
}
}
}
// END 处理user数据 传递给父组件 END
// 生成显示的name
</script>
<template>
<div>
<!-- 搜索框以及按钮 -->
<div style="padding: 10px 10px;">
<el-input placeholder="请输入关键字" v-model="search_word" @keyup.enter="search"
style="width: 170px;margin-left: 15px;"></el-input>
<el-button type="primary" @click="search" style="width: 50px;">搜索</el-button>
</div>
<!-- 这是联系人的list -->
<el-table :data="tableData" stripe style="width: 100%" max-height="100%" height="100%" highlight-current-row loading="lazy"
@current-change="handleCurrentChange">
<el-table-column width="57">
<template v-slot="{ row }">
<el-avatar :size="33" :src="api_img(row.headImgUrl)" v-if="row.headImgUrl!==''"></el-avatar>
<el-avatar :size="33" v-else>群</el-avatar>
</template>
</el-table-column>
<el-table-column width="190">
<template v-slot="{ row }">
<el-tooltip class="item" effect="light" placement="right">
<div slot="content" class="tips">
<span>{{ gen_show_name(row) }}</span> <br>
<span v-if="row.nTime" style="color: #909399; font-size: 12px;">{{ row.nTime }}</span>
</div>
<template #content>
<user-info-show :userinfo="row" :show_all="false" style="max-width: 600px"></user-info-show>
</template>
</el-tooltip>
</template>
</el-table-column>
</el-table>
</div>
</template>
<style scoped>
/* 允许提示内容换行 */
.el-tooltip__popper .popper__content {
white-space: pre-line; /* 允许换行 */
}
</style>