index.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <template>
  2. <div class="page">
  3. <el-card shadow="nover">
  4. <div class="search">
  5. <el-form :model="params" :inline="true" ref="queryRef">
  6. <el-form-item label="接口名称" prop="name">
  7. <el-input v-model="params.name" placeholder="请输入接口名称" clearable style="width: 240px" @keyup.enter.native="getList(1)" />
  8. </el-form-item>
  9. <el-form-item label="接口地址" prop="address">
  10. <el-input v-model="params.address" placeholder="请输入接口地址" clearable style="width: 240px" @keyup.enter.native="getList(1)" />
  11. </el-form-item>
  12. <el-form-item label="状态" prop="status" style="width: 200px">
  13. <el-select v-model="params.status" placeholder="接口状态" clearable style="width: 240px">
  14. <el-option label="全部" :value="-1" />
  15. <el-option label="启用" :value="1" />
  16. <el-option label="禁用" :value="0" />
  17. </el-select>
  18. </el-form-item>
  19. <el-form-item>
  20. <el-button size="default" type="primary" class="ml10" @click="getList(1)">
  21. <el-icon>
  22. <ele-Search />
  23. </el-icon>
  24. 查询
  25. </el-button>
  26. <el-button size="default" @click="resetQuery()">
  27. <el-icon>
  28. <ele-Refresh />
  29. </el-icon>
  30. 重置
  31. </el-button>
  32. <el-button type="primary" @click="addOrEdit()" v-auth="'add'">
  33. <el-icon>
  34. <ele-FolderAdd />
  35. </el-icon>
  36. 新增接口
  37. </el-button>
  38. <el-button type="primary" :disabled="!ids.length" @click="bindMenus()" v-auth="'batch'">
  39. <el-icon>
  40. <ele-Grid />
  41. </el-icon>
  42. 批量绑定菜单
  43. </el-button>
  44. <el-button type="primary" @click="apiImport()" :loading="importing" v-auth="'import'">
  45. <el-icon>
  46. <ele-Download />
  47. </el-icon>
  48. 系统API同步
  49. </el-button>
  50. </el-form-item>
  51. </el-form>
  52. </div>
  53. <el-table :data="tableData" @selection-change="handleSelectionChange" style="width: 100%" v-loading="loading" :expand-row-keys="[]" row-key="id" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
  54. <el-table-column v-col="'selection'" type="selection" width="55" align="center" />
  55. <!-- <el-table-column type="index" label="序号" width="60" align="center" /> -->
  56. <el-table-column prop="id" label="ID" width="100" align="center" />
  57. <el-table-column prop="name" v-col="'name'" label="接口名称" show-overflow-tooltip></el-table-column>
  58. <el-table-column prop="address" v-col="'address'" label="接口地址" show-overflow-tooltip></el-table-column>
  59. <el-table-column prop="status" v-col="'status'" label="状态" min-width="100" align="center">
  60. <template #default="scope">
  61. <el-tag type="success" size="small" v-if="scope.row.status">启用</el-tag>
  62. <el-tag type="info" size="small" v-else>禁用</el-tag>
  63. </template>
  64. </el-table-column>
  65. <el-table-column prop="menuIds" label="绑定菜单" show-overflow-tooltip></el-table-column>
  66. <el-table-column label="操作" width="100" align="center" v-col="'handle'">
  67. <template #default="scope">
  68. <el-button size="small" text type="warning" @click="addOrEdit(scope.row)" v-auth="'edit'">修改</el-button>
  69. <el-button size="small" text type="info" @click="onDel(scope.row)" v-auth="'del'">删除</el-button>
  70. </template>
  71. </el-table-column>
  72. </el-table>
  73. <pagination v-if="params.total" :total="params.total" v-model:page="params.pageNum" v-model:limit="params.pageSize" @pagination="getList()" />
  74. </el-card>
  75. <EditForm ref="editFormRef" @getList="getList(1)"></EditForm>
  76. <bindVue ref="bindRef" @getList="getList(1)"></bindVue>
  77. </div>
  78. </template>
  79. <script lang="ts" setup>
  80. import { ref } from 'vue'
  81. import EditForm from './component/edit.vue'
  82. import bindVue from './component/bind.vue'
  83. import { ApiRow } from '/@/api/model/system/menu'
  84. import api from '/@/api/system'
  85. import { ElMessageBox, ElMessage } from 'element-plus'
  86. import { useSearch } from '/@/hooks/useCommon'
  87. const editFormRef = ref()
  88. const bindRef = ref()
  89. const queryRef = ref()
  90. const importing = ref(false)
  91. const ids = ref<number[]>([])
  92. const { params, tableData, getList, loading } = useSearch<ApiRow[]>(api.api.getList, 'Info', { name: '', address: '', types: -1 })
  93. getList()
  94. const addOrEdit = async (row?: ApiRow) => {
  95. if (row) {
  96. const res = await api.api.detail(row.id as number)
  97. editFormRef.value.open(res)
  98. return
  99. } else {
  100. editFormRef.value.open()
  101. }
  102. }
  103. const handleSelectionChange = (selection: any[]) => {
  104. ids.value = selection.filter(item => item.types === 2).map((item) => item.id);
  105. };
  106. const apiImport = () => {
  107. importing.value = true
  108. api.api.import().then(() => {
  109. ElMessage.success('导入成功')
  110. }).finally(() => importing.value = false)
  111. };
  112. // 重置表单
  113. const resetQuery = () => {
  114. queryRef.value.resetFields()
  115. getList(1)
  116. }
  117. // 重置表单
  118. const bindMenus = () => {
  119. bindRef.value.open(ids.value)
  120. }
  121. const onDel = (row: ApiRow) => {
  122. ElMessageBox.confirm(`此操作将删除接口:“${row.name}”,是否继续?`, '提示', {
  123. confirmButtonText: '确认',
  124. cancelButtonText: '取消',
  125. type: 'warning',
  126. }).then(async () => {
  127. await api.api.del(row.id as number)
  128. ElMessage.success('删除成功')
  129. getList()
  130. })
  131. }
  132. </script>