|
|
@ -588,15 +588,15 @@ const permissionEdit = async function () { |
|
|
|
}); |
|
|
|
}); |
|
|
|
await ElMessageBox.confirm( |
|
|
|
`确认修改权限角色?<br>您正在将【${userName}】的权限角色从【${oldRole}】修改为【${newRole}】<br>变更后,该用户的可操作权限将同步更新为新角色配置,涉及数据访问、功能操作等权限变化,请谨慎确认。`, |
|
|
|
'警告', |
|
|
|
{ |
|
|
|
confirmButtonText: '确认', |
|
|
|
cancelButtonText: '取消', |
|
|
|
type: "warning", |
|
|
|
lockScroll: false, |
|
|
|
dangerouslyUseHTMLString: true //允许解析 HTML 标签 |
|
|
|
} |
|
|
|
`确认修改权限角色?<br>您正在将【${userName}】的权限角色从【${oldRole}】修改为【${newRole}】<br>变更后,该用户的可操作权限将同步更新为新角色配置,涉及数据访问、功能操作等权限变化,请谨慎确认。`, |
|
|
|
'警告', |
|
|
|
{ |
|
|
|
confirmButtonText: '确认', |
|
|
|
cancelButtonText: '取消', |
|
|
|
type: "warning", |
|
|
|
lockScroll: false, |
|
|
|
dangerouslyUseHTMLString: true //允许解析 HTML 标签 |
|
|
|
} |
|
|
|
) |
|
|
|
const result = await request({ |
|
|
|
url: '/permission/updateAdmin', |
|
|
@ -615,12 +615,12 @@ const permissionEdit = async function () { |
|
|
|
console.log('编辑最后提交数据', permissionEditObj.value); |
|
|
|
if (result.code == 200) { |
|
|
|
await ElMessageBox.alert( |
|
|
|
`用户${userName}的权限角色已更改为【${newRole}】`, |
|
|
|
'成功', |
|
|
|
{ |
|
|
|
confirmButtonText: '确定', |
|
|
|
type: 'success' // 设置为 success 类型 |
|
|
|
} |
|
|
|
`用户${userName}的权限角色已更改为【${newRole}】`, |
|
|
|
'成功', |
|
|
|
{ |
|
|
|
confirmButtonText: '确定', |
|
|
|
type: 'success' // 设置为 success 类型 |
|
|
|
} |
|
|
|
); |
|
|
|
get(); |
|
|
|
closeUserEditVisible(); |
|
|
@ -696,10 +696,10 @@ const handleAddRole = async function () { |
|
|
|
}); |
|
|
|
addRole.value.roleName = addRole.value.roleName.replace(/\s+/g, ''); |
|
|
|
console.log('去除角色名空格:', addRole.value.roleName); |
|
|
|
|
|
|
|
|
|
|
|
// 确保提交时包含所有选中的权限ID(包括父节点) |
|
|
|
const finalCheckedKeys = addRole.value.checkedKeys || []; |
|
|
|
|
|
|
|
|
|
|
|
const res = await API({ |
|
|
|
url: '/role/add', |
|
|
|
data: { |
|
|
@ -740,7 +740,7 @@ const editStatus = async function (row) { |
|
|
|
}) |
|
|
|
console.log('请求成功2', result) |
|
|
|
ElMessage.success( |
|
|
|
permissionEditObj.value.adminStatus == 1 ? '启用成功' : '禁用成功' |
|
|
|
permissionEditObj.value.adminStatus == 1 ? '启用成功' : '禁用成功' |
|
|
|
) |
|
|
|
permissionEditObj.value = {} |
|
|
|
get() |
|
|
@ -865,7 +865,7 @@ const handleEditRolePermissionCheck = (checkedNodes, checkedInfo) => { |
|
|
|
// 由于设置了 check-strictly="false",Element Plus 会自动处理父子节点联动 |
|
|
|
// 我们只需要使用 checkedKeys,它已经包含了所有必要的节点ID |
|
|
|
permissionEditRoleObj.value.checkedKeys = checkedKeys; |
|
|
|
|
|
|
|
|
|
|
|
console.log('编辑角色选中的权限ID:', checkedKeys); |
|
|
|
console.log('选中的节点数量:', allCheckedNodes.length); |
|
|
|
}; |
|
|
@ -1056,7 +1056,7 @@ const permissionEditRoleInit = async function (row) { |
|
|
|
}); |
|
|
|
data.value = res.data; |
|
|
|
data.value = data.value.filter(item => item.id !== 9); |
|
|
|
|
|
|
|
|
|
|
|
// 收集当前行权限树的叶子节点id(只收集实际选中的叶子节点) |
|
|
|
if (row.tree && row.tree.length > 0) { |
|
|
|
const leafIds = collectIds2(row.tree); |
|
|
@ -1072,9 +1072,9 @@ const permissionEditRoleInit = async function (row) { |
|
|
|
} |
|
|
|
console.log('编辑角色', permissionEditRoleObj.value); |
|
|
|
permissionEditRoleVisible.value = true; |
|
|
|
|
|
|
|
|
|
|
|
// 等待DOM更新后手动设置树的选中状态 |
|
|
|
await nextTick(); |
|
|
|
await nextTick(); |
|
|
|
if (treeRef.value && permissionEditRoleObj.value.checkedKeys.length > 0) { |
|
|
|
treeRef.value.setCheckedKeys(permissionEditRoleObj.value.checkedKeys); |
|
|
|
console.log('手动设置树的选中状态:', permissionEditRoleObj.value.checkedKeys); |
|
|
@ -1096,13 +1096,13 @@ const permissionEditRole = async function () { |
|
|
|
|
|
|
|
// 确保提交时包含所有选中的权限ID(包括父节点) |
|
|
|
let finalCheckedKeys = permissionEditRoleObj.value.checkedKeys || []; |
|
|
|
|
|
|
|
|
|
|
|
// 为所有选中的节点添加其父节点ID |
|
|
|
const allKeys = new Set(finalCheckedKeys); |
|
|
|
finalCheckedKeys.forEach(nodeId => { |
|
|
|
selectParentNodesForSubmit(data.value, nodeId, allKeys); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
finalCheckedKeys = Array.from(allKeys); |
|
|
|
|
|
|
|
const res = await API({ |
|
|
@ -1231,7 +1231,7 @@ onMounted(async function () { |
|
|
|
用户管理 |
|
|
|
</el-button> |
|
|
|
<el-button v-if="viewRole.includes(30)" :type="checkTab === 'role' ? 'primary' : 'default'" |
|
|
|
@click="checkTab = 'role'"> |
|
|
|
@click="checkTab = 'role'"> |
|
|
|
角色管理 |
|
|
|
</el-button> |
|
|
|
</el-button-group> |
|
|
@ -1281,8 +1281,8 @@ onMounted(async function () { |
|
|
|
<el-table-column type="index" label="序号" width="100px" fixed="left"> |
|
|
|
<template #default="scope"> |
|
|
|
<span>{{ |
|
|
|
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize |
|
|
|
}}</span> |
|
|
|
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize |
|
|
|
}}</span> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
|
|
|
@ -1299,13 +1299,13 @@ onMounted(async function () { |
|
|
|
重置密码 |
|
|
|
</el-button> |
|
|
|
<el-button type="primary" text @click="permissionEditInit(scope.row)" |
|
|
|
:disabled="scope.row.adminStatus === 0 || scope.row.account === adminData.account"> |
|
|
|
:disabled="scope.row.adminStatus === 0 || scope.row.account === adminData.account"> |
|
|
|
修改权限 |
|
|
|
</el-button> |
|
|
|
<el-popconfirm title="确定将此用户删除吗?" @confirm="delConfirm"> |
|
|
|
<template #reference> |
|
|
|
<el-button type="danger" text @click="del(scope.row)" |
|
|
|
:disabled="scope.row.adminStatus === 0 || scope.row.account === adminData.account"> |
|
|
|
:disabled="scope.row.adminStatus === 0 || scope.row.account === adminData.account"> |
|
|
|
删除 |
|
|
|
</el-button> |
|
|
|
</template> |
|
|
@ -1321,7 +1321,7 @@ onMounted(async function () { |
|
|
|
<el-table-column prop="adminStatus" label="状态"> |
|
|
|
<template #default="scope"> |
|
|
|
<el-switch v-model="scope.row.adminStatus" :active-value="1" :inactive-value="0" size="large" |
|
|
|
:disabled="scope.row.account === adminData.account" @change="editStatus(scope.row)" style=" |
|
|
|
:disabled="scope.row.account === adminData.account" @change="editStatus(scope.row)" style=" |
|
|
|
--el-switch-on-color: #13ce66; |
|
|
|
--el-switch-off-color: #ff4949; |
|
|
|
" active-text="启用" inactive-text="禁用" inline-prompt /> |
|
|
@ -1333,8 +1333,8 @@ onMounted(async function () { |
|
|
|
<!-- 分页 --> |
|
|
|
<div class="pagination" style="margin-top: 20px"> |
|
|
|
<el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]" |
|
|
|
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange" |
|
|
|
@current-change="handleCurrentChange"></el-pagination> |
|
|
|
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange" |
|
|
|
@current-change="handleCurrentChange"></el-pagination> |
|
|
|
</div> |
|
|
|
</el-card> |
|
|
|
</el-col> |
|
|
@ -1363,8 +1363,8 @@ onMounted(async function () { |
|
|
|
<el-table-column type="index" label="序号" width="100px" fixed="left"> |
|
|
|
<template #default="scope"> |
|
|
|
<span>{{ |
|
|
|
scope.$index + 1 + (getRoleObj.pageNum - 1) * getRoleObj.pageSize |
|
|
|
}}</span> |
|
|
|
scope.$index + 1 + (getRoleObj.pageNum - 1) * getRoleObj.pageSize |
|
|
|
}}</span> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
|
|
|
@ -1378,24 +1378,6 @@ onMounted(async function () { |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
<!-- <el-table-column prop="operation" label="操作" width="200px"> |
|
|
|
<template #default="scope"> |
|
|
|
<el-popconfirm title="确定将此角色删除吗?" @confirm="delRoleConfirm"> |
|
|
|
<template #reference> |
|
|
|
<el-button type="danger" text @click="delRole(scope.row)" |
|
|
|
:disabled="scope.row.id === 1 || scope.row.id === 2"> |
|
|
|
删除 |
|
|
|
</el-button> |
|
|
|
</template> |
|
|
|
<template #actions="{ confirm, cancel }"> |
|
|
|
<el-button size="small" @click="cancel">取消</el-button> |
|
|
|
<el-button type="primary" size="small" @click="confirm"> |
|
|
|
确定 |
|
|
|
</el-button> |
|
|
|
</template> |
|
|
|
</el-popconfirm> |
|
|
|
</template> |
|
|
|
</el-table-column> --> |
|
|
|
<el-table-column prop="operation" label="操作" width="200px"> |
|
|
|
<template #default="scope"> |
|
|
|
<el-button type="warning" text @click="permissionEditRoleInit(scope.row)" :disabled="scope.row.id === 2"> |
|
|
@ -1409,16 +1391,16 @@ onMounted(async function () { |
|
|
|
<!-- 分页 --> |
|
|
|
<div class="pagination" style="margin-top: 20px"> |
|
|
|
<el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]" |
|
|
|
layout="total, sizes, prev, pager, next, jumper" :total="roleTotal" @size-change="handleRolePageSizeChange" |
|
|
|
@current-change="handleRoleCurrentChange"></el-pagination> |
|
|
|
layout="total, sizes, prev, pager, next, jumper" :total="roleTotal" @size-change="handleRolePageSizeChange" |
|
|
|
@current-change="handleRoleCurrentChange"></el-pagination> |
|
|
|
</div> |
|
|
|
</el-card> |
|
|
|
</div> |
|
|
|
<!-- 角色菜单树展示 --> |
|
|
|
<el-dialog v-model="menuTreeVisible" :title='`权限详情:${currentRoleName}`' width="600px"> |
|
|
|
<el-tree :data="currentRoleMenuTree" node-key="id" :props="{ label: 'menuName', children: 'children' }" |
|
|
|
show-checkbox check-strictly :expand-on-click-node="false" |
|
|
|
:default-expanded-keys="currentRoleMenuTree.map(item => item.id)" :default-checked-keys="Rolecheckedkeys" /> |
|
|
|
show-checkbox check-strictly :expand-on-click-node="false" |
|
|
|
:default-expanded-keys="currentRoleMenuTree.map(item => item.id)" :default-checked-keys="Rolecheckedkeys" /> |
|
|
|
<template #footer> |
|
|
|
<el-button @click="menuTreeVisible = false" type="primary">关闭</el-button> |
|
|
|
</template> |
|
|
@ -1429,7 +1411,7 @@ onMounted(async function () { |
|
|
|
<!-- 居中显示 --> |
|
|
|
|
|
|
|
<el-form ref="Ref" :rules="addUserRules" :model="addAdmin" label-width="auto" |
|
|
|
style="max-width: 600px; align-items: center"> |
|
|
|
style="max-width: 600px; align-items: center"> |
|
|
|
<el-form-item prop="account" label="OA号:" required clearable> |
|
|
|
<el-input v-model="addAdmin.account" placeholder="请输入OA号" style="width: 220px" /> |
|
|
|
</el-form-item> |
|
|
@ -1440,14 +1422,14 @@ onMounted(async function () { |
|
|
|
|
|
|
|
<el-form-item prop="market" label="所属地区:" required clearable> |
|
|
|
<el-select multiple v-model="addAdmin.market" placeholder="请选择所属地区" style="width: 220px" clearable |
|
|
|
@change="handleMarketChange"> |
|
|
|
@change="handleMarketChange"> |
|
|
|
<el-option v-for="item in market" :key="item" :label="item" :value="item" :disabled="includeHq(item)" /> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="permission" label="角色名称:" required> |
|
|
|
<el-select v-model="addAdmin.permission" placeholder="请选择角色名称" style="width: 220px" clearable> |
|
|
|
<el-option v-for="item in permissionList" :key="item.value" :label="item.label" |
|
|
|
:value="item.value"></el-option> |
|
|
|
:value="item.value"></el-option> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="postiton" label="职位:" required> |
|
|
@ -1458,14 +1440,14 @@ onMounted(async function () { |
|
|
|
<!-- 动态添加的机器码输入框 --> |
|
|
|
<div v-for="(item, index) in addAdmin.machineIds" :key="index" style="margin-left: 10px;"> |
|
|
|
<el-input v-model="addAdmin.machineIds[index]" placeholder="请输入机器码" |
|
|
|
style="width: 180px; margin-right: 10px;" /> |
|
|
|
style="width: 180px; margin-right: 10px;" /> |
|
|
|
</div> |
|
|
|
<el-button type="primary" @click="addMachineIdInput">添加</el-button> |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="remark" label="备注"> |
|
|
|
<el-input v-model="addAdmin.remark" style="width: 300px" :rows="2" maxlength="100" show-word-limit |
|
|
|
type="textarea" /> |
|
|
|
type="textarea" /> |
|
|
|
</el-form-item> |
|
|
|
</el-form> |
|
|
|
|
|
|
@ -1481,7 +1463,7 @@ onMounted(async function () { |
|
|
|
<!-- 这是编辑用户权限弹窗 --> |
|
|
|
<el-dialog v-model="userEditVisible" title="编辑用户权限" width="800px" :close-on-click-modal="false"> |
|
|
|
<el-form ref="Ref" :rules="editAdminRules" :model="permissionEditObj" label-width="auto" |
|
|
|
style="max-width: 600px; align-items: center"> |
|
|
|
style="max-width: 600px; align-items: center"> |
|
|
|
<el-form-item prop="account" label="用户账号:" clearable> |
|
|
|
<el-input v-model="permissionEditObj.account" placeholder="请输入OA号" style="width: 220px" disabled /> |
|
|
|
</el-form-item> |
|
|
@ -1490,7 +1472,7 @@ onMounted(async function () { |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="market" label="所属地区:" clearable> |
|
|
|
<el-select multiple v-model="permissionEditObj.market" placeholder="请选择所属地区" style="width: 220px" clearable |
|
|
|
@change="EdithandleMarketChange"> |
|
|
|
@change="EdithandleMarketChange"> |
|
|
|
<el-option v-for="item in market" :key="item" :label="item" :value="item" :disabled="EditincludeHq(item)" /> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
@ -1500,20 +1482,20 @@ onMounted(async function () { |
|
|
|
<el-form-item prop="roleName" label="角色名称:"> |
|
|
|
<el-select v-model="permissionEditObj.roleId" placeholder="请选择角色" style="width: 220px" @change="getUserLists"> |
|
|
|
<el-option v-for="item in permissionList" :key="item.value" :label="item.label" |
|
|
|
:value="item.value"></el-option> |
|
|
|
:value="item.value"></el-option> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="parentName" label="上级角色:"> |
|
|
|
<el-select v-model="permissionEditObj.parentId" placeholder="无上级角色" :disabled="!!parentRoleTip" |
|
|
|
style="width: 220px"> |
|
|
|
style="width: 220px"> |
|
|
|
<el-option v-if="parentRoleTip" :key="0" :label="parentRoleTip" :value="null" disabled /> |
|
|
|
<el-option v-else v-for="item in permissionList" :key="item.value" :label="item.label" disabled |
|
|
|
:value="item.value"></el-option> |
|
|
|
:value="item.value"></el-option> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="permissionSelect" label="权限列表:"> |
|
|
|
<el-tree v-if="data.length > 0" :data="data" :disabled="true" show-checkbox node-key="id" |
|
|
|
:props="{ label: 'menuName', children: 'children' }" :default-checked-keys="permissionEditObj.checkedKeys"> |
|
|
|
:props="{ label: 'menuName', children: 'children' }" :default-checked-keys="permissionEditObj.checkedKeys"> |
|
|
|
</el-tree> |
|
|
|
<div v-else style="display: flex; align-items: center; gap: 8px;"> |
|
|
|
<span style="color: #999;">暂无数据</span> |
|
|
@ -1524,7 +1506,7 @@ onMounted(async function () { |
|
|
|
<!-- 动态添加的机器码输入框 --> |
|
|
|
<div v-for="(item, index) in permissionEditObj.machineIds" :key="index" style="margin-left: 10px;"> |
|
|
|
<el-input v-model="permissionEditObj.machineIds[index]" placeholder="" |
|
|
|
style="width: 180px; margin-right: 10px;" /> |
|
|
|
style="width: 180px; margin-right: 10px;" /> |
|
|
|
</div> |
|
|
|
<el-button type="primary" @click="UseraddMachineIdInput">添加</el-button> |
|
|
|
</div> |
|
|
@ -1546,14 +1528,14 @@ onMounted(async function () { |
|
|
|
<el-dialog v-model="permissionAddVisible" title="新增角色" width="800px" :close-on-click-modal="false"> |
|
|
|
<template #footer> |
|
|
|
<el-form ref="Ref" :rules="Rolerules" :model="addRole" label-width="auto" |
|
|
|
style="max-width: 600px; align-items: center"> |
|
|
|
style="max-width: 600px; align-items: center"> |
|
|
|
<el-form-item prop="roleName" label="角色名称:" required> |
|
|
|
<el-input v-model="addRole.roleName" placeholder="请输入用户名" style="width: 220px" /> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="parentName" label="上级角色:"> |
|
|
|
<el-select v-model="addRole.parentId" placeholder="请选择上级角色" style="width: 220px" @change="getLists" clearable> |
|
|
|
<el-option v-for="item in permissionList" :key="item.value" :label="item.label" |
|
|
|
:value="item.value"></el-option> |
|
|
|
:value="item.value"></el-option> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="market" label="所属地区:" required> |
|
|
@ -1563,9 +1545,9 @@ onMounted(async function () { |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="checkedKeys" label="权限列表:" required> |
|
|
|
<el-tree v-if="data.length > 0" :data="data" show-checkbox node-key="id" |
|
|
|
:props="{ label: 'menuName', children: 'children' }" :checked-keys="addRole.checkedKeys" |
|
|
|
:check-strictly="false" |
|
|
|
@check="handleCheckChange"> |
|
|
|
:props="{ label: 'menuName', children: 'children' }" :checked-keys="addRole.checkedKeys" |
|
|
|
:check-strictly="false" |
|
|
|
@check="handleCheckChange"> |
|
|
|
<template #default="{ node, data }"> |
|
|
|
<span>{{ node.label }}</span> |
|
|
|
</template> |
|
|
@ -1589,7 +1571,7 @@ onMounted(async function () { |
|
|
|
</el-dialog> |
|
|
|
<!-- 重置密码确认弹窗 --> |
|
|
|
<el-dialog v-model="resetConfirmVisible" width="500px" :close-on-click-modal="false" |
|
|
|
:before-close="cancelResetPassword"> |
|
|
|
:before-close="cancelResetPassword"> |
|
|
|
<el-row> |
|
|
|
<el-col :span="4" style="margin-top: 20px"> |
|
|
|
<el-icon class="dialog-icon" color="#10AEFF" size="50"> |
|
|
@ -1615,14 +1597,14 @@ onMounted(async function () { |
|
|
|
<el-dialog v-model="permissionEditRoleVisible" title="编辑角色" width="800px" :close-on-click-modal="false"> |
|
|
|
<template #footer> |
|
|
|
<el-form ref="Ref" :rules="Rolerules" :model="permissionEditRoleObj" label-width="auto" |
|
|
|
style="max-width: 600px; align-items: center"> |
|
|
|
style="max-width: 600px; align-items: center"> |
|
|
|
<el-form-item prop="roleName" label="角色名称:" required> |
|
|
|
<el-input v-model="permissionEditRoleObj.roleName" placeholder="请输入角色名称" style="width: 220px" /> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="parentName" label="上级角色:"> |
|
|
|
<el-input v-model="permissionEditRoleObj.parentName" placeholder="无上级角色" disabled style="width: 220px"> |
|
|
|
<el-option v-for="item in permissionList" :key="item.value" :label="item.label" |
|
|
|
:value="item.value"></el-option> |
|
|
|
:value="item.value"></el-option> |
|
|
|
</el-input> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="market" label="地区" required> |
|
|
@ -1630,10 +1612,10 @@ onMounted(async function () { |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="checkedKeys" label="权限列表:" required> |
|
|
|
<el-tree v-if="data.length > 0" :data="data" show-checkbox node-key="id" ref="treeRef" |
|
|
|
:props="{ label: 'menuName', children: 'children' }" |
|
|
|
:default-checked-keys="permissionEditRoleObj.checkedKeys" |
|
|
|
:check-strictly="false" |
|
|
|
@check="handleEditRolePermissionCheck"> |
|
|
|
:props="{ label: 'menuName', children: 'children' }" |
|
|
|
:default-checked-keys="permissionEditRoleObj.checkedKeys" |
|
|
|
:check-strictly="false" |
|
|
|
@check="handleEditRolePermissionCheck"> |
|
|
|
<template #default="{ node, data }"> |
|
|
|
<span>{{ node.label }}</span> |
|
|
|
</template> |
|
|
|