BaseTemplateFunc.go 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. package util
  2. import (
  3. "strings"
  4. "text/template"
  5. )
  6. var FuncMap = template.FuncMap{
  7. "toGoType": ToGoType,
  8. "formatJsonName": FormatJsonName,
  9. "formatSqlToVueType": formatSqlToVueType,
  10. "smallHump": SmallHump,
  11. "bigHump": BigHump,
  12. "queryType": QueryType,
  13. "ElDialog": ElDialog,
  14. "ElTableColumn": ElTableColumn,
  15. }
  16. // ToGoType sql类型转go类型
  17. func ToGoType(sqlType string) string {
  18. switch sqlType {
  19. case "varchar":
  20. return "string"
  21. case "VARCHAR":
  22. return "string"
  23. case "CHAR":
  24. return "string"
  25. case "char":
  26. return "string"
  27. case "INT":
  28. return "int64"
  29. case "int":
  30. return "int64"
  31. case "decimal":
  32. return "float64"
  33. case "datetime":
  34. return "time.Time"
  35. case "longblob":
  36. return "string"
  37. default:
  38. println("未找到类型", sqlType)
  39. return "string"
  40. }
  41. }
  42. func FormatJsonName(sqlName string) string {
  43. split := strings.Split(sqlName, "_")
  44. var str = split[0]
  45. for i := 1; i < len(split); i++ {
  46. str += strings.Title(split[i])
  47. }
  48. return str
  49. }
  50. func formatSqlToVueType(str string) string {
  51. str = strings.ToLower(str)
  52. switch str {
  53. case "varchar":
  54. return "string"
  55. case "char":
  56. return "string"
  57. case "int":
  58. return "number"
  59. case "decimal":
  60. return "number"
  61. case "datetime":
  62. return "string"
  63. case "longblob":
  64. return "string"
  65. default:
  66. panic("未定义的类型:" + str)
  67. }
  68. }
  69. func BigHump(str string) string {
  70. split := strings.Split(str, "_")
  71. if len(split) == 1 {
  72. return strings.Title(str)
  73. }
  74. res := strings.Title(split[0])
  75. for i := 1; i < len(split); i++ {
  76. res += strings.Title(split[i])
  77. }
  78. return res
  79. }
  80. func SmallHump(str string) string {
  81. split := strings.Split(str, "_")
  82. if len(split) == 1 {
  83. return strings.ToLower(str[0:1]) + str[1:]
  84. }
  85. res := strings.ToLower(split[0][0:1]) + strings.ToLower(split[0][1:])
  86. for i := 1; i < len(split); i++ {
  87. res += strings.ToUpper(split[i][0:1]) + strings.ToLower(split[i][1:])
  88. }
  89. return res
  90. }
  91. func QueryType(GoType, GoField, QueryType, ColumnName, ColumnComment string) string {
  92. switch GoType {
  93. case "int":
  94. case "int64":
  95. case "float64":
  96. if QueryType == "BETWEEN" {
  97. return GoField + "Start string `xorm:" + ColumnName + " json:" + SmallHump(ColumnName) + "` // " + ColumnComment + "\n\t" +
  98. GoField + "End string `xorm:" + ColumnName + " json:" + SmallHump(ColumnName) + "` // " + ColumnComment
  99. } else {
  100. return GoField + " " + GoType + " `xorm:" + ColumnName + " json:" + SmallHump(ColumnName) + "` // " + ColumnComment
  101. }
  102. case "time.Time":
  103. if QueryType == "BETWEEN" {
  104. return GoField + "Start string `xorm:" + ColumnName + " json:" + SmallHump(ColumnName) + "` // " + ColumnComment + "\n\t" +
  105. GoField + "End string `xorm:" + ColumnName + " json:" + SmallHump(ColumnName) + "` // " + ColumnComment
  106. } else {
  107. return GoField + " string `xorm:" + ColumnName + " json:" + SmallHump(ColumnName) + "` // " + ColumnComment
  108. }
  109. case "string":
  110. default:
  111. return GoField + " string `xorm:" + ColumnName + " json:" + SmallHump(ColumnName) + "` // " + ColumnComment
  112. }
  113. return GoField + " string `xorm:" + ColumnName + " json:" + SmallHump(ColumnName) + "` // " + ColumnComment
  114. }
  115. // 输入框 input
  116. // 文本域 textarea
  117. // 下拉框 Select
  118. // 复选框 Checkbox
  119. // 单选框 Radio
  120. // 时间选择 Time
  121. // 图片上传 Image
  122. // 文件上传 File
  123. // 富文本 Editor
  124. func ElTableColumn(name, value, typeName string, dictType string) string {
  125. if typeName == "input" || typeName == "textarea" || typeName == "select" || typeName == "radio" ||
  126. typeName == "checkbox" || typeName == "time" || typeName == "text" {
  127. if dictType == "" {
  128. return "\n <el-table-column label=\"" + name + "\" align=\"center\" prop=\"" + value + "\"/>"
  129. } else {
  130. return "\n <el-table-column label=\"" + name + "\" align=\"center\" prop=\"" + value + "\">" +
  131. "\n <template #default=\"scope\">" +
  132. "\n <DictTag :dict-type=\"'" + dictType + "'\" :dict-value=\"scope.row." + value + "\"/>" +
  133. "\n </template>" +
  134. "\n </el-table-column>"
  135. }
  136. }
  137. if typeName == "image" {
  138. return "\n <el-table-column label=\"" + name + "\" align=\"center\" prop=\"" + value + "\">" +
  139. "\n <template #default=\"scope\">" +
  140. "\n <el-image :src=\"scope.row." + value + "\"></el-image>" +
  141. "\n </template>" +
  142. "\n </el-table-column>"
  143. }
  144. return "\n <el-table-column label=\"" + name + "\" align=\"center\" prop=\"" + value + "\"/>"
  145. }
  146. func ElDialog(name, value, typeName, dictType string) string {
  147. typeName = strings.ToLower(typeName)
  148. if typeName == "input" {
  149. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  150. "\n <el-input v-model=\"dialogForm." + value + "\" placeholder=\"请输入" + name + "\"/>" +
  151. "\n </el-form-item>"
  152. } else if typeName == "number" {
  153. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  154. "\n <el-input-number v-model=\"dialogForm." + value + "\" placeholder=\"请输入" + name + "\"/>" +
  155. "\n </el-form-item>"
  156. } else if typeName == "textarea" {
  157. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  158. "\n <el-input v-model=\"dialogForm." + value + "\" placeholder=\"请输入" + name + "\" type=\"textarea\"/>" +
  159. "\n </el-form-item>"
  160. } else if typeName == "select" {
  161. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  162. "\n <el-select v-model=\"dialogForm." + value + "\" placeholder=\"请选择" + name + "\">" +
  163. "\n <el-option" +
  164. "\n v-for=\"item in store.state.dicts.get('" + dictType + "')\"" +
  165. "\n :key=\"item.dictValue\"" +
  166. "\n :label=\"item.dictLabel\"" +
  167. "\n :value=\"item.dictValue\"/>" +
  168. "\n </el-select>" +
  169. "\n </el-form-item>"
  170. } else if typeName == "radio" {
  171. if dictType == "" {
  172. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  173. " <el-radio-group v-model=\"dialogForm." + value + "\">" +
  174. "\n <el-radio" +
  175. "\n v-for=\"item in [['0','否'], ['1','是']]\"" +
  176. "\n :key=\"item[0]\"" +
  177. "\n :label=\"item[0]\">" +
  178. "\n {{ item[1] }}" +
  179. "\n </el-radio>" +
  180. "\n </el-radio-group>" +
  181. "\n </el-form-item>"
  182. } else {
  183. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  184. "\n <el-radio-group v-model=\"dialogForm." + value + "\">" +
  185. "\n <el-radio" +
  186. "\n v-for=\"item in store.state.dicts.get(" + dictType + ")\"" +
  187. "\n :key=\"item.dictValue\"" +
  188. "\n :label=\"item.dictLabel\">" +
  189. "\n {{item.dictLabel}}" +
  190. "\n </el-radio>" +
  191. "\n </el-radio-group>" +
  192. "\n </el-form-item>"
  193. }
  194. } else if typeName == "checkbox" {
  195. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  196. "\n <el-checkbox-group v-model=\"dialogForm." + value + "\">" +
  197. "\n <el-checkbox :label=\"item.dictLabel\" :value=\"item.dictValue\" v-for=\"item in store.state.dicts.get('" + dictType + "')\"/>" +
  198. "\n </el-checkbox-group>" +
  199. "\n </el-form-item>"
  200. } else if typeName == "time" {
  201. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  202. " <el-date-picker v-model=\"dialogForm." + value + "\" type=\"datetime\" placeholder=\"请选择时间\" value-format=\"YYYY-MM-DD hh:mm:ss\"/>" +
  203. "\n </el-form-item>"
  204. } else if typeName == "image" {
  205. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  206. " <ImageUpload v-model:ImgUrl=\"dialogForm." + value + "\"/>" +
  207. "\n </el-form-item>"
  208. } else if typeName == "file" {
  209. } else if typeName == "editor" {
  210. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  211. " <EditorComponent v-model:htmlString=\"dialogForm." + value + "\"/>" +
  212. "\n </el-form-item>"
  213. } else if typeName == "text" {
  214. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  215. " <el-text class=\"mx-1\">{{dialogForm." + value + "}}</el-text>" +
  216. "\n </el-form-item>"
  217. }
  218. //默认的就显示文本
  219. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  220. " <el-text class=\"mx-1\">{{dialogForm." + value + "}}</el-text>" +
  221. "\n </el-form-item>"
  222. }