diff --git a/backend/app/api/v1/schemas/system/dept_schema.py b/backend/app/api/v1/schemas/system/dept_schema.py
index a40d8a8d..f516a421 100644
--- a/backend/app/api/v1/schemas/system/dept_schema.py
+++ b/backend/app/api/v1/schemas/system/dept_schema.py
@@ -1,10 +1,11 @@
# -*- coding: utf-8 -*-
-from typing import Optional
-from pydantic import BaseModel, ConfigDict, Field, model_validator
+from typing import Any, Optional
+from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator, validator
from app.core.base_schema import BaseSchema
from app.core.validator import DateTimeStr
+from app.core.logger import logger
class DeptCreateSchema(BaseModel):
"""部门创建模型"""
@@ -14,12 +15,12 @@ class DeptCreateSchema(BaseModel):
parent_id: Optional[int] = Field(default=None, ge=0, description="父部门ID")
description: Optional[str] = Field(default=None, max_length=500, description="备注说明")
- @classmethod
@model_validator(mode='after')
- def validate_fields(cls, data):
- if not data.name or len(data.name.strip()) == 0:
+ def validate_fields(self):
+ if not self.name or len(self.name.strip()) == 0:
raise ValueError("部门名称不能为空")
- return data
+ self.name = self.name.replace(" ", "")
+ return self
class DeptUpdateSchema(DeptCreateSchema):
diff --git a/backend/app/config/.env.dev b/backend/app/config/.env.dev
index 344fcaf0..12e0ee63 100644
--- a/backend/app/config/.env.dev
+++ b/backend/app/config/.env.dev
@@ -5,7 +5,7 @@
ENVIRONMENT = "dev"
# 服务器配置
-SERVER_HOST = 'localhost' # 允许访问的IP地址
+SERVER_HOST = '0.0.0.0' # 允许访问的IP地址
SERVER_PORT = 8000 # 服务端口
RELOAD = True # 是否自动重启
WORKERS = 1 # 启动进程数
diff --git a/backend/dev_sql.db b/backend/dev_sql.db
index 7fffb97c..2423d6f8 100644
Binary files a/backend/dev_sql.db and b/backend/dev_sql.db differ
diff --git a/frontend/src/components/TopTags/index.vue b/frontend/src/components/TopTags/index.vue
index 86074d04..3ffbc75f 100644
--- a/frontend/src/components/TopTags/index.vue
+++ b/frontend/src/components/TopTags/index.vue
@@ -19,7 +19,6 @@
\ No newline at end of file
+
diff --git a/frontend/src/views/monitor/online/index.vue b/frontend/src/views/monitor/online/index.vue
index 93101f9e..78bab964 100644
--- a/frontend/src/views/monitor/online/index.vue
+++ b/frontend/src/views/monitor/online/index.vue
@@ -1,26 +1,23 @@
+
-
-
+
+
-
-
-
-
-
-
+
+
查询
@@ -32,18 +29,19 @@
-
-
+
+ :style="{ minHeight: 'calc(100vh - 420px)' }"
+ >
{{ (pagination.current - 1) * pagination.pageSize + index + 1 }}
diff --git a/frontend/src/views/system/dept/index.vue b/frontend/src/views/system/dept/index.vue
index 0981dcaf..f72162c3 100644
--- a/frontend/src/views/system/dept/index.vue
+++ b/frontend/src/views/system/dept/index.vue
@@ -1,25 +1,26 @@
+
-
-
+
+
+
+
-
-
- 启用
- 停用
+ 启用
+ 停用
-
-
+
+
@@ -34,12 +35,11 @@
-
+ :bodyStyle="{ padding: '0 24px', minHeight: 'calc(100vh - 360px)' }">
新建
@@ -374,8 +374,8 @@ const loadingData = () => {
if (queryState.name) {
params['name'] = queryState.name;
}
- if (queryState.available) {
- params['available'] = queryState.available === 1 ? true : false;
+ if (queryState.available !== null && queryState.available !== undefined) {
+ params['available'] = queryState.available;
}
getDeptList(params).then(response => {
diff --git a/frontend/src/views/system/dept/types.ts b/frontend/src/views/system/dept/types.ts
index 9ee4a46e..32aad129 100644
--- a/frontend/src/views/system/dept/types.ts
+++ b/frontend/src/views/system/dept/types.ts
@@ -1,6 +1,6 @@
export interface searchDataType {
name?: string
- available?: number
+ available?: boolean
}
export interface tableDataType {
diff --git a/frontend/src/views/system/dict/data.vue b/frontend/src/views/system/dict/data.vue
index da33f59d..27979a69 100644
--- a/frontend/src/views/system/dict/data.vue
+++ b/frontend/src/views/system/dict/data.vue
@@ -1,12 +1,13 @@
+
-
-
+
+
@@ -14,22 +15,17 @@
-
-
-
-
- 启用
- 停用
+ 启用
+ 停用
-
-
+
查询
@@ -42,10 +38,10 @@
-
+ :bodyStyle="{ padding: '0 24px', minHeight: 'calc(100vh - 360px)' }">
新建
@@ -53,15 +49,15 @@
style="margin-right: 10px;">导出
-
@@ -426,9 +422,9 @@ const loadingData = () => {
params['dict_type'] = Array.isArray(route.query.dict_type) ? route.query.dict_type[0] : route.query.dict_type
queryState.dict_type = Array.isArray(route.query.dict_type) ? route.query.dict_type[0] : route.query.dict_type
}
- if (queryState.available) {
- params['available'] = queryState.available == 1 ? true : false;
- }
+ if (queryState.available !== null && queryState.available !== undefined) {
+ params['available'] = queryState.available;
+ }
params['page_no'] = pagination.current
params['page_size'] = pagination.pageSize
diff --git a/frontend/src/views/system/dict/index.vue b/frontend/src/views/system/dict/index.vue
index 3c761848..700acb11 100644
--- a/frontend/src/views/system/dict/index.vue
+++ b/frontend/src/views/system/dict/index.vue
@@ -1,32 +1,28 @@
+
-
-
+
+
-
-
-
-
- 启用
- 停用
+ 启用
+ 停用
-
-
+
查询
@@ -39,10 +35,10 @@
-
+ :bodyStyle="{ padding: '0 24px', minHeight: 'calc(100vh - 360px)' }">
新建
@@ -50,15 +46,14 @@
style="margin-right: 10px;">导出
-
@@ -294,8 +289,8 @@ const loadingData = () => {
if (queryState.dict_type) {
params['dict_type'] = queryState.dict_type
}
- if (queryState.available) {
- params['available'] = queryState.available == 1 ? true : false;
+ if (queryState.available !== null && queryState.available !== undefined) {
+ params['available'] = queryState.available;
}
params['page_no'] = pagination.current
params['page_size'] = pagination.pageSize
diff --git a/frontend/src/views/system/dict/types.ts b/frontend/src/views/system/dict/types.ts
index 740a6e47..e508d686 100644
--- a/frontend/src/views/system/dict/types.ts
+++ b/frontend/src/views/system/dict/types.ts
@@ -1,13 +1,13 @@
export interface searchDataType {
dict_name?: string
dict_type?: string
- available?: number
+ available?: boolean;
}
export interface searchDictDataType {
dict_label?: string
dict_type?: string
- available?: number
+ available?: boolean;
}
export interface tableDictType {
diff --git a/frontend/src/views/system/job/index.vue b/frontend/src/views/system/job/index.vue
index ad4c77d1..0738ad84 100644
--- a/frontend/src/views/system/job/index.vue
+++ b/frontend/src/views/system/job/index.vue
@@ -1,30 +1,25 @@
+
-
-
+
-
-
- 启用
- 停用
+ 启用
+ 停用
-
-
-
-
+
查询
@@ -38,7 +33,8 @@
+
+ :bodyStyle="{ padding: '0 24px', minHeight: 'calc(100vh - 360px)' }">
新建
@@ -51,7 +47,9 @@
+ :scroll="{ x: 400 }" :pagination="pagination"
+ :style="{ minHeight: 'calc(100vh - 420px)' }"
+ >
{{ (pagination.current - 1) * pagination.pageSize + index + 1 }}
@@ -88,7 +86,7 @@
+ :text="record.coalesce ? '是' : '否'" />
@@ -321,10 +319,10 @@
-
+
- 启用
- 停用
+ 是
+ 否
{
params['start_time'] = `${queryState.date_range[0]} 00:00:00`;
params['end_time'] = `${queryState.date_range[1]} 23:59:59`;
}
- if (queryState.status) {
- params['status'] = queryState.status == 1 ? true : false;
+ if (queryState.status !== null && queryState.status !== undefined) {
+ params['status'] = queryState.status;
}
params['page_no'] = pagination.current
params['page_size'] = pagination.pageSize
diff --git a/frontend/src/views/system/job/types.ts b/frontend/src/views/system/job/types.ts
index 88fc898b..d9389141 100644
--- a/frontend/src/views/system/job/types.ts
+++ b/frontend/src/views/system/job/types.ts
@@ -1,6 +1,6 @@
export interface searchType {
name?: string
- status?: number
+ status?: boolean
date_range?: [string, string];
}
diff --git a/frontend/src/views/system/log/SelectorModal.vue b/frontend/src/views/system/log/SelectorModal.vue
index 62fe3e8f..9d1ac8ac 100644
--- a/frontend/src/views/system/log/SelectorModal.vue
+++ b/frontend/src/views/system/log/SelectorModal.vue
@@ -108,9 +108,9 @@ const loadingData = () => {
if (queryState.name) {
params['name'] = queryState.name
}
- if (queryState.available) {
- params['available'] = queryState.available == "true" ? true : false;
- }
+ if (queryState.available !== null && queryState.available !== undefined) {
+ params['available'] = queryState.available;
+ }
params['page_no'] = pagination.current
params['page_size'] = pagination.pageSize
@@ -135,7 +135,7 @@ const resetFields = () => {
Object.keys(queryState).forEach((key: string) => {
delete queryState[key];
});
- queryState.available = "true"
+ queryState.available = true;
pagination.current = 1;
loadingData();
}
@@ -179,7 +179,7 @@ const handleModalCancel = () => {
Object.keys(queryState).forEach((key: string) => {
delete queryState[key];
});
- queryState.available = "true"
+ queryState.available = true;
pagination.current = 1;
pagination.pageSize = pagination.defaultPageSize;
selectedRowKeys.value = [];
diff --git a/frontend/src/views/system/log/index.vue b/frontend/src/views/system/log/index.vue
index 7a89d2ca..3bfccbd0 100644
--- a/frontend/src/views/system/log/index.vue
+++ b/frontend/src/views/system/log/index.vue
@@ -1,17 +1,15 @@
+
-
-
+
-
-
@@ -20,13 +18,10 @@
-
-
-
-
+
查询
@@ -39,26 +34,26 @@
-
+ :bodyStyle="{ padding: '0 24px', minHeight: 'calc(100vh - 360px)' }">
导出
-
+ :style="{ minHeight: 'calc(100vh - 420px)' }"
+ >
{{ (pagination.current - 1) * pagination.pageSize + index + 1 }}
diff --git a/frontend/src/views/system/log/types.ts b/frontend/src/views/system/log/types.ts
index 342138ed..6e2526f3 100644
--- a/frontend/src/views/system/log/types.ts
+++ b/frontend/src/views/system/log/types.ts
@@ -24,7 +24,7 @@ export interface tableDataType {
export interface searchCreatorDataType {
name?: string;
- available?: string;
+ available?: boolean;
}
export interface creatorType {
diff --git a/frontend/src/views/system/menu/index.vue b/frontend/src/views/system/menu/index.vue
index 3b2c9e4c..f1010470 100644
--- a/frontend/src/views/system/menu/index.vue
+++ b/frontend/src/views/system/menu/index.vue
@@ -1,25 +1,22 @@
+
-
-
+
-
-
- 启用
- 停用
+ 启用
+ 停用
-
-
+
查询
@@ -32,10 +29,10 @@
-
+ :bodyStyle="{ padding: '0 24px', minHeight: 'calc(100vh - 360px)' }">
新建
@@ -56,16 +53,16 @@
+ :row-selection="rowSelection"
+ :pagination="false"
+ :style="{ minHeight: 'calc(100vh - 420px)' }"
+ >
@@ -525,8 +522,8 @@ const loadingData = () => {
if (queryState.name) {
params['name'] = queryState.name
}
- if (queryState.available) {
- params['available'] = queryState.available == 1 ? true : false;
+ if (queryState.available !== null && queryState.available !== undefined) {
+ params['available'] = queryState.available;
}
getMenuList(params).then(response => {
diff --git a/frontend/src/views/system/menu/types.ts b/frontend/src/views/system/menu/types.ts
index 1b94165b..8fb1e56c 100644
--- a/frontend/src/views/system/menu/types.ts
+++ b/frontend/src/views/system/menu/types.ts
@@ -1,6 +1,6 @@
export interface searchDataType {
name?: string
- available?: number
+ available?: boolean;
}
export interface tableDataType {
diff --git a/frontend/src/views/system/notice/index.vue b/frontend/src/views/system/notice/index.vue
index 73649e42..1c4cef17 100644
--- a/frontend/src/views/system/notice/index.vue
+++ b/frontend/src/views/system/notice/index.vue
@@ -1,26 +1,24 @@
+
-
-
+
-
-
- 启用
- 停用
+ 启用
+ 停用
-
-
+
+
查询
@@ -33,10 +31,10 @@
-
+ :bodyStyle="{ padding: '0 24px', minHeight: 'calc(100vh - 360px)' }">
新建
@@ -60,15 +58,15 @@
-
@@ -341,8 +339,8 @@ const loadingData = () => {
if (queryState.notice_title) {
params['notice_title'] = queryState.notice_title
}
- if (queryState.available) {
- params['available'] = queryState.available == 1 ? true : false;
+ if (queryState.available !== null && queryState.available !== undefined) {
+ params['available'] = queryState.available;
}
params['page_no'] = pagination.current
params['page_size'] = pagination.pageSize
diff --git a/frontend/src/views/system/notice/types.ts b/frontend/src/views/system/notice/types.ts
index f556e574..b0d63ca9 100644
--- a/frontend/src/views/system/notice/types.ts
+++ b/frontend/src/views/system/notice/types.ts
@@ -1,6 +1,6 @@
export interface searchDataType {
notice_title?: string
- available?: number
+ available?: boolean;
}
export interface tableDataType {
diff --git a/frontend/src/views/system/position/index.vue b/frontend/src/views/system/position/index.vue
index 9f966ced..7b33e2a9 100644
--- a/frontend/src/views/system/position/index.vue
+++ b/frontend/src/views/system/position/index.vue
@@ -1,25 +1,25 @@
+
-
-
+
+
+
+
-
-
- 启用
- 停用
+ 启用
+ 停用
-
-
+
查询
@@ -32,13 +32,13 @@
-
+ :bodyStyle="{ padding: '0 24px', minHeight: 'calc(100vh - 360px)' }">
-
新建
@@ -63,16 +63,16 @@
-
+ :scroll="{ x: 400 }"
+ :pagination="pagination"
+ :style="{ minHeight: 'calc(100vh - 420px)' }"
+ >
{{ (pagination.current - 1) * pagination.pageSize + index + 1 }}
@@ -98,12 +98,12 @@
-
@@ -295,8 +295,8 @@ const loadingData = () => {
if (queryState.name) {
params['name'] = queryState.name
}
- if (queryState.available) {
- params['available'] = queryState.available == true ? true : false;
+ if (queryState.available !== null && queryState.available !== undefined) {
+ params['available'] = queryState.available;
}
params['page_no'] = pagination.current
params['page_size'] = pagination.pageSize
diff --git a/frontend/src/views/system/role/index.vue b/frontend/src/views/system/role/index.vue
index 83fa1418..c76f53c0 100644
--- a/frontend/src/views/system/role/index.vue
+++ b/frontend/src/views/system/role/index.vue
@@ -1,25 +1,23 @@
+
-
-
+
-
-
- 启用
- 停用
+ 启用
+ 停用
-
-
+
+
查询
@@ -32,10 +30,10 @@
-
+ :bodyStyle="{ padding: '0 24px', minHeight: 'calc(100vh - 360px)' }">
@@ -61,16 +59,16 @@
-
+ :scroll="{ x: 400 }"
+ :pagination="pagination"
+ :style="{ minHeight: 'calc(100vh - 420px)' }"
+ >
{{ (pagination.current - 1) * pagination.pageSize + index + 1 }}
@@ -328,8 +326,8 @@ const loadingData = () => {
if (queryState.name) {
params['name'] = queryState.name
}
- if (queryState.available) {
- params['available'] = queryState.available == 1 ? true : false;
+ if (queryState.available !== null && queryState.available !== undefined) {
+ params['available'] = queryState.available;
}
params['page_no'] = pagination.current
params['page_size'] = pagination.pageSize
diff --git a/frontend/src/views/system/role/types.ts b/frontend/src/views/system/role/types.ts
index fa6ac376..fedc0c51 100644
--- a/frontend/src/views/system/role/types.ts
+++ b/frontend/src/views/system/role/types.ts
@@ -1,6 +1,6 @@
export interface searchDataType {
name?: string
- available?: number
+ available?: boolean;
}
export interface tableDataType {
diff --git a/frontend/src/views/system/user/SelectorModal.vue b/frontend/src/views/system/user/SelectorModal.vue
index ec2e8d56..af432472 100644
--- a/frontend/src/views/system/user/SelectorModal.vue
+++ b/frontend/src/views/system/user/SelectorModal.vue
@@ -17,8 +17,8 @@
- 启用
- 停用
+ 启用
+ 停用
@@ -130,8 +130,8 @@ const loadingData = () => {
if (queryState.name) {
params['name'] = queryState.name
}
- if (queryState.available) {
- params['available'] = queryState.available == "true" ? true : false;
+ if (queryState.available !== null && queryState.available !== undefined) {
+ params['available'] = queryState.available;
}
params['page_no'] = pagination.current
params['page_size'] = pagination.pageSize
diff --git a/frontend/src/views/system/user/index.vue b/frontend/src/views/system/user/index.vue
index 35478e67..7bbcf75c 100644
--- a/frontend/src/views/system/user/index.vue
+++ b/frontend/src/views/system/user/index.vue
@@ -1,30 +1,25 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 启用
- 停用
-
-
-
-
+
+
+
+
+
+
+
+
+
+ 启用
+ 停用
+
+
+
查询
@@ -37,10 +32,9 @@
-
+
新建
@@ -72,68 +66,60 @@
-
-
+
+
-
-
-
- {{ (pagination.current - 1) * pagination.pageSize + index + 1 }}
-
-
- {{ record.dept_name }}
-
-
- {{ record.roleNames }}
-
-
- {{ record.positionNames }}
-
-
-
- {{ dictStore.getDictLabel(DictDataStore['sys_user_sex'],record.gender).dict_label }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 查看
- 修改
-
- 删除
-
-
-
+
+
+
+ {{ (pagination.current - 1) * pagination.pageSize + index + 1 }}
-
+
+ {{ record.dept_name }}
+
+
+ {{ record.roleNames }}
+
+
+ {{ record.positionNames }}
+
+
+
+ {{ dictStore.getDictLabel(DictDataStore['sys_user_sex'], record.gender).dict_label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查看
+ 修改
+
+ 删除
+
+
+
+
+
@@ -558,8 +544,8 @@ const loadingData = () => {
if (queryState.name) {
params['name'] = queryState.name
}
- if (queryState.available) {
- params['available'] = queryState.available == 1 ? true : false;
+ if (queryState.available !== null && queryState.available !== undefined) {
+ params['available'] = queryState.available;
}
if (queryState.dept_id) {
params['dept_id'] = queryState.dept_id; // 添加 dept_id 参数
diff --git a/frontend/src/views/system/user/types.ts b/frontend/src/views/system/user/types.ts
index 18cd2342..441a0979 100644
--- a/frontend/src/views/system/user/types.ts
+++ b/frontend/src/views/system/user/types.ts
@@ -1,7 +1,7 @@
export interface searchDataType {
username?: string
name?: string
- available?: number
+ available?: boolean;
dept_id?: number;
}
diff --git a/mkdocs/docs/resources/images/微信群.jpg b/mkdocs/docs/resources/images/微信群.jpg
index 8b6290e0..a067066a 100644
Binary files a/mkdocs/docs/resources/images/微信群.jpg and b/mkdocs/docs/resources/images/微信群.jpg differ
diff --git a/uni-app/.env b/uni-app/.env
index adf1db4d..c1dd1ab7 100644
--- a/uni-app/.env
+++ b/uni-app/.env
@@ -2,7 +2,7 @@
VITE_ENV = development
# 后端地址
-VITE_API_BASE_URL = "http://localhost:8000"
+VITE_API_BASE_URL = "http://192.168.0.101:8000"
# 后端接口基础路径
VITE_API_BASE_NAME = "/api"