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> |
|||
<w-grid |
|||
ref="treeGridRef" |
|||
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="['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> |
|||
<div style="height: 100%"> |
|||
<q-tabs v-model="selectedTabRef" inline-label align="left" :breakpoint="0" no-caps> |
|||
<q-tab name="parameter" icon="manage_search" :label="$t('re.blood.query.tab.parameter')" /> |
|||
<q-tab name="lib" icon="manage_search" :label="$t('re.blood.query.tab.lib')" /> |
|||
<q-tab name="indicator" icon="manage_search" :label="$t('re.blood.query.tab.indicator')" /> |
|||
</q-tabs> |
|||
<q-tab-panels v-model="selectedTabRef" animated swipeable keep-alive style="height: calc(100% - 48px)"> |
|||
<q-tab-panel name="parameter" class="px-0 pb-0" style="height: 100%; padding-left: 0px; padding-right: 0px; padding-bottom: 0px"> |
|||
<Parameter></Parameter> |
|||
</q-tab-panel> |
|||
<q-tab-panel name="lib" class="px-0 pb-0" style="height: 100%; padding-left: 0px; padding-right: 0px; padding-bottom: 0px"> |
|||
<Lib></Lib> |
|||
</q-tab-panel> |
|||
<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> |
|||
</div> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { ref } from 'vue'; |
|||
import { Environment, Formater, CorporationAuditorEntityManager } from 'platform-core'; |
|||
|
|||
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(); |
|||
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/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