diff --git a/vue-fastapi-backend/module_admin/controller/datastd_controller.py b/vue-fastapi-backend/module_admin/controller/datastd_controller.py index cf1bb38..2bcd8c2 100644 --- a/vue-fastapi-backend/module_admin/controller/datastd_controller.py +++ b/vue-fastapi-backend/module_admin/controller/datastd_controller.py @@ -30,6 +30,18 @@ async def get_std_code_list( logger.info('获取列配置列表成功') return ResponseUtil.success(model_content=code_page_query_result) +@datastdController.get( + '/stdcode/code/maplist', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:code:list'))] +) +async def get_std_code_map_list( + request: Request, + code_page_query: DataStdCodePageQueryModel = Depends(DataStdCodePageQueryModel.as_query), + query_db: AsyncSession = Depends(get_db), +): + code_page_query_result = await DataStdService.get_std_code_map_list_services(query_db, code_page_query, is_page=True) + logger.info('获取列配置列表成功') + return ResponseUtil.success(model_content=code_page_query_result) + @datastdController.get( '/stdcode/code/{id}', response_model=DataStdCodeModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:code:list'))] ) diff --git a/vue-fastapi-backend/module_admin/dao/datastd_dao.py b/vue-fastapi-backend/module_admin/dao/datastd_dao.py index 73a2161..9876c8f 100644 --- a/vue-fastapi-backend/module_admin/dao/datastd_dao.py +++ b/vue-fastapi-backend/module_admin/dao/datastd_dao.py @@ -1,8 +1,9 @@ -from sqlalchemy import delete, select, update, desc +from sqlalchemy import delete, select, update, desc,or_ from sqlalchemy.ext.asyncio import AsyncSession from module_admin.entity.do.datastd_do import DataStdCode from module_admin.entity.vo.datastd_vo import DataStdCodeModel from utils.page_util import PageUtil +from sqlalchemy.orm import aliased class DataStdDao: @@ -23,6 +24,11 @@ class DataStdDao: filters = [] if query_object.code_name: filters.append(DataStdCode.code_name.like(f"%{query_object.code_name}%")) + if query_object.code_num: + filters.append( or_( + DataStdCode.code_name.like(f"%{query_object.code_num}%"), + DataStdCode.code_num.like(f"%{query_object.code_num}%") + )) if query_object.code_status: filters.append(DataStdCode.code_status==query_object.code_status) if query_object.sys_id: @@ -48,9 +54,49 @@ class DataStdDao: db, query, query_object.page_num, query_object.page_size, is_page ) return col_list - - - + @classmethod + async def get_std_code_map_list(cls, db: AsyncSession, query_object: DataStdCodeModel, is_page: bool = False): + # 构建查询条件 + filters = [] + # 系统级代码 + c1 = aliased(DataStdCode) # 当前 codeItem 表(c1) + c2 = aliased(DataStdCode) # 别名 c2 表示父级(parent) + c3 = aliased(DataStdCode) # 别名 c3 表示映射的代码 + c4 = aliased(DataStdCode) # 别名 c4 表示映射父级代码 + if query_object.parent_id: + if query_object.code_type =='sys': + filters.append(c1.parent_id == query_object.parent_id) + else: + filters.append(c3.parent_id == query_object.parent_id) + # 公司级代码 + # 2. 创建别名并进行连接 + filters.append(c1.class_id == 'codeItem') # class_id 为 'codeItem' + # 3. 构建基础查询,使用连接和别名 + query = ( + select( + c2.sys_id.label("target_sys_id"), # 父级系统编号 + c2.sys_name.label("target_sys_name"), # 父级系统名称 + c2.code_num.label("target_code_num"), # 父级代码编号 + c2.code_name.label("target_code_name"), # 父级代码名称 + c1.code_num.label("target_code_num_item"), # 当前 codeItem 的编号 + c1.code_name.label("target_code_name_item"), # 当前 codeItem 的名称 + c4.code_num.label("resource_code_num"), # 映射的父级代码编号 + c4.code_name.label("resource_code_name"), # 映射的父级代码名称 + c3.code_num.label("resource_code_num_item"), # 映射的父级代码编号 + c3.code_name.label("resource_code_name_item") # 映射的父级代码名称 + ) + .select_from(c1) # 从 c1 开始查询 + .join(c2, c1.parent_id == c2.id, isouter=True) # 连接 c2 + .join(c3, c1.code_map_id == c3.id, isouter=True) # 连接 c3 + .join(c4, c3.parent_id == c4.id, isouter=True) # 连接 c4 + .where(*filters) # 使用所有过滤条件 + .order_by(desc(c1.create_time)) # 按照创建时间降序排列 + ) + # 4. 分页逻辑 + col_list = await PageUtil.paginate( + db, query, query_object.page_num, query_object.page_size, is_page + ) + return col_list @classmethod async def get_data_code_list_by_info(cls, db: AsyncSession, query_object: DataStdCodeModel): List = ( diff --git a/vue-fastapi-backend/module_admin/entity/do/datastd_do.py b/vue-fastapi-backend/module_admin/entity/do/datastd_do.py index 16c3b33..72541f7 100644 --- a/vue-fastapi-backend/module_admin/entity/do/datastd_do.py +++ b/vue-fastapi-backend/module_admin/entity/do/datastd_do.py @@ -15,12 +15,13 @@ class DataStdCode(Base): update_by = Column(String(20), default='', comment='更新者') update_time = Column(DateTime, nullable=True, default=None, comment='更新时间') code_num = Column(String(50), default=None, comment='标准代码编号') - code_name = Column(String(50), default=None, comment='标准代码值') + code_name = Column(String(200), default=None, comment='标准代码值') code_type = Column(String(10), default=None, comment='标准代码类型(sys:系统级 company:公司级)') code_status = Column(String(1), default=None, comment='代码状态(0:有效 1:无效)') sys_name = Column(String(50), default=None, comment='归属系统') sys_id = Column(Integer, default=None, comment='归属系统Id') class_id = Column(String(10), default=None, comment='代码类型(code:代码 codeItem:代码项)') parent_id = Column(String(50), default=None, comment='父id') - - + code_map_id = Column(String(50), default=None,comment='标准代码Id') + code_map_num = Column(String(50), default=None, comment='标准代码编号') + code_map_name = Column(String(200), default=None, comment='标准代码值') diff --git a/vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py b/vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py index cf0e117..1b748e5 100644 --- a/vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py +++ b/vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py @@ -31,7 +31,9 @@ class DataStdCodeModel(BaseModel): create_time: Optional[datetime] = Field(default=None, description='创建时间') update_by: Optional[str] = Field(default=None, description='更新者') update_time: Optional[datetime] = Field(default=None, description='更新时间') - + code_map_id: Optional[str] = Field(default=None, description='标准代码主键(映射)') + code_map_num: Optional[str] = Field(default=None, description='标准代码编号(映射)') + code_map_name: Optional[str] = Field(default=None, description='标准代码名称(映射)') diff --git a/vue-fastapi-backend/module_admin/service/datastd_service.py b/vue-fastapi-backend/module_admin/service/datastd_service.py index ab9989d..256033d 100644 --- a/vue-fastapi-backend/module_admin/service/datastd_service.py +++ b/vue-fastapi-backend/module_admin/service/datastd_service.py @@ -28,7 +28,20 @@ class DataStdService: col_list_result = await DataStdDao.get_std_code_list(query_db, query_object, is_page) return col_list_result - + @classmethod + async def get_std_code_map_list_services( + cls, query_db: AsyncSession, query_object: DataStdCodeModel, is_page: bool = False + ): + """ + 获取列配置列表信息service + + :param query_db: orm对象 + :param query_object: 查询参数对象 + :param is_page: 是否开启分页 + :return: 列配置列表信息对象 + """ + col_list_result = await DataStdDao.get_std_code_map_list(query_db, query_object, is_page) + return col_list_result @classmethod async def get_std_code_by_id_services(cls, query_db: AsyncSession, id: str): """ @@ -199,8 +212,7 @@ class DataStdService: else: # 如果code_item的id不为0,表示是修改操作 # 校验同一个父级下,code_num是否已存在 - existing_code_item = await cls.check_code_unique_services(query_db,code_item) - if existing_code_item: + if not await cls.check_code_unique_services(query_db, code_item): raise ServiceException(message=f"父级代码{code.code_num}下的代码项{code_item.code_num}已存在") # 生成新的UUID,并新增代码项 code_item.id = str(uuid.uuid4()) # 新生成的UUID diff --git a/vue-fastapi-frontend/src/api/datastd/stdcode.js b/vue-fastapi-frontend/src/api/datastd/stdcode.js index 735f0e1..f117e0c 100644 --- a/vue-fastapi-frontend/src/api/datastd/stdcode.js +++ b/vue-fastapi-frontend/src/api/datastd/stdcode.js @@ -9,7 +9,20 @@ export function listStdCode(query) { params: query }) } - +export function listStdCodeCompany() { + return request({ + url: '/default-api/datastd/stdcode/code/list', + method: 'get', + params: {classId:'code',codeType:"company"} + }) +} +export function listStdCodemap(query) { + return request({ + url: '/default-api/datastd/stdcode/code/maplist', + method: 'get', + params: query + }) +} // 查询标准代码项列表 export function listStdCodeItem(query) { return request({ diff --git a/vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue b/vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue index c70005b..59ba8a6 100644 --- a/vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue +++ b/vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue @@ -3,14 +3,14 @@
- + - + @@ -19,7 +19,7 @@ - + - + + + + + + + + +
@@ -131,7 +149,7 @@ {{ scope.row.codeName }} @@ -149,26 +167,38 @@ + + + + + diff --git a/vue-fastapi-frontend/src/views/datastd/stdcode/codeItemCommon.vue b/vue-fastapi-frontend/src/views/datastd/stdcode/codeItemCommon.vue new file mode 100644 index 0000000..d1e8ee3 --- /dev/null +++ b/vue-fastapi-frontend/src/views/datastd/stdcode/codeItemCommon.vue @@ -0,0 +1,222 @@ + + + + + + + diff --git a/vue-fastapi-frontend/src/views/datastd/stdcode/codeMap.vue b/vue-fastapi-frontend/src/views/datastd/stdcode/codeMap.vue new file mode 100644 index 0000000..212b89f --- /dev/null +++ b/vue-fastapi-frontend/src/views/datastd/stdcode/codeMap.vue @@ -0,0 +1,269 @@ + + + + + + + diff --git a/vue-fastapi-frontend/src/views/datastd/stdcode/index.vue b/vue-fastapi-frontend/src/views/datastd/stdcode/index.vue index ce3e428..63e4843 100644 --- a/vue-fastapi-frontend/src/views/datastd/stdcode/index.vue +++ b/vue-fastapi-frontend/src/views/datastd/stdcode/index.vue @@ -119,14 +119,16 @@ @@ -152,6 +154,16 @@ 确定 + + + + + + + + + + @@ -161,6 +173,8 @@ import { listStdCode, addStdCode, getStdCode, updateStdCode, deleteStdCode } fro import { datasourcetree } from "@/api/meta/metatask"; import { ElLink } from 'element-plus'; import CodeItem from './codeItem.vue'; // 引入第二个页面组件 +import codeItemCommon from './codeItemCommon.vue'; // 引入第二个页面组件 +import codeMap from './codeMap'; // 引入第二个页面组件 const { proxy } = getCurrentInstance(); @@ -229,13 +243,23 @@ const getList = async () => { total.value = response.total; loading.value = false; }; +const codeVisible = ref(false); +const mapVisible = ref(false); +const codeMapId = ref(null); + // 点击代码名称,弹出第二个对话框并传递数据 const handleCodeClick = (row) => { - selectedRow.value = row; // 保存选中的行数据 - formData.value = { ...row }; // 复制选中的行数据 - dialogVisible2.value = true; // 打开第二个对话框 + codeMapId.value=row.id + console.log(codeMapId.value,"ddddddd") + codeVisible.value = true; + }; +const handleMapCodeClick = (row) => { + codeMapId.value=row.id + console.log(codeMapId.value,"ddddddd2222") + mapVisible.value = true; +}; function handleSelectionChange(selection) { ids.value = selection.map(item => item.id); codeNums.value = selection.map(item => item.codeNum); @@ -300,9 +324,8 @@ const handleRemove = (row) => { const handleSave2 =async () => { const child = proxy.$refs.editCodeDialog; - console.log(Object.getOwnPropertyNames(child)); // 打印所有方法和属性 + let isSuccess= await child.handleSave() - console.log(isSuccess,"ssssssssssss") if(isSuccess){ dialogVisible2.value = false;