优化接口层级及权限

This commit is contained in:
xiangheng
2024-01-06 01:49:20 +08:00
parent b94d1d76d2
commit f4ae9b8131
47 changed files with 294 additions and 270 deletions

View File

@@ -26,8 +26,8 @@
</span>
<el-dropdown
v-perms="[
'common:album:cateRename',
'common:album:cateDel'
'admin:common:album:cateRename',
'admin:common:album:cateDel'
]"
v-if="data.id > 0"
:hide-on-click="false"
@@ -36,7 +36,7 @@
<template #dropdown>
<el-dropdown-menu>
<popover-input
v-perms="['common:album:cateRename']"
v-perms="['admin:common:album:cateRename']"
@confirm="handleEditCate($event, data.id)"
size="default"
:value="data.name"
@@ -52,7 +52,7 @@
</div>
</popover-input>
<div
v-perms="['common:album:cateDel']"
v-perms="['admin:common:album:cateDel']"
@click="handleDeleteCate(data.id)"
>
<el-dropdown-item>删除分组</el-dropdown-item>
@@ -69,7 +69,7 @@
<div class="flex justify-center p-2 border-t border-br">
<popover-input
v-perms="['common:album:cateAdd']"
v-perms="['admin:common:album:cateAdd']"
@confirm="handleAddCate"
size="default"
width="400px"
@@ -86,7 +86,7 @@
<div class="flex-1 flex">
<upload
v-if="type == 'image'"
v-perms="['common:upload:image']"
v-perms="['admin:common:upload:image']"
class="mr-3"
:data="{ cid: cateId }"
:type="type"
@@ -97,7 +97,7 @@
</upload>
<upload
v-if="type == 'video'"
v-perms="['common:upload:video']"
v-perms="['admin:common:upload:video']"
class="mr-3"
:data="{ cid: cateId }"
:type="type"
@@ -107,7 +107,7 @@
<el-button type="primary">本地上传</el-button>
</upload>
<el-button
v-perms="['common:album:albumDel']"
v-perms="['admin:common:album:albumDel']"
v-if="mode == 'page'"
:disabled="!select.length"
@click.stop="batchFileDelete()"
@@ -116,7 +116,7 @@
</el-button>
<popup
v-perms="['common:album:albumMove']"
v-perms="['admin:common:album:albumMove']"
v-if="mode == 'page'"
class="ml-3"
@confirm="batchFileMove"
@@ -215,7 +215,7 @@
<overflow-tooltip class="mt-1" :content="item.name" />
<div class="operation-btns flex items-center">
<popover-input
v-perms="['common:album:albumRename']"
v-perms="['admin:common:album:albumRename']"
@confirm="handleFileRename($event, item.id)"
size="default"
:value="item.name"
@@ -264,7 +264,7 @@
<el-table-column prop="createTime" label="上传时间" min-width="100" />
<el-table-column label="操作" width="150" fixed="right">
<template #default="{ row }">
<div class="inline-block" v-perms="['common:album:albumRename']">
<div class="inline-block" v-perms="['admin:common:album:albumRename']">
<popover-input
@confirm="handleFileRename($event, row.id)"
size="default"
@@ -282,7 +282,7 @@
查看
</el-button>
</div>
<div class="inline-block" v-perms="['common:album:albumDel']">
<div class="inline-block" v-perms="['admin:common:album:albumDel']">
<el-button
type="primary"
link
@@ -316,14 +316,14 @@
</el-checkbox>
</span>
<el-button
v-perms="['common:album:albumDel']"
v-perms="['admin:common:album:albumDel']"
:disabled="!select.length"
@click="batchFileDelete()"
>
删除
</el-button>
<popup
v-perms="['common:album:albumMove']"
v-perms="['admin:common:album:albumMove']"
class="ml-3 inline"
@confirm="batchFileMove"
:disabled="!select.length"

View File

@@ -1,7 +1,7 @@
/**
* perm 操作权限处理
* 指令用法:
* <el-button v-perms="['auth.menu/edit']">编辑</el-button>
* <el-button v-perms="['admin:auth.menu/edit']">编辑</el-button>
*/
import feedback from '@/utils/feedback'

View File

@@ -1,7 +1,7 @@
/**
* perm 操作权限处理
* 指令用法:
* <el-button v-perms="['auth.menu/edit']">编辑</el-button>
* <el-button v-perms="['admin:auth.menu/edit']">编辑</el-button>
*/
import useUserStore from '@/stores/modules/user'

View File

