BaseTemplateFunc.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  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. "ElFrom": ElFrom,
  15. "ElTableColumn": ElTableColumn,
  16. "ToLower": strings.ToLower,
  17. }
  18. // ToGoType sql类型转go类型
  19. func ToGoType(sqlType string) string {
  20. switch sqlType {
  21. case "varchar":
  22. return "string"
  23. case "VARCHAR":
  24. return "string"
  25. case "CHAR":
  26. return "string"
  27. case "char":
  28. return "string"
  29. case "INT":
  30. return "int64"
  31. case "int":
  32. return "int64"
  33. case "decimal":
  34. return "float64"
  35. case "datetime":
  36. return "time.Time"
  37. case "longblob":
  38. return "string"
  39. default:
  40. println("未找到类型", sqlType)
  41. return "string"
  42. }
  43. }
  44. func FormatJsonName(sqlName string) string {
  45. split := strings.Split(sqlName, "_")
  46. var str = split[0]
  47. for i := 1; i < len(split); i++ {
  48. str += strings.Title(split[i])
  49. }
  50. return str
  51. }
  52. func formatSqlToVueType(str string) string {
  53. str = strings.ToLower(str)
  54. switch str {
  55. case "varchar":
  56. return "string"
  57. case "char":
  58. return "string"
  59. case "int":
  60. return "number"
  61. case "decimal":
  62. return "number"
  63. case "datetime":
  64. return "string"
  65. case "longblob":
  66. return "string"
  67. default:
  68. panic("未定义的类型:" + str)
  69. }
  70. }
  71. func BigHump(str string) string {
  72. split := strings.Split(str, "_")
  73. if len(split) == 1 {
  74. return strings.Title(str)
  75. }
  76. res := strings.Title(split[0])
  77. for i := 1; i < len(split); i++ {
  78. res += strings.Title(split[i])
  79. }
  80. return res
  81. }
  82. func SmallHump(str string) string {
  83. split := strings.Split(str, "_")
  84. if len(split) == 1 {
  85. return strings.ToLower(str[0:1]) + str[1:]
  86. }
  87. res := strings.ToLower(split[0][0:1]) + strings.ToLower(split[0][1:])
  88. for i := 1; i < len(split); i++ {
  89. res += strings.ToUpper(split[i][0:1]) + strings.ToLower(split[i][1:])
  90. }
  91. return res
  92. }
  93. func QueryType(GoType, GoField, QueryType, ColumnName, ColumnComment string) string {
  94. if GoType == "int" || GoType == "int64" || GoType == "float64" {
  95. if QueryType == "BETWEEN" {
  96. return GoField + "Start " + GoType + " `xorm:\"" + ColumnName + "\" json:\"" + SmallHump(ColumnName) + "\"` // " + ColumnComment + "\n\t" +
  97. GoField + "End " + GoType + " `xorm:\"" + ColumnName + "\" json:\"" + SmallHump(ColumnName) + "\"` // " + ColumnComment
  98. } else {
  99. return GoField + " " + GoType + " `xorm:\"" + ColumnName + "\" json:\"" + SmallHump(ColumnName) + "\"` // " + ColumnComment
  100. }
  101. }
  102. if GoType == "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. }
  110. return GoField + " string `xorm:\"" + ColumnName + "\" json:\"" + SmallHump(ColumnName) + "\"` // " + ColumnComment
  111. }
  112. func ElFrom(name, value, typeName, dictType string) string {
  113. typeName = strings.ToLower(typeName)
  114. if typeName == "input" {
  115. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  116. "\n <el-input v-model=\"query." + value + "\" placeholder=\"请输入" + name + "\"/>" +
  117. "\n </el-form-item>"
  118. } else if typeName == "number" {
  119. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  120. "\n <el-input-number v-model=\"query." + value + "\" placeholder=\"请输入" + name + "\"/>" +
  121. "\n </el-form-item>"
  122. } else if typeName == "textarea" {
  123. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  124. "\n <el-input v-model=\"query." + value + "\" placeholder=\"请输入" + name + "\" type=\"textarea\"/>" +
  125. "\n </el-form-item>"
  126. } else if typeName == "select" {
  127. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  128. "\n <el-select v-model=\"query." + value + "\" placeholder=\"请选择" + name + "\">" +
  129. "\n <el-option" +
  130. "\n v-for=\"item in store.state.dicts.get('" + dictType + "')\"" +
  131. "\n :key=\"item.dictValue\"" +
  132. "\n :label=\"item.dictLabel\"" +
  133. "\n :value=\"item.dictValue\"/>" +
  134. "\n </el-select>" +
  135. "\n </el-form-item>"
  136. } else if typeName == "radio" {
  137. if dictType == "" {
  138. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  139. " <el-radio-group v-model=\"query." + value + "\">" +
  140. "\n <el-radio" +
  141. "\n v-for=\"item in [['0','否'], ['1','是']]\"" +
  142. "\n :key=\"item[0]\"" +
  143. "\n :label=\"item[0]\">" +
  144. "\n {{ item[1] }}" +
  145. "\n </el-radio>" +
  146. "\n </el-radio-group>" +
  147. "\n </el-form-item>"
  148. } else {
  149. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  150. "\n <el-radio-group v-model=\"query." + value + "\">" +
  151. "\n <el-radio" +
  152. "\n v-for=\"item in store.state.dicts.get(" + dictType + ")\"" +
  153. "\n :key=\"item.dictValue\"" +
  154. "\n :label=\"item.dictLabel\">" +
  155. "\n {{item.dictLabel}}" +
  156. "\n </el-radio>" +
  157. "\n </el-radio-group>" +
  158. "\n </el-form-item>"
  159. }
  160. } else if typeName == "checkbox" {
  161. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  162. "\n <el-checkbox-group v-model=\"query." + value + "\">" +
  163. "\n <el-checkbox :label=\"item.dictLabel\" :value=\"item.dictValue\" v-for=\"item in store.state.dicts.get('" + dictType + "')\"/>" +
  164. "\n </el-checkbox-group>" +
  165. "\n </el-form-item>"
  166. } else if typeName == "time" {
  167. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  168. " <el-date-picker v-model=\"query." + value + "\" type=\"datetime\" placeholder=\"请选择时间\" value-format=\"YYYY-MM-DD hh:mm:ss\"/>" +
  169. "\n </el-form-item>"
  170. } else if typeName == "image" {
  171. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  172. " <ImageUpload v-model:ImgUrl=\"query." + value + "\"/>" +
  173. "\n </el-form-item>"
  174. } else if typeName == "file" {
  175. } else if typeName == "editor" {
  176. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  177. " <EditorComponent v-model:htmlString=\"query." + value + "\"/>" +
  178. "\n </el-form-item>"
  179. } else if typeName == "text" {
  180. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  181. " <el-text class=\"mx-1\">{{query." + value + "}}</el-text>" +
  182. "\n </el-form-item>"
  183. }
  184. //默认的就显示文本
  185. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  186. " <el-text class=\"mx-1\">{{query." + value + "}}</el-text>" +
  187. "\n </el-form-item>"
  188. }
  189. func ElTableColumn(name, value, typeName string, dictType string) string {
  190. if typeName == "input" || typeName == "textarea" || typeName == "select" || typeName == "radio" ||
  191. typeName == "checkbox" || typeName == "time" || typeName == "text" {
  192. if dictType == "" {
  193. return "\n <el-table-column label=\"" + name + "\" align=\"center\" prop=\"" + value + "\"/>"
  194. } else {
  195. return "\n <el-table-column label=\"" + name + "\" align=\"center\" prop=\"" + value + "\">" +
  196. "\n <template #default=\"scope\">" +
  197. "\n <DictTag :dict-type=\"'" + dictType + "'\" :dict-value=\"scope.row." + value + "\"/>" +
  198. "\n </template>" +
  199. "\n </el-table-column>"
  200. }
  201. }
  202. if typeName == "image" {
  203. return "\n <el-table-column label=\"" + name + "\" align=\"center\" prop=\"" + value + "\">" +
  204. "\n <template #default=\"scope\">" +
  205. "\n <el-image :src=\"scope.row." + value + "\"></el-image>" +
  206. "\n </template>" +
  207. "\n </el-table-column>"
  208. }
  209. return "\n <el-table-column label=\"" + name + "\" align=\"center\" prop=\"" + value + "\"/>"
  210. }
  211. func ElDialog(name, value, typeName, dictType string) string {
  212. typeName = strings.ToLower(typeName)
  213. if typeName == "input" {
  214. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  215. "\n <el-input v-model=\"dialogForm." + value + "\" placeholder=\"请输入" + name + "\"/>" +
  216. "\n </el-form-item>"
  217. } else if typeName == "number" {
  218. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  219. "\n <el-input-number v-model=\"dialogForm." + value + "\" placeholder=\"请输入" + name + "\"/>" +
  220. "\n </el-form-item>"
  221. } else if typeName == "textarea" {
  222. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  223. "\n <el-input v-model=\"dialogForm." + value + "\" placeholder=\"请输入" + name + "\" type=\"textarea\"/>" +
  224. "\n </el-form-item>"
  225. } else if typeName == "select" {
  226. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  227. "\n <el-select v-model=\"dialogForm." + value + "\" placeholder=\"请选择" + name + "\">" +
  228. "\n <el-option" +
  229. "\n v-for=\"item in store.state.dicts.get('" + dictType + "')\"" +
  230. "\n :key=\"item.dictValue\"" +
  231. "\n :label=\"item.dictLabel\"" +
  232. "\n :value=\"item.dictValue\"/>" +
  233. "\n </el-select>" +
  234. "\n </el-form-item>"
  235. } else if typeName == "radio" {
  236. if dictType == "" {
  237. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  238. " <el-radio-group v-model=\"dialogForm." + value + "\">" +
  239. "\n <el-radio" +
  240. "\n v-for=\"item in [['0','否'], ['1','是']]\"" +
  241. "\n :key=\"item[0]\"" +
  242. "\n :label=\"item[0]\">" +
  243. "\n {{ item[1] }}" +
  244. "\n </el-radio>" +
  245. "\n </el-radio-group>" +
  246. "\n </el-form-item>"
  247. } else {
  248. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  249. "\n <el-radio-group v-model=\"dialogForm." + value + "\">" +
  250. "\n <el-radio" +
  251. "\n v-for=\"item in store.state.dicts.get(" + dictType + ")\"" +
  252. "\n :key=\"item.dictValue\"" +
  253. "\n :label=\"item.dictLabel\">" +
  254. "\n {{item.dictLabel}}" +
  255. "\n </el-radio>" +
  256. "\n </el-radio-group>" +
  257. "\n </el-form-item>"
  258. }
  259. } else if typeName == "checkbox" {
  260. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  261. "\n <el-checkbox-group v-model=\"dialogForm." + value + "\">" +
  262. "\n <el-checkbox :label=\"item.dictLabel\" :value=\"item.dictValue\" v-for=\"item in store.state.dicts.get('" + dictType + "')\"/>" +
  263. "\n </el-checkbox-group>" +
  264. "\n </el-form-item>"
  265. } else if typeName == "time" {
  266. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  267. " <el-date-picker v-model=\"dialogForm." + value + "\" type=\"datetime\" placeholder=\"请选择时间\" value-format=\"YYYY-MM-DD hh:mm:ss\"/>" +
  268. "\n </el-form-item>"
  269. } else if typeName == "image" {
  270. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  271. " <ImageUpload v-model:ImgUrl=\"dialogForm." + value + "\"/>" +
  272. "\n </el-form-item>"
  273. } else if typeName == "file" {
  274. } else if typeName == "editor" {
  275. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  276. " <EditorComponent v-model:htmlString=\"dialogForm." + value + "\"/>" +
  277. "\n </el-form-item>"
  278. } else if typeName == "text" {
  279. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  280. " <el-text class=\"mx-1\">{{dialogForm." + value + "}}</el-text>" +
  281. "\n </el-form-item>"
  282. }
  283. //默认的就显示文本
  284. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  285. " <el-text class=\"mx-1\">{{dialogForm." + value + "}}</el-text>" +
  286. "\n </el-form-item>"
  287. }