Browse Source

安全标签及数据标准问题处理

master
si@aidatagov.com 4 weeks ago
parent
commit
50f0cc37a0
  1. 140
      vue-fastapi-backend/module_admin/dao/datastd_dao.py
  2. 17
      vue-fastapi-frontend/src/views/meta/metatask/secConfig.vue
  3. 86
      vue-fastapi-frontend/src/views/metadataConfig/bizPermiConfig/index.vue

140
vue-fastapi-backend/module_admin/dao/datastd_dao.py

@ -1004,65 +1004,87 @@ class DataStdDao:
# ------------------------------------------------------------数据标准(658行)------------------------------------------------------------------------------------------------- # ------------------------------------------------------------数据标准(658行)-------------------------------------------------------------------------------------------------
@classmethod @classmethod
async def get_std_main_list(cls, db: AsyncSession, query_object: DataStdMainModel, is_page: bool = False): async def get_std_main_list(cls, db: AsyncSession, query_object: DataStdMainModel, is_page: bool = False):
filters = [] 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_cn_name:
if query_object.data_std_eng_name: filters.append(DataStdMain.data_std_cn_name.like(f"%{query_object.data_std_cn_name}%"))
filters.append( if query_object.data_std_eng_name:
or_( filters.append(
DataStdMain.data_std_cn_name.like(f"%{query_object.data_std_eng_name}%"), or_(
DataStdMain.data_std_eng_name.like(f"%{query_object.data_std_eng_name}%") 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_busi_defn:
if query_object.data_std_no: filters.append(DataStdMain.data_std_busi_defn.like(f"%{query_object.data_std_busi_defn}%"))
filters.append(DataStdMain.data_std_no.like(f"%{query_object.data_std_no}%")) if query_object.data_std_no:
if query_object.src_sys: filters.append(DataStdMain.data_std_no.like(f"%{query_object.data_std_no}%"))
filters.append(DataStdMain.src_sys == query_object.src_sys) if query_object.src_sys:
if query_object.data_std_type: filters.append(DataStdMain.src_sys == query_object.src_sys)
filters.append(DataStdMain.data_std_type == query_object.data_std_type) if query_object.data_std_type:
if query_object.std_status: filters.append(DataStdMain.data_std_type == query_object.data_std_type)
filters.append(DataStdMain.std_status == query_object.std_status) if query_object.std_status:
if query_object.belt_data_std_content: filters.append(DataStdMain.std_status == query_object.std_status)
filters.append(DataStdMain.belt_data_std_content == query_object.belt_data_std_content)
# === 新增:目录过滤 ===
query = ( if query_object.belt_data_std_content:
select( # 定义递归CTE
DataStdMain.onum, content_alias = aliased(DataAstContent) # 假设SQLAlchemy模型叫 DataStdContent
DataStdMain.create_by, cte = (
DataStdMain.create_time, select(DataAstContent.content_onum)
DataStdMain.upd_prsn, .where(DataAstContent.content_onum == query_object.belt_data_std_content)
DataStdMain.upd_time, .cte(name="content_cte", recursive=True)
DataStdMain.data_std_no, )
DataStdMain.data_std_eng_name,
DataStdMain.data_std_cn_name, cte = cte.union_all(
DataStdMain.data_std_type, select(content_alias.content_onum)
DataStdMain.data_sec_lvl, .where(content_alias.supr_content_onum == cte.c.content_onum)
DataStdMain.src_sys, )
DataStdMain.data_std_vest, # 只取叶子节点
DataStdMain.data_std_busi_defn, filters.append(
DataStdMain.cd_id, DataStdMain.belt_data_std_content.in_(
DataStdMain.std_status, select(DataAstContent.content_onum)
DataStdMain.data_std_busi_ownership_dept, .where(DataAstContent.content_onum == cte.c.content_onum)
DataStdMain.data_std_it_ownership_dept, )
DataStdMain.data_std_busi_ownership_prsn, )
DataStdMain.data_std_it_ownership_prsn, # === 查询 ===
DataStdMain.belt_data_std_content, query = (
DataStdMain.data_std_src, select(
DataStdMain.data_clas, DataStdMain.onum,
DataStdMain.typical_fld, DataStdMain.create_by,
DataStdCode.cd_no.label("cd_no") # 关联查询的cd_no DataStdMain.create_time,
) DataStdMain.upd_prsn,
.outerjoin( # 使用left outer join确保即使没有关联code也能返回主表数据 DataStdMain.upd_time,
DataStdCode, DataStdMain.data_std_no,
DataStdMain.cd_id == DataStdCode.onum DataStdMain.data_std_eng_name,
) DataStdMain.data_std_cn_name,
.where(*filters) DataStdMain.data_std_type,
.order_by(desc(DataStdMain.create_time)) DataStdMain.data_sec_lvl,
) DataStdMain.src_sys,
return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page) 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 @classmethod
async def get_std_main_list_all(cls, db: AsyncSession, query_object: DataStdMainModel): async def get_std_main_list_all(cls, db: AsyncSession, query_object: DataStdMainModel):
filters = [] filters = []

17
vue-fastapi-frontend/src/views/meta/metatask/secConfig.vue

@ -19,21 +19,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="任务类型" prop="metataskType">
<el-select
v-model="queryParams.metataskType"
placeholder="任务类型"
clearable
style="width: 240px"
>
<el-option
v-for="dict in meta_task_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="创建时间"> <el-form-item label="创建时间">
<el-date-picker <el-date-picker
v-model="dateRange" v-model="dateRange"
@ -473,7 +459,6 @@ const data = reactive({
status: "", status: "",
dsId: undefined, dsId: undefined,
metataskName: undefined, metataskName: undefined,
metataskType: undefined,
dbRCode: undefined dbRCode: undefined
}, },
rules: { rules: {

86
vue-fastapi-frontend/src/views/metadataConfig/bizPermiConfig/index.vue

@ -117,19 +117,19 @@
<el-option label="用户" value="1" /> <el-option label="用户" value="1" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- @change="handleObjValueChange" --> <el-form-item label="对象名称" prop="objValue">
<el-form-item label="对象名称" prop="objName">
<el-select <el-select
v-model="form.objName" v-model="form.objValue"
placeholder="请选择" placeholder="请选择"
maxlength="30" maxlength="30"
@change="handleObjValueChange"
> >
<el-option <el-option
v-for="dict in userOrRoleList" v-for="dict in userOrRoleList"
:key="dict.id" :key="dict.id"
:label="dict.name" :label="dict.name"
:value="dict.name" :value="dict.id"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -174,18 +174,12 @@ const total = ref(0)
const loading = ref(false) const loading = ref(false)
const open = ref(false) const open = ref(false)
const title = ref('') const title = ref('')
// const handleObjValueChange = (selectedValues) => { function handleObjValueChange(value) {
// // const selected = userOrRoleList.value.find(item => item.id === value)
// const sourceList = form.value.objType === '0' form.objName = selected ? selected.name : '' // objName
// ? userList.value }
// : roleList.value;
// //
// const names = selectedValues.map(value => {
// const item = sourceList.find(item => item.id === value);
// return item ? item.name : '';
// });
// }
const roleList = ref([]); const roleList = ref([]);
const userList = ref([]); const userList = ref([]);
const userOrRoleList = ref([]); const userOrRoleList = ref([]);
@ -209,6 +203,7 @@ const form = reactive({
bizOnum: null, bizOnum: null,
objType: '', objType: '',
objName: '', objName: '',
objValue: '',
isStop: null isStop: null
}) })
function changeMetaSecurityObj(data){ function changeMetaSecurityObj(data){
@ -290,44 +285,51 @@ function openEditDialog(row) {
ElMessage.warning('请选择一条记录进行编辑') ElMessage.warning('请选择一条记录进行编辑')
return return
} }
isAddMode.value = false isAddMode.value = false
title.value = '编辑业务域权限配置' title.value = '编辑业务域权限配置'
Object.assign(form, row) Object.assign(form, row)
if(form.objType=="0"){ if(form.objType=="0"){
userOrRoleList.value=roleList.value userOrRoleList.value=roleList.value
}else{ } else {
userOrRoleList.value=userList.value userOrRoleList.value=userList.value
} }
// objValue
const selected = userOrRoleList.value.find(item => item.name === row.objName)
form.objValue = selected ? selected.id : ''
open.value = true open.value = true
} }
function submitForm() { function submitForm() {
permFormRef.value.validate(async (valid) => { permFormRef.value.validate(async (valid) => {
if (!valid) return if (!valid) return
try { try {
if (title.value.includes('新增')) { if (title.value.includes('新增')) {
const submitData = { const submitData = {
bizOnumList: form.bizOnum, // bizOnumList: form.bizOnum,
objType: form.objType, objType: form.objType,
objName: form.objName, objName: form.objName,
isStop: form.isStop, objValue: form.objValue, //
} isStop: form.isStop,
await addBizPermiConfig(submitData) }
ElMessage.success('新增成功') await addBizPermiConfig(submitData)
} else { ElMessage.success('新增成功')
const submitData = { } else {
onum: form.onum, // const submitData = {
bizOnum: form.bizOnum, // onum: form.onum,
objType: form.objType, bizOnum: form.bizOnum,
objName: form.objName, objType: form.objType,
isStop: form.isStop, objName: form.objName,
} objValue: form.objValue, //
await updateBizPermiConfig(submitData) isStop: form.isStop,
ElMessage.success('编辑成功') }
} await updateBizPermiConfig(submitData)
ElMessage.success('编辑成功')
}
open.value = false open.value = false
getList() getList()
} catch (error) { } catch (error) {

Loading…
Cancel
Save