fieldDialog.vue 5.9 KB

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