search.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <script setup lang="ts">
  2. import FsTableSelect from '@/components/FsTableSelect/index.vue'
  3. import type { TableConfig } from '@/components/FsTableSelect/types'
  4. const data = ref('')
  5. const datas = ref('')
  6. const initValue = ref({})
  7. const initValue2 = ref<Array<any>>([])
  8. const current = ref(null)
  9. const request = function ({ pageIndex }: any) {
  10. return new Promise(resolve => {
  11. setTimeout(() => {
  12. const data = {
  13. total: 20,
  14. list: [
  15. { name: '张三' + pageIndex, sex: '男', id: '' + pageIndex + 1 },
  16. { name: '李四' + pageIndex, sex: '女', id: '' + pageIndex + 2 },
  17. { name: '王五' + pageIndex, sex: '男', id: '' + pageIndex + 3 },
  18. { name: '赵六' + pageIndex, sex: '女', id: '' + pageIndex + 4 },
  19. { name: '张三' + pageIndex, sex: '男', id: '' + pageIndex + 5 }
  20. ]
  21. }
  22. resolve(data)
  23. }, 500)
  24. })
  25. }
  26. const tableConfig: TableConfig = {
  27. column: [
  28. {
  29. title: '#',
  30. type: 'seq',
  31. width: 45,
  32. align: 'center'
  33. },
  34. {
  35. title: '姓名',
  36. field: 'name',
  37. align: 'center'
  38. },
  39. {
  40. title: '性别',
  41. align: 'center',
  42. slot: 'sex'
  43. }
  44. ],
  45. datasource: request,
  46. total: 100,
  47. pageSize: 5
  48. }
  49. const tableSelectChange = (value: any) => {
  50. current.value = value
  51. }
  52. const tableSelectClear = () => {
  53. current.value = null
  54. }
  55. const tableSelectItemClear = ({ list }: any) => {
  56. current.value = list
  57. }
  58. const tableSelectRef = ref()
  59. const tableSelectRef2 = ref()
  60. const form = ref({
  61. name: '',
  62. sex: ''
  63. })
  64. const search = () => {
  65. tableSelectRef.value.reload({ pageIndex: 1, ...form.value })
  66. }
  67. const search2 = () => {
  68. tableSelectRef2.value.reload({ pageIndex: 1, ...form.value })
  69. }
  70. const setInitValue = () => {
  71. initValue.value = { name: '张三2', sex: '男', id: '21' }
  72. initValue2.value = [
  73. { name: '李四2', sex: '女', id: '22' },
  74. { name: '王五3', sex: '男', id: '33' },
  75. { name: '王五4', sex: '男', id: '43' },
  76. { name: '赵六4', sex: '女', id: '44' }
  77. ]
  78. }
  79. </script>
  80. <template>
  81. <el-form label-width="90px">
  82. <el-row :gutter="15">
  83. <el-col :span="24">
  84. <el-form-item>
  85. <el-button type="primary" @click="setInitValue">设置回显数据</el-button>
  86. </el-form-item>
  87. </el-col>
  88. <el-col :span="6">
  89. <el-form-item label="单选" prop="name">
  90. <fs-table-select
  91. v-model="data"
  92. :tableConfig="tableConfig"
  93. :init-value="initValue"
  94. @change="tableSelectChange"
  95. @clear="tableSelectClear"
  96. @item-clear="tableSelectItemClear"
  97. ref="tableSelectRef"
  98. >
  99. <template #top-extra>
  100. <el-form :model="form" label-width="40px">
  101. <el-row :gutter="15">
  102. <el-col :span="8">
  103. <el-form-item label="姓名">
  104. <el-input placeholder="请填写姓名" :maxLength="20" v-model="form.name"></el-input>
  105. </el-form-item>
  106. </el-col>
  107. <el-col :span="8">
  108. <el-form-item label="性别" prop="sex">
  109. <el-select placeholder="请选择性别" v-model="form.sex"></el-select>
  110. </el-form-item>
  111. </el-col>
  112. <el-col :span="8">
  113. <el-button type="primary" @click="search">查询</el-button>
  114. </el-col>
  115. </el-row>
  116. </el-form>
  117. </template>
  118. <template #sex="{ row }">
  119. <el-tag size="small">{{ row.sex }}</el-tag>
  120. </template>
  121. </fs-table-select>
  122. </el-form-item>
  123. </el-col>
  124. <el-col :span="6">
  125. <el-form-item label="多选">
  126. <fs-table-select
  127. v-model="datas"
  128. :init-value="initValue2"
  129. :tableConfig="tableConfig"
  130. multiple
  131. ref="tableSelectRef2"
  132. >
  133. <template #top-extra>
  134. <el-form :model="form" label-width="40px">
  135. <el-row :gutter="15">
  136. <el-col :span="8">
  137. <el-form-item label="姓名" prop="name">
  138. <el-input placeholder="请填写姓名" :maxLength="20" v-model="form.name"></el-input>
  139. </el-form-item>
  140. </el-col>
  141. <el-col :span="8">
  142. <el-form-item label="性别" prop="sex">
  143. <el-select placeholder="请选择性别" v-model="form.sex"></el-select>
  144. </el-form-item>
  145. </el-col>
  146. <el-col :span="8">
  147. <el-button type="primary" @click="search2">查询</el-button>
  148. </el-col>
  149. </el-row>
  150. </el-form>
  151. </template>
  152. <template #sex="{ row }">
  153. <el-tag size="small">{{ row.sex }}</el-tag>
  154. </template>
  155. </fs-table-select>
  156. </el-form-item>
  157. </el-col>
  158. </el-row>
  159. </el-form>
  160. </template>
  161. <style scoped></style>