ykt-team-wxapp/pages/archive/archive-result.vue

143 lines
4.5 KiB
Vue
Raw Normal View History

2026-02-04 09:16:36 +08:00
<template>
<full-page mainClass="bg-white">
<template #header>
<view class="mb-10 py-30 flex items-center justify-center bg-white shadow-lg">
<icon class="mr-5" type="success" size="24" />
<view class="text-lg font-semibold">建档成功</view>
</view>
</template>
<view v-if="friends.length" class="px-15">
<view class="py-12 text-base tont-semibold text-dark">
您可以加以下人员为好友, 随时提供一对一服务
</view>
<template v-if="friends.length > 1">
<view v-for="i in friends" :key="i.userid"
class="flex items-center mb-10 overflow-hidden border-primary rounded" @click="toFriend(i.userid)">
<view class="flex-shrink-0 p-10">
<image class="avatar" :src="i.avatar || '/static/default-avatar.png'"></image>
</view>
<view class="flex-grow w-0 py-10 align-stretch">
<view class="truncate">
<text class="mr-5 text-lg text-dark font-semibold">{{ i.anotherName }}</text>
<text class="text-base text-gray"> {{ memberJob[i.userid] }}</text>
</view>
<view class="mt-5 text-base line-clamp-2 leading-normal">
{{ i.memberTroduce || '暂无简介' }}
</view>
</view>
<view class="px-15 flex items-center align-stretch bg-primary text-base text-white text-center">
加好友
</view>
</view>
</template>
<template v-else-if="friends.length === 1 && qrcode">
<view class="mt-15 px-15">
<view class="flex">
<image class="mr-10 avatar" :src="member.avatar || '/static/default-avatar.png'"></image>
<view class="w-0 flex-grow leading-normal">
<view class="flex items-center">
<view class="mr-5 text-lg font-semibold text-dark">{{ member.anotherName }}</view>
<view class="text-base text-warning">@企业微信</view>
</view>
<view class="truncate text-base text-dark">{{ memberJob[member.userid] }}</view>
</view>
</view>
<view class="mt-12 border-primary qrcode p-15 mx-auto rounded" @click="previewImage()">
2026-02-08 16:15:24 +08:00
<image v-if="qrcode" class="h-full w-full" :show-menu-by-longpress="true" :src="qrcode"></image>
2026-02-04 09:16:36 +08:00
</view>
<view class="mt-12 text-base text-center text-dark">
2026-02-08 16:15:24 +08:00
长按识别二维码加我为好友
2026-02-04 09:16:36 +08:00
</view>
</view>
</template>
</view>
</full-page>
</template>
<script setup>
import { computed, ref, watch } from 'vue';
import { storeToRefs } from 'pinia';
import useGuard from '@/hooks/useGuard';
import useJob from '@/hooks/useJob';
import useAccount from '@/store/account';
import api from '@/utils/api';
import FullPage from '@/components/full-page.vue';
const team = ref(null);
const { useLoad } = useGuard();
const { account } = storeToRefs(useAccount());
const { memberJob, memberList: list } = useJob();
const qrcode = ref('');
const friends = computed(() => {
const memberList = Array.isArray(team.value?.memberList) ? team.value.memberList : [];
const friendlyMembers = Array.isArray(team.value?.friendlyMembers) ? team.value.friendlyMembers : [];
return memberList.filter(i => i && i.userid && friendlyMembers.includes(i.userid))
})
const member = computed(() => friends.value[0])
function previewImage() {
if (!qrcode.value) return;
uni.previewImage({
urls: [qrcode.value]
})
}
function toFriend(userid) {
uni.navigateTo({ url: `/pages/team/friend?corpId=${account.value?.corpId}&userid=${userid}` })
}
async function getQrcode(userid) {
const res = await api('addContactWay', { corpUserId: userid, corpId: account.value?.corpId, unionid: account.value?.openid });
if (res && res.data) {
qrcode.value = res.data;
}
}
async function getTeam(corpId, teamId) {
const res = await api('getTeamData', { teamId, corpId });
if (res && res.data) {
team.value = res.data;
} else {
toast(res?.message || '获取团队信息失败')
}
}
useLoad(options => {
if (options.teamId && options.corpId) {
getTeam(options.corpId, options.teamId);
}
})
watch(friends, n => {
list.value = Array.isArray(n) ? n : [];
if (n.length === 1) {
getQrcode(n[0].userid)
}
}, { immediate: true })
</script>
<style>
.py-30 {
padding-top: 60rpx;
padding-bottom: 60rpx
}
.avatar {
width: 120rpx;
height: 128rpx;
}
.align-stretch {
align-self: stretch
}
.mt-5 {
margin-top: 10rpx
}
.qrcode {
width: 560rpx;
height: 560rpx;
}
</style>