siyaqi 3 weeks ago
parent
commit
e17ce22b9e
  1. 1
      vue-fastapi-backend/module_admin/dao/datastd_dao.py
  2. 1
      vue-fastapi-backend/module_admin/entity/do/metasecurity_do.py
  3. 1
      vue-fastapi-backend/module_admin/entity/vo/metasecurity_vo.py
  4. 12
      vue-fastapi-backend/module_admin/service/datastd_service.py
  5. 2
      vue-fastapi-frontend/src/views/datastd/stddict/index.vue
  6. 30
      vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityCol.vue
  7. 230
      vue-fastapi-frontend/src/views/metadataConfig/metaclas/index.vue

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

@ -332,6 +332,7 @@ class DataStdDao:
DataStdDict.data_dict_data_type,
DataStdDict.data_std_no,
DataStdDict.data_dict_stat,
DataStdMain.data_std_cn_name.label("data_std_cn_name") ,
DataStdMain.data_std_it_ownership_dept.label("data_std_it_ownership_dept") ,
DataStdMain.data_std_busi_ownership_dept.label("data_std_busi_ownership_dept") ,
DataStdMain.data_std_it_ownership_prsn.label("data_std_it_ownership_prsn") ,

1
vue-fastapi-backend/module_admin/entity/do/metasecurity_do.py

@ -21,6 +21,7 @@ class MetaSecurityCol(Base):
dbCName = Column(String(500), default=None, comment='字段名称')
ctrl_type = Column(String(1), default=None, comment='控制类型(0:反向 1:正向)')
obj_type = Column(String(1), default=None, comment='对象类型(0:角色 1:用户)')
generate_type = Column(String(1), default=None, comment='生成方式(0:手工 1:业务域)')
obj_value = Column(Integer, default=None, comment='角色值')
obj_name = Column(String(50), default=None, comment='字段名称')
isStop = Column(Boolean, nullable=True, default=None, comment='是否停用(0:运行 1:停用)')

1
vue-fastapi-backend/module_admin/entity/vo/metasecurity_vo.py

@ -50,6 +50,7 @@ class MetaSecurityColModel(BaseModel):
update_by: Optional[str] = None
update_time: Optional[datetime] = None
dbRName: Optional[str] = None
generate_type: Optional[str] = None
dbRID: Optional[int] = None
dbSName: Optional[str] = None
dbTName: Optional[str] = None

12
vue-fastapi-backend/module_admin/service/datastd_service.py

@ -474,6 +474,9 @@ class DataStdService:
# 创建标准代码的审批记录(changeType 为 update)
appr_model = DataStdCodeApprModel(**code.model_dump(exclude_unset=True, by_alias=True))
last_appr= await DataStdDao.get_last_std_code_appr_by_id(query_db,code.onum)
if last_appr is None:
last_appr=DataStdCodeApprModel()
last_appr.onum=code.onum
appr_model.changeType = "update"
appr_model.compareId = last_appr.onum # 对比对象为正式表的 ID
appr_model.oldInstId = code.onum
@ -509,6 +512,9 @@ class DataStdService:
item_appr_model = DataStdCodeApprModel(**item.model_dump(exclude_unset=True, by_alias=True))
last_item_appr= await DataStdDao.get_last_std_code_appr_by_id(query_db,item_appr_model.onum)
if last_item_appr is None:
last_item_appr=DataStdCodeApprModel()
last_item_appr.onum=item_appr_model.onum
item_appr_model.changeType = "update"
item_appr_model.compareId = last_item_appr.onum
item_appr_model.parent_id = appr_model.onum
@ -1250,6 +1256,9 @@ class DataStdService:
if len(watingList)>0 : # 如果 watingList 存在,意味着标准正在审批中
raise ServiceException(message="标准正在审批中,请等待审批完成")
lastAppr =await DataStdDao.get_last_std_main_appr_by_id(query_db,model.onum)
if lastAppr is None:
lastAppr=DataStdDictApprModel()
lastAppr.onum=model.onum
apprModel = DataStdMainApprModel(**model.model_dump(exclude_unset=True, by_alias=True))
apprModel.changeType="edit"
apprModel.onum=str(uuid.uuid4())
@ -1274,6 +1283,9 @@ class DataStdService:
if len(watingList)>0 : # 如果 watingList 存在,意味着标准正在审批中
raise ServiceException(message="标准正在审批中,请等待审批完成")
lastAppr =await DataStdDao.get_last_std_dict_appr_by_id(query_db,model.onum)
if lastAppr is None:
lastAppr=DataStdDictApprModel()
lastAppr.onum=model.onum
apprModel = DataStdDictApprModel(**model.model_dump(exclude_unset=True, by_alias=True))
apprModel.changeType="edit"
apprModel.onum=str(uuid.uuid4())

