menu.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <template>
  2. <div class="mod-menu">
  3. <el-form :inline="true" :model="dataForm">
  4. <el-form-item>
  5. <el-button v-if="isAuth('sys:menu:save')" type="primary" @click="addOrUpdateHandle()">新增</el-button>
  6. </el-form-item>
  7. </el-form>
  8. <el-table
  9. :data="dataList"
  10. row-key="menuId"
  11. border
  12. :indent='20'
  13. style="width: 100%; ">
  14. <el-table-column
  15. prop="name"
  16. header-align="center"
  17. min-width="150"
  18. label="名称" >
  19. </el-table-column>
  20. <el-table-column
  21. prop="parentName"
  22. header-align="center"
  23. align="center"
  24. width="120"
  25. label="上级菜单">
  26. </el-table-column>
  27. <el-table-column
  28. header-align="center"
  29. align="center"
  30. label="图标">
  31. <template slot-scope="scope">
  32. <icon-svg :name="scope.row.icon || ''"></icon-svg>
  33. </template>
  34. </el-table-column>
  35. <el-table-column
  36. prop="type"
  37. header-align="center"
  38. align="center"
  39. label="类型">
  40. <template slot-scope="scope">
  41. <el-tag v-if="scope.row.type === 0" size="small">目录</el-tag>
  42. <el-tag v-else-if="scope.row.type === 1" size="small" type="success">菜单</el-tag>
  43. <el-tag v-else-if="scope.row.type === 2" size="small" type="info">按钮</el-tag>
  44. </template>
  45. </el-table-column>
  46. <el-table-column
  47. prop="orderNum"
  48. header-align="center"
  49. align="center"
  50. label="排序号">
  51. </el-table-column>
  52. <el-table-column
  53. prop="url"
  54. header-align="center"
  55. align="center"
  56. width="150"
  57. :show-overflow-tooltip="true"
  58. label="菜单URL">
  59. </el-table-column>
  60. <el-table-column
  61. prop="perms"
  62. header-align="center"
  63. align="center"
  64. width="150"
  65. :show-overflow-tooltip="true"
  66. label="授权标识">
  67. </el-table-column>
  68. <el-table-column
  69. fixed="right"
  70. header-align="center"
  71. align="center"
  72. width="150"
  73. label="操作">
  74. <template slot-scope="scope">
  75. <el-button v-if="isAuth('sys:menu:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.menuId)">修改</el-button>
  76. <el-button v-if="isAuth('sys:menu:delete')" type="text" size="small" @click="deleteHandle(scope.row.menuId)">删除</el-button>
  77. </template>
  78. </el-table-column>
  79. </el-table>
  80. <!-- 弹窗, 新增 / 修改 -->
  81. <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
  82. </div>
  83. </template>
  84. <script>
  85. import AddOrUpdate from './menu-add-or-update'
  86. export default {
  87. data () {
  88. return {
  89. dataForm: {},
  90. dataList: [],
  91. dataListLoading: false,
  92. addOrUpdateVisible: false
  93. }
  94. },
  95. components: {
  96. AddOrUpdate
  97. },
  98. activated () {
  99. this.getDataList()
  100. },
  101. methods: {
  102. // 获取数据列表
  103. getDataList () {
  104. this.dataListLoading = true
  105. this.$http({
  106. url: this.$http.adornUrl('/user-service/menu/tree'),
  107. method: 'get',
  108. params: this.$http.adornParams()
  109. }).then(({data}) => {
  110. if (data.code === '200') {
  111. this.dataList = JSON.parse(JSON.stringify(data.data).replace(/"list":/g, '"children":').replace(/"children":null/g, '"children":[]'))
  112. console.log(this.dataList)
  113. }
  114. this.dataListLoading = false
  115. })
  116. },
  117. // 新增 / 修改
  118. addOrUpdateHandle (id) {
  119. this.addOrUpdateVisible = true
  120. this.$nextTick(() => {
  121. this.$refs.addOrUpdate.init(id)
  122. })
  123. },
  124. // 删除
  125. deleteHandle (id) {
  126. this.$confirm(`确定对[id=${id}]进行[删除]操作?`, '提示', {
  127. confirmButtonText: '确定',
  128. cancelButtonText: '取消',
  129. type: 'warning'
  130. }).then(() => {
  131. this.$http({
  132. url: this.$http.adornUrl(`/user-service/menu/delete?menuId=${id}`),
  133. method: 'DELETE',
  134. data: this.$http.adornData()
  135. }).then(({data}) => {
  136. if (data && data.code === '200') {
  137. this.$message({
  138. message: '操作成功',
  139. type: 'success',
  140. duration: 1500,
  141. onClose: () => {
  142. this.getDataList()
  143. }
  144. })
  145. } else {
  146. this.$message.error(data.msg)
  147. }
  148. })
  149. }).catch(() => {})
  150. }
  151. }
  152. }
  153. </script>