fix: 1. 全局axios添加formData文件上传的检测,删除Content-Type让axios自动检测。
2. 完善入口模块管理的接口的对接。 3. 完善角色权限管理的接口对接和测试。 4. 完善主页的入口模块的图标的显示和图片的显示。
This commit is contained in:
@@ -50,7 +50,7 @@ export const meta = () => {
|
||||
function getDataScopeLabel(scope: string): string {
|
||||
const map: Record<string, string> = {
|
||||
'ALL': '全部数据',
|
||||
'DEPT': '部门数据',
|
||||
'DEPT': '地市级数据',
|
||||
'SELF': '仅本人数据'
|
||||
};
|
||||
return map[scope] || scope;
|
||||
@@ -314,13 +314,13 @@ function CreateRoleModal({ isOpen, onClose, onSuccess }: CreateRoleModalProps) {
|
||||
disabled={loading}
|
||||
>
|
||||
<option value="SELF">仅本人数据</option>
|
||||
<option value="DEPT">部门数据</option>
|
||||
<option value="DEPT">地市级数据</option>
|
||||
<option value="ALL">全部数据</option>
|
||||
</select>
|
||||
<span className="form-hint">控制该角色可访问的数据范围</span>
|
||||
</div>
|
||||
|
||||
<div className="form-group">
|
||||
{/* <div className="form-group">
|
||||
<label>优先级</label>
|
||||
<input
|
||||
type="number"
|
||||
@@ -333,7 +333,7 @@ function CreateRoleModal({ isOpen, onClose, onSuccess }: CreateRoleModalProps) {
|
||||
disabled={loading}
|
||||
/>
|
||||
<span className="form-hint">数字越小优先级越高,范围 1-100</span>
|
||||
</div>
|
||||
</div> */}
|
||||
</form>
|
||||
</Modal>
|
||||
);
|
||||
@@ -495,7 +495,7 @@ function EditRoleModal({ isOpen, onClose, onSuccess, role }: EditRoleModalProps)
|
||||
disabled={loading || (role.is_system_role && role.role_key === 'provincial_admin')}
|
||||
>
|
||||
<option value="SELF">仅本人数据</option>
|
||||
<option value="DEPT">部门数据</option>
|
||||
<option value="DEPT">地市级数据</option>
|
||||
<option value="ALL">全部数据</option>
|
||||
</select>
|
||||
{role.is_system_role && role.role_key === 'provincial_admin' && (
|
||||
@@ -503,7 +503,7 @@ function EditRoleModal({ isOpen, onClose, onSuccess, role }: EditRoleModalProps)
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div className="form-group">
|
||||
{/* <div className="form-group">
|
||||
<label>优先级</label>
|
||||
<input
|
||||
type="number"
|
||||
@@ -516,7 +516,7 @@ function EditRoleModal({ isOpen, onClose, onSuccess, role }: EditRoleModalProps)
|
||||
disabled={loading}
|
||||
/>
|
||||
<span className="form-hint">数字越小优先级越高,范围 1-100</span>
|
||||
</div>
|
||||
</div> */}
|
||||
</form>
|
||||
</Modal>
|
||||
);
|
||||
@@ -632,8 +632,19 @@ function AssignUserModal({ isOpen, onClose, onSuccess, role, isCityAdmin, curren
|
||||
assignUserRoles(userId, [role.id])
|
||||
);
|
||||
|
||||
await Promise.all(promises);
|
||||
const results = await Promise.all(promises);
|
||||
|
||||
// v3.4: 检查是否有失败的
|
||||
const failedResults = results.filter(r => !r.success);
|
||||
if (failedResults.length > 0) {
|
||||
// 如果有失败的,显示第一个错误消息
|
||||
const firstError = failedResults[0];
|
||||
toastService.error(firstError.message);
|
||||
setLoading(false);
|
||||
return;
|
||||
}
|
||||
|
||||
// 全部成功
|
||||
toastService.success(`成功为 ${selectedUserIds.length} 个用户分配角色`);
|
||||
resetState();
|
||||
onSuccess();
|
||||
@@ -733,7 +744,7 @@ function AssignUserModal({ isOpen, onClose, onSuccess, role, isCityAdmin, curren
|
||||
<span>加载用户中...</span>
|
||||
</div>
|
||||
) : (
|
||||
<div className="users-checkbox-list">
|
||||
<div className="users-checkbox-list" style={{ maxHeight: '400px', minHeight: '400px', overflow: 'auto' }}>
|
||||
{filteredUsers.length > 0 ? (
|
||||
filteredUsers.map(user => {
|
||||
const userRoles = userRolesMap.get(user.id) || [];
|
||||
@@ -778,6 +789,7 @@ function AssignUserModal({ isOpen, onClose, onSuccess, role, isCityAdmin, curren
|
||||
</div>
|
||||
<div className="user-meta">
|
||||
@{user.username} • {user.ou_name}
|
||||
{user.area && ` • ${user.area}`}
|
||||
{user.phone_number && ` • ${user.phone_number}`}
|
||||
</div>
|
||||
</div>
|
||||
@@ -900,18 +912,19 @@ export default function RolePermissions() {
|
||||
const filteredRoles = rolesData;
|
||||
|
||||
// v3.3: 根据用户地区过滤可见的用户列表
|
||||
let filteredUsers = usersData;
|
||||
if (isCityAdmin && currentUserArea) {
|
||||
// 市级管理员只能看到同地区的用户(使用 area 字段)
|
||||
filteredUsers = usersData.filter(user =>
|
||||
user.area === currentUserArea
|
||||
);
|
||||
console.log('🔒 [RolePermissions v3.3] 市级管理员用户过滤:', {
|
||||
当前地区: currentUserArea,
|
||||
原始用户数: usersData.length,
|
||||
过滤后用户数: filteredUsers.length
|
||||
});
|
||||
}
|
||||
const filteredUsers = usersData;
|
||||
// let filteredUsers = usersData;
|
||||
// if (isCityAdmin && currentUserArea) {
|
||||
// // 市级管理员只能看到同地区的用户(使用 area 字段)
|
||||
// filteredUsers = usersData.filter(user =>
|
||||
// user.area === currentUserArea
|
||||
// );
|
||||
// console.log('🔒 [RolePermissions v3.3] 市级管理员用户过滤:', {
|
||||
// 当前地区: currentUserArea,
|
||||
// 原始用户数: usersData.length,
|
||||
// 过滤后用户数: filteredUsers.length
|
||||
// });
|
||||
// }
|
||||
|
||||
setRoles(filteredRoles);
|
||||
setRoutes(routesData);
|
||||
@@ -1507,10 +1520,10 @@ export default function RolePermissions() {
|
||||
<i className="ri-database-line"></i>
|
||||
{getDataScopeLabel(role.data_scope)}
|
||||
</span>
|
||||
<span className="priority">
|
||||
{/* <span className="priority">
|
||||
<i className="ri-sort-asc"></i>
|
||||
优先级: {role.priority}
|
||||
</span>
|
||||
</span> */}
|
||||
</div>
|
||||
</div>
|
||||
{!role.is_system_role && (
|
||||
@@ -1635,7 +1648,11 @@ export default function RolePermissions() {
|
||||
)}
|
||||
</div>
|
||||
<div className="user-username">@{user.username}</div>
|
||||
<div className="user-org">{user.ou_name}</div>
|
||||
<div className="user-org">
|
||||
{/* {JSON.stringify(user)} */}
|
||||
{user.ou_name}
|
||||
{user.area && <span style={{ marginLeft: '8px', color: '#666' }}>• {user.area}</span>}
|
||||
</div>
|
||||
<div className="user-contact">
|
||||
{user.phone_number && (
|
||||
<span>
|
||||
|
||||
Reference in New Issue
Block a user