eefe32b7创建于 2025年7月13日历史提交
<template>
  <a-list item-layout="horizontal" :data-source="messageList">
    <template #loadMore>
      <div
        v-if="messageList && messageList.length > 0 && !loadEndStatus && !loadingMoreStatus"
        :style="{ textAlign: 'center', marginTop: '12px', height: '32px', lineHeight: '32px' }"
      >
        <a-button @click="onLoadMore">加载更多</a-button>
      </div>
      <div
        v-if="messageList && messageList.length > 0 && loadEndStatus"
        :style="{ textAlign: 'center', marginTop: '12px', height: '32px', lineHeight: '32px' }"
      >
        没有更多了
      </div>
    </template>

    <template #renderItem="{ item }">
      <a-list-item>
        <template #actions>
          <a-rate :value="item.star_flag == '1' ? 1 : 0" :count="1" @click="clickStar(item)" style="cursor: pointer" disabled />
        </template>

        <a-list-item-meta :description="item.create_time">
          <template #title>
            <div style="position: relative">
              <!--   <span style="display: inline-block; position: absolute; left: -16px">
                <exclamation-outlined v-if="noRead(item)" title="未读消息" style="color: red" />
              </span>-->

              <span>{{ getMsgCategory(item) }}</span>
              <span v-if="item.bus_type == 'bpm'" class="bpm-cuiban-content" v-html="item.msgContent"> </span>
              <a-tooltip v-else>
                <template #title>
                  <div v-html="item.msg_content"></div>
                </template>
                {{ item.title }}
              </a-tooltip>

              <a @click="showMessageDetail(item)" style="margin-left: 16px">查看详情</a>
            </div>
          </template>
          <template #avatar>
            <template v-if="item.bus_type == 'email'">
              <a-badge dot v-if="noRead(item)" class="msg-no-read">
                <a-avatar style="background: #79919d"><mail-outlined style="font-size: 16px" title="未读消息" /></a-avatar>
              </a-badge>
              <a-avatar v-else style="background: #79919d"><mail-outlined style="font-size: 16px" /></a-avatar>
            </template>

            <template v-else-if="item.bus_type == 'bpm_task'">
              <a-badge dot v-if="noRead(item)" class="msg-no-read">
                <a-avatar style="background: #79919d"><interaction-outlined style="font-size: 16px" title="未读消息" /></a-avatar>
              </a-badge>
              <a-avatar v-else style="background: #79919d"><interaction-outlined style="font-size: 16px" /></a-avatar>
            </template>

            <template v-else-if="item.bus_type == 'bpm'">
              <a-badge dot v-if="noRead(item)" class="msg-no-read">
                <a-avatar style="background: #79919d"><alert-outlined style="font-size: 16px" title="未读消息" /></a-avatar>
              </a-badge>
              <a-avatar v-else style="background: #79919d"><alert-outlined style="font-size: 16px" /></a-avatar>
            </template>

            <template v-else>
              <a-badge dot v-if="noRead(item)" class="msg-no-read">
                <a-avatar style="background: #79919d"><bell-filled style="font-size: 16px" title="未读消息" /></a-avatar>
              </a-badge>
              <a-avatar v-else style="background: #79919d"><bell-filled style="font-size: 16px" /></a-avatar>
            </template>
          </template>
        </a-list-item-meta>
      </a-list-item>
    </template>
  </a-list>
</template>

<script>
  import {
    FilterOutlined,
    CloseOutlined,
    BellFilled,
    ExclamationOutlined,
    MailOutlined,
    InteractionOutlined,
    AlertOutlined,
  } from '@ant-design/icons-vue';
  import { useSysMessage, useMessageHref } from './useSysMessage';

  export default {
    name: 'SysMessageList',
    components: {
      FilterOutlined,
      CloseOutlined,
      BellFilled,
      ExclamationOutlined,
      MailOutlined,
      InteractionOutlined,
      AlertOutlined,
    },
    props: {
      star: {
        type: Boolean,
        default: false,
      },
    },
    emits: ['close', 'detail'],
    setup(props, { emit }) {
      const { messageList, loadEndStatus, loadingMoreStatus, onLoadMore, noRead, getMsgCategory, searchParams, reset, loadData, updateStarMessage } =
        useSysMessage();

      function reload(params) {
        let { fromUser, rangeDateKey, rangeDate } = params;
        searchParams.fromUser = fromUser || '';
        searchParams.rangeDateKey = rangeDateKey || '';
        searchParams.rangeDate = rangeDate || [];
        if (props.star === true) {
          searchParams.starFlag = '1';
        } else {
          searchParams.starFlag = '';
        }
        reset();
        loadData();
      }

      function clickStar(item) {
        console.log(item);
        updateStarMessage(item);
        if (item.star_flag === '1') {
          item.star_flag = '0';
        } else {
          item.star_flag = '1';
        }
      }

      const { goPage } = useMessageHref(emit);

      function showMessageDetail(record) {
        record.read_flag = 1;
        console.log('ck666', record);
        goPage(record);
        emit('close', record.send_id);
      }

      return {
        messageList,
        loadEndStatus,
        loadingMoreStatus,
        onLoadMore,
        noRead,
        getMsgCategory,
        reload,
        clickStar,
        showMessageDetail,
      };
    },
  };
</script>

<style scoped lang="less">
  .msg-no-read {
    ::v-deep .ant-badge-dot {
      top: 5px;
      right: 3px;
    }
  }
  ::v-deep .bpm-cuiban-content p {
    display: inherit;
    margin-bottom: 0;
    margin-top: 0;
  }
</style>