list.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. <template>
  2. <div class="p-4">
  3. <BasicTable @register="registerTable">
  4. <template #toolbar>
  5. <a-button type="primary" @click="handleCreate">新增</a-button>
  6. </template>
  7. <template #avatar="{ record }">
  8. <Avatar :size="80" :src="record.avatar" />
  9. </template>
  10. <template #content="{ record }">
  11. <div v-if="record.type === 0" v-html="record.content"></div>
  12. <!-- <img v-if="record.type === 1" :src="record.content" /> -->
  13. <TableImg
  14. v-if="record.type === 1"
  15. :size="200"
  16. :simpleShow="true"
  17. :imgList="[record.content]"
  18. />
  19. </template>
  20. <template #periodTime="{ record }">
  21. <span v-if="record.startTime?.length && record.endTime?.length">
  22. <Time :value="record.startTime" mode="datetime" /> 到
  23. <Time :value="record.endTime" mode="datetime" />
  24. </span>
  25. </template>
  26. <template #createTime="{ record }">
  27. <Time :value="record.createTime" mode="datetime" />
  28. </template>
  29. <template #action="{ record }">
  30. <TableAction
  31. :actions="[
  32. {
  33. label: '查看',
  34. onClick: () => {
  35. handleView(record);
  36. },
  37. },
  38. {
  39. color: 'error',
  40. label: '删除',
  41. popConfirm: {
  42. title: '是否确认删除',
  43. confirm: handleDelete.bind(null, record),
  44. },
  45. },
  46. ]"
  47. />
  48. </template>
  49. </BasicTable>
  50. <AddModal @register="registerAddModal" @ok="reload" />
  51. </div>
  52. </template>
  53. <script lang="ts">
  54. import { defineComponent } from 'vue';
  55. import {
  56. BasicTable,
  57. useTable,
  58. BasicColumn,
  59. FormProps,
  60. TableAction,
  61. TableImg,
  62. } from '/@/components/Table';
  63. import { useMessage } from '/@/hooks/web/useMessage';
  64. import { uploadApi } from '/@/api/sys/upload';
  65. import { useModal } from '/@/components/Modal';
  66. import { listApi, deleteNoticeApi } from '/@/api/notification/list';
  67. import { useI18n } from '/@/hooks/web/useI18n';
  68. import { useGo } from '/@/hooks/web/usePage';
  69. import { Avatar } from 'ant-design-vue';
  70. import { Time } from '/@/components/Time';
  71. import AddModal from './addModal.vue';
  72. export default defineComponent({
  73. components: { BasicTable, TableAction, Avatar, Time, AddModal, TableImg },
  74. setup() {
  75. const { createMessage } = useMessage();
  76. const go = useGo();
  77. const { t } = useI18n();
  78. const [registerAddModal, { openModal: openAddModal }] = useModal();
  79. const columns: BasicColumn[] = [
  80. {
  81. title: 'ID',
  82. dataIndex: 'id',
  83. fixed: 'left',
  84. width: 60,
  85. },
  86. {
  87. title: '名称',
  88. dataIndex: 'title',
  89. // sorter: true,
  90. width: 160,
  91. },
  92. {
  93. title: '内容',
  94. dataIndex: 'content',
  95. slots: { customRender: 'content' },
  96. // sorter: true,
  97. width: 160,
  98. },
  99. {
  100. title: '持续时间',
  101. dataIndex: 'periodTime',
  102. slots: { customRender: 'periodTime' },
  103. // sorter: true,
  104. width: 120,
  105. },
  106. {
  107. title: '发布时间',
  108. dataIndex: 'createTime',
  109. slots: { customRender: 'createTime' },
  110. // sorter: true,
  111. width: 120,
  112. },
  113. {
  114. title: '操作',
  115. dataIndex: '',
  116. slots: { customRender: 'action' },
  117. fixed: 'right',
  118. width: 80,
  119. },
  120. ];
  121. const searchForm: Partial<FormProps> = {
  122. labelWidth: 100,
  123. schemas: [
  124. {
  125. field: 'title',
  126. label: '名称',
  127. component: 'Input',
  128. componentProps: {
  129. maxLength: 100,
  130. },
  131. colProps: {
  132. xl: 5,
  133. xxl: 5,
  134. },
  135. },
  136. ],
  137. };
  138. const [registerTable, { reload }] = useTable({
  139. title: '消息列表',
  140. api: listApi,
  141. columns: columns,
  142. useSearchForm: true,
  143. formConfig: searchForm,
  144. showTableSetting: true,
  145. tableSetting: { fullScreen: true },
  146. showIndexColumn: false,
  147. rowKey: 'id',
  148. pagination: { pageSize: 20 },
  149. bordered: true,
  150. fetchSetting: {
  151. pageField: 'page',
  152. sizeField: 'limit',
  153. listField: 'list',
  154. totalField: 'totalCount',
  155. },
  156. });
  157. function handleCreate(): void {
  158. // openAddModal();
  159. openAddModal(true, { isView: false });
  160. }
  161. function handleView(record: Recordable): void {
  162. openAddModal(true, { ...record, isView: true });
  163. }
  164. async function handleDelete(record: Recordable) {
  165. const data = await deleteNoticeApi({
  166. id: record.id,
  167. });
  168. createMessage.success(t('common.optSuccess'));
  169. reload();
  170. console.log('data', data);
  171. }
  172. return {
  173. registerTable,
  174. createMessage,
  175. t,
  176. go,
  177. uploadApi: uploadApi as any,
  178. handleCreate,
  179. reload,
  180. registerAddModal,
  181. openAddModal,
  182. handleDelete,
  183. handleView,
  184. };
  185. },
  186. });
  187. </script>