index.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <template>
  2. <BasicTable
  3. ref="tableRef"
  4. @register="registerTable"
  5. rowKey="id"
  6. @selectionChange="selectionChange"
  7. :rowSelection="{ type: 'check' }"
  8. @rowDbClick="handleEdit"
  9. :canResize="true"
  10. :pagination="{
  11. pageSize: 10,
  12. defaultPageSize: 10,
  13. showSizeChanger: false,
  14. }"
  15. >
  16. <template #toolbar>
  17. <div class="tool-btn-wrap">
  18. <a-button type="primary" @click="handleAdd"> 添加 </a-button>
  19. </div>
  20. </template>
  21. <template #form-custom> custom-slot </template>
  22. </BasicTable>
  23. <Popup @register="addRegister" :popupData="popupData" @saveData="saveData" />
  24. </template>
  25. <script lang="ts">
  26. import { defineComponent, reactive, ref, toRefs, unref } from 'vue';
  27. import Popup from './popup.vue';
  28. import { useMessage } from '/@/hooks/web/useMessage';
  29. import { useModal } from '/@/components/Modal';
  30. import { getFormConfig, columns } from './data';
  31. import moment from 'moment';
  32. import { getUserList, addUser } from '/@/api/sys/member';
  33. import { BasicTable, useTable, TableActionType } from '/@/components/Table';
  34. interface PopupData {
  35. title: string;
  36. }
  37. interface Btn {
  38. disable_btn: boolean;
  39. }
  40. export default defineComponent({
  41. name: 'User',
  42. components: { BasicTable, Popup },
  43. emits: ['select'],
  44. setup(_, { emit }) {
  45. const { createMessage } = useMessage();
  46. const { success /*, error*/ } = createMessage;
  47. const tableRef = ref<Nullable<TableActionType>>(null);
  48. const popupData = reactive<PopupData>({
  49. title: '添加',
  50. });
  51. const btn = reactive<Btn>({
  52. disable_btn: true,
  53. });
  54. const [registerTable] = useTable({
  55. columns: columns,
  56. // clickToRowSelect: false, // 点击行不勾选
  57. api: getUserList,
  58. useSearchForm: true,
  59. beforeFetch: beforeFetch,
  60. showTableSetting: true,
  61. tableSetting: {
  62. redo: false,
  63. size: false,
  64. },
  65. formConfig: getFormConfig(),
  66. maxHeight: 190,
  67. showIndexColumn: false,
  68. bordered: true,
  69. });
  70. const [register, { openModal }] = useModal();
  71. const [addRegister, { openModal: openPopup }] = useModal();
  72. function getTableAction() {
  73. // 获取组件
  74. const tableAction = unref(tableRef);
  75. if (!tableAction) {
  76. throw new Error('tableAction is null');
  77. }
  78. return tableAction;
  79. }
  80. // 请求之前处理参数
  81. function beforeFetch(params) {
  82. if (!params.field && !params.order) {
  83. params.field = 'id';
  84. params.order = 'descend';
  85. }
  86. for (let k in params) {
  87. if (k !== 'page' && k !== 'pageSize' && k !== 'field' && k !== 'order' && k !== 'name') {
  88. if (params[k] === '') {
  89. delete params[k];
  90. } else {
  91. if (!params.filter) {
  92. params.filter = {};
  93. }
  94. if (params.jointime) {
  95. params.jointime = moment(params.jointime).format('YYYY-MM-DD');
  96. } else {
  97. delete params.jointime;
  98. }
  99. params.filter[k] = params[k];
  100. delete params[k];
  101. }
  102. }
  103. }
  104. params.filter = JSON.stringify(params.filter);
  105. params.offset = params.page;
  106. params.limit = params.pageSize;
  107. delete params.page;
  108. delete params.pageSize;
  109. }
  110. function handleAdd() {
  111. popupData.title = '添加会员';
  112. openPopup(true, { family: [] });
  113. }
  114. function selectionChange(evt) {
  115. console.log(`evt`, evt);
  116. emit('select', evt.rows);
  117. }
  118. async function saveData(params: any) {
  119. const data = params.data;
  120. const closeModel = params.closeModal;
  121. console.log(`data`, data);
  122. await addUser(data).then((res) => {
  123. console.log(res);
  124. getTableAction().reload();
  125. closeModel();
  126. success('创建成功!');
  127. });
  128. }
  129. return {
  130. popupData,
  131. tableRef,
  132. registerTable,
  133. handleAdd,
  134. getTableAction,
  135. selectionChange,
  136. addRegister,
  137. saveData,
  138. openModal,
  139. register,
  140. ...toRefs(btn),
  141. };
  142. },
  143. });
  144. </script>
  145. <style scoped>
  146. .ant-calendar-picker {
  147. width: 100%;
  148. }
  149. .vben-basic-table-header__toolbar {
  150. justify-content: space-between;
  151. }
  152. .tool-btn-wrap button {
  153. margin-right: 5px;
  154. }
  155. </style>