tableSelect.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <template>
  2. <PageWrapper
  3. title="表格选择器"
  4. content="选择器增强,用于展示多列数据表格选择器,可实现单选/多选,还能配置表单查询,项目实测,还是挺实用的"
  5. >
  6. <el-card :bordered="false" class="mt-3 proCard">
  7. <el-alert title="单选" type="info"> 这是一个看起来像多选的单选效果,试试看吧 </el-alert>
  8. <div class="mt-3">
  9. <el-space align="center">
  10. <TableSelect
  11. ref="TableSelectRef"
  12. labelField="name"
  13. valueField="id"
  14. placeholder="请选择内容(单选)"
  15. :tableProps="{
  16. rowKey: 'id',
  17. request: loadDataTable,
  18. columns: columns,
  19. }"
  20. @change="tableSelectChange"
  21. />
  22. </el-space>
  23. </div>
  24. </el-card>
  25. <el-card :bordered="false" class="mt-3 proCard">
  26. <el-alert title="多选" type="info" class="mt-3">
  27. 这个看起来,真的像多选,实际也是多选效果哈
  28. </el-alert>
  29. <div class="mt-3">
  30. <el-space align="center">
  31. <TableSelect
  32. ref="TableSelectRef"
  33. labelField="name"
  34. valueField="id"
  35. placeholder="请选择内容(多选)"
  36. :multiple="true"
  37. :tableProps="{
  38. rowKey: 'id',
  39. request: loadDataTable,
  40. columns: columns,
  41. }"
  42. @change="tableSelectChange"
  43. @form-values-change="formChange"
  44. />
  45. </el-space>
  46. </div>
  47. </el-card>
  48. <el-card :bordered="false" class="mt-3 proCard">
  49. <el-alert title="多选" type="info"> 支持配置表单,搜索查询,多选 </el-alert>
  50. <div class="mt-3">
  51. <el-space align="center">
  52. <TableSelect
  53. ref="TableSelectRef"
  54. labelField="name"
  55. valueField="id"
  56. placeholder="请选择内容(多选)"
  57. :multiple="true"
  58. :formProps="formPropsOption"
  59. :tableProps="{
  60. rowKey: 'id',
  61. request: loadDataTable,
  62. columns: columns,
  63. }"
  64. @change="tableSelectChange"
  65. @form-values-change="formChange"
  66. />
  67. </el-space>
  68. </div>
  69. </el-card>
  70. </PageWrapper>
  71. </template>
  72. <script lang="ts" setup>
  73. import { ref } from 'vue';
  74. import { TableSelect } from '@/components/TableSelect';
  75. import { getTableList } from '@/api/table/list';
  76. import { columns } from './basicColumns';
  77. import { FormSchema } from '@/components/Form/index';
  78. const schemas: FormSchema[] = [
  79. {
  80. field: 'name',
  81. labelMessage: '这是一个提示',
  82. component: 'Input',
  83. label: '名称',
  84. componentProps: {
  85. placeholder: '请输入名称',
  86. onInput: (e: any) => {
  87. console.log(e);
  88. },
  89. },
  90. rules: [{ message: '请输入名称', trigger: ['blur'] }],
  91. },
  92. ];
  93. const formPropsOption = {
  94. layout: 'horizontal',
  95. colProps: { span: 12 },
  96. schemas,
  97. };
  98. const formParams = ref({});
  99. const loadDataTable = async (res) => {
  100. return await getTableList({ ...formParams.value, ...res });
  101. };
  102. function tableSelectChange(list) {
  103. console.log('list', list);
  104. }
  105. function formChange(values) {
  106. formParams.value = values;
  107. }
  108. </script>