【翻译】(56)path-permission元素

深入解析AndroidManifest.xml中的path-permission元素,了解其语法、用途、属性及其在内容提供者中的应用。

【翻译】(56)path-permission元素

 

see

http://developer.android.com/guide/topics/manifest/path-permission-element.html

 

原文见

http://developer.android.com/guide/topics/manifest/path-permission-element.html

 

-------------------------------

 

<path-permission>

 

path-permission元素

 

-------------------------------

 

* syntax:

 

* 语法:

 

-------------------------------

 

<path-permission android:path="string"

                 android:pathPrefix="string"

                 android:pathPattern="string"

                 android:permission="string"

                 android:readPermission="string"

                 android:writePermission="string" />

 

-------------------------------

 

* contained in:

 

* 被包含在:

 

<provider>

 

* description:

 

* 描述:

 

Defines the path and required permissions for a specific subset of data within a content provider. This element can be specified multiple times to supply multiple paths.

 

定义在一个内容提供者中特定数据子集的路径和所需的权限。这个元素可以被指定多次以提供多个路径。

 

* attributes:

 

* 属性:

 

* android:path

 

A complete URI path for a subset of content provider data. Permission can be granted only to the particular data identified by this path. When used to provide search suggestion content, it must be appended with "/search_suggest_query".

 

内容提供者数据的子集的完整URI路径。权限可以被授权只对应被这个路径标识的特殊数据。当用于提供搜索建议的内容时,它必须用"/search_suggest_query"尾加。

 

* android:pathPrefix

 

The initial part of a URI path for a subset of content provider data. Permission can be granted to all data subsets with paths that share this initial part.

 

用于内容提供者数据的子集的URI的开头部分。权限可以被授权给所有带有共享此开头部分的路径的数据子集。

 

* android:pathPattern

 

A complete URI path for a subset of content provider data, but one that can use the following wildcards:

 

用于内容提供者数据的子集的完整URI路径,但它可以使用以下通配符:

 

* An asterisk ('*'). This matches a sequence of 0 to many occurrences of the immediately preceding character.

 

* 一个星号('*')匹配一个零到多次出现的即时(注:紧接)前驱字符的序列。

 

* A period followed by an asterisk (".*"). This matches any sequence of 0 or more characters.

 

* 一个点后面跟着一个星号(".*")匹配0到多个字符的任意序列。

 

Because '\' is used as an escape character when the string is read from XML (before it is parsed as a pattern), you will need to double-escape. For example, a literal '*' would be written as "\\*" and a literal '\' would be written as "\\". This is basically the same as what you would need to write if constructing the string in Java code.

 

因为'\'被用作一个转义字符当该字符串从XML中被读取(在它被解释为一个模式之前),你将需要双转义:例如,一个字面'*'应该被写成"\\*"而一个字面'\'应该被写成"\\\\"。这基本上和如果在Java代码中构造字符串的话你需要写的东西是相同的。

 

For more information on these types of patterns, see the descriptions of PATTERN_LITERAL, PATTERN_PREFIX, and PATTERN_SIMPLE_GLOB in the PatternMatcher class.

 

想获得关于这三种类型模式的更多信息,参见PatternMatcher类中PATTERN_LITERAL,PATTERN_PREFIX,和PATTERN_SIMPLE_GLOB的描述。

 

* android:permission

 

The name of a permission that clients must have in order to read or write the content provider's data. This attribute is a convenient way of setting a single permission for both reading and writing. However, the readPermission and writePermission attributes take precedence over this one.

 

权限的名称,客户端必须拥有该权限以便读取或写入内容提供者的数据。这个属性是设置单一权限用于读写的便利方法。然而,readPermission和writePermission属性持有比它高的优先级。

 

* android:readPermission

 

A permission that clients must have in order to query the content provider.

 

客户端必须拥有的权限以便查询内容提供者。

 

* android:writePermission

 

A permission that clients must have in order to make changes to the data controlled by the content provider.

 

客户端必须拥有的权限以便对内容提供者控制的数据作出改变。

 

* introduced in:

 

* 引入:

 

API Level 4

 

API级别4

 

* see also:

 

* 另见:

 

SearchManager

Manifest.permission

Security and Permissions 安全与权限

 

Except as noted, this content is licensed under Apache 2.0. For details and restrictions, see the Content License.

 

除特别说明外,本文在Apache 2.0下许可。细节和限制请参考内容许可证。

 

Android 4.0 r1 - 10 Feb 2012 0:44

 

-------------------------------

 

Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.

 

(此页部分内容基于Android开源项目,以及使用根据创作公共2.5来源许可证描述的条款进行修改)

 

