Browse Source

词语批量补充功能重构

master
xueyinfei 1 month ago
parent
commit
a71fae3071
  1. 23
      vue-fastapi-backend/module_admin/controller/data_asset_controller.py
  2. 18
      vue-fastapi-backend/module_admin/dao/cdplb_dao.py
  3. 24
      vue-fastapi-backend/module_admin/dao/data_asset_dao.py
  4. 5
      vue-fastapi-backend/module_admin/entity/do/dataint_do.py
  5. 16
      vue-fastapi-backend/module_admin/entity/vo/dataint_vo.py
  6. 71
      vue-fastapi-backend/module_admin/service/cdplb_service.py
  7. 19
      vue-fastapi-backend/module_admin/service/data_asset_service.py
  8. 8
      vue-fastapi-frontend/src/api/dataAsset/assetDetail.js
  9. 363
      vue-fastapi-frontend/src/views/dataint/cypz/cdplb.vue

23
vue-fastapi-backend/module_admin/controller/data_asset_controller.py

@ -43,6 +43,29 @@ async def get_data_asset_list(
return ResponseUtil.success(model_content=data_asset_page_query_result)
@dataAssetController.get('/listWithColumns', response_model=PageResponseModel)
async def get_data_asset_list_with_columns(
request: Request,
data_asset_page_query: DataAssetPageQueryModel = Depends(DataAssetPageQueryModel.as_query),
query_db: AsyncSession = Depends(get_db),
):
"""
获取数据资产信息列表
:param request: 请求对象
:param data_asset_page_query: 查询参数
:param query_db: 数据库会话
:return: 数据资产信息列表
"""
# 获取分页数据
data_asset_page_query_result = await DataAssetService.get_data_asset_list_with_columns_services(
query_db, data_asset_page_query, is_page=True
)
logger.info('获取数据资产信息列表成功')
return ResponseUtil.success(data=data_asset_page_query_result)
@dataAssetController.post('/batch')
async def batch_process_data_asset(
request: Request,

18
vue-fastapi-backend/module_admin/dao/cdplb_dao.py

@ -20,7 +20,8 @@ class CdplbDao:
select(SysCdplb).where(
SysCdplb.bath_obj_tab_name.like(f'%{cdplb_query.bathObjTabName}%') if cdplb_query.bathObjTabName else True,
SysCdplb.bath_obj_fld_name.like(f'%{cdplb_query.bathObjFldName}%') if cdplb_query.bathObjFldName else True,
SysCdplb.pos_name.like(f'%{cdplb_query.pos_name}%') if cdplb_query.pos_name else True,
SysCdplb.ssys_id == cdplb_query.ssys_id if cdplb_query.ssys_id else True,
SysCdplb.mdl_name == cdplb_query.mdl_name if cdplb_query.mdl_name else True,
SysCdplb.status == cdplb_query.status if cdplb_query.status else True
).distinct()
)
@ -44,6 +45,21 @@ class CdplbDao:
)
return result
@classmethod
async def get_cdplb_by_col(cls, db: AsyncSession, ssys_id: int, mdl_name: str, bath_obj_tab_name: str, bath_obj_fld_name: str):
result = (
(
await db.execute(
select(SysCdplb).where(SysCdplb.ssys_id == ssys_id,
SysCdplb.mdl_name == mdl_name,
SysCdplb.bath_obj_tab_name == bath_obj_tab_name,
SysCdplb.bath_obj_fld_name == bath_obj_fld_name
).distinct()
)
).scalars().first()
)
return result
@classmethod
async def update_cdplb(cls, db: AsyncSession, saveObj: dict):
await db.execute(update(SysCdplb), [saveObj])

24
vue-fastapi-backend/module_admin/dao/data_asset_dao.py

