diff --git a/vue-fastapi-backend/module_admin/dao/datastd_dao.py b/vue-fastapi-backend/module_admin/dao/datastd_dao.py index 9fc0659..9e6b8aa 100644 --- a/vue-fastapi-backend/module_admin/dao/datastd_dao.py +++ b/vue-fastapi-backend/module_admin/dao/datastd_dao.py @@ -1004,65 +1004,87 @@ class DataStdDao: # ------------------------------------------------------------数据标准(658行)------------------------------------------------------------------------------------------------- @classmethod async def get_std_main_list(cls, db: AsyncSession, query_object: DataStdMainModel, is_page: bool = False): - filters = [] - if query_object.data_std_cn_name: - filters.append(DataStdMain.data_std_cn_name.like(f"%{query_object.data_std_cn_name}%")) - if query_object.data_std_eng_name: - filters.append( - or_( - DataStdMain.data_std_cn_name.like(f"%{query_object.data_std_eng_name}%"), - DataStdMain.data_std_eng_name.like(f"%{query_object.data_std_eng_name}%") - ) - ) - if query_object.data_std_busi_defn: - filters.append(DataStdMain.data_std_busi_defn.like(f"%{query_object.data_std_busi_defn}%")) - if query_object.data_std_no: - filters.append(DataStdMain.data_std_no.like(f"%{query_object.data_std_no}%")) - if query_object.src_sys: - filters.append(DataStdMain.src_sys == query_object.src_sys) - if query_object.data_std_type: - filters.append(DataStdMain.data_std_type == query_object.data_std_type) - if query_object.std_status: - filters.append(DataStdMain.std_status == query_object.std_status) - if query_object.belt_data_std_content: - filters.append(DataStdMain.belt_data_std_content == query_object.belt_data_std_content) - - query = ( - select( - DataStdMain.onum, - DataStdMain.create_by, - DataStdMain.create_time, - DataStdMain.upd_prsn, - DataStdMain.upd_time, - DataStdMain.data_std_no, - DataStdMain.data_std_eng_name, - DataStdMain.data_std_cn_name, - DataStdMain.data_std_type, - DataStdMain.data_sec_lvl, - DataStdMain.src_sys, - DataStdMain.data_std_vest, - DataStdMain.data_std_busi_defn, - DataStdMain.cd_id, - DataStdMain.std_status, - DataStdMain.data_std_busi_ownership_dept, - DataStdMain.data_std_it_ownership_dept, - DataStdMain.data_std_busi_ownership_prsn, - DataStdMain.data_std_it_ownership_prsn, - DataStdMain.belt_data_std_content, - DataStdMain.data_std_src, - DataStdMain.data_clas, - DataStdMain.typical_fld, - DataStdCode.cd_no.label("cd_no") # 关联查询的cd_no - ) - .outerjoin( # 使用left outer join确保即使没有关联code也能返回主表数据 - DataStdCode, - DataStdMain.cd_id == DataStdCode.onum - ) - .where(*filters) - .order_by(desc(DataStdMain.create_time)) - ) - return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page) - + filters = [] + + if query_object.data_std_cn_name: + filters.append(DataStdMain.data_std_cn_name.like(f"%{query_object.data_std_cn_name}%")) + if query_object.data_std_eng_name: + filters.append( + or_( + DataStdMain.data_std_cn_name.like(f"%{query_object.data_std_eng_name}%"), + DataStdMain.data_std_eng_name.like(f"%{query_object.data_std_eng_name}%") + ) + ) + if query_object.data_std_busi_defn: + filters.append(DataStdMain.data_std_busi_defn.like(f"%{query_object.data_std_busi_defn}%")) + if query_object.data_std_no: + filters.append(DataStdMain.data_std_no.like(f"%{query_object.data_std_no}%")) + if query_object.src_sys: + filters.append(DataStdMain.src_sys == query_object.src_sys) + if query_object.data_std_type: + filters.append(DataStdMain.data_std_type == query_object.data_std_type) + if query_object.std_status: + filters.append(DataStdMain.std_status == query_object.std_status) + + # === 新增:目录过滤 === + if query_object.belt_data_std_content: + # 定义递归CTE + content_alias = aliased(DataAstContent) # 假设SQLAlchemy模型叫 DataStdContent + cte = ( + select(DataAstContent.content_onum) + .where(DataAstContent.content_onum == query_object.belt_data_std_content) + .cte(name="content_cte", recursive=True) + ) + + cte = cte.union_all( + select(content_alias.content_onum) + .where(content_alias.supr_content_onum == cte.c.content_onum) + ) + # 只取叶子节点 + filters.append( + DataStdMain.belt_data_std_content.in_( + select(DataAstContent.content_onum) + .where(DataAstContent.content_onum == cte.c.content_onum) + ) + ) + # === 查询 === + query = ( + select( + DataStdMain.onum, + DataStdMain.create_by, + DataStdMain.create_time, + DataStdMain.upd_prsn, + DataStdMain.upd_time, + DataStdMain.data_std_no, + DataStdMain.data_std_eng_name, + DataStdMain.data_std_cn_name, + DataStdMain.data_std_type, + DataStdMain.data_sec_lvl, + DataStdMain.src_sys, + DataStdMain.data_std_vest, + DataStdMain.data_std_busi_defn, + DataStdMain.cd_id, + DataStdMain.std_status, + DataStdMain.data_std_busi_ownership_dept, + DataStdMain.data_std_it_ownership_dept, + DataStdMain.data_std_busi_ownership_prsn, + DataStdMain.data_std_it_ownership_prsn, + DataStdMain.belt_data_std_content, + DataStdMain.data_std_src, + DataStdMain.data_clas, + DataStdMain.typical_fld, + DataStdCode.cd_no.label("cd_no") + ) + .outerjoin( + DataStdCode, + DataStdMain.cd_id == DataStdCode.onum + ) + .where(*filters) + .order_by(desc(DataStdMain.create_time)) + ) + + return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page) + @classmethod async def get_std_main_list_all(cls, db: AsyncSession, query_object: DataStdMainModel): filters = [] diff --git a/vue-fastapi-frontend/src/views/meta/metatask/secConfig.vue b/vue-fastapi-frontend/src/views/meta/metatask/secConfig.vue index 28a78fc..c3792ba 100644 --- a/vue-fastapi-frontend/src/views/meta/metatask/secConfig.vue +++ b/vue-fastapi-frontend/src/views/meta/metatask/secConfig.vue @@ -19,21 +19,7 @@ /> - - - - - + - - - + @@ -174,18 +174,12 @@ const total = ref(0) const loading = ref(false) const open = ref(false) const title = ref('') -// const handleObjValueChange = (selectedValues) => { -// // 根据当前对象类型获取对应的列表 -// const sourceList = form.value.objType === '0' -// ? userList.value -// : roleList.value; - -// // 转换选中的值为名称数组 -// const names = selectedValues.map(value => { -// const item = sourceList.find(item => item.id === value); -// return item ? item.name : ''; -// }); -// } +function handleObjValueChange(value) { + const selected = userOrRoleList.value.find(item => item.id === value) + form.objName = selected ? selected.name : '' // objName 保存展示名 +} + + const roleList = ref([]); const userList = ref([]); const userOrRoleList = ref([]); @@ -209,6 +203,7 @@ const form = reactive({ bizOnum: null, objType: '', objName: '', + objValue: '', isStop: null }) function changeMetaSecurityObj(data){ @@ -290,44 +285,51 @@ function openEditDialog(row) { ElMessage.warning('请选择一条记录进行编辑') return } - isAddMode.value = false - + isAddMode.value = false title.value = '编辑业务域权限配置' Object.assign(form, row) if(form.objType=="0"){ - userOrRoleList.value=roleList.value - }else{ - userOrRoleList.value=userList.value + userOrRoleList.value=roleList.value + } else { + userOrRoleList.value=userList.value } + + // 设置 objValue + const selected = userOrRoleList.value.find(item => item.name === row.objName) + form.objValue = selected ? selected.id : '' open.value = true } + function submitForm() { permFormRef.value.validate(async (valid) => { if (!valid) return try { - if (title.value.includes('新增')) { - const submitData = { - bizOnumList: form.bizOnum, // 传递数组 - objType: form.objType, - objName: form.objName, - isStop: form.isStop, - } - await addBizPermiConfig(submitData) - ElMessage.success('新增成功') - } else { - const submitData = { - onum: form.onum, // 传递数组 - bizOnum: form.bizOnum, // 传递数组 - objType: form.objType, - objName: form.objName, - isStop: form.isStop, - } - await updateBizPermiConfig(submitData) - ElMessage.success('编辑成功') - } +if (title.value.includes('新增')) { + const submitData = { + bizOnumList: form.bizOnum, + objType: form.objType, + objName: form.objName, + objValue: form.objValue, // 新增 + isStop: form.isStop, + } + await addBizPermiConfig(submitData) + ElMessage.success('新增成功') +} else { + const submitData = { + onum: form.onum, + bizOnum: form.bizOnum, + objType: form.objType, + objName: form.objName, + objValue: form.objValue, // 修改 + isStop: form.isStop, + } + await updateBizPermiConfig(submitData) + ElMessage.success('编辑成功') +} + open.value = false getList() } catch (error) {