feat: 视频号

This commit is contained in:
huxuejian 2026-04-17 14:53:17 +08:00
parent f8ff13639d
commit 47c255157a
2 changed files with 73 additions and 0 deletions

View File

@ -84,6 +84,7 @@ import { storeToRefs } from "pinia";
import dayjs from "dayjs";
import api from "@/utils/api.js";
import useAccountStore from "@/store/account.js";
import { toast } from "@/utils/widget.js";
import fullPage from "@/components/full-page.vue";
import EmptyData from "@/components/empty-data.vue";
@ -138,6 +139,7 @@ const mapRowToView = (row) => {
person: row?.customer?.name || "",
team: row?.team?.name || "-",
time: sendTime,
articleInfo: row?.articleInfo,
};
};
@ -196,8 +198,50 @@ const loadArticleList = async (reset = false) => {
function goToDetail(item) {
if (!item?.articleId) return;
if (isWechatChannels(item.articleInfo)) {
uni.openChannelsActivity({
finderUserName: item.articleInfo.wechatChannels.finderUserName,
feedId: item.articleInfo.wechatChannels.feedId,
success: () => {
markArticleRead(item._id);
},
fail: err => {
const errMsg = err.errMsg || '';
if (/cancel/i.test(errMsg)) {
return
}
toast(`打开视频号失败:${errMsg}`)
}
})
return
}
uni.navigateTo({ url: `/pages/article/article-detail?sendId=${item._id}&id=${item.articleId}&corpId=${corpId.value}` });
}
function isWechatChannels(item) {
return item?.wechatChannels?.finderUserName && item?.wechatChannels?.feedId;
}
async function markArticleRead(sendId) {
const unionid = account.value?.unionid;
if (!unionid || !articleId) return;
try {
const { success } = await api(
"addArticleReadRecord",
{ corpId: corpId.value, articleId, unionid, sendId },
false
);
if (success) {
const idx = articles.value.findIndex(i => i._id === sendId);
if (idx !== -1) {
articles.value[idx].status = "YES";
}
}
} catch (err) {
console.warn("markArticleRead failed:", err?.message || err);
}
};
onLoad(opts => {
corpId.value = opts.corpId;
teamId.value = opts.teamId;

View File

@ -78,6 +78,7 @@
<script setup>
import { computed } from "vue";
import { getParsedCustomMessage } from "@/utils/chat-utils.js";
import { toast } from '@/utils/widget'
// import MessageCard from "./message-card/message-card.vue";
const props = defineProps({
@ -98,6 +99,15 @@ const isPlaying = computed(() => {
return props.playingVoiceId === props.message.ID;
});
const payloadData = computed(() => {
try {
return JSON.parse(props.message.payload.data);
} catch (e) {
return {}
}
})
//
const getImageStyle = (imageInfo) => {
// 使
@ -195,6 +205,20 @@ const getArticleData = (message) => {
//
const handleArticleClick = (message) => {
if (isWechatChannels()) {
uni.openChannelsActivity({
finderUserName: payloadData.value.wechatChannels.finderUserName,
feedId: payloadData.value.wechatChannels.feedId,
fail: err => {
const errMsg = err.errMsg || '';
if (/cancel/i.test(errMsg)) {
return
}
toast(`打开视频号失败:${errMsg}`)
}
})
return
}
const { articleId, sendId } = getArticleData(message);
uni.navigateTo({
url: `/pages/article/article-detail?id=${articleId}&sendId=${sendId || ''}&corpId=${props.corpId}`,
@ -244,6 +268,11 @@ const handleSurveyClick = (message) => {
})
}
};
function isWechatChannels() {
const wechatChannels = payloadData.value.wechatChannels || {};
return typeof wechatChannels.finderUserName === 'string' && wechatChannels.finderUserName.trim() && typeof wechatChannels.feedId === 'string' && wechatChannels.feedId.trim();
}
</script>
<style scoped lang="scss">