columnInfo.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <template>
  2. <ProTable
  3. ref="proTable"
  4. :max-height="tableHeight"
  5. :pagination="false"
  6. :data="tableData"
  7. :tool-button="false"
  8. :columns="columns"
  9. row-key="columnId"
  10. />
  11. </template>
  12. <script lang="tsx" name="ColumnInfo" setup>
  13. import { ref, reactive, defineProps } from 'vue'
  14. import ProTable from '@/components/ProTable/index.vue'
  15. import { ProTableInstance, ColumnProps } from '@/components/ProTable/interface'
  16. export interface TableProps {
  17. tableData: any[] // 表格数据
  18. dictOptions: any[] // 字典数据
  19. }
  20. const prop = withDefaults(defineProps<TableProps>(), {
  21. tableData: () => [],
  22. dictOptions: () => []
  23. })
  24. const tableHeight = document.documentElement.scrollHeight - 300 + 'px'
  25. // ProTable 实例
  26. const proTable = ref<ProTableInstance>()
  27. const columns = reactive<ColumnProps<any>[]>([
  28. { type: 'index', label: '序号', width: 60, fixed: 'left' },
  29. { prop: 'columnName', label: '字段列名' },
  30. {
  31. prop: 'columnComment',
  32. label: '字段描述',
  33. width: 120,
  34. render: scope => {
  35. return (
  36. <div>
  37. <el-input vModel_trim={scope.row.columnComment} />
  38. </div>
  39. )
  40. }
  41. },
  42. { prop: 'columnType', width: 120, label: '物理类型' },
  43. {
  44. prop: 'javaType',
  45. label: 'Java类型',
  46. width: 120,
  47. render: scope => {
  48. return (
  49. <div>
  50. <el-input vModel_trim={scope.row.javaType} />
  51. </div>
  52. )
  53. }
  54. },
  55. {
  56. prop: 'javaField',
  57. label: 'Java属性',
  58. width: 120,
  59. render: scope => {
  60. return (
  61. <div>
  62. <el-input vModel_trim={scope.row.javaField} />
  63. </div>
  64. )
  65. }
  66. },
  67. {
  68. prop: 'isInsert',
  69. label: '插入',
  70. width: 60,
  71. render: scope => {
  72. return (
  73. <div>
  74. <el-checkbox vModel_trim={scope.row.isInsert} true-value="1" false-value="0" />
  75. </div>
  76. )
  77. }
  78. },
  79. {
  80. prop: 'isEdit',
  81. label: '编辑',
  82. width: 60,
  83. render: scope => {
  84. return (
  85. <div>
  86. <el-checkbox vModel_trim={scope.row.isEdit} true-value="1" false-value="0" />
  87. </div>
  88. )
  89. }
  90. },
  91. {
  92. prop: 'isList',
  93. label: '列表',
  94. width: 60,
  95. render: scope => {
  96. return (
  97. <div>
  98. <el-checkbox vModel_trim={scope.row.isList} true-value="1" false-value="0" />
  99. </div>
  100. )
  101. }
  102. },
  103. {
  104. prop: 'isQuery',
  105. label: '查询',
  106. width: 60,
  107. render: scope => {
  108. return (
  109. <div>
  110. <el-checkbox vModel_trim={scope.row.isQuery} true-value="1" false-value="0" />
  111. </div>
  112. )
  113. }
  114. },
  115. {
  116. prop: 'queryType',
  117. label: '查询方式',
  118. width: 120,
  119. render: scope => {
  120. return (
  121. <div>
  122. <el-select vModel_trim={scope.row.queryType}>
  123. <el-option label="=" value="EQ" />
  124. <el-option label="!=" value="NE" />
  125. <el-option label=">" value="GT" />
  126. <el-option label=">=" value="GTE" />
  127. <el-option label="<" value="LT" />
  128. <el-option label="<=" value="LTE" />
  129. <el-option label="LIKE" value="LIKE" />
  130. <el-option label="BETWEEN" value="BETWEEN" />
  131. </el-select>
  132. </div>
  133. )
  134. }
  135. },
  136. {
  137. prop: 'isRequired',
  138. label: '必填',
  139. width: 60,
  140. render: scope => {
  141. return (
  142. <div>
  143. <el-checkbox vModel_trim={scope.row.isRequired} true-value="1" false-value="0" />
  144. </div>
  145. )
  146. }
  147. },
  148. {
  149. prop: 'htmlType',
  150. label: '显示类型',
  151. width: 120,
  152. render: scope => {
  153. return (
  154. <div>
  155. <el-select vModel_trim={scope.row.htmlType}>
  156. <el-option label="文本框" value="input" />
  157. <el-option label="文本域" value="textarea" />
  158. <el-option label="下拉框" value="select" />
  159. <el-option label="单选框" value="radio" />
  160. <el-option label="复选框" value="checkbox" />
  161. <el-option label="日期控件" value="datetime" />
  162. <el-option label="图片上传" value="imageUpload" />
  163. <el-option label="文件上传" value="fileUpload" />
  164. <el-option label="富文本控件" value="editor" />
  165. </el-select>
  166. </div>
  167. )
  168. }
  169. },
  170. {
  171. prop: 'dictType',
  172. label: '字典类型',
  173. width: 150,
  174. render: scope => {
  175. return (
  176. <div>
  177. <el-select vModel_trim={scope.row.dictType}>
  178. {prop.dictOptions.map((item, index) => (
  179. <el-option key={index} label={item.dictName} value={item.dictType} />
  180. ))}
  181. </el-select>
  182. </div>
  183. )
  184. }
  185. }
  186. ])
  187. </script>