Browse Source
1. 规则引擎将枚举变量替换为枚举值返回给客户端。 2. 决策引擎增加血缘关系查询 3. 修改 logback 日志配置 4. 提供用于检测 SQL 注入的辅助类 io.sc.platform.jdbc.util.SqlInjectionPreventer 5. 修改血缘关系查询条件中文提示 前端核心发布: 8.2.135 1. 修改错误处理机制 2. 决策引擎增加血缘关系查询,血缘关系采用树状展示main
10 changed files with 585 additions and 150 deletions
@ -1,126 +1,32 @@ |
|||||
<template> |
<template> |
||||
<w-grid |
<div style="height: 100%"> |
||||
ref="treeGridRef" |
<q-tabs v-model="selectedTabRef" inline-label align="left" :breakpoint="0" no-caps> |
||||
dense-body |
<q-tab name="parameter" icon="manage_search" :label="$t('re.blood.query.tab.parameter')" /> |
||||
:title="$t('re.resources.grid.title')" |
<q-tab name="lib" icon="manage_search" :label="$t('re.blood.query.tab.lib')" /> |
||||
:config-button="true" |
<q-tab name="indicator" icon="manage_search" :label="$t('re.blood.query.tab.indicator')" /> |
||||
:tree="true" |
</q-tabs> |
||||
:tree-icon=" |
<q-tab-panels v-model="selectedTabRef" animated swipeable keep-alive style="height: calc(100% - 48px)"> |
||||
(row: any) => { |
<q-tab-panel name="parameter" class="px-0 pb-0" style="height: 100%; padding-left: 0px; padding-right: 0px; padding-bottom: 0px"> |
||||
if (row.type === 'FOLDER') { |
<Parameter></Parameter> |
||||
return { name: 'folder', color: 'amber' }; |
</q-tab-panel> |
||||
} else if (row.type === 'MODEL') { |
<q-tab-panel name="lib" class="px-0 pb-0" style="height: 100%; padding-left: 0px; padding-right: 0px; padding-bottom: 0px"> |
||||
return { name: 'bi-boxes' }; |
<Lib></Lib> |
||||
} else { |
</q-tab-panel> |
||||
return { name: row.icon }; |
<q-tab-panel name="indicator" class="px-0 pb-0" style="height: 100%; padding-left: 0px; padding-right: 0px; padding-bottom: 0px"> |
||||
} |
<Indicator></Indicator> |
||||
} |
</q-tab-panel> |
||||
" |
</q-tab-panels> |
||||
selection="multiple" |
</div> |
||||
:checkbox-selection="false" |
|
||||
:fetch-data-url="Environment.apiContextPath('/api/re/blood/findResourcesByParameterCodeAndNameAndType')" |
|
||||
:sort-by="['name']" |
|
||||
:query-form-cols-num="3" |
|
||||
:query-form-fields="[ |
|
||||
{ name: 'code', label: $t('re.blood.grid.query.code'), type: 'w-text', queryOperator: 'equals' }, |
|
||||
{ name: 'name', label: $t('re.blood.grid.query.name'), type: 'w-text' }, |
|
||||
{ |
|
||||
name: 'type', |
|
||||
label: $t('re.blood.grid.query.type'), |
|
||||
type: 'w-select', |
|
||||
options: EngineEnums.ParameterType.options, |
|
||||
clearable: true, |
|
||||
}, |
|
||||
]" |
|
||||
:advanced-query="true" |
|
||||
:toolbar-configure="{ noIcon: false }" |
|
||||
:toolbar-actions="['query', 'reset', 'separator', 'expand', 'view', 'separator', 'export']" |
|
||||
:columns="[ |
|
||||
{ |
|
||||
width: 400, |
|
||||
name: 'namec', |
|
||||
label: $t('name'), |
|
||||
format: (value: any, row: any) => { |
|
||||
return row.name; |
|
||||
}, |
|
||||
}, |
|
||||
{ |
|
||||
width: 80, |
|
||||
name: 'type', |
|
||||
label: $t('type'), |
|
||||
showIf: false, |
|
||||
format: EngineEnums.ResourceType.formater, |
|
||||
}, |
|
||||
{ width: 150, name: 'code', label: $t('code'), showIf: false }, |
|
||||
{ width: 60, name: 'version', label: $t('version'), align: 'right' }, |
|
||||
{ |
|
||||
width: 60, |
|
||||
name: 'status', |
|
||||
label: $t('status'), |
|
||||
align: 'center', |
|
||||
format: EngineEnums.DeployStatus.formater, |
|
||||
}, |
|
||||
{ |
|
||||
width: 60, |
|
||||
name: 'preDeploy', |
|
||||
label: $t('re.resources.grid.entity.preDeploy'), |
|
||||
align: 'center', |
|
||||
sortable: false, |
|
||||
format: (value) => { |
|
||||
if (value) { |
|
||||
return Formater.yesNo()(value); |
|
||||
} |
|
||||
}, |
|
||||
}, |
|
||||
{ width: 120, name: 'taskName', label: $t('re.resources.grid.entity.taskName'), sortable: false }, |
|
||||
{ width: 80, name: 'taskAssignee', label: $t('re.resources.grid.entity.taskAssignee'), sortable: false }, |
|
||||
{ width: 100, name: 'lastModifier', label: $t('lastModifier') }, |
|
||||
{ width: 140, name: 'lastModifyDate', label: $t('lastModifyDate') }, |
|
||||
{ |
|
||||
width: 80, |
|
||||
name: 'attachmentCount', |
|
||||
label: $t('attachment'), |
|
||||
sortable: false, |
|
||||
align: 'right', |
|
||||
format: (value: any, row: any) => { |
|
||||
if (value > 0) { |
|
||||
return value; |
|
||||
} else { |
|
||||
return ''; |
|
||||
} |
|
||||
}, |
|
||||
}, |
|
||||
]" |
|
||||
:viewer="{ |
|
||||
panel: { |
|
||||
columnNum: 1, |
|
||||
fields: [ |
|
||||
{ name: 'type', label: $t('type') }, |
|
||||
{ name: 'parent', label: $t('parent') }, |
|
||||
{ name: 'id', label: $t('id') }, |
|
||||
{ name: 'code', label: $t('code') }, |
|
||||
{ name: 'name', label: $t('name') }, |
|
||||
{ name: 'description', label: $t('description') }, |
|
||||
{ name: 'version', label: $t('version') }, |
|
||||
{ name: 'status', label: $t('status'), format: Formater.none() }, |
|
||||
{ name: 'effectiveDate', label: $t('effectiveDate') }, |
|
||||
{ name: 'taskName', label: $t('re.resources.grid.entity.taskName') }, |
|
||||
{ name: 'taskAssignee', label: $t('re.resources.grid.entity.taskAssignee') }, |
|
||||
{ name: 'attachmentCount', label: $t('attachment') }, |
|
||||
{ name: 'imports', label: $t('imports') }, |
|
||||
{ name: 'order', label: $t('order') }, |
|
||||
...CorporationAuditorEntityManager.getViewerFields(), |
|
||||
], |
|
||||
}, |
|
||||
}" |
|
||||
> |
|
||||
</w-grid> |
|
||||
</template> |
</template> |
||||
<script setup lang="ts"> |
<script setup lang="ts"> |
||||
import { ref } from 'vue'; |
import { ref } from 'vue'; |
||||
import { Environment, Formater, CorporationAuditorEntityManager } from 'platform-core'; |
|
||||
import { EngineEnums } from '@/views/shared/enums/EngineEnums'; |
import { EngineEnums } from '@/views/shared/enums/EngineEnums'; |
||||
|
import Parameter from './Parameter.vue'; |
||||
|
import Lib from './Lib.vue'; |
||||
|
import Indicator from './Indicator.vue'; |
||||
|
|
||||
|
const selectedTabRef = ref('parameter'); |
||||
const treeGridRef = ref(); |
const treeGridRef = ref(); |
||||
await EngineEnums.init(); |
await EngineEnums.init(); |
||||
</script> |
</script> |
||||
|
|||||
@ -0,0 +1,123 @@ |
|||||
|
<template> |
||||
|
<w-grid |
||||
|
dense-body |
||||
|
:title="$t('re.resources.grid.title')" |
||||
|
:config-button="true" |
||||
|
:tree="true" |
||||
|
:tree-icon=" |
||||
|
(row: any) => { |
||||
|
if (row.type === 'FOLDER') { |
||||
|
return { name: 'folder', color: 'amber' }; |
||||
|
} else if (row.type === 'MODEL') { |
||||
|
return { name: 'bi-boxes' }; |
||||
|
} else { |
||||
|
return { name: row.icon }; |
||||
|
} |
||||
|
} |
||||
|
" |
||||
|
selection="multiple" |
||||
|
:checkbox-selection="false" |
||||
|
:fetch-data-url="Environment.apiContextPath('/api/re/blood/findResourcesByIndicatorCodeAndNameAndType')" |
||||
|
:sort-by="['type', 'namec', 'version']" |
||||
|
:query-form-cols-num="3" |
||||
|
:query-form-fields="[ |
||||
|
{ name: 'code', label: $t('re.blood.query.tab.indicator.code'), type: 'w-text', queryOperator: 'equals' }, |
||||
|
{ name: 'name', label: $t('re.blood.query.tab.indicator.name'), type: 'w-text' }, |
||||
|
{ |
||||
|
name: 'type', |
||||
|
label: $t('re.blood.query.tab.indicator.type'), |
||||
|
type: 'w-select', |
||||
|
options: EngineEnums.IndicatorType.options, |
||||
|
clearable: true, |
||||
|
}, |
||||
|
]" |
||||
|
:advanced-query="true" |
||||
|
:toolbar-configure="{ noIcon: false }" |
||||
|
:toolbar-actions="['query', 'reset', 'separator', 'expand', 'view', 'separator', 'export']" |
||||
|
:columns="[ |
||||
|
{ |
||||
|
width: 400, |
||||
|
name: 'namec', |
||||
|
label: $t('name'), |
||||
|
format: (value: any, row: any) => { |
||||
|
return row.name; |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
width: 80, |
||||
|
name: 'type', |
||||
|
label: $t('type'), |
||||
|
showIf: false, |
||||
|
format: EngineEnums.ResourceType.formater, |
||||
|
}, |
||||
|
{ width: 150, name: 'code', label: $t('code'), showIf: false }, |
||||
|
{ width: 60, name: 'version', label: $t('version'), align: 'right' }, |
||||
|
{ |
||||
|
width: 60, |
||||
|
name: 'status', |
||||
|
label: $t('status'), |
||||
|
align: 'center', |
||||
|
format: EngineEnums.DeployStatus.formater, |
||||
|
}, |
||||
|
{ |
||||
|
width: 60, |
||||
|
name: 'preDeploy', |
||||
|
label: $t('re.resources.grid.entity.preDeploy'), |
||||
|
align: 'center', |
||||
|
sortable: false, |
||||
|
format: (value) => { |
||||
|
if (value) { |
||||
|
return Formater.yesNo()(value); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
{ width: 120, name: 'taskName', label: $t('re.resources.grid.entity.taskName'), sortable: false }, |
||||
|
{ width: 80, name: 'taskAssignee', label: $t('re.resources.grid.entity.taskAssignee'), sortable: false }, |
||||
|
{ width: 100, name: 'lastModifier', label: $t('lastModifier') }, |
||||
|
{ width: 140, name: 'lastModifyDate', label: $t('lastModifyDate') }, |
||||
|
{ |
||||
|
width: 80, |
||||
|
name: 'attachmentCount', |
||||
|
label: $t('attachment'), |
||||
|
sortable: false, |
||||
|
align: 'right', |
||||
|
format: (value: any, row: any) => { |
||||
|
if (value > 0) { |
||||
|
return value; |
||||
|
} else { |
||||
|
return ''; |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
]" |
||||
|
:viewer="{ |
||||
|
panel: { |
||||
|
columnNum: 1, |
||||
|
fields: [ |
||||
|
{ name: 'type', label: $t('type') }, |
||||
|
{ name: 'parent', label: $t('parent') }, |
||||
|
{ name: 'id', label: $t('id') }, |
||||
|
{ name: 'code', label: $t('code') }, |
||||
|
{ name: 'name', label: $t('name') }, |
||||
|
{ name: 'description', label: $t('description') }, |
||||
|
{ name: 'version', label: $t('version') }, |
||||
|
{ name: 'status', label: $t('status'), format: Formater.none() }, |
||||
|
{ name: 'effectiveDate', label: $t('effectiveDate') }, |
||||
|
{ name: 'taskName', label: $t('re.resources.grid.entity.taskName') }, |
||||
|
{ name: 'taskAssignee', label: $t('re.resources.grid.entity.taskAssignee') }, |
||||
|
{ name: 'attachmentCount', label: $t('attachment') }, |
||||
|
{ name: 'imports', label: $t('imports') }, |
||||
|
{ name: 'order', label: $t('order') }, |
||||
|
...CorporationAuditorEntityManager.getViewerFields(), |
||||
|
], |
||||
|
}, |
||||
|
}" |
||||
|
> |
||||
|
</w-grid> |
||||
|
</template> |
||||
|
<script setup lang="ts"> |
||||
|
import { Environment, Formater, CorporationAuditorEntityManager } from 'platform-core'; |
||||
|
import { EngineEnums } from '@/views/shared/enums/EngineEnums'; |
||||
|
|
||||
|
await EngineEnums.init(); |
||||
|
</script> |
||||
@ -0,0 +1,117 @@ |
|||||
|
<template> |
||||
|
<w-grid |
||||
|
dense-body |
||||
|
:title="$t('re.resources.grid.title')" |
||||
|
:config-button="true" |
||||
|
:tree="true" |
||||
|
:tree-icon=" |
||||
|
(row: any) => { |
||||
|
if (row.type === 'FOLDER') { |
||||
|
return { name: 'folder', color: 'amber' }; |
||||
|
} else if (row.type === 'MODEL') { |
||||
|
return { name: 'bi-boxes' }; |
||||
|
} else { |
||||
|
return { name: row.icon }; |
||||
|
} |
||||
|
} |
||||
|
" |
||||
|
selection="multiple" |
||||
|
:checkbox-selection="false" |
||||
|
:fetch-data-url="Environment.apiContextPath('/api/re/blood/findResourcesByLibCodeAndVersionAndType')" |
||||
|
:sort-by="['type', 'namec', 'version']" |
||||
|
:query-form-cols-num="3" |
||||
|
:query-form-fields="[ |
||||
|
{ name: 'code', label: $t('re.blood.query.tab.lib.code'), type: 'w-text', queryOperator: 'equals' }, |
||||
|
{ name: 'name', label: $t('re.blood.query.tab.lib.name'), type: 'w-text' }, |
||||
|
{ name: 'version', label: $t('re.blood.query.tab.lib.version'), type: 'w-integer', queryOperator: 'equals' }, |
||||
|
]" |
||||
|
:advanced-query="true" |
||||
|
:toolbar-configure="{ noIcon: false }" |
||||
|
:toolbar-actions="['query', 'reset', 'separator', 'expand', 'view', 'separator', 'export']" |
||||
|
:columns="[ |
||||
|
{ |
||||
|
width: 400, |
||||
|
name: 'namec', |
||||
|
label: $t('name'), |
||||
|
format: (value: any, row: any) => { |
||||
|
return row.name; |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
width: 80, |
||||
|
name: 'type', |
||||
|
label: $t('type'), |
||||
|
showIf: false, |
||||
|
format: EngineEnums.ResourceType.formater, |
||||
|
}, |
||||
|
{ width: 150, name: 'code', label: $t('code'), showIf: false }, |
||||
|
{ width: 60, name: 'version', label: $t('version'), align: 'right' }, |
||||
|
{ |
||||
|
width: 60, |
||||
|
name: 'status', |
||||
|
label: $t('status'), |
||||
|
align: 'center', |
||||
|
format: EngineEnums.DeployStatus.formater, |
||||
|
}, |
||||
|
{ |
||||
|
width: 60, |
||||
|
name: 'preDeploy', |
||||
|
label: $t('re.resources.grid.entity.preDeploy'), |
||||
|
align: 'center', |
||||
|
sortable: false, |
||||
|
format: (value) => { |
||||
|
if (value) { |
||||
|
return Formater.yesNo()(value); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
{ width: 120, name: 'taskName', label: $t('re.resources.grid.entity.taskName'), sortable: false }, |
||||
|
{ width: 80, name: 'taskAssignee', label: $t('re.resources.grid.entity.taskAssignee'), sortable: false }, |
||||
|
{ width: 100, name: 'lastModifier', label: $t('lastModifier') }, |
||||
|
{ width: 140, name: 'lastModifyDate', label: $t('lastModifyDate') }, |
||||
|
{ |
||||
|
width: 80, |
||||
|
name: 'attachmentCount', |
||||
|
label: $t('attachment'), |
||||
|
sortable: false, |
||||
|
align: 'right', |
||||
|
format: (value: any, row: any) => { |
||||
|
if (value > 0) { |
||||
|
return value; |
||||
|
} else { |
||||
|
return ''; |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
]" |
||||
|
:viewer="{ |
||||
|
panel: { |
||||
|
columnNum: 1, |
||||
|
fields: [ |
||||
|
{ name: 'type', label: $t('type') }, |
||||
|
{ name: 'parent', label: $t('parent') }, |
||||
|
{ name: 'id', label: $t('id') }, |
||||
|
{ name: 'code', label: $t('code') }, |
||||
|
{ name: 'name', label: $t('name') }, |
||||
|
{ name: 'description', label: $t('description') }, |
||||
|
{ name: 'version', label: $t('version') }, |
||||
|
{ name: 'status', label: $t('status'), format: Formater.none() }, |
||||
|
{ name: 'effectiveDate', label: $t('effectiveDate') }, |
||||
|
{ name: 'taskName', label: $t('re.resources.grid.entity.taskName') }, |
||||
|
{ name: 'taskAssignee', label: $t('re.resources.grid.entity.taskAssignee') }, |
||||
|
{ name: 'attachmentCount', label: $t('attachment') }, |
||||
|
{ name: 'imports', label: $t('imports') }, |
||||
|
{ name: 'order', label: $t('order') }, |
||||
|
...CorporationAuditorEntityManager.getViewerFields(), |
||||
|
], |
||||
|
}, |
||||
|
}" |
||||
|
> |
||||
|
</w-grid> |
||||
|
</template> |
||||
|
<script setup lang="ts"> |
||||
|
import { Environment, Formater, CorporationAuditorEntityManager } from 'platform-core'; |
||||
|
import { EngineEnums } from '@/views/shared/enums/EngineEnums'; |
||||
|
|
||||
|
await EngineEnums.init(); |
||||
|
</script> |
||||
@ -0,0 +1,123 @@ |
|||||
|
<template> |
||||
|
<w-grid |
||||
|
dense-body |
||||
|
:title="$t('re.resources.grid.title')" |
||||
|
:config-button="true" |
||||
|
:tree="true" |
||||
|
:tree-icon=" |
||||
|
(row: any) => { |
||||
|
if (row.type === 'FOLDER') { |
||||
|
return { name: 'folder', color: 'amber' }; |
||||
|
} else if (row.type === 'MODEL') { |
||||
|
return { name: 'bi-boxes' }; |
||||
|
} else { |
||||
|
return { name: row.icon }; |
||||
|
} |
||||
|
} |
||||
|
" |
||||
|
selection="multiple" |
||||
|
:checkbox-selection="false" |
||||
|
:fetch-data-url="Environment.apiContextPath('/api/re/blood/findResourcesByParameterCodeAndNameAndType')" |
||||
|
:sort-by="['type', 'namec', 'version']" |
||||
|
:query-form-cols-num="3" |
||||
|
:query-form-fields="[ |
||||
|
{ name: 'code', label: $t('re.blood.query.tab.parameter.code'), type: 'w-text', queryOperator: 'equals' }, |
||||
|
{ name: 'name', label: $t('re.blood.query.tab.parameter.name'), type: 'w-text' }, |
||||
|
{ |
||||
|
name: 'type', |
||||
|
label: $t('re.blood.query.tab.parameter.type'), |
||||
|
type: 'w-select', |
||||
|
options: EngineEnums.ParameterType.options, |
||||
|
clearable: true, |
||||
|
}, |
||||
|
]" |
||||
|
:advanced-query="true" |
||||
|
:toolbar-configure="{ noIcon: false }" |
||||
|
:toolbar-actions="['query', 'reset', 'separator', 'expand', 'view', 'separator', 'export']" |
||||
|
:columns="[ |
||||
|
{ |
||||
|
width: 400, |
||||
|
name: 'namec', |
||||
|
label: $t('name'), |
||||
|
format: (value: any, row: any) => { |
||||
|
return row.name; |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
width: 80, |
||||
|
name: 'type', |
||||
|
label: $t('type'), |
||||
|
showIf: false, |
||||
|
format: EngineEnums.ResourceType.formater, |
||||
|
}, |
||||
|
{ width: 150, name: 'code', label: $t('code'), showIf: false }, |
||||
|
{ width: 60, name: 'version', label: $t('version'), align: 'right' }, |
||||
|
{ |
||||
|
width: 60, |
||||
|
name: 'status', |
||||
|
label: $t('status'), |
||||
|
align: 'center', |
||||
|
format: EngineEnums.DeployStatus.formater, |
||||
|
}, |
||||
|
{ |
||||
|
width: 60, |
||||
|
name: 'preDeploy', |
||||
|
label: $t('re.resources.grid.entity.preDeploy'), |
||||
|
align: 'center', |
||||
|
sortable: false, |
||||
|
format: (value) => { |
||||
|
if (value) { |
||||
|
return Formater.yesNo()(value); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
{ width: 120, name: 'taskName', label: $t('re.resources.grid.entity.taskName'), sortable: false }, |
||||
|
{ width: 80, name: 'taskAssignee', label: $t('re.resources.grid.entity.taskAssignee'), sortable: false }, |
||||
|
{ width: 100, name: 'lastModifier', label: $t('lastModifier') }, |
||||
|
{ width: 140, name: 'lastModifyDate', label: $t('lastModifyDate') }, |
||||
|
{ |
||||
|
width: 80, |
||||
|
name: 'attachmentCount', |
||||
|
label: $t('attachment'), |
||||
|
sortable: false, |
||||
|
align: 'right', |
||||
|
format: (value: any, row: any) => { |
||||
|
if (value > 0) { |
||||
|
return value; |
||||
|
} else { |
||||
|
return ''; |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
]" |
||||
|
:viewer="{ |
||||
|
panel: { |
||||
|
columnNum: 1, |
||||
|
fields: [ |
||||
|
{ name: 'type', label: $t('type') }, |
||||
|
{ name: 'parent', label: $t('parent') }, |
||||
|
{ name: 'id', label: $t('id') }, |
||||
|
{ name: 'code', label: $t('code') }, |
||||
|
{ name: 'name', label: $t('name') }, |
||||
|
{ name: 'description', label: $t('description') }, |
||||
|
{ name: 'version', label: $t('version') }, |
||||
|
{ name: 'status', label: $t('status'), format: Formater.none() }, |
||||
|
{ name: 'effectiveDate', label: $t('effectiveDate') }, |
||||
|
{ name: 'taskName', label: $t('re.resources.grid.entity.taskName') }, |
||||
|
{ name: 'taskAssignee', label: $t('re.resources.grid.entity.taskAssignee') }, |
||||
|
{ name: 'attachmentCount', label: $t('attachment') }, |
||||
|
{ name: 'imports', label: $t('imports') }, |
||||
|
{ name: 'order', label: $t('order') }, |
||||
|
...CorporationAuditorEntityManager.getViewerFields(), |
||||
|
], |
||||
|
}, |
||||
|
}" |
||||
|
> |
||||
|
</w-grid> |
||||
|
</template> |
||||
|
<script setup lang="ts"> |
||||
|
import { Environment, Formater, CorporationAuditorEntityManager } from 'platform-core'; |
||||
|
import { EngineEnums } from '@/views/shared/enums/EngineEnums'; |
||||
|
|
||||
|
await EngineEnums.init(); |
||||
|
</script> |
||||
Loading…
Reference in new issue