Browse Source

重构数据标准

master
si@aidatagov.com 3 weeks ago
parent
commit
70122a5cd0
  1. 140
      vue-fastapi-backend/module_admin/dao/datastd_dao.py
  2. 7
      vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py
  3. 14
      vue-fastapi-backend/module_admin/service/datastd_service.py
  4. 487
      vue-fastapi-frontend/src/views/datastd/main/components/AddEditForm.vue
  5. 53
      vue-fastapi-frontend/src/views/datastd/main/index.vue
  6. 6
      vue-fastapi-frontend/src/views/datastd/stddict/AddEditForm.vue
  7. 14
      vue-fastapi-frontend/src/views/datastd/stddict/index.vue

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

@ -25,58 +25,7 @@ class DataStdDao:
filters.append(DataStdCodeAppr.flowId == flowId) filters.append(DataStdCodeAppr.flowId == flowId)
query = select(DataStdCodeAppr).where(*filters).order_by(desc(DataStdCodeAppr.create_time)) query = select(DataStdCodeAppr).where(*filters).order_by(desc(DataStdCodeAppr.create_time))
return await PageUtil.paginate(db, query, 0, 0, False) return await PageUtil.paginate(db, query, 0, 0, False)
# @classmethod
# async def get_std_code_list(cls, db: AsyncSession, query_object: DataStdCodeModel, is_page: bool = False):
# """
# 获取 DataStdCode 的列表信息,支持模糊查询和分页
# :param db: ORM对象
# :param query_object: 查询参数对象
# :param is_page: 是否开启分页
# :return: 列表信息
# """
# # 构建查询条件
# filters = []
# if query_object.cd_val_cn_mean:
# filters.append(DataStdCode.cd_val_cn_mean.like(f"%{query_object.cd_val_cn_mean}%"))
# if query_object.cd_no:
# filters.append( or_(
# DataStdCode.cd_val_cn_mean.like(f"%{query_object.cd_no}%"),
# DataStdCode.cd_no.like(f"%{query_object.cd_no}%")
# ))
# if query_object.cd_val_stat:
# filters.append(DataStdCode.cd_val_stat==query_object.cd_val_stat)
# if query_object.src_sys:
# filters.append(DataStdCode.src_sys==query_object.src_sys)
# if query_object.cd_type:
# filters.append(DataStdCode.cd_type==query_object.cd_type)
# if query_object.class_id:
# filters.append(DataStdCode.class_id==query_object.class_id)
# if query_object.class_id=='codeItem' and not query_object.parent_id:
# filters.append(1==2)
# if query_object.parent_id:
# filters.append(DataStdCode.parent_id==query_object.parent_id)
# # 构建查询语句
# # query = (
# # select(DataStdCode)
# # .where(*filters)
# # .order_by(desc(DataStdCode.create_time)) # 按创建时间降序排序
# # )
# alias_map = aliased(DataStdCode)
# query = (
# select(
# DataStdCode,
# alias_map.cd_val_cn_mean.label("code_map_cn")
# )
# .outerjoin(alias_map, DataStdCode.code_map_id == alias_map.onum)
# .where(*filters)
# .order_by(desc(DataStdCode.create_time))
# )
# # 分页处理
# col_list = await PageUtil.paginate(
# db, query, query_object.page_num, query_object.page_size, is_page
# )
# return col_list
@classmethod @classmethod
async def get_std_code_list(cls, db: AsyncSession, query_object: DataStdCodeModel, is_page: bool = False): async def get_std_code_list(cls, db: AsyncSession, query_object: DataStdCodeModel, is_page: bool = False):
""" """
@ -363,8 +312,7 @@ class DataStdDao:
filters.append(DataStdDict.data_dict_data_type == query_object.data_dict_data_type) filters.append(DataStdDict.data_dict_data_type == query_object.data_dict_data_type)
if query_object.data_dict_stat: if query_object.data_dict_stat:
filters.append(DataStdDict.data_dict_stat == query_object.data_dict_stat) filters.append(DataStdDict.data_dict_stat == query_object.data_dict_stat)
c1 = aliased(SysDept) # 技术部门 c1 = aliased(DataStdDict) # 技术部门
c2 = aliased(SysDept) # 业务部门
# 构建查询语句 # 构建查询语句
query = ( query = (
select(DataStdDict.onum, select(DataStdDict.onum,
@ -382,12 +330,20 @@ class DataStdDao:
DataStdDict.data_dict_busi_mean, DataStdDict.data_dict_busi_mean,
DataStdDict.data_dict_data_type, DataStdDict.data_dict_data_type,
DataStdDict.data_std_no, DataStdDict.data_std_no,
DataStdDict.data_dict_stat DataStdDict.data_dict_stat,
).select_from(DataStdDict) 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") ,
DataStdMain.data_std_busi_ownership_prsn.label("data_std_busi_ownership_prsn")
)
.outerjoin( # 使用left outer join确保即使没有关联code也能返回主表数据
DataStdDict,
DataStdMain.data_std_no == DataStdDict.data_std_no
)
.where(*filters) .where(*filters)
.order_by(desc(DataStdDict.create_time)) # 按创建时间降序排序 .order_by(desc(DataStdDict.create_time)) # 按创建时间降序排序
) )
# 分页处理 # 分页处理
col_list = await PageUtil.paginate( col_list = await PageUtil.paginate(
db, query, query_object.page_num, query_object.page_size, is_page db, query, query_object.page_num, query_object.page_size, is_page
@ -831,7 +787,40 @@ class DataStdDao:
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) filters.append(DataStdMain.belt_data_std_content == query_object.belt_data_std_content)
query = select(DataStdMain).where(*filters).order_by(desc(DataStdMain.create_time)) 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.securityLevel,
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) 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):
@ -849,7 +838,40 @@ 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)
query = select(DataStdMain).where(*filters).order_by(desc(DataStdMain.create_time)) 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.securityLevel,
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, 0, 0, False) return await PageUtil.paginate(db, query, 0, 0, False)
@classmethod @classmethod
async def add_std_main(cls, db: AsyncSession, model: DataStdMainModel): async def add_std_main(cls, db: AsyncSession, model: DataStdMainModel):

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

