GenTableColumnView.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464
  1. <template>
  2. <div class="back-form-container">
  3. <div>
  4. <el-form :model="query" label-width="80px" :inline="true">
  5. <el-form-item label="表格id" prop="tableId">
  6. <el-input v-model="query.tableId" placeholder="请输入表格id"/>
  7. </el-form-item>
  8. <el-form-item label="排序" prop="sort">
  9. <el-input-number v-model="query.sort" placeholder="请输入排序"/>
  10. </el-form-item>
  11. <el-form-item label="字段注释" prop="columnComment">
  12. <el-input v-model="query.columnComment" placeholder="请输入字段注释"/>
  13. </el-form-item>
  14. <el-form-item label="字段类型" prop="columnType"> <el-text class="mx-1">{{query.columnType}}</el-text>
  15. </el-form-item>
  16. <el-form-item label="go类型" prop="goType">
  17. <el-select v-model="query.goType" placeholder="请选择go类型">
  18. <el-option
  19. v-for="item in store.state.dicts.get('go_type')"
  20. :key="item.dictValue"
  21. :label="item.dictLabel"
  22. :value="item.dictValue"/>
  23. </el-select>
  24. </el-form-item>
  25. <el-form-item label="go字段名" prop="goField">
  26. <el-input v-model="query.goField" placeholder="请输入go字段名"/>
  27. </el-form-item>
  28. <el-form-item label="是否主键" prop="isKey"> <el-radio-group v-model="query.isKey">
  29. <el-radio
  30. v-for="item in [['0','否'], ['1','是']]"
  31. :key="item[0]"
  32. :label="item[0]">
  33. {{ item[1] }}
  34. </el-radio>
  35. </el-radio-group>
  36. </el-form-item>
  37. <el-form-item label="是否自增" prop="isIncrement"> <el-radio-group v-model="query.isIncrement">
  38. <el-radio
  39. v-for="item in [['0','否'], ['1','是']]"
  40. :key="item[0]"
  41. :label="item[0]">
  42. {{ item[1] }}
  43. </el-radio>
  44. </el-radio-group>
  45. </el-form-item>
  46. <el-form-item label="是否未必填" prop="isRequired"> <el-radio-group v-model="query.isRequired">
  47. <el-radio
  48. v-for="item in [['0','否'], ['1','是']]"
  49. :key="item[0]"
  50. :label="item[0]">
  51. {{ item[1] }}
  52. </el-radio>
  53. </el-radio-group>
  54. </el-form-item>
  55. <el-form-item label="查询方式" prop="queryType">
  56. <el-select v-model="query.queryType" placeholder="请选择查询方式">
  57. <el-option
  58. v-for="item in store.state.dicts.get('query_type')"
  59. :key="item.dictValue"
  60. :label="item.dictLabel"
  61. :value="item.dictValue"/>
  62. </el-select>
  63. </el-form-item>
  64. <el-form-item label="前端显示类型" prop="vueShowType">
  65. <el-select v-model="query.vueShowType" placeholder="请选择前端显示类型">
  66. <el-option
  67. v-for="item in store.state.dicts.get('vue_show_type')"
  68. :key="item.dictValue"
  69. :label="item.dictLabel"
  70. :value="item.dictValue"/>
  71. </el-select>
  72. </el-form-item>
  73. <el-form-item label="字典类型" prop="dictType">
  74. <el-select v-model="query.dictType" placeholder="请选择字典类型">
  75. <el-option
  76. v-for="item in store.state.dicts.get('')"
  77. :key="item.dictValue"
  78. :label="item.dictLabel"
  79. :value="item.dictValue"/>
  80. </el-select>
  81. </el-form-item>
  82. <el-form-item label="字段名" prop="columnName"> <el-text class="mx-1">{{query.columnName}}</el-text>
  83. </el-form-item>
  84. </el-form>
  85. </div>
  86. <div class="back-table-handler">
  87. <el-row :gutter="10" class="mb8">
  88. <el-col :span="1.5">
  89. <el-button type="primary" plain size="small" @click="getList(pageNum)">
  90. <el-icon>
  91. <RefreshLeft/>
  92. </el-icon>
  93. <span>刷新</span>
  94. </el-button>
  95. </el-col>
  96. <el-col :span="1.5">
  97. <el-button type="primary" plain size="small" @click="openDialog('save', GenTableColumn.Create())">
  98. <el-icon>
  99. <Plus/>
  100. </el-icon>
  101. <span>新增</span>
  102. </el-button>
  103. </el-col>
  104. <el-col :span="1.5">
  105. <el-button type="danger" plain size="small" @click="deleteByIds()">
  106. <el-icon>
  107. <Delete/>
  108. </el-icon>
  109. <span>删除</span>
  110. </el-button>
  111. </el-col>
  112. </el-row>
  113. </div>
  114. <div class="back-table">
  115. <el-table v-loading="listLoading" :data="list" @selection-change="selected" border :key="ListKey">
  116. <el-table-column type="selection" width="40" align="center"/>
  117. <el-table-column label="id" align="center" prop="id"/>
  118. <el-table-column label="表格id" align="center" prop="tableId"/>
  119. <el-table-column label="排序" align="center" prop="sort"/>
  120. <el-table-column label="字段注释" align="center" prop="columnComment"/>
  121. <el-table-column label="字段类型" align="center" prop="columnType"/>
  122. <el-table-column label="go类型" align="center" prop="goType">
  123. <template #default="scope">
  124. <DictTag :dict-type="'go_type'" :dict-value="scope.row.goType"/>
  125. </template>
  126. </el-table-column>
  127. <el-table-column label="go字段名" align="center" prop="goField"/>
  128. <el-table-column label="是否主键" align="center" prop="isKey"/>
  129. <el-table-column label="是否自增" align="center" prop="isIncrement"/>
  130. <el-table-column label="是否未必填" align="center" prop="isRequired"/>
  131. <el-table-column label="查询方式" align="center" prop="queryType">
  132. <template #default="scope">
  133. <DictTag :dict-type="'query_type'" :dict-value="scope.row.queryType"/>
  134. </template>
  135. </el-table-column>
  136. <el-table-column label="前端显示类型" align="center" prop="vueShowType">
  137. <template #default="scope">
  138. <DictTag :dict-type="'vue_show_type'" :dict-value="scope.row.vueShowType"/>
  139. </template>
  140. </el-table-column>
  141. <el-table-column label="字典类型" align="center" prop="dictType"/>
  142. <el-table-column label="字段名" align="center" prop="columnName"/>
  143. <el-table-column label="操作" align="center" fixed="right">
  144. <template #default="scope">
  145. <el-button link type="primary" @click="openDialog('update', scope.row)">修改</el-button>
  146. <el-button link type="danger" @click="deleteById(scope.row.id)">删除</el-button>
  147. </template>
  148. </el-table-column>
  149. </el-table>
  150. <div class="pagination-container">
  151. <el-pagination
  152. background
  153. :current-page="pageNum"
  154. @current-change="getList"
  155. :page-size="pageSize"
  156. :page-sizes="[10, 20, 30, 50,100]"
  157. :total="total"
  158. @size-change="SetPageSized"
  159. layout="total, sizes, prev, pager, next"
  160. />
  161. </div>
  162. <!-- 添加或修改参数配置对话框 -->
  163. <el-dialog :title="dialogType=='update'?'更改字典类型':'新增字典类型'" v-model="open" width="500px" append-to-body>
  164. <el-form ref="dictRef" :model="dialogForm" label-width="80px">
  165. <el-form-item label="表格id" prop="tableId">
  166. <el-input v-model="dialogForm.tableId" placeholder="请输入表格id"/>
  167. </el-form-item>
  168. <el-form-item label="排序" prop="sort">
  169. <el-input-number v-model="dialogForm.sort" placeholder="请输入排序"/>
  170. </el-form-item>
  171. <el-form-item label="字段注释" prop="columnComment">
  172. <el-input v-model="dialogForm.columnComment" placeholder="请输入字段注释"/>
  173. </el-form-item>
  174. <el-form-item label="字段类型" prop="columnType"> <el-text class="mx-1">{{dialogForm.columnType}}</el-text>
  175. </el-form-item>
  176. <el-form-item label="go类型" prop="goType">
  177. <el-select v-model="dialogForm.goType" placeholder="请选择go类型">
  178. <el-option
  179. v-for="item in store.state.dicts.get('go_type')"
  180. :key="item.dictValue"
  181. :label="item.dictLabel"
  182. :value="item.dictValue"/>
  183. </el-select>
  184. </el-form-item>
  185. <el-form-item label="go字段名" prop="goField">
  186. <el-input v-model="dialogForm.goField" placeholder="请输入go字段名"/>
  187. </el-form-item>
  188. <el-form-item label="是否主键" prop="isKey"> <el-radio-group v-model="dialogForm.isKey">
  189. <el-radio
  190. v-for="item in [['0','否'], ['1','是']]"
  191. :key="item[0]"
  192. :label="item[0]">
  193. {{ item[1] }}
  194. </el-radio>
  195. </el-radio-group>
  196. </el-form-item>
  197. <el-form-item label="是否自增" prop="isIncrement"> <el-radio-group v-model="dialogForm.isIncrement">
  198. <el-radio
  199. v-for="item in [['0','否'], ['1','是']]"
  200. :key="item[0]"
  201. :label="item[0]">
  202. {{ item[1] }}
  203. </el-radio>
  204. </el-radio-group>
  205. </el-form-item>
  206. <el-form-item label="是否未必填" prop="isRequired"> <el-radio-group v-model="dialogForm.isRequired">
  207. <el-radio
  208. v-for="item in [['0','否'], ['1','是']]"
  209. :key="item[0]"
  210. :label="item[0]">
  211. {{ item[1] }}
  212. </el-radio>
  213. </el-radio-group>
  214. </el-form-item>
  215. <el-form-item label="查询方式" prop="queryType">
  216. <el-select v-model="dialogForm.queryType" placeholder="请选择查询方式">
  217. <el-option
  218. v-for="item in store.state.dicts.get('query_type')"
  219. :key="item.dictValue"
  220. :label="item.dictLabel"
  221. :value="item.dictValue"/>
  222. </el-select>
  223. </el-form-item>
  224. <el-form-item label="前端显示类型" prop="vueShowType">
  225. <el-select v-model="dialogForm.vueShowType" placeholder="请选择前端显示类型">
  226. <el-option
  227. v-for="item in store.state.dicts.get('vue_show_type')"
  228. :key="item.dictValue"
  229. :label="item.dictLabel"
  230. :value="item.dictValue"/>
  231. </el-select>
  232. </el-form-item>
  233. <el-form-item label="字典类型" prop="dictType">
  234. <el-select v-model="dialogForm.dictType" placeholder="请选择字典类型">
  235. <el-option
  236. v-for="item in store.state.dicts.get('')"
  237. :key="item.dictValue"
  238. :label="item.dictLabel"
  239. :value="item.dictValue"/>
  240. </el-select>
  241. </el-form-item>
  242. <el-form-item label="字段名" prop="columnName"> <el-text class="mx-1">{{dialogForm.columnName}}</el-text>
  243. </el-form-item>
  244. </el-form>
  245. <template #footer>
  246. <div class="dialog-footer">
  247. <el-button type="primary" @click="submitForm()">确 定</el-button>
  248. <el-button @click="open=false">取 消</el-button>
  249. </div>
  250. </template>
  251. </el-dialog>
  252. </div>
  253. </div>
  254. </template>
  255. <script setup lang="ts">
  256. import {ref} from "vue";
  257. import {
  258. DeleteBaseGenTableColumnById,
  259. GetBaseGenTableColumnListByGenTableColumn,
  260. SaveBaseGenTableColumn,
  261. UpdateBaseGenTableColumn,
  262. GenTableColumn,
  263. GenTableColumnQuery
  264. } from "../../../api/back/BaseBackApi.ts";
  265. import {ElMessage} from "element-plus";
  266. import {Delete, Plus, RefreshLeft} from "@element-plus/icons-vue";
  267. import router from "../../../router";
  268. import {store} from "../../../state/TokenState.ts";
  269. import DictTag from "../../../components/dict/DictTag.vue";
  270. import MultipleTag from "../../../components/MultipleTag/MultipleTag.vue";
  271. import ImageUpload from "../../../components/ImageUpload/ImageUpload.vue";
  272. let listLoading = ref(true)
  273. let total = ref(0)
  274. let pageNum = ref(1)
  275. let pageSize = ref(10)
  276. let list = ref<GenTableColumn[]>([])
  277. let ListKey = ref(0)
  278. //搜索用
  279. //let search = ref<GenTableColumn>(GenTableColumn.Create())
  280. //修改,添加用
  281. let open = ref(false)
  282. let dialogType = ref("")//save添加,update修改
  283. let dialogForm = ref<GenTableColumn>(null)
  284. let query = ref<GenTableColumnQuery>(GenTableColumnQuery.Create())
  285. let selectItems = ref<GenTableColumn[]>([])
  286. const selected = (arr: GenTableColumn[]) => {
  287. selectItems.value = arr
  288. }
  289. getList()
  290. const SetPageSized = (val: number) => {
  291. pageSize.value = val
  292. getList(pageNum.value)
  293. }
  294. function openDialog(type: string, row: GenTableColumn) {
  295. open.value = true
  296. dialogType.value = type
  297. if (type==="save"){
  298. dialogForm.value = GenTableColumn.Create()
  299. return
  300. }
  301. //深拷贝,不会影响数据
  302. dialogForm.value = JSON.parse(JSON.stringify(row))
  303. }
  304. function deleteByIds() {
  305. for (let i = 0; i < selectItems.value.length; i++) {
  306. deleteById(selectItems[i].id)
  307. }
  308. }
  309. function deleteById(id) {
  310. DeleteBaseGenTableColumnById(id).then(response => {
  311. if (response.code == 200) {
  312. ElMessage.success("删除成功,id:" + id)
  313. getList()
  314. } else {
  315. ElMessage.error("删除失败,id:" + id)
  316. }
  317. })
  318. }
  319. function getList(pn = 1) {
  320. pageNum.value = pn
  321. GetBaseGenTableColumnListByGenTableColumn(query.value, pageNum.value, pageSize.value).then(response => {
  322. let data = response.data
  323. total.value = data.total
  324. list.value = response.data.list
  325. ListKey.value++
  326. listLoading.value = false
  327. })
  328. }
  329. function submitForm() {
  330. switch (dialogType.value) {
  331. case "update":
  332. UpdateBaseGenTableColumn(dialogForm.value, dialogForm.value.id).then(response => {
  333. if (response.code == 200) {
  334. open.value = false
  335. getList()
  336. ElMessage.success("修改成功")
  337. } else {
  338. ElMessage.error("修改失败")
  339. }
  340. })
  341. break
  342. case "save":
  343. SaveBaseGenTableColumn(dialogForm.value).then(response => {
  344. if (response.code == 200) {
  345. open.value = false
  346. getList()
  347. ElMessage.success("添加成功")
  348. } else {
  349. ElMessage.error("添加失败")
  350. }
  351. })
  352. break
  353. default:
  354. break
  355. }
  356. }
  357. </script>