You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1546 lines
61 KiB

8 months ago
<template>
<div class="app-container">
<el-row :gutter="20">
<el-col :span="4" :xs="24">
<div class="head-container">
<el-input
v-model="database"
placeholder="请输入搜索系统名/模式名"
clearable
prefix-icon="Search"
style="margin-bottom: 20px"
/>
</div>
<div class="head-container">
<el-tree
:data="databaseList"
:props="{ label: 'name', children: 'children' }"
:expand-on-click-node="false"
:filter-node-method="filterNode"
ref="databaseTreeRef"
node-key="id"
highlight-current
default-expand-all
@node-click="handleNodeClick"
/>
</div>
</el-col>
<el-col :span="20" :xs="24">
<el-form :model="queryParams" :inline="true" label-width="75px">
<el-form-item label="对象名称:" prop="userName">
<el-input
v-model="queryParams.tabName"
placeholder="请输入搜索表中文/英文名"
clearable
style="width: 240px"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="列名称:">
<el-input
v-model="queryParams.colName"
placeholder="请输入搜索字段中文/英文名"
clearable
style="width: 240px"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="对象类型:">
<el-select
v-model="queryParams.tabType"
placeholder="请输入数据类型"
clearable
style="width: 240px"
>
<el-option key="TABLE" value="TABLE" label="表"/>
<el-option key="VIEW" value="VIEW" label="视图"/>
<el-option key="PROCEDURE" value="PROCEDURE" label="存储过程"/>
<el-option key="FUNCTION" value="FUNCTION" label="函数"/>
</el-select>
</el-form-item>
<el-form-item label="标签名称:">
<el-input
v-model="queryParams.tagName"
placeholder="请输入搜索标签名称"
clearable
style="width: 240px"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="补录状态:">
<el-input
v-model="queryParams.recStat"
placeholder="请输入搜索状态"
clearable
style="width: 240px"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="applyDataAst"
>数据资产发布</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="CaretRight"
@click="runBloodAnalysisTask"
>执行血缘解析任务</el-button>
</el-col>
</el-row>
<el-table
v-loading="loading"
:data="dataList"
ref="metaTable"
@select="handleSelection"
@select-all="handleSelectionAll"
>
8 months ago
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="系统英文名" width="100" align="center" prop="ssysCd"></el-table-column>
<el-table-column label="模式名称" align="center" prop="mdlName"></el-table-column>
<el-table-column label="对象英文名" width="170" align="center" prop="tabEngName" >
<template #default="scope">
<el-link type="primary" @click="showColumnDialog(scope.row)" :underline="false">{{ scope.row.tabEngName }}</el-link>
</template>
</el-table-column>
<el-table-column label="对象中文名" width="100" align="center" prop="tabCnName"></el-table-column>
<el-table-column label="对象标签" width="200" align="center" prop="batchTabClas">
<template #default="scope">
<el-popover v-for="item in scope.row.tempTabClas" placement="right" width="auto" trigger="hover">
<template #reference>
<el-tag v-if="item.clasEffFlag && item.clasEffFlag === '1'">{{item.clasName}}</el-tag>
</template>
<div>
<div style="margin: 5px" v-for="item in scope.row.showTabClas"><el-tag v-if="item.clasEffFlag && item.clasEffFlag === '1'">{{item.clasName + ":" + item.clasValue}}</el-tag></div>
</div>
</el-popover>
</template>
</el-table-column>
8 months ago
<el-table-column label="记录数" width="80" align="center" prop="tabRecNum"></el-table-column>
<el-table-column label="补录对象名称" width="150" align="center" prop="tabCrrctName"></el-table-column>
<el-table-column label="补录对象描述" width="150" align="center" prop="tabDesc"></el-table-column>
<el-table-column label="对象类型" align="center" prop="tabType"></el-table-column>
<el-table-column label="对象治理标志" width="120" align="center" prop="govFlag"></el-table-column>
<el-table-column label="补录审批状态" width="120" align="center" prop="recStat"></el-table-column>
<el-table-column label="负责人" align="center" prop="pic"></el-table-column>
<el-table-column label="采集时间" width="200" align="center" prop="extractUpdTime">
<template #default="scope">
<span>{{scope.row.extractUpdTime.replace("T"," ")}}</span>
</template>
</el-table-column>
<el-table-column label="补录时间" align="center" prop="suppUpdTime"></el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</el-col>
</el-row>
<el-drawer v-model="drawer" size="80%" :show-close="false">
<template #header>
<h3>元数据信息</h3>
<div style="flex: none">
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="submit">提交</el-button>
</div>
</template>
<template #default>
<el-row :gutter="20">
<el-col :span="6">
8 months ago
<el-form :model="currentMetaData" :inline="true" label-width="120px">
<el-form-item label="对象英文名">
<el-input
v-model="currentMetaData.tabEngName"
disabled
/>
</el-form-item>
<el-form-item label="对象中文名">
<el-input
v-model="currentMetaData.tabCnName"
disabled
/>
</el-form-item>
<el-form-item label="所属系统">
<el-input
v-model="currentMetaData.ssysCd"
disabled
/>
</el-form-item>
<el-form-item label="所属SCHEMA">
<el-input
v-model="currentMetaData.mdlName"
disabled
/>
</el-form-item>
</el-form>
</el-col>
<el-col :span="6">
<el-form :model="currentMetaData" label-width="120px">
8 months ago
<el-form-item label="补录对象名称">
<el-input
v-model="currentMetaData.tabCrrctName"
placeholder="补录对象名称"
clearable
/>
</el-form-item>
<el-form-item label="补录对象描述">
<el-input
v-model="currentMetaData.tabDesc"
placeholder="请输入描述内容"
clearable
/>
</el-form-item>
<el-form-item label="对象治理标志">
<el-select
v-model="currentMetaData.govFlag"
placeholder="请输入数据类型"
clearable
style="width: 100%"
8 months ago
>
<el-option key="0" :value="'0'" label="是"/>
<el-option key="1" :value="'1'" label="否"/>
</el-select>
</el-form-item>
<el-form-item label="对象负责人">
<el-input
v-model="currentMetaData.pic"
placeholder="请输入搜索状态"
clearable
/>
</el-form-item>
</el-form>
</el-col>
<el-col :span="12" :xs="24">
<el-divider content-position="left">对象标签集合
<el-button icon="Plus" type="primary" text @click="openTableTagsDialog">新增</el-button>
</el-divider>
<template v-for="(tag,index) in currentMetaData.tags">
<el-tag style="margin-left: 10px;margin-top: 10px" :key="tag.clasName +'-'+tag.clasValue"
v-if="tag.clasEffFlag && tag.clasEffFlag === '1'"
size="large" closable type="primary" @close="handleTableTagClose(index)">
{{ tag.clasName}}
</el-tag>
</template>
8 months ago
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-tabs v-model="activeColumnTab" type="border-card" class="full-height-tabs" @tab-change="changeColumnTab">
<el-tab-pane label="字段信息" name="column">
<div class="table-container">
<el-table :data="columnList" height="calc(100vh - 395px)">
8 months ago
<el-table-column label="字段英文名" width="100" align="center" prop="fldEngName">
<template #default="scope">
<el-link type="primary" @click="openEditColumnDialog(scope.row,scope.$index)" :underline="false">{{ scope.row.fldEngName }}</el-link>
</template>
</el-table-column>
<el-table-column label="字段中文名" align="center" prop="fldCnName"></el-table-column>
<el-table-column label="字段类型" width="170" align="center" prop="fldType" ></el-table-column>
<el-table-column label="主键标志" width="100" align="center" prop="pkFlag">
<template #default="scope">
<span v-if="scope.row.pkFlag === '1' || scope.row.pkFlag === 'Y' || scope.row.pkFlag === true"></span>
<span v-else></span>
</template>
</el-table-column>
<!-- <el-table-column label="字段描述" width="250" align="center" prop="fldDesc"></el-table-column>-->
<el-table-column label="是否必填" width="70" align="center" prop="requireFlag">
<template #default="scope">
<span v-if="scope.row.requireFlag === '1' || scope.row.requireFlag === 'Y' || scope.row.requireFlag === true"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="是否索引" width="150" align="center" prop="idxFlag">
<template #default="scope">
<span v-if="scope.row.idxFlag === '1' || scope.row.idxFlag === 'Y' || scope.row.idxFlag === true"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="字段补录名" width="150" align="center" prop="fldCrrctName">
<template #default="scope">
<span>{{scope.row.fldCrrctName}}</span>
8 months ago
</template>
</el-table-column>
<el-table-column label="补录主键" align="center" prop="crrctPkFlag">
<template #default="scope">
<span>{{scope.row.crrctPkFlag}}</span>
8 months ago
</template>
</el-table-column>
<el-table-column label="补录字段描述" align="center" prop="fldDesc">
<template #default="scope">
<span>{{scope.row.fldDesc}}</span>
8 months ago
</template>
</el-table-column>
<!-- <el-table-column label="状态" width="120" align="center" prop="suppRecStat">-->
<!-- <template #default="scope">-->
<!-- <span>{{scope.row.suppRecStat}}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
8 months ago
<el-table-column label="负责人" align="center" prop="pic">
<template #default="scope">
<span>{{scope.row.pic}}</span>
8 months ago
</template>
</el-table-column>
<el-table-column label="字段标签" width="150" align="center" prop="fldClas">
<template #default="scope">
<el-popover v-for="item in scope.row.tempFldClas" placement="right" width="auto" trigger="hover">
<template #reference>
<el-tag v-if="item.clasEffFlag === '1'">{{item.clasName}}</el-tag>
</template>
<div>
<div style="margin: 5px" v-for="item in scope.row.showFldClas"><el-tag v-if="item.clasEffFlag === '1'">{{item.clasName + ":" + item.clasValue}}</el-tag></div>
</div>
</el-popover>
8 months ago
</template>
</el-table-column>
<el-table-column label="字段空值率" align="center" prop="fldNullRate">
<template #default="scope">
<span>{{scope.row.fldNullRate}}</span>
8 months ago
</template>
</el-table-column>
<el-table-column label="引用字典/标准" align="center" prop="dataDictName"></el-table-column>
8 months ago
<el-table-column label="更新时间" align="center" prop="suppUpdTime" width="180">
<template #default="scope">
<template v-if="scope.row.suppUpdTime && scope.row.suppUpdTime !== ''">
<span>{{scope.row.suppUpdTime.replace("T"," ")}}</span>
</template>
</template>
</el-table-column>
8 months ago
</el-table>
</div>
</el-tab-pane>
<el-tab-pane label="样例数据" name="demoData">
<div class="table-container">
<el-table :data="demoDataList" height="calc(100vh - 395px)">
<template v-for="item in columnList">
<el-table-column :label="(item.fldCnName && item.fldCnName.length>0)?item.fldCnName:((item.fldCrrctName && item.fldCrrctName.length>0)?item.fldCrrctName:item.fldEngName)" width="100" align="center" :prop="item.fldEngName"></el-table-column>
</template>
</el-table>
</div>
</el-tab-pane>
<el-tab-pane label="业务关系" name="businessRelation">
<div v-loading="loadingBusiness" v-if="activeColumnTab=== 'businessRelation'" style="height: calc(100vh - 395px);">
<div style="position: absolute;top:10px;left: 10px;z-index: 10">
<el-form>
<el-form-item label="关系选择:">
<el-radio-group v-model="businessOptionSelect" @change="changeBusinessOption">
<el-radio-button label="ER关系" value="er" />
<el-radio-button label="字段关系" value="op" />
</el-radio-group>
</el-form-item>
</el-form>
</div>
<div style="width: 100%;height: 100%">
<businss-relation :currentTable="currentMetaData" :data="businessRelation" :type="businessOptionSelect"></businss-relation>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="血缘关系" name="bloodRelation">
<div style="width: 100%;height: 100%">
<blood-relation v-if="activeColumnTab === 'bloodRelation'" :currentTable="currentMetaData" :data="bloodRelation"></blood-relation>
</div>
</el-tab-pane>
8 months ago
<el-tab-pane label="存储过程" name="proc">
<SQLCodeMirror v-if="activeColumnTab === 'proc'" :data="procStr" :dbType="dbType"></SQLCodeMirror>
8 months ago
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
</template>
</el-drawer>
<el-dialog
v-model="tableTagDialog"
title="配置标签分类"
width="1100"
>
<el-form :model="currentTableTag" :inline="true" label-width="75px">
<el-form-item label="一级分类:" prop="userName">
<el-input
v-model="currentTableTag.clasPriClas"
disabled
style="width: 240px"
/>
</el-form-item>
<el-form-item label="二级分类:">
<el-input
v-model="currentTableTag.clasScdClas"
disabled
style="width: 240px"
/>
</el-form-item>
<el-form-item label="三级分类:">
<el-input
v-model="currentTableTag.clasThreClas"
disabled
style="width: 240px"
></el-input>
</el-form-item>
<el-form-item label="选择标签:">
<el-select
v-model="currentTableTag.clasOnum"
filterable
style="width: 240px"
@change="changeTableTag"
>
<el-option v-for="item in metaClasList" :key="item.clasOnum" :value="item.clasOnum" :label="item.clasOnum+' - '+item.clasName"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Plus" @click="addTableTag">新增</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="tableTags">
<el-table-column label="标签编号" width="80" align="center" prop="onum"></el-table-column>
<el-table-column label="标签名称" width="120" align="center" prop="clasName"></el-table-column>
<el-table-column label="标签值" width="170" align="center" prop="clasValue" >
8 months ago
<template #default="scope">
<el-input @input="changeTagValue(scope.row)" v-model="scope.row.clasValue" :disabled="scope.row.clasEffFlag !== '1'"></el-input>
8 months ago
</template>
</el-table-column>
<el-table-column label="标签值说明" width="170" align="center" prop="tagRemark">
<template #default="scope">
<el-input @input="changeTagValue(scope.row)" v-model="scope.row.tagRemark" :disabled="scope.row.clasEffFlag !== '1'"></el-input>
</template>
</el-table-column>
<el-table-column label="标签状态" align="center" prop="clasEffFlag">
<template #default="scope">
<span v-if="scope.row.clasEffFlag === '1'" style="color:#67C23A;">{{'有效'}}</span>
<span v-else style="color: #F56C6C">{{'已删除'}}</span>
8 months ago
</template>
</el-table-column>
<el-table-column label="设置方式" width="80" align="center" prop="tagSource">
8 months ago
<template #default="scope">
<span>{{scope.row.tagSource ? scope.row.tagSource:'自动'}}</span>
8 months ago
</template>
</el-table-column>
<el-table-column label="设置对象" width="80" align="center" prop="setUser"></el-table-column>
<el-table-column label="设置时间" width="150" align="center" prop="setTime"></el-table-column>
<el-table-column label="操作" align="center" width="80">
<template #default="scope">
<el-button v-if="scope.row.clasEffFlag === '1'" link type="danger" icon="Delete" @click.prevent="deleteTag(scope.row)">删除</el-button>
<el-button v-if="scope.row.clasEffFlag === '0'" link type="success" icon="RefreshLeft" @click.prevent="revertTag(scope.row)">恢复</el-button>
8 months ago
</template>
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button @click="tableTagDialog = false">取消</el-button>
<el-button type="primary" @click="confirmTableTags">
确定
</el-button>
</div>
</template>
</el-dialog>
<el-dialog
v-model="columnInfoDialog"
title="字段信息"
width="1100"
>
<el-form :model="currentColumnData" :inline="true" label-width="100px">
<el-form-item label="字段英文名">
<el-input disabled v-model="currentColumnData.fldEngName"></el-input>
</el-form-item>
<el-form-item label="字段中文名">
<el-input disabled v-model="currentColumnData.fldCnName"></el-input>
</el-form-item>
<el-form-item label="字段类型">
<el-input disabled v-model="currentColumnData.fldType"></el-input>
</el-form-item>
<el-form-item label="主键标志">
<template v-if="currentColumnData.pkFlag === '1' || currentColumnData.pkFlag === 'Y' || currentColumnData.pkFlag === true">
<el-input disabled :model-value="'是'"></el-input>
</template>
<template v-else>
<el-input disabled :model-value="'否'"></el-input>
</template>
</el-form-item>
<el-form-item label="是否必填">
<template v-if="currentColumnData.requireFlag === '1' || currentColumnData.requireFlag === 'Y' || currentColumnData.requireFlag === true">
<el-input disabled :model-value="'是'"></el-input>
</template>
<template v-else>
<el-input disabled :model-value="'否'"></el-input>
</template>
</el-form-item>
<el-form-item label="是否索引">
<template v-if="currentColumnData.idxFlag === '1' || currentColumnData.idxFlag === 'Y' || currentColumnData.idxFlag === true">
<el-input disabled :model-value="'是'"></el-input>
</template>
<template v-else>
<el-input disabled :model-value="'否'"></el-input>
</template>
</el-form-item>
<el-form-item label="字段补录名">
<el-input v-model="currentColumnData.fldCrrctName"></el-input>
</el-form-item>
<el-form-item label="补录字段描述">
<el-input v-model="currentColumnData.fldDesc"/>
</el-form-item>
<el-form-item label="补录主键">
<div style="width: 192px">
<el-switch v-model="currentColumnData.crrctPkFlag"/>
</div>
</el-form-item>
<!-- <el-form-item label="状态">-->
<!-- <el-input v-model="currentColumnData.suppRecStat"/>-->
<!-- </el-form-item>-->
8 months ago
<el-form-item label="负责人">
<el-input v-model="currentColumnData.pic"/>
</el-form-item>
<el-form-item label="字段空值率">
<el-input v-model="currentColumnData.fldNullRate"/>
</el-form-item>
<el-form-item label="引用字典/标准">
<el-select
v-model="currentColumnData.dataDictId"
filterable
remote
reserve-keyword
style="width: 192px"
placeholder="请输入关键词"
:remote-method="remoteStddict"
@change="changestdDict"
:loading="loading">
<el-option
v-for="item in stddictOptions"
:key="item.onum"
:label="item.dataDictCnName"
:value="item.onum">
</el-option>
</el-select>
</el-form-item>
8 months ago
</el-form>
<el-form :model="currentColumnTag" :inline="true" label-width="100px">
<el-form-item label="一级分类:" prop="userName">
<el-input
v-model="currentColumnTag.clasPriClas"
disabled
/>
</el-form-item>
<el-form-item label="二级分类:">
<el-input
v-model="currentColumnTag.clasScdClas"
disabled
/>
</el-form-item>
<el-form-item label="三级分类:">
<el-input
v-model="currentColumnTag.clasThreClas"
disabled
></el-input>
</el-form-item>
<el-form-item label="选择标签:">
<el-select
v-model="currentColumnTag.clasOnum"
filterable
style="width: 192px"
@change="changeColumnTag"
>
<el-option v-for="item in metaClasList" :key="item.clasOnum" :value="item.clasOnum" :label="item.clasOnum+' - '+item.clasName"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Plus" @click="addColumnTag">新增</el-button>
</el-form-item>
</el-form>
<el-table :data="currentColumnData.showFldClas">
<el-table-column label="标签编号" width="80" align="center" prop="onum"></el-table-column>
<el-table-column label="标签名称" width="120" align="center" prop="clasName"></el-table-column>
<el-table-column label="标签值" width="170" align="center" prop="clasValue" >
8 months ago
<template #default="scope">
<el-input :disabled="scope.row.clasEffFlag === '0'" @input="changeTagValue(scope.row)" v-model="scope.row.clasValue"></el-input>
8 months ago
</template>
</el-table-column>
<el-table-column label="标签值说明" width="170" align="center" prop="tagRemark">
<template #default="scope">
<el-input :disabled="scope.row.clasEffFlag === '0'" @input="changeTagValue(scope.row)" v-model="scope.row.tagRemark"></el-input>
8 months ago
</template>
</el-table-column>
<el-table-column label="标签状态" align="center" prop="clasEffFlag">
8 months ago
<template #default="scope">
<span>{{ (scope.row.clasEffFlag === '1')?'有效':'无效' }}</span>
</template>
</el-table-column>
<el-table-column label="设置方式" width="80" align="center" prop="tagSource">
<template #default="scope">
<span>{{scope.row.tagSource?scope.row.tagSource:'自动'}}</span>
8 months ago
</template>
</el-table-column>
<el-table-column label="设置对象" width="80" align="center" prop="setUser"></el-table-column>
<el-table-column label="设置时间" width="150" align="center" prop="setTime"></el-table-column>
<el-table-column label="操作" align="center" width="80">
<template #default="scope">
<el-button v-if="scope.row.clasEffFlag === '1'" link type="danger" icon="Delete" @click.prevent="deleteTag(scope.row)">删除</el-button>
<el-button v-if="scope.row.clasEffFlag === '0'" link type="success" icon="RefreshLeft" @click.prevent="revertTag(scope.row)">恢复</el-button>
8 months ago
</template>
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button @click="columnInfoDialog = false">取消</el-button>
<el-button type="primary" @click="confirmColumn">
确定
</el-button>
</div>
</template>
</el-dialog>
<el-dialog
v-model="astPublish"
title="数据资产发布"
width="1400"
>
<el-table v-loading="loading" :data="dataAstList">
<el-table-column label="数据资产编号" align="center" prop="astNo"></el-table-column>
<el-table-column label="数据资产来源" align="center" prop="dataAstSrc"></el-table-column>
<el-table-column label="数据资产英文名称" align="center" prop="dataAstEngName"></el-table-column>
<el-table-column label="数据资产中文名称" align="center" prop="dataAstCnName"></el-table-column>
<el-table-column label="数据资产类型" align="center" prop="dataAstType"></el-table-column>
<el-table-column label="数据资产描述" align="center" prop="dataAstDesc">
<template #default="scope">
<el-input v-model="scope.row.dataAstDesc" ></el-input>
</template>
</el-table-column>
<el-table-column label="数据资产标签" align="center" prop="dataAstClas">
<template #default="scope">
<el-popover v-for="item in scope.row.tempTabClas" placement="right" width="auto" trigger="hover">
<template #reference>
<el-tag v-if="item.clasEffFlag && item.clasEffFlag === '1'">{{item.clasName}}</el-tag>
</template>
<div>
<div style="margin: 5px" v-for="item in scope.row.showTabClas"><el-tag v-if="item.clasEffFlag && item.clasEffFlag === '1'">{{item.clasName + ":" + item.clasValue}}</el-tag></div>
</div>
</el-popover>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="180">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click.prevent="editAstTab(scope.$index,scope.row)">编辑标签</el-button>
<el-button link type="danger" icon="Delete" @click.prevent="deleteAstData(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button @click="astPublish = false">取消</el-button>
<el-button type="primary" @click="confirmPublish">
发布
</el-button>
</div>
</template>
</el-dialog>
<el-dialog
v-model="astTagDialog"
title="配置标签分类"
width="1100"
>
<el-form :model="currentAstTag" :inline="true" label-width="75px">
<el-form-item label="一级分类:" prop="userName">
<el-input
v-model="currentAstTag.clasPriClas"
disabled
style="width: 240px"
/>
</el-form-item>
<el-form-item label="二级分类:">
<el-input
v-model="currentAstTag.clasScdClas"
disabled
style="width: 240px"
/>
</el-form-item>
<el-form-item label="三级分类:">
<el-input
v-model="currentAstTag.clasThreClas"
disabled
style="width: 240px"
></el-input>
</el-form-item>
<el-form-item label="选择标签:">
<el-select
v-model="currentAstTag.clasOnum"
filterable
style="width: 240px"
@change="changeAstTag"
>
<el-option v-for="item in metaClasList" :key="item.clasOnum" :value="item.clasOnum" :label="item.clasOnum+' - '+item.clasName"/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Plus" @click="addAstTag">新增</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="astTags">
<el-table-column label="标签编号" width="80" align="center" prop="onum"></el-table-column>
<el-table-column label="标签名称" width="120" align="center" prop="clasName"></el-table-column>
<el-table-column label="标签值" width="170" align="center" prop="clasValue" >
<template #default="scope">
<el-input @input="changeTagValue(scope.row)" v-model="scope.row.clasValue" :disabled="scope.row.clasEffFlag !== '1'"></el-input>
</template>
</el-table-column>
<el-table-column label="标签值说明" width="170" align="center" prop="tagRemark">
<template #default="scope">
<el-input @input="changeTagValue(scope.row)" v-model="scope.row.tagRemark" :disabled="scope.row.clasEffFlag !== '1'"></el-input>
</template>
</el-table-column>
<el-table-column label="标签状态" align="center" prop="clasEffFlag">
<template #default="scope">
<span v-if="scope.row.clasEffFlag === '1'" style="color:#67C23A;">{{'有效'}}</span>
<span v-else style="color: #F56C6C">{{'已删除'}}</span>
</template>
</el-table-column>
<el-table-column label="设置方式" width="80" align="center" prop="tagSource">
<template #default="scope">
<span>{{scope.row.tagSource ? scope.row.tagSource:'自动'}}</span>
</template>
</el-table-column>
<el-table-column label="设置对象" width="80" align="center" prop="setUser"></el-table-column>
<el-table-column label="设置时间" width="150" align="center" prop="setTime"></el-table-column>
<el-table-column label="操作" align="center" width="80">
<template #default="scope">
<el-button v-if="scope.row.clasEffFlag === '1'" link type="danger" icon="Delete" @click.prevent="deleteTag(scope.row)">删除</el-button>
<el-button v-if="scope.row.clasEffFlag === '0'" link type="success" icon="RefreshLeft" @click.prevent="revertTag(scope.row)">恢复</el-button>
</template>
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button @click="astTagDialog = false">取消</el-button>
<el-button type="primary" @click="confirmAstTags">
确定
</el-button>
</div>
</template>
</el-dialog>
8 months ago
</div>
</template>
<script setup name="Meta">
import {getDataSourceList, getMetaDataList, getColumnList, getMetaClasList, postMetaSupp, getMetaDataRelship, getMetaDataBloodRelship, getProcData, runBloodAnalysis, publishAstData} from "@/api/meta/metaInfo"
import { getMetaSecurityData } from "@/api/dataAsset/directory"
import { listStdDictNoPage } from "@/api/datastd/std.js"
8 months ago
import { ref, nextTick, computed, watch, reactive, onMounted } from 'vue'
import SQLCodeMirror from "@/components/codemirror/SQLCodeMirror.vue";
import cache from "@/plugins/cache";
import BusinssRelation from "./businssRelation.vue";
import BloodRelation from "./bloodRelation.vue";
8 months ago
const data = reactive({
queryParams:{
ssysCd:'',
mdlName:'',
tabName:'',
colName:'',
tabType:'',
tagName:'',
recStat:'',
pageNum:1,
pageSize:10
},
currentMetaData: {
tabEngName:'',
tabCnName:'',
ssysCd:'',
mdlName:'',
tabCrrctName:'',
tabDesc:'',
govFlag:null,
pic:'',
tags:[]
}
})
const { queryParams, currentMetaData } = toRefs(data);
const loading = ref(true);
const drawer = ref(false);
const dataList = ref([]);
const columnList = ref([]);
const tableTagDialog = ref(false);
const metaClasList = ref([]);
const columnInfoDialog = ref(false);
const currentColumnData = ref({});
const loadingBusiness = ref(false);
8 months ago
const currentTableTag = ref({
"clasThreClas": "",
"clasOnum": null,
"clasName": "",
"recSubmPrsn": "",
"clasPriClas": "",
"clasScdClas": ""
});
const currentColumnTag = ref({
"clasThreClas": "",
"clasOnum": null,
"clasName": "",
"recSubmPrsn": "",
"clasPriClas": "",
"clasScdClas": ""
});
const columnParam = ref({
total:0,
pageNum:1,
pageSize:10
});
const total = ref(0);
const databaseList = ref([]);
const tableTags = ref([]);
const database = ref("");
const procStr = ref("");
const procId = ref(-1);
8 months ago
const activeColumnTab = ref("column");
const businessOptionSelect = ref("er");
8 months ago
const { proxy } = getCurrentInstance();
const changedColumns = ref([])
const businessRelation = ref([])
const bloodRelation = ref([])
const demoDataList = ref([])
const dbType = ref("MYSQL")
const selectedRows = ref([])
const dataAstList= ref([])
const astPublish = ref(false)
const astTagDialog = ref(false)
const astTags = ref([])
const currentAstTag = ref({
"index":-1,
"clasThreClas": "",
"clasOnum": null,
"clasName": "",
"recSubmPrsn": "",
"clasPriClas": "",
"clasScdClas": ""
});
const stddictOptions = ref([])
7 months ago
8 months ago
function changeColumnTab(){
if (activeColumnTab.value === 'businessRelation'){
changeBusinessOption()
}
if (activeColumnTab.value === 'demoData'){
generateDemoData()
}
if (activeColumnTab.value === 'bloodRelation'){
changeBloodOption()
8 months ago
}
}
function changestdDict(val){
console.log(val)
for (let i = 0; i < stddictOptions.value.length; i++) {
if (val === stddictOptions.value[i].onum){
currentColumnData.value.dataDictName = stddictOptions.value[i].dataDictCnName
}
}
console.log()
}
function remoteStddict(query){
if (query !== ""){
let param = {queryStr:query}
let dbList = databaseList.value[0].children;
for (let i = 0; i < dbList.length; i++) {
if (currentMetaData.value.ssysCd.toUpperCase() === dbList[i].name.toUpperCase()){
param.ssysCd = dbList[i].id + ""
}
}
listStdDictNoPage(param).then(res=>{
stddictOptions.value = res.data
})
}else{
stddictOptions.value = []
}
8 months ago
}
function generateDemoData(){
let param ={
dataAstSrc: currentMetaData.value.ssysCd,
dataAstEngName:currentMetaData.value.mdlName+"."+currentMetaData.value.tabEngName
}
getMetaSecurityData(param).then(res=>{
demoDataList.value = res.data.data
})
}
function changeBusinessOption(){
loadingBusiness.value = true;
let data = {
ssysCd: currentMetaData.value.ssysCd,
mdlName: currentMetaData.value.mdlName,
tabEngName: currentMetaData.value.tabEngName,
type: businessOptionSelect.value
}
getMetaDataRelship(data).then(res=>{
businessRelation.value = res.data
loadingBusiness.value = false;
})
}
function changeBloodOption(){
if (procId.value === -1){
proxy.$modal.msgWarning("此表暂无血缘,请执行存储过程跑批任务后查看");
bloodRelation.value = {}
}else {
getMetaDataBloodRelship(procId.value).then(res=>{
bloodRelation.value = res.data
})
}
}
8 months ago
function confirmTableTags(){
currentMetaData.value.tags = JSON.parse(JSON.stringify(tableTags.value))
tableTagDialog.value = false
}
function confirmAstTags(){
console.log(dataAstList.value)
console.log(currentAstTag.value)
console.log(dataAstList.value[currentAstTag.value.index])
dataAstList.value[currentAstTag.value.index].dataAstClas = JSON.parse(JSON.stringify(astTags.value))
let tempTabClas = []
if (astTags.value.length>0){
for (let j = 0; j < astTags.value.length; j++) {
if (tempTabClas.length > 0){
let hasClas = false
for (let k = 0; k < tempTabClas.length; k++) {
if (tempTabClas[k].clasPriClas === astTags.value[j].clasPriClas
&& tempTabClas[k].clasScdClas === astTags.value[j].clasScdClas
&& tempTabClas[k].clasThreClas === astTags.value[j].clasThreClas){
hasClas = true
}
}
if (hasClas){
break
}else {
if (astTags.value[j].clasEffFlag === '1'){
tempTabClas.push(astTags.value[j])
}
}
}else {
if (astTags.value[j].clasEffFlag === '1') {
tempTabClas.push(astTags.value[j])
}
}
}
}
dataAstList.value[currentAstTag.value.index].showTabClas = astTags.value
dataAstList.value[currentAstTag.value.index].tempTabClas = tempTabClas
dataAstList.value[currentAstTag.value.index].dataAstClas = JSON.stringify(astTags.value)
astTagDialog.value = false
}
8 months ago
function confirmColumn(){
let changed = false
8 months ago
for (let i = 0; i < columnList.value.length; i++) {
if (columnList.value[i].fldEngName === currentColumnData.value.fldEngName){
if (columnList.value[i].fldCrrctName !== currentColumnData.value.fldCrrctName){
columnList.value[i].fldCrrctName = currentColumnData.value.fldCrrctName
changed = true
8 months ago
}
if (columnList.value[i].fldDesc !== currentColumnData.value.fldDesc){
columnList.value[i].fldDesc = currentColumnData.value.fldDesc
changed = true
8 months ago
}
if (columnList.value[i].crrctPkFlag !== currentColumnData.value.crrctPkFlag){
columnList.value[i].crrctPkFlag = currentColumnData.value.crrctPkFlag
changed = true
8 months ago
}
// if (columnList.value[i].suppRecStat !== currentColumnData.value.suppRecStat){
// columnList.value[i].suppRecStat = currentColumnData.value.suppRecStat
// }
8 months ago
if (columnList.value[i].pic !== currentColumnData.value.pic){
columnList.value[i].pic = currentColumnData.value.pic
changed = true
8 months ago
}
if (columnList.value[i].fldNullRate !== currentColumnData.value.fldNullRate){
columnList.value[i].fldNullRate = currentColumnData.value.fldNullRate
changed = true
8 months ago
}
if (columnList.value[i].dataDictId !== currentColumnData.value.dataDictId){
columnList.value[i].dataDictId = currentColumnData.value.dataDictId
columnList.value[i].dataDictName = currentColumnData.value.dataDictName
changed = true
}
if (currentColumnData.value.showFldClas && currentColumnData.value.showFldClas.length > 0){
let showFldClas = currentColumnData.value.showFldClas
let fldClas = []
for (let j = 0; j < showFldClas.length; j++) {
let col = showFldClas[j]
if (col.clasEffFlag === '0'){ // 无效
fldClas.push(col)
}else{ // 有效
if (col.tagSource === '手动'){
fldClas.push(col)
}
}
}
if (columnList.value[i].fldClas && columnList.value[i].fldClas !== '[]'){
if (JSON.stringify(fldClas) !== columnList.value[i].fldClas){
columnList.value[i].fldClas = JSON.stringify(fldClas)
changed = true
}
}else {
if (fldClas.length !== 0){
columnList.value[i].fldClas = JSON.stringify(fldClas)
changed = true
}
8 months ago
}
let batchFldClas = columnList.value[i].batchFldClas
if (fldClas.length > 0){
for (let j = 0; j < fldClas.length; j++) {
for (let k = 0; k < batchFldClas.length; k++) {
if (batchFldClas[k].clasPriClas === fldClas[j].clasPriClas
&& batchFldClas[k].clasScdClas === fldClas[j].clasScdClas
&& batchFldClas[k].clasThreClas === fldClas[j].clasThreClas
&& batchFldClas[k].clasName === fldClas[j].clasName
){
batchFldClas[k] = fldClas[j]
}
}
}
8 months ago
}
let tempFldClas = []
if (batchFldClas && batchFldClas.length>0){
for (let j = 0; j < batchFldClas.length; j++) {
if (tempFldClas.length > 0){
let hasClas = false
for (let k = 0; k < tempFldClas.length; k++) {
if (tempFldClas[k].clasPriClas === batchFldClas[j].clasPriClas
&& tempFldClas[k].clasScdClas === batchFldClas[j].clasScdClas
&& tempFldClas[k].clasThreClas === batchFldClas[j].clasThreClas
){
hasClas = true
}
}
if (hasClas){
break
}else {
if (batchFldClas[j].clasEffFlag === '1'){
tempFldClas.push(batchFldClas[j])
}
}
}else {
if (batchFldClas[j].clasEffFlag === '1'){
tempFldClas.push(batchFldClas[j])
}
}
}
}
columnList.value[i].showFldClas = batchFldClas
columnList.value[i].tempFldClas = tempFldClas
8 months ago
}
}
}
columnInfoDialog.value = false
if (changed){
changedColumns.value.push(currentColumnData.value)
}
8 months ago
}
function addTableTag(){
let json = JSON.parse(JSON.stringify(currentTableTag.value))
if (json.clasOnum !== null){
tableTags.value.push({
onum: json.clasOnum,
clasName: json.clasName,
clasValue: '',
8 months ago
tagRemark:'',
clasEffFlag:'1',
8 months ago
tagSource:'手工',
setUser: cache.local.get("username"),
setTime: getNowDateTime()
})
} else {
proxy.$modal.msgWarning("请选择一个标签");
}
}
function addAstTag(){
let json = JSON.parse(JSON.stringify(currentAstTag.value))
if (json.clasOnum !== null){
astTags.value.push({
onum: json.clasOnum,
clasName: json.clasName,
clasValue: '',
tagRemark:'',
clasEffFlag:'1',
tagSource:'手工',
setUser: cache.local.get("username"),
setTime: getNowDateTime()
})
} else {
proxy.$modal.msgWarning("请选择一个标签");
}
8 months ago
}
function addColumnTag(){
let json = JSON.parse(JSON.stringify(currentColumnTag.value))
if (json.clasOnum !== null){
currentColumnData.value.showFldClas.push({
onum: json.clasOnum,
clasName: json.clasName,
clasValue: '',
8 months ago
tagRemark:'',
clasEffFlag:'1',
8 months ago
tagSource:'手工',
setUser: cache.local.get("username"),
setTime: getNowDateTime()
})
} else {
proxy.$modal.msgWarning("请选择一个标签");
}
}
function getNowDateTime(){
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const day = String(now.getDate()).padStart(2, '0');
const hours = String(now.getHours()).padStart(2, '0');
const minutes = String(now.getMinutes()).padStart(2, '0');
const seconds = String(now.getSeconds()).padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
function deleteTag(row){
row.clasEffFlag = '0'
row.tagSource = '手动'
8 months ago
}
function revertTag(row){
row.clasEffFlag = '1'
row.tagSource = '手动'
}
function changeTagValue(row){
row.tagSource = '手动'
8 months ago
}
function changeTableTag(){
if (typeof currentTableTag.value.clasOnum !== null){
for (let i = 0; i <metaClasList.value.length; i++) {
let item = metaClasList.value[i]
if (item.clasOnum === currentTableTag.value.clasOnum){
currentTableTag.value = item
}
}
}
}
function changeAstTag(){
if (typeof currentAstTag.value.clasOnum !== null){
for (let i = 0; i <metaClasList.value.length; i++) {
let item = metaClasList.value[i]
if (item.clasOnum === currentAstTag.value.clasOnum){
let index = currentAstTag.value.index
currentAstTag.value = item
currentAstTag.value.index = index
}
}
}
}
8 months ago
function changeColumnTag(){
if (typeof currentColumnTag.value.clasOnum !== null){
for (let i = 0; i <metaClasList.value.length; i++) {
let item = metaClasList.value[i]
if (item.clasOnum === currentColumnTag.value.clasOnum){
currentColumnTag.value = item
}
}
}
}
function handleTableTagClose(index){
currentMetaData.value.tags[index].clasEffFlag = '0'
// for (let i = 0; i < currentMetaData.value.tags.length; i++) {
// if (tag.tagName === currentMetaData.value.tags[i].tagName && tag.tagValue === currentMetaData.value.tags[i].tagValue){
// currentMetaData.value.tags.splice(i, 1);
// }
// }
8 months ago
}
function openTableTagsDialog(){
tableTagDialog.value = true
currentTableTag.value = {
"clasThreClas": "",
"clasOnum": null,
"clasName": "",
"recSubmPrsn": "",
"clasPriClas": "",
"clasScdClas": ""
}
tableTags.value = JSON.parse(JSON.stringify(currentMetaData.value.tags))
getMetaClasList().then(res=>{
metaClasList.value = res.data
})
}
function openEditColumnDialog(row,index){
columnInfoDialog.value = true
currentColumnData.value = JSON.parse(JSON.stringify(row))
currentColumnTag.value = {
"clasThreClas": "",
"clasOnum": null,
"clasName": "",
"recSubmPrsn": "",
"clasPriClas": "",
"clasScdClas": ""
}
currentColumnData.value.showFldClas = JSON.parse(JSON.stringify(row.showFldClas))
8 months ago
getMetaClasList().then(res=>{
metaClasList.value = res.data
})
}
function showColumnDialog(row) {
let tableData = JSON.parse(JSON.stringify(row))
currentMetaData.value = {
tabEngName: tableData.tabEngName,
tabCnName: tableData.tabCnName,
ssysCd: tableData.ssysCd,
mdlName:tableData.mdlName,
tabCrrctName:tableData.tabCrrctName,
tabDesc:tableData.tabDesc,
govFlag:tableData.govFlag,
pic:tableData.pic,
tags: tableData.showTabClas
8 months ago
}
let columnData = {
tabName: row.tabEngName,
ssysCd: row.ssysCd,
mdlName: row.mdlName
}
getColumnList(columnData).then(res=>{
columnList.value = res.data
if (columnList.value.length>0){
for (let i = 0; i < columnList.value.length; i++) {
let batchFldClas = columnList.value[i].batchFldClas
let fldClas =[]
if (columnList.value[i].fldClas && columnList.value[i].fldClas !== '[]'){
fldClas = JSON.parse(columnList.value[i].fldClas)
}
if (fldClas.length > 0){
for (let j = 0; j < fldClas.length; j++) {
for (let k = 0; k < batchFldClas.length; k++) {
if (batchFldClas[k].clasPriClas === fldClas[j].clasPriClas
&& batchFldClas[k].clasScdClas === fldClas[j].clasScdClas
&& batchFldClas[k].clasThreClas === fldClas[j].clasThreClas
&& batchFldClas[k].clasName === fldClas[j].clasName
){
batchFldClas[k] = fldClas[j]
}
}
}
}
let tempFldClas = []
if (batchFldClas && batchFldClas.length>0){
for (let j = 0; j < batchFldClas.length; j++) {
if (tempFldClas.length > 0){
let hasClas = false
for (let k = 0; k < tempFldClas.length; k++) {
if (tempFldClas[k].clasPriClas === batchFldClas[j].clasPriClas
&& tempFldClas[k].clasScdClas === batchFldClas[j].clasScdClas
&& tempFldClas[k].clasThreClas === batchFldClas[j].clasThreClas){
hasClas = true
}
}
if (hasClas){
break
}else {
if (batchFldClas[j].clasEffFlag === '1'){
tempFldClas.push(batchFldClas[j])
}
}
}else {
if (batchFldClas[j].clasEffFlag === '1') {
tempFldClas.push(batchFldClas[j])
}
}
}
}
columnList.value[i].showFldClas = batchFldClas
columnList.value[i].tempFldClas = tempFldClas
}
8 months ago
}
})
activeColumnTab.value = 'column'
8 months ago
drawer.value = true
changedColumns.value = []
let param = {
ssysCd: currentMetaData.value.ssysCd,
mdlName: currentMetaData.value.mdlName,
tabEngName: currentMetaData.value.tabEngName
}
getProcData(param).then(res=>{
if(res.data.length >0){
let dbList = databaseList.value[0].children;
for (let i = 0; i < dbList.length; i++) {
if (currentMetaData.value.ssysCd.toUpperCase() === dbList[i].name.toUpperCase()){
dbType.value = dbList[i].type
}
}
procStr.value = res.data[0].proc_text+""
procId.value = res.data[0].onum
}else {
procStr.value = "--暂无存储过程,等待解析任务完成后再行查询"
procId.value = -1;
}
})
8 months ago
}
function getDatabaseList() {
let query = {
userName:cache.local.get("username"),
password:cache.local.get("password")
}
getDataSourceList(query).then(res=>{
databaseList.value = [{ id: 100, name: "数据源", parentId: 0, children: res.data.totalList.map(element => ({ ...element, parentId: "100" })) }]
})
}
function handleQuery(){
queryParams.value.pageNum = 1;
getList()
}
function resetQuery(){
queryParams.value ={
ssysCd:'',
mdlName:'',
tabName:'',
colName:'',
tabType:'',
tagName:'',
recStat:'',
pageNum:1,
pageSize:10
}
proxy.$refs.databaseTreeRef.setCurrentKey(null);
handleQuery()
}
function handleSelection(selection, row){
const isSelected = selection.some(item => item.extractOnum === row.extractOnum);
if (isSelected) {
// 选中行:添加到全局数组(避免重复)
if (!selectedRows.value.some(item => item.extractOnum === row.extractOnum)) {
selectedRows.value.push(row);
}
} else {
// 取消选中:从全局数组移除
selectedRows.value = selectedRows.value.filter(item => item.extractOnum !== row.extractOnum);
}
}
function handleSelectionAll(selection) {
if (selection.length > 0) {
// 全选:将当前页所有行添加到全局数组(去重)
const newSelected = [selectedRows.value];
dataList.value.forEach(row => {
if (!newSelected.some(item => item.extractOnum === row.extractOnum)) {
newSelected.push(row);
}
});
selectedRows.value = newSelected;
} else {
// 取消全选:移除当前页所有行
dataList.value.forEach(row => {
selectedRows.value = selectedRows.value.filter(item => item.extractOnum !== row.extractOnum)
})
}
8 months ago
}
function getList(){
getMetaDataList(queryParams.value).then(res=>{
dataList.value = res.data.rows
if (dataList.value.length>0){
for (let i = 0; i < dataList.value.length; i++) {
let batchTabClas = dataList.value[i].batchTabClas
let tabClas =[]
if (dataList.value[i].tabClas && dataList.value[i].tabClas !== '[]'){
tabClas = JSON.parse(dataList.value[i].tabClas)
}
if (tabClas.length > 0){
for (let j = 0; j < tabClas.length; j++) {
for (let k = 0; k < batchTabClas.length; k++) {
if (batchTabClas[k].clasPriClas === tabClas[j].clasPriClas
&& batchTabClas[k].clasScdClas === tabClas[j].clasScdClas
&& batchTabClas[k].clasThreClas === tabClas[j].clasThreClas
&& batchTabClas[k].clasName === tabClas[j].clasName
){
batchTabClas[k] = tabClas[j]
}
}
}
}
let tempTabClas = []
if (batchTabClas && batchTabClas.length>0){
for (let j = 0; j < batchTabClas.length; j++) {
if (tempTabClas.length > 0){
let hasClas = false
for (let k = 0; k < tempTabClas.length; k++) {
if (tempTabClas[k].clasPriClas === batchTabClas[j].clasPriClas
&& tempTabClas[k].clasScdClas === batchTabClas[j].clasScdClas
&& tempTabClas[k].clasThreClas === batchTabClas[j].clasThreClas){
hasClas = true
}
}
if (hasClas){
break
}else {
if (batchTabClas[j].clasEffFlag === '1'){
tempTabClas.push(batchTabClas[j])
}
}
}else {
if (batchTabClas[j].clasEffFlag === '1') {
tempTabClas.push(batchTabClas[j])
}
}
}
}
dataList.value[i].showTabClas = batchTabClas
dataList.value[i].tempTabClas = tempTabClas
}
}
8 months ago
loading.value = false
total.value = res.data.total
proxy.$nextTick(() => {
// 恢复当前页的选中状态
dataList.value.forEach(row => {
const isSelected =selectedRows.value.some(item => item.extractOnum === row.extractOnum);
proxy.$refs.metaTable.toggleRowSelection(row, isSelected);
});
});
8 months ago
})
}
async function runBloodAnalysisTask() {
let query = {
userName: cache.local.get("username"),
password: cache.local.get("password")
}
let response = await runBloodAnalysis(query)
proxy.$modal.msgSuccess(response.data);
8 months ago
}
function confirmPublish(){
publishAstData({assetItems:dataAstList.value}).then(res=>{
proxy.$modal.msgSuccess(res.msg)
astPublish.value = false
})
}
function deleteAstData(row){
const index = dataAstList.value.findIndex(item => item.astNo === row.astNo);
dataAstList.value.splice(index,1)
}
function editAstTab(index,row) {
astTagDialog.value = true
astTags.value = JSON.parse(JSON.stringify(row.showTabClas))
currentAstTag.value = {
"index": index,
"clasThreClas": "",
"clasOnum": null,
"clasName": "",
"recSubmPrsn": "",
"clasPriClas": "",
"clasScdClas": ""
}
getMetaClasList().then(res=>{
metaClasList.value = res.data
})
}
function applyDataAst(){
if(selectedRows.value.length === 0){
proxy.$modal.msgWarning("请至少选择一条元数据进行发布")
}else{
dataAstList.value = []
selectedRows.value.forEach( row =>{
dataAstList.value.push({
dataAstEngName: row.tabEngName,
dataAstCnName: row.tabCnName?row.tabCnName:row.tabCrrctName,
dataAstType: row.tabType,
dataAstStat: '1',
dataAstDesc:'',
dataAstSrc: row.ssysCd,
astNo: row.extractOnum,
dataAstClas: JSON.stringify(row.batchTabClas),
showTabClas: row.showTabClas,
tempTabClas: row.tempTabClas
})
})
astPublish.value = true
}
}
8 months ago
const filterNode = (value, data) => {
if (!value) return true;
return data.name.indexOf(value) !== -1;
};
function handleNodeClick(data) {
queryParams.value.ssysCd = data.name;
handleQuery();
}
watch(database, val => {
proxy.$refs["databaseTreeRef"].filter(val);
});
function submit(){
let data = {
ssysCd: currentMetaData.value.ssysCd,
mdlName: currentMetaData.value.mdlName,
tabEngName: currentMetaData.value.tabEngName,
tabCrrctName: currentMetaData.value.tabCrrctName,
tabDesc: currentMetaData.value.tabDesc,
pic: currentMetaData.value.pic,
govFlag: currentMetaData.value.govFlag,
tabClas: JSON.stringify(currentMetaData.value.tags),
columnInfo: []
}
if (changedColumns.value.length > 0){
for (let i = 0; i < changedColumns.value.length; i++) {
let column = changedColumns.value[i]
data.columnInfo.push({
fldEngName: column.fldEngName,
fldCrrctName: column.fldCrrctName,
crrctPkFlag: column.crrctPkFlag,
fldDesc: column.fldDesc,
pic: column.pic,
fldClas: JSON.stringify(column.showFldClas),
8 months ago
fldNullRate: column.fldNullRate,
dataDictId: column.dataDictId,
8 months ago
recStat: column.recStat
})
}
}
postMetaSupp(data).then(res=>{
proxy.$modal.msgSuccess("操作成功");
drawer.value = false
getList()
})
}
function cancel(){
drawer.value = false
}
onMounted(()=>{
getDatabaseList()
handleQuery()
})
7 months ago
8 months ago
</script>
<style scoped lang="scss">
:deep(.el-drawer__header) {
margin-bottom: 0 !important;
}
.full-height-tabs {
height: calc(100vh - 320px);
}
:deep(.el-tabs__content) {
height: 100%;
overflow: auto;
}
.table-container {
height: 100%;
overflow: auto;
}
</style>