@@ -35,7 +35,7 @@ export function createRouteRecord(route: any, firstRoute: boolean): RouteRecordR
hidden: !route.isShow,
keepAlive: !!route.isCache,
title: route.menuName,
perms: route.perms,
perms: route.perms, //逗号分隔的字符串
query: route.params,
icon: route.menuIcon,
type: route.menuType,
@@ -86,11 +86,11 @@ export function findFirstValidRoute(routes: RouteRecordRaw[]): string | undefine
}
}
}
//通过权限字符查询路由路径
export function getRoutePath(perms: string) {
const routerObj = useRouter() || router
return routerObj.getRoutes().find((item) => item.meta?.perms == perms)?.path || ''
}
// //通过权限字符查询路由路径
// export function getRoutePath(perms: string) {
// const routerObj = useRouter() || router
// return routerObj.getRoutes().find((item) => item.meta?.perms.split(',').includes(perms))?.path || ''
// }
// 重置路由
export function resetRouter() {

View File

@@ -68,7 +68,15 @@ const useUserStore = defineStore({
getUserInfo()
.then((data) => {
this.userInfo = data.user
this.perms = data.permissions
const permissions = []
data.permissions.forEach((item: any) => {
if (item) {
item.split(',').forEach((item: any) => {
permissions.push(item)
})
}
})
this.perms = permissions
resolve(data)
})
.catch((error) => {

View File

@@ -12,7 +12,7 @@
<div>
<el-button
class="mb-4"
v-perms="['article:cate:add']"
v-perms="['admin:article:cate:add']"
type="primary"
@click="handleAdd()"
>
@@ -28,7 +28,7 @@
<el-table-column label="状态" min-width="120">
<template #default="{ row }">
<el-switch
v-perms="['article:cate:change']"
v-perms="['admin:article:cate:change']"
v-model="row.isShow"
:active-value="1"
:inactive-value="0"
@@ -40,7 +40,7 @@
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['article:cate:edit']"
v-perms="['admin:article:cate:edit']"
type="primary"
link
@click="handleEdit(row)"
@@ -48,7 +48,7 @@
编辑
</el-button>
<el-button
v-perms="['article:cate:del']"
v-perms="['admin:article:cate:del']"
type="danger"
link
@click="handleDelete(row.id)"

View File

@@ -35,21 +35,6 @@
</el-form>
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<div>
<router-link
v-perms="['article:add', 'article:add/edit']"
:to="{
path: getRoutePath('article:add/edit')
}"
>
<el-button type="primary" class="mb-4">
<template #icon>
<icon name="el-icon-Plus" />
</template>
发布文章
</el-button>
</router-link>
</div>
<el-table size="large" v-loading="pager.loading" :data="pager.lists">
<el-table-column label="ID" prop="id" min-width="80" />
<el-table-column label="封面" min-width="100">
@@ -77,7 +62,7 @@
<el-table-column label="状态" min-width="100">
<template #default="{ row }">
<el-switch
v-perms="['article:cate:change']"
v-perms="['admin:article:cate:change']"
v-model="row.isShow"
:active-value="1"
:inactive-value="0"
@@ -90,23 +75,7 @@
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['article:edit', 'article:add/edit']"
type="primary"
link
>
<router-link
:to="{
path: getRoutePath('article:add/edit'),
query: {
id: row.id
}
}"
>
编辑
</router-link>
</el-button>
<el-button
v-perms="['article:del']"
v-perms="['admin:article:del']"
type="danger"
link
@click="handleDelete(row.id)"
@@ -126,7 +95,7 @@
import { articleLists, articleDelete, articleStatus, articleCateAll } from '@/api/article'
import { useDictOptions } from '@/hooks/useDictOptions'
import { usePaging } from '@/hooks/usePaging'
import { getRoutePath } from '@/router'
import feedback from '@/utils/feedback'
const queryParams = reactive({
title: '',

View File

@@ -16,19 +16,18 @@
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<div>
<el-button v-perms="['article_collect:add']" type="primary" @click="handleAdd()">
<el-button
v-perms="['admin:article_collect:add']"
type="primary"
@click="handleAdd()"
>
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
</div>
<el-table
class="mt-4"
size="large"
v-loading="pager.loading"
:data="pager.lists"
>
<el-table class="mt-4" size="large" v-loading="pager.loading" :data="pager.lists">
<el-table-column label="用户ID" prop="userId" min-width="100" />
<el-table-column label="文章ID" prop="articleId" min-width="100" />
<el-table-column label="创建时间" prop="createTime" min-width="100" />
@@ -36,7 +35,7 @@
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['article_collect:edit']"
v-perms="['admin:article_collect:edit']"
type="primary"
link
@click="handleEdit(row)"
@@ -44,7 +43,7 @@
编辑
</el-button>
<el-button
v-perms="['article_collect:del']"
v-perms="['admin:article_collect:del']"
type="danger"
link
@click="handleDelete(row.id)"
@@ -58,12 +57,7 @@
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup
v-if="showEdit"
ref="editRef"
@success="getLists"
@close="showEdit = false"
/>
<edit-popup v-if="showEdit" ref="editRef" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup name="article_collect">
@@ -75,7 +69,7 @@ const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const showEdit = ref(false)
const queryParams = reactive({
userId: '',
articleId: '',
articleId: ''
})
const { pager, getLists, resetPage, resetParams } = usePaging({
@@ -83,7 +77,6 @@ const { pager, getLists, resetPage, resetParams } = usePaging({
params: queryParams
})
const handleAdd = async () => {
showEdit.value = true
await nextTick()

View File

@@ -27,7 +27,7 @@
</el-form-item>
</el-form>
</el-card>
<footer-btns v-perms="['channel:h5:save']">
<footer-btns v-perms="['admin:channel:h5:save']">
<el-button type="primary" @click="handelSave">保存</el-button>
</footer-btns>
</div>

View File

@@ -135,7 +135,7 @@
</el-form-item>
</el-card>
</el-form>
<footer-btns v-perms="['channel:mp:save']">
<footer-btns v-perms="['admin:channel:mp:save']">
<el-button type="primary" @click="handelSave">保存</el-button>
</footer-btns>
</div>

View File

@@ -30,7 +30,7 @@
</el-form-item>
</el-card>
</el-form>
<footer-btns v-perms="['channel:wx:save']">
<footer-btns v-perms="['admin:channel:wx:save']">
<el-button type="primary" @click="handelSave">保存</el-button>
</footer-btns>
</div>

View File

@@ -151,7 +151,7 @@
</el-form-item>
</el-card>
</el-form>
<footer-btns v-perms="['channel:h5:save']">
<footer-btns v-perms="['admin:channel:h5:save']">
<el-button type="primary" @click="handelSave">保存</el-button>
</footer-btns>
</div>

View File

@@ -29,10 +29,14 @@ getOaMenuFunc()
</el-card>
<footer-btns>
<el-button type="primary" @click="handleSave" v-perms="['channel:oaMenu:save']">
<el-button type="primary" @click="handleSave" v-perms="['admin:channel:oaMenu:save']">
保存
</el-button>
<el-button type="primary" @click="handlePublish" v-perms="['channel:oaMenu:publish']">
<el-button
type="primary"
@click="handlePublish"
v-perms="['admin:channel:oaMenu:publish']"
>
发布
</el-button>
</footer-btns>

View File

@@ -11,7 +11,7 @@
<el-card class="!border-none mt-4" shadow="never">
<div>
<el-button
v-perms="['channel:oaReplyDefault:add']"
v-perms="['admin:channel:oaReplyDefault:add']"
class="mb-4"
type="primary"
@click="handleAdd()"
@@ -33,7 +33,7 @@
<el-table-column label="状态" min-width="120">
<template #default="{ row }">
<el-switch
v-perms="['channel:oaReplyDefault:status']"
v-perms="['admin:channel:oaReplyDefault:status']"
v-model="row.status"
:active-value="1"
:inactive-value="0"
@@ -45,7 +45,7 @@
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['channel:oaReplyDefault:edit']"
v-perms="['admin:channel:oaReplyDefault:edit']"
type="primary"
link
@click="handleEdit(row)"
@@ -53,7 +53,7 @@
编辑
</el-button>
<el-button
v-perms="['channel:oaReplyDefault:del']"
v-perms="['admin:channel:oaReplyDefault:del']"
type="danger"
link
@click="handleDelete(row.id)"

View File

@@ -11,7 +11,7 @@
<el-card class="!border-none mt-4" shadow="never">
<div>
<el-button
v-perms="['channel:oaReplyFollow:add']"
v-perms="['admin:channel:oaReplyFollow:add']"
class="mb-4"
type="primary"
@click="handleAdd()"
@@ -33,7 +33,7 @@
<el-table-column label="状态" min-width="120">
<template #default="{ row }">
<el-switch
v-perms="['channel:oaReplyFollow:status']"
v-perms="['admin:channel:oaReplyFollow:status']"
v-model="row.status"
:active-value="1"
:inactive-value="0"
@@ -45,7 +45,7 @@
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['channel:oaReplyFollow:edit']"
v-perms="['admin:channel:oaReplyFollow:edit']"
type="primary"
link
@click="handleEdit(row)"
@@ -53,7 +53,7 @@
编辑
</el-button>
<el-button
v-perms="['channel:oaReplyFollow:del']"
v-perms="['admin:channel:oaReplyFollow:del']"
type="danger"
link
@click="handleDelete(row.id)"

View File

@@ -11,7 +11,7 @@
<el-card class="!border-none mt-4" shadow="never">
<div>
<el-button
v-perms="['channel:oaReplyKeyword:add']"
v-perms="['admin:channel:oaReplyKeyword:add']"
class="mb-4"
type="primary"
@click="handleAdd()"
@@ -39,7 +39,7 @@
<el-table-column label="状态" min-width="120">
<template #default="{ row }">
<el-switch
v-perms="['channel:oaReplyKeyword:status']"
v-perms="['admin:channel:oaReplyKeyword:status']"
v-model="row.status"
:active-value="1"
:inactive-value="0"
@@ -51,7 +51,7 @@
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['channel:oaReplyKeyword:edit']"
v-perms="['admin:channel:oaReplyKeyword:edit']"
type="primary"
link
@click="handleEdit(row)"
@@ -59,7 +59,7 @@
编辑
</el-button>
<el-button
v-perms="['channel:oaReplyKeyword:del']"
v-perms="['admin:channel:oaReplyKeyword:del']"
type="danger"
link
@click="handleDelete(row.id)"

View File

@@ -20,7 +20,7 @@
:limit="32"
@confirm="handleEdit($event, 'username')"
>
<el-button type="primary" link v-perms="['user:edit']">
<el-button type="primary" link v-perms="['admin:user:edit']">
<icon name="el-icon-EditPen" />
</el-button>
</popover-input>
@@ -32,7 +32,7 @@
:limit="32"
@confirm="handleEdit($event, 'realName')"
>
<el-button type="primary" link v-perms="['user:edit']">
<el-button type="primary" link v-perms="['admin:user:edit']">
<icon name="el-icon-EditPen" />
</el-button>
</popover-input>
@@ -58,7 +58,7 @@
]"
@confirm="handleEdit($event, 'sex')"
>
<el-button type="primary" link v-perms="['user:edit']">
<el-button type="primary" link v-perms="['admin:user:edit']">
<icon name="el-icon-EditPen" />
</el-button>
</popover-input>
@@ -70,7 +70,7 @@
type="number"
@confirm="handleEdit($event, 'mobile')"
>
<el-button type="primary" link v-perms="['user:edit']">
<el-button type="primary" link v-perms="['admin:user:edit']">
<icon name="el-icon-EditPen" />
</el-button>
</popover-input>

View File

@@ -47,22 +47,6 @@
<el-table-column label="性别" prop="sex" min-width="100" />
<el-table-column label="注册来源" prop="channel" min-width="100" />
<el-table-column label="注册时间" prop="createTime" min-width="120" />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['user:detail']" type="primary" link>
<router-link
:to="{
path: getRoutePath('user:detail'),
query: {
id: row.id
}
}"
>
详情
</router-link>
</el-button>
</template>
</el-table-column>
</el-table>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
@@ -72,7 +56,7 @@
</template>
<script lang="ts" setup name="consumerLists">
import { usePaging } from '@/hooks/usePaging'
import { getRoutePath } from '@/router'
import { getUserList } from '@/api/consumer'
import { ClientMap } from '@/enums/appEnums'
const queryParams = reactive({

View File

@@ -7,7 +7,7 @@
<attr-setting class="flex-1" :widget="getSelectWidget" />
</div>
</el-card>
<footer-btns class="mt-4" :fixed="false" v-perms="['decorate:pages:save']">
<footer-btns class="mt-4" :fixed="false" v-perms="['admin:decorate:pages:save']">
<el-button type="primary" @click="setData">保存</el-button>
</footer-btns>
</div>

View File

@@ -127,7 +127,7 @@
</div>
</div>
</el-card>
<footer-btns class="mt-4" :fixed="false" v-perms="['decorate:tabbar:save']">
<footer-btns class="mt-4" :fixed="false" v-perms="['admin:decorate:tabbar:save']">
<el-button type="primary" @click="setData">保存</el-button>
</footer-btns>
</div>

View File

@@ -27,7 +27,7 @@
<el-card class="!border-none mt-4" shadow="never" v-loading="pager.loading">
<div class="flex">
<data-table
v-perms="['gen:importTable']"
v-perms="['admin:gen:importTable']"
class="inline-block mr-[10px]"
@success="getLists"
>
@@ -39,7 +39,7 @@
</el-button>
</data-table>
<el-button
v-perms="['gen:delTable']"
v-perms="['admin:gen:delTable']"
:disabled="!selectData.length"
@click="handleDelete()"
type="danger"
@@ -50,7 +50,7 @@
删除
</el-button>
<el-button
v-perms="['gen:genCode', 'gen:downloadCode']"
v-perms="['admin:gen:genCode', 'admin:gen:downloadCode']"
:disabled="!selectData.length"
@click="handleGenerate(selectData)"
>
@@ -72,7 +72,7 @@
<template #default="{ row }">
<div class="flex items-center">
<el-button
v-perms="['gen:previewCode']"
v-perms="['admin:gen:previewCode']"
type="primary"
link
@click="handlePreview(row.id)"
@@ -80,10 +80,10 @@
预览
</el-button>
<el-button type="primary" link v-perms="['gen:editTable']">
<el-button type="primary" link v-perms="['admin:gen:editTable']">
<router-link
:to="{
path: getRoutePath('gen:editTable'),
path: '/dev_tools/dev_tools/code/edit',
query: {
id: row.id
}
@@ -96,10 +96,10 @@
class="ml-2"
@command="handleCommand($event, row)"
v-perms="[
'gen:genCode',
'gen:downloadCode',
'gen:syncTable',
'gen:delTable'
'admin:gen:genCode',
'admin:gen:downloadCode',
'admin:gen:syncTable',
'admin:gen:delTable'
]"
>
<el-button type="primary" link>
@@ -109,21 +109,26 @@
<template #dropdown>
<el-dropdown-menu>
<div v-perms="['gen:genCode', 'gen:downloadCode']">
<div
v-perms="[
'admin:gen:genCode',
'admin:gen:downloadCode'
]"
>
<el-dropdown-item command="generate">
<el-button type="primary" link>
生成代码
</el-button>
</el-dropdown-item>
</div>
<div v-perms="['gen:syncTable']">
<div v-perms="['admin:gen:syncTable']">
<el-dropdown-item command="sync">
<el-button type="primary" link>
同步
</el-button>
</el-dropdown-item>
</div>
<div v-perms="['gen:delTable']">
<div v-perms="['admin:gen:delTable']">
<el-dropdown-item command="delete">
<el-button type="danger" link> 删除 </el-button>
</el-dropdown-item>
@@ -161,7 +166,6 @@ import DataTable from '../components/data-table.vue'
import CodePreview from '../components/code-preview.vue'
import feedback from '@/utils/feedback'
import { streamFileDownload } from '@/utils/file'
import { getRoutePath } from '@/router'
const formData = reactive({
tableName: '',

View File

@@ -67,7 +67,7 @@
<el-table-column label="操作" width="180" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['flow_apply:edit']"
v-perms="['admin:flow:flow_apply:edit']"
type="primary"
link
@click="OpenViewForm(row)"
@@ -76,7 +76,7 @@
</el-button>
<el-button
v-perms="['flow_apply:del']"
v-perms="['admin:flow:flow_apply:del']"
type="danger"
link
@click="handleDelete(row.id)"

View File

@@ -47,7 +47,11 @@
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<div>
<el-button v-perms="['flow_apply:add']" type="primary" @click="handleAdd()">
<el-button
v-perms="['admin:flow:flow_apply:add']"
type="primary"
@click="handleAdd()"
>
<template #icon>
<icon name="el-icon-Plus" />
</template>
@@ -75,7 +79,7 @@
<el-table-column label="操作" width="180" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['flow_apply:edit']"
v-perms="['admin:flow:flow_apply:edit']"
type="primary"
link
@click="OpenViewForm(row)"
@@ -84,7 +88,7 @@
</el-button>
<el-button
v-if="row.status == 1 && row.formValue"
v-perms="['flow_apply:edit']"
v-perms="['admin:flow:flow_apply:edit']"
type="primary"
link
@click="OpenApplySubmit(row)"
@@ -93,7 +97,7 @@
</el-button>
<!-- <el-button
v-perms="['flow_apply:edit']"
v-perms="['admin:flow:flow_apply:edit']"
type="primary"
link
@click="handleEdit(row)"
@@ -101,7 +105,7 @@
编辑
</el-button> -->
<el-button
v-perms="['flow_apply:del']"
v-perms="['admin:flow:flow_apply:del']"
type="danger"
link
@click="handleDelete(row.id)"

View File

@@ -33,7 +33,7 @@
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<!-- <el-button
v-perms="['flow_history:edit']"
v-perms="['admin:flow_history:edit']"
type="primary"
link
@click="handleOpen(row)"
@@ -41,7 +41,7 @@
审批
</el-button> -->
<el-button
v-perms="['flow_apply:edit']"
v-perms="['admin:flow:flow_apply:edit']"
type="primary"
link
@click="OpenViewForm(row)"
@@ -49,7 +49,7 @@
{{ row.passStatus == 1 ? '审批' : '预览' }}
</el-button>
<!-- <el-button
v-perms="['flow_apply:edit']"
v-perms="['admin:flow:flow_apply:edit']"
type="primary"
link
@click="OpenApplySubmit(row)"

View File

@@ -33,23 +33,18 @@
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<!-- <el-button
v-perms="['flow_history:edit']"
v-perms="['admin:flow_history:edit']"
type="primary"
link
@click="handleOpen(row)"
>
审批
</el-button> -->
<el-button
v-perms="['flow_apply:edit']"
type="primary"
link
@click="OpenViewForm(row)"
>
<el-button type="primary" link @click="OpenViewForm(row)">
{{ row.passStatus == 1 ? '审批' : '预览' }}
</el-button>
<!-- <el-button
v-perms="['flow_apply:edit']"
v-perms="['admin:flow:flow_apply:edit']"
type="primary"
link
@click="OpenApplySubmit(row)"

View File

@@ -19,7 +19,11 @@
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<div>
<el-button v-perms="['flow_template:add']" type="primary" @click="handleAdd()">
<el-button
v-perms="['admin:flow_template:add']"
type="primary"
@click="handleAdd()"
>
<template #icon>
<icon name="el-icon-Plus" />
</template>
@@ -39,7 +43,7 @@
<el-table-column label="操作" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['flow_template:edit']"
v-perms="['admin:flow_template:edit']"
type="primary"
link
@click="handleConfig(row)"
@@ -47,7 +51,7 @@
配置
</el-button>
<!-- <el-button
v-perms="['flow_template:edit']"
v-perms="['admin:flow_template:edit']"
type="primary"
link
@click="handleEdit(row)"
@@ -55,7 +59,7 @@
编辑
</el-button> -->
<el-button
v-perms="['flow_template:del']"
v-perms="['admin:flow_template:del']"
type="danger"
link
@click="handleDelete(row.id)"

View File

@@ -27,30 +27,16 @@
<el-tag type="danger" v-else>关闭</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" min-width="80" fixed="right">
<template #default="{ row }">
<el-button v-perms="['setting:notice:detail']" type="primary" link>
<router-link
:to="{
path: getRoutePath('setting:notice:detail'),
query: {
id: row.id
}
}"
>
设置
</router-link>
</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</div>
</template>
<script lang="ts" setup name="notice">
<script lang="ts" setup>
import { noticeLists } from '@/api/message'
import { getRoutePath } from '@/router'
defineOptions({
name: 'notice'
})
enum NoticeEnums {
USER = 1,
PLATFORM = 2

View File

@@ -12,7 +12,7 @@
<el-table-column label="操作" min-width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['setting:storage:edit']"
v-perms="['admin:setting:storage:edit']"
type="primary"
link
@click="handleSet(row.alias)"

View File

@@ -25,7 +25,7 @@
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<div>
<el-button v-perms="['system:dept:add']" type="primary" @click="handleAdd()">
<el-button v-perms="['admin:system:dept:add']" type="primary" @click="handleAdd()">
<template #icon>
<icon name="el-icon-Plus" />
</template>
@@ -62,7 +62,7 @@
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['system:dept:add']"
v-perms="['admin:system:dept:add']"
type="primary"
link
@click="handleAdd(row.id)"
@@ -70,7 +70,7 @@
新增
</el-button>
<el-button
v-perms="['system:dept:edit']"
v-perms="['admin:system:dept:edit']"
type="primary"
link
@click="handleEdit(row)"
@@ -79,7 +79,7 @@
</el-button>
<el-button
v-if="row.pid !== 0"
v-perms="['system:dept:del']"
v-perms="['admin:system:dept:del']"
type="danger"
link
@click="handleDelete(row.id)"

View File

@@ -33,7 +33,7 @@
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<div>
<el-button v-perms="['system:post:add']" type="primary" @click="handleAdd()">
<el-button v-perms="['admin:system:post:add']" type="primary" @click="handleAdd()">
<template #icon>
<icon name="el-icon-Plus" />
</template>
@@ -61,7 +61,7 @@
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['system:post:edit']"
v-perms="['admin:system:post:edit']"
type="primary"
link
@click="handleEdit(row)"
@@ -69,7 +69,7 @@
编辑
</el-button>
<el-button
v-perms="['system:post:del']"
v-perms="['admin:system:post:del']"
type="danger"
link
@click="handleDelete(row.id)"

View File

@@ -36,7 +36,7 @@
</el-form>
</el-card>
<el-card v-loading="pager.loading" class="mt-4 !border-none" shadow="never">
<el-button v-perms="['system:admin:add']" type="primary" @click="handleAdd">
<el-button v-perms="['admin:system:admin:add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
@@ -60,7 +60,7 @@
<el-table-column label="状态" min-width="100">
<template #default="{ row }">
<el-switch
v-perms="['system:admin:disable']"
v-perms="['admin:system:admin:disable']"
v-if="row.id != 1"
:model-value="row.isDisable"
:active-value="0"
@@ -72,7 +72,7 @@
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['system:admin:edit']"
v-perms="['admin:system:admin:edit']"
type="primary"
link
@click="handleEdit(row)"
@@ -81,7 +81,7 @@
</el-button>
<el-button
v-if="row.id != 1"
v-perms="['system:admin:del']"
v-perms="['admin:system:admin:del']"
type="danger"
link
@click="handleDelete(row.id)"

View File

@@ -91,26 +91,31 @@
</el-form-item>
<el-form-item
v-if="formData.menuType != MenuEnum.CATALOGUE"
label="权限字符"
label="接口权限"
prop="perms"
>
<div class="flex-1">
<el-input v-model="formData.perms" placeholder="请输入权限字符" clearable />
<!-- {{ formData.permsArr }} -->
<!-- <el-input v-model="formData.perms" placeholder="请输入接口权限" clearable /> -->
<el-select
v-model="formData.perms"
placeholder="请选择权限字符"
v-model="formData.permsArr"
clearable
multiple
filterable
placeholder="请选择接口权限"
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in permissionOptions"
:key="index"
:label="item"
:value="item"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
<div class="form-tips">
将作为server端API验权使用请求路径`api/system/admin/list`权限为`system:admin:list`请谨慎修改
<!-- 将作为server端API验权使用请求路径`api/admin/system/admin/list`权限为`admin:system:admin:list` -->
可以多个但建议一个接口一个按钮
</div>
</div>
</el-form-item>
@@ -232,6 +237,7 @@ const formData = reactive({
paths: '',
//权限链接
perms: '',
permsArr: [],
//前端组件
component: '',
//选中路径
@@ -288,12 +294,30 @@ const getMenu = async () => {
}
function getApiListFn() {
getApiList().then((res: any) => {
permissionOptions.value = res
const arr = []
res.forEach((item: string) => {
if (item.indexOf('/api/admin/') == 0) {
const per = item.replace(/\/api\//, '').replace(/\//g, ':')
arr.push({
value: per,
label: item
})
}
})
// console.log(pathsToTree(arr))
permissionOptions.value = arr.sort()
})
}
const handleSubmit = async () => {
await formRef.value?.validate()
mode.value == 'edit' ? await menuEdit(formData) : await menuAdd(formData)
const data = { ...formData }
if (data.permsArr) {
data.perms = data.permsArr.join(',')
} else {
data.perms = ''
}
mode.value == 'edit' ? await menuEdit(data) : await menuAdd(data)
popupRef.value?.close()
feedback.msgSuccess('操作成功')
emit('success')
@@ -308,10 +332,14 @@ const setFormData = (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
if (key == 'perms') {
formData['permsArr'] = data[key].split(',')
} else {
formData[key] = data[key]
}
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await menuDetail({

View File

@@ -2,7 +2,7 @@
<div class="menu-lists">
<el-card class="!border-none" shadow="never">
<div>
<el-button v-perms="['system:menu:add']" type="primary" @click="handleAdd()">
<el-button v-perms="['admin:system:menu:add']" type="primary" @click="handleAdd()">
<template #icon>
<icon name="el-icon-Plus" />
</template>
@@ -39,19 +39,14 @@
</div>
</template>
</el-table-column>
<el-table-column
label="权限标识"
prop="perms"
min-width="150"
show-overflow-tooltip
/>
<el-table-column label="权限标识" prop="perms" min-width="180" />
<el-table-column label="状态" prop="isDisable" min-width="100">
<template #default="{ row }">
<el-tag v-if="row.isDisable == 0">正常</el-tag>
<el-tag v-else type="danger">停用</el-tag>
</template>
</el-table-column>
<el-table-column label="排序" prop="menuSort" min-width="100" />
<el-table-column label="排序" prop="menuSort" min-width="60" />
<el-table-column
label="更新时间"
prop="updateTime"
@@ -60,7 +55,7 @@
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['system:menu:add']"
v-perms="['admin:system:menu:add']"
type="primary"
link
@click="handleAdd(row.id)"
@@ -68,7 +63,7 @@
新增
</el-button>
<el-button
v-perms="['system:menu:edit']"
v-perms="['admin:system:menu:edit']"
type="primary"
link
@click="handleEdit(row)"
@@ -76,7 +71,7 @@
编辑
</el-button>
<el-button
v-perms="['system:menu:del']"
v-perms="['admin:system:menu:del']"
type="danger"
link
@click="handleDelete(row.id)"

View File

@@ -2,7 +2,7 @@
<div class="role-lists">
<el-card class="!border-none" shadow="never">
<div>
<el-button v-perms="['system:role:add']" type="primary" @click="handleAdd">
<el-button v-perms="['admin:system:role:add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
@@ -26,7 +26,7 @@
<el-table-column label="操作" width="190" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['system:role:edit']"
v-perms="['admin:system:role:edit']"
link
type="primary"
@click="handleEdit(row)"
@@ -34,7 +34,7 @@
编辑
</el-button>
<el-button
v-perms="['system:role:edit']"
v-perms="['admin:system:role:edit']"
link
type="primary"
@click="handleAuth(row)"
@@ -42,7 +42,7 @@
权限设置
</el-button>
<el-button
v-perms="['system:role:del']"
v-perms="['admin:system:role:del']"
link
type="danger"
@click="handleDelete(row.id)"

View File

@@ -36,14 +36,18 @@
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<div>
<el-button v-perms="['setting:dict:data:add']" type="primary" @click="handleAdd">
<el-button
v-perms="['admin:setting:dict:data:add']"
type="primary"
@click="handleAdd"
>
<template #icon>
<icon name="el-icon-Plus" />
</template>
添加数据
</el-button>
<el-button
v-perms="['setting:dict:data:del']"
v-perms="['admin:setting:dict:data:del']"
:disabled="!selectData.length"
type="danger"
@click="handleDelete(selectData)"
@@ -86,7 +90,7 @@
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['setting:dict:data:edit']"
v-perms="['admin:setting:dict:data:edit']"
link
type="primary"
@click="handleEdit(row)"
@@ -94,7 +98,7 @@
编辑
</el-button>
<el-button
v-perms="['setting:dict:data:del']"
v-perms="['admin:setting:dict:data:del']"
link
type="danger"
@click="handleDelete([row.id])"

View File

@@ -33,14 +33,18 @@
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<div>
<el-button v-perms="['setting:dict:type:add']" type="primary" @click="handleAdd">
<el-button
v-perms="['admin:setting:dict:type:add']"
type="primary"
@click="handleAdd"
>
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button
v-perms="['setting:dict:type:list']"
v-perms="['admin:setting:dict:type:list']"
:disabled="!selectData.length"
type="danger"
@click="handleDelete(selectData)"
@@ -77,17 +81,21 @@
<el-table-column label="操作" width="190" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['setting:dict:type:edit']"
v-perms="['admin:setting:dict:type:edit']"
link
type="primary"
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button v-perms="['setting:dict:data:list']" type="primary" link>
<el-button
v-perms="['admin:setting:dict:data:list']"
type="primary"
link
>
<router-link
:to="{
path: getRoutePath('setting:dict:data:list'),
path: '/dev_tools/dict/data',
query: {
type: row.dictType
}
@@ -97,7 +105,7 @@
</router-link>
</el-button>
<el-button
v-perms="['setting:dict:type:del']"
v-perms="['admin:setting:dict:type:del']"
link
type="danger"
@click="handleDelete([row.id])"
@@ -120,7 +128,6 @@
<script lang="ts" setup name="dictType">
import { dictTypeDelete, dictTypeLists } from '@/api/setting/dict'
import { usePaging } from '@/hooks/usePaging'
import { getRoutePath } from '@/router'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()

View File

@@ -44,7 +44,7 @@
<el-table-column label="操作" min-width="80" fixed="right">
<template #default="{ $index }">
<el-button
v-perms="['setting:storage:edit']"
v-perms="['admin:setting:storage:edit']"
type="danger"
link
@click="handleDel($index)"
@@ -81,7 +81,7 @@
</div>
</el-card>
<footer-btns v-perms="['setting:search:save']">
<footer-btns v-perms="['admin:setting:search:save']">
<el-button type="primary" @click="handleSave">保存</el-button>
</footer-btns>
</div>

View File

@@ -1,7 +1,12 @@
<template>
<div class="storage">
<el-card class="!border-none" shadow="never">
<el-alert type="warning" title="温馨提示1.切换存储方式后需要将资源文件传输至新的存储端2.请勿随意切换存储方式,可能导致图片无法查看" :closable="false" show-icon></el-alert>
<el-alert
type="warning"
title="温馨提示1.切换存储方式后需要将资源文件传输至新的存储端2.请勿随意切换存储方式,可能导致图片无法查看"
:closable="false"
show-icon
></el-alert>
</el-card>
<el-card class="!border-none mt-4" shadow="never" v-loading="state.loading">
<el-table size="large" :data="state.lists">
@@ -15,7 +20,14 @@
</el-table-column>
<el-table-column label="操作" min-width="80" fixed="right">
<template #default="{ row }">
<el-button v-perms="['setting:storage:edit']" type="primary" link @click="handleSet(row.alias)"> 设置 </el-button>
<el-button
v-perms="['admin:setting:storage:edit']"
type="primary"
link
@click="handleSet(row.alias)"
>
设置
</el-button>
</template>
</el-table-column>
</el-table>

View File

@@ -92,7 +92,7 @@
</el-card>
</el-form>
<footer-btns v-perms="['setting:login:save']">
<footer-btns v-perms="['admin:setting:login:save']">
<el-button type="primary" @click="handleSubmit">保存</el-button>
</footer-btns>
</div>

View File

@@ -19,7 +19,7 @@
</el-form>
</el-card>
<footer-btns v-perms="['setting:user:save']">
<footer-btns v-perms="['admin:setting:user:save']">
<el-button type="primary" @click="handleSubmit">保存</el-button>
</footer-btns>
</div>

View File

@@ -44,7 +44,7 @@
</el-form>
</el-card>
<footer-btns v-perms="['setting:copyright:save']">
<footer-btns v-perms="['admin:setting:copyright:save']">
<el-button type="primary" @click="handleSubmit">保存</el-button>
</footer-btns>
</div>

View File

@@ -53,7 +53,7 @@
</el-form-item>
</el-card>
</el-form>
<footer-btns v-perms="['setting:website:save']">
<footer-btns v-perms="['admin:setting:website:save']">
<el-button type="primary" @click="handleSubmit">保存</el-button>
</footer-btns>
</div>

View File

@@ -25,7 +25,7 @@
<editor class="mb-10" v-model="formData.privacy.content" height="500"></editor>
</el-card>
</div>
<footer-btns v-perms="['setting:protocol:save']">
<footer-btns v-perms="['admin:setting:protocol:save']">
<el-button type="primary" @click="handelSave">保存</el-button>
</footer-btns>
</template>

27
server/README.md Normal file
View File

@@ -0,0 +1,27 @@
### 接口路径说明
所有接口`api/`开头,方便反向代理
后台接口`api/admin`开头,后台权限及菜单设计以这个为主
前台接口`api/*`开头,无权限设计,需要自己实现
### 目录结构
```
├── server
│ ├── admin // 后台,可以参照添加webapp等模块
│ │ ├──** //模块
│ │ ├──────/*_ctl.go // 模块控制器
│ │ ├──────/*_schema.go // 模块schema
│ │ ├──────/*_service.go // 模块服务
│ ├── config // 配置
│ ├── middleware // 中间件
│ ├── model // 数据库模型
│ ├── util // 工具包
│ ├── routers // 路由`api`,
│ ├── resources // 验证码依赖文件,待调整
│ ├── static // 静态文件,访问路由`/api/static/*`
│ ├── main.go // 入口
│ ├── .env // 配置文件注意不提交git
```

View File

@@ -46,7 +46,7 @@
</el-card>
<el-card class="!border-none" shadow="never">
<div>
<el-button v-perms="['{{{ .ModuleName }}}:add']" type="primary" @click="handleAdd()">
<el-button v-perms="['admin:{{{ .ModuleName }}}:add']" type="primary" @click="handleAdd()">
<template #icon>
<icon name="el-icon-Plus" />
</template>
@@ -92,7 +92,7 @@
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['{{{ .ModuleName }}}:add']"
v-perms="['admin:{{{ .ModuleName }}}:add']"
type="primary"
link
@click="handleAdd(row.{{{ .Table.TreePrimary }}})"
@@ -100,7 +100,7 @@
新增
</el-button>
<el-button
v-perms="['{{{ .ModuleName }}}:edit']"
v-perms="['admin:{{{ .ModuleName }}}:edit']"
type="primary"
link
@click="handleEdit(row)"
@@ -108,7 +108,7 @@
编辑
</el-button>
<el-button
v-perms="['{{{ .ModuleName }}}:del']"
v-perms="['admin:{{{ .ModuleName }}}:del']"
type="danger"
link
@click="handleDelete(row.{{{ .PrimaryKey }}})"

View File

@@ -45,7 +45,7 @@
</el-card>
<el-card class="!border-none mt-4" shadow="never">
<div>
<el-button v-perms="['{{{ .ModuleName }}}:add']" type="primary" @click="handleAdd()">
<el-button v-perms="['admin:{{{ .ModuleName }}}:add']" type="primary" @click="handleAdd()">
<template #icon>
<icon name="el-icon-Plus" />
</template>
@@ -87,7 +87,7 @@
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['{{{ .ModuleName }}}:edit']"
v-perms="['admin:{{{ .ModuleName }}}:edit']"
type="primary"
link
@click="handleEdit(row)"
@@ -95,7 +95,7 @@
编辑
</el-button>
<el-button
v-perms="['{{{ .ModuleName }}}:del']"
v-perms="['admin:{{{ .ModuleName }}}:del']"
type="danger"
link
@click="handleDelete(row.{{{ .PrimaryKey }}})"

View File

@@ -14,7 +14,7 @@ type SystemAuthMenuAddReq struct {
MenuName string `form:"menuName" binding:"required,min=1,max=30"` // 菜单名称
MenuIcon string `form:"menuIcon" binding:"max=100"` // 菜单图标
MenuSort int `form:"menuSort" binding:"gte=0"` // 菜单排序
Perms string `form:"perms" binding:"max=100"` // 权限标识
Perms string `form:"perms" binding:"max=10000"` // 权限标识
Paths string `form:"paths" binding:"max=200"` // 路由地址
Component string `form:"component" binding:"max=200"` // 前端组件
Selected string `form:"selected" binding:"max=200"` // 选中路径
@@ -32,7 +32,7 @@ type SystemAuthMenuEditReq struct {
MenuName string `form:"menuName" binding:"required,min=1,max=30"` // 菜单名称
MenuIcon string `form:"menuIcon" binding:"max=100"` // 菜单图标
MenuSort int `form:"menuSort" binding:"gte=0"` // 菜单排序
Perms string `form:"perms" binding:"max=100"` // 权限标识
Perms string `form:"perms" binding:"max=10000"` // 权限标识
Paths string `form:"paths" binding:"max=200"` // 路由地址
Component string `form:"component" binding:"max=200"` // 前端组件
Selected string `form:"selected" binding:"max=200"` // 选中路径