@ -1,4 +1,4 @@
from sqlalchemy import select, update, delete, insert,func ,Integer
from sqlalchemy import select, update, delete, insert, func, Integer, text
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.do.data_ast_content_do import DataAssetInfo
from module_admin.entity.do.dataast_do import DataAssetInfoAppr
@ -38,6 +38,28 @@ class DataAssetDao:
data_asset_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
return data_asset_list
@classmethod
async def getColumnsByTable(cls, db: AsyncSession, tableId: int):
sql = text("select a.onum as onum,"
"a.ssys_id as ssys_id,"
" a.mdl_name as mdl_name,"
"a.fld_eng_name as fld_eng_name,"
"case when a.fld_cn_name is null then b.fld_crrct_name"
" when a.fld_cn_name is not null then a.fld_cn_name end as fld_cn_name,"
"a.fld_type as fld_type,"
"case when a.pk_flag is null then b.crrct_pk_flag "
"when a.pk_flag is not null then a.pk_flag end as pk_flag"
" from t_metadata_fld_tab_extract_info a "
"left join t_metadata_fld_supp_info b "
"on a.ssys_id = b.ssys_id and a.mdl_name=b.mdl_name and"
" a.tab_eng_name=b.tab_eng_name and a.fld_eng_name=b.fld_eng_name "
"left join t_metadata_extract_info c "
"on a.ssys_id = c.ssys_id and a.mdl_name=c.mdl_name and a.tab_eng_name=c.tab_eng_name "
"where c.onum = :ssysId order by a.fld_no")
result = (await db.execute(sql, {"ssysId": tableId}))
data = [dict(row._mapping) for row in result]
return data
@classmethod
async def get_data_asset_by_ast_no(cls, db: AsyncSession, ast_no: str):
"""

5
vue-fastapi-backend/module_admin/entity/do/dataint_do.py

@ -52,9 +52,8 @@ class SysCdplb(Base):
onum = Column(String(50, collation='utf8_general_ci'), primary_key=True, comment='序号')
bath_obj_tab_name = Column(String(500, collation='utf8_general_ci'), comment='批量对象表名')
bath_obj_fld_name = Column(String(500, collation='utf8_general_ci'), comment='批里对象字段名')
freq = Column(String(500, collation='utf8_general_ci'), comment='频次')
pos = Column(String(500, collation='utf8_general_ci'), comment='词性')
pos_name = Column(String(500, collation='utf8_general_ci'), comment='词性名称')
ssys_id = Column(Integer, comment='系统ID')
mdl_name = Column(String(50, collation='utf8_general_ci'), comment='模式名称')
status = Column(String(1, collation='utf8_general_ci'), comment='状态(0正常 1停用)')
create_by = Column(String(64, collation='utf8_general_ci'), comment='创建者')
create_time = Column(DateTime, comment='创建时间')

16
vue-fastapi-backend/module_admin/entity/vo/dataint_vo.py

@ -55,21 +55,25 @@ class CdplbPageObject(BaseModel):
page_size: int
bathObjTabName: Optional[str] = None
bathObjFldName: Optional[str] = None
pos_name: Optional[str] = None
ssys_id: Optional[int] = None
mdl_name: Optional[str] = None
status: Optional[str] = None
class SaveCdplbModel(BaseModel):
class SaveCdplbObj(BaseModel):
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
onum: Optional[str] = None
bath_obj_tab_name: Optional[str] = None
bath_obj_fld_name: Optional[str] = None
freq: Optional[str] = None
pos: Optional[str] = None
pos_name: Optional[str] = None
ssys_id: Optional[int] = None
mdl_name: Optional[str] = None
status: Optional[str] = None
class SaveCdplbModel(BaseModel):
list: List[Union[SaveCdplbObj, None]]
@as_query
class SscfPageObject(BaseModel):
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
@ -93,6 +97,7 @@ class SaveSscfModel(BaseModel):
type: Optional[str] = None
supp_expl: Optional[str] = None
@as_query
class VecsetPageObject(BaseModel):
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
@ -126,4 +131,3 @@ class TreeOperateModel(BaseModel):
onum: Optional[str] = None
dasset_code: Optional[str] = None
dasset_name: Optional[str] = None

71
vue-fastapi-backend/module_admin/service/cdplb_service.py

@ -9,11 +9,13 @@ from fastapi import UploadFile
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.vo.common_vo import CrudResponseModel
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.entity.vo.dataint_vo import CdplbPageObject, SaveCdplbModel
from module_admin.entity.vo.dataint_vo import CdplbPageObject, SaveCdplbModel, SaveCdplbObj
from module_admin.entity.do.dataint_do import SysCdplb
from module_admin.dao.cdplb_dao import CdplbDao
from exceptions.exception import ServiceException, ServiceWarning
from config.env import AppConfig
from datetime import datetime
import requests
from utils.common_util import *
@ -29,21 +31,24 @@ class CdplbService:
@classmethod
async def save_cdplb(cls, result_db: AsyncSession, saveCdplbModel: SaveCdplbModel, current_user: CurrentUserModel):
if saveCdplbModel.onum is None:
# add
saveCdplbModel.onum = uuid.uuid4()
addObj = SysCdplb(**saveCdplbModel.model_dump())
if saveCdplbModel.list and len(saveCdplbModel.list) > 0:
for item in saveCdplbModel.list:
if item.onum is None:
oldObj = await CdplbDao.get_cdplb_by_col(result_db, item.ssys_id, item.mdl_name, item.bath_obj_tab_name, item.bath_obj_fld_name)
if oldObj is None:
addObj = SysCdplb(**item.model_dump())
addObj.onum = uuid.uuid4()
addObj.status = '1'
addObj.create_by = current_user.user.user_name
addObj.create_time = datetime.now()
addObj.update_by = current_user.user.user_name
addObj.update_time = datetime.now()
await CdplbDao.insert_cdplb(result_db, addObj)
else:
# update
oldObj = await CdplbDao.get_cdplb_by_id(result_db, saveCdplbModel.onum)
oldObj = await CdplbDao.get_cdplb_by_id(result_db, item.onum)
if oldObj is None:
raise ServiceException(message='所改对象不存在')
saveObj = saveCdplbModel.model_dump(exclude_unset=True)
saveObj = item.model_dump(exclude_unset=True)
saveObj['update_by'] = current_user.user.user_name
saveObj['update_time'] = datetime.now()
await CdplbDao.update_cdplb(result_db, saveObj)
@ -62,7 +67,7 @@ class CdplbService:
获取元数据导入模板service
:return: 元数据导入模板excel的二进制数据
"""
table_header_list = ['批量对象表名', '批里对象字段名', '频次', '词性', '词性名称', '状态']
table_header_list = ['系统名称', '模式名称', '批量对象表名', '批里对象字段名', '状态']
selector_header_list = ['状态']
option_list = [{'状态': ['正常', '停用']}]
@ -84,12 +89,21 @@ class CdplbService:
file: UploadFile,
overWrite: bool,
current_user: CurrentUserModel):
url = f'{AppConfig.ds_server_url}/dolphinscheduler/datasources?pageNo=1&pageSize=100'
headers = {'dashUserName': current_user.user.user_name, 'dashPassword': current_user.user.password}
response = requests.get(url, headers=headers, verify=False)
dataSourceList = []
if response.reason == 'OK':
response_text = response.text
data = json.loads(response_text)
dataSourceList = data["data"]["totalList"]
else:
raise ServiceException(message=f'系统异常,获取数据源失败')
table_header_dict = {
'系统名称': 'ssys_cd',
'模式名称': 'mdl_name',
'批量对象表名': 'bath_obj_tab_name',
'批里对象字段名': 'bath_obj_fld_name',
'频次': 'freq',
'词性': 'pos',
'词性名称': 'pos_name',
'状态': 'status'
}
contents = await file.read()
@ -108,6 +122,7 @@ class CdplbService:
df.rename(columns=table_header_dict, inplace=True)
for index, row in df.iterrows():
noneValid = ''
ssysId = next((item["id"] for item in dataSourceList if item["name"] == row['ssys_cd']), None)
if row['bath_obj_tab_name'] is None or len(row['bath_obj_tab_name']) == 0:
noneValid += "批量对象表名不能为空"
if row['bath_obj_fld_name'] is None or len(row['bath_obj_fld_name']) == 0:
@ -115,40 +130,40 @@ class CdplbService:
noneValid += ",批里对象字段名不能为空"
else:
noneValid += "批里对象字段名不能为空"
if row['freq'] is None or len(row['freq']) == 0:
if len(noneValid) > 0:
noneValid += ",频次不能为空"
else:
noneValid += "频次不能为空"
if row['pos'] is None or len(row['pos']) == 0:
if row['ssys_cd'] is None or len(row['ssys_cd']) == 0:
if len(noneValid) > 0:
noneValid += ",词性不能为空"
noneValid += ",系统不能为空"
else:
noneValid += "词性不能为空"
if row['pos_name'] is None or len(row['pos_name']) == 0:
noneValid += "系统不能为空"
if row['mdl_name'] is None or len(row['mdl_name']) == 0:
if len(noneValid) > 0:
noneValid += ",词性名称不能为空"
noneValid += ",模式不能为空"
else:
noneValid += "词性名称不能为空"
noneValid += "模式不能为空"
if row['status'] is None or len(row['status']) == 0:
if len(noneValid) > 0:
noneValid += ",状态不能为空"
else:
noneValid += "状态不能为空"
if ssysId is None:
if len(noneValid) > 0:
noneValid += ",系统不存在,为无效系统"
else:
noneValid += "系统不存在,为无效系统"
if len(noneValid) > 0:
result_list['rows'].append({
"row": index + 2,
"errorInfo": noneValid
})
continue
cdplb = SaveCdplbModel()
cdplb = SaveCdplbObj()
cdplb.ssys_id = ssysId
cdplb.mdl_name = row['mdl_name']
cdplb.bath_obj_tab_name = row['bath_obj_tab_name']
cdplb.bath_obj_fld_name = row['bath_obj_fld_name']
cdplb.freq = row['freq']
cdplb.pos = row['pos']
cdplb.pos_name = row['pos_name']
cdplb.status = '1' if row['status'] == '正常' else '0'
await cls.save_cdplb(result_db, cdplb, current_user)
mdl = SaveCdplbModel(list=[cdplb])
await cls.save_cdplb(result_db, mdl, current_user)
result_list['successCount'] += 1
return result_list

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