(本人翻译质量欠佳,请以官方最新内容为准,或者参考其它翻译版本:

* ソフトウェア技術ドキュメントを勝手に翻訳

http://www.techdoctranslator.com/android

* Ley's Blog

http://leybreeze.com/blog/

* 农民伯伯

http://www.cnblogs.com/over140/

* Android中文翻译组

http://androidbox.sinaapp.com/


0 : {modulePath: '/archives-administration', permissions: 'page', moduleName: '档案管理'} 1 : {modulePath: '/archives-administration/contract-archiving', permissions: 'page', moduleName: '合同归档'} 2 : {modulePath: '/archives-administration/contract-archiving/contract-archive-list', permissions: 'page', moduleName: '合同归档列表'} 3 : {modulePath: 'RB910009', permissions: 'button', moduleName: '合同归档列表-批量操作'} 4 : {modulePath: 'RB910010', permissions: 'button', moduleName: '合同归档列表-邮寄'} 5 : {modulePath: 'RB910011', permissions: 'button', moduleName: '合同归档列表-回款'} 6 : {modulePath: 'RB910012', permissions: 'button', moduleName: '合同归档列表-归档'} 7 : {modulePath: '/archives-administration/report-archiving', permissions: 'page', moduleName: '报告归档'} 8 : {modulePath: '/archives-administration/report-archiving/report-archive-list', permissions: 'page', moduleName: '报告归档列表'} 9 : {modulePath: 'RB910013', permissions: 'button', moduleName: '报告归档列表-批量操作'} 10 : {modulePath: 'RB910014', permissions: 'button', moduleName: '报告归档列表-邮寄'} 11 : {modulePath: 'RB910015', permissions: 'button', moduleName: '报告归档列表-归档'} 12 : {modulePath: '/business-management', permissions: 'page', moduleName: '业务管理'} 13 : {modulePath: '/business-management/contract-management', permissions: 'page', moduleName: '合同管理'} 14 : {modulePath: '/business-management/contract-management/contract-list', permissions: 'page', moduleName: '合同列表'} 15 : {modulePath: 'RB910016', permissions: 'button', moduleName: '合同列表-创建合同'} 16 : {modulePath: 'RB910017', permissions: 'button', moduleName: '合同列表-调整状态'} 17 : {modulePath: 'RB910018', permissions: 'button', moduleName: '合同列表-创建任务'} 18 : {modulePath: '/business-management/contract-management/contract-review', permissions: 'page', moduleName: '合同审核'} 19 : {modulePath: '/business-management/contract-management/contract-details', permissions: 'page', moduleName: '合同详情'} 20 : {modulePath: 'RB910019', permissions: 'button', moduleName: '合同详情-生成/下载合同'} 21 : {modulePath: 'RB910020', permissions: 'button', moduleName: '合同详情-编辑合同'} 22 : {modulePath: '/business-management/task-management', permissions: 'page', moduleName: '任务管理'} 23 : {modulePath: '/business-management/task-management/task-list', permissions: 'page', moduleName: '任务列表'} 24 : {modulePath: 'RB910021', permissions: 'button', moduleName: '任务列表-创建任务'} 25 : {modulePath: 'RB910022', permissions: 'button', moduleName: '任务列表-下载报告'} 26 : {modulePath: 'RB910023', permissions: 'button', moduleName: '任务列表-启动'} 27 : {modulePath: 'RB910024', permissions: 'button', moduleName: '任务列表-暂停'} 28 : {modulePath: 'RB910025', permissions: 'button', moduleName: '任务列表-终止'} 29 : {modulePath: '/business-management/task-management/task-details', permissions: 'page', moduleName: '任务详情'} 30 : {modulePath: '/business-management/task-management/task-review', permissions: 'page', moduleName: '任务审核'} 31 : {modulePath: '/customer-management', permissions: 'page', moduleName: '客户管理'} 32 : {modulePath: '/customer-management/customer-list', permissions: 'page', moduleName: '客户列表'} 33 : {modulePath: '/customer-management/customer-details', permissions: 'page', moduleName: '客户详情'} 34 : {modulePath: '/data-management', permissions: 'page', moduleName: '数据管理'} 35 : {modulePath: '/enterprise-management', permissions: 'page', moduleName: '企业管理'} 36 : {modulePath: '/enterprise-management/enterprise-list', permissions: 'page', moduleName: '企业列表'} 37 : {modulePath: '/personnel-management', permissions: 'page', moduleName: '人事管理'} 38 : {modulePath: '/personnel-management/organizational-management', permissions: 'page', moduleName: '组织管理'} 39 : {modulePath: '/personnel-management/organizational-management/organization-list', permissions: 'page', moduleName: '组织列表'} 40 : {modulePath: 'RB910001', permissions: 'button', moduleName: '组织列表-编辑'} 41 : {modulePath: 'RB910002', permissions: 'button', moduleName: '组织列表-新增下级'} 42 : {modulePath: 'RB910003', permissions: 'button', moduleName: '组织列表-撤销'} 43 : {modulePath: 'RB910004', permissions: 'button', moduleName: '组织列表-新增组织'} 44 : {modulePath: '/personnel-management/organizational-management/organization-chart', permissions: 'page', moduleName: '组织结构图'} 45 : {modulePath: '/personnel-management/organizational-management/post-management', permissions: 'page', moduleName: '岗位管理'} 46 : {modulePath: '/personnel-management/organizational-management/role-management', permissions: 'page', moduleName: '角色管理'} 47 : {modulePath: '/personnel-management/staff-management', permissions: 'page', moduleName: '员工管理'} 48 : {modulePath: '/personnel-management/staff-management/employee-list', permissions: 'page', moduleName: '员工列表'} 49 : {modulePath: '/personnel-management/staff-management/employee-details', permissions: 'page', moduleName: '员工详情'} 50 : {modulePath: 'RB910005', permissions: 'button', moduleName: '员工详情-重置密码'} 51 : {modulePath: 'RB910006', permissions: 'button', moduleName: '员工详情-启用'} 52 : {modulePath: 'RB910007', permissions: 'button', moduleName: '员工详情-禁用'} 53 : {modulePath: 'RB910008', permissions: 'button', moduleName: '员工详情-注销'} 54 : {modulePath: '/set-center', permissions: 'page', moduleName: '设置中心'} 55 : {modulePath: 'RB910026', permissions: 'button', moduleName: '流程设置-新增流程'} 56 : {modulePath: 'RB910027', permissions: 'button', moduleName: '流程设置-批量操作'} 57 : {modulePath: 'RB910028', permissions: 'button', moduleName: '流程设置-流程状态'} 58 : {modulePath: 'RB910029', permissions: 'button', moduleName: '流程设置-编辑'} 59 : {modulePath: 'RB910030', permissions: 'button', moduleName: '流程设置-删除'} 60 : {modulePath: '/set-center/announcement-settings', permissions: 'page', moduleName: '公告设置'} 61 : {modulePath: 'RB910031', permissions: 'button', moduleName: '公告设置-创建公告'} 62 : {modulePath: 'RB910032', permissions: 'button', moduleName: '公告设置-批量操作'} 63 : {modulePath: 'RB910033', permissions: 'button', moduleName: '公告设置-发布'} 64 : {modulePath: 'RB910034', permissions: 'button', moduleName: '公告设置-下架'} 65 : {modulePath: 'RB910035', permissions: 'button', moduleName: '公告设置-编辑'} 66 : {modulePath: 'RB910036', permissions: 'button', moduleName: '公告设置-删除'} 67 : {modulePath: 'RB910037', permissions: 'button', moduleName: '合同审核权限'} 改成正常的数组数据
07-17
<template> <div class="role_wrapper"> <div class="conys"> <!-- 搜索过滤区域 --> <div class="search-container"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" class="search-form"> <el-form-item label="Role Name" prop="roleName"> <el-input v-model="queryParams.roleName" placeholder="Enter role name" clearable style="width: 240px" /> </el-form-item> <el-form-item label="Role Able" prop="roleAble"> <el-select v-model="queryParams.roleAble" placeholder="Select role able" clearable> <el-option v-for="item in roleAbleList" :key="item.value" :label="item.desc" :value="item.value"> </el-option> </el-select> </el-form-item> <el-form-item label="Create Time" prop="createTime" class="date-picker-item"> <el-date-picker v-model="dateRange" type="daterange" range-separator="-" start-placeholder="Start date" @change="handleDateChange()" end-placeholder="End date" value-format="yyyy-MM-dd HH:mm:ss" style="width: 100%;"> </el-date-picker> </el-form-item> <el-form-item class="button-group"> <el-button type="primary" size="mini" @click="handleQuery">Search</el-button> <el-button size="mini" @click="resetQuery">Reset</el-button> </el-form-item> </el-form> </div> <!-- 细横线 --> <el-row :gutter="10"> <div class="custom-line"></div> </el-row> <!-- 操作按钮区域 --> <div class="operation-buttons"> <el-button type="primary" size="mini" @click="handleAdd">Add</el-button> <el-button size="mini" @click="handleExport">Export</el-button> <el-button type="danger" size="mini" @click="handleDelete" :disabled="selectedRoleIds.length === 0"> Delete </el-button> </div> <!-- 数据表格 --> <div class="role-list"> <el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55"></el-table-column> <el-table-column label="Role Code" align="center" prop="code" /> <el-table-column label="Role Name" align="center" prop="roleName" :show-overflow-tooltip="true" /> <el-table-column label="Rank" align="center" prop="rank" /> <el-table-column label="Role Able" align="center" prop="roleAble"> <template #default="scope"> <el-tag :type="scope.row.roleAbleDesc === 'yes' ? 'success' : 'danger'"> {{ scope.row.roleAbleDesc }} </el-tag> </template> </el-table-column> <el-table-column label="Data Scope" align="center" prop="dataScopeDesc" :show-overflow-tooltip="true" /> <el-table-column label="Remark" align="center" prop="remark" :show-overflow-tooltip="true" /> <el-table-column label="Create Time" align="center" prop="createTime" width="180" /> <el-table-column label="Operate" align="center" class-name="small-padding fixed-width"> <template #default="scope"> <el-button size="mini" type="text" icon="el-icon-edit" @click="handleEdit(scope.row)"> </el-button> <el-button size="mini" type="text" icon="el-icon-view" @click="handleDetail(scope.row)"> </el-button> <el-button size="mini" type="text" icon="el-icon-lock" @click="handlePermission(scope.row)"> </el-button> <el-button size="mini" type="text" icon="el-icon-user" @click="handleUsers(scope.row)"> </el-button> </template> </el-table-column> </el-table> </div> <!-- 分页控件 --> <div class="pagination-block"> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page.sync="currentPage" :page-size="pageSize" layout="total, prev, pager, next" :total="total"> </el-pagination> </div> </div> <!-- 添加/编辑角色抽屉 - 60%大小 --> <el-drawer title="" :visible.sync="drawerVisible" :with-header="false" size="60%"> <div class="drawerContent"> <div class="drawerHeader"> <div style="display: flex; align-items: center"> <i style="font-size: 30px; margin-right: 5px; cursor: pointer" class="el-icon-close" @click="drawerVisible = false"></i> <span>{{ isEdit ? 'Edit Role' : 'Add Role' }}</span> </div> </div> <div class="form-container"> <el-form :model="roleForm" ref="roleForm" :rules="rules" label-width="120px"> <!-- 第一行:RoleCode 和 RoleName 并排 --> <el-row :gutter="20" class="form-row"> <el-col :span="12"> <el-form-item label="Role Code" prop="code"> <el-input v-model="roleForm.code" placeholder="Enter role code" :disabled="isEdit"></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="Role Name" prop="roleName"> <el-input v-model="roleForm.roleName" placeholder="Enter role name"></el-input> </el-form-item> </el-col> </el-row> <!-- 第二行:Rank 和 Role Able 并排 --> <el-row :gutter="20" class="form-row"> <el-col :span="12"> <el-form-item label="Rank" prop="rank"> <el-input v-model="roleForm.rank" placeholder="Enter rank"></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="Role Able" prop="roleAble"> <el-select v-model="roleForm.roleAble" placeholder="Select role able"> <el-option value="YES" label="YES"></el-option> <el-option value="NO" label="NO"></el-option> </el-select> </el-form-item> </el-col> </el-row> <!-- 第三行:Comment 单独一行 --> <el-row class="form-row"> <el-col :span="24"> <el-form-item label="Comment" prop="remark"> <el-input v-model="roleForm.remark" placeholder="Enter comment" type="textarea" rows="3"></el-input> </el-form-item> </el-col> </el-row> <!-- 第四行:Menu Permissions 文字 --> <el-row class="form-row"> <el-col :span="24"> <el-form-item class="menu-permission-label"> <label>Menu Permissions</label> <div class="permission-legend"> <span class="permission-item"><i class="el-icon-check" style="color: #409EFF;"></i> 查看</span> <span class="permission-item"><i class="el-icon-circle-plus" style="color: #67C23A;"></i> 新增</span> <span class="permission-item"><i class="el-icon-edit" style="color: #E6A23C;"></i> 编辑</span> <span class="permission-item"><i class="el-icon-delete" style="color: #F56C6C;"></i> 删除</span> </div> </el-form-item> </el-col> </el-row> <!-- 第五行:Tree 树形控件 - 带增删改查权限 --> <el-row class="form-row tree-row"> <el-col :span="24"> <div class="tree-container"> <div v-if="menuPermissionsLoading" class="debug-info">Loading menu permissions...</div> <div v-if="!menuPermissionsLoading && (!menuPermissions || menuPermissions.length === 0)" class="debug-info"> No menu permission data available </div> <el-tree v-loading="menuPermissionsLoading" :data="menuPermissions" node-key="id" ref="permissionTree" :props="menuPermissionProps" :expand-on-click-node="false" :default-expand-all="true"> <template #default="{ node, data }"> <div class="tree-node-content"> <span class="tree-node-label level-${node.level}" :title="getNodeLabel(data)"> {{ getNodeLabel(data) }} </span> <div class="permission-checkboxes"> <el-checkbox v-model="data.permissions.query" @change="handlePermissionChange(data, 'query', $event)" size="mini"> <i class="el-icon-check" style="color: #409EFF;"></i> 查看 </el-checkbox> <el-checkbox v-model="data.permissions.add" @change="handlePermissionChange(data, 'add', $event)" size="mini"> <i class="el-icon-circle-plus" style="color: #67C23A;"></i> 新增 </el-checkbox> <el-checkbox v-model="data.permissions.update" @change="handlePermissionChange(data, 'update', $event)" size="mini"> <i class="el-icon-edit" style="color: #E6A23C;"></i> 编辑 </el-checkbox> <el-checkbox v-model="data.permissions.delete" @change="handlePermissionChange(data, 'delete', $event)" size="mini"> <i class="el-icon-delete" style="color: #F56C6C;"></i> 删除 </el-checkbox> </div> </div> </template> </el-tree> </div> </el-col> </el-row> </el-form> </div> <div class="drawer-footer"> <el-button @click="drawerVisible = false">Cancel</el-button> <el-button type="primary" @click="submitForm">Save</el-button> </div> </div> </el-drawer> <!-- 数据权限抽屉 - 60%大小 --> <el-drawer title="" :visible.sync="dataPermissionDrawerVisible" :with-header="false" size="60%"> <div class="drawerContent"> <div class="drawerHeader"> <div style="display: flex; align-items: center"> <i style="font-size: 30px; margin-right: 5px; cursor: pointer" class="el-icon-close" @click="dataPermissionDrawerVisible = false"></i> <span>Data Permissions</span> </div> </div> <div class="form-container"> <el-form :model="dataPermissionForm" ref="dataPermissionForm" label-width="140px"> <!-- 第一行:RoleName 和 Extend of Competence 并排 --> <el-row :gutter="20" class="form-row"> <el-col :span="12"> <el-form-item label="Role Name"> <el-input v-model="dataPermissionForm.roleName" placeholder="Role name" disabled></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="Extend of Competence" class="no-wrap-label"> <el-select v-model="dataPermissionForm.competence" placeholder="Select extend of competence" @change="handleCompetenceChange"> <el-option value="all" label="All Data Permissions"></el-option> <el-option value="personal" label="Personal Data Permissions"></el-option> <el-option value="custom" label="Custom Data Permissions"></el-option> </el-select> </el-form-item> </el-col> </el-row> <!-- 第二行:Data Permissions 文字 --> <el-row class="form-row" v-if="showDataPermissionTree"> <el-col :span="24"> <el-form-item class="menu-permission-label"> <label>Data Permissions</label> </el-form-item> </el-col> </el-row> <!-- 第三行:Data Permissions 树形控件 - 仅当选择Custom时显示 --> <el-row class="form-row tree-row" v-if="showDataPermissionTree"> <el-col :span="24"> <div class="tree-container"> <div v-if="dataPermissions.length === 0" class="debug-info"> No data permission data available </div> <el-tree :data="dataPermissions" show-checkbox node-key="id" ref="dataPermissionTree" :props="defaultProps" @check-change="handleDataPermissionCheckChange" :default-expand-all="true"> <template #default="{ node, data }"> <span class="tree-node-label level-${node.level}" :title="data.label || 'Unnamed Node'"> {{ data.label || 'Unnamed Node' }} </span> </template> </el-tree> </div> </el-col> </el-row> </el-form> </div> <div class="drawer-footer"> <el-button @click="dataPermissionDrawerVisible = false">Cancel</el-button> <el-button type="primary" @click="submitDataPermission">Save</el-button> </div> </div> </el-drawer> </div> </template> <script> import objurl from "@/common/interface/url.js"; import objaxios from "axios"; import objstorage from "@/common/localstorage/storage.js"; import moment from 'moment-timezone'; export default { components: {}, data() { return { // 加载状态 loading: false, // 菜单权限加载状态 menuPermissionsLoading: false, // 角色列表数据 roleList: [], // 选中的角色ID selectedRoleIds: [], // 查询参数 queryParams: { endCreateTime: "", pageNum: 1, pageSize: 10, roleAble: "", roleName: "", startCreateTime: "" }, // 分页参数 currentPage: 1, pageSize: 10, total: 0, // 日期范围 dateRange: [], // Role Able列表 roleAbleList: [ { desc: 'YES', value: "YES" }, { desc: 'NO', value: "NO" } ], // 抽屉显示状态 drawerVisible: false, // 数据权限抽屉显示状态 dataPermissionDrawerVisible: false, // 是否编辑模式 isEdit: false, // 角色表单数据 roleForm: { id: '', code: '', roleName: '', rank: '', roleAble: 'YES', remark: '', // 权限细分存储 - 确保初始化为数组 permissions: { query: [], add: [], update: [], delete: [] }, dataScope: 'ALL', locationGroupIdList: [] }, // 数据权限表单数据 dataPermissionForm: { roleId: '', roleName: '', competence: '', dataPermissions: [] }, // 控制是否显示数据权限树形控件 showDataPermissionTree: false, // 菜单权限树形数据(从接口加载) menuPermissions: [], // 数据权限树形数据 dataPermissions: [ { id: 1, label: 'User Data', children: [ { id: 11, label: 'Basic Information' }, { id: 12, label: 'Contact Details' }, { id: 13, label: 'Activity Logs' } ] }, { id: 2, label: 'Content Data', children: [ { id: 21, label: 'Published Content' }, { id: 22, label: 'Draft Content' }, { id: 23, label: 'Archived Content' } ] } ], // 树形控件配置 defaultProps: { children: 'children', label: 'label' }, // 菜单权限树形控件配置 menuPermissionProps: { children: 'children', label: 'name' }, // 表单验证规则 rules: { code: [ { required: true, message: 'Please enter role code', trigger: 'blur' } ], roleName: [ { required: true, message: 'Please enter role name', trigger: 'blur' } ], rank: [ { required: true, message: 'Please enter rank', trigger: 'blur' }, { validator: (rule, value, callback) => { if (/^[0-9]+$/.test(value) || typeof value === 'number' && !isNaN(value)) { callback(); } else { callback(new Error('Rank must be a number')); } }, trigger: 'blur' } ], roleAble: [ { required: true, message: 'Please select role able', trigger: 'change' } ] } }; }, methods: { // 获取节点标签 getNodeLabel(data) { return data.label || data.name || data.path || `Node ${data.id}`; }, // 将扁平数据转换为树形结构 buildTree(data) { if (!Array.isArray(data)) { console.warn('Invalid data format for building tree:', data); return []; } const map = {}; const tree = []; data.forEach(item => { if (!item || typeof item !== 'object') { console.warn('Invalid item in tree data:', item); return; } // 确保每个节点都有完整的权限结构和权限码 const nodeData = { ...item, id: item.id || Date.now() + Math.random(), name: item.name || item.path || `Node ${item.id || Date.now()}`, permissions: { query: false, add: false, update: false, delete: false }, // 确保权限码字段存在,避免undefined queryPermissionCode: item.queryPermissionCode || item.queryCode || '', addPermissionCode: item.addPermissionCode || item.addCode || '', updatePermissionCode: item.updatePermissionCode || item.updateCode || '', deletePermissionCode: item.deletePermissionCode || item.deleteCode || '', children: item.children || [] }; map[nodeData.id] = nodeData; }); data.forEach(item => { if (!item || typeof item !== 'object') return; const node = map[item.id]; if (!node) return; const parentId = item.parentId !== undefined && item.parentId !== null ? item.parentId : 0; if (parentId === 0 || parentId === null || parentId === undefined) { tree.push(node); } else { const parentNode = map[parentId]; if (parentNode) { parentNode.children.push(node); } else { tree.push(node); } } }); return tree; }, // 级联选择所有子节点权限 cascadeSelectChildren(node, permissionType) { if (!node || !node.children || node.children.length === 0) { return; } node.children.forEach(child => { // 强制设置子节点权限状态 child.permissions[permissionType] = true; // 获取子节点权限码 const permissionCode = child[`${permissionType}PermissionCode`]; // 确保权限码有效且未被添加 if (permissionCode && permissionCode.trim() !== '') { // 检查是否已存在,不存在则添加 if (!this.roleForm.permissions[permissionType].includes(permissionCode)) { this.roleForm.permissions[permissionType].push(permissionCode); console.log(`Added child permission ${permissionType}: ${permissionCode}`); } } // 递归处理更深层级的子节点 this.cascadeSelectChildren(child, permissionType); }); }, // 级联取消所有子节点权限 cascadeDeselectChildren(node, permissionType) { if (!node || !node.children || node.children.length === 0) { return; } node.children.forEach(child => { // 强制取消子节点权限状态 child.permissions[permissionType] = false; // 获取子节点权限码 const permissionCode = child[`${permissionType}PermissionCode`]; // 从权限数组中移除 if (permissionCode && permissionCode.trim() !== '') { this.roleForm.permissions[permissionType] = this.roleForm.permissions[permissionType].filter( code => code !== permissionCode ); console.log(`Removed child permission ${permissionType}: ${permissionCode}`); } // 递归处理更深层级的子节点 this.cascadeDeselectChildren(child, permissionType); }); }, // 处理权限变化 - 核心修复方法 handlePermissionChange(node, permissionType, value) { // 直接使用传入的node对象,避免再次查找 if (!node) { console.warn('Node is undefined'); return; } // 更新节点的权限状态 node.permissions[permissionType] = value; // 获取当前节点的权限码 const permissionCode = node[`${permissionType}PermissionCode`]; console.log(`Processing ${permissionType} permission for node ${node.id}:`, { value, permissionCode, currentPermissions: [...this.roleForm.permissions[permissionType]] }); // 验证权限码是否有效 const isValidCode = permissionCode && typeof permissionCode === 'string' && permissionCode.trim() !== ''; if (value) { // 勾选状态:添加权限码 if (isValidCode) { // 确保权限码不存在才添加 if (!this.roleForm.permissions[permissionType].includes(permissionCode)) { this.roleForm.permissions[permissionType].push(permissionCode); console.log(`Added ${permissionType} permission: ${permissionCode}`); } } else { console.warn(`Invalid ${permissionType} permission code for node ${node.id}:`, permissionCode); } // 级联选择子节点(如果是一级菜单) if (node.level === 1) { this.cascadeSelectChildren(node, permissionType); } } else { // 取消勾选:移除权限码 if (isValidCode) { const initialLength = this.roleForm.permissions[permissionType].length; this.roleForm.permissions[permissionType] = this.roleForm.permissions[permissionType].filter( code => code !== permissionCode ); if (this.roleForm.permissions[permissionType].length < initialLength) { console.log(`Removed ${permissionType} permission: ${permissionCode}`); } } // 级联取消子节点(如果是一级菜单) if (node.level === 1) { this.cascadeDeselectChildren(node, permissionType); } } // 输出当前权限数组状态,用于调试 console.log(`Current ${permissionType} permissions:`, [...this.roleForm.permissions[permissionType]]); }, // 递归设置节点层级 setNodeLevels(nodes, level = 1) { nodes.forEach(node => { node.level = level; // 明确设置节点层级 if (node.children && node.children.length) { this.setNodeLevels(node.children, level + 1); } }); }, // 新增角色接口调用 systemroleinsert(roleData) { var _this = this; this.loading = true; // 设置请求头 objaxios.defaults.headers.common["Authorization"] = objstorage.get("userinfo").tokenHead + objstorage.get("userinfo").token; // 处理权限编码 const queryPermissions = roleData.permissions.query.filter(code => code && code.trim() !== ''); const addPermissions = roleData.permissions.add.filter(code => code && code.trim() !== ''); const updatePermissions = roleData.permissions.update.filter(code => code && code.trim() !== ''); const deletePermissions = roleData.permissions.delete.filter(code => code && code.trim() !== ''); // 拼接权限编码字符串 const queryPermissionCode = queryPermissions.join(','); const addPermissionCode = addPermissions.join(','); const updatePermissionCode = updatePermissions.join(','); const deletePermissionCode = deletePermissions.join(','); const applicationPermissionCodes = [...queryPermissions, ...addPermissions, ...updatePermissions, ...deletePermissions].join(','); console.log('Submitting permissions:', { queryPermissionCode, addPermissionCode, updatePermissionCode, deletePermissionCode }); // 构建请求参数 const requestData = { addPermissionCode: addPermissionCode, applicationPermissionCodes: applicationPermissionCodes, code: roleData.code, dataScope: roleData.dataScope || 'ALL', deletePermissionCode: deletePermissionCode, id: 0, locationGroupIdList: roleData.locationGroupIdList || [], queryPermissionCode: queryPermissionCode, rank: Number(roleData.rank) || 0, remark: roleData.remark || '', roleAble: roleData.roleAble || 'NO', roleName: roleData.roleName, updatePermissionCode: updatePermissionCode }; console.log("requestData") console.log(requestData) return objaxios .post(objurl.systemroleinsert, requestData) .then(function (res) { _this.loading = false; if (res.data.code === "200") { _this.$message.success('Role created successfully'); _this.drawerVisible = false; _this.getRoleList(); } else if (res.data.code === 2) { _this.$message.error(res.data.message); objstorage.remove("userinfo"); _this.$router.replace("/"); } else { _this.$message.error(res.data.message || 'Failed to create role'); } }) .catch(function (error) { _this.loading = false; console.error('Error creating role:', error); _this.$message.error('Network error, please try again later'); }); }, // 获取菜单权限列表 pagerouteall(){ var _this = this; this.menuPermissionsLoading = true; objaxios.defaults.headers.common["Authorization"] = objstorage.get("userinfo").tokenHead + objstorage.get("userinfo").token; objaxios .get(objurl.pagerouteall) .then(function (res) { _this.menuPermissionsLoading = false; if (res.data.code === "200") { _this.menuPermissions = _this.buildTree(res.data.data || []); // 设置节点层级 _this.setNodeLevels(_this.menuPermissions); console.log('Menu permissions loaded:', _this.menuPermissions); } else if (res.data.code === 2) { _this.$message.error(res.data.message); objstorage.remove("userinfo"); _this.$router.replace("/"); } else { _this.$message.error(res.data.message || 'Failed to load menu permissions'); _this.menuPermissions = []; } }) .catch(function (error) { _this.menuPermissionsLoading = false; console.error('Error fetching menu permissions:', error); _this.$message.error('Network error, please try again later'); _this.menuPermissions = []; }); }, // 调用接口获取角色列表 systemrolepage() { var _this = this; this.loading = true; objaxios.defaults.headers.common["Authorization"] = objstorage.get("userinfo").tokenHead + objstorage.get("userinfo").token; objaxios .post(objurl.systemrolepage, this.queryParams) .then(function (res) { _this.loading = false; if (res.data.code === "200") { _this.roleList = res.data.data.list || []; _this.total = parseInt(res.data.data.total) || 0; _this.currentPage = res.data.data.pageNum || 1; _this.pageSize = res.data.data.pageSize || 10; } else if (res.data.code === 2) { _this.$message.error(res.data.message); objstorage.remove("userinfo"); _this.$router.replace("/"); } else { _this.$message.error(res.data.message || 'Failed to load role list'); } }) .catch(function (error) { _this.loading = false; console.error('Error loading role list:', error); _this.$message.error('Network error, please try again later'); }); }, // 日期范围变化 handleDateChange() { this.queryParams.startCreateTime = this.dateRange && this.dateRange[0] ? this.dateRange[0] : ""; this.queryParams.endCreateTime = this.dateRange && this.dateRange[1] ? this.dateRange[1] : ""; }, // 查询角色列表 getRoleList() { this.systemrolepage(); }, // 搜索按钮操作 handleQuery() { this.queryParams.pageNum = 1; this.getRoleList(); }, // 重置按钮操作 resetQuery() { this.$refs.queryForm.resetFields(); this.dateRange = []; this.queryParams = { endCreateTime: "", pageNum: 1, pageSize: 10, roleAble: "", roleName: "", startCreateTime: "" }; this.getRoleList(); }, // 处理选择变化 handleSelectionChange(selection) { this.selectedRoleIds = selection.map(item => item.id); }, // 分页大小变化 handleSizeChange(val) { this.pageSize = val; this.queryParams.pageSize = val; this.queryParams.pageNum = 1; this.getRoleList(); }, // 当前页变化 handleCurrentChange(val) { this.currentPage = val; this.queryParams.pageNum = val; this.getRoleList(); }, // 添加角色 handleAdd() { if (this.menuPermissionsLoading) { this.$message.info('Permission data is loading, please wait...'); return; } this.isEdit = false; // 重置角色表单,确保权限数组为空数组 this.roleForm = { id: '', code: '', roleName: '', rank: '', roleAble: 'YES', remark: '', permissions: { query: [], add: [], update: [], delete: [] }, dataScope: 'ALL', locationGroupIdList: [] }; this.$nextTick(() => { if (this.menuPermissions.length) { this.resetPermissionTree(this.menuPermissions); } }); this.drawerVisible = true; }, // 重置权限树 resetPermissionTree(nodes) { nodes.forEach(node => { node.permissions = { query: false, add: false, update: false, delete: false }; if (node.children && node.children.length) { this.resetPermissionTree(node.children); } }); }, // 编辑角色 handleEdit(row) { this.isEdit = true; this.roleForm = { id: row.id, code: row.code || '', roleName: row.roleName || '', rank: row.rank || '', roleAble: row.roleAble || 'YES', remark: row.remark || '', permissions: { query: row.queryPermissionCode ? row.queryPermissionCode.split(',').filter(Boolean) : [], add: row.addPermissionCode ? row.addPermissionCode.split(',').filter(Boolean) : [], update: row.updatePermissionCode ? row.updatePermissionCode.split(',').filter(Boolean) : [], delete: row.deletePermissionCode ? row.deletePermissionCode.split(',').filter(Boolean) : [] }, dataScope: row.dataScope || 'ALL', locationGroupIdList: row.locationGroupIdList || [] }; this.$nextTick(() => { this.setPermissionTreeState(this.menuPermissions); }); this.drawerVisible = true; }, // 设置权限树状态 setPermissionTreeState(nodes) { nodes.forEach(node => { node.permissions.query = this.roleForm.permissions.query.includes(node.queryPermissionCode); node.permissions.add = this.roleForm.permissions.add.includes(node.addPermissionCode); node.permissions.update = this.roleForm.permissions.update.includes(node.updatePermissionCode); node.permissions.delete = this.roleForm.permissions.delete.includes(node.deletePermissionCode); if (node.children && node.children.length) { this.setPermissionTreeState(node.children); } }); }, // 查看角色详情 handleDetail(row) { const roleData = JSON.stringify(row); this.$router.push({ path: "/RoleDetails", query: { roleData: roleData } }); }, // 角色权限设置 handlePermission(row) { this.dataPermissionForm = { roleId: row.id, roleName: row.roleName || '', competence: this.getCompetenceValue(row.dataScopeValue), dataPermissions: row.dataPermissions || [] }; this.showDataPermissionTree = this.dataPermissionForm.competence === 'custom'; this.$nextTick(() => { if (this.$refs.dataPermissionTree && row.dataPermissions) { this.$refs.dataPermissionTree.setCheckedKeys(row.dataPermissions); } }); this.dataPermissionDrawerVisible = true; }, // 将数据范围值转换为对应的competence值 getCompetenceValue(dataScopeValue) { switch(dataScopeValue) { case 1: return 'all'; case 3: return 'personal'; default: return 'custom'; } }, // 处理权限范围变化 handleCompetenceChange(value) { this.showDataPermissionTree = value === 'custom'; if (value !== 'custom') { this.dataPermissionForm.dataPermissions = []; if (this.$refs.dataPermissionTree) { this.$refs.dataPermissionTree.setCheckedKeys([]); } } }, // 处理数据权限选择变化 handleDataPermissionCheckChange() { this.dataPermissionForm.dataPermissions = this.$refs.dataPermissionTree.getCheckedKeys(true); }, // 角色用户管理 handleUsers(row) { this.$router.push({ path: "/AssignUsers", query: { roleId: row.id, roleName: row.roleName } }); }, // 导出角色列表 handleExport() { this.$message.info('Export functionality would download role list here'); }, // 删除选中角色 handleDelete() { this.$confirm('Are you sure you want to delete the selected roles?', 'Warning', { confirmButtonText: 'OK', cancelButtonText: 'Cancel', type: 'warning' }).then(() => { this.roleList = this.roleList.filter(role => !this.selectedRoleIds.includes(role.id)); this.total = this.roleList.length; this.selectedRoleIds = []; this.$message.success('Deletion successful'); }).catch(() => { this.$message.info('Deletion cancelled'); }); }, // 提交角色表单 submitForm() { this.$refs.roleForm.validate((valid) => { if (valid) { console.log('Final permissions before submit:', { ...this.roleForm.permissions }); this.roleForm.rank = Number(this.roleForm.rank) || 0; if (this.isEdit) { const index = this.roleList.findIndex(role => role.id === this.roleForm.id); if (index !== -1) { this.roleList.splice(index, 1, { ...this.roleList[index], ...this.roleForm, queryPermissionCode: this.roleForm.permissions.query.filter(Boolean).join(','), addPermissionCode: this.roleForm.permissions.add.filter(Boolean).join(','), updatePermissionCode: this.roleForm.permissions.update.filter(Boolean).join(','), deletePermissionCode: this.roleForm.permissions.delete.filter(Boolean).join(',') }); this.$message.success('Update successful'); } this.drawerVisible = false; } else { this.systemroleinsert(this.roleForm); } } else { return false; } }); }, // 提交数据权限表单 submitDataPermission() { const index = this.roleList.findIndex(role => role.id === this.dataPermissionForm.roleId); if (index !== -1) { if (this.showDataPermissionTree) { this.dataPermissionForm.dataPermissions = this.$refs.dataPermissionTree.getCheckedKeys(true); } let dataScopeValue = 2; if (this.dataPermissionForm.competence === 'all') { dataScopeValue = 1; } else if (this.dataPermissionForm.competence === 'personal') { dataScopeValue = 3; } this.roleList[index] = { ...this.roleList[index], dataPermissions: this.dataPermissionForm.dataPermissions, competence: this.dataPermissionForm.competence, dataScopeValue, dataScopeDesc: this.getCompetenceDesc(dataScopeValue) }; this.$message.success('Data permissions updated successfully'); this.dataPermissionDrawerVisible = false; } }, // 获取权限范围描述 getCompetenceDesc(value) { switch(value) { case 1: return "所有部门"; case 3: return "本人部门"; default: return "自定义"; } } }, created() { this.getRoleList(); this.pagerouteall(); } }; </script> <style lang='stylus' rel='stylesheet/stylus'> /* 样式部分与之前保持一致 */ html, body { overflow-x: hidden; margin: 0; padding: 0; } .role_wrapper { flex: 1; width: 100%; min-width: 1100px; .conys { height: 100%; width: 100%; position: relative; padding: 15px; box-sizing: border-box; overflow-x: visible; } .search-container { width: 100%; overflow: visible; .search-form { display: flex; align-items: center; flex-wrap: nowrap; width: 100%; .el-form-item { margin-bottom: 0 !important; margin-right: 10px; display: flex; align-items: center; } .date-picker-item { min-width: 300px; } .button-group { margin-left: auto; margin-right: 0; } } } .operation-buttons { margin: 15px 0; display: flex; gap: 10px; flex-wrap: wrap; } .role-list { margin-top: 10px; width: 100%; overflow-x: visible; } .pagination-block { display: flex; justify-content: flex-end; margin-top: 15px; padding-right: 10px; } .custom-line { height: 2px; background: #ddd; width: 100%; margin: 15px 0; } .drawerContent { padding: 20px; height: 100%; box-sizing: border-box; position: relative; overflow-y: auto; overflow-x: hidden; } .drawerHeader { margin-bottom: 15px; padding-bottom: 8px; border-bottom: 1px solid #eee; span { font-size: 18px; font-weight: bold; } } .form-container { width: 100%; padding-right: 10px; box-sizing: border-box; } .form-row { margin-bottom: 12px; } .menu-permission-label { .el-form-item__label { float: none; display: inline-block; white-space: nowrap; padding-right: 0; margin-bottom: 5px; } .el-form-item__content { margin-left: 0 !important; } } .permission-legend { margin-left: 8px; .permission-item { margin-right: 12px; font-size: 11px; display: inline-flex; align-items: center; i { margin-right: 2px; } } } .no-wrap-label { .el-form-item__label { white-space: nowrap; width: auto !important; padding-right: 10px; } } .tree-row { margin-top: -15px; padding-left: 140px; box-sizing: border-box; } .tree-container { border: 1px solid #e4e7ed; border-radius: 4px; padding: 10px; max-height: 320px; overflow-y: auto; width: 100%; box-sizing: border-box; } .tree-node-content { display: flex; align-items: center; justify-content: space-between; width: 100%; padding: 6px 0; flex-wrap: wrap; } .tree-node-label { margin-right: 10px; vertical-align: middle; flex: 1; min-width: 150px; white-space: normal; word-wrap: break-word; padding-left: 5px; line-height: 1.5; } .level-1 { font-weight: bold; font-size: 15px; color: #303133; } .level-2 { font-weight: 500; font-size: 14px; color: #4E5969; } .level-3, .level-4 { font-size: 13px; color: #606266; } .permission-checkboxes { display: inline-block; vertical-align: middle; white-space: nowrap; min-width: 180px; .el-checkbox { margin-right: 8px; margin-bottom: 2px; font-size: 12px; i { margin-right: 2px; font-size: 12px; } } } .drawer-footer { position: absolute; bottom: 20px; right: 20px; display: flex; gap: 10px; .el-button { min-width: 80px; } } .debug-info { color: #666; padding: 10px; text-align: center; font-style: italic; border: 1px dashed #ccc; margin-bottom: 10px; } } .el-table { width: 100%; overflow-x: visible; } .el-date-editor--daterange { width: 100% !important; } .el-form-item__content { align-items: center; } .el-form-item__label { padding-right: 10px; width: 120px !important; } .el-form[label-width="140px"] .el-form-item__label { width: 140px !important; } .el-tree-node__content { height: auto !important; padding: 2px 0 !important; width: 100% !important; } .el-tree { width: 100% !important; overflow-x: hidden !important; } .el-tree-node { white-space: normal !important; } .el-drawer { overflow-x: hidden !important; } </style> 新增弹窗功能内,选中了权限(增删改查)。但是queryPermissionCode等都是空。给出修复后的全部代码。不要省略。以vue格式给出,不要html格式
最新发布
09-26
<template> <div> <el-dialog :title="`${openType === 'add' ? '新增' : '修改'}`" :visible.sync="dialogVisible" @close="resetDialog" :close-on-click-modal="false" > <el-form :model="form" :rules="rules" ref="form" label-width="50px" class="demo-form" > <el-form-item label="机构" prop="orgId"> <el-select v-model="form.orgId" placeholder="请选择" style="width: 100%" filterable clearable @change="selectOrg" > <el-option v-for="item in orgLists" :key="item.label" :disabled="!item.status" :label="item.name" :value="item.detailCode" ></el-option> </el-select> </el-form-item> <el-form-item label="主体" prop="subjectId"> <el-select v-model="form.subjectId" placeholder="请选择" style="width: 100%" filterable clearable @change="selectSub" > <el-option v-for="item in subjectList" :key="item.label" :disabled="!item.status" :label="item.remarks" :value="item.detailCode" ></el-option> </el-select> </el-form-item> <el-form-item prop="departId" label="部门"> <el-cascader style="width: 100%" clearable :props="{ multiple: true, value: 'id', checkStrictly: true,label: 'label',children: 'children', }" v-model="form.departId" :options="departmentOptions" filterable @change="handleDepartChange" ></el-cascader> </el-form-item> </el-form> <span slot="footer" class="dialog-footer"> <el-button @click="resetDialog">取 消</el-button> <el-button type="primary" @click="handleConfirm" :loading="btnLoading">保 存</el-button> </span> </el-dialog> </div> </template> <script> import { getRequireRule,deepClone } from "@/utils/util.js"; export default { name: "institutionalEntityDeptManage", data() { return { dialogVisible: false, dialogVisibleTree:false, btnLoading: false, multiple:true, openType: "add", injectData:{}, form: { orgId:'', orgName:'', subjectId:'', subjectName:'', departId:'', departName:'', }, orgLists:[], subjectList:[], rules: { ...getRequireRule({ orgId: "请选择机构", subjectId: "请选择主体", departId: "请选择部门", },['blur','change']), }, departmentOptions: [], depDepartmentOptions:[] } }, mounted(){ this.getDepartmentOptions() }, methods:{ // 获取部门列表 async getDepartmentOptions() { const data = await this.$Api.permissionApi.getAppointOrgTreeList(); if (data) { this.departmentOptions = data; this.depDepartmentOptions = deepClone(data); } }, // 部门联级选择器下拉事件 handleDepartChange(value) { this.form.departId = value; const getNamesFromIds = (idPaths, options) => { let names = []; const findItem = (id, arr) => { for (const item of arr) { if (item.id === id) { return item; } if (item.children && item.children.length) { const found = findItem(id, item.children); if (found) return found; } } return null; }; for (const path of idPaths) { // 获取路径中的最后一个ID(叶子节点) const lastId = path[path.length - 1]; const item = findItem(lastId, options); if (item?.label) { names.push(item.label); } } return names; } const names = getNamesFromIds(value, this.departmentOptions); // 根据names数组长度决定连接方式 if (names.length === 1) { this.form.departName = names[0]; // 单个部门直接显示 } else if (names.length > 1) { this.form.departName = names.join('/'); // 多个部门用斜杠连接 } else { this.form.departName = ''; // 空数组处理 } }, // 控制选项禁用 setOptionDisabled(nodePath, dataType) { if (!Array.isArray(nodePath)) return; let curNode = this[dataType]; const _depSet = (arr) => { if (!Array.isArray(arr)) return; arr.forEach((ele) => { ele.disabled = true; if (ele.children && ele.children.length) { _depSet(ele.children); } }); }; for (const iterator of nodePath) { const filter = curNode.filter((ele) => ele.id === iterator); //判断是否是路径id的最后一项,不是则把父级对应设置为disabled; if (iterator !== nodePath.slice(-1)[0]) { if (filter[0]) { filter[0].disabled = true; curNode = filter[0].children || []; } } else { // 如果是最后一项,则需要把子项也设置为disabled if (filter[0] && filter[0].children) { _depSet(filter[0].children); } } } this[dataType] = [...this[dataType]]; }, transformDepartId(departId) { // 如果输入是字符串 if (typeof departId === 'string') { // 先按逗号分割成数组 const idArray = departId.split(',').map(id => parseInt(id.trim())); // 处理特殊情况:只有一个ID的情况 if (idArray.length === 1) { return [idArray[0]]; } // 处理多个ID的情况 const result = []; let currentPath = []; for (const id of idArray) { if (id === idArray[0]) { // 第一个ID单独作为一个路径 result.push([id]); currentPath = [id]; } else { // 后续ID添加到当前路径 currentPath.push(id); result.push([...currentPath]); } } return result; } // 如果已经是数组格式,直接返回 if (Array.isArray(departId)) { return departId; } // 其他情况返回空数组 return []; }, handleOpen(injectData = {},data,openType) { this.dialogVisible = !this.dialogVisible; this.openType = openType; this.orgLists = data.orgList; this.subjectList = data.subjectList; this.injectData = injectData this.dialogVisibleTree = !this.dialogVisibleTree if (openType === "edit") { // 回显机构 this.form.orgId = String(injectData.orgId); this.form.orgName = injectData.orgName // 回显主体 this.form.subjectId = String(injectData.subjectId) this.form.subjectName = injectData.subjectName // 回显部门(注意:如果是多选,需要处理成数组) if (injectData.departId) { this.form.departId = this.transformDepartId(injectData.departId)//[[446],[446,536]]//injectData.departId.split(',').map(Number); this.form.departName = injectData.departName this.$nextTick(() => { setTimeout(() => { if (this.$refs.departmentSelectTree) { this.$refs.departmentSelectTree.updateSelectedNodesDisplay(this.form.departId); } }, 100); }); } } if (!this.dialogVisible) { this.resetDialog(); } }, resetDialog() { this.form = { orgId:'', orgName:'', subjectId:'', subjectName:'', departId:'', departName:'', } setTimeout(() => { this.$refs["form"].clearValidate(); this.dialogVisible = false; this.dialogVisibleTree = false }, 0); }, selectOrg(row){ let obj = {}; obj = this.orgLists.find((item)=>{ return item.detailCode === row; }); this.form.orgName = obj.name }, selectSub(row){ let obj = {}; obj = this.subjectList.find((item)=>{ return item.detailCode == row; }); this.form.subjectName = obj.remarks }, getName(row){ this.form.departName = row }, handleConfirm() { this.$refs["form"].validate(async (valid) => { if (valid) { let resultString = '' if(this.form.departId.length > 0) { const lastElements = this.form.departId.map(subArray => subArray[subArray.length - 1]); resultString = lastElements.join(','); } if(this.form.departId.length == 1) { resultString = this.form.departId.join(','); } const params = { orgId:this.form.orgId, orgName:this.form.orgName, subjectId:this.form.subjectId, subjectName:this.form.subjectName, departName:this.form.departName, departId:resultString, } // console.log('params',params) if (this.openType === "add") { const res = await this.$Api.systemApi.addInstitutionalEntityDeptl(params); if (res) { this.$message.success("新增成功"); this.resetDialog(); } } else { params.id = this.injectData.id; if(this.form.departId.length > 0) { params.departId = this.form.departId.join(','); } const res = await this.$Api.systemApi.editInstitutionalEntityDeptl(params); if (res) { this.$message.success("修改成功"); this.resetDialog(); } } this.$emit('getList') } else { console.log("error submit!!"); return false; } }) } } } </script> handleDepartChange点击时,把选中节点的父节点id和名字去掉
09-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值