新增部门子级查询功能,更新相关API接口和前端组件,优化部门树形结构展示,支持父子部门关系的处理

This commit is contained in:
Chuck1sn
2025-06-19 15:29:22 +08:00
parent fa580a5dd4
commit ea86342a0f
12 changed files with 749 additions and 162 deletions

View File

@@ -3,13 +3,17 @@ import { http, HttpResponse } from "msw";
export default [
http.get("/department/page-query", () => {
const generateDepartment = () => ({
id: faker.number.int({ min: 1, max: 100 }),
name: faker.company.name(),
parentId: faker.number.int({ min: 1, max: 100 }),
isBound: faker.datatype.boolean(),
parentName: faker.company.name(),
});
const generateDepartment = () => {
// 20% 的概率生成 parentId 为 null 的数据
const hasParent = faker.datatype.boolean(0.8);
return {
id: faker.number.int({ min: 1, max: 100 }),
name: faker.company.name(),
parentId: hasParent ? faker.number.int({ min: 1, max: 100 }) : null,
isBound: faker.datatype.boolean(),
parentName: hasParent ? faker.company.name() : null,
};
};
const mockData = {
data: faker.helpers.multiple(generateDepartment, { count: 10 }),
total: 30,
@@ -17,21 +21,41 @@ export default [
return HttpResponse.json(mockData);
}),
http.get("/department/query-available", () => {
const generateDepartment = () => ({
id: faker.number.int({ min: 1, max: 30 }),
name: faker.company.name(),
parentId: faker.number.int({ min: 1, max: 30 }),
parentName: faker.company.name(),
});
const generateDepartment = () => {
// 20% 的概率生成 parentId 为 null 的数据
const hasParent = faker.datatype.boolean(0.8);
return {
id: faker.number.int({ min: 1, max: 30 }),
name: faker.company.name(),
parentId: hasParent ? faker.number.int({ min: 1, max: 30 }) : null,
parentName: hasParent ? faker.company.name() : null,
};
};
const mockData = faker.helpers.multiple(generateDepartment, { count: 30 });
return HttpResponse.json(mockData);
}),
http.post("/department", () => {
console.log("Captured department upsert");
return HttpResponse.json();
}),
http.get("/department/query-sub", ({ request }) => {
const generateDepartment = () => {
// 20% 的概率生成 parentId 为 null 的数据
const hasParent = faker.datatype.boolean(0.8);
return {
id: faker.number.int({ min: 1, max: 30 }),
name: faker.company.name(),
parentId: hasParent ? faker.number.int({ min: 1, max: 30 }) : null,
parentName: hasParent ? faker.company.name() : null,
};
};
const mockData = faker.helpers.multiple(generateDepartment, {
count: 30,
});
return HttpResponse.json(mockData);
}),
http.delete("/department", () => {
console.log("Captured department delete");
return HttpResponse.json();

View File

@@ -1077,6 +1077,40 @@
}
}
},
"/department/query-sub": {
"get": {
"tags": [
"department-controller"
],
"operationId": "querySubDepartment",
"parameters": [
{
"name": "id",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"format": "int64"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/DepartmentWithParentDto"
}
}
}
}
}
}
}
},
"/department/query-available": {
"get": {
"tags": [
@@ -1977,6 +2011,35 @@
}
}
},
"DepartmentWithParentDto": {
"required": [
"id",
"name",
"parentId",
"parentName",
"path"
],
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"name": {
"type": "string"
},
"parentId": {
"type": "integer",
"format": "int64"
},
"parentName": {
"type": "string"
},
"path": {
"type": "string"
}
}
},
"DepartmentQueryDto": {
"type": "object",
"properties": {

View File

@@ -532,6 +532,22 @@ export interface paths {
patch?: never;
trace?: never;
};
"/department/query-sub": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get: operations["querySubDepartment"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/department/query-available": {
parameters: {
query?: never;
@@ -884,6 +900,15 @@ export interface components {
total?: number;
data?: components["schemas"]["PermissionRespDto"][];
};
DepartmentWithParentDto: {
/** Format: int64 */
id: number;
name: string;
/** Format: int64 */
parentId: number;
parentName: string;
path: string;
};
DepartmentQueryDto: {
/** Format: int64 */
userId?: number;
@@ -1826,6 +1851,28 @@ export interface operations {
};
};
};
querySubDepartment: {
parameters: {
query?: {
id?: number;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"*/*": components["schemas"]["DepartmentWithParentDto"][];
};
};
};
};
queryAvailableParentDepartmentsBy: {
parameters: {
query?: {