123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- <template>
- <div class="permissions-container">
- <el-divider content-position="left">
- intelligence模式,前端根据permissions拦截路由(演示环境,默认使用此方案)
- </el-divider>
- <el-form ref="form" :model="form" :inline="true">
- <el-form-item label="切换账号">
- <el-radio-group v-model="form.account">
- <el-radio label="admin">admin</el-radio>
- <el-radio label="editor">editor</el-radio>
- <el-radio label="test">test</el-radio>
- </el-radio-group>
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="handleChangePermission"
- >切换权限
- </el-button>
- </el-form-item>
- <el-form-item label="当前账号拥有的权限">
- {{ JSON.stringify(permissions) }}
- </el-form-item>
- </el-form>
- <el-divider content-position="left">
- 按钮级权限演示
- </el-divider>
- <el-button v-permissions="['admin']" type="primary">
- 我是拥有["admin"]权限的按钮
- </el-button>
- <el-button v-permissions="['editor']" type="primary">
- 我是拥有["editor"]权限的按钮
- </el-button>
- <el-button v-permissions="['test']" type="primary">
- 我是拥有["test"]权限的按钮
- </el-button>
- <br />
- <br />
- <el-divider content-position="left">
- all模式,路由以及view文件引入全部交给后端(权限复杂,且随时变更,建议使用此方案)
- </el-divider>
- <p>
- settings.js配置authentication为all即可完全交由后端控制,mock中有后端接口示例,权限繁琐,有几十种权限的项目直接用这种,
- 由于演示环境是mock数据模拟,可能无法展现此功能的配置,只做如下展示,便于您的理解
- </p>
- <br />
- <el-row :gutter="20">
- <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
- <el-table
- :data="tableData"
- row-key="path"
- border
- default-expand-all
- :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
- >
- <el-table-column
- show-overflow-tooltip
- prop="name"
- label="name"
- ></el-table-column>
- <el-table-column
- show-overflow-tooltip
- prop="path"
- label="path"
- ></el-table-column>
- <el-table-column
- show-overflow-tooltip
- prop="component"
- label="component"
- ></el-table-column>
- <el-table-column
- show-overflow-tooltip
- prop="redirect"
- label="redirect"
- ></el-table-column>
- <el-table-column
- show-overflow-tooltip
- prop="meta.title"
- label="标题"
- ></el-table-column>
- <el-table-column show-overflow-tooltip label="图标">
- <template slot-scope="scope">
- <span v-if="scope.row.meta">
- <vab-icon
- v-if="scope.row.meta.icon"
- :icon="['fas', scope.row.meta.icon]"
- ></vab-icon>
- </span>
- </template>
- </el-table-column>
- <el-table-column show-overflow-tooltip label="是否固定">
- <template slot-scope="scope">
- <span v-if="scope.row.meta">
- {{ scope.row.meta.affix }}
- </span>
- </template>
- </el-table-column>
- <el-table-column show-overflow-tooltip label="是否无缓存">
- <template slot-scope="scope">
- <span v-if="scope.row.meta">
- {{ scope.row.meta.noKeepAlive }}
- </span>
- </template>
- </el-table-column>
- <el-table-column show-overflow-tooltip label="badge">
- <template slot-scope="scope">
- <span v-if="scope.row.meta">
- {{ scope.row.meta.badge }}
- </span>
- </template>
- </el-table-column>
- </el-table>
- </el-col>
- <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
- <json-editor :value="res"></json-editor>
- </el-col>
- </el-row>
- </div>
- </template>
- <script>
- import { mapGetters } from "vuex";
- import { tokenTableName } from "@/config/settings";
- import { getRouterList } from "@/api/router";
- import JsonEditor from "@/components/JsonEditor";
- export default {
- name: "Permissions",
- components: {
- JsonEditor,
- },
- data() {
- return {
- form: {
- account: "",
- },
- tableData: [],
- res: [],
- };
- },
- computed: {
- ...mapGetters({
- username: "user/username",
- permissions: "user/permissions",
- }),
- },
- created() {
- this.fetchData();
- },
- mounted() {
- this.form.account = this.username;
- },
- methods: {
- handleChangePermission() {
- localStorage.setItem(tokenTableName, `${this.form.account}-accessToken`);
- location.reload();
- },
- async fetchData() {
- const res = await getRouterList();
- this.tableData = res.data;
- this.res = res;
- },
- },
- };
- </script>
|