@ -108,15 +108,14 @@ class DataStdMainModel(BaseModel):
data_std_cn_name: Optional[str] = Field(default=None, description='标准中文名') data_std_cn_name: Optional[str] = Field(default=None, description='标准中文名')
data_std_type: Optional[str] = Field(default=None, description='标准类型(0:基础数据 1:指标数据)') data_std_type: Optional[str] = Field(default=None, description='标准类型(0:基础数据 1:指标数据)')
securityLevel: Optional[str] = Field(default=None, description='安全等级') securityLevel: Optional[str] = Field(default=None, description='安全等级')
src_sys: Optional[str] = Field(default=None, description='归属系统') src_sys: Optional[int] = Field(default=None, description='归属系统')
data_std_busi_defn: Optional[str] = Field(default=None, description='标准业务定义') data_std_busi_defn: Optional[str] = Field(default=None, description='标准业务定义')
cd_no: Optional[str] = Field(default=None, description='代码编号')
cd_id: Optional[str] = Field(default=None, description='代码id') cd_id: Optional[str] = Field(default=None, description='代码id')
std_status: Optional[str] = Field(default=None, description='标准状态(1:有效 0:无效)') std_status: Optional[str] = Field(default=None, description='标准状态(1:有效 0:无效)')
data_std_busi_ownership_dept: Optional[str] = Field(default=None, description='业务认责部门') data_std_busi_ownership_dept: Optional[str] = Field(default=None, description='业务认责部门')
data_std_it_ownership_dept: Optional[str] = Field(default=None, description='技术认责部门') data_std_it_ownership_dept: Optional[str] = Field(default=None, description='技术认责部门')
buss_user: Optional[str] = Field(default=None, description='业务认责人员') data_std_busi_ownership_prsn: Optional[str] = Field(default=None, description='业务认责人员')
tech_user: Optional[str] = Field(default=None, description='技术认责人员') data_std_it_ownership_prsn: Optional[str] = Field(default=None, description='技术认责人员')
belt_data_std_content: Optional[int] = Field(default=None, description='分类') belt_data_std_content: Optional[int] = Field(default=None, description='分类')
data_std_src: Optional[str] = Field(default=None, description='标准来源') data_std_src: Optional[str] = Field(default=None, description='标准来源')
data_clas: Optional[str] = Field(default=None, description='数据类别') data_clas: Optional[str] = Field(default=None, description='数据类别')

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

