🎨 feat: 删除按钮权限识别;如果有需要自己加

This commit is contained in:
bunny 2025-05-09 20:02:49 +08:00
parent 0b2ad00cfe
commit 7350bff058
55 changed files with 563 additions and 912 deletions

View File

@ -2,13 +2,11 @@
> [!IMPORTANT] > [!IMPORTANT]
> >
> 前端项目整体都由此模板开发 > 开源权限模板[Pure-admin](https://pure-admin.github.io/vue-pure-admin/)
>
> 项目由[小铭](https://github.com/xiaoxian521)开源权限模板[Pure-admin](https://pure-admin.github.io/vue-pure-admin/)
> >
> **Pure-admin文档**https://pure-admin.github.io/pure-admin-doc > **Pure-admin文档**https://pure-admin.github.io/pure-admin-doc
>
> [!TIP] > **默认凭证**
> >
> 项目中有一个默认管理员,数据库中用户`id`是`1` > 项目中有一个默认管理员,数据库中用户`id`是`1`
> >
@ -24,7 +22,9 @@
> >
> `$2a$10$h5BUwmMaVcEuu7Bz0TPPy.PQV8JP6CFJlbHTgT78G1s0YPIu2kfXe` > `$2a$10$h5BUwmMaVcEuu7Bz0TPPy.PQV8JP6CFJlbHTgT78G1s0YPIu2kfXe`
## 视频说明地址 可粗可细的权限控制,多平台文件上传。
## 📽️视频说明地址
**介绍视频视频** **介绍视频视频**
@ -51,10 +51,24 @@
一个基于 Spring Security 6 的现代化动态权限控制系统,提供完整的 RBAC 权限管理解决方案。支持前后端分离架构,可灵活配置细粒度权限控制。 一个基于 Spring Security 6 的现代化动态权限控制系统,提供完整的 RBAC 权限管理解决方案。支持前后端分离架构,可灵活配置细粒度权限控制。
## ✨ v4.0.0 重大更新 ## 😋控制器上注解说明
整个项目是基于URL方便定义权限接口即使项目中接口不存在通过URL的方式增删权限。
比如项目需要为`dept`分配了角色,这个角色可以访问`dept`下所有的接口,那么就可以写成`api/dept/**`,如果需要`dept`下某个接口,`/api/dept/aaa/bbb`,这种形式。
如果针对分页查询分页参数写在URL上的可以这样做`/api/dept/*/*`这样就可以做到灵活的权限控制。
但是在部分场景下接口就是我们的权限这时如果手动一个一个添加URL很麻烦所以使用的swagger自带的注解和`PermissionTag`,自定义的注解的方式,如果这时的项目需求是,为整个接口添加权限,就可以用反射的方式添加。
使用放射的方式已经放在controller的目录下看`ReadMe`文档即可。
## ✨重大更新
### 核心改进 ### 核心改进
**v4.0.0**
- **全面重构**后端接口、实体类等重构前端重构部分j+优化操作体验 - **全面重构**后端接口、实体类等重构前端重构部分j+优化操作体验
- **批量操作支持** - **批量操作支持**
- ✅菜单管理:完善属性内容 - ✅菜单管理:完善属性内容
@ -62,27 +76,13 @@
- ✅ 角色管理:支持 Excel 批量更新 - ✅ 角色管理:支持 Excel 批量更新
- ✅ 多语言配置:支持 JSON/Excel 更新(全量替换模式) - ✅ 多语言配置:支持 JSON/Excel 更新(全量替换模式)
### 技术亮点 **v4.0.1**
- **注解扫描**:通过 `AnnotationScanner.java` 自动扫描想要的注解 - 文件系统支持多平台,只需要手动配置即可。
- 有需要参考文档https://x-file-storage.xuyanwu.cn/#/
- 文件删除和下载等需要实现对应接口`FileRecorder `,目前以实现,对应代码和控制器都在文件夹`file`下如有需要修改可以参考【x-file-storage】文档修改。
```java ## 🧠用法提示
// 示例:扫描特定注解的类
public static Set<Class<?>> getClassesWithAnnotation(Class<?> annotation) {
// 实现细节...
}
```
- **应用场景**
- 定时任务配置
- 权限接口发现
### 界面优化
![权限管理界面](./images/image-20250428223816172.png)
![角色管理界面](./images/image-20250428223843974.png)
## :tipping_hand_man:用法提示
> [!TIP] > [!TIP]
> >
@ -124,17 +124,15 @@ http.authorizeHttpRequests(auth -> auth
### Maven工程结构 ### Maven工程结构
```mermaid ```
graph TD bunny-auth/
├── auth-api # 接口定义层
父工程 -->|主项目| auth-api ├── auth-core # 核心模块
父工程 -->|代码生成器| generator-code │ ├── config # 安全配置
auth-api -->|启动项、控制器| service │ └── domain # domain
service -->|mapper| dao │ └── ...... # 还要很多...
service -->|包含domain、配置等| auth-core ├── service # 业务实现
dao -->|包含domain、配置等| auth-core └── dao # 数据持久层
``` ```
## 🛠️ 应用场景 ## 🛠️ 应用场景
@ -164,10 +162,12 @@ dao -->|包含domain、配置等| auth-core
```java ```java
@Tag(name = "系统权限") @Tag(name = "系统权限")
@PermissionTag(permission = "permission::*")
@RestController @RestController
@RequestMapping("api/permission") @RequestMapping("api/permission")
public class PermissionController { public class PermissionController {
@Operation(summary = "分页查询", tags = {"permission::page"}) @Operation(summary = "分页查询")
@PermissionTag(permission = "permission::query")
@GetMapping("{page}/{limit}") @GetMapping("{page}/{limit}")
public Result<PageResult<PermissionVo>> getPermissionPage( public Result<PageResult<PermissionVo>> getPermissionPage(
@PathVariable Integer page, @PathVariable Integer page,
@ -196,20 +196,20 @@ AntPath详情https://juejin.cn/spost/7498247273660743732
## 🧰 技术栈 ## 🧰 技术栈
### 前端 ### 😄前端
- Vue 3 + PureAdmin 模板 - Vue 3 + PureAdmin 模板
- 自定义权限组件 - 自定义权限组件
- 国际化支持 - 国际化支持
### 后端 ### 😃后端
- Spring Boot 3 + Spring Security 6 - Spring Boot 3 + Spring Security 6
- JDK 17 - JDK 17
- MySQL + Redis + MinIO - MySQL + Redis + MinIO
- Swagger + Knife4j 文档 - Swagger + Knife4j 文档
### 开发环境 ### 😀开发环境
根据不同docker 启动方式不一样 根据不同docker 启动方式不一样
@ -254,19 +254,11 @@ docker compose up -d
## 📈 后续规划 ## 📈 后续规划
- [x] 权限级别拖拽 暂无
- [x] 权限树型结构动态添加、更新、删除
- [ ] 用户设置持久化存储到数据库
- [x] 权限弹窗页面优化
- [x] 后端文档注释完善
- [x] 系统监控后端返回403停止请求
- [x] 优化用户配置权限逻辑,配置后热更新逻辑等
- [x] 完善后端注释有需要添加ReadMe文档
- [x] 获取Redis中活跃用户
## 前后端接口规范 ## 📏前后端接口规范
### 前端示例规范 ### 🌐前端示例规范
| **操作** | **API 层** | **Pinia 层** | | **操作** | **API 层** | **Pinia 层** |
| :------- | :------------ | :-------------- | | :------- | :------------ | :-------------- |
@ -277,7 +269,7 @@ docker compose up -d
| 更新数据 | `updateUser` | `editUser` | | 更新数据 | `updateUser` | `editUser` |
| 删除数据 | `deleteUser` | `removeUser` | | 删除数据 | `deleteUser` | `removeUser` |
### 后端接口示例规范 ### 🛟后端接口示例规范
遵循Restful 遵循Restful

View File

@ -1,14 +1,12 @@
<script lang="tsx" setup> <script lang="tsx" setup>
import ReAuth from '@/components/ReAuth/src/auth';
import { addDialog } from '@/components/ReDialog/index'; import { addDialog } from '@/components/ReDialog/index';
import { useRenderIcon } from '@/components/ReIcon/src/hooks'; import { useRenderIcon } from '@/components/ReIcon/src/hooks';
import { PureTableBar } from '@/components/RePureTableBar'; import { PureTableBar } from '@/components/RePureTableBar';
import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { hasAuth } from '@/router/utils';
import { useEmailTemplateStore } from '@/store/configuration/emailTemplate'; import { useEmailTemplateStore } from '@/store/configuration/emailTemplate';
import { useEmailUsersStore } from '@/store/configuration/emailUsers'; import { useEmailUsersStore } from '@/store/configuration/emailUsers';
import { auth, columns, onAdd, onDelete, onDeleteBatch, onSearch, onUpdate, selectRows } from '@/views/configuration/email-template/utils'; import { columns, onAdd, onDelete, onDeleteBatch, onSearch, onUpdate, selectRows } from '@/views/configuration/email-template/utils';
import PureTable from '@pureadmin/table'; import PureTable from '@pureadmin/table';
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
import Delete from '~icons/ep/delete'; import Delete from '~icons/ep/delete';
@ -68,7 +66,6 @@ onMounted(() => {
<template> <template>
<div class="main"> <div class="main">
<ReAuth :value="auth.query">
<el-form ref="formRef" :inline="true" :model="emailTemplateStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto"> <el-form ref="formRef" :inline="true" :model="emailTemplateStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto">
<el-form-item :label="$t('emailTemplate_templateName')" prop="templateName"> <el-form-item :label="$t('emailTemplate_templateName')" prop="templateName">
<el-input <el-input
@ -94,17 +91,16 @@ onMounted(() => {
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button> <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</ReAuth>
<PureTableBar :columns="columns" :title="$t('emailTemplate')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch"> <PureTableBar :columns="columns" :title="$t('emailTemplate')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<!-- 新增 --> <!-- 新增 -->
<template #buttons> <template #buttons>
<el-button v-if="hasAuth(auth.add)" :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd"> <el-button : :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd">
{{ $t('addNew') }} {{ $t('addNew') }}
</el-button> </el-button>
<!-- 批量删除按钮 --> <!-- 批量删除按钮 -->
<el-button v-if="hasAuth(auth.delete)" :disabled="!(selectRows.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch"> <el-button : :disabled="!(selectRows.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch">
{{ $t('deleteBatches') }} {{ $t('deleteBatches') }}
</el-button> </el-button>
</template> </template>
@ -158,12 +154,12 @@ onMounted(() => {
</el-button> </el-button>
<!-- 修改 --> <!-- 修改 -->
<el-button v-if="hasAuth(auth.update)" :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> <el-button : :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)">
{{ $t('modify') }} {{ $t('modify') }}
</el-button> </el-button>
<!-- 删除 --> <!-- 删除 -->
<el-popconfirm v-if="hasAuth(auth.delete)" :title="`${$t('delete')} ${row.templateName}?`" @confirm="onDelete(row)"> <el-popconfirm : :title="`${$t('delete')} ${row.templateName}?`" @confirm="onDelete(row)">
<template #reference> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

@ -1,10 +0,0 @@
export const auth = {
// 分页查询
query: 'emailTemplate::query',
// 添加操作
add: ['emailTemplate::add'],
// 更新操作
update: ['emailTemplate::update'],
// 删除操作
delete: ['emailTemplate::delete'],
};

View File

@ -1,4 +1,3 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';
export * from './types'; export * from './types';

View File

@ -1,24 +1,11 @@
<script lang="ts" setup> <script lang="ts" setup>
import ReAuth from '@/components/ReAuth/src/auth';
import { useRenderIcon } from '@/components/ReIcon/src/hooks'; import { useRenderIcon } from '@/components/ReIcon/src/hooks';
import { PureTableBar } from '@/components/RePureTableBar'; import { PureTableBar } from '@/components/RePureTableBar';
import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { enabledOrNotStatus } from '@/enums/baseConstant'; import { enabledOrNotStatus } from '@/enums/baseConstant';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { hasAuth } from '@/router/utils';
import { useEmailUsersStore } from '@/store/configuration/emailUsers'; import { useEmailUsersStore } from '@/store/configuration/emailUsers';
import { import { columns, deleteIds, onAdd, onChangeDefault, onDelete, onDeleteBatch, onSearch, onUpdate, switchLoadMap } from '@/views/configuration/email-user/utils';
auth,
columns,
deleteIds,
onAdd,
onChangeDefault,
onDelete,
onDeleteBatch,
onSearch,
onUpdate,
switchLoadMap,
} from '@/views/configuration/email-user/utils';
import { usePublicHooks } from '@/views/hooks'; import { usePublicHooks } from '@/views/hooks';
import PureTable from '@pureadmin/table'; import PureTable from '@pureadmin/table';
import { FormInstance } from 'element-plus'; import { FormInstance } from 'element-plus';
@ -67,7 +54,6 @@ onMounted(() => {
<template> <template>
<div class="main"> <div class="main">
<ReAuth :value="auth.query">
<el-form ref="formRef" :inline="true" :model="emailUsersStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto"> <el-form ref="formRef" :inline="true" :model="emailUsersStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto">
<!-- 邮箱--> <!-- 邮箱-->
<el-form-item :label="$t('emailUsers_email')" prop="email"> <el-form-item :label="$t('emailUsers_email')" prop="email">
@ -94,12 +80,7 @@ onMounted(() => {
<!-- 协议 --> <!-- 协议 -->
<el-form-item :label="$t('emailUsers_smtpAgreement')" prop="smtpAgreement"> <el-form-item :label="$t('emailUsers_smtpAgreement')" prop="smtpAgreement">
<el-input <el-input v-model="emailUsersStore.form.smtpAgreement" :placeholder="`${$t('input')}${$t('emailUsers_smtpAgreement')}`" class="!w-[180px]" clearable />
v-model="emailUsersStore.form.smtpAgreement"
:placeholder="`${$t('input')}${$t('emailUsers_smtpAgreement')}`"
class="!w-[180px]"
clearable
/>
</el-form-item> </el-form-item>
<!-- 是否启用SSL --> <!-- 是否启用SSL -->
@ -116,16 +97,15 @@ onMounted(() => {
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button> <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</ReAuth>
<PureTableBar :columns="columns" :title="$t('email_user_send_config')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch"> <PureTableBar :columns="columns" :title="$t('email_user_send_config')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<template #buttons> <template #buttons>
<el-button v-if="hasAuth(auth.add)" :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd"> <el-button : :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd">
{{ $t('addNew') }} {{ $t('addNew') }}
</el-button> </el-button>
<!-- 批量删除按钮 --> <!-- 批量删除按钮 -->
<el-button v-if="hasAuth(auth.delete)" :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch"> <el-button : :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch">
{{ $t('deleteBatches') }} {{ $t('deleteBatches') }}
</el-button> </el-button>
</template> </template>
@ -182,16 +162,16 @@ onMounted(() => {
<!-- 插槽-更新用户 --> <!-- 插槽-更新用户 -->
<template #updateUser="{ row }"> <template #updateUser="{ row }">
<el-button v-if="hasAuth(auth.update)" v-show="row.updateUser" link type="primary" @click="selectUserinfo(row.updateUser)"> <el-button v-show="row.updateUser" : link type="primary" @click="selectUserinfo(row.updateUser)">
{{ row.updateUsername }} {{ row.updateUsername }}
</el-button> </el-button>
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<el-button v-if="hasAuth(auth.update)" :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> <el-button : :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)">
{{ $t('modify') }} {{ $t('modify') }}
</el-button> </el-button>
<el-popconfirm v-if="hasAuth(auth.delete)" :title="`${$t('delete')}${row.email}?`" @confirm="onDelete(row)"> <el-popconfirm : :title="`${$t('delete')}${row.email}?`" @confirm="onDelete(row)">
<template #reference> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

@ -1,10 +0,0 @@
export const auth = {
// 分页查询
query: 'emailUsers::query',
// 添加操作
add: ['emailUsers::add'],
// 更新操作
update: ['emailUsers::update'],
// 删除操作
delete: ['emailUsers::delete'],
};

View File

@ -1,4 +1,3 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';
export * from './types'; export * from './types';

View File

@ -1,13 +1,11 @@
<script lang="ts" setup> <script lang="ts" setup>
import ReAuth from '@/components/ReAuth/src/auth';
import { useRenderIcon } from '@/components/ReIcon/src/hooks'; import { useRenderIcon } from '@/components/ReIcon/src/hooks';
import { PureTableBar } from '@/components/RePureTableBar'; import { PureTableBar } from '@/components/RePureTableBar';
import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { hasAuth } from '@/router/utils';
import { useMenuIconStore } from '@/store/configuration/menuIcon'; import { useMenuIconStore } from '@/store/configuration/menuIcon';
import MenuIconSelectIconName from '@/views/configuration/menu-icon/components/menu-icon-select-icon-name.vue'; import MenuIconSelectIconName from '@/views/configuration/menu-icon/components/menu-icon-select-icon-name.vue';
import { auth, columns, deleteIds, onAdd, onDelete, onDeleteBatch, onSearch, onUpdate } from '@/views/configuration/menu-icon/utils'; import { columns, deleteIds, onAdd, onDelete, onDeleteBatch, onSearch, onUpdate } from '@/views/configuration/menu-icon/utils';
import PureTable from '@pureadmin/table'; import PureTable from '@pureadmin/table';
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
import Delete from '~icons/ep/delete'; import Delete from '~icons/ep/delete';
@ -51,7 +49,6 @@ onMounted(() => {
<template> <template>
<div class="main"> <div class="main">
<ReAuth :value="auth.query">
<el-form ref="formRef" :inline="true" :model="menuIconStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto"> <el-form ref="formRef" :inline="true" :model="menuIconStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto">
<el-form-item :label="$t('menuIcon_iconCode')" prop="iconCode"> <el-form-item :label="$t('menuIcon_iconCode')" prop="iconCode">
<el-input v-model="menuIconStore.form.iconCode" :placeholder="`${$t('input')} ${$t('iconCode')}`" class="!w-[180px]" clearable /> <el-input v-model="menuIconStore.form.iconCode" :placeholder="`${$t('input')} ${$t('iconCode')}`" class="!w-[180px]" clearable />
@ -66,16 +63,15 @@ onMounted(() => {
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button> <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</ReAuth>
<PureTableBar :columns="columns" :title="$t('menuIcon')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch"> <PureTableBar :columns="columns" :title="$t('menuIcon')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<template #buttons> <template #buttons>
<el-button v-if="hasAuth(auth.add)" :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd"> <el-button : :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd">
{{ $t('addNew') }} {{ $t('addNew') }}
</el-button> </el-button>
<!-- 批量删除按钮 --> <!-- 批量删除按钮 -->
<el-button v-if="hasAuth(auth.delete)" :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch"> <el-button : :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch">
{{ $t('deleteBatches') }} {{ $t('deleteBatches') }}
</el-button> </el-button>
</template> </template>
@ -123,10 +119,10 @@ onMounted(() => {
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<el-button v-if="hasAuth(auth.update)" :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> <el-button : :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)">
{{ $t('modify') }} {{ $t('modify') }}
</el-button> </el-button>
<el-popconfirm v-if="hasAuth(auth.delete)" :title="`${$t('delete')}${row.iconName}?`" @confirm="onDelete(row)"> <el-popconfirm : :title="`${$t('delete')}${row.iconName}?`" @confirm="onDelete(row)">
<template #reference> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

@ -1,4 +1,3 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';
export * from './types'; export * from './types';

View File

@ -1,12 +0,0 @@
export const auth = {
// 分页查询
query: 'i18n::query',
// 添加操作
add: ['i18n::add'],
// 更新操作
update: ['i18n::update'],
// 删除操作
deleted: ['i18n::delete'],
// 下载多语言配置
download: ['i18n::update', 'i18n::download'],
};

View File

@ -1,4 +1,3 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';
export * from './types'; export * from './types';

View File

@ -4,9 +4,8 @@ import { PureTableBar } from '@/components/RePureTableBar';
import TableIsDefaultTag from '@/components/Table/TableIsDefaultTag.vue'; import TableIsDefaultTag from '@/components/Table/TableIsDefaultTag.vue';
import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { hasAuth } from '@/router/utils';
import { userI18nTypeStore } from '@/store/i18n/i18nType'; import { userI18nTypeStore } from '@/store/i18n/i18nType';
import { auth, columns, onAdd, onDelete, onSearch, onUpdate } from '@/views/i18n/i18n-type-setting/utils'; import { columns, onAdd, onDelete, onSearch, onUpdate } from '@/views/i18n/i18n-type-setting/utils';
import PureTable from '@pureadmin/table'; import PureTable from '@pureadmin/table';
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
import Delete from '~icons/ep/delete'; import Delete from '~icons/ep/delete';
@ -50,7 +49,7 @@ onMounted(() => {
<PureTableBar :columns="columns" :title="$t('i18n_type')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch"> <PureTableBar :columns="columns" :title="$t('i18n_type')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<template #buttons> <template #buttons>
<el-button v-if="hasAuth(auth.add)" :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd"> <el-button : :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd">
{{ $t('addNew') }} {{ $t('addNew') }}
</el-button> </el-button>
</template> </template>
@ -92,10 +91,10 @@ onMounted(() => {
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<el-button v-if="hasAuth(auth.update)" :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> <el-button : :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)">
{{ $t('modify') }} {{ $t('modify') }}
</el-button> </el-button>
<el-popconfirm v-if="hasAuth(auth.delete)" :title="`${$t('delete')} ${row.typeName}?`" @confirm="onDelete(row)"> <el-popconfirm : :title="`${$t('delete')} ${row.typeName}?`" @confirm="onDelete(row)">
<template #reference> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

@ -1,8 +0,0 @@
export const auth = {
// 添加操作
add: ['i18nType::add'],
// 更新操作
update: ['i18nType::update'],
// 删除操作
delete: ['i18nType::delete'],
};

View File

@ -1,4 +1,3 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';
export * from './types'; export * from './types';

View File

@ -1,6 +1,5 @@
<script lang="ts" setup> <script lang="ts" setup>
import { import {
auth,
beforeUpload, beforeUpload,
coverUrl, coverUrl,
formState, formState,
@ -23,7 +22,6 @@ import { useMessageSendStore } from '@/store/message/messageSend';
import { usePublicHooks } from '@/views/hooks'; import { usePublicHooks } from '@/views/hooks';
import { Plus } from '@element-plus/icons-vue'; import { Plus } from '@element-plus/icons-vue';
import ImageLoading from '@/components/Upload/ImageLoading.vue'; import ImageLoading from '@/components/Upload/ImageLoading.vue';
import { hasAuth } from '@/router/utils';
const formRef = ref(); const formRef = ref();
// //
@ -168,7 +166,7 @@ onMounted(() => {
<!-- 提交 --> <!-- 提交 -->
<el-form-item> <el-form-item>
<div v-if="hasAuth(auth.add)" class="grid grid-cols-2 w-[100%]"> <div class="grid grid-cols-2 w-[100%]">
<el-button bg class="w-[100%]" text type="primary" @click="submitForm(formRef)">{{ $t('submit') }}</el-button> <el-button bg class="w-[100%]" text type="primary" @click="submitForm(formRef)">{{ $t('submit') }}</el-button>
<el-button bg class="w-[100%]" text @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button> <el-button bg class="w-[100%]" text @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button>
</div> </div>

View File

@ -1,4 +0,0 @@
export const auth = {
// 添加操作
add: ['message::add'],
};

View File

@ -1,3 +1,2 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';

View File

@ -1,15 +1,13 @@
<script lang="ts" setup> <script lang="ts" setup>
import ReAuth from '@/components/ReAuth/src/auth';
import { useRenderIcon } from '@/components/ReIcon/src/hooks'; import { useRenderIcon } from '@/components/ReIcon/src/hooks';
import { PureTableBar } from '@/components/RePureTableBar'; import { PureTableBar } from '@/components/RePureTableBar';
import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { isReadStatus } from '@/enums/baseConstant'; import { isReadStatus } from '@/enums/baseConstant';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { hasAuth } from '@/router/utils';
import { useMessageReceivedStore } from '@/store/message/messageReceived'; import { useMessageReceivedStore } from '@/store/message/messageReceived';
import { useMessageTypeStore } from '@/store/message/messageType'; import { useMessageTypeStore } from '@/store/message/messageType';
import { messageLevel } from '@/views/message-manger/message-editing/utils'; import { messageLevel } from '@/views/message-manger/message-editing/utils';
import { auth, columns, onDeleteBatch, onSearch, selectIds, updateMarkMessageReceived } from '@/views/message-manger/message-received/utils'; import { columns, onDeleteBatch, onSearch, selectIds, updateMarkMessageReceived } from '@/views/message-manger/message-received/utils';
import { Message } from '@element-plus/icons-vue'; import { Message } from '@element-plus/icons-vue';
import PureTable from '@pureadmin/table'; import PureTable from '@pureadmin/table';
import { FormInstance } from 'element-plus'; import { FormInstance } from 'element-plus';
@ -55,7 +53,6 @@ onMounted(() => {
<template> <template>
<div class="main"> <div class="main">
<ReAuth :value="auth.query">
<el-form ref="formRef" :inline="true" :model="messageReceivedStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto"> <el-form ref="formRef" :inline="true" :model="messageReceivedStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto">
<!-- 消息标题 --> <!-- 消息标题 -->
<el-form-item :label="$t('title')" prop="title"> <el-form-item :label="$t('title')" prop="title">
@ -69,13 +66,7 @@ onMounted(() => {
<!-- 消息类型 --> <!-- 消息类型 -->
<el-form-item :label="$t('messageType')" prop="messageType"> <el-form-item :label="$t('messageType')" prop="messageType">
<el-select <el-select v-model="messageReceivedStore.form.messageType" :placeholder="`${$t('select')}${$t('messageType')}`" class="!w-[180px]" clearable filterable>
v-model="messageReceivedStore.form.messageType"
:placeholder="`${$t('select')}${$t('messageType')}`"
class="!w-[180px]"
clearable
filterable
>
<el-option <el-option
v-for="(item, index) in messageTypeStore.allMessageTypeList" v-for="(item, index) in messageTypeStore.allMessageTypeList"
:key="index" :key="index"
@ -119,36 +110,21 @@ onMounted(() => {
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button> <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</ReAuth>
<PureTableBar :columns="columns" title="系统消息" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch"> <PureTableBar :columns="columns" title="系统消息" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<template #buttons> <template #buttons>
<!-- 标为已读 --> <!-- 标为已读 -->
<el-button <el-button :disabled="!(selectIds.length > 0)" :icon="useRenderIcon('octicon:read-24')" plain type="primary" @click="updateMarkMessageReceived(true)">
v-if="hasAuth(auth.update)"
:disabled="!(selectIds.length > 0)"
:icon="useRenderIcon('octicon:read-24')"
plain
type="primary"
@click="updateMarkMessageReceived(true)"
>
{{ $t('markAsRead') }} {{ $t('markAsRead') }}
</el-button> </el-button>
<!-- 标为未读 --> <!-- 标为未读 -->
<el-button <el-button :disabled="!(selectIds.length > 0)" :icon="Message" plain type="primary" @click="updateMarkMessageReceived(false)">
v-if="hasAuth(auth.update)"
:disabled="!(selectIds.length > 0)"
:icon="Message"
plain
type="primary"
@click="updateMarkMessageReceived(false)"
>
{{ $t('markAsUnread') }} {{ $t('markAsUnread') }}
</el-button> </el-button>
<!-- 批量删除按钮 --> <!-- 批量删除按钮 -->
<el-button v-if="hasAuth(auth.delete)" :disabled="!(selectIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch"> <el-button :disabled="!(selectIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch">
{{ $t('delete_batches') }} {{ $t('delete_batches') }}
</el-button> </el-button>
</template> </template>

View File

@ -1,8 +0,0 @@
export const auth = {
// 分页查询
query: 'messageReceived::query',
// 更新操作
update: ['messageReceived::update'],
// 删除操作
delete: ['messageReceived::delete'],
};

View File

@ -1,3 +1,2 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';

View File

@ -1,15 +1,13 @@
<script lang="ts" setup> <script lang="ts" setup>
import ReAuth from '@/components/ReAuth/src/auth';
import { useRenderIcon } from '@/components/ReIcon/src/hooks'; import { useRenderIcon } from '@/components/ReIcon/src/hooks';
import { PureTableBar } from '@/components/RePureTableBar'; import { PureTableBar } from '@/components/RePureTableBar';
import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { isReadStatus } from '@/enums/baseConstant'; import { isReadStatus } from '@/enums/baseConstant';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { hasAuth } from '@/router/utils';
import { useMessageSendStore } from '@/store/message/messageSend'; import { useMessageSendStore } from '@/store/message/messageSend';
import { useMessageTypeStore } from '@/store/message/messageType'; import { useMessageTypeStore } from '@/store/message/messageType';
import { messageLevel } from '@/views/message-manger/message-editing/utils'; import { messageLevel } from '@/views/message-manger/message-editing/utils';
import { auth, columns, deleteIds, onDelete, onDeleteBatch, onSearch, onUpdate } from '@/views/message-manger/message-send/utils'; import { columns, deleteIds, onDelete, onDeleteBatch, onSearch, onUpdate } from '@/views/message-manger/message-send/utils';
import PureTable from '@pureadmin/table'; import PureTable from '@pureadmin/table';
import { FormInstance } from 'element-plus'; import { FormInstance } from 'element-plus';
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
@ -55,7 +53,6 @@ onMounted(() => {
<template> <template>
<div class="main"> <div class="main">
<ReAuth :value="auth.search">
<el-form ref="formRef" :inline="true" :model="messageSendStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto"> <el-form ref="formRef" :inline="true" :model="messageSendStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto">
<!-- 消息标题 --> <!-- 消息标题 -->
<el-form-item :label="$t('title')" prop="title"> <el-form-item :label="$t('title')" prop="title">
@ -113,12 +110,11 @@ onMounted(() => {
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button> <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</ReAuth>
<PureTableBar :columns="columns" title="系统消息" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch"> <PureTableBar :columns="columns" title="系统消息" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<template #buttons> <template #buttons>
<!-- 批量删除按钮 --> <!-- 批量删除按钮 -->
<el-button v-if="hasAuth(auth.deleted)" :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch"> <el-button :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch">
{{ $t('delete_batches') }} {{ $t('delete_batches') }}
</el-button> </el-button>
</template> </template>
@ -186,10 +182,10 @@ onMounted(() => {
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<el-button v-if="hasAuth(auth.update)" :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> <el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)">
{{ $t('modify') }} {{ $t('modify') }}
</el-button> </el-button>
<el-popconfirm v-if="hasAuth(auth.deleted)" :title="`${$t('delete')}${row.title}?`" @confirm="onDelete(row)"> <el-popconfirm :title="`${$t('delete')}${row.title}?`" @confirm="onDelete(row)">
<template #reference> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

@ -1,10 +0,0 @@
export const auth = {
// 分页查询
search: 'message::getMessageList',
// 添加操作
add: ['message::addMessage'],
// 更新操作
update: ['message::updateMessage'],
// 删除操作
deleted: ['message::deleteMessage'],
};

View File

@ -1,3 +1,2 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';

View File

@ -1,14 +1,12 @@
<script lang="ts" setup> <script lang="ts" setup>
import ReAuth from '@/components/ReAuth/src/auth';
import { useRenderIcon } from '@/components/ReIcon/src/hooks'; import { useRenderIcon } from '@/components/ReIcon/src/hooks';
import { PureTableBar } from '@/components/RePureTableBar'; import { PureTableBar } from '@/components/RePureTableBar';
import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { enabledOrNotStatus } from '@/enums/baseConstant'; import { enabledOrNotStatus } from '@/enums/baseConstant';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { hasAuth } from '@/router/utils';
import { useMessageTypeStore } from '@/store/message/messageType'; import { useMessageTypeStore } from '@/store/message/messageType';
import { usePublicHooks } from '@/views/hooks'; import { usePublicHooks } from '@/views/hooks';
import { auth, columns, deleteIds, onAdd, onDelete, onDeleteBatch, onSearch, onUpdate } from '@/views/message-manger/message-type/utils'; import { columns, deleteIds, onAdd, onDelete, onDeleteBatch, onSearch, onUpdate } from '@/views/message-manger/message-type/utils';
import PureTable from '@pureadmin/table'; import PureTable from '@pureadmin/table';
import { FormInstance } from 'element-plus'; import { FormInstance } from 'element-plus';
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
@ -56,7 +54,6 @@ onMounted(() => {
<template> <template>
<div class="main"> <div class="main">
<ReAuth :value="auth.query">
<el-form ref="formRef" :inline="true" :model="messageTypeStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto"> <el-form ref="formRef" :inline="true" :model="messageTypeStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto">
<!-- 消息名称 --> <!-- 消息名称 -->
<el-form-item :label="$t('messageName')" prop="messageName"> <el-form-item :label="$t('messageName')" prop="messageName">
@ -87,16 +84,15 @@ onMounted(() => {
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button> <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</ReAuth>
<PureTableBar :columns="columns" title="系统消息类型" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch"> <PureTableBar :columns="columns" title="系统消息类型" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<template #buttons> <template #buttons>
<el-button v-if="hasAuth(auth.add)" :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd"> <el-button :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd">
{{ $t('addNew') }} {{ $t('addNew') }}
</el-button> </el-button>
<!-- 批量删除按钮 --> <!-- 批量删除按钮 -->
<el-button v-if="hasAuth(auth.delete)" :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch"> <el-button :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch">
{{ $t('delete_batches') }} {{ $t('delete_batches') }}
</el-button> </el-button>
</template> </template>
@ -151,10 +147,10 @@ onMounted(() => {
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<el-button v-if="hasAuth(auth.update)" :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> <el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)">
{{ $t('modify') }} {{ $t('modify') }}
</el-button> </el-button>
<el-popconfirm v-if="hasAuth(auth.delete)" :title="`${$t('delete')}${row.messageName}?`" @confirm="onDelete(row)"> <el-popconfirm :title="`${$t('delete')}${row.messageName}?`" @confirm="onDelete(row)">
<template #reference> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

@ -1,10 +0,0 @@
export const auth = {
// 分页查询
query: 'messageType::query',
// 添加操作
add: ['messageType::add'],
// 更新操作
update: ['messageType::update'],
// 删除操作
delete: ['messageType::delete'],
};

View File

@ -1,4 +1,3 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';
export * from './types'; export * from './types';

View File

@ -1,12 +1,10 @@
<script lang="ts" setup> <script lang="ts" setup>
import ReAuth from '@/components/ReAuth/src/auth';
import { useRenderIcon } from '@/components/ReIcon/src/hooks'; import { useRenderIcon } from '@/components/ReIcon/src/hooks';
import { PureTableBar } from '@/components/RePureTableBar'; import { PureTableBar } from '@/components/RePureTableBar';
import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { hasAuth } from '@/router/utils';
import { useQuartzExecuteLogStore } from '@/store/monitor/quartzExecuteLog'; import { useQuartzExecuteLogStore } from '@/store/monitor/quartzExecuteLog';
import { auth, columns, deleteIds, onDelete, onDeleteBatch, onSearch, onView, state } from '@/views/monitor/scheduler-execute-log/utils'; import { columns, deleteIds, onDelete, onDeleteBatch, onSearch, onView, state } from '@/views/monitor/scheduler-execute-log/utils';
import PureTable from '@pureadmin/table'; import PureTable from '@pureadmin/table';
import { FormInstance } from 'element-plus'; import { FormInstance } from 'element-plus';
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
@ -53,15 +51,9 @@ onMounted(() => {
<template> <template>
<div class="main"> <div class="main">
<ReAuth :value="auth.search">
<el-form ref="formRef" :inline="true" :model="quartzExecuteLogStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto"> <el-form ref="formRef" :inline="true" :model="quartzExecuteLogStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto">
<el-form-item :label="$t('quartzExecuteLog_jobName')" prop="jobName"> <el-form-item :label="$t('quartzExecuteLog_jobName')" prop="jobName">
<el-input <el-input v-model="quartzExecuteLogStore.form.jobName" :placeholder="`${$t('input')}${$t('quartzExecuteLog_jobName')}`" class="!w-[180px]" clearable />
v-model="quartzExecuteLogStore.form.jobName"
:placeholder="`${$t('input')}${$t('quartzExecuteLog_jobName')}`"
class="!w-[180px]"
clearable
/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('quartzExecuteLog_jobGroup')" prop="jobGroup"> <el-form-item :label="$t('quartzExecuteLog_jobGroup')" prop="jobGroup">
<el-input <el-input
@ -102,12 +94,11 @@ onMounted(() => {
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button> <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</ReAuth>
<PureTableBar :columns="columns" :title="$t('quartzExecuteLog')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch"> <PureTableBar :columns="columns" :title="$t('quartzExecuteLog')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<template #buttons> <template #buttons>
<!-- 批量删除按钮 --> <!-- 批量删除按钮 -->
<el-button v-if="hasAuth(auth.delete)" :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch"> <el-button :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch">
{{ $t('deleteBatches') }} {{ $t('deleteBatches') }}
</el-button> </el-button>
</template> </template>
@ -163,10 +154,10 @@ onMounted(() => {
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<el-button v-if="hasAuth(auth.search)" :icon="useRenderIcon(View)" :size="size" class="reset-margin" link type="primary" @click="onView(row)"> <el-button :icon="useRenderIcon(View)" :size="size" class="reset-margin" link type="primary" @click="onView(row)">
{{ $t('view') }} {{ $t('view') }}
</el-button> </el-button>
<el-popconfirm v-if="hasAuth(auth.delete)" :title="`${$t('delete')}${row.jobName}?`" @confirm="onDelete(row)"> <el-popconfirm :title="`${$t('delete')}${row.jobName}?`" @confirm="onDelete(row)">
<template #reference> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

@ -1,6 +0,0 @@
export const auth = {
// 分页查询
search: ['scheduleExecuteLog::query', "'scheduleExecuteLog::queryPage'"],
// 删除操作
delete: ['scheduleExecuteLog::delete'],
};

View File

@ -1,4 +1,3 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';
export * from './types'; export * from './types';

View File

@ -1,12 +1,10 @@
<script lang="ts" setup> <script lang="ts" setup>
import ReAuth from '@/components/ReAuth/src/auth';
import { useRenderIcon } from '@/components/ReIcon/src/hooks'; import { useRenderIcon } from '@/components/ReIcon/src/hooks';
import { PureTableBar } from '@/components/RePureTableBar'; import { PureTableBar } from '@/components/RePureTableBar';
import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { hasAuth } from '@/router/utils';
import { useUserLoginLogStore } from '@/store/monitor/userLoginLog'; import { useUserLoginLogStore } from '@/store/monitor/userLoginLog';
import { auth, columns, deleteIds, onDelete, onDeleteBatch, onSearch, onView } from '@/views/monitor/user-login-log/utils'; import { columns, deleteIds, onDelete, onDeleteBatch, onSearch, onView } from '@/views/monitor/user-login-log/utils';
import PureTable from '@pureadmin/table'; import PureTable from '@pureadmin/table';
import { FormInstance } from 'element-plus'; import { FormInstance } from 'element-plus';
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
@ -89,12 +87,11 @@ onMounted(() => {
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button> <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<ReAuth :value="auth.search" />
<PureTableBar :columns="columns" :title="$t('userLoginLog')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch"> <PureTableBar :columns="columns" :title="$t('userLoginLog')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<template #buttons> <template #buttons>
<!-- 批量删除按钮 --> <!-- 批量删除按钮 -->
<el-button v-if="hasAuth(auth.delete)" :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch"> <el-button :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch">
{{ $t('deleteBatches') }} {{ $t('deleteBatches') }}
</el-button> </el-button>
</template> </template>
@ -136,10 +133,10 @@ onMounted(() => {
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<el-button v-if="hasAuth(auth.search)" :icon="useRenderIcon(View)" :size="size" class="reset-margin" link type="primary" @click="onView(row)"> <el-button :icon="useRenderIcon(View)" :size="size" class="reset-margin" link type="primary" @click="onView(row)">
{{ $t('view') }} {{ $t('view') }}
</el-button> </el-button>
<el-popconfirm v-if="hasAuth(auth.delete)" :title="`${$t('delete')}${row.username}?`" @confirm="onDelete(row)"> <el-popconfirm :title="`${$t('delete')}${row.username}?`" @confirm="onDelete(row)">
<template #reference> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

@ -1,4 +1,3 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';
export * from './types'; export * from './types';

View File

@ -1,12 +1,10 @@
<script lang="ts" setup> <script lang="ts" setup>
import ReAuth from '@/components/ReAuth/src/auth';
import { useRenderIcon } from '@/components/ReIcon/src/hooks'; import { useRenderIcon } from '@/components/ReIcon/src/hooks';
import { PureTableBar } from '@/components/RePureTableBar'; import { PureTableBar } from '@/components/RePureTableBar';
import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { hasAuth } from '@/router/utils';
import { useSchedulersGroupStore } from '@/store/scheduler/schedulersGroup'; import { useSchedulersGroupStore } from '@/store/scheduler/schedulersGroup';
import { auth, columns, deleteIds, onAdd, onDelete, onDeleteBatch, onSearch, onUpdate } from '@/views/scheduler/schedulers-group/utils'; import { columns, deleteIds, onAdd, onDelete, onDeleteBatch, onSearch, onUpdate } from '@/views/scheduler/schedulers-group/utils';
import PureTable from '@pureadmin/table'; import PureTable from '@pureadmin/table';
import { FormInstance } from 'element-plus'; import { FormInstance } from 'element-plus';
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
@ -52,7 +50,6 @@ onMounted(() => {
<template> <template>
<div class="main"> <div class="main">
<ReAuth :value="auth.query">
<el-form ref="formRef" :inline="true" :model="schedulersGroupStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto"> <el-form ref="formRef" :inline="true" :model="schedulersGroupStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto">
<el-form-item :label="$t('schedulersGroup_groupName')" prop="groupName"> <el-form-item :label="$t('schedulersGroup_groupName')" prop="groupName">
<el-input <el-input
@ -77,16 +74,15 @@ onMounted(() => {
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button> <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</ReAuth>
<PureTableBar :columns="columns" :title="$t('schedulersGroup')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch"> <PureTableBar :columns="columns" :title="$t('schedulersGroup')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<template #buttons> <template #buttons>
<el-button v-if="hasAuth(auth.add)" :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd"> <el-button :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd">
{{ $t('addNew') }} {{ $t('addNew') }}
</el-button> </el-button>
<!-- 批量删除按钮 --> <!-- 批量删除按钮 -->
<el-button v-if="hasAuth(auth.delete)" :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch"> <el-button :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch">
{{ $t('deleteBatches') }} {{ $t('deleteBatches') }}
</el-button> </el-button>
</template> </template>
@ -128,10 +124,10 @@ onMounted(() => {
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<el-button v-if="hasAuth(auth.update)" :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> <el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)">
{{ $t('modify') }} {{ $t('modify') }}
</el-button> </el-button>
<el-popconfirm v-if="hasAuth(auth.delete)" :title="`${$t('delete')}${row.groupName}?`" @confirm="onDelete(row)"> <el-popconfirm :title="`${$t('delete')}${row.groupName}?`" @confirm="onDelete(row)">
<template #reference> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

@ -1,10 +0,0 @@
export const auth = {
// 分页查询
query: 'schedulersGroup::query',
// 添加操作
add: ['schedulersGroup::add'],
// 更新操作
update: ['schedulersGroup::update'],
// 删除操作
delete: ['schedulersGroup::delete'],
};

View File

@ -1,4 +1,3 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';
export * from './types'; export * from './types';

View File

@ -4,7 +4,6 @@ import { useRenderIcon } from '@/components/ReIcon/src/hooks';
import { PureTableBar } from '@/components/RePureTableBar'; import { PureTableBar } from '@/components/RePureTableBar';
import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { hasAuth } from '@/router/utils';
import { useSchedulersStore } from '@/store/scheduler/schedulers'; import { useSchedulersStore } from '@/store/scheduler/schedulers';
import { auth, columns, onAdd, onDelete, onPause, onResume, onSearch, onUpdate } from '@/views/scheduler/schedulers/utils'; import { auth, columns, onAdd, onDelete, onPause, onResume, onSearch, onUpdate } from '@/views/scheduler/schedulers/utils';
import PureTable from '@pureadmin/table'; import PureTable from '@pureadmin/table';
@ -47,7 +46,6 @@ onMounted(() => {
<template> <template>
<div class="main"> <div class="main">
<ReAuth :value="auth.query">
<el-form ref="formRef" :inline="true" :model="schedulersStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto"> <el-form ref="formRef" :inline="true" :model="schedulersStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto">
<el-form-item :label="$t('schedulers_jobName')" prop="jobName"> <el-form-item :label="$t('schedulers_jobName')" prop="jobName">
<el-input v-model="schedulersStore.form.jobName" :placeholder="`${$t('input')}${$t('schedulers_jobName')}`" class="!w-[180px]" clearable /> <el-input v-model="schedulersStore.form.jobName" :placeholder="`${$t('input')}${$t('schedulers_jobName')}`" class="!w-[180px]" clearable />
@ -74,11 +72,10 @@ onMounted(() => {
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button> <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</ReAuth>
<PureTableBar :columns="columns" title="Schedulers视图" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch"> <PureTableBar :columns="columns" title="Schedulers视图" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<template #buttons> <template #buttons>
<el-button v-if="hasAuth(auth.add)" :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd"> <el-button :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd">
{{ $t('addNew') }} {{ $t('addNew') }}
</el-button> </el-button>
</template> </template>
@ -120,7 +117,7 @@ onMounted(() => {
<template #operation="{ row }"> <template #operation="{ row }">
<!-- 修改 --> <!-- 修改 -->
<el-button v-if="hasAuth(auth.update)" :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> <el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)">
{{ $t('modify') }} {{ $t('modify') }}
</el-button> </el-button>
@ -155,7 +152,7 @@ onMounted(() => {
</ReAuth> </ReAuth>
<!-- 删除 --> <!-- 删除 -->
<el-popconfirm v-if="hasAuth(auth.delete)" :title="`${$t('delete')}${row.jobName}?`" @confirm="onDelete(row)"> <el-popconfirm :title="`${$t('delete')}${row.jobName}?`" @confirm="onDelete(row)">
<template #reference> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

@ -1,13 +0,0 @@
export const auth = {
// 分页查询
query: 'schedulers::query',
// 添加操作
add: ['schedulers::add'],
// 暂停
update: ['schedulers::update'],
pause: ['schedulers::update'],
// 恢复
resume: ['schedulers::update'],
// 删除操作
delete: ['schedulers::delete'],
};

View File

@ -1,4 +1,3 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';
export * from './types'; export * from './types';

View File

@ -1,18 +1,15 @@
<script lang="ts" setup> <script lang="ts" setup>
import Airplane from '@/assets/svg/airplane.svg'; import Airplane from '@/assets/svg/airplane.svg';
import ReAuth from '@/components/ReAuth/src/auth';
import { useRenderIcon } from '@/components/ReIcon/src/hooks'; import { useRenderIcon } from '@/components/ReIcon/src/hooks';
import { PureTableBar } from '@/components/RePureTableBar'; import { PureTableBar } from '@/components/RePureTableBar';
import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { sexConstant, tableSelectButtonClass, UserAvatar, userStatus } from '@/enums/baseConstant'; import { sexConstant, tableSelectButtonClass, UserAvatar, userStatus } from '@/enums/baseConstant';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { hasAuth } from '@/router/utils';
import { useAdminUserStore } from '@/store/system/adminUser'; import { useAdminUserStore } from '@/store/system/adminUser';
import { useDeptStore } from '@/store/system/dept'; import { useDeptStore } from '@/store/system/dept';
import { usePublicHooks } from '@/views/hooks'; import { usePublicHooks } from '@/views/hooks';
import Tree from '@/views/system/admin-user/components/tree.vue'; import Tree from '@/views/system/admin-user/components/tree.vue';
import { import {
auth,
columns, columns,
deleteIds, deleteIds,
deptList, deptList,
@ -99,7 +96,6 @@ onMounted(() => {
@tree-select="onTreeSelect" @tree-select="onTreeSelect"
/> />
<div :class="[deviceDetection() ? ['w-full', 'mt-2'] : 'w-[calc(100%-200px)]']"> <div :class="[deviceDetection() ? ['w-full', 'mt-2'] : 'w-[calc(100%-200px)]']">
<ReAuth :value="auth.query">
<el-form ref="formRef" :inline="true" :model="adminUserStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto"> <el-form ref="formRef" :inline="true" :model="adminUserStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto">
<!-- 查询用户名 --> <!-- 查询用户名 -->
<el-form-item :label="$t('adminUser_username')" prop="username"> <el-form-item :label="$t('adminUser_username')" prop="username">
@ -147,16 +143,15 @@ onMounted(() => {
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button> <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</ReAuth>
<PureTableBar :columns="columns" :title="$t('userinfo')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch"> <PureTableBar :columns="columns" :title="$t('userinfo')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<template #buttons> <template #buttons>
<el-button v-if="hasAuth(auth.add)" :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd"> <el-button :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd">
{{ $t('addNew') }} {{ $t('addNew') }}
</el-button> </el-button>
<!-- 批量删除按钮 --> <!-- 批量删除按钮 -->
<el-button v-if="hasAuth(auth.delete)" :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch"> <el-button :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch">
{{ $t('deleteBatches') }} {{ $t('deleteBatches') }}
</el-button> </el-button>
</template> </template>
@ -235,20 +230,12 @@ onMounted(() => {
<template #operation="{ row }"> <template #operation="{ row }">
<!-- 修改 --> <!-- 修改 -->
<el-button <el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)">
v-if="hasAuth(auth.update)"
:icon="useRenderIcon(EditPen)"
:size="size"
class="reset-margin"
link
type="primary"
@click="onUpdate(row)"
>
{{ $t('modify') }} {{ $t('modify') }}
</el-button> </el-button>
<!-- 删除 --> <!-- 删除 -->
<el-popconfirm v-if="hasAuth(auth.delete)" :title="`${$t('delete')} ${row.username}?`" @confirm="onDelete(row)"> <el-popconfirm :title="`${$t('delete')} ${row.username}?`" @confirm="onDelete(row)">
<template #reference> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}
@ -262,25 +249,25 @@ onMounted(() => {
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<!-- 上传头像 --> <!-- 上传头像 -->
<el-dropdown-item v-if="hasAuth(auth.update)"> <el-dropdown-item>
<el-button :class="tableSelectButtonClass" :icon="useRenderIcon(Upload)" :size="size" link type="primary" @click="onUploadAvatar(row)"> <el-button :class="tableSelectButtonClass" :icon="useRenderIcon(Upload)" :size="size" link type="primary" @click="onUploadAvatar(row)">
{{ $t('upload_avatar') }} {{ $t('upload_avatar') }}
</el-button> </el-button>
</el-dropdown-item> </el-dropdown-item>
<!-- 重置密码 --> <!-- 重置密码 -->
<el-dropdown-item v-if="hasAuth(auth.update)"> <el-dropdown-item>
<el-button :class="tableSelectButtonClass" :icon="useRenderIcon(Password)" :size="size" link type="primary" @click="onResetPassword(row)"> <el-button :class="tableSelectButtonClass" :icon="useRenderIcon(Password)" :size="size" link type="primary" @click="onResetPassword(row)">
{{ $t('reset_passwords') }} {{ $t('reset_passwords') }}
</el-button> </el-button>
</el-dropdown-item> </el-dropdown-item>
<!-- 分配角色 --> <!-- 分配角色 -->
<el-dropdown-item v-if="hasAuth(auth.update)"> <el-dropdown-item>
<el-button :class="tableSelectButtonClass" :icon="useRenderIcon(Role)" :size="size" link type="primary" @click="onAssignRolesToUser(row)"> <el-button :class="tableSelectButtonClass" :icon="useRenderIcon(Role)" :size="size" link type="primary" @click="onAssignRolesToUser(row)">
{{ $t('assign_roles') }} {{ $t('assign_roles') }}
</el-button> </el-button>
</el-dropdown-item> </el-dropdown-item>
<!-- 强制下线 --> <!-- 强制下线 -->
<el-dropdown-item v-if="hasAuth(auth.update)"> <el-dropdown-item>
<el-button :class="tableSelectButtonClass" :icon="useRenderIcon(Airplane)" :size="size" link type="primary" @click="onForcedOffline(row)"> <el-button :class="tableSelectButtonClass" :icon="useRenderIcon(Airplane)" :size="size" link type="primary" @click="onForcedOffline(row)">
{{ $t('forced_offline') }} {{ $t('forced_offline') }}
</el-button> </el-button>

View File

@ -1,10 +0,0 @@
export const auth = {
// 分页查询
query: 'user::query',
// 添加操作
add: ['user::add'],
// 更新操作
update: ['user::update'],
// 删除操作
delete: ['user::delete'],
};

View File

@ -1,4 +1,3 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';
export * from './types'; export * from './types';

View File

@ -1,13 +1,11 @@
<script lang="ts" setup> <script lang="ts" setup>
import ReAuth from '@/components/ReAuth/src/auth';
import { useRenderIcon } from '@/components/ReIcon/src/hooks'; import { useRenderIcon } from '@/components/ReIcon/src/hooks';
import { PureTableBar } from '@/components/RePureTableBar'; import { PureTableBar } from '@/components/RePureTableBar';
import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { hasAuth } from '@/router/utils';
import { useDeptStore } from '@/store/system/dept'; import { useDeptStore } from '@/store/system/dept';
import { handleTree } from '@/utils/tree'; import { handleTree } from '@/utils/tree';
import { auth, columns, deleteIds, onAdd, onDelete, onDeleteBatch, onSearch, onUpdate } from '@/views/system/dept/utils'; import { columns, deleteIds, onAdd, onDelete, onDeleteBatch, onSearch, onUpdate } from '@/views/system/dept/utils';
import PureTable from '@pureadmin/table'; import PureTable from '@pureadmin/table';
import { FormInstance } from 'element-plus'; import { FormInstance } from 'element-plus';
import { computed, onMounted, ref } from 'vue'; import { computed, onMounted, ref } from 'vue';
@ -53,7 +51,6 @@ onMounted(() => {
<template> <template>
<div class="main"> <div class="main">
<ReAuth :value="auth.query">
<el-form ref="formRef" :inline="true" :model="deptStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto"> <el-form ref="formRef" :inline="true" :model="deptStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto">
<el-form-item :label="$t('dept_deptName')" prop="deptName"> <el-form-item :label="$t('dept_deptName')" prop="deptName">
<el-input v-model="deptStore.form.deptName" :placeholder="`${$t('input')}${$t('dept_deptName')}`" class="!w-[180px]" clearable /> <el-input v-model="deptStore.form.deptName" :placeholder="`${$t('input')}${$t('dept_deptName')}`" class="!w-[180px]" clearable />
@ -68,7 +65,6 @@ onMounted(() => {
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button> <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</ReAuth>
<PureTableBar <PureTableBar
:columns="columns" :columns="columns"
@ -79,12 +75,12 @@ onMounted(() => {
@refresh="onSearch" @refresh="onSearch"
> >
<template #buttons> <template #buttons>
<el-button v-if="hasAuth(auth.add)" :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd()"> <el-button :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd()">
{{ $t('addNew') }} {{ $t('addNew') }}
</el-button> </el-button>
<!-- 批量删除按钮 --> <!-- 批量删除按钮 -->
<el-button v-if="hasAuth(auth.delete)" :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch"> <el-button :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch">
{{ $t('deleteBatches') }} {{ $t('deleteBatches') }}
</el-button> </el-button>
</template> </template>
@ -127,13 +123,13 @@ onMounted(() => {
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<el-button v-if="hasAuth(auth.update)" :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> <el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)">
{{ $t('modify') }} {{ $t('modify') }}
</el-button> </el-button>
<el-button v-if="hasAuth(auth.add)" :icon="useRenderIcon(AddFill)" :size="size" class="reset-margin" link type="primary" @click="onAdd(row.id)"> <el-button :icon="useRenderIcon(AddFill)" :size="size" class="reset-margin" link type="primary" @click="onAdd(row.id)">
{{ $t('addNew') }} {{ $t('addNew') }}
</el-button> </el-button>
<el-popconfirm v-if="hasAuth(auth.delete)" :title="`${$t('delete')} ${row.deptName}?`" @confirm="onDelete(row)"> <el-popconfirm :title="`${$t('delete')} ${row.deptName}?`" @confirm="onDelete(row)">
<template #reference> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

@ -1,10 +0,0 @@
export const auth = {
// 分页查询
query: 'dept::query',
// 添加操作
add: ['dept::add'],
// 更新操作
update: ['dept::update'],
// 删除操作
delete: ['dept::delete'],
};

View File

@ -1,4 +1,3 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';
export * from './types'; export * from './types';

View File

@ -1,12 +1,10 @@
<script lang="ts" setup> <script lang="ts" setup>
import ReAuth from '@/components/ReAuth/src/auth';
import { useRenderIcon } from '@/components/ReIcon/src/hooks'; import { useRenderIcon } from '@/components/ReIcon/src/hooks';
import { PureTableBar } from '@/components/RePureTableBar'; import { PureTableBar } from '@/components/RePureTableBar';
import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { hasAuth } from '@/router/utils';
import { useFilesStore } from '@/store/system/files'; import { useFilesStore } from '@/store/system/files';
import { auth, columns, onAdd, onDelete, onDeleteBatch, onDownload, onDownloadBatch, onSearch, onUpdate, selectRows } from '@/views/system/files/utils'; import { columns, onAdd, onDelete, onDeleteBatch, onDownload, onDownloadBatch, onSearch, onUpdate, selectRows } from '@/views/system/files/utils';
import PureTable from '@pureadmin/table'; import PureTable from '@pureadmin/table';
import { FormInstance } from 'element-plus'; import { FormInstance } from 'element-plus';
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
@ -53,7 +51,6 @@ onMounted(() => {
<template> <template>
<div class="main"> <div class="main">
<ReAuth :value="auth.query">
<el-form ref="formRef" :inline="true" :model="filesStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto"> <el-form ref="formRef" :inline="true" :model="filesStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto">
<!--文件的名称--> <!--文件的名称-->
<el-form-item :label="$t('files_filename')" prop="filename"> <el-form-item :label="$t('files_filename')" prop="filename">
@ -94,29 +91,21 @@ onMounted(() => {
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button> <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</ReAuth>
<PureTableBar :columns="columns" :title="$t('system_file')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch"> <PureTableBar :columns="columns" :title="$t('system_file')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<template #buttons> <template #buttons>
<!-- 批量下载 --> <!-- 批量下载 -->
<el-button <el-button :disabled="!(selectRows.length > 0)" :icon="useRenderIcon(Download)" plain type="primary" @click="onDownloadBatch">
v-if="hasAuth(auth.download)"
:disabled="!(selectRows.length > 0)"
:icon="useRenderIcon(Download)"
plain
type="primary"
@click="onDownloadBatch"
>
{{ $t('download_batch') }} {{ $t('download_batch') }}
</el-button> </el-button>
<!-- 新增 --> <!-- 新增 -->
<el-button v-if="hasAuth(auth.add)" :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd"> <el-button :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd">
{{ $t('addNew') }} {{ $t('addNew') }}
</el-button> </el-button>
<!-- 批量删除按钮 --> <!-- 批量删除按钮 -->
<el-button v-if="hasAuth(auth.delete)" :disabled="!(selectRows.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch"> <el-button :disabled="!(selectRows.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch">
{{ $t('deleteBatches') }} {{ $t('deleteBatches') }}
</el-button> </el-button>
</template> </template>
@ -155,21 +144,13 @@ onMounted(() => {
</template> </template>
<template #operation="{ row }"> <template #operation="{ row }">
<el-button v-if="hasAuth(auth.update)" :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> <el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)">
{{ $t('modify') }} {{ $t('modify') }}
</el-button> </el-button>
<el-button <el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onDownload(row)">
v-if="hasAuth(auth.download)"
:icon="useRenderIcon(EditPen)"
:size="size"
class="reset-margin"
link
type="primary"
@click="onDownload(row)"
>
{{ $t('download') }} {{ $t('download') }}
</el-button> </el-button>
<el-popconfirm v-if="hasAuth(auth.delete)" :title="`${$t('delete')} ${row.filename}?`" @confirm="onDelete(row)"> <el-popconfirm :title="`${$t('delete')} ${row.filename}?`" @confirm="onDelete(row)">
<template #reference> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

@ -1,12 +0,0 @@
export const auth = {
// 分页查询
query: 'files:query',
// 更新操作
update: ['files::update'],
// 添加操作
add: ['files::add'],
// 删除操作
delete: ['files::delete'],
// 下载文件
download: ['files::download'],
};

View File

@ -1,4 +1,3 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';
export * from './types'; export * from './types';

View File

@ -4,7 +4,6 @@ import { useRenderIcon } from '@/components/ReIcon/src/hooks';
import { PureTableBar } from '@/components/RePureTableBar'; import { PureTableBar } from '@/components/RePureTableBar';
import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { hasAuth } from '@/router/utils';
import { userMenuStore } from '@/store/system/menu'; import { userMenuStore } from '@/store/system/menu';
import { auth, clearAllRolesSelect, columns, mergeArgs, onAdd, onDelete, onSearch, onUpdate, selectIds, tableRef } from '@/views/system/menu/utils'; import { auth, clearAllRolesSelect, columns, mergeArgs, onAdd, onDelete, onSearch, onUpdate, selectIds, tableRef } from '@/views/system/menu/utils';
import PureTable from '@pureadmin/table'; import PureTable from '@pureadmin/table';
@ -72,19 +71,12 @@ onMounted(() => {
> >
<template #buttons> <template #buttons>
<!-- 添加菜单 --> <!-- 添加菜单 -->
<el-button v-if="hasAuth(auth.add)" :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd()"> <el-button :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd()">
{{ $t('addNew') }} {{ $t('addNew') }}
</el-button> </el-button>
<!-- 清除选中所以角色 --> <!-- 清除选中所以角色 -->
<el-button <el-button :disabled="!(selectIds.length > 0)" :icon="useRenderIcon('ic:baseline-clear')" plain type="danger" @click="clearAllRolesSelect()">
v-if="hasAuth(auth.clearAllRolesSelect)"
:disabled="!(selectIds.length > 0)"
:icon="useRenderIcon('ic:baseline-clear')"
plain
type="danger"
@click="clearAllRolesSelect()"
>
{{ $t('clearAllRolesSelect') }} {{ $t('clearAllRolesSelect') }}
</el-button> </el-button>
</template> </template>
@ -126,7 +118,7 @@ onMounted(() => {
<template #operation="{ row }"> <template #operation="{ row }">
<!-- 修改 --> <!-- 修改 -->
<el-button v-if="hasAuth(auth.update)" :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> <el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)">
{{ $t('modify') }} {{ $t('modify') }}
</el-button> </el-button>
@ -146,7 +138,7 @@ onMounted(() => {
</ReAuth> </ReAuth>
<!-- 删除操作 --> <!-- 删除操作 -->
<el-popconfirm v-if="hasAuth(auth.deleted)" :title="`${$t('delete')} ${$t(row.title)}?`" @confirm="onDelete(row)"> <el-popconfirm :title="`${$t('delete')} ${$t(row.title)}?`" @confirm="onDelete(row)">
<template #reference> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

@ -1,4 +1,3 @@
export * from './modules/columns'; export * from './modules/columns';
export * from './modules/auth';
export * from './modules/hooks'; export * from './modules/hooks';
export * from './modules/types'; export * from './modules/types';

View File

@ -1,16 +0,0 @@
export const auth = {
// 更新操作
update: ['router::updateMenu'],
// 添加操作
add: ['router::addMenu'],
// 分页查询
search: 'router::menuList',
// 删除操作
deleted: ['router::deletedMenuByIds'],
// 为菜单分配角色
assignRolesToRouter: ['routerRole::assignRolesToRouter'],
// 批量为菜单添加角色
assignAddBatchRolesToRouter: ['routerRole::assignAddBatchRolesToRouter'],
// 清除选中菜单所有角色
clearAllRolesSelect: ['routerRole::clearAllRolesSelect'],
};

View File

@ -1,14 +1,12 @@
<script lang="ts" setup> <script lang="ts" setup>
import ReAuth from '@/components/ReAuth/src/auth';
import { addDialog } from '@/components/ReDialog/index'; import { addDialog } from '@/components/ReDialog/index';
import { useRenderIcon } from '@/components/ReIcon/src/hooks'; import { useRenderIcon } from '@/components/ReIcon/src/hooks';
import { PureTableBar } from '@/components/RePureTableBar'; import { PureTableBar } from '@/components/RePureTableBar';
import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { RequestMethod } from '@/enums/baseConstant'; import { RequestMethod } from '@/enums/baseConstant';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { hasAuth } from '@/router/utils';
import { usePermissionStore } from '@/store/system/power'; import { usePermissionStore } from '@/store/system/power';
import { auth, columns, onAdd, onDelete, onDeleteBatch, onSearch, onUpdate, onUpdateBatchParent, powerIds } from '@/views/system/permission/utils'; import { columns, onAdd, onDelete, onDeleteBatch, onSearch, onUpdate, onUpdateBatchParent, powerIds } from '@/views/system/permission/utils';
import FileUploadDialog from '@/views/system/role/components/file-upload-dialog.vue'; import FileUploadDialog from '@/views/system/role/components/file-upload-dialog.vue';
import PureTable from '@pureadmin/table'; import PureTable from '@pureadmin/table';
import { handleTree } from '@pureadmin/utils'; import { handleTree } from '@pureadmin/utils';
@ -111,7 +109,6 @@ onMounted(() => {
<template> <template>
<div class="main"> <div class="main">
<ReAuth :value="auth.query">
<el-form ref="formRef" :inline="true" :model="powerStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto"> <el-form ref="formRef" :inline="true" :model="powerStore.form" class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px] overflow-auto">
<el-form-item :label="$t('power_powerCode')" prop="powerCode"> <el-form-item :label="$t('power_powerCode')" prop="powerCode">
<el-input v-model="powerStore.form.powerCode" :placeholder="`${$t('input')}${$t('power_powerCode')}`" class="!w-[180px]" clearable /> <el-input v-model="powerStore.form.powerCode" :placeholder="`${$t('input')}${$t('power_powerCode')}`" class="!w-[180px]" clearable />
@ -134,7 +131,6 @@ onMounted(() => {
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button> <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</ReAuth>
<PureTableBar <PureTableBar
:columns="columns" :columns="columns"
@ -146,7 +142,7 @@ onMounted(() => {
> >
<template #buttons> <template #buttons>
<!-- 下载配置 --> <!-- 下载配置 -->
<el-dropdown v-if="hasAuth(auth.update)" class="mr-1" type="primary"> <el-dropdown class="mr-1" type="primary">
<el-button :icon="useRenderIcon(Download)" plain type="primary"> <el-button :icon="useRenderIcon(Download)" plain type="primary">
{{ $t('download_configuration') }} {{ $t('download_configuration') }}
</el-button> </el-button>
@ -159,7 +155,7 @@ onMounted(() => {
</el-dropdown> </el-dropdown>
<!-- 更新配置 --> <!-- 更新配置 -->
<el-dropdown v-if="hasAuth(auth.update)" class="mr-1" type="primary"> <el-dropdown class="mr-1" type="primary">
<el-button :icon="useRenderIcon(Upload)" plain type="primary">{{ $t('file_import') }}</el-button> <el-button :icon="useRenderIcon(Upload)" plain type="primary">{{ $t('file_import') }}</el-button>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
@ -170,23 +166,23 @@ onMounted(() => {
</el-dropdown> </el-dropdown>
<!-- 添加权限按钮 --> <!-- 添加权限按钮 -->
<el-button v-if="hasAuth(auth.add)" :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd()"> <el-button :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd()">
{{ $t('addNew') }} {{ $t('addNew') }}
</el-button> </el-button>
<el-dropdown v-if="hasAuth(auth.update)" class="ml-1" type="primary"> <el-dropdown class="ml-1" type="primary">
<el-button :icon="useRenderIcon(More)" plain type="primary">{{ $t('more_actions') }}</el-button> <el-button :icon="useRenderIcon(More)" plain type="primary">{{ $t('more_actions') }}</el-button>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<!-- 批量更新父级id --> <!-- 批量更新父级id -->
<el-dropdown-item v-if="hasAuth(auth.update)" :icon="useRenderIcon(EditPen)" @click="onUpdateSort">拖拽排序</el-dropdown-item> <el-dropdown-item :icon="useRenderIcon(EditPen)" @click="onUpdateSort">拖拽排序</el-dropdown-item>
<!-- 批量更新父级id --> <!-- 批量更新父级id -->
<el-dropdown-item v-if="hasAuth(auth.update)" :disabled="!(powerIds.length > 0)" :icon="useRenderIcon(EditPen)" @click="onUpdateBatchParent"> <el-dropdown-item :disabled="!(powerIds.length > 0)" :icon="useRenderIcon(EditPen)" @click="onUpdateBatchParent">
{{ $t('update_batches_parent') }} {{ $t('update_batches_parent') }}
</el-dropdown-item> </el-dropdown-item>
<!-- 批量删除按钮 --> <!-- 批量删除按钮 -->
<el-dropdown-item v-if="hasAuth(auth.delete)" :disabled="!(powerIds.length > 0)" :icon="useRenderIcon(Delete)" @click="onDeleteBatch"> <el-dropdown-item :disabled="!(powerIds.length > 0)" :icon="useRenderIcon(Delete)" @click="onDeleteBatch">
{{ $t('deleteBatches') }} {{ $t('deleteBatches') }}
</el-dropdown-item> </el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
@ -230,15 +226,15 @@ onMounted(() => {
<template #operation="{ row }"> <template #operation="{ row }">
<!-- 修改 --> <!-- 修改 -->
<el-button v-if="hasAuth(auth.update)" :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> <el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)">
{{ $t('modify') }} {{ $t('modify') }}
</el-button> </el-button>
<!-- 添加 --> <!-- 添加 -->
<el-button v-if="hasAuth(auth.add)" :icon="useRenderIcon(AddFill)" :size="size" class="reset-margin" link type="primary" @click="onAdd(row.id)"> <el-button :icon="useRenderIcon(AddFill)" :size="size" class="reset-margin" link type="primary" @click="onAdd(row.id)">
{{ $t('addNew') }} {{ $t('addNew') }}
</el-button> </el-button>
<!-- 删除 --> <!-- 删除 -->
<el-popconfirm v-if="hasAuth(auth.delete)" :title="`${$t('delete')}${row.powerName}?`" @confirm="onDelete(row)"> <el-popconfirm :title="`${$t('delete')}${row.powerName}?`" @confirm="onDelete(row)">
<template #reference> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

@ -1,10 +0,0 @@
export const auth = {
// 分页查询
query: 'permission::page',
// // 添加操作
add: ['permission::add'],
// 更新操作
update: ['permission::update'],
// 删除操作
delete: ['permission::delete'],
};

View File

@ -1,4 +1,3 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';
export * from './types'; export * from './types';

View File

@ -1,14 +1,11 @@
<script lang="ts" setup> <script lang="ts" setup>
import ReAuth from '@/components/ReAuth/src/auth';
import { addDialog } from '@/components/ReDialog/index'; import { addDialog } from '@/components/ReDialog/index';
import { useRenderIcon } from '@/components/ReIcon/src/hooks'; import { useRenderIcon } from '@/components/ReIcon/src/hooks';
import { PureTableBar } from '@/components/RePureTableBar'; import { PureTableBar } from '@/components/RePureTableBar';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
import { hasAuth } from '@/router/utils';
import { useRoleStore } from '@/store/system/role'; import { useRoleStore } from '@/store/system/role';
import FileUploadDialog from '@/views/system/role/components/file-upload-dialog.vue'; import FileUploadDialog from '@/views/system/role/components/file-upload-dialog.vue';
import { import {
auth,
columns, columns,
contentRef, contentRef,
deleteIds, deleteIds,
@ -103,7 +100,6 @@ onMounted(() => {
<template> <template>
<div class="main"> <div class="main">
<ReAuth :value="auth.query">
<el-form ref="formRef" :inline="true" :model="roleStore.form" class="search-form bg-bg_color w-full pl-8 pt-[12px] overflow-auto"> <el-form ref="formRef" :inline="true" :model="roleStore.form" class="search-form bg-bg_color w-full pl-8 pt-[12px] overflow-auto">
<el-form-item :label="$t('role_roleCode')" prop="roleCode"> <el-form-item :label="$t('role_roleCode')" prop="roleCode">
<el-input v-model="roleStore.form.roleCode" :placeholder="`${$t('input')}${$t('role_roleCode')}`" class="!w-[180px]" clearable /> <el-input v-model="roleStore.form.roleCode" :placeholder="`${$t('input')}${$t('role_roleCode')}`" class="!w-[180px]" clearable />
@ -118,7 +114,6 @@ onMounted(() => {
<el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button> <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">{{ $t('buttons.reset') }}</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</ReAuth>
<div ref="contentRef" :class="['flex', deviceDetection() ? 'flex-wrap' : '']"> <div ref="contentRef" :class="['flex', deviceDetection() ? 'flex-wrap' : '']">
<PureTableBar <PureTableBar
@ -131,20 +126,20 @@ onMounted(() => {
> >
<template #buttons> <template #buttons>
<!-- 下载Excel配置 --> <!-- 下载Excel配置 -->
<el-button v-if="hasAuth(auth.update)" :icon="useRenderIcon(Download)" plain type="primary" @click="downloadRoleExcel"> <el-button :icon="useRenderIcon(Download)" plain type="primary" @click="downloadRoleExcel">
{{ $t('download_configuration') }} {{ $t('download_configuration') }}
</el-button> </el-button>
<!-- 文件更新 --> <!-- 文件更新 -->
<el-button v-if="hasAuth(auth.update)" :icon="useRenderIcon(Upload)" plain type="primary" @click="onUpdateByFile"> <el-button :icon="useRenderIcon(Upload)" plain type="primary" @click="onUpdateByFile">
{{ $t('file_import') }} {{ $t('file_import') }}
</el-button> </el-button>
<el-button v-if="hasAuth(auth.add)" :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd"> <el-button :icon="useRenderIcon(AddFill)" plain type="success" @click="onAdd">
{{ $t('addNew') }} {{ $t('addNew') }}
</el-button> </el-button>
<!-- 批量删除按钮 --> <!-- 批量删除按钮 -->
<el-button v-if="hasAuth(auth.delete)" :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch"> <el-button :disabled="!(deleteIds.length > 0)" :icon="useRenderIcon(Delete)" plain type="danger" @click="onDeleteBatch">
{{ $t('delete_batches') }} {{ $t('delete_batches') }}
</el-button> </el-button>
</template> </template>
@ -172,20 +167,12 @@ onMounted(() => {
> >
<template #operation="{ row }"> <template #operation="{ row }">
<!-- 修改 --> <!-- 修改 -->
<el-button <el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)">
v-if="hasAuth(auth.update)"
:icon="useRenderIcon(EditPen)"
:size="size"
class="reset-margin"
link
type="primary"
@click="onUpdate(row)"
>
{{ $t('modify') }} {{ $t('modify') }}
</el-button> </el-button>
<!-- 删除 --> <!-- 删除 -->
<el-popconfirm v-if="hasAuth(auth.delete)" :title="`${$t('delete')}${row.roleCode}?`" @confirm="onDelete(row)"> <el-popconfirm :title="`${$t('delete')}${row.roleCode}?`" @confirm="onDelete(row)">
<template #reference> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}
@ -193,15 +180,7 @@ onMounted(() => {
</template> </template>
</el-popconfirm> </el-popconfirm>
<el-button <el-button :icon="useRenderIcon(Menu)" :size="size" class="reset-margin" link type="primary" @click="onMenuPowerClick(row)">
v-if="hasAuth(auth.rolePowerAdd)"
:icon="useRenderIcon(Menu)"
:size="size"
class="reset-margin"
link
type="primary"
@click="onMenuPowerClick(row)"
>
{{ $t('power_setting') }} {{ $t('power_setting') }}
</el-button> </el-button>
</template> </template>

View File

@ -1,12 +0,0 @@
export const auth = {
// 分页查询
query: 'role::query',
// 添加操作
add: ['role::add'],
// 更新操作
update: ['role::update'],
// 删除操作
delete: ['role::delete'],
// 为角色分配权限
rolePowerAdd: ['rolePower::add'],
};

View File

@ -1,4 +1,3 @@
export * from './columns'; export * from './columns';
export * from './auth';
export * from './hooks'; export * from './hooks';
export * from './types'; export * from './types';