index.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <template>
  2. <div class="permissions-container">
  3. <el-divider content-position="left">
  4. intelligence模式,前端根据permissions拦截路由(演示环境,默认使用此方案)
  5. </el-divider>
  6. <el-form ref="form" :model="form" :inline="true">
  7. <el-form-item label="切换账号">
  8. <el-radio-group v-model="form.account">
  9. <el-radio label="admin">admin</el-radio>
  10. <el-radio label="editor">editor</el-radio>
  11. <el-radio label="test">test</el-radio>
  12. </el-radio-group>
  13. </el-form-item>
  14. <el-form-item>
  15. <el-button type="primary" @click="handleChangePermission"
  16. >切换权限
  17. </el-button>
  18. </el-form-item>
  19. <el-form-item label="当前账号拥有的权限">
  20. {{ JSON.stringify(permissions) }}
  21. </el-form-item>
  22. </el-form>
  23. <el-divider content-position="left">
  24. 按钮级权限演示
  25. </el-divider>
  26. <el-button v-permissions="['admin']" type="primary">
  27. 我是拥有["admin"]权限的按钮
  28. </el-button>
  29. <el-button v-permissions="['editor']" type="primary">
  30. 我是拥有["editor"]权限的按钮
  31. </el-button>
  32. <el-button v-permissions="['test']" type="primary">
  33. 我是拥有["test"]权限的按钮
  34. </el-button>
  35. <br />
  36. <br />
  37. <el-divider content-position="left">
  38. all模式,路由以及view文件引入全部交给后端(权限复杂,且随时变更,建议使用此方案)
  39. </el-divider>
  40. <p>
  41. settings.js配置authentication为all即可完全交由后端控制,mock中有后端接口示例,权限繁琐,有几十种权限的项目直接用这种,
  42. 由于演示环境是mock数据模拟,可能无法展现此功能的配置,只做如下展示,便于您的理解
  43. </p>
  44. <br />
  45. <el-row :gutter="20">
  46. <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
  47. <el-table
  48. :data="tableData"
  49. row-key="path"
  50. border
  51. default-expand-all
  52. :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
  53. >
  54. <el-table-column
  55. show-overflow-tooltip
  56. prop="name"
  57. label="name"
  58. ></el-table-column>
  59. <el-table-column
  60. show-overflow-tooltip
  61. prop="path"
  62. label="path"
  63. ></el-table-column>
  64. <el-table-column
  65. show-overflow-tooltip
  66. prop="component"
  67. label="component"
  68. ></el-table-column>
  69. <el-table-column
  70. show-overflow-tooltip
  71. prop="redirect"
  72. label="redirect"
  73. ></el-table-column>
  74. <el-table-column
  75. show-overflow-tooltip
  76. prop="meta.title"
  77. label="标题"
  78. ></el-table-column>
  79. <el-table-column show-overflow-tooltip label="图标">
  80. <template slot-scope="scope">
  81. <span v-if="scope.row.meta">
  82. <vab-icon
  83. v-if="scope.row.meta.icon"
  84. :icon="['fas', scope.row.meta.icon]"
  85. ></vab-icon>
  86. </span>
  87. </template>
  88. </el-table-column>
  89. <el-table-column show-overflow-tooltip label="是否固定">
  90. <template slot-scope="scope">
  91. <span v-if="scope.row.meta">
  92. {{ scope.row.meta.affix }}
  93. </span>
  94. </template>
  95. </el-table-column>
  96. <el-table-column show-overflow-tooltip label="是否无缓存">
  97. <template slot-scope="scope">
  98. <span v-if="scope.row.meta">
  99. {{ scope.row.meta.noKeepAlive }}
  100. </span>
  101. </template>
  102. </el-table-column>
  103. <el-table-column show-overflow-tooltip label="badge">
  104. <template slot-scope="scope">
  105. <span v-if="scope.row.meta">
  106. {{ scope.row.meta.badge }}
  107. </span>
  108. </template>
  109. </el-table-column>
  110. </el-table>
  111. </el-col>
  112. <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
  113. <json-editor :value="res"></json-editor>
  114. </el-col>
  115. </el-row>
  116. </div>
  117. </template>
  118. <script>
  119. import { mapGetters } from "vuex";
  120. import { tokenTableName } from "@/config/settings";
  121. import { getRouterList } from "@/api/router";
  122. import JsonEditor from "@/components/JsonEditor";
  123. export default {
  124. name: "Permissions",
  125. components: {
  126. JsonEditor,
  127. },
  128. data() {
  129. return {
  130. form: {
  131. account: "",
  132. },
  133. tableData: [],
  134. res: [],
  135. };
  136. },
  137. computed: {
  138. ...mapGetters({
  139. username: "user/username",
  140. permissions: "user/permissions",
  141. }),
  142. },
  143. created() {
  144. this.fetchData();
  145. },
  146. mounted() {
  147. this.form.account = this.username;
  148. },
  149. methods: {
  150. handleChangePermission() {
  151. localStorage.setItem(tokenTableName, `${this.form.account}-accessToken`);
  152. location.reload();
  153. },
  154. async fetchData() {
  155. const res = await getRouterList();
  156. this.tableData = res.data;
  157. this.res = res;
  158. },
  159. },
  160. };
  161. </script>