TableDesig.vue 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. <template>
  2. <div>
  3. <el-button style="margin-top:10px" @click="genEntrty">生成实体类</el-button>
  4. <el-button style="margin-top:10px" @click="genControler">生成接口类</el-button>
  5. <el-table
  6. :data="tableData"
  7. :header-cell-style="headerStyle"
  8. border
  9. stripe
  10. fit
  11. style="width: 100%;margin-top: 25px;"
  12. >
  13. <el-table-column fixed prop="ColumnName" label="字段名" width="150"></el-table-column>
  14. <el-table-column prop="Description" min-width="200" label="说明"></el-table-column>
  15. <el-table-column prop="ColumnType" min-width="120" label="类型"></el-table-column>
  16. <el-table-column prop="CharMaxLength" min-width="60" label="长度"></el-table-column>
  17. <el-table-column prop="Nullable" align="center" label="不是 null"></el-table-column>
  18. <el-table-column prop="Default" min-width="260" label="默认值"></el-table-column>
  19. </el-table>
  20. </div>
  21. </template>
  22. <script>
  23. import Vue from "vue";
  24. import ElementUI from "element-ui";
  25. import Axios from "axios";
  26. import "element-ui/lib/theme-chalk/index.css";
  27. import Opt from "../opt";
  28. import { SStringBuilder } from "@persagy-web/base";
  29. Vue.use(ElementUI);
  30. export default {
  31. data: function() {
  32. return {
  33. tableData: [],
  34. headerStyle: {
  35. backgroundColor: "#e1e4e5",
  36. color: "#2b2b2b",
  37. lineHeight: "30px"
  38. }, // 列表样式
  39. urlObj: {} // 路径参数
  40. };
  41. },
  42. components: {},
  43. created: function() {
  44. this.getData();
  45. // this.getUrlData();
  46. },
  47. mounted: function() {
  48. // alert(this.schema);
  49. },
  50. props: ["sys", "schema", "table"],
  51. computed: {},
  52. methods: {
  53. getData() {
  54. Axios.get(
  55. `${Opt.databaseDoc[this.sys]}/--database-doc--/column-list?schema=${
  56. this.schema
  57. }&table=${this.table}`,
  58. {}
  59. ).then(res => {
  60. this.tableData = res.data;
  61. });
  62. },
  63. //生成实体类
  64. genEntrty() {
  65. this.getUrlData();
  66. let strBuild = new SStringBuilder();
  67. const table = this.toHump(this.urlObj.urlType);
  68. strBuild.append(
  69. `package cn.sagacloud.server.datacenter.models.entities
  70. import cn.sagacloud.server.datacenter.models.entities.base.BaseInfo
  71. import cn.sagacloud.server.datacenter.models.entities.task.SchemeUtils
  72. import com.alibaba.fastjson.annotation.JSONField
  73. import com.sybotan.service.models.annotations.SCascade
  74. import io.swagger.annotations.ApiModel
  75. import io.swagger.annotations.ApiModelProperty
  76. import javax.persistence.Column
  77. import javax.persistence.Id
  78. import javax.persistence.Table
  79. /**
  80. * ${this.urlObj.urlName}信息实体类
  81. *
  82. * @author 自动生成
  83. */
  84. @ApiModel(description = "资产信息实体类")
  85. @Table(name = "${this.schema}.${this.urlObj.urlType}")
  86. open class ${table} : BaseInfo(),Comparator<${table}> {
  87. `
  88. );
  89. this.tableData.forEach(element => {
  90. strBuild.append(` /** ${element.Description} */`);
  91. if (element.Nullable == "YES") {
  92. strBuild.append(
  93. ` @ApiModelProperty(value = "${element.Description}")`
  94. );
  95. } else {
  96. strBuild.append(
  97. ` @ApiModelProperty(value = "${element.Description}", required = true)`
  98. );
  99. }
  100. strBuild.append(` @Column(name = "${element.ColumnName}")`);
  101. strBuild.append(
  102. ` var ${this.toSmallHump(element.ColumnName)}: ${this.typeToName(
  103. element.ColumnType
  104. )}? = null\n`
  105. );
  106. });
  107. strBuild.append(`} // Class ${table}`);
  108. this.download(`${table}.kt`, strBuild.toString());
  109. },
  110. //生成接口类
  111. genControler() {
  112. this.getUrlData();
  113. let strBuild = new SStringBuilder();
  114. const className = `${this.toHump(this.urlObj.urlType)}Controller`;
  115. strBuild.append(`package cn.sagacloud.server.datacenter.controllers
  116. import cn.sagacloud.server.datacenter.models.entities.Property
  117. import cn.sagacloud.server.datacenter.services.PropertyService
  118. import com.sybotan.base.extensions.toJson
  119. import com.sybotan.database.SFilter
  120. import com.sybotan.service.SPageContext
  121. import com.sybotan.service.models.requests.SCountRequest
  122. import com.sybotan.service.models.requests.SCreateRequest
  123. import com.sybotan.service.models.requests.SQueryRequest
  124. import com.sybotan.service.models.requests.SUpdateRequest
  125. import com.sybotan.service.models.responses.SBaseResponse
  126. import com.sybotan.service.models.responses.SCountResponse
  127. import com.sybotan.service.models.responses.SCreateResponse
  128. import com.sybotan.service.models.responses.SQueryResponse
  129. import io.swagger.annotations.Api
  130. import io.swagger.annotations.ApiOperation
  131. import org.slf4j.LoggerFactory
  132. import org.springframework.web.bind.annotation.PostMapping
  133. import org.springframework.web.bind.annotation.RequestBody
  134. import org.springframework.web.bind.annotation.RequestMapping
  135. import org.springframework.web.bind.annotation.RestController
  136. /**
  137. * ${this.urlObj.urlName}接口
  138. *
  139. * @author 自动生成
  140. */
  141. @Api(tags = ["${this.urlObj.urlName}"])
  142. @RestController
  143. @RequestMapping("/object/${this.urlObj.urlType}")
  144. open class ${className} {
  145. companion object {
  146. /** 日志 */
  147. private val logger = LoggerFactory.getLogger(${className}::class.java)
  148. } // Companion object
  149. /**
  150. * 创建${this.urlObj.urlName}
  151. *
  152. * @param request ${this.urlObj.urlName}对象列表
  153. * @return 创建结果信息
  154. */
  155. @ApiOperation(value = "创建${this.urlObj.urlName}信息", notes = "")
  156. @PostMapping(value = ["/create"])
  157. fun create(@RequestBody request: SCreateRequest<${this.toHump(
  158. this.table
  159. )}>): SCreateResponse<${this.toHump(this.table)}> {
  160. return PropertyService.createList( request)
  161. } // Function create()
  162. /**
  163. * 根据id删除${this.urlObj.urlName}
  164. *
  165. * @param idList id数组
  166. * @return 删除的结果信息
  167. */
  168. @ApiOperation(value = "根据id删除${this.urlObj.urlName}信息", notes = "")
  169. @PostMapping(value = ["/delete"])
  170. fun delete(@RequestBody idList: ArrayList<${this.toHump(
  171. this.table
  172. )}>): SBaseResponse {
  173. return PropertyService.deleteByKeysList(idList)
  174. } // Function delete()
  175. /**
  176. * 更新${this.urlObj.urlName}信息
  177. *
  178. * @param request 更新的内容对象
  179. * @return 更新的结果
  180. */
  181. @ApiOperation(value = "更新${this.urlObj.urlName}信息", notes = "")
  182. @PostMapping(value = ["/update"])
  183. fun update(@RequestBody request: SUpdateRequest<${this.toHump(
  184. this.table
  185. )}>): SBaseResponse {
  186. return PropertyService.updateList(request)
  187. } // Function update()
  188. /**
  189. * 查询${this.urlObj.urlName}信息
  190. *
  191. * @param request 查询信息条件
  192. * @return 查询结果
  193. */
  194. @ApiOperation(value = "查询${this.urlObj.urlName}信息", notes="")
  195. @PostMapping(value = ["/query"])
  196. fun query(@RequestBody request: SQueryRequest): SQueryResponse<${this.toHump(
  197. this.table
  198. )}> {
  199. return PropertyService.pageQuery(request)
  200. } // Function query()
  201. /**
  202. * 根据条件查询统计数量
  203. */
  204. @ApiOperation(value = "根据条件查询统计数量", notes = "")
  205. @PostMapping(value = ["/count"])
  206. fun count(@RequestBody request: SCountRequest): SCountResponse {
  207. return PropertyService.count(request)
  208. } // Function count()
  209. `);
  210. strBuild.append(`} // Class ${className}`);
  211. console.log("className", className);
  212. // this.download(`${className}.kt`, strBuild.toString());
  213. },
  214. // 数据包类型到实体类的转换
  215. typeToName(name) {
  216. const obj = {
  217. varchar: "String",
  218. char: "String",
  219. timestamptz: "Date",
  220. timestamp: "Date",
  221. text: "String",
  222. bool: "Boolean",
  223. int4: "Int",
  224. date: "Date",
  225. int2: "Int",
  226. json: "HashMap<String, Any?>",
  227. jsonb: "HashMap<String, Any?>"
  228. };
  229. if (name) {
  230. return obj[name] ? obj[name] : "String";
  231. } else {
  232. return "String";
  233. }
  234. },
  235. //转驼峰
  236. toHump(str) {
  237. var arr = str.split("_");
  238. for (var i = 0; i < arr.length; i++) {
  239. arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substring(1);
  240. }
  241. return arr.join("");
  242. },
  243. //转小驼峰
  244. toSmallHump(str) {
  245. var arr = str.split("_");
  246. for (var i = 1; i < arr.length; i++) {
  247. arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substring(1);
  248. }
  249. return arr.join("");
  250. },
  251. // 获取路径名称以及路径type
  252. getUrlData() {
  253. const dataArr = window.location.href.split("#")[1].split("-");
  254. let obj = {};
  255. if (dataArr.length == 2) {
  256. obj = {
  257. urlType: dataArr[1],
  258. urlName: decodeURIComponent(dataArr[0])
  259. };
  260. } else {
  261. let urlName = "";
  262. let lengthNum = dataArr.length;
  263. dataArr.forEach((item, i) => {
  264. if (i + 2 <= lengthNum) {
  265. urlName = urlName + "-" + item;
  266. }
  267. });
  268. obj = {
  269. urlType: dataArr[lengthNum-1],
  270. urlName: decodeURIComponent(urlName)
  271. };
  272. }
  273. this.urlObj = obj;
  274. },
  275. // 下载文件
  276. download(filename, text) {
  277. var element = document.createElement("a");
  278. element.setAttribute(
  279. "href",
  280. "data:text/plain;charset=utf-8," + encodeURIComponent(text)
  281. );
  282. element.setAttribute("download", filename);
  283. element.style.display = "none";
  284. document.body.appendChild(element);
  285. element.click();
  286. document.body.removeChild(element);
  287. }
  288. }
  289. };
  290. </script>
  291. <style scoped>
  292. /deep/ table {
  293. margin: 0;
  294. }
  295. </style>