columnInfo.vue 4.5 KB

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