fieldDialog.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <template>
  2. <div>
  3. <span style="color:red">搜索时如果条件为LIKE只支持字符串</span>
  4. <el-form
  5. ref="fieldDialogFrom"
  6. :model="middleDate"
  7. label-width="120px"
  8. label-position="left"
  9. :rules="rules"
  10. >
  11. <el-form-item label="Field名称" prop="fieldName">
  12. <el-col :span="6">
  13. <el-input v-model="middleDate.fieldName" autocomplete="off" />
  14. </el-col>
  15. <el-col :offset="1" :span="2">
  16. <el-button size="mini" @click="autoFill">自动填充</el-button>
  17. </el-col>
  18. </el-form-item>
  19. <el-form-item label="Field中文名" prop="fieldDesc">
  20. <el-col :span="6">
  21. <el-input v-model="middleDate.fieldDesc" autocomplete="off" />
  22. </el-col>
  23. </el-form-item>
  24. <el-form-item label="FieldJSON" prop="fieldJson">
  25. <el-col :span="6">
  26. <el-input v-model="middleDate.fieldJson" autocomplete="off" />
  27. </el-col>
  28. </el-form-item>
  29. <el-form-item label="数据库字段名" prop="columnName">
  30. <el-col :span="6">
  31. <el-input v-model="middleDate.columnName" autocomplete="off" />
  32. </el-col>
  33. </el-form-item>
  34. <el-form-item label="数据库字段描述" prop="comment">
  35. <el-col :span="6">
  36. <el-input v-model="middleDate.comment" autocomplete="off" />
  37. </el-col>
  38. </el-form-item>
  39. <el-form-item label="Field数据类型" prop="fieldType">
  40. <el-col :span="8">
  41. <el-select
  42. v-model="middleDate.fieldType"
  43. placeholder="请选择field数据类型"
  44. clearable
  45. @change="getDbfdOptions"
  46. >
  47. <el-option
  48. v-for="item in typeOptions"
  49. :key="item.value"
  50. :label="item.label"
  51. :value="item.value"
  52. />
  53. </el-select>
  54. </el-col>
  55. </el-form-item>
  56. <el-form-item label="数据库字段类型" prop="dataType">
  57. <el-col :span="8">
  58. <el-select
  59. v-model="middleDate.dataType"
  60. :disabled="!middleDate.fieldType"
  61. placeholder="请选择数据库字段类型"
  62. clearable
  63. >
  64. <el-option
  65. v-for="item in dbfdOptions"
  66. :key="item.label"
  67. :label="item.label"
  68. :value="item.label"
  69. />
  70. </el-select>
  71. </el-col>
  72. </el-form-item>
  73. <el-form-item label="数据库字段长度" prop="dataTypeLong">
  74. <el-col :span="8">
  75. <el-input v-model="middleDate.dataTypeLong" placeholder="自定义类型必须指定长度" :disabled="!middleDate.dataType" />
  76. </el-col>
  77. </el-form-item>
  78. <el-form-item label="Field查询条件" prop="fieldSearchType">
  79. <el-col :span="8">
  80. <el-select v-model="middleDate.fieldSearchType" placeholder="请选择Field查询条件" clearable>
  81. <el-option
  82. v-for="item in typeSearchOptions"
  83. :key="item.value"
  84. :label="item.label"
  85. :value="item.value"
  86. />
  87. </el-select>
  88. </el-col>
  89. </el-form-item>
  90. <el-form-item label="关联字典" prop="dictType">
  91. <el-col :span="8">
  92. <el-select v-model="middleDate.dictType" :disabled="middleDate.fieldType!=='int'" placeholder="请选择字典" clearable>
  93. <el-option
  94. v-for="item in dictOptions"
  95. :key="item.type"
  96. :label="`${item.type}(${item.name})`"
  97. :value="item.type"
  98. />
  99. </el-select>
  100. </el-col>
  101. </el-form-item>
  102. </el-form>
  103. </div>
  104. </template>
  105. <script>
  106. import { getDict } from '@/utils/dictionary'
  107. import { toLowerCase, toSQLLine } from '@/utils/stringFun'
  108. import { getSysDictionaryList } from '@/api/sysDictionary'
  109. export default {
  110. name: 'FieldDialog',
  111. props: {
  112. dialogMiddle: {
  113. type: Object,
  114. default: function() {
  115. return {}
  116. }
  117. }
  118. },
  119. data() {
  120. return {
  121. middleDate: {},
  122. dbfdOptions: [],
  123. dictOptions: [],
  124. typeSearchOptions: [
  125. {
  126. label: '=',
  127. value: '='
  128. },
  129. {
  130. label: '<>',
  131. value: '<>'
  132. },
  133. {
  134. label: '>',
  135. value: '>'
  136. },
  137. {
  138. label: '<',
  139. value: '<'
  140. },
  141. {
  142. label: 'LIKE',
  143. value: 'LIKE'
  144. }
  145. ],
  146. typeOptions: [
  147. {
  148. label: '字符串',
  149. value: 'string'
  150. },
  151. {
  152. label: '整型',
  153. value: 'int'
  154. },
  155. {
  156. label: '布尔值',
  157. value: 'bool'
  158. },
  159. {
  160. label: '浮点型',
  161. value: 'float64'
  162. },
  163. {
  164. label: '时间',
  165. value: 'time.Time'
  166. }
  167. ],
  168. rules: {
  169. fieldName: [
  170. { required: true, message: '请输入field英文名', trigger: 'blur' }
  171. ],
  172. fieldDesc: [
  173. { required: true, message: '请输入field中文名', trigger: 'blur' }
  174. ],
  175. fieldJson: [
  176. { required: true, message: '请输入field格式化json', trigger: 'blur' }
  177. ],
  178. columnName: [
  179. { required: true, message: '请输入数据库字段', trigger: 'blur' }
  180. ],
  181. fieldType: [
  182. { required: true, message: '请选择field数据类型', trigger: 'blur' }
  183. ]
  184. }
  185. }
  186. },
  187. async created() {
  188. this.middleDate = this.dialogMiddle
  189. const dictRes = await getSysDictionaryList({
  190. page: 1,
  191. pageSize: 999999
  192. })
  193. this.dictOptions = dictRes.data.list
  194. },
  195. methods: {
  196. autoFill() {
  197. this.middleDate.fieldJson = toLowerCase(this.middleDate.fieldName)
  198. this.middleDate.columnName = toSQLLine(this.middleDate.fieldJson)
  199. },
  200. async getDbfdOptions() {
  201. this.middleDate.dataType = ''
  202. this.middleDate.dataTypeLong = ''
  203. this.middleDate.fieldSearchType = ''
  204. this.middleDate.dictType = ''
  205. if (this.middleDate.fieldType) {
  206. this.dbfdOptions = await getDict(this.middleDate.fieldType)
  207. }
  208. }
  209. }
  210. }
  211. </script>