From 6fb6bc2f76ee0ae73cd9efcc3eb79689533d27da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E6=B3=BD=E6=97=BA?= <2413898818@qq.com> Date: Mon, 16 Dec 2024 20:00:03 +0800 Subject: [PATCH] Default Changelist --- frontend/src/utils/helper/permission.js | 45 ++++++- frontend/src/views/list/ExamDetail.vue | 77 +++++++----- frontend/src/views/list/ExamRecordDetail.vue | 125 +++++++++++-------- frontend/src/views/list/ExamRecordList.vue | 83 +++++++----- frontend/src/views/list/ExamTableList.vue | 112 +++++++++++------ 5 files changed, 287 insertions(+), 155 deletions(-) diff --git a/frontend/src/utils/helper/permission.js b/frontend/src/utils/helper/permission.js index a964324..ef08344 100644 --- a/frontend/src/utils/helper/permission.js +++ b/frontend/src/utils/helper/permission.js @@ -1,46 +1,79 @@ +// 定义一个名为 PERMISSION_ENUM 的常量对象,用于列举各种权限相关的枚举信息。 +// 该对象的每个属性键(如 'add'、'delete' 等)对应一种权限操作,属性值又是一个包含 'key' 和 'label' 的对象, +// 'key' 与属性键相同,用于在代码逻辑中作为唯一标识来区分不同的权限操作, +// 'label' 则是对应的权限操作的中文描述,方便在界面显示或者给开发人员查看时更直观地理解该权限的含义。 const PERMISSION_ENUM = { + // 'add' 权限,代表新增操作,其对应的标识 'key' 为 'add',中文描述 'label' 为 '新增',在权限管理系统中可用于判断用户是否具有新增数据等相关权限。 'add': { key: 'add', label: '新增' }, + // 'delete' 权限,对应删除操作,'key' 为 'delete','label' 为 '删除',用于检查用户是否有权限删除相应资源等场景。 'delete': { key: 'delete', label: '删除' }, + // 'edit' 权限,表示修改操作,'key' 为 'edit','label' 为 '修改',可用于判断用户是否能够对数据等进行修改操作的权限验证。 'edit': { key: 'edit', label: '修改' }, + // 'query' 权限,意味着查询操作,'key' 为 'query','label' 为 '查询',例如在数据查询功能的权限控制方面会用到这个权限标识。 'query': { key: 'query', label: '查询' }, + // 'get' 权限,通常可理解为获取详情操作,'key' 为 'get','label' 为 '详情',用于判断用户是否有权查看具体数据详情等情况。 'get': { key: 'get', label: '详情' }, + // 'enable' 权限,代表启用操作,'key' 为 'enable','label' 为 '启用',在涉及功能启用、数据启用等权限控制场景中使用。 'enable': { key: 'enable', label: '启用' }, + // 'disable' 权限,对应禁用操作,'key' 为 'disable','label' 为 '禁用',用于验证用户是否具备禁用相关功能或数据的权限。 'disable': { key: 'disable', label: '禁用' }, + // 'import' 权限,表示导入操作,'key' 为 'import','label' 为 '导入',比如在数据导入功能的权限管理中依靠这个权限标识来判断权限。 'import': { key: 'import', label: '导入' }, + // 'export' 权限,意味着导出操作,'key' 为 'export','label' 为 '导出',用于控制用户是否有权限导出数据等相关操作的权限判断。 'export': { key: 'export', label: '导出' } } - function plugin (Vue) { + // 检查插件是否已经被安装过,如果已经安装(通过判断 plugin.installed 属性是否为 true),则直接返回,避免重复安装。 if (plugin.installed) { return } + // 如果 Vue.prototype 上不存在 $auth 属性,就通过 Object.defineProperties 方法来为其定义该属性。 + // 这里使用 defineProperties 可以更精细地控制属性的描述符(如可枚举性、可配置性、读写特性等)。 !Vue.prototype.$auth && Object.defineProperties(Vue.prototype, { $auth: { + // 定义 $auth 属性的读取器(getter)函数,当在 Vue 实例上访问 $auth 属性时,会执行这个函数来获取相应的值。 get () { + // 将当前的 Vue 实例保存到 _this 变量中,方便在后续的内部函数中访问实例上的其他属性和方法, + // 例如访问 Vuex 的 store 实例等(通过 _this.$store)。 const _this = this + // 返回一个函数,这个函数接收一个参数 permissions,它应该是一个表示权限的字符串,格式可能类似 'permission.action'。 return (permissions) => { + // 将传入的 permissions 参数按照 '.' 进行分割,得到一个包含两个元素的数组, + // 第一个元素 permission 表示权限的类型(如 'add'、'delete' 等),第二个元素 action 表示具体的操作行为(对应权限类型下的具体操作)。 const [permission, action] = permissions.split('.') + // 通过 Vue 实例的 $store.getters 访问 Vuex 中定义的 getters,然后获取 roles.permissions, + // 这里的 roles.permissions 应该是存储了用户所拥有的所有权限信息的列表(通常是一个数组,每个元素包含权限相关的详细信息)。 const permissionList = _this.$store.getters.roles.permissions + // 在权限列表中查找与传入的 permission 类型匹配的权限对象,通过比较 permissionId 属性来确定。 return permissionList.find((val) => { return val.permissionId === permission - }).actionList.findIndex((val) => { - return val === action - }) > -1 + }) + // 在上一步找到的权限对象中,查找其 actionList(应该是包含该权限下所有具体操作行为的列表)中是否存在传入的 action 操作行为, + // 通过 findIndex 方法查找,如果找到则返回该操作行为在列表中的索引,若索引大于 -1,表示找到了该操作行为,即用户具有对应的权限,返回 true;否则返回 false。 + .actionList.findIndex((val) => { + return val === action + }) > -1 } } } }) + // 类似地,如果 Vue.prototype 上不存在 $enum 属性,就通过 Object.defineProperties 方法为其定义该属性。 !Vue.prototype.$enum && Object.defineProperties(Vue.prototype, { $enum: { + // 定义 $enum 属性的读取器(getter)函数,当在 Vue 实例上访问 $enum 属性时,执行此函数来获取相应的值。 get () { - // const _this = this; + // 返回一个函数,这个函数接收一个参数 val,用于根据传入的参数来查找 PERMISSION_ENUM 中对应的枚举值。 return (val) => { + // 先将 PERMISSION_ENUM 赋值给 result,后续会根据传入的 val 参数逐步在这个对象中查找对应的子属性。 let result = PERMISSION_ENUM + // 如果传入的 val 参数存在,就按照 '.' 分割成数组,然后遍历每个元素 v,在 result 对象中查找对应的子属性。 val && val.split('.').forEach(v => { + // 如果当前的 result 对象存在并且包含对应的子属性 v,则更新 result 为该子属性的值,否则将 result 设置为 null,表示未找到对应的枚举值。 result = result && result[v] || null }) + // 最后返回查找后的结果,即对应的权限枚举值(如果找到的话)或者 null(如果未找到)。 return result } } @@ -48,4 +81,6 @@ function plugin (Vue) { }) } +// 将定义好的 plugin 函数导出,方便在其他模块中引入使用,通常是在 Vue 应用的入口文件或者插件注册相关的代码中, +// 通过 Vue.use(plugin) 的方式来注册这个插件,使其为 Vue 实例添加 $auth 和 $enum 等便捷的属性和功能。 export default plugin diff --git a/frontend/src/views/list/ExamDetail.vue b/frontend/src/views/list/ExamDetail.vue index 0b6a5be..24055a6 100644 --- a/frontend/src/views/list/ExamDetail.vue +++ b/frontend/src/views/list/ExamDetail.vue @@ -1,20 +1,27 @@ - +} + \ No newline at end of file diff --git a/frontend/src/views/list/ExamTableList.vue b/frontend/src/views/list/ExamTableList.vue index 5c22919..9dfdea0 100644 --- a/frontend/src/views/list/ExamTableList.vue +++ b/frontend/src/views/list/ExamTableList.vue @@ -1,29 +1,39 @@