@ -838,7 +838,7 @@ class DataStdService:
raise ServiceException(message=f"创建目录时发生错误: {str(e)}") raise ServiceException(message=f"创建目录时发生错误: {str(e)}")
@classmethod @classmethod
async def edit_catalog_leaf_services(cls, query_db: AsyncSession,belt_data_std_content : int, leaf_node_flag : int): async def edit_catalog_leaf_services(cls, query_db: AsyncSession,content_onum : int, leaf_node_flag : int):
""" """
编辑数据目录信息service 编辑数据目录信息service
@ -847,7 +847,7 @@ class DataStdService:
:return: 编辑目录操作结果 :return: 编辑目录操作结果
""" """
catalog_data1 = { catalog_data1 = {
'belt_data_std_content': belt_data_std_content, 'content_onum': content_onum,
'leaf_node_flag': leaf_node_flag 'leaf_node_flag': leaf_node_flag
} }
try: try:
@ -870,7 +870,7 @@ class DataStdService:
""" """
catalog_data = { catalog_data = {
'belt_data_std_content': request.belt_data_std_content, 'content_onum': request.content_onum,
'content_name': request.content_name, 'content_name': request.content_name,
'content_stat': request.content_stat, 'content_stat': request.content_stat,
'content_intr': request.content_intr, 'content_intr': request.content_intr,
@ -973,7 +973,7 @@ class DataStdService:
""" """
moved_catalog_data = { moved_catalog_data = {
'belt_data_std_content': request.belt_data_std_content, 'content_onum': request.content_onum,
'supr_content_onum': request.supr_content_onum, 'supr_content_onum': request.supr_content_onum,
'supr_content_onum_after': request.supr_content_onum_after 'supr_content_onum_after': request.supr_content_onum_after
} }
@ -998,7 +998,7 @@ class DataStdService:
""" """
merge_catalog_data = { merge_catalog_data = {
'belt_data_std_content': request.belt_data_std_content, 'content_onum': request.content_onum,
'supr_content_onum': request.supr_content_onum, 'supr_content_onum': request.supr_content_onum,
'content_onum_after': request.content_onum_after, 'content_onum_after': request.content_onum_after,
'supr_content_onum_after': request.supr_content_onum_after 'supr_content_onum_after': request.supr_content_onum_after
@ -1021,7 +1021,7 @@ class DataStdService:
removerel_catalog_data = { removerel_catalog_data = {
'rela_onum': request.rela_onum, 'rela_onum': request.rela_onum,
'belt_data_std_content': request.belt_data_std_content, 'content_onum': request.content_onum,
'ast_onum': request.ast_onum, 'ast_onum': request.ast_onum,
'rela_type': request.rela_type, 'rela_type': request.rela_type,
'rela_eff_begn_date': request.rela_eff_begn_date, 'rela_eff_begn_date': request.rela_eff_begn_date,
@ -1050,7 +1050,7 @@ class DataStdService:
moverel_catalog_data = { moverel_catalog_data = {
'rela_onum': request.rela_onum, 'rela_onum': request.rela_onum,
'belt_data_std_content': request.belt_data_std_content, 'content_onum': request.content_onum,
'content_onum_after': request.content_onum_after 'content_onum_after': request.content_onum_after
} }

487
vue-fastapi-frontend/src/views/datastd/main/components/AddEditForm.vue

@ -1,35 +1,81 @@
<template> <template>
<el-dialog width="500px" append-to-body :title="isShow?'查看数据标准':isEdit ? '修改数据标准' : '新增数据标准'" v-model="visible" @close="handleClose"> <el-dialog
<el-form :model="formData" ref="formRef" label-width="120px" :rules="formRules"> width="500px"
append-to-body
:title="isShow ? '查看数据标准' : isEdit ? '修改数据标准' : '新增数据标准'"
<el-form-item label="标准编号" prop="dataStdNo"> v-model="visible"
<el-input v-model="formData.dataStdNo" :disabled="isEdit" placeholder="请输入标准编号" clearable /> @close="handleClose"
>
<el-form
:model="formData"
ref="formRef"
label-width="120px"
:rules="formRules"
>
<el-form-item label="标准编号" prop="dataStdNo">
<el-input
v-model="formData.dataStdNo"
:disabled="isEdit || isShow"
placeholder="请输入标准编号"
clearable
/>
</el-form-item> </el-form-item>
<el-form-item label="标准中文名" prop="dataStdCnName"> <el-form-item label="标准中文名" prop="dataStdCnName">
<el-input v-model="formData.dataStdCnName" placeholder="请输入标准中文名" clearable /> <el-input
v-model="formData.dataStdCnName"
:disabled="isShow"
placeholder="请输入标准中文名"
clearable
/>
</el-form-item> </el-form-item>
<el-form-item label="标准英文名" prop="dataStdNo">
<el-input v-model="formData.dataStdNo" placeholder="请输入标准英文名" clearable /> <el-form-item label="标准英文名" prop="dataStdEngName">
<el-input
v-model="formData.dataStdEngName"
:disabled="isShow"
placeholder="请输入标准英文名"
clearable
/>
</el-form-item> </el-form-item>
<el-form-item label="标准业务定义" prop="dataStdBusiDefn"> <el-form-item label="标准业务定义" prop="dataStdBusiDefn">
<el-input v-model="formData.dataStdBusiDefn" placeholder="请输入标准业务定义" clearable /> <el-input
v-model="formData.dataStdBusiDefn"
:disabled="isShow"
placeholder="请输入标准业务定义"
clearable
/>
</el-form-item> </el-form-item>
<el-form-item label="标准类型" prop="dataStdType"> <el-form-item label="标准类型" prop="dataStdType">
<el-select v-model="formData.dataStdType" placeholder="请输入标准类型"> <el-select
v-model="formData.dataStdType"
:disabled="isShow"
placeholder="请选择标准类型"
>
<el-option label="基础数据" value="0" /> <el-option label="基础数据" value="0" />
<el-option label="指标数据" value="1" /> <el-option label="指标数据" value="1" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="标准来源" prop="stdSrc">
<el-select v-model="formData.stdSrc" placeholder="请选择标准来源"> <el-form-item label="标准来源" prop="dataStdSrc">
<el-select
v-model="formData.dataStdSrc"
:disabled="isShow"
placeholder="请选择标准来源"
>
<el-option label="行业标准" value="行业标准" /> <el-option label="行业标准" value="行业标准" />
<el-option label="自建标准" value="自建标准" /> <el-option label="自建标准" value="自建标准" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="数据类别" prop="dataClas">
<el-select v-model="formData.dataClas" placeholder="请选择数据类别"> <el-form-item label="数据类别" prop="dataClas">
<el-select
v-model="formData.dataClas"
:disabled="isShow"
placeholder="请选择数据类别"
>
<el-option label="日期类" value="日期类" /> <el-option label="日期类" value="日期类" />
<el-option label="文本类" value="文本类" /> <el-option label="文本类" value="文本类" />
<el-option label="数值类" value="数值类" /> <el-option label="数值类" value="数值类" />
@ -38,88 +84,108 @@
<el-option label="标志类" value="标志类" /> <el-option label="标志类" value="标志类" />
<el-option label="码值类" value="码值类" /> <el-option label="码值类" value="码值类" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="来源系统" prop="srcSys">
<el-form-item label="来源系统" prop="srcSys">
<el-select <el-select
v-model="formData.sourceSystem" v-model="formData.srcSys"
placeholder="请选择来源系统" :disabled="isShow"
maxlength="30" placeholder="请选择来源系统"
@change="dataChange" @change="handleSystemChange"
> >
<el-option <el-option
v-for="dict in dbResourceOldList" v-for="dict in dbResourceOldList"
:key="dict.id" :key="dict.id"
:label="dict.name" :label="dict.name"
:value="dict.name" :value="dict.id"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="安全等级" prop="securityLevel"> <el-form-item label="安全等级" prop="securityLevel">
<el-select v-model="formData.securityLevel" placeholder="请选择安全等级"> <el-select
<el-option label="1" value="1" /> v-model="formData.securityLevel"
<el-option label="2" value="2" /> :disabled="isShow"
<el-option label="3" value="3" /> placeholder="请选择安全等级"
<el-option label="4" value="4" /> >
<el-option label="1级" value="1" />
<el-option label="2级" value="2" />
<el-option label="3级" value="3" />
<el-option label="4级" value="4" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="代码编号" prop="cdNo">
<el-form-item label="代码编号" prop="cdId">
<el-input <el-input
v-model="formData.cdNo" v-model="formData.cdNo"
placeholder="请输入代码编号" placeholder="代码编号"
clearable clearable
style="width: 80%;" style="width: 80%;"
:disabled="true" :disabled="true"
/> />
<el-button <el-button
icon="Edit"
icon="Edit" :disabled="isShow"
:disabled="single" @click="codeVisible = true"
@click="codeVisible = true" style="margin-left: 5px;"
style="margin-left: 5px;" />
v-hasPermi="['meta:metaSecurityCol:edit']" </el-form-item>
></el-button>
</el-form-item>
<el-form-item label="业务认责部门" prop="dataStdBusiOwnershipDept"> <el-form-item label="业务认责部门" prop="dataStdBusiOwnershipDept">
<el-tree-select <el-tree-select
v-model="formData.dataStdBusiOwnershipDept" v-model="formData.dataStdBusiOwnershipDept"
:data="deptOptions" :data="deptOptions"
:props="{ value: 'id', label: 'label', children: 'children' }" :props="{ value: 'label', label: 'label', children: 'children' }"
value-key="id" value-key="id"
placeholder="请选择业务认责部门" :disabled="isShow"
check-strictly /> placeholder="请选择业务认责部门"
</el-form-item> check-strictly
<el-form-item label="业务认责人员" prop="dataStdBusiOwnershipPrsn"> />
<el-select v-model="formData.dataStdBusiOwnershipPrsn" placeholder="请选择业务认责人员"> </el-form-item>
<el-form-item label="业务认责人员" prop="dataStdBusiOwnershipPrsn">
<el-select
v-model="formData.dataStdBusiOwnershipPrsn"
:disabled="isShow"
placeholder="请选择业务认责人员"
>
<el-option <el-option
v-for="dict in userList" v-for="dict in userList"
:key="dict.id" :key="dict.id"
:label="dict.userName" :label="dict.userName"
:value="dict.userName" :value="dict.userName"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="技术认责部门" prop="dataStdItOwnershipDept">
<el-tree-select <el-form-item label="技术认责部门" prop="dataStdItOwnershipDept">
v-model="formData.dataStdItOwnershipDept" <el-tree-select
:data="deptOptions" v-model="formData.dataStdItOwnershipDept"
:props="{ value: 'id', label: 'label', children: 'children' }" :data="deptOptions"
value-key="id" :props="{ value: 'label', label: 'label', children: 'children' }"
placeholder="请选择技术认责部门" value-key="id"
check-strictly /> :disabled="isShow"
</el-form-item> placeholder="请选择技术认责部门"
<el-form-item label="技术认责人员" prop="dataStdItOwnershipPrsn"> check-strictly
<el-select v-model="formData.dataStdItOwnershipPrsn" placeholder="技术认责人员"> />
</el-form-item>
<el-form-item label="技术认责人员" prop="dataStdItOwnershipPrsn">
<el-select
v-model="formData.dataStdItOwnershipPrsn"
:disabled="isShow"
placeholder="请选择技术认责人员"
>
<el-option <el-option
v-for="dict in userList" v-for="dict in userList"
:key="dict.id" :key="dict.id"
:label="dict.userName" :label="dict.userName"
:value="dict.userName" :value="dict.userName"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 底部按钮区域 --> <el-row justify="center" style="margin-top: 20px;" v-if="!isShow">
<el-row justify="center" style="margin-top: 20px;" v-if="!isShow">
<el-col :span="4" style="padding-right: 10px;"> <el-col :span="4" style="padding-right: 10px;">
<el-button @click="handleClose" style="width: 100%" plain>取消</el-button> <el-button @click="handleClose" style="width: 100%" plain>取消</el-button>
</el-col> </el-col>
@ -127,155 +193,152 @@
<el-button type="primary" @click="handleSubmit" style="width: 100%">保存</el-button> <el-button type="primary" @click="handleSubmit" style="width: 100%">保存</el-button>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<el-dialog title="选择代码" v-model="codeVisible" width="1000px">
<!-- 引入第二个页面组件 --> <el-dialog title="选择代码" v-model="codeVisible" width="1000px" append-to-body>
<code-components ref="showCodeDialog" v-if="codeVisible" /> <code-components ref="showCodeDialog" v-if="codeVisible" />
<template #footer > <template #footer>
<el-button <el-button @click="codeVisible = false">取消</el-button>
@click="codeCancel">取消</el-button> <el-button type="primary" @click="handleCodeSelect">确定</el-button>
<el-button
type="primary" @click="codeSave">确定</el-button>
</template> </template>
</el-dialog> </el-dialog>
</el-dialog> </el-dialog>
</template> </template>
<script setup> <script setup>
import { ref, watch } from 'vue'; import { ref, watch, computed } from 'vue'
import { updateStdMain, addStdMain } from '@/api/datastd/std'; // import { ElMessage } from 'element-plus'
import { listUser, deptTreeSelect } from "@/api/system/user"; import { updateStdMain, addStdMain } from '@/api/datastd/std'
import codeComponents from '../../stdcode/codeComponents.vue'; import { listUser, deptTreeSelect } from "@/api/system/user"
import codeComponents from '../../stdcode/codeComponents.vue'
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance()
const { std_code_status,std_code_appr } = proxy.useDict("std_code_status","std_code_appr"); const emit = defineEmits(['update:visible', 'refresh'])
const props = defineProps({ const props = defineProps({
data: { data: { type: Object, default: () => ({}) },
type: Object, isEdit: { type: Boolean, default: false },
required: false, isShow: { type: Boolean, default: false },
}, visible: { type: Boolean, required: true },
isEdit: { dbResourceOldList: { type: Array, default: () => [] }
type: Boolean, })
},
isShow: { //
type: Boolean,
default:false const formData = ref({ ...props.data });
},
dbResourceOldList: { //
type: Object, watch(() => props.data, (newVal) => {
}, if (newVal) {
visible: { formData.value=props.data
type: Boolean, }
}, }, { immediate: true })
dbResourceOldList: {
type: Object, //
},
});
//
const formRules = ref({ const formRules = ref({
dataStdNo: [{ required: true, message: '请输入标准编号', trigger: 'blur' }], dataStdNo: [{ required: true, message: '请输入标准编号', trigger: 'blur' }],
dataStdCnName: [{ required: true, message: '请输入标准中文名', trigger: 'blur' }],
dataStdType: [{ required: true, message: '请选择标准类型', trigger: 'change' }], dataStdType: [{ required: true, message: '请选择标准类型', trigger: 'change' }],
stdSrc: [{ required: true, message: '请选择标准来源', trigger: 'change' }], dataStdSrc: [{ required: true, message: '请选择标准来源', trigger: 'change' }],
dataClas: [{ required: true, message: '请选择数据类别', trigger: 'change' }], dataClas: [{ required: true, message: '请选择数据类别', trigger: 'change' }],
dataStdBusiOwnershipDept: [{ required: true, message: '请选择业务认责部门', trigger: 'blur' }], dataStdBusiOwnershipDept: [{ required: true, message: '请选择业务认责部门', trigger: 'change' }],
dataStdItOwnershipDept: [{ required: true, message: '请选择技术认责部门', trigger: 'blur' }], dataStdItOwnershipDept: [{ required: true, message: '请选择技术认责部门', trigger: 'change' }]
dataStdBusiOwnershipPrsn: [{ required: true, message: '请输入业务认责人', trigger: 'blur' }], })
dataStdItOwnershipPrsn: [{ required: true, message: '请输入技术认责人', trigger: 'blur' }],
});
const codeCancel = () => {
codeVisible.value = false;
};
const codeSave = () => {
const child = proxy.$refs.showCodeDialog;
const mapList=child.selections
if(mapList.length!=1){
proxy.$modal.msgWarning("请选择一条代码进行映射");
}else{
const mapCodeItem=child.selections[0]
formData.value.cdNo=mapCodeItem.cdNo
formData.value.codeId=mapCodeItem.id
codeVisible.value = false;
proxy.$modal.msgSuccess("代码引用成功"); //
const visible = computed({
get: () => props.visible,
set: (val) => emit('update:visible', val)
})
const codeVisible = ref(false)
const deptOptions = ref([])
const userList = ref([])
}}; //
const initData = async () => {
try {
const [deptRes, userRes] = await Promise.all([
deptTreeSelect(),
listUser({ pageSize: 1000, pageNum: 1 })
])
deptOptions.value = deptRes.data
userList.value = userRes.rows
} catch (error) {
ElMessage.error('初始化数据失败')
console.error(error)
}
}
const showSys = ref(false); //
const codeVisible = ref(false); const handleSystemChange = (id) => {
const emit = defineEmits(['update:visible', 'refresh']); const system = props.dbResourceOldList.find(item => item.id === id)
const userList = ref([]); if (system) {
const formData = ref({ ...props.data }); formData.value.sysName = system.name
const visible = ref(props.visible); // 使 prop visible
function dataChange(data) {
// dbResourceOldList name
const selectedItem = props.dbResourceOldList.find(item => item.id === data);
if (selectedItem) {
// name formData.value.dbRName
formData.value.sysName = selectedItem.name;
} else {
// formData.value.dbRName
formData.value.sysName = '';
} }
} }
// props.visible local visible
watch(() => props.visible, (newVal) => {
visible.value = newVal;
formData.value = { ...props.data }
});
function getList() {
listUser({pageSize:1000,pageNum:1}).then(res => {
userList.value = res.rows;
});
};
const handleClose = () => {
emit('update:visible', false); //
};
const deptOptions = ref(undefined);
function getDeptTree() { //
deptTreeSelect().then(response => { const handleCodeSelect = () => {
deptOptions.value = response.data; const selectedCodes = proxy.$refs.showCodeDialog?.selections || []
}); if (selectedCodes.length !== 1) {
}; ElMessage.warning('请选择一条代码')
function changeCodeType(data) { return
if (data != "company") {
showSys.value = true;
formData.value.sysName = "";
formData.value.sysId = undefined;
} else {
showSys.value = false;
formData.value.sysName = "公司级";
formData.value.sysId = 10000;
} }
const code = selectedCodes[0]
formData.value.cdId = code.onum
formData.value.cdNo = code.cdNo || code.onum
codeVisible.value = false
ElMessage.success('代码选择成功')
} }
getDeptTree();
getList(); //
const handleSubmit = () => { const handleSubmit = () => {
const formRef = proxy.$refs.formRef; proxy.$refs.formRef.validate(async (valid) => {
formRef.validate((valid) => { if (!valid) return;
if (valid) {
const apiCall = props.isEdit ? updateStdMain(formData.value) : addStdMain(formData.value); try {
apiCall // 使线
.then((response) => { const submitData = { ...formData.value };
if (response.success) {
emit('refresh'); //
handleClose(); submitData.srcSys = Number(submitData.srcSys) || null;
} else { submitData.beltDataStdContent = Number(submitData.beltDataStdContent) || null;
proxy.$message.error(response.data || '操作失败,请稍后重试');
} //
}) submitData.dataStdItOwnershipPrsn = submitData.dataStdItOwnershipPrsn || '';
} else { submitData.dataStdBusiOwnershipPrsn = submitData.dataStdBusiOwnershipPrsn || '';
console.log('表单验证失败');
return false; // API
const api = props.isEdit ? updateStdMain : addStdMain;
const res = await api(submitData);
if (res.code === 200) {
ElMessage.success(props.isEdit ? '修改成功' : '新增成功');
emit('refresh');
handleClose();
} else {
ElMessage.error(res.msg || '操作失败');
}
} catch (error) {
console.error('提交失败:', error);
ElMessage.error(`请求失败: ${error.message}`);
//
if (error.message.includes('cannot be null')) {
const column = error.message.match(/Column '(.*?)'/)[1];
ElMessage.warning(`字段 ${column} 不能为空`);
}
} }
}); });
}; };
//
const handleClose = () => {
proxy.$refs.formRef.resetFields()
visible.value = false
}
//
initData()
</script> </script>

53
vue-fastapi-frontend/src/views/datastd/main/index.vue

@ -259,9 +259,17 @@
</el-link> </el-link>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="安全等级" prop="securityLevel" width="150"></el-table-column> <el-table-column label="安全等级" prop="securityLevel" width="150"></el-table-column>
<el-table-column label="来源系统" prop="srcSys" width="150"></el-table-column> <el-table-column label="来源系统" align="center" prop="cdType">
<el-table-column label="业务认责部门" prop="dataStdBusiOwnershipDept" width="150"></el-table-column> <template #default="scope">
<span >
{{
getSrcSysName(scope.row.srcSys)
}}
</span>
</template>
</el-table-column> <el-table-column label="" prop="dataStdBusiOwnershipDept" width="150"></el-table-column>
<el-table-column label="业务认责人员" prop="dataStdBusiOwnershipPrsn" width="150"></el-table-column> <el-table-column label="业务认责人员" prop="dataStdBusiOwnershipPrsn" width="150"></el-table-column>
<el-table-column label="技术认责部门" prop="dataStdItOwnershipDept" width="150"></el-table-column> <el-table-column label="技术认责部门" prop="dataStdItOwnershipDept" width="150"></el-table-column>
<el-table-column label="技术认责人员" prop="dataStdItOwnershipPrsn" width="150"></el-table-column> <el-table-column label="技术认责人员" prop="dataStdItOwnershipPrsn" width="150"></el-table-column>
@ -410,6 +418,10 @@ const queryParams = ref({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
}); });
const getSrcSysName = (id) => {
const match = dbResourceOldList.value.find(item => item.id === id);
return match ? match.name : id;
};
const single = ref(true); const single = ref(true);
const multiple = ref(true); const multiple = ref(true);
const dialogVisible = ref(false); const dialogVisible = ref(false);
@ -430,7 +442,7 @@ const handlePagination = (pageNum, pageSize) => {
}; };
// //
const handleCodeClick = (row) => { const handleCodeClick = (row) => {
codeId.value=row.codeId codeId.value=row.cdId
codeVisible.value = true; codeVisible.value = true;
}; };
@ -505,18 +517,29 @@ const dbResourceOldList = ref([]);
const handleAdd = () => { const handleAdd = () => {
isEdit.value = false; isEdit.value = false;
selectedRow.value = { selectedRow.value = {
dataStdType: "", //
dataStdNo: "", onum: '',
dataStdEngName: "", dataStdNo: '',
dataStdCnName: "", dataStdCnName: '',
dataStdBusiDefn: "", dataStdEngName: '',
dataType: "", dataStdType: '0',
dataStdBusiOwnershipDept: "", dataStdBusiDefn: '',
dataStdBusiOwnershipPrsn: "", dataStdSrc: '',
dataStdItOwnershipDept: "", dataClas: '',
dataStdItOwnershipPrsn: "", securityLevel: '1',
securityLevel:"", dataStdVest: '',
sourceSystem:"" typicalFld: '',
//
srcSys: null,
cdId: '',
cdNo: '',
//
dataStdBusiOwnershipDept: '',
dataStdBusiOwnershipPrsn: '',
dataStdItOwnershipDept: '',
dataStdItOwnershipPrsn: '',
}; };
// //

6
vue-fastapi-frontend/src/views/datastd/stddict/AddEditForm.vue

@ -56,9 +56,9 @@
<el-select v-model="formData.dataStdNo" placeholder="数据标准"> <el-select v-model="formData.dataStdNo" placeholder="数据标准">
<el-option <el-option
v-for="dict in stdList" v-for="dict in stdList"
:key="dict.id" :key="dict.onum"
:label="dict.dataStdNo+'-'+dict.dataStdNo" :label="dict.dataStdNo+'-'+dict.dataStdEngName+'-'+dict.dataStdCnName"
:value="dict.id" :value="dict.dataStdNo"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>

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

@ -142,7 +142,7 @@
@click="handleStdClick(row.dataStdNo)" @click="handleStdClick(row.dataStdNo)"
style="cursor: pointer" style="cursor: pointer"
> >
<span >{{transIdtoCode(row.dataStdNo)}}</span> <span >{{row.dataStdNo}}</span>
</el-link> </el-link>
</template> </template>
</el-table-column> </el-table-column>
@ -170,7 +170,7 @@
label="技术认责部门" label="技术认责部门"
width="120" width="120"
align="center" align="center"
prop="dataStdItOwnershipPrsn" prop="dataStdItOwnershipDept"
/> />
<el-table-column <el-table-column
label="技术认责人员" label="技术认责人员"
@ -288,7 +288,8 @@ const getSrcSysName = (id) => {
return match ? "系统级:"+ match.name : id; return match ? "系统级:"+ match.name : id;
}; };
const dbResourceOptions = ref([]); const dbResourceOptions = ref([]);
const handleStdClick = (id) => { const handleStdClick = (code) => {
var id =transCodetoId(code)
getStdMain(id).then((response) => { getStdMain(id).then((response) => {
stdRow.value = response.data; stdRow.value = response.data;
stdVisible.value = true; stdVisible.value = true;
@ -300,9 +301,10 @@ const handlePagination = (pageNum, pageSize) => {
queryParams.value.pageSize = pageSize; queryParams.value.pageSize = pageSize;
handleQuery(); handleQuery();
}; };
const transIdtoCode = (dataStdNo) => {
const match = stdList.value.find(item => item.onum === dataStdNo); const transCodetoId = (dataStdNo) => {
return match ? match.dataStdNo : ''; const match = stdList.value.find(item => item.dataStdNo === dataStdNo);
return match ? match.onum : '';
}; };
const filterNode = (value, data) => { const filterNode = (value, data) => {
if (!value) return true; if (!value) return true;

Loading…
Cancel
Save