From 40a0307309de97cfbc444bbd1410a436380e8e66 Mon Sep 17 00:00:00 2001
From: siyaqi
Date: Sun, 30 Mar 2025 12:52:53 +0800
Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=A0=87=E5=87=86=E5=9B=BE?=
=?UTF-8?q?=E8=B0=B1=E5=B1=95=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../controller/datastd_controller.py | 15 +-
.../module_admin/dao/datastd_dao.py | 12 +-
.../module_admin/service/datastd_service.py | 80 ++-
vue-fastapi-frontend/package.json | 1 +
vue-fastapi-frontend/src/api/datastd/std.js | 7 +
.../src/views/datastd/stdcode/codeStdMap.vue | 152 +++++
.../src/views/datastd/stdcode/index.vue | 15 +-
.../src/views/datastd/stdcode/treeNodeg6.vue | 564 ++++++++++++++++++
8 files changed, 841 insertions(+), 5 deletions(-)
create mode 100644 vue-fastapi-frontend/src/views/datastd/stdcode/codeStdMap.vue
create mode 100644 vue-fastapi-frontend/src/views/datastd/stdcode/treeNodeg6.vue
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 @@
+
+
+
+
+
+
+