diff --git a/vue-fastapi-backend/module_admin/controller/datastd_controller.py b/vue-fastapi-backend/module_admin/controller/datastd_controller.py index 30f2d9e..e7fb71c 100644 --- a/vue-fastapi-backend/module_admin/controller/datastd_controller.py +++ b/vue-fastapi-backend/module_admin/controller/datastd_controller.py @@ -466,4 +466,17 @@ async def change_std_main_onum( ): delete_std_main_result = await DataStdService.change_std_main_onum(query_db, edit_std_main.id,edit_std_main.sys_id) logger.info(delete_std_main_result.message) - return ResponseUtil.success(msg=delete_std_main_result.message) \ No newline at end of file + return ResponseUtil.success(msg=delete_std_main_result.message) +# 标准代码映射图谱 + +@datastdController.get( + '/stdcode/code/mapstdlist/{id}', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:code:list'))] +) +async def get_code_std_map_list( + request: Request, + id: str, + query_db: AsyncSession = Depends(get_db), +): + code_page_query_result = await DataStdService.get_code_std_map_list_services(query_db, id) + logger.info('获取列配置列表成功') + return ResponseUtil.success(data=code_page_query_result) \ No newline at end of file diff --git a/vue-fastapi-backend/module_admin/dao/datastd_dao.py b/vue-fastapi-backend/module_admin/dao/datastd_dao.py index 7a1ac5c..758add3 100644 --- a/vue-fastapi-backend/module_admin/dao/datastd_dao.py +++ b/vue-fastapi-backend/module_admin/dao/datastd_dao.py @@ -254,7 +254,13 @@ class DataStdDao: @classmethod async def delete_std_dict(cls, db: AsyncSession, Id: str): await db.execute(delete(DataStdDict).where(DataStdDict.id == Id)) - + @classmethod + async def get_std_dict_list_all(cls, db: AsyncSession, query_object: DataStdDict): + filters = [] + if query_object.std_code: + filters.append(DataStdDict.std_code.like(f"%{query_object.std_code}%")) + query = select(DataStdDict).where(*filters).order_by(desc(DataStdDict.create_time)) + return await PageUtil.paginate(db, query, 0, 0, False) @classmethod async def update_std_dict(cls, db: AsyncSession, update_data: DataStdDictModel): @@ -279,6 +285,7 @@ class DataStdDao: DataStdDict.dict_name == query_object.dict_name if query_object.dict_name else True, DataStdDict.dict_num == query_object.dict_num if query_object.dict_num else True, DataStdDict.dict_status == query_object.dict_status if query_object.dict_status else True, + DataStdDict.std_code == query_object.std_code if query_object.std_code else True, DataStdDict.sys_id == query_object.sys_id if query_object.sys_id else True, DataStdDict.dict_type == query_object.dict_type if query_object.dict_type else True, ) @@ -684,6 +691,8 @@ class DataStdDao: filters.append(DataStdMain.std_code.like(f"%{query_object.std_code}%")) if query_object.sys_id: filters.append(DataStdMain.sys_id == query_object.sys_id) + if query_object.code_id: + filters.append(DataStdMain.code_id == query_object.code_id) if query_object.std_type: filters.append(DataStdMain.std_type == query_object.std_type) if query_object.std_status: @@ -720,6 +729,7 @@ class DataStdDao: DataStdMain.std_num == query_object.std_num if query_object.std_num else True, DataStdMain.sys_id == query_object.sys_id if query_object.sys_id else True, DataStdMain.std_type == query_object.std_type if query_object.std_type else True, + DataStdMain.code_id == query_object.code_id if query_object.code_id else True, DataStdMain.std_status == query_object.std_status if query_object.std_status else True ) ) diff --git a/vue-fastapi-backend/module_admin/service/datastd_service.py b/vue-fastapi-backend/module_admin/service/datastd_service.py index 674abda..10df044 100644 --- a/vue-fastapi-backend/module_admin/service/datastd_service.py +++ b/vue-fastapi-backend/module_admin/service/datastd_service.py @@ -833,4 +833,82 @@ class DataStdService: await query_db.rollback() raise e else: - raise ServiceException(message='传入标准ID为空') \ No newline at end of file + raise ServiceException(message='传入标准ID为空') + + + @classmethod + async def get_code_std_map_list_services(cls, query_db: AsyncSession, id: str): + # 查询 A 表(t_datastd_main) + check_model = DataStdMainModel() + check_model.code_id = id + main_list = await DataStdDao.get_std_main_list_all(query_db, check_model) + stdCode=await DataStdDao.get_std_code_by_id(query_db, id) + + if not main_list: + return {"tableData": [], "children": []} # 如果 A 表没有数据,返回空结构 + + table_data = [] # 存储表格数据 + children = [] # 存储图谱数据 + + for main in main_list: + # 查询 B 表(t_datastd_dict),通过 A 表的 id 匹配 std_code + dict_model = DataStdDictModel() + dict_model.std_code = main.get('id') # 使用 get() 方法访问字段 + dict_list = await DataStdDao.get_std_dict_list_all(query_db, dict_model) + + # 组织表格数据 + if dict_list: + for dict_item in dict_list: + table_data.append({ + "codeNum": stdCode.code_num, # 使用 get() 方法访问字段 + "codeName": stdCode.code_name, # 使用 get() 方法访问字段 + "stdNum": main.get('stdNum'), # 使用 get() 方法访问字段 + "stdName": main.get('stdName'), # 使用 get() 方法访问字段 + "stdCode": main.get('stdCode'), # 使用 get() 方法访问字段 + "dictNum": dict_item.get('dictNum'), # 使用 get() 方法访问字段 + "dictName": dict_item.get('dictName'), # 使用 get() 方法访问字段 + "dictCode": dict_item.get('dictCode'), # 使用 get() 方法访问字段 + }) + else : + table_data.append({ + "codeNum": stdCode.code_num, # 使用 get() 方法访问字段 + "codeName": stdCode.code_name, # 使用 get() 方法访问字段 + "stdNum": main.get('stdNum'), # 使用 get() 方法访问字段 + "stdName": main.get('stdName'), # 使用 get() 方法访问字段 + "stdCode": main.get('stdCode'), # 使用 get() 方法访问字段 + "dictNum": "", # 使用 get() 方法访问字段 + "dictName":"", # 使用 get() 方法访问字段 + "dictCode": "", # 使用 get() 方法访问字段 + }) + # 组织图谱数据(A 表作为父节点) + node = { + "id": f"node_{main.get('id')}", # 使用 get() 方法访问字段 + "name": main.get('stdName'), # 使用 get() 方法访问字段 + "label": main.get('stdCode'), # 使用 get() 方法访问字段 + "rate": 1.0, + "status": "B", + "currency": main.get('stdNum'), # 使用 get() 方法访问字段 + "variableValue": "标准", + "variableUp": True, + "children": [], + } + + # B 表数据作为子节点 + for dict_item in dict_list: + node["children"].append({ + "id": f"dict_{dict_item.get('id')}", # 使用 get() 方法访问字段 + "name": dict_item.get('dictName'), # 使用 get() 方法访问字段 + "label": dict_item.get('dictCode'), # 使用 get() 方法访问字段 + "rate": 1.0, + "status": "R", + "currency": dict_item.get('dictNum'), # 使用 get() 方法访问字段 + "variableValue": "词典", + "variableUp": True, + }) + + children.append(node) + + return { + "tableData": table_data, + "children": children + } diff --git a/vue-fastapi-frontend/package.json b/vue-fastapi-frontend/package.json index 99c3f78..0987104 100644 --- a/vue-fastapi-frontend/package.json +++ b/vue-fastapi-frontend/package.json @@ -34,6 +34,7 @@ "element-plus": "2.8.0", "file-saver": "2.0.5", "fuse.js": "6.6.2", + "insert-css": "^2.0.0", "js-cookie": "3.0.5", "js-md5": "^0.8.3", "jsencrypt": "3.3.2", diff --git a/vue-fastapi-frontend/src/api/datastd/std.js b/vue-fastapi-frontend/src/api/datastd/std.js index c621a12..e5ccaa9 100644 --- a/vue-fastapi-frontend/src/api/datastd/std.js +++ b/vue-fastapi-frontend/src/api/datastd/std.js @@ -47,6 +47,13 @@ export function getStdCodeItem(rowId) { method: 'get' }) } +// 查询标准代码项详情 +export function getStdCodeMap(rowId) { + return request({ + url: '/default-api/datastd/stdcode/code/mapstdlist/' + parseStrEmpty(rowId), + method: 'get' + }) +} // 新增标准代码 export function addStdCode(data) { diff --git a/vue-fastapi-frontend/src/views/datastd/stdcode/codeStdMap.vue b/vue-fastapi-frontend/src/views/datastd/stdcode/codeStdMap.vue new file mode 100644 index 0000000..98ea320 --- /dev/null +++ b/vue-fastapi-frontend/src/views/datastd/stdcode/codeStdMap.vue @@ -0,0 +1,152 @@ + + + + + diff --git a/vue-fastapi-frontend/src/views/datastd/stdcode/index.vue b/vue-fastapi-frontend/src/views/datastd/stdcode/index.vue index e5a4581..9efe84a 100644 --- a/vue-fastapi-frontend/src/views/datastd/stdcode/index.vue +++ b/vue-fastapi-frontend/src/views/datastd/stdcode/index.vue @@ -110,7 +110,7 @@ 查看 @@ -164,6 +164,11 @@ + + + + + @@ -175,7 +180,7 @@ import { ElLink } from 'element-plus'; import CodeItem from './codeItem.vue'; // 引入第二个页面组件 import codeItemCommon from './codeItemCommon.vue'; // 引入第二个页面组件 import codeMap from './codeMap'; // 引入第二个页面组件 - +import codeStdMap from './codeStdMap.vue'; const { proxy } = getCurrentInstance(); const { std_code_status,std_code_appr } = proxy.useDict("std_code_status","std_code_appr"); @@ -245,6 +250,7 @@ const getList = async () => { }; const codeVisible = ref(false); const mapVisible = ref(false); +const mapStdVisible = ref(false); const codeMapId = ref(null); // 点击代码名称,弹出第二个对话框并传递数据 @@ -257,6 +263,11 @@ const handleMapCodeClick = (row) => { codeMapId.value=row.id mapVisible.value = true; +}; +const handleMapCodeStdClick = (row) => { + selectedRow.value=row + mapStdVisible.value = true; + }; function handleSelectionChange(selection) { ids.value = selection.map(item => item.id); diff --git a/vue-fastapi-frontend/src/views/datastd/stdcode/treeNodeg6.vue b/vue-fastapi-frontend/src/views/datastd/stdcode/treeNodeg6.vue new file mode 100644 index 0000000..0600756 --- /dev/null +++ b/vue-fastapi-frontend/src/views/datastd/stdcode/treeNodeg6.vue @@ -0,0 +1,564 @@ + + + + +