This commit is contained in:
gaochang 2023-12-27 19:25:12 +08:00
parent 5c770409d8
commit 300825d877
8 changed files with 163 additions and 163 deletions

View File

@ -68,3 +68,10 @@ export function updateCheckRule(data) {
data: data data: data
}) })
} }
export function listSourceIdBytable(id) {
return request({
url: '/data/quality/checkRules/listSourceIdBytable/' + id,
method: 'get'
})
}

View File

@ -237,10 +237,11 @@ export default {
if (response.success) { if (response.success) {
const { data } = response const { data } = response
const tree = {} const tree = {}
tree.name = '核查规则类型' tree.name = '规则类型'
const children = [] const children = []
data.forEach(e => { data.forEach(e => {
if (e.code === 'regular' || e.code === 'accuracy' || e.code === 'integrity') { if (e.code === 'unique' || e.code === 'integrity' || e.code === 'accuracy' ||
e.code === 'consistent' || e.code === 'relevance' || e.code === 'regular') {
children.push(e) children.push(e)
} }
}) })

View File

@ -36,7 +36,7 @@
</el-radio> </el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="任务概述" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item> </el-form-item>
</el-form> </el-form>

View File

@ -113,6 +113,18 @@
icon="el-icon-view" icon="el-icon-view"
@click="handleRun(scope.row)" @click="handleRun(scope.row)"
>立即执行</el-button> >立即执行</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-view"
@click="handleRun(scope.row)"
>编辑</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-view"
@click="handleRun(scope.row)"
>查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -147,9 +159,10 @@ export default {
// //
tableColumns: [ tableColumns: [
{ prop: 'jobName', label: '任务名称', show: true }, { prop: 'jobName', label: '任务名称', show: true },
{ prop: 'beanName', label: 'bean名称', show: true }, // { prop: 'beanName', label: 'bean', show: true },
{ prop: 'methodName', label: '方法名称', show: true }, // { prop: 'methodName', label: '', show: true },
{ prop: 'methodParams', label: '方法参数', show: true }, // { prop: 'methodParams', label: '', show: true },
{ prop: 'methodParams', label: '最近完成时间', show: true },
{ prop: 'cronExpression', label: 'cron表达式', show: true }, { prop: 'cronExpression', label: 'cron表达式', show: true },
{ {
prop: 'status', prop: 'status',

View File

@ -42,134 +42,16 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="数据表" prop="ruleTableId"> <div>
<el-select v-model="form.ruleTableId" placeholder="请选择数据表" @change="tableSelectChanged"> <el-transfer
<el-option v-model="form.transferValue"
v-for="table in tableOptions" filterable
:key="table.id" :titles="['备选', '已选']"
:label="table.tableName" :filter-method="filterMethod"
:value="table.id" filter-placeholder="请输入表名"
> :data="transferData"
<span style="float: left">{{ table.tableName + '(' + table.tableComment + ')' }}</span> />
</el-option> </div>
</el-select>
</el-form-item>
<el-form-item label="核查字段" prop="ruleColumnId">
<el-select v-model="form.ruleColumnId" placeholder="请选择核查字段" @change="columnSelectChanged">
<el-option
v-for="column in columnOptions"
:key="column.id"
:label="column.columnName"
:value="column.id"
>
<span style="float: left">{{ column.columnName + '(' + column.columnComment + ')' }}</span>
</el-option>
</el-select>
</el-form-item>
<el-divider content-position="left">核查配置</el-divider>
<el-row v-if="form.ruleConfig.ruleItemCode === 'timeliness_key'">
<el-col :span="24">
<el-form-item label="判定阀值">
<el-input-number v-model="form.ruleConfig.timeliness.threshold" :controls="false" :min="1" />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.ruleConfig.ruleItemCode === 'consistent_key'">
<el-col :span="12">
<el-form-item label="标准字典类别">
<el-select
v-model="form.ruleConfig.consistent.gbTypeId"
placeholder="请选择"
@change="dictTypeSelectChanged"
>
<el-option
v-for="item in dictTypeOptions"
:key="item.id"
:label="item.gbTypeName"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准字典字段">
<el-select v-model="form.ruleConfig.consistent.bindGbColumn" placeholder="请选择">
<el-option
v-for="item in gbColumnOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.ruleConfig.ruleItemCode === 'relevance_key'">
<el-col :span="12">
<el-form-item label="关联表">
<el-select
v-model="form.ruleConfig.relevance.relatedTableId"
placeholder="请选择"
@change="relatedTableSelectChanged"
>
<el-option
v-for="table in tableOptions"
:key="table.id"
:label="table.tableName"
:value="table.id"
>
<span style="float: left">{{ table.tableName + '(' + table.tableComment + ')' }}</span>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="关联字段">
<el-select
v-model="form.ruleConfig.relevance.relatedColumnId"
placeholder="请选择"
@change="relatedColumnSelectChanged"
>
<el-option
v-for="column in relatedColumnOptions"
:key="column.id"
:label="column.columnName"
:value="column.id"
>
<span style="float: left">{{ column.columnName + '(' + column.columnComment + ')' }}</span>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.ruleConfig.ruleItemCode === 'accuracy_key_length'">
<el-col :span="24">
<el-form-item label="最大长度">
<el-input-number v-model="form.ruleConfig.accuracy.maxLength" :controls="false" :min="1" />
</el-form-item>
</el-col>
</el-row>
<!-- 正则表达式规则-->
<el-row v-if="form.ruleConfig.ruleItemCode === 'regular_key'">
<el-col :span="24">
<el-form-item label="正则表达">
<el-input v-model="form.ruleConfig.regular.regular" placeholder="请输入正则规则" />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.ruleConfig.ruleItemCode === 'regular_key'">
<el-form-item label="常用正则">
<el-radio-group v-model="form.zzStatus" @change="handleZzStatusRadioChange">
<el-radio label="1">手机号码</el-radio>
<el-radio label="2">邮箱</el-radio>
<el-radio label="3">整数</el-radio>
<el-radio label="4">负数</el-radio>
<el-radio label="5">身份证</el-radio>
<el-radio label="6">日期格式yyyy-mm-dd</el-radio>
<el-radio label="7">IP</el-radio>
</el-radio-group>
</el-form-item>
</el-row>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.status">
<el-radio <el-radio
@ -189,14 +71,18 @@
</template> </template>
<script> <script>
import { listRuleLevel, listRuleItem, addCheckRule } from '@/api/quality/checkrule' import { listRuleLevel, listRuleItem, addCheckRule, listSourceIdBytable } from '@/api/quality/checkrule'
import { listDataSource } from '@/api/metadata/datasource' import { listDataSource } from '@/api/metadata/datasource'
import { listDataTable } from '@/api/metadata/datatable' import { listDataTable } from '@/api/metadata/datatable'
import { listDataColumn } from '@/api/metadata/datacolumn' import { listDataColumn } from '@/api/metadata/datacolumn'
import { listDataDictType } from '@/api/standard/datadict' import { listDataDictType } from '@/api/standard/datadict'
import { Transfer } from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
export default { export default {
name: 'CheckRuleAdd', name: 'CheckRuleAdd',
components: {
ElTransfer: Transfer
},
props: { props: {
data: { data: {
type: Object, type: Object,
@ -207,6 +93,9 @@ export default {
}, },
data() { data() {
return { return {
// eslint-disable-next-line vue/no-dupe-keys
transferData: [],
title: '核查规则新增', title: '核查规则新增',
// //
showOptions: { showOptions: {
@ -224,6 +113,7 @@ export default {
}, },
// //
form: { form: {
qualityType: 'jg',
ruleName: undefined, ruleName: undefined,
ruleTypeId: undefined, ruleTypeId: undefined,
ruleItemId: undefined, ruleItemId: undefined,
@ -262,7 +152,8 @@ export default {
} }
}, },
status: '1', status: '1',
zzStatus: '0' // zzStatus: '0', //
transferValue: []
}, },
// //
rules: { rules: {
@ -299,11 +190,11 @@ export default {
{ value: 'gb_code', label: '标准编码' }, { value: 'gb_code', label: '标准编码' },
{ value: 'gb_name', label: '标准名称' } { value: 'gb_name', label: '标准名称' }
], ],
relatedColumnOptions: [] relatedColumnOptions: [],
tableNameOldList: []
} }
}, },
created() { created() {
console.log('data:' + this.data)
this.form.ruleTypeId = this.data.ruleTypeId this.form.ruleTypeId = this.data.ruleTypeId
this.getDicts('sys_common_status').then(response => { this.getDicts('sys_common_status').then(response => {
if (response.success) { if (response.success) {
@ -319,7 +210,24 @@ export default {
this.getRuleItemList() this.getRuleItemList()
this.getDataSourceList() this.getDataSourceList()
}, },
methods: { methods: {
filterMethod(query, item) {
return item.pinyin.indexOf(query) > -1
},
generateData(tableData) {
const data = []
const tableName = tableData
const pinyin = tableData
tableName.forEach((tableData, index) => {
data.push({
label: tableData,
key: tableData,
pinyin: pinyin[index]
})
})
this.transferData = data
},
showCard() { showCard() {
this.$emit('showCard', this.showOptions) this.$emit('showCard', this.showOptions)
}, },
@ -350,23 +258,56 @@ export default {
}) })
this.form.ruleConfig.ruleItemCode = item.itemCode this.form.ruleConfig.ruleItemCode = item.itemCode
}, },
sourceSelectChanged(val) { async sourceSelectChanged(val) {
listDataTable({ sourceId: val }).then(response => { // this.inspectSourceId(val)
if (response.success) { // const tableNameOldList = []
this.tableOptions = response.data const tableNameOldList = await listSourceIdBytable(val).then(response => {
this.columnOptions = [] const result = []
const source = this.sourceOptions.find(function (item) { for (let i = 0; i < response.data.length; i++) {
return item.id === val const tableName = response.data[i].ruleTable
}) result.push(tableName)
this.form.ruleSource = source.sourceName
this.form.ruleDbType = source.dbType
this.form.ruleTableId = ''
this.form.ruleTable = ''
this.form.ruleTableComment = ''
this.form.ruleColumnId = ''
this.form.ruleColumn = ''
this.form.ruleColumnComment = ''
} }
return result
})
const response = await listDataTable({ sourceId: val })
if (response.success) {
//
const tableNameList = []
for (let i = 0; i < response.data.length; i++) {
const tableName = response.data[i].tableName
if (!tableNameOldList.some((str) => str === tableName)) {
tableNameList.push(tableName)
}
}
await this.generateData(tableNameList)
// this.form.transferValue = ['robot_patient']
this.tableOptions = response.data
this.columnOptions = []
const source = this.sourceOptions.find(function (item) {
return item.id === val
})
this.form.ruleSource = source.sourceName
this.form.ruleDbType = source.dbType
this.form.ruleTableId = ''
this.form.ruleTable = ''
this.form.ruleTableComment = ''
this.form.ruleColumnId = ''
this.form.ruleColumn = ''
this.form.ruleColumnComment = ''
console.log('tableNameOldList=', tableNameOldList)
this.form.transferValue = tableNameOldList
}
},
//
inspectSourceId(val) {
listSourceIdBytable(val).then(response => {
const tableNameOldList = []
for (let i = 0; i < response.data.length; i++) {
const tableName = response.data[i].ruleTable
tableNameOldList.push(tableName)
}
this.tableNameOldList = tableNameOldList
}) })
}, },
tableSelectChanged(val) { tableSelectChanged(val) {

View File

@ -184,7 +184,7 @@ export default {
{ prop: 'ruleType', label: '规则类型', show: true }, { prop: 'ruleType', label: '规则类型', show: true },
{ prop: 'ruleSource', label: '数据源', show: true }, { prop: 'ruleSource', label: '数据源', show: true },
{ prop: 'ruleTable', label: '数据表', show: true, formatter: this.ruleTableFormatter }, { prop: 'ruleTable', label: '数据表', show: true, formatter: this.ruleTableFormatter },
{ prop: 'ruleColumn', label: '核查字段', show: true, formatter: this.ruleColumnFormatter }, // { prop: 'ruleColumn', label: '', show: true, formatter: this.ruleColumnFormatter },
{ prop: 'ruleLevel', label: '规则级别', width: 100, show: true }, { prop: 'ruleLevel', label: '规则级别', width: 100, show: true },
{ {
prop: 'status', prop: 'status',
@ -209,7 +209,8 @@ export default {
pageNum: 1, pageNum: 1,
pageSize: 20, pageSize: 20,
ruleTypeId: '', ruleTypeId: '',
ruleName: '' ruleName: '',
ruleType: 'jj'
}, },
// //
ruleTypeOptions: [], ruleTypeOptions: [],
@ -237,10 +238,11 @@ export default {
if (response.success) { if (response.success) {
const { data } = response const { data } = response
const tree = {} const tree = {}
tree.name = '核查规则类型' tree.name = '规则类型'
const children = [] const children = []
data.forEach(e => { data.forEach(e => {
if (e.code !== 'regular' && e.code !== 'accuracy' && e.code !== 'integrity') { if (e.code === 'table_jc' || e.code === 'length_jc' || e.code === 'null_jc' ||
e.code === 'pk_jc' || e.code === 'fk_jc') {
children.push(e) children.push(e)
} }
}) })
@ -385,7 +387,7 @@ export default {
float: right; float: right;
} }
.el-card ::v-deep .el-card__body { .el-card ::v-deep .el-card__body {
height: calc(100vh - 170px); height: calc(100vh - 110px);
} }
.tree-wrapper { .tree-wrapper {
overflow-y: auto; overflow-y: auto;

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<transition name="el-zoom-in-center"> <transition name="el-zoom-in-center">
<check-rule-list v-if="options.showList" @showCard="showCard" /> <check-rule-list v-if="options.showList" @showCard="showCard"/>
</transition> </transition>
<transition name="el-zoom-in-top"> <transition name="el-zoom-in-top">
<check-rule-add v-if="options.showAdd" :data="options.data" @showCard="showCard" /> <check-rule-add v-if="options.showAdd" :data="options.data" @showCard="showCard" />

View File

@ -66,7 +66,18 @@
align="center" align="center"
show-overflow-tooltip show-overflow-tooltip
/> />
</template><el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200">
<template slot-scope="scope">
<el-button
v-hasPerm="['quality:rule:detail']"
size="mini"
type="text"
icon="el-icon-view"
@click="handleDetail(scope.row)"
>检验报告</el-button>
</template> </template>
</el-table-column>
</el-table> </el-table>
<el-pagination <el-pagination
@ -137,11 +148,36 @@ export default {
listRuleType().then(response => { listRuleType().then(response => {
if (response.success) { if (response.success) {
const { data } = response const { data } = response
// const tree = {}
// tree.name = ''
// tree.children = data
// this.ruleTypeOptions = []
// this.ruleTypeOptions.push(tree)
const tree = {} const tree = {}
tree.name = '核查规则类型' const matchingItems = []
tree.children = data tree.name = '结构符合性结果'
data.forEach(item => {
if (item.id === '11111' || item.id === '22222' || item.id === '33333' || item.id === '44444' ||
item.id === '55555') {
matchingItems.push(item)
}
})
this.ruleTypeOptions = [] this.ruleTypeOptions = []
tree.children = matchingItems
this.ruleTypeOptions.push(tree) this.ruleTypeOptions.push(tree)
const treeContent = {}
const matchingItems_treeContent = []
treeContent.name = '内容符合性结果'
data.forEach(item => {
if (item.id !== '11111' && item.id !== '22222' && item.id !== '33333' && item.id !== '44444' &&
item.id !== '55555') {
matchingItems_treeContent.push(item)
}
})
treeContent.children = matchingItems_treeContent
this.ruleTypeOptions.push(treeContent)
} }
}) })
}, },