@ -26,6 +26,25 @@ class DataAssetService:
data_asset_list_result = await DataAssetDao.get_data_asset_list(query_db, query_object, is_page)
return data_asset_list_result
@classmethod
async def get_data_asset_list_with_columns_services(
cls, query_db: AsyncSession, query_object: DataAssetPageQueryModel, is_page: bool = False
):
"""
获取数据资产信息列表service
:param query_db: orm对象
:param query_object: 查询参数对象
:param is_page: 是否开启分页
:return: 数据资产信息列表对象
"""
data_asset_list_result = await DataAssetDao.get_data_asset_list(query_db, query_object, is_page)
if data_asset_list_result and len(data_asset_list_result.rows) > 0:
for table in data_asset_list_result.rows:
columns = await DataAssetDao.getColumnsByTable(query_db, table['astNo'])
table['children'] = columns
return data_asset_list_result
@classmethod
async def batch_process_data_asset_services(
cls, query_db: AsyncSession, batch_object: DataAssetBatchModel

8
vue-fastapi-frontend/src/api/dataAsset/assetDetail.js

@ -8,6 +8,14 @@ export function getSearch(params) {
})
}
export function getSearchWithColumns(params) {
return request({
url: '/default-api/system/dataAsset/listWithColumns',
method: 'get',
params,
})
}
export function batch(data) {
return request({
url: '/default-api/system/dataAsset/batch',

363
vue-fastapi-frontend/src/views/dataint/cypz/cdplb.vue

@ -1,15 +1,20 @@
<template>
<div class="app-container">
<el-form inline :model="queryParams">
<el-form-item label="系统名称:">
<el-select v-model="queryParams.ssysId" clearable style="width: 200px">
<el-option v-for="item in dsSysList" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="模式名称:">
<el-input v-model="queryParams.mdlName"></el-input>
</el-form-item>
<el-form-item label="批量对象表名:">
<el-input v-model="queryParams.bathObjTabName"></el-input>
</el-form-item>
<el-form-item label="批里对象字段名:">
<el-input v-model="queryParams.bathObjFldName"></el-input>
</el-form-item>
<el-form-item label="词性名称:">
<el-input v-model="queryParams.posName"></el-input>
</el-form-item>
<el-form-item label="状态:">
<el-select v-model="queryParams.status" style="width: 200px" clearable>
<el-option label="正常" key="tsmcb-query-status-1" value="1"></el-option>
@ -27,7 +32,7 @@
type="primary"
plain
icon="Plus"
@click="handleAdd"
@click="showDassetDialog"
>新增</el-button>
</el-col>
<el-col :span="1.5">
@ -57,12 +62,18 @@
</el-row>
<el-table :data="dataList" @selection-change="handleSelection">
<el-table-column type="selection" width="50" align="center" />
<!-- <el-table-column label="序号" align="center" prop="onum"></el-table-column>-->
<el-table-column label="系统名称" align="center">
<template #default="scope">
<span >
{{
getSrcSysName(scope.row.ssysId)
}}
</span>
</template>
</el-table-column>
<el-table-column label="模式名称" align="center" prop="mdlName"></el-table-column>
<el-table-column label="批量对象表名" align="center" prop="bathObjTabName"></el-table-column>
<el-table-column label="批里对象字段名" align="center" prop="bathObjFldName"></el-table-column>
<el-table-column label="频次" align="center" prop="freq"></el-table-column>
<el-table-column label="词性" align="center" prop="pos"></el-table-column>
<el-table-column label="词性名称" align="center" prop="posName"></el-table-column>
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<el-switch v-model="scope.row.status"
@ -78,7 +89,6 @@
</el-table-column>
<el-table-column label="操作" align="center" prop="operation">
<template #default="scope">
<el-link type="primary" @click="handleEdit(scope.row)" :underline="false">修改</el-link>
<el-link type="danger" style="margin-left: 10px" @click="handleDelete([scope.row.onum])" :underline="false">删除</el-link>
</template>
</el-table-column>
@ -90,57 +100,6 @@
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<el-dialog
v-model="showDialog"
:title="currentForm.operate === 'ADD'?'新增词典配置表':'编辑词典配置表'"
width="500"
>
<el-form v-if="showDialog"
:model="currentForm"
ref="formRef"
:rules="rules"
label-width="125px">
<el-form-item label="批量对象表名:" prop="bathObjTabName">
<el-input
v-model="currentForm.bathObjTabName" clearable
/>
</el-form-item>
<el-form-item label="批量对象字段名:" prop="bathObjFldName">
<el-input
v-model="currentForm.bathObjFldName" clearable
/>
</el-form-item>
<el-form-item label="频次:" prop="freq">
<el-input
v-model="currentForm.freq" clearable
></el-input>
</el-form-item>
<el-form-item label="词性:" prop="pos">
<el-input
v-model="currentForm.pos" clearable
></el-input>
</el-form-item>
<el-form-item label="词性名称:" prop="posName">
<el-input
v-model="currentForm.posName" clearable
></el-input>
</el-form-item>
<el-form-item label="状态:">
<el-radio-group v-model="currentForm.status">
<el-radio value="1" size="large">正常</el-radio>
<el-radio value="0" size="large">停用</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="showDialog = false">取消</el-button>
<el-button type="primary" @click="handleSave">
确定
</el-button>
</div>
</template>
</el-dialog>
<el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
<el-upload
ref="uploadRef"
@ -163,26 +122,6 @@
</div>
</template>
</el-upload>
<!-- <el-form>-->
<!-- <el-form-item>-->
<!-- <template #label>-->
<!-- 开启覆盖-->
<!-- <el-tooltip-->
<!-- class="box-item"-->
<!-- effect="dark"-->
<!-- placement="right"-->
<!-- >-->
<!-- <template #content>-->
<!-- <div>打开开启覆盖则原补录信息会被模板中未填信息覆盖为空值<br>-->
<!-- 关闭开启覆盖则模板中留空数据不会影响原补录信息-->
<!-- </div>-->
<!-- </template>-->
<!-- <el-link :underline="false" type="primary"><i class="ri-question-line"></i></el-link>-->
<!-- </el-tooltip>-->
<!-- </template>-->
<!-- <el-switch v-model="upload.overWrite"></el-switch>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<template #footer>
<div class="dialog-footer">
<el-button type="primary" :disabled="upload.isUploading" @click="submitFileForm"> </el-button>
@ -223,6 +162,75 @@
</div>
</template>
</el-dialog>
<el-dialog title="选择资产" v-model="dasset.open" width="1100px" append-to-body>
<el-row>
<el-col :span="5">
<el-tree style="margin-top: 10px" ref="treeRef" node-key="id" :default-expand-all="true"
:highlight-current="true" :expand-on-click-node="false" :data="treeData" :props="defaultProps"
:filter-node-method="filterNode" :current-node-key="currentNode.id" @node-click="handleNodeClick">
</el-tree>
</el-col>
<el-col :span="19">
<el-form :model="queryDassetParams" ref="queryRef" :inline="true" label-width="68px">
<el-form-item label="名称" prop="name">
<el-input v-model="queryDassetParams.dataAstEngName" placeholder="请输入名称" clearable style="width: 160px"
@keyup.enter="handleDassetQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleDassetQuery">搜索</el-button>
</el-form-item>
</el-form>
<el-table :data="dassetList"
@selection-change="handleParentSelectionChange"
ref="parentTable">
<el-table-column type="selection" width="40"></el-table-column>
<el-table-column label="资产编号" align="center" prop="astNo"/>
<el-table-column label="表来源系统" align="center" width="150" prop="dataAstSrc" >
<template #default="scope">
<span >{{getSrcSysName(scope.row.dataAstSrc)}}</span>
</template>
</el-table-column>
<el-table-column label="模式名称" align="center" prop="mdlName"></el-table-column>
<el-table-column label="表英文名称" align="center" width="200" prop="dataAstEngName"/>
<el-table-column label="表中文名称" align="center" width="200" prop="dataAstCnName"/>
<el-table-column label="操作">
<template #default="scope">
<el-button link type="primary" @click="showColumns(scope.row)">选择字段</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="dassetTotal > 0" :total="dassetTotal" v-model:page="queryDassetParams.pageNum"
v-model:limit="queryDassetParams.pageSize" @pagination="getDassetList" />
</el-col>
</el-row>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="save"> </el-button>
<el-button @click="dasset.open = false"> </el-button>
</div>
</template>
</el-dialog>
<el-dialog title="选择字段" v-model="openColumn" width="800px" append-to-body>
<el-table :data="column.children" style="width: 100%"
@selection-change="handleChildSelectionChange">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="字段英文名" prop="fld_eng_name" width="200"></el-table-column>
<el-table-column label="字段中文名" prop="fld_cn_name" width="200"></el-table-column>
<el-table-column label="字段类型" width="170" align="center" prop="fld_type"></el-table-column>
<el-table-column label="主键标志" align="center" prop="pk_flag">
<template #default="props">
<span v-if="props.row.pkFlag === 'Y'"></span>
<span v-else></span>
</template>
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="confirmColumns"> </el-button>
<el-button @click="openColumn = false"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup>
@ -230,36 +238,114 @@ import { ref, nextTick, computed, watch, reactive, onMounted } from 'vue'
import { getCdplbList, saveCdplb, deleteCdplb } from "@/api/dataint/cdplb"
import {getToken} from "@/utils/auth.js";
import * as XLSX from "xlsx";
import {deptTreeSelect, getSearch, getSearchWithColumns} from "@/api/dataAsset/assetDetail.js";
import useUserStore from "@/store/modules/user.js";
const { proxy } = getCurrentInstance();
const userStore = useUserStore(); //
const dsSysList = userStore.dsSysList; // 访
const queryParams = ref({
ssysId: null,
mdlName:'',
bathObjTabName:'',
bathObjFldName:'',
posName:'',
status:'',
pageNum:1,
pageSize:10
})
const showDialog = ref(false)
const rules = ref({
bathObjTabName: [{required: true, message: '批量对象表名不能为空!', trigger: 'change',},],
bathObjFldName: [{required: true, message: '批里对象字段名不能为空!!', trigger: 'change',},],
pos: [{required: true, message: '词性不能为空!', trigger: 'change',},],
posName: [{required: true, message: '词性名称不能为空!', trigger: 'change',},],
freq: [{required: true, message: '频次不能为空!', trigger: 'change',},],
})
const currentForm = ref({
operate: 'ADD',
bathObjTabName:'',
bathObjFldName:'',
pos:'',
posName:'',
freq:'',
status:'1'
const selectedTables = ref([])
const selectedColumns = ref([])
const parentTable = ref(null)
const queryDassetParams = ref({
pageNum: 1,
pageSize: 10,
dataAstEngName: undefined,
name: undefined,
dataAstType: 'TABLE',
dataAstScreen: '智能助手',
dataAstSrc: undefined,
})
const dassetList = ref([])
const dassetTotal = ref(0)
const multSelection = ref([])
const dataList = ref([])
const total = ref(0)
const dasset = ref({
open: false,
})
const openColumn = ref(false)
const column = ref({})
const treeData = ref([])
const defaultProps = {
children: 'children',
label: 'label',
};
const currentNode = ref({})
const filterNode = (value, data) => {
if (!value) return true;
return data.label.indexOf(value) !== -1;
};
function showColumns(row){
column.value = row;
openColumn.value = true;
}
function save(){
if (selectedTables.value.length>0){
let array = []
selectedTables.value.forEach(table=>{
if (table.children && table.children.length>0){
table.children.forEach(child=>{
array.push({
ssysId: parseInt(table.dataAstSrc),
mdlName: child.mdl_name,
bathObjTabName: table.dataAstEngName,
bathObjFldName: child.fld_eng_name,
})
})
}
})
saveCdplb({list:array}).then(res=>{
proxy.$modal.msgSuccess("保存成功")
dasset.value.open = false;
selectedTables.value = []
handleQuery()
})
}else{
proxy.$modal.msgWarning("请至少选择一条数据")
}
}
function confirmColumns(){
if (selectedColumns.value.length>0){
let array = []
selectedColumns.value.forEach(selectedCol=>{
array.push({
ssysId: parseInt(column.value.dataAstSrc),
mdlName: selectedCol.mdl_name,
bathObjTabName: column.value.dataAstEngName,
bathObjFldName: selectedCol.fld_eng_name,
})
})
saveCdplb({list:array}).then(res=>{
proxy.$modal.msgSuccess("保存成功")
openColumn.value = false;
selectedColumns.value = [];
handleQuery()
})
}else{
proxy.$modal.msgWarning("请至少选择一条数据")
}
}
function handleChildSelectionChange(selection){
selectedColumns.value = selection
}
function handleParentSelectionChange(selection){
dassetList.value.forEach((parentRow) => {
selectedTables.value = selectedTables.value.filter(item => item.astNo !== parentRow.astNo);
})
selectedTables.value.push(...selection)
}
/*** 导入参数 */
const upload = reactive({
//
@ -315,53 +401,60 @@ function getList(){
}
function resetQuery(){
queryParams.value = {
pos:'',
type:'',
stdRplStr:'',
ssysId: null,
mdlName:'',
bathObjTabName:'',
bathObjFldName:'',
status:'',
pageNum:1,
pageSize:10
}
handleQuery()
}
function handleAdd(){
showDialog.value = true
currentForm.value ={
operate: 'ADD',
bathObjTabName:'',
bathObjFldName:'',
pos:'',
posName:'',
freq:'',
status:'1'
function handleNodeClick(data) {
queryDassetParams.value.dataAstSrc = data.name;
handleDassetQuery();
}
const handleDassetQuery = () => {
queryDassetParams.value.pageNum = 1
getDassetList()
}
function getDassetList(){
getSearchWithColumns(proxy.addDateRange(queryDassetParams.value)).then(res => {
dassetList.value = res.data.rows;
if (dassetList.value && dassetList.value.length>0){
dassetList.value.forEach(dasset=>{
if (dasset.children && dasset.children.length>0){
dasset.mdlName = dasset.children[0].mdl_name
}
function handleSave(){
proxy.$refs.formRef.validate(valid => {
if (valid) {
saveCdplb(currentForm.value).then(res=>{
proxy.$modal.msgSuccess("操作成功");
showDialog.value = false
getList()
})
}
dassetTotal.value = res.data.total;
});
}
function handleEdit(row){
currentForm.value = JSON.parse(JSON.stringify(row))
currentForm.value.operate = 'UPDATE'
showDialog.value = true
}
const getSrcSysName = (id) => {
if (id === null || id === undefined) return '';
const getName = (val) => {
const match = dsSysList.find(item => item.id === parseInt(val));
return match ? match.name : val;
};
return getName(id);
};
function changeStatus(row){
let param = {
onum: row.onum,
status: row.status
}
saveCdplb(param).then(res=>{
saveCdplb({list:[param]}).then(res=>{
proxy.$modal.msgSuccess("操作成功");
getList()
})
}
function showDassetDialog(){
dasset.value.open = true
getDeptTree();
handleDassetQuery();
}
function multDelete(){
let array = []
if (multSelection.value.length>0){
@ -389,11 +482,10 @@ function handleExport(){
if (dataList.value.length > 0){
for (let i = 0; i < dataList.value.length; i++) {
data.push({
"系统":getSrcSysName(dassetList.value[i].ssysId),
"模式":dassetList.value[i].mdlName,
"批量对象表名":dataList.value[i].bathObjTabName,
"批里对象字段名":dataList.value[i].bathObjFldName,
"频次":dataList.value[i].freq,
"词性":dataList.value[i].pos,
"词性名称":dataList.value[i].posName,
"状态":dataList.value[i].status === '1'?"正常":"停用"
})
}
@ -406,10 +498,25 @@ function handleExport(){
function handleSelection(val){
multSelection.value= val
}
function getDeptTree() {
deptTreeSelect().then(response => {
const data = response.data || [];
addLabel(data);
treeData.value = data;
});
}
function addLabel(nodes) {
if (!nodes) return;
nodes.forEach(node => {
node.label = getSrcSysName(node.name); // label
if (node.children && node.children.length > 0) {
addLabel(node.children); //
}
});
}
onMounted(() => {
handleQuery()
})
</script>
<style scoped lang="scss">
</style>
Loading…
Cancel
Save