Browse Source

Merge remote-tracking branch 'origin/master'

master
xueyinfei 4 weeks ago
parent
commit
3c271c8503
  1. 1
      vue-fastapi-backend/module_admin/entity/do/datastd_do.py
  2. 1
      vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py
  3. 6
      vue-fastapi-backend/module_admin/service/approval_service.py
  4. 37
      vue-fastapi-backend/module_admin/service/data_asset_service.py
  5. 14
      vue-fastapi-backend/module_admin/service/datastd_service.py
  6. 22
      vue-fastapi-frontend/src/views/dataAsset/assetDetail/index.vue
  7. 8
      vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityCol.vue
  8. 8
      vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityRow.vue

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

@ -49,6 +49,7 @@ class DataStdCodeAppr(Base):
changeType = Column(String(10), default=None, comment='变更类型')
flowId = Column(String(50), default=None, comment='审批Id')
oldInstId = Column(String(50), default=None, comment='原始正式id')
oldParentId = Column(String(50), default=None, comment='原始正式id')
compareId = Column(String(50), default=None, comment='原始数据id(用于对比差异)')
approStatus = Column(String(10), default=None,
comment='审批状态(waiting,申请中,pending审核中,succeed,rejected已审核,canceled已取消)')

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

@ -37,6 +37,7 @@ class DataStdCodeApprModel(DataStdCodeModel):
changeType: Optional[str] = Field(default=None, description='变更类型')
flowId: Optional[str] = Field(default=None, description='审批Id')
oldInstId: Optional[str] = Field(default=None, description='原始正式id')
oldParentId: Optional[str] = Field(default=None, description='正式父id')
compareId: Optional[str] = Field(default=None, description='原始数据id(用于对比差异)')
approStatus: Optional[str] = Field(default=None,
description='审批状态(waiting,申请中,pending审核中,succeed,rejected已审核,canceled已取消)')

6
vue-fastapi-backend/module_admin/service/approval_service.py

@ -215,16 +215,18 @@ class ApprovalService:
change_type = appr_model.changeType
if operateType == 'succeed':
if change_type == "add":
main_model = DataStdCodeModel(**appr_model.model_dump(exclude_unset=True, by_alias=True))
main_model.parent_id = appr_model.oldParentId
await DataStdDao.add_std_code(result_db, main_model)
elif change_type == "update":
# 使用 oldInstId 作为主键
main_model = DataStdCodeModel(**appr_model.model_dump(exclude_unset=True, by_alias=True))
main_model.parent_id = appr_model.oldParentId
main_model.onum = appr_model.oldInstId
await DataStdDao.update_std_code(result_db, main_model.model_dump(exclude_unset=True))
elif change_type == "delete":

37
vue-fastapi-backend/module_admin/service/data_asset_service.py

