BaseTemplateFunc.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  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, queryType 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. if strings.ToUpper(queryType) == "BETWEEN" {
  120. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  121. "\n <InputNumberRange v-model:min=query." + value + "Start v-model:max=query." + value + "End/>" +
  122. "\n </el-form-item>"
  123. } else {
  124. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  125. "\n <el-input-number v-model=\"query." + value + "\" placeholder=\"请输入" + name + "\"/>" +
  126. "\n </el-form-item>"
  127. }
  128. } else if typeName == "select" {
  129. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  130. "\n <el-select v-model=\"query." + value + "\" placeholder=\"请选择" + name + "\">" +
  131. "\n <el-option" +
  132. "\n v-for=\"item in store.state.dicts.get('" + dictType + "')\"" +
  133. "\n :key=\"item.dictValue\"" +
  134. "\n :label=\"item.dictLabel\"" +
  135. "\n :value=\"item.dictValue\"/>" +
  136. "\n </el-select>" +
  137. "\n </el-form-item>"
  138. } else if typeName == "radio" {
  139. if dictType == "" {
  140. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  141. " <el-radio-group v-model=\"query." + value + "\">" +
  142. "\n <el-radio" +
  143. "\n v-for=\"item in [['0','否'], ['1','是']]\"" +
  144. "\n :key=\"item[0]\"" +
  145. "\n :label=\"item[0]\">" +
  146. "\n {{ item[1] }}" +
  147. "\n </el-radio>" +
  148. "\n </el-radio-group>" +
  149. "\n </el-form-item>"
  150. } else {
  151. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  152. "\n <el-radio-group v-model=\"query." + value + "\">" +
  153. "\n <el-radio" +
  154. "\n v-for=\"item in store.state.dicts.get(" + dictType + ")\"" +
  155. "\n :key=\"item.dictValue\"" +
  156. "\n :label=\"item.dictLabel\">" +
  157. "\n {{item.dictLabel}}" +
  158. "\n </el-radio>" +
  159. "\n </el-radio-group>" +
  160. "\n </el-form-item>"
  161. }
  162. } else if typeName == "time" {
  163. if strings.ToUpper(queryType) == "BETWEEN" {
  164. //
  165. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  166. " <DatePicker v-model:startDate=query." + value + "Start v-model:endDate=query." + value + "End/>" +
  167. "\n </el-form-item>"
  168. } else {
  169. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  170. " <el-date-picker v-model=\"query." + value + "\" type=\"datetime\" placeholder=\"请选择时间\" value-format=\"YYYY-MM-DD hh:mm:ss\"/>" +
  171. "\n </el-form-item>"
  172. }
  173. }
  174. /*else if typeName == "textarea" {
  175. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  176. "\n <el-input v-model=\"query." + value + "\" placeholder=\"请输入" + name + "\" type=\"textarea\"/>" +
  177. "\n </el-form-item>"
  178. } else if typeName == "checkbox" {
  179. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  180. "\n <el-checkbox-group v-model=\"query." + value + "\">" +
  181. "\n <el-checkbox :label=\"item.dictLabel\" :value=\"item.dictValue\" v-for=\"item in store.state.dicts.get('" + dictType + "')\"/>" +
  182. "\n </el-checkbox-group>" +
  183. "\n </el-form-item>"
  184. } else if typeName == "image" {
  185. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  186. " <ImageUpload v-model:ImgUrl=\"query." + value + "\"/>" +
  187. "\n </el-form-item>"
  188. } else if typeName == "file" {
  189. } else if typeName == "editor" {
  190. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  191. " <EditorComponent v-model:htmlString=\"query." + value + "\"/>" +
  192. "\n </el-form-item>"
  193. } else if typeName == "text" {
  194. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  195. " <el-text class=\"mx-1\">{{query." + value + "}}</el-text>" +
  196. "\n </el-form-item>"
  197. }*/
  198. return ""
  199. }
  200. func ElTableColumn(name, value, typeName string, dictType string) string {
  201. if typeName == "input" || typeName == "textarea" || typeName == "select" || typeName == "radio" ||
  202. typeName == "checkbox" || typeName == "time" || typeName == "text" {
  203. if dictType == "" {
  204. return "\n <el-table-column label=\"" + name + "\" align=\"center\" prop=\"" + value + "\"/>"
  205. } else {
  206. return "\n <el-table-column label=\"" + name + "\" align=\"center\" prop=\"" + value + "\">" +
  207. "\n <template #default=\"scope\">" +
  208. "\n <DictTag :dict-type=\"'" + dictType + "'\" :dict-value=\"scope.row." + value + "\"/>" +
  209. "\n </template>" +
  210. "\n </el-table-column>"
  211. }
  212. }
  213. if typeName == "image" {
  214. return "\n <el-table-column label=\"" + name + "\" align=\"center\" prop=\"" + value + "\">" +
  215. "\n <template #default=\"scope\">" +
  216. "\n <el-image :src=\"scope.row." + value + "\"></el-image>" +
  217. "\n </template>" +
  218. "\n </el-table-column>"
  219. }
  220. return "\n <el-table-column label=\"" + name + "\" align=\"center\" prop=\"" + value + "\"/>"
  221. }
  222. func ElDialog(name, value, typeName, dictType string) string {
  223. typeName = strings.ToLower(typeName)
  224. if typeName == "input" {
  225. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  226. "\n <el-input v-model=\"dialogForm." + value + "\" placeholder=\"请输入" + name + "\"/>" +
  227. "\n </el-form-item>"
  228. } else if typeName == "number" {
  229. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  230. "\n <el-input-number v-model=\"dialogForm." + value + "\" placeholder=\"请输入" + name + "\"/>" +
  231. "\n </el-form-item>"
  232. } else if typeName == "textarea" {
  233. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  234. "\n <el-input v-model=\"dialogForm." + value + "\" placeholder=\"请输入" + name + "\" type=\"textarea\"/>" +
  235. "\n </el-form-item>"
  236. } else if typeName == "select" {
  237. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  238. "\n <el-select v-model=\"dialogForm." + value + "\" placeholder=\"请选择" + name + "\">" +
  239. "\n <el-option" +
  240. "\n v-for=\"item in store.state.dicts.get('" + dictType + "')\"" +
  241. "\n :key=\"item.dictValue\"" +
  242. "\n :label=\"item.dictLabel\"" +
  243. "\n :value=\"item.dictValue\"/>" +
  244. "\n </el-select>" +
  245. "\n </el-form-item>"
  246. } else if typeName == "radio" {
  247. if dictType == "" {
  248. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  249. " <el-radio-group v-model=\"dialogForm." + value + "\">" +
  250. "\n <el-radio" +
  251. "\n v-for=\"item in [['0','否'], ['1','是']]\"" +
  252. "\n :key=\"item[0]\"" +
  253. "\n :label=\"item[0]\">" +
  254. "\n {{ item[1] }}" +
  255. "\n </el-radio>" +
  256. "\n </el-radio-group>" +
  257. "\n </el-form-item>"
  258. } else {
  259. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  260. "\n <el-radio-group v-model=\"dialogForm." + value + "\">" +
  261. "\n <el-radio" +
  262. "\n v-for=\"item in store.state.dicts.get(" + dictType + ")\"" +
  263. "\n :key=\"item.dictValue\"" +
  264. "\n :label=\"item.dictLabel\">" +
  265. "\n {{item.dictLabel}}" +
  266. "\n </el-radio>" +
  267. "\n </el-radio-group>" +
  268. "\n </el-form-item>"
  269. }
  270. } else if typeName == "checkbox" {
  271. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  272. "\n <el-checkbox-group v-model=\"dialogForm." + value + "\">" +
  273. "\n <el-checkbox :label=\"item.dictLabel\" :value=\"item.dictValue\" v-for=\"item in store.state.dicts.get('" + dictType + "')\"/>" +
  274. "\n </el-checkbox-group>" +
  275. "\n </el-form-item>"
  276. } else if typeName == "time" {
  277. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  278. " <el-date-picker v-model=\"dialogForm." + value + "\" type=\"datetime\" placeholder=\"请选择时间\" value-format=\"YYYY-MM-DD hh:mm:ss\"/>" +
  279. "\n </el-form-item>"
  280. } else if typeName == "image" {
  281. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  282. " <ImageUpload v-model:ImgUrl=\"dialogForm." + value + "\"/>" +
  283. "\n </el-form-item>"
  284. } else if typeName == "file" {
  285. } else if typeName == "editor" {
  286. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  287. " <EditorComponent v-model:htmlString=\"dialogForm." + value + "\"/>" +
  288. "\n </el-form-item>"
  289. } else if typeName == "text" {
  290. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  291. " <el-text class=\"mx-1\">{{dialogForm." + value + "}}</el-text>" +
  292. "\n </el-form-item>"
  293. }
  294. //默认的就显示文本
  295. return "\n <el-form-item label=\"" + name + "\" prop=\"" + value + "\">" +
  296. " <el-text class=\"mx-1\">{{dialogForm." + value + "}}</el-text>" +
  297. "\n </el-form-item>"
  298. }