SmartMyMessageListView.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <template>
  2. <div class="full-height page-container">
  3. <SmartTable @register="registerTable" :size="getTableSize">
  4. <template #table-operation="{ row }">
  5. <SmartVxeTableAction :actions="getActions(row)" />
  6. </template>
  7. </SmartTable>
  8. <SystemMessageShowModal @register="registerShowMessage" />
  9. </div>
  10. </template>
  11. <script setup lang="ts">
  12. import {
  13. ActionItem,
  14. SmartTable,
  15. SmartVxeTableAction,
  16. useSmartTable,
  17. } from '@/components/SmartTable';
  18. import { useI18n } from '@/hooks/web/useI18n';
  19. import { useSizeSetting } from '@/hooks/setting/UseSizeSetting';
  20. import { getTableColumns, getSearchFormSchemas } from './SmartMyMessageListView.config';
  21. import { pageCurrentUserMessageApi, markAsReadApi } from './SmartMyMessageListView.api';
  22. import { createConfirm, successMessage, warnMessage } from '@/utils/message/SystemNotice';
  23. import SystemMessageShowModal from '../../components/SystemMessageShowModal.vue';
  24. import { useModal } from '@/components/Modal';
  25. const { t } = useI18n();
  26. const { getTableSize } = useSizeSetting();
  27. const [registerShowMessage, { openModal: openShowModal }] = useModal();
  28. const getActions = (row: Recordable): ActionItem[] => {
  29. return [
  30. {
  31. label: t('common.button.look'),
  32. onClick: () => openShowModal(true, { id: row.messageId }),
  33. },
  34. ];
  35. };
  36. /**
  37. * 标记已读
  38. */
  39. const handleMarkRead = () => {
  40. const selectRows = getCheckboxRecords(false);
  41. const parameter: any = {};
  42. if (selectRows.length === 0) {
  43. parameter.markAll = true;
  44. } else {
  45. const noReadList = selectRows.filter((item) => item.readYn === false);
  46. if (noReadList.length === 0) {
  47. warnMessage({
  48. message: t('smart.message.smartMyMessage.message.noRead'),
  49. });
  50. return false;
  51. }
  52. parameter.markAll = false;
  53. parameter.messageIdList = noReadList.map((item) => item.id);
  54. }
  55. createConfirm({
  56. iconType: 'warning',
  57. content: t('smart.message.smartMyMessage.message.confirmMarkRead'),
  58. onOk: async () => {
  59. await markAsReadApi(parameter);
  60. successMessage(t('smart.message.smartMyMessage.message.markReadSuccess'));
  61. query();
  62. },
  63. });
  64. };
  65. const [registerTable, { getCheckboxRecords, query }] = useSmartTable({
  66. id: 'smart-message-smart-my-message',
  67. columns: getTableColumns(t),
  68. border: true,
  69. height: 'auto',
  70. sortConfig: {
  71. remote: true,
  72. },
  73. columnConfig: {
  74. resizable: true,
  75. },
  76. checkboxConfig: {
  77. highlight: true,
  78. },
  79. pagerConfig: true,
  80. showOverflow: 'tooltip',
  81. useSearchForm: true,
  82. searchFormConfig: {
  83. compact: true,
  84. schemas: getSearchFormSchemas(t),
  85. searchWithSymbol: true,
  86. colon: true,
  87. autoSubmitOnEnter: true,
  88. layout: 'inline',
  89. actionColOptions: {
  90. span: undefined,
  91. },
  92. },
  93. toolbarConfig: {
  94. zoom: true,
  95. column: {
  96. columnOrder: true,
  97. },
  98. refresh: true,
  99. buttons: [
  100. {
  101. name: t('smart.message.smartMyMessage.button.markRead'),
  102. customRender: 'ant',
  103. props: {
  104. preIcon: 'ant-design:highlight-outlined',
  105. type: 'primary',
  106. onClick: handleMarkRead,
  107. },
  108. },
  109. ],
  110. },
  111. proxyConfig: {
  112. ajax: {
  113. query: ({ ajaxParameter }) => {
  114. return pageCurrentUserMessageApi(ajaxParameter);
  115. },
  116. },
  117. },
  118. });
  119. </script>
  120. <style scoped lang="less"></style>