useCrudSchemas.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <script setup lang="ts">
  2. import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas'
  3. import { useI18n } from '@/hooks/web/useI18n'
  4. import { reactive } from 'vue'
  5. import { JsonEditor } from '@/components/JsonEditor'
  6. import { ContentWrap } from '@/components/ContentWrap'
  7. import { ElRow, ElCol } from 'element-plus'
  8. const { t } = useI18n()
  9. const crudSchemas = reactive<CrudSchema[]>([
  10. {
  11. field: 'selection',
  12. search: {
  13. hidden: true
  14. },
  15. form: {
  16. hidden: true
  17. },
  18. detail: {
  19. hidden: true
  20. },
  21. table: {
  22. type: 'selection'
  23. }
  24. },
  25. {
  26. field: 'index',
  27. label: t('tableDemo.index'),
  28. type: 'index',
  29. search: {
  30. hidden: true
  31. },
  32. form: {
  33. hidden: true
  34. },
  35. detail: {
  36. hidden: true
  37. }
  38. },
  39. {
  40. field: 'title',
  41. label: t('tableDemo.title'),
  42. search: {
  43. component: 'Input'
  44. },
  45. form: {
  46. component: 'Input',
  47. colProps: {
  48. span: 24
  49. }
  50. },
  51. detail: {
  52. span: 24
  53. }
  54. },
  55. {
  56. field: 'author',
  57. label: t('tableDemo.author'),
  58. search: {
  59. hidden: true
  60. }
  61. },
  62. {
  63. field: 'display_time',
  64. label: t('tableDemo.displayTime'),
  65. search: {
  66. hidden: true
  67. },
  68. form: {
  69. component: 'DatePicker',
  70. componentProps: {
  71. type: 'datetime',
  72. valueFormat: 'YYYY-MM-DD HH:mm:ss'
  73. }
  74. }
  75. },
  76. {
  77. field: 'importance',
  78. label: t('tableDemo.importance'),
  79. search: {
  80. hidden: true
  81. },
  82. form: {
  83. component: 'Select',
  84. componentProps: {
  85. style: {
  86. width: '100%'
  87. },
  88. options: [
  89. {
  90. label: '重要',
  91. value: 3
  92. },
  93. {
  94. label: '良好',
  95. value: 2
  96. },
  97. {
  98. label: '一般',
  99. value: 1
  100. }
  101. ]
  102. }
  103. }
  104. },
  105. {
  106. field: 'pageviews',
  107. label: t('tableDemo.pageviews'),
  108. search: {
  109. hidden: true
  110. },
  111. form: {
  112. component: 'InputNumber',
  113. value: 0
  114. }
  115. },
  116. {
  117. field: 'content',
  118. label: t('exampleDemo.content'),
  119. search: {
  120. hidden: true
  121. },
  122. table: {
  123. show: false
  124. },
  125. form: {
  126. component: 'Editor',
  127. colProps: {
  128. span: 24
  129. }
  130. },
  131. detail: {
  132. span: 24
  133. }
  134. },
  135. {
  136. field: 'action',
  137. width: '260px',
  138. label: t('tableDemo.action'),
  139. search: {
  140. hidden: true
  141. },
  142. form: {
  143. hidden: true
  144. },
  145. detail: {
  146. hidden: true
  147. }
  148. }
  149. ])
  150. const { allSchemas } = useCrudSchemas(crudSchemas)
  151. </script>
  152. <template>
  153. <ContentWrap title="useCrudSchemas">
  154. <ElRow :gutter="20">
  155. <ElCol :span="24">
  156. <ContentWrap title="原始数据数据" class="mt-20px">
  157. <JsonEditor v-model="crudSchemas" />
  158. </ContentWrap>
  159. </ElCol>
  160. <ElCol :span="24">
  161. <ContentWrap title="查询组件数据结构" class="mt-20px">
  162. <JsonEditor v-model="allSchemas.searchSchema" />
  163. </ContentWrap>
  164. </ElCol>
  165. <ElCol :span="24">
  166. <ContentWrap title="表单组件数据结构" class="mt-20px">
  167. <JsonEditor v-model="allSchemas.formSchema" />
  168. </ContentWrap>
  169. </ElCol>
  170. <ElCol :span="24">
  171. <ContentWrap title="表格组件数据结构" class="mt-20px">
  172. <JsonEditor v-model="allSchemas.tableColumns" />
  173. </ContentWrap>
  174. </ElCol>
  175. <ElCol :span="24">
  176. <ContentWrap title="详情组件数据结构" class="mt-20px">
  177. <JsonEditor v-model="allSchemas.detailSchema" />
  178. </ContentWrap>
  179. </ElCol>
  180. </ElRow>
  181. </ContentWrap>
  182. </template>