diff --git a/vue-fastapi-backend/module_admin/controller/datastd_controller.py b/vue-fastapi-backend/module_admin/controller/datastd_controller.py
index a27c742..5ca8c28 100644
--- a/vue-fastapi-backend/module_admin/controller/datastd_controller.py
+++ b/vue-fastapi-backend/module_admin/controller/datastd_controller.py
@@ -871,4 +871,11 @@ async def export_std_dict_template(request: Request, query_db: AsyncSession = De
dict_import_template_result = await DataStdService.get_dict_import_template_services()
logger.info('获取成功')
- return ResponseUtil.streaming(data=bytes2file_response(dict_import_template_result))
\ No newline at end of file
+ return ResponseUtil.streaming(data=bytes2file_response(dict_import_template_result))
+@datastdController.post("/stdmain/saveStdStatus")
+async def save_tsmcb(request: Request,
+ saveSscfModel: DataStdMainModel,
+ query_db: AsyncSession = Depends(get_db),
+ current_user: CurrentUserModel = Depends(LoginService.get_current_user)):
+ result = await DataStdService.edit_std_main_status(query_db, saveSscfModel)
+ return ResponseUtil.success(msg=result.message)
\ No newline at end of file
diff --git a/vue-fastapi-backend/module_admin/dao/metadata_config_dao.py b/vue-fastapi-backend/module_admin/dao/metadata_config_dao.py
index d27b2f3..4b1c833 100644
--- a/vue-fastapi-backend/module_admin/dao/metadata_config_dao.py
+++ b/vue-fastapi-backend/module_admin/dao/metadata_config_dao.py
@@ -13,7 +13,7 @@ from sqlalchemy.sql import true
from utils.page_util import PageUtil
from module_admin.entity.vo.data_ast_content_vo import DataCatalogPageQueryModel, DeleteDataCatalogModel, \
DataCatalogChild
-from sqlalchemy import delete, select, update, desc, or_, not_, and_
+from sqlalchemy import delete, select, update, desc, or_, not_, and_,func
from exceptions.exception import ServiceException,ServiceWarning
class MetadataConfigDao:
@@ -159,18 +159,55 @@ class MetadataConfigDao:
result = await db.execute(select(SecuBizConfig).where(SecuBizConfig.onum == onum))
return result.scalars().first()
+ # @classmethod
+ # async def get_biz_config_list(cls, db: AsyncSession, query_object, is_page: bool = False):
+ # query = select(SecuBizConfig).where(
+ # SecuBizConfig.risk_lvl.like(f"%{query_object.risk_lvl}%") if query_object.risk_lvl else True,
+ # SecuBizConfig.isStop == query_object.isStop if query_object.isStop is not None else True,
+ # SecuBizConfig.create_time.between(
+ # datetime.combine(datetime.strptime(query_object.begin_time, '%Y-%m-%d'), time.min),
+ # datetime.combine(datetime.strptime(query_object.end_time, '%Y-%m-%d'), time.max),
+ # ) if query_object.begin_time and query_object.end_time else True,
+ # ).order_by(SecuBizConfig.create_time.desc())
+
+ # from utils.page_util import PageUtil
+ # return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
@classmethod
async def get_biz_config_list(cls, db: AsyncSession, query_object, is_page: bool = False):
- query = select(SecuBizConfig).where(
- SecuBizConfig.risk_lvl.like(f"%{query_object.risk_lvl}%") if query_object.risk_lvl else True,
- SecuBizConfig.isStop == query_object.isStop if query_object.isStop is not None else True,
- SecuBizConfig.create_time.between(
- datetime.combine(datetime.strptime(query_object.begin_time, '%Y-%m-%d'), time.min),
- datetime.combine(datetime.strptime(query_object.end_time, '%Y-%m-%d'), time.max),
- ) if query_object.begin_time and query_object.end_time else True,
- ).order_by(SecuBizConfig.create_time.desc())
+ # === 副表数量子查询 ===
+ subquery = (
+ select(
+ SecuBizConfigRela.biz_onum.label("biz_onum"),
+ func.count(SecuBizConfigRela.onum).label("rela_count")
+ )
+ .group_by(SecuBizConfigRela.biz_onum)
+ .subquery()
+ )
- from utils.page_util import PageUtil
+ # === 主查询,LEFT JOIN 子查询 ===
+ query = (
+ select(
+ SecuBizConfig.biz_name,
+ SecuBizConfig.onum,
+ SecuBizConfig.risk_lvl,
+ SecuBizConfig.update_by,
+ SecuBizConfig.update_time,
+ SecuBizConfig.isStop,
+ SecuBizConfig.create_by,
+ SecuBizConfig.create_time,
+ func.coalesce(subquery.c.rela_count, 0).label("rela_count") # 无关联时为 0
+ )
+ .outerjoin(subquery, SecuBizConfig.onum == subquery.c.biz_onum)
+ .where(
+ SecuBizConfig.risk_lvl.like(f"%{query_object.risk_lvl}%") if query_object.risk_lvl else True,
+ SecuBizConfig.isStop == query_object.isStop if query_object.isStop is not None else True,
+ SecuBizConfig.create_time.between(
+ datetime.combine(datetime.strptime(query_object.begin_time, '%Y-%m-%d'), time.min),
+ datetime.combine(datetime.strptime(query_object.end_time, '%Y-%m-%d'), time.max),
+ ) if query_object.begin_time and query_object.end_time else True,
+ )
+ .order_by(SecuBizConfig.create_time.desc())
+ )
return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
@classmethod
diff --git a/vue-fastapi-backend/module_admin/service/datastd_service.py b/vue-fastapi-backend/module_admin/service/datastd_service.py
index 8a842ce..0e20de1 100644
--- a/vue-fastapi-backend/module_admin/service/datastd_service.py
+++ b/vue-fastapi-backend/module_admin/service/datastd_service.py
@@ -1257,6 +1257,16 @@ class DataStdService:
else:
raise ServiceException(message=f'标准 {model.onum} 不存在')
@classmethod
+ async def edit_std_main_status(cls, query_db: AsyncSession, model: DataStdMainModel):
+ existing = await cls.get_std_main_by_id(query_db, model.onum)
+ if existing:
+ existing.std_status=model.std_status
+ await DataStdDao.update_std_main(query_db, existing)
+ await query_db.commit()
+ return CrudResponseModel(is_success=True, message='编辑标准成功')
+ else:
+ raise ServiceException(message=f'标准 {model.onum} 不存在')
+ @classmethod
async def add_std_main_appr(cls, query_db: AsyncSession, model: DataStdMainModel):
if not await cls.check_std_num_unique(query_db, model):
raise ServiceException(message=f"标准编号 {model.data_std_no} 已存在")
diff --git a/vue-fastapi-frontend/src/api/datastd/std.js b/vue-fastapi-frontend/src/api/datastd/std.js
index ece12d1..58968e1 100644
--- a/vue-fastapi-frontend/src/api/datastd/std.js
+++ b/vue-fastapi-frontend/src/api/datastd/std.js
@@ -254,6 +254,7 @@ export function listStdCodeAppr(query) {
params: query
})
}
+
// 查询数据标准列表
export function listStdMainSelect(query) {
return request({
@@ -262,7 +263,13 @@ export function listStdMainSelect(query) {
params: query
})
}
-
+export function saveStdStatus(data){
+ return request({
+ url: '/default-api/datastd/stdmain/saveStdStatus',
+ method: 'post',
+ data: data
+ })
+}
// 查询数据标准详情
diff --git a/vue-fastapi-frontend/src/views/datastd/main/index.vue b/vue-fastapi-frontend/src/views/datastd/main/index.vue
index 6e9e515..48448fc 100644
--- a/vue-fastapi-frontend/src/views/datastd/main/index.vue
+++ b/vue-fastapi-frontend/src/views/datastd/main/index.vue
@@ -309,6 +309,13 @@
+
+
+
+
+
@@ -482,6 +489,7 @@ import {
getStdMain,
deleteStdMain,
listStdMainSelect,
+ saveStdStatus,
changeStdMainOum
} from "@/api/datastd/std"; // 更新为新的接口
import useUserStore from '@/store/modules/user'
@@ -504,6 +512,16 @@ const currentNode = ref({})
const handleTargetCatalogNodeClick = (data) => {
chooseOnumNum.value=data.contentOnum
}
+function changeStatus(row){
+ let param = {
+ onum: row.onum,
+ stdStatus: row.stdStatus
+ }
+ saveStdStatus(param).then(res=>{
+ proxy.$modal.msgSuccess("操作成功");
+ getList()
+ })
+}
const codeMapId = ref(null);
const mapVisible = ref(false);
/**文件上传中处理 */
diff --git a/vue-fastapi-frontend/src/views/metadataConfig/bizConfig/index.vue b/vue-fastapi-frontend/src/views/metadataConfig/bizConfig/index.vue
index f87bbe9..6d90ab3 100644
--- a/vue-fastapi-frontend/src/views/metadataConfig/bizConfig/index.vue
+++ b/vue-fastapi-frontend/src/views/metadataConfig/bizConfig/index.vue
@@ -59,6 +59,7 @@
+
{{ getSecLevelName(row.riskLvl) }}