| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- <template>
- <view class="text_message_container bg_container" style="position: relative; overflow: visible;">
- <view class="msg_arrow" :class="isSender ? 'msg_arrow_right' : 'msg_arrow_left'"></view>
- <mp-html
- @linktap="navigate"
- @ready="onHtmlReady"
- :previewImg="false"
- :showImgMenu="false"
- :lazyLoad="true"
- :copyLink="false"
- :selectable="false"
- :content="getContent">
- <!-- 纯文本占位:在 mp-html 完成解析前,先展示可读内容 -->
- <text class="plain_text">{{ getPlainText }}</text>
- </mp-html>
- <!-- {{getContent}} -->
- <!-- <u-parse :imgOptions="false" @navigate="navigate" :content="getContent" /> -->
- </view>
- </template>
- <script>
- import { parseBr } from "../../../../../util/common";
- import { parseAt, parseLink } from "../../../../../util/imCommon";
- import { MessageType } from "openim-uniapp-polyfill";
- export default {
- name: "TextMessageRender",
- components: {},
- props: {
- message: Object,
- isSender: {
- type: Boolean,
- default: false
- }
- },
- computed: {
- getContent() {
- if (this.message.contentType === MessageType.QuoteMessage) {
- return this.message.quoteElem.text;
- }
- if (this.message.contentType === MessageType.AtTextMessage) {
- return parseAt(this.message.atTextElem);
- }
- return parseLink(parseBr(this.message.textElem?.content));
- },
- // 纯文本占位内容:不做富文本解析,保证首屏立即可见
- getPlainText() {
- if (this.message.contentType === MessageType.QuoteMessage) {
- return this.message.quoteElem.text || '';
- }
- if (this.message.contentType === MessageType.AtTextMessage) {
- // 第二个参数设为 true,返回纯文本而非链接
- return parseAt(this.message.atTextElem, true) || '';
- }
- return this.message.textElem?.content || '';
- }
- },
- data() {
- return {};
- },
- methods: {
- navigate(link) {
- // console.log(link);
- if (link.innerText.includes("@")) {
- this.$emit("showInfo", link.href);
- }
- },
- onHtmlReady() {
- this.$emit('htmlReady', this.message?.clientMsgID);
- }
- },
- };
- </script>
- <style lang="scss" scoped>
- .plain_text {
- white-space: pre-wrap;
- word-break: break-word;
- }
- .msg_arrow {
- width: 0;
- height: 0;
- border-top: 12rpx solid transparent;
- border-bottom: 12rpx solid transparent;
- position: absolute;
- top: 22rpx;
- }
- .msg_arrow_left {
- left: -14rpx;
- border-right: 16rpx solid #ffffff;
- }
- .msg_arrow_right {
- right: -14rpx;
- border-left: 16rpx solid #95EC69;
- }
- </style>
|