2
vue-fastapi-frontend/src/views/datastd/stddict/index.vue

@ -142,7 +142,7 @@
@click="handleStdClick(row.dataStdNo)"
style="cursor: pointer"
>
<span >{{row.dataStdNo}}</span>
<span >{{row.dataStdCnName}}</span>
</el-link>
</template>
</el-table-column>

30
vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityCol.vue

@ -122,6 +122,16 @@
<span v-else>
{{ scope.row.objValue }}
</span>
</template>
</el-table-column>
<el-table-column label="生成方式" align="center" prop="generateType">
<template #default="scope">
<el-tag
:type="scope.row.generateType === '0' ? 'success' : 'primary'"
effect="plain"
>
{{ scope.row.generateType === '0' ? '手工配置' : '业务域跑批' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="是否停用" align="center" prop="isStop" >
@ -219,6 +229,22 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="生成方式" prop="generateType">
<el-select
v-model="form.generateType"
placeholder="请选择生成方式"
clearable
>
<el-option
label="手工配置"
value="0"
/>
<el-option
label="业务域跑批"
value="1"
/>
</el-select>
</el-form-item>
<el-form-item label="是否停用" prop="isStop">
<el-switch v-model="form.isStop" />
</el-form-item>
@ -288,6 +314,7 @@ const form = ref({
objType: '',
objValue: '',
objName: '',
generateType:'0',
isStop: false
});
const ids = ref([]);
@ -305,6 +332,7 @@ const formRules = {
dbCName: [{ required: true, message: '字段不能为空', trigger: 'blur' }],
dbRName: [{ required: true, message: '连接不能为空', trigger: 'blur' }],
dbTName: [{ required: true, message: '表名不能为空', trigger: 'blur' }],
generateType: [{ required: true, message: '生成方式不能为空', trigger: 'blur' }],
ctrlType: [{ required: true, message: '控制类型不能为空', trigger: 'change' }]
};
const dbResourceOldList = ref([]);
@ -464,6 +492,7 @@ function reset() {
dbSName: '',
dbTName: '',
dbCName: '',
generateType: '',
ctrlType: '',
objType: '',
objValue: dialogTitle.value === '添加列配置' ? [] : '', //
@ -496,6 +525,7 @@ const handleCancel = () => {
form.value.dbCName = '';
form.value.ctrlType = '';
form.value.ctrl_value = '';
form.value.generateType = '';
form.value.isStop = false;
};

230
vue-fastapi-frontend/src/views/metadataConfig/metaclas/index.vue

@ -2,197 +2,135 @@
<div class="app-container">
<el-row :gutter="10" class="mb8">
<el-form :inline="true" :model="queryForm">
<el-form-item label="归属系统">
<el-select v-model="queryForm.ssysCd" placeholder="请选择系统" clearable allow-create filterable style="width: 180px">
<el-option v-for="item in dsSysList" :key="item.id" :label="item.name" :value="item.name" />
</el-select>
</el-form-item>
<el-form-item label="模式名">
<el-input
v-model="queryForm.mdlName"
placeholder="请输入模式名"
clearable
/>
<el-input v-model="queryForm.mdlName" placeholder="请输入模式名" clearable />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleSearch"
>搜索</el-button
>
<el-button type="primary" icon="Search" @click="handleSearch">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-row>
<span> 值类型参数调整</span>
<el-divider content-position="center" ><span style=" font-size: 18px; font-weight: bold; ">值类型参数调整</span></el-divider>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="openAddDialog1"
>新增</el-button
>
<el-button type="primary" plain icon="Plus" @click="openAddDialog1">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="Edit"
:disabled="selectedRows1.length !== 1"
@click="openEditDialog1(selectedRows1[0])"
>修改</el-button
>
<el-button type="success" plain icon="Edit" :disabled="selectedRows1.length !== 1" @click="openEditDialog1(selectedRows1[0])">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="selectedRows1.length === 0"
@click="deleteSelected1"
>删除</el-button
>
<el-button type="danger" plain icon="Delete" :disabled="selectedRows1.length === 0" @click="deleteSelected1">删除</el-button>
</el-col>
</el-row>
<el-table
v-loading="loading"
:data="configList1"
@selection-change="handleSelectionChange1"
style="width: 100%"
height="500"
border
stripe
>
<el-table v-loading="loading" :data="configList1" @selection-change="handleSelectionChange1" style="width: 100%" height="400" border stripe>
<el-table-column type="selection" width="55" />
<el-table-column prop="datatype" label="值类型"/>
<el-table-column prop="ratio" label="阈值"/>
<el-table-column prop="updBy" label="更新人"/>
<el-table-column prop="datatype" label="值类型" />
<el-table-column prop="ratio" label="阈值" />
<el-table-column prop="updBy" label="更新人" />
<el-table-column prop="updTime" label="更新时间" />
</el-table>
<span> 业务类型参数调整</span>
<el-divider content-position="center" ><span style=" font-size: 18px; font-weight: bold; ">业务类型参数调整</span></el-divider>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="openAddDialog2"
>新增</el-button
>
<el-button type="primary" plain icon="Plus" @click="openAddDialog2">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="Edit"
:disabled="selectedRows2.length !== 1"
@click="openEditDialog2(selectedRows2[0])"
>修改</el-button
>
<el-button type="success" plain icon="Edit" :disabled="selectedRows2.length !== 1" @click="openEditDialog2(selectedRows2[0])">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="selectedRows2.length === 0"
@click="deleteSelected2"
>删除</el-button
>
<el-button type="danger" plain icon="Delete" :disabled="selectedRows2.length === 0" @click="deleteSelected2">删除</el-button>
</el-col>
</el-row>
<el-table
v-loading="loading"
:data="configList2"
@selection-change="handleSelectionChange2"
style="width: 100%"
height="500"
border
stripe
>
<el-table v-loading="loading" :data="configList2" @selection-change="handleSelectionChange2" style="width: 100%" height="400" border stripe>
<el-table-column type="selection" width="55" />
<el-table-column prop="regexName" label="业务类型"/>
<el-table-column prop="regexName" label="业务类型" />
<el-table-column prop="regexPattern" label="正则表达式" />
<el-table-column prop="ratio" label="阈值" />
<el-table-column prop="updBy" label="更新人" />
<el-table-column prop="updTime" label="更新时间" />
</el-table>
<span> 字段处理类型参数调整</span>
<el-form
ref="clasFormRef3"
:model="form3"
label-width="120px"
size="small"
>
<span>唯一类型数值类判定条件</span>
<el-form-item label="空值率小于" prop="config1">
<el-input v-model="form3.config1" autocomplete="off" />
</el-form-item>
<el-form-item label="值长度方差小于" prop="config2">
<el-input v-model.number="form3.config2" autocomplete="off" />
<el-divider content-position="center" ><span style=" font-size: 18px; font-weight: bold; ">字段处理类型参数调整</span></el-divider>
<div style="margin-bottom: 10px">
<span style="display: inline-block; font-size: 14px; font-weight: bold; margin-bottom: 4px">唯一类型数值类判定条件</span>
<el-form :inline="true" :model="form3" size="medium">
<el-form-item label="空值率小于">
<el-input v-model="form3.config1" style="width: 100px" />
</el-form-item>
<el-form-item label="重复率大于" prop="config3">
<el-input v-model.number="form3.config3" autocomplete="off" />
<el-form-item label="值长度方差小于">
<el-input v-model.number="form3.config2" style="width: 100px" />
</el-form-item>
<span>唯一类型非数值类判定条件</span>
<el-form-item label="重复率大于" prop="config4">
<el-input v-model.number="form3.config4" autocomplete="off" />
<el-form-item label="重复率大于">
<el-input v-model.number="form3.config3" style="width: 100px" />
</el-form-item>
<span>忽略类型数值类判断条件</span>
<el-form-item label="空值率大于" prop="config5">
<el-input v-model.number="form3.config5" autocomplete="off" />
</el-form>
</div>
<div style="margin-bottom: 10px">
<span style="display: inline-block; font-size: 14px; font-weight: bold; margin-bottom: 4px">唯一类型非数值类判定条件</span>
<el-form :inline="true" :model="form3" size="medium">
<el-form-item label="重复率大于">
<el-input v-model.number="form3.config4" style="width: 100px" />
</el-form-item>
<span>忽略类型其他判断条件</span>
<el-form-item label="平均值长大于" prop="config6">
<el-input v-model.number="form3.config6" autocomplete="off" />
</el-form>
</div>
<div style="border-top: 1px dashed #999; margin: 10px 0;"></div>
<div style="margin-bottom: 10px">
<span style="display: inline-block; font-size: 14px; font-weight: bold; margin-bottom: 4px">忽略类型数值类判断条件</span>
<el-form :inline="true" :model="form3" size="medium">
<el-form-item label="空值率大于">
<el-input v-model.number="form3.config5" style="width: 100px" />
</el-form-item>
</el-form>
</div>
<div style="margin-bottom: 10px">
<span style="display: inline-block; font-size: 14px; font-weight: bold; margin-bottom: 4px">忽略类型其他判断条件</span>
<el-form :inline="true" :model="form3" size="medium">
<el-form-item label="平均值长大于">
<el-input v-model.number="form3.config6" style="width: 100px" />
</el-form-item>
<el-form-item >
<el-button type="primary" @click="submitForm3">保存</el-button>
<el-dialog
:title="title"
v-model="open1"
width="500px"
append-to-body
:before-close="handleClose1"
>
<el-form
ref="clasFormRef1"
:model="form1"
:rules="rules1"
label-width="120px"
size="small"
>
</el-form-item>
</el-form>
</div>
<el-dialog :title="title" v-model="open1" width="500px" append-to-body :before-close="handleClose1">
<el-form ref="clasFormRef1" :model="form1" :rules="rules1" label-width="120px" size="medium">
<el-form-item label="值类型" prop="datatype">
<el-input v-model="form1.datatype" autocomplete="off" />
</el-form-item>
<el-form-item label="阈值" prop="ratio">
<el-input v-model.number="form1.ratio" autocomplete="off" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="open1 = false">取消</el-button>
<el-button type="primary" @click="submitForm1">保存</el-button>
</template>
</el-dialog>
<el-dialog
:title="title"
v-model="open2"
width="500px"
append-to-body
:before-close="handleClose2"
>
<el-form
ref="clasFormRef2"
:model="form2"
:rules="rules2"
label-width="120px"
size="small"
>
<el-dialog :title="title" v-model="open2" width="500px" append-to-body :before-close="handleClose2">
<el-form ref="clasFormRef2" :model="form2" :rules="rules2" label-width="120px" size="small">
<el-form-item label="业务类型" prop="regexName">
<el-input v-model="form2.regexName" autocomplete="off" />
</el-form-item>
@ -202,7 +140,6 @@
<el-form-item label="阈值" prop="ratio">
<el-input v-model.number="form2.ratio" autocomplete="off" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="open2 = false">取消</el-button>
@ -212,6 +149,7 @@
</div>
</template>
<script setup>
import { ref, reactive, onMounted } from "vue";
import { ElMessageBox, ElMessage } from "element-plus";
@ -390,7 +328,7 @@ function deleteSelected1() {
).then(async () => {
try {
for (const row of selectedRows1.value) {
await deleteDatatypeLabel(row.clasOnum);
await deleteDatatypeLabel(row.onum);
}
ElMessage.success("删除成功");
getList1();
@ -479,3 +417,33 @@ onMounted(() => {
getList3();
});
</script>
<style scoped>
.app-container {
padding: 20px;
background: #fff;
}
.section-block {
margin-top: 30px;
}
.section-header {
font-weight: bold;
font-size: 14px;
margin-bottom: 12px;
}
.action-bar {
margin-bottom: 10px;
display: flex;
gap: 10px;
}
.filter-form {
margin-bottom: 10px;
}
.config-form {
max-width: 600px;
padding: 20px 10px;
background-color: #f9f9f9;
border-radius: 8px;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
}
</style>

Loading…
Cancel
Save