@ -5,6 +5,7 @@ from exceptions.exception import ServiceException
from typing import Dict, Any, List
from utils.common_util import export_list2excel
import json
class DataAssetService:
"""
@ -183,7 +184,9 @@ class DataAssetService:
# 处理状态字段
cleaned_item["dataAstStat"] = "有效" if cleaned_item.get("dataAstStat") == "有效" else "废弃"
cleaned_item["dataAstClas"] = format_asset_tags(
cleaned_item.get("dataAstClas")
)
# 按mapping_dict的键顺序构建数据
mapped_item = {
mapping_dict[key]: cleaned_item.get(key, "")
@ -192,4 +195,34 @@ class DataAssetService:
new_data.append(mapped_item)
# 直接调用export_list2excel,只传入数据参数
return export_list2excel(new_data)
return export_list2excel(new_data)
import json
def format_asset_tags(value):
"""
将资产标签转为clasName:clasValueclasName:clasValue
"""
if not value:
return ""
# 如果是字符串,尝试反序列化
if isinstance(value, str):
try:
value = json.loads(value)
except Exception:
return value # 非 JSON,直接原样返回
# 如果不是 list,直接返回字符串
if not isinstance(value, list):
return str(value)
result = []
for item in value:
if not isinstance(item, dict):
continue
name = item.get("clasName", "")
val = item.get("clasValue", "")
if name or val:
result.append(f"{name}:{val}")
return "".join(result)

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

@ -427,7 +427,7 @@ class DataStdService:
item.upd_time = datetime.now()
item.src_sys = '公司级' if 'company' == item.cd_type else item.src_sys
item.parent_id = appr_model.onum # 设置父级 ID
# 校验代码项是否已存在于正式表中
if not await cls.check_code_unique_services(query_db, item):
raise ServiceException(message=f'代码项{item.cd_no}已经存在于正式表中,无法新增')
@ -439,7 +439,8 @@ class DataStdService:
item_appr_model.oldInstId = item.onum
item_appr_model.approStatus = "waiting"
item_appr_model.flowId = appr_model.flowId # 使用相同的 Flow ID
item_appr_model.oldParentId = item.parent_id
await DataStdDao.add_std_code_appr(query_db, item_appr_model)
# 创建审批申请
@ -562,6 +563,7 @@ class DataStdService:
item_appr_model.changeType = "update"
item_appr_model.compareId = last_item_appr.onum
item_appr_model.parent_id = appr_model.onum
item_appr_model.oldParentId = item.parent_id
item_appr_model.oldInstId = item.onum
item_appr_model.approStatus = "waiting"
item_appr_model.flowId = appr_model.flowId
@ -584,6 +586,7 @@ class DataStdService:
item_appr_model.approStatus = "waiting"
item_appr_model.flowId = appr_model.flowId
item_appr_model.parent_id = appr_model.onum
item_appr_model.oldParentId = item.parent_id
await DataStdDao.add_std_code_appr(query_db, item_appr_model)
for old_item in code_item_list_old:
@ -598,7 +601,7 @@ class DataStdService:
delete_appr_model.flowId = appr_model.flowId
delete_appr_model.onum = str(uuid.uuid4())
delete_appr_model.parent_id = appr_model.onum
delete_appr_model.oldParentId = item.onum
delete_appr_model.create_by = current_user.user.user_name
delete_appr_model.create_time = datetime.now()
@ -2288,6 +2291,7 @@ class DataStdService:
parent_appr.flowId = batch_flow_id
await DataStdDao.add_std_code_appr(query_db, parent_appr)
parent_appr_onum = parent_appr.onum
Old_parent_appr_onum = exist_parent.onum
else:
# 父级新增审批
parent_model.onum = str(uuid.uuid4())
@ -2302,7 +2306,7 @@ class DataStdService:
parent_appr.flowId = batch_flow_id
await DataStdDao.add_std_code_appr(query_db, parent_appr)
parent_appr_onum = parent_appr.onum
Old_parent_appr_onum = parent_appr.onum
# 处理代码项(组内每行)
for row_idx, row in group.iterrows():
row_display = int(row_idx) + 2
@ -2343,6 +2347,7 @@ class DataStdService:
item_appr.compareId = last_item_appr.onum if last_item_appr else item_model.onum
item_appr.oldInstId = item_model.onum
item_appr.parent_id = parent_appr_onum
item_appr.oldParentId = Old_parent_appr_onum
item_appr.approStatus = "waiting"
item_appr.flowId = batch_flow_id
await DataStdDao.add_std_code_appr(query_db, item_appr)
@ -2357,6 +2362,7 @@ class DataStdService:
item_appr.compareId = item_model.onum
item_appr.oldInstId = item_model.onum
item_appr.parent_id = parent_appr_onum
item_appr.oldParentId = Old_parent_appr_onum
item_appr.approStatus = "waiting"
item_appr.flowId = batch_flow_id
await DataStdDao.add_std_code_appr(query_db, item_appr)

22
vue-fastapi-frontend/src/views/dataAsset/assetDetail/index.vue

@ -33,10 +33,14 @@
<el-input v-model="queryParams.name" placeholder="请输入名称" clearable style="width: 160px"
@keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="类型" prop="dataAstType">
<!-- <el-form-item label="类型" prop="dataAstType">
<el-select v-model="queryParams.dataAstType" placeholder="请选择" clearable style="width: 160px">
<el-option v-for="(item, index) in dataAstType_list" :key="index" :label="item" :value="item" />
<el-option v-for="(item, index) in dataAstType_list" :key="index" :label="item.label" :value="item.value" />
</el-select>
</el-form-item> -->
<el-form-item label="类型" prop="dataAstType">
<el-input v-model="queryParams.dataAstType" placeholder="请输入" clearable style="width: 160px"
@keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="标签" prop="dataAstClas">
<el-input v-model="queryParams.dataAstClas" placeholder="请输入" clearable style="width: 160px"
@ -111,7 +115,11 @@
<el-table-column label="常见问题" align="center" width="150" key="" prop="dataAstFaq" v-if="columns[9].visible" />
<el-table-column label="负责人" align="center" width="150" key="" prop="dataAstCont" v-if="columns[10].visible" />
<el-table-column label="建立时间" align="center" width="200" key="" prop="dataAstEstbTime" v-if="columns[11].visible" />
<el-table-column label="更新时间" align="center" width="200" key="" prop="dataAstUpdTime" v-if="columns[12].visible" />
<el-table-column label="更新时间" align="center" prop="dataAstUpdTime" v-if="columns[12].visible" width="160">
<template #default="scope">
<span>{{ parseTime(scope.row.dataAstUpdTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="100" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="修改" placement="top">
@ -498,7 +506,7 @@ const handleDelete = (row) => {
}
const handleExport = () => {
proxy.download("/default-api/system/dataAsset/export", {
proxy.download("/system/dataAsset/export", {
...queryParams.value,
}, `dataAsset_${new Date().getTime()}.xlsx`);
}
@ -525,7 +533,11 @@ const handleSelectionChange = (selection) => {
// });
const dataAstType_list = computed(() => {
return ['表', '报表','其他应用'];
return [
{ label: '表', value: 'TABLE' },
{ label: '报表', value: '报表' },
{ label: '其他应用', value: '其他应用' }
];
});

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

@ -46,8 +46,8 @@
<el-form-item label="字段名" prop="dbCName">
<el-input v-model="queryParams.dbCName" placeholder="请输入字段名称" clearable style="width: 220px"/>
</el-form-item>
<el-form-item label="对象编号" prop="objValue">
<el-input v-model="queryParams.objName" placeholder="请输入对象编号" clearable style="width: 220px"/>
<el-form-item label="对象名称" prop="objValue">
<el-input v-model="queryParams.objName" placeholder="请输入对象名称" clearable style="width: 220px"/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>
@ -111,7 +111,7 @@
/>
</template>
</el-table-column>
<el-table-column label="对象编号" align="center" prop="objValue" >
<el-table-column label="对象名称" align="center" prop="objValue" >
<template #default="scope">
<span v-if="scope.row.objType === '0'">
{{ getUserName(scope.row.objValue) }}
@ -230,7 +230,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="对象编号" prop="objValue">
<el-form-item label="对象名称" prop="objValue">
<el-select
v-model="form.objValue"
@change="handleObjValueChange"

8
vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityRow.vue

@ -46,8 +46,8 @@
<el-form-item label="字段名" prop="dbCName">
<el-input v-model="queryParams.dbCName" placeholder="请输入字段名" clearable style="width: 220px"/>
</el-form-item>
<el-form-item label="对象编号" prop="objValue">
<el-input v-model="queryParams.objName" placeholder="请输入对象编号" clearable style="width: 220px"/>
<el-form-item label="对象名称" prop="objValue">
<el-input v-model="queryParams.objName" placeholder="请输入对象名称" clearable style="width: 220px"/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery">搜索</el-button>
@ -113,7 +113,7 @@
/>
</template>
</el-table-column>
<el-table-column label="对象编号" align="center" prop="objValue" >
<el-table-column label="对象名称" align="center" prop="objValue" >
<template #default="scope">
<span v-if="scope.row.objType === '0'">
{{ getUserName(scope.row.objValue) }}
@ -220,7 +220,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="对象编号" prop="objValue">
<el-form-item label="对象名称" prop="objValue">
<el-select
v-model="form.objValue"
placeholder="请选择"

Loading…
Cancel
Save