diff --git a/vue-fastapi-backend/module_admin/controller/datastd_controller.py b/vue-fastapi-backend/module_admin/controller/datastd_controller.py index 5f46ec4..c3789d9 100644 --- a/vue-fastapi-backend/module_admin/controller/datastd_controller.py +++ b/vue-fastapi-backend/module_admin/controller/datastd_controller.py @@ -79,7 +79,18 @@ async def get_std_code_map_list2( is_page=True) return ResponseUtil.success(model_content=code_page_query_result) - +@datastdController.get( + '/stdcode/code/maplistDict', response_model=PageResponseModel, + dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:code:list'))] +) +async def get_std_code_map_dict_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_dict_map_list_services(query_db, code_page_query, + is_page=True) + return ResponseUtil.success(model_content=code_page_query_result) @datastdController.get('/stdcode/code/listappr', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stddict:dict:list'))] ) @@ -801,7 +812,19 @@ async def get_code_map_list2( id: str, query_db: AsyncSession = Depends(get_db), ): - code_page_query_result = await DataStdService.get_code_map_list2(query_db, id) + code_page_query_result = await DataStdService.get_code_map_list2(request,query_db, id) + logger.info('获取列配置列表成功') + return ResponseUtil.success(data=code_page_query_result) +@datastdController.get( + '/stdcode/code/mapdictlist/{id}', response_model=PageResponseModel, + dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:code:list'))] +) +async def get_dict_map_list2( + request: Request, + id: str, + query_db: AsyncSession = Depends(get_db), +): + code_page_query_result = await DataStdService.get_dict_map_list(request,query_db, id) logger.info('获取列配置列表成功') return ResponseUtil.success(data=code_page_query_result) # -----------------------------------------------------导入---------------------------------------------------------------------- diff --git a/vue-fastapi-backend/module_admin/dao/datastd_dao.py b/vue-fastapi-backend/module_admin/dao/datastd_dao.py index 8403571..62b9043 100644 --- a/vue-fastapi-backend/module_admin/dao/datastd_dao.py +++ b/vue-fastapi-backend/module_admin/dao/datastd_dao.py @@ -11,7 +11,7 @@ from module_admin.entity.vo.data_ast_content_vo import DataCatalogPageQueryModel DataCatalogChild from datetime import datetime from module_admin.entity.do.approval_do import FlowApproval, FlowConfig - +from module_admin.entity.do.meta_do import MetadataFldSuppInfo class DataStdDao: @@ -486,6 +486,18 @@ class DataStdDao: return List @classmethod + async def get_meta_field_list_by_onum(cls, db: AsyncSession, onum: str): + + List = ( + await db.execute( + select(MetadataFldSuppInfo) + .where( + MetadataFldSuppInfo.data_dict_id == onum if onum else False + ) + ) + ).scalars().all() + return List + @classmethod async def update_std_dict(cls, db: AsyncSession, update_data: DataStdDictModel): await db.execute(update(DataStdDict), [update_data]) diff --git a/vue-fastapi-backend/module_admin/service/datastd_service.py b/vue-fastapi-backend/module_admin/service/datastd_service.py index 288a02b..52b02a0 100644 --- a/vue-fastapi-backend/module_admin/service/datastd_service.py +++ b/vue-fastapi-backend/module_admin/service/datastd_service.py @@ -22,6 +22,8 @@ from module_admin.service.config_service import ConfigService import requests import pandas as pd from config.env import AppConfig +from config.enums import RedisInitKeyConfig + class DataStdService: """ 数据源标准服务层 @@ -120,6 +122,20 @@ class DataStdService: col_list_result = await DataStdDao.get_std_main_map_list(query_db, query_object, is_page) return col_list_result @classmethod + async def get_std_dict_map_list_services( + cls, query_db: AsyncSession, query_object: DataStdMainModel, is_page: bool = False + ): + """ + 获取列配置列表信息service + + :param query_db: orm对象 + :param query_object: 查询参数对象 + :param is_page: 是否开启分页 + :return: 列配置列表信息对象 + """ + col_list_result = await DataStdDao.get_std_main_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): """ 获取列配置详细信息service @@ -1551,41 +1567,141 @@ class DataStdService: "tableData": table_data, "children": children } + # @classmethod + # async def get_code_map_list2(cls, request: Request, query_db: AsyncSession, id: str): + + # check_model = DataStdDictModel() + # dataStdNo=await DataStdDao.get_std_main_by_id(query_db, id) + # cd_type=dataStdNo.src_sys + # check_model.data_std_no=dataStdNo.onum + # hasDict = await request.app.state.redis.get(f'{RedisInitKeyConfig.SYS_CONFIG.key}:sys.std.dict') + # # 字典 + # main_list = await DataStdDao.get_data_dict_list_by_info(query_db, check_model) + # # 元数据 + # meta_list = await DataStdDao.get_meta_field_list_by_onum(query_db, dataStdNo.onum) + + # if not main_list: + # return { "children": []} # 如果 A 表没有数据,返回空结构 + + # table_data = [] # 存储表格数据 + # children = [] # 存储图谱数据 + + # for main in main_list: + # # 组织图谱数据(A 表作为父节点) + # node = { + # "id": f"node_{main.onum}", # 使用 get() 方法访问字段 + # "name": main.data_dict_cn_name, # 使用 get() 方法访问字段 + # "label": main.data_dict_eng_name, # 使用 get() 方法访问字段 + # "rate": 1.0, + # "status": "B", + # # "currency": main.get('dataStdNo'), # 使用 get() 方法访问字段 + # "variableValue": "数据字典", + # "variableUp": True, + # "children": [], + # } + + + # children.append(node) + + # return { + # "tableData": table_data, + # "children": children + # } @classmethod - async def get_code_map_list2(cls, query_db: AsyncSession, id: str): + async def get_code_map_list2(cls, request: Request, query_db: AsyncSession, id: str): check_model = DataStdDictModel() - dataStdNo=await DataStdDao.get_std_main_by_id(query_db, id) - cd_type=dataStdNo.src_sys - check_model.data_std_no=dataStdNo.onum - main_list = await DataStdDao.get_data_dict_list_by_info(query_db, check_model) - - if not main_list: - return { "children": []} # 如果 A 表没有数据,返回空结构 - + dataStdNo = await DataStdDao.get_std_main_by_id(query_db, id) + cd_type = dataStdNo.src_sys + check_model.data_std_no = dataStdNo.onum + + # Redis 判断是否有字典层 + hasDict = await request.app.state.redis.get(f'{RedisInitKeyConfig.SYS_CONFIG.key}:sys.std.dict') + hasDict = hasDict.decode() if isinstance(hasDict, bytes) else hasDict + table_data = [] # 存储表格数据 - children = [] # 存储图谱数据 - - for main in main_list: - # 组织图谱数据(A 表作为父节点) - node = { - "id": f"node_{main.onum}", # 使用 get() 方法访问字段 - "name": main.data_dict_cn_name, # 使用 get() 方法访问字段 - "label": main.data_dict_eng_name, # 使用 get() 方法访问字段 - "rate": 1.0, - "status": "B", - # "currency": main.get('dataStdNo'), # 使用 get() 方法访问字段 - "variableValue": "数据字典", - "variableUp": True, - "children": [], - } - - - children.append(node) - + children = [] # 存储图谱数据 + + if hasDict == "是": + # 获取字典列表 + main_list = await DataStdDao.get_data_dict_list_by_info(query_db, check_model) + if not main_list: + return {"children": []} + + for main in main_list: + dict_node = { + "id": f"dict_{main.onum}", + "name": main.data_dict_cn_name, + "label": main.data_dict_eng_name, + "rate": 1.0, + "status": "B", + "variableValue": "数据字典", + "variableUp": True, + "children": [], + } + + # 获取该字典的元数据列表 + meta_list = await DataStdDao.get_meta_field_list_by_onum(query_db, main.onum) + for meta in meta_list: + meta_node = { + "id": f"meta_{meta.onum}", + "name": meta.fld_eng_name, + "label": meta.mdl_name+"("+meta.tab_eng_name+")", + "rate": 1.0, + "status": "Y", + "variableValue": "元数据", + "variableUp": False, + } + dict_node["children"].append(meta_node) + + children.append(dict_node) + + else: + # 获取标准直接挂载的元数据列表 + meta_list = await DataStdDao.get_meta_field_list_by_onum(query_db, dataStdNo.onum) + for meta in meta_list: + meta_node = { + "id": f"meta_{meta.onum}", + "name": meta.fld_eng_name, + "label": meta.mdl_name+"("+meta.tab_eng_name+")", + "rate": 1.0, + "status": "Y", + "variableValue": "元数据", + "variableUp": False, + } + children.append(meta_node) + return { "tableData": table_data, "children": children } + @classmethod + async def get_dict_map_list(cls, request: Request, query_db: AsyncSession, id: str): + """ + 获取字典的引用关系(固定两层:直接返回元数据节点列表) + :param id: 字典 onum + """ + # 获取该字典直接引用的元数据列表 + meta_list = await DataStdDao.get_meta_field_list_by_onum(query_db, id) + if not meta_list: + return {"children": []} + + children = [] + for meta in meta_list: + meta_node = { + "id": f"meta_{meta.onum}", + "name": meta.fld_eng_name, + "label": f"{meta.mdl_name}({meta.tab_eng_name})", + "rate": 1.0, + "status": "Y", + "variableValue": "元数据", + "variableUp": False, + } + children.append(meta_node) + + return { + "tableData": [], + "children": children + } @staticmethod async def get_main_import_template_services(): diff --git a/vue-fastapi-frontend/src/api/datastd/std.js b/vue-fastapi-frontend/src/api/datastd/std.js index db72628..ece12d1 100644 --- a/vue-fastapi-frontend/src/api/datastd/std.js +++ b/vue-fastapi-frontend/src/api/datastd/std.js @@ -37,6 +37,13 @@ export function listStdCodemap2(query) { params: query }) } +export function listDictMap(query) { + return request({ + url: '/default-api/datastd/stdcode/code/maplistDict', + method: 'get', + params: query + }) +} // 查询标准代码项列表 export function listStdCodeItem(query) { return request({ @@ -79,6 +86,12 @@ export function getStdMap(rowId) { method: 'get' }) } +export function getDictMap(rowId) { + return request({ + url: '/default-api/datastd/stdcode/code/mapdictlist/' + parseStrEmpty(rowId), + method: 'get' + }) +} // 新增标准代码 export function addStdCode(data) { return request({ diff --git a/vue-fastapi-frontend/src/views/datastd/main/index.vue b/vue-fastapi-frontend/src/views/datastd/main/index.vue index cc84408..6cec359 100644 --- a/vue-fastapi-frontend/src/views/datastd/main/index.vue +++ b/vue-fastapi-frontend/src/views/datastd/main/index.vue @@ -309,7 +309,7 @@ - + diff --git a/vue-fastapi-frontend/src/views/datastd/main/stdMap.vue b/vue-fastapi-frontend/src/views/datastd/main/stdMap.vue index ebba4b8..891fe48 100644 --- a/vue-fastapi-frontend/src/views/datastd/main/stdMap.vue +++ b/vue-fastapi-frontend/src/views/datastd/main/stdMap.vue @@ -174,7 +174,7 @@ const mockData = ref({ label: "", rate: 1.0, status: "G", - variableValue: "代码", + variableValue: "数据标准", variableUp: true, children:[] diff --git a/vue-fastapi-frontend/src/views/datastd/stddict/index.vue b/vue-fastapi-frontend/src/views/datastd/stddict/index.vue index 6de5a23..1c3b9a2 100644 --- a/vue-fastapi-frontend/src/views/datastd/stddict/index.vue +++ b/vue-fastapi-frontend/src/views/datastd/stddict/index.vue @@ -182,6 +182,19 @@ /> + + + + + + + + @@ -315,6 +333,7 @@ const { std_code_status, std_code_appr } = proxy.useDict( "std_code_appr" ); import { getToken } from "@/utils/auth"; +import stdMap from './stdMap'; // 引入第二个页面组件 const upload = reactive({ // 是否显示弹出层(用户导入) @@ -343,6 +362,8 @@ const queryParams = ref({ const queryStd = ref({ dataStdNo: "", }); +const codeMapId = ref(null); + const single = ref(true); const multiple = ref(true); const dbResoursName = ref(undefined); @@ -433,6 +454,7 @@ const getStdMainSelect = async () => { stdList.value = response.data; }; +const mapVisible = ref(false); const handleQuery = () => { queryParams.value.pageNum = 1; @@ -451,7 +473,11 @@ const resetQuery = () => { }; getList(); }; +const handleMapCodeClick = (row) => { + codeMapId.value=row.onum + mapVisible.value = true; +}; const handleRemove = (row) => { const idsToDelete = row.onum ? [row.onum] : ids.value; const codesToDelete = row.cdNo ? [row.cdNo] : cdNos.value; diff --git a/vue-fastapi-frontend/src/views/datastd/stddict/stdMap.vue b/vue-fastapi-frontend/src/views/datastd/stddict/stdMap.vue new file mode 100644 index 0000000..e0cc5a4 --- /dev/null +++ b/vue-fastapi-frontend/src/views/datastd/stddict/stdMap.vue @@ -0,0 +1,228 @@ + + + + + + +