Browse Source

Merge remote-tracking branch 'origin/master'

master
xueyinfei 4 weeks ago
parent
commit
eea389051c
  1. 28
      vue-fastapi-backend/module_admin/dao/datastd_dao.py
  2. 17
      vue-fastapi-frontend/src/views/meta/metatask/secConfig.vue
  3. 52
      vue-fastapi-frontend/src/views/metadataConfig/bizPermiConfig/index.vue

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

@ -1005,6 +1005,7 @@ class DataStdDao:
@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: if query_object.data_std_cn_name:
filters.append(DataStdMain.data_std_cn_name.like(f"%{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: if query_object.data_std_eng_name:
@ -1024,9 +1025,29 @@ class DataStdDao:
filters.append(DataStdMain.data_std_type == query_object.data_std_type) filters.append(DataStdMain.data_std_type == query_object.data_std_type)
if query_object.std_status: if query_object.std_status:
filters.append(DataStdMain.std_status == query_object.std_status) filters.append(DataStdMain.std_status == query_object.std_status)
# === 新增:目录过滤 ===
if query_object.belt_data_std_content: if query_object.belt_data_std_content:
filters.append(DataStdMain.belt_data_std_content == 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 = ( query = (
select( select(
DataStdMain.onum, DataStdMain.onum,
@ -1052,15 +1073,16 @@ class DataStdDao:
DataStdMain.data_std_src, DataStdMain.data_std_src,
DataStdMain.data_clas, DataStdMain.data_clas,
DataStdMain.typical_fld, DataStdMain.typical_fld,
DataStdCode.cd_no.label("cd_no") # 关联查询的cd_no DataStdCode.cd_no.label("cd_no")
) )
.outerjoin( # 使用left outer join确保即使没有关联code也能返回主表数据 .outerjoin(
DataStdCode, DataStdCode,
DataStdMain.cd_id == DataStdCode.onum DataStdMain.cd_id == DataStdCode.onum
) )
.where(*filters) .where(*filters)
.order_by(desc(DataStdMain.create_time)) .order_by(desc(DataStdMain.create_time))
) )
return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page) return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
@classmethod @classmethod

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: {

52
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){
@ -291,43 +286,50 @@ function openEditDialog(row) {
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,
objValue: form.objValue, //
isStop: form.isStop, isStop: form.isStop,
} }
await addBizPermiConfig(submitData) await addBizPermiConfig(submitData)
ElMessage.success('新增成功') ElMessage.success('新增成功')
} else { } else {
const submitData = { const submitData = {
onum: form.onum, // onum: form.onum,
bizOnum: form.bizOnum, // bizOnum: form.bizOnum,
objType: form.objType, objType: form.objType,
objName: form.objName, objName: form.objName,
objValue: form.objValue, //
isStop: form.isStop, isStop: form.isStop,
} }
await updateBizPermiConfig(submitData) await updateBizPermiConfig(submitData)
ElMessage.success('编辑成功') ElMessage.success('编辑成功')
} }
open.value = false open.value = false
getList() getList()
} catch (error) { } catch (error) {

Loading…
Cancel
Save