92 changed files with 1551 additions and 309 deletions
@ -0,0 +1,140 @@ |
|||||
|
<template> |
||||
|
<w-grid |
||||
|
ref="gridRef" |
||||
|
:title="$t('re.resources.designer.testCase.grid.title')" |
||||
|
dense-body |
||||
|
class="px-1" |
||||
|
hide-bottom |
||||
|
:config-button="false" |
||||
|
selection="multiple" |
||||
|
:checkbox-selection="false" |
||||
|
:tree="false" |
||||
|
:fetch-data-url="Environment.apiContextPath('/api/re/testCase/findByOwnerId?ownerId=' + lib.id)" |
||||
|
:data-url="Environment.apiContextPath('/api/re/testCase')" |
||||
|
:pageable="false" |
||||
|
:toolbar-configure="{ noIcon: false }" |
||||
|
:toolbar-actions="[ |
||||
|
'refresh', |
||||
|
'separator', |
||||
|
'add', |
||||
|
'clone', |
||||
|
{ |
||||
|
extend: 'clone', |
||||
|
name: 'deepClone', |
||||
|
label: $t('deepClone'), |
||||
|
icon: 'bi-copy', |
||||
|
click: (arg) => {}, |
||||
|
}, |
||||
|
'edit', |
||||
|
'remove', |
||||
|
'separator', |
||||
|
{ |
||||
|
name: 'execute', |
||||
|
label: $t('execute'), |
||||
|
icon: 'bi-caret-right', |
||||
|
}, |
||||
|
{ |
||||
|
name: 'executeAll', |
||||
|
label: $t('executeAll'), |
||||
|
icon: 'bi-caret-right-fill', |
||||
|
}, |
||||
|
'view', |
||||
|
'separator', |
||||
|
'export', |
||||
|
]" |
||||
|
:columns="[ |
||||
|
{ width: 50, name: 'order', label: $t('order'), hidden: true }, |
||||
|
{ width: 100, name: 'id', label: $t('id'), hidden: true }, |
||||
|
{ |
||||
|
width: 80, |
||||
|
name: 'testResult', |
||||
|
label: $t('re.resources.designer.testCase.grid.entity.testResult'), |
||||
|
align: 'center', |
||||
|
sortable: false, |
||||
|
format: PassOrNotFormater, |
||||
|
}, |
||||
|
{ width: 150, name: 'lastTestDate', label: $t('re.resources.designer.testCase.grid.entity.lastTestDate') }, |
||||
|
{ width: 200, name: 'name', label: $t('name') }, |
||||
|
{ width: '100%', name: 'description', label: $t('description') }, |
||||
|
]" |
||||
|
:editor="{ |
||||
|
dialog: { |
||||
|
width: '600px', |
||||
|
height: '250px', |
||||
|
}, |
||||
|
form: { |
||||
|
colsNum: 1, |
||||
|
fields: [ |
||||
|
{ name: 'order', label: $t('order'), type: 'text', hidden: true }, |
||||
|
{ name: 'id', label: $t('id'), type: 'text', hidden: true }, |
||||
|
{ name: 'ownerType', label: $t('ownerType'), type: 'text', defaultValue: 'MODEL', hidden: true }, |
||||
|
{ name: 'owner', label: $t('owner'), type: 'text', defaultValue: lib.resource, hidden: true }, |
||||
|
{ name: 'ownerId', label: $t('ownerId'), type: 'text', defaultValue: lib.resource, hidden: true }, |
||||
|
{ name: 'name', label: $t('name'), type: 'text', required: true }, |
||||
|
{ name: 'description', label: $t('description'), type: 'text' }, |
||||
|
], |
||||
|
}, |
||||
|
}" |
||||
|
:viewer="{ |
||||
|
panel: { |
||||
|
columnNum: 1, |
||||
|
fields: [ |
||||
|
{ name: 'order', label: $t('order') }, |
||||
|
{ name: 'id', label: $t('id') }, |
||||
|
{ name: 'name', label: $t('name') }, |
||||
|
{ name: 'description', label: $t('description') }, |
||||
|
|
||||
|
{ name: 'dataComeFrom', label: $t('dataComeFrom') }, |
||||
|
{ name: 'creator', label: $t('creator') }, |
||||
|
{ name: 'createDate', label: $t('createDate') }, |
||||
|
{ name: 'lastModifier', label: $t('lastModifier') }, |
||||
|
{ name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.none() }, |
||||
|
{ name: 'corporationCode', label: $t('corporationCode') }, |
||||
|
], |
||||
|
}, |
||||
|
}" |
||||
|
v-bind="attrs" |
||||
|
></w-grid> |
||||
|
</template> |
||||
|
<script setup lang="ts"> |
||||
|
import { onMounted, ref, useAttrs } from 'vue'; |
||||
|
import { axios, Environment, EnumTools, Formater, Options, Tools } from 'platform-core'; |
||||
|
import PassOrNotFormater from '@/utils/PassOrNotFormater'; |
||||
|
|
||||
|
const attrs = useAttrs(); |
||||
|
|
||||
|
const props = defineProps({ |
||||
|
lib: { type: Object, default: undefined }, |
||||
|
}); |
||||
|
|
||||
|
const gridRef = ref(); |
||||
|
|
||||
|
const refresh = () => { |
||||
|
gridRef?.value?.refresh(); |
||||
|
}; |
||||
|
|
||||
|
onMounted(() => { |
||||
|
gridRef?.value?.refresh(); |
||||
|
}); |
||||
|
|
||||
|
defineExpose({ |
||||
|
refresh, |
||||
|
}); |
||||
|
|
||||
|
const Enums = await EnumTools.fetch([ |
||||
|
'io.sc.platform.core.enums.RoundingMode', |
||||
|
'io.sc.engine.rule.core.enums.ParameterType', |
||||
|
'io.sc.engine.rule.core.enums.DeployStatus', |
||||
|
]); |
||||
|
let ValueTypeMap = {}; |
||||
|
const ValueTypeList = []; |
||||
|
const response = await axios.get(Environment.apiContextPath('/api/re/dictionary/getAllDictionaryMap')); |
||||
|
if (response && response.data) { |
||||
|
ValueTypeMap = {}; |
||||
|
ValueTypeList.splice(0, ValueTypeList.length); |
||||
|
for (const item of response.data) { |
||||
|
ValueTypeMap[item.key] = item.value; |
||||
|
ValueTypeList.push({ value: item.key, label: item.value }); |
||||
|
} |
||||
|
} |
||||
|
</script> |
@ -0,0 +1,192 @@ |
|||||
|
<template> |
||||
|
<w-grid |
||||
|
ref="gridRef" |
||||
|
:title="$t('re.resources.designer.testCaseParameter.grid.title')" |
||||
|
dense-body |
||||
|
class="px-1" |
||||
|
hide-bottom |
||||
|
:config-button="false" |
||||
|
selection="multiple" |
||||
|
:checkbox-selection="false" |
||||
|
:tree="false" |
||||
|
:tree-icon=" |
||||
|
(row) => { |
||||
|
if (row.category === 'M') { |
||||
|
return { name: 'folder', color: 'amber' }; |
||||
|
} else { |
||||
|
return { name: 'bi-p-circle' }; |
||||
|
} |
||||
|
} |
||||
|
" |
||||
|
:fetch-data-url="Environment.apiContextPath('/api/re/testCaseParameter/findByTestCase?testCaseId=' + testCase.id)" |
||||
|
:data-url="Environment.apiContextPath('/api/re/testCaseParameter')" |
||||
|
:pageable="false" |
||||
|
:toolbar-configure="{ noIcon: false }" |
||||
|
:toolbar-actions="[ |
||||
|
'refresh', |
||||
|
'separator', |
||||
|
'expand', |
||||
|
'separator', |
||||
|
{ |
||||
|
extend: 'edit', |
||||
|
}, |
||||
|
'separator', |
||||
|
{ |
||||
|
name: 'execute', |
||||
|
label: $t('execute'), |
||||
|
icon: 'bi-caret-right', |
||||
|
click: () => { |
||||
|
axios.post(Environment.apiContextPath('/api/re/testCase/executeTestCase/' + testCase.id)).then(() => { |
||||
|
gridRef?.refresh(); |
||||
|
}); |
||||
|
}, |
||||
|
}, |
||||
|
'separator', |
||||
|
'view', |
||||
|
'separator', |
||||
|
'export', |
||||
|
]" |
||||
|
:columns="[ |
||||
|
{ width: 300, name: 'name', label: $t('name') }, |
||||
|
{ width: 100, name: 'parameterType', label: $t('type'), format: Formater.enum(Enums.ParameterType) }, |
||||
|
{ |
||||
|
width: 100, |
||||
|
name: 'valueType', |
||||
|
label: $t('re.resources.designer.parameter.grid.entity.valueType'), |
||||
|
format: (value) => { |
||||
|
return ValueTypeMap[value]; |
||||
|
}, |
||||
|
}, |
||||
|
{ width: 100, name: 'defaultValue', label: $t('defaultValue') }, |
||||
|
{ width: 100, name: 'inputValue', label: $t('re.resources.designer.testCaseParameter.grid.entity.inputValue') }, |
||||
|
{ width: 100, name: 'expectValue', label: $t('re.resources.designer.testCaseParameter.grid.entity.expectValue') }, |
||||
|
{ width: 100, name: 'resultValue', label: $t('re.resources.designer.testCaseParameter.grid.entity.resultValue') }, |
||||
|
{ width: 100, name: 'skipCheck', label: $t('re.resources.designer.testCaseParameter.grid.entity.skipCheck') }, |
||||
|
{ width: 100, name: 'testResult', label: $t('re.resources.designer.testCaseParameter.grid.entity.testResult'), format: PassOrNotFormater }, |
||||
|
]" |
||||
|
:editor="{ |
||||
|
dialog: { |
||||
|
width: '600px', |
||||
|
}, |
||||
|
form: { |
||||
|
colsNum: 1, |
||||
|
fields: [ |
||||
|
{ name: 'testCase', label: $t('testCase'), type: 'text', defaultValue: testCase.id, hidden: true }, |
||||
|
{ name: 'id', label: $t('id'), type: 'text', hidden: true }, |
||||
|
{ name: 'source', label: $t('source'), type: 'text', hidden: true }, |
||||
|
{ name: 'parameterType', label: $t('parameterType'), type: 'text', hidden: true }, |
||||
|
{ name: 'scoreCardVarType', label: $t('scoreCardVarType'), type: 'text', hidden: true }, |
||||
|
{ name: 'indicatorType', label: $t('indicatorType'), type: 'text', hidden: true }, |
||||
|
{ |
||||
|
name: 'inputValue', |
||||
|
label: $t('re.resources.designer.testCaseParameter.grid.entity.inputValue'), |
||||
|
type: 'code-mirror', |
||||
|
rows: 4, |
||||
|
showIf: (arg) => { |
||||
|
const parameterType = arg.form.getFieldValue('parameterType'); |
||||
|
const scoreCardVarType = arg.form.getFieldValue('scoreCardVarType'); |
||||
|
const indicatorType = arg.form.getFieldValue('indicatorType'); |
||||
|
if ( |
||||
|
(!Tools.isUndefinedOrNull(parameterType) && (parameterType === 'IN' || parameterType === 'IN_OPTION' || parameterType === 'INDICATOR')) || |
||||
|
(!Tools.isUndefinedOrNull(scoreCardVarType) && scoreCardVarType !== 'RESULT') || |
||||
|
(!Tools.isUndefinedOrNull(indicatorType) && indicatorType === 'INTERFACE') |
||||
|
) { |
||||
|
return true; |
||||
|
} |
||||
|
return false; |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'expectValue', |
||||
|
label: $t('re.resources.designer.testCaseParameter.grid.entity.expectValue'), |
||||
|
type: 'code-mirror', |
||||
|
rows: 4, |
||||
|
showIf: (arg) => { |
||||
|
const parameterType = arg.form.getFieldValue('parameterType'); |
||||
|
const scoreCardVarType = arg.form.getFieldValue('scoreCardVarType'); |
||||
|
const indicatorType = arg.form.getFieldValue('indicatorType'); |
||||
|
if ( |
||||
|
(!Tools.isUndefinedOrNull(parameterType) && |
||||
|
(parameterType === 'INTERMEDIATE' || parameterType === 'OUT' || parameterType === 'RULE_RESULT' || parameterType === 'SINGLE_RULE_RESULT')) || |
||||
|
!Tools.isUndefinedOrNull(scoreCardVarType) || |
||||
|
(!Tools.isUndefinedOrNull(indicatorType) && indicatorType === 'INDICATOR') |
||||
|
) { |
||||
|
return true; |
||||
|
} |
||||
|
return false; |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'resultValue', |
||||
|
label: $t('re.resources.designer.testCaseParameter.grid.entity.resultValue'), |
||||
|
type: 'code-mirror', |
||||
|
rows: 4, |
||||
|
lang: 'json', |
||||
|
}, |
||||
|
{ name: 'skipCheck', label: $t('re.resources.designer.testCaseParameter.grid.entity.skipCheck'), type: 'checkbox' }, |
||||
|
], |
||||
|
}, |
||||
|
}" |
||||
|
:viewer="{ |
||||
|
panel: { |
||||
|
columnNum: 1, |
||||
|
fields: [ |
||||
|
{ name: 'dataComeFrom', label: $t('dataComeFrom') }, |
||||
|
{ name: 'creator', label: $t('creator') }, |
||||
|
{ name: 'createDate', label: $t('createDate') }, |
||||
|
{ name: 'lastModifier', label: $t('lastModifier') }, |
||||
|
{ name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.none() }, |
||||
|
{ name: 'corporationCode', label: $t('corporationCode') }, |
||||
|
], |
||||
|
}, |
||||
|
}" |
||||
|
@row-click=" |
||||
|
(evt, row, index) => { |
||||
|
emit('rowClick', evt, row, index); |
||||
|
} |
||||
|
" |
||||
|
@before-request-data=" |
||||
|
() => { |
||||
|
emit('beforeRequestData'); |
||||
|
} |
||||
|
" |
||||
|
></w-grid> |
||||
|
</template> |
||||
|
<script setup lang="ts"> |
||||
|
import { onMounted, ref } from 'vue'; |
||||
|
import { axios, Environment, EnumTools, Formater, Options, Tools } from 'platform-core'; |
||||
|
import PassOrNotFormater from '@/utils/PassOrNotFormater'; |
||||
|
|
||||
|
const props = defineProps({ |
||||
|
testCase: { type: Object, default: undefined }, |
||||
|
}); |
||||
|
|
||||
|
const emit = defineEmits<{ |
||||
|
(e: 'rowClick', evt: Event, row: any, index: number): void; |
||||
|
(e: 'beforeRequestData', requestParams: URLSearchParams | any, callback: any): void; |
||||
|
}>(); |
||||
|
|
||||
|
const gridRef = ref(); |
||||
|
|
||||
|
const refresh = () => { |
||||
|
gridRef?.value?.refresh(); |
||||
|
}; |
||||
|
|
||||
|
onMounted(() => { |
||||
|
gridRef?.value?.refresh(); |
||||
|
}); |
||||
|
|
||||
|
defineExpose({ |
||||
|
refresh, |
||||
|
}); |
||||
|
|
||||
|
const Enums = await EnumTools.fetch(['io.sc.engine.rule.core.enums.ParameterType']); |
||||
|
let ValueTypeMap = {}; |
||||
|
const response = await axios.get(Environment.apiContextPath('/api/re/dictionary/getAllDictionaryMap')); |
||||
|
if (response && response.data) { |
||||
|
ValueTypeMap = {}; |
||||
|
for (const item of response.data) { |
||||
|
ValueTypeMap[item.key] = item.value; |
||||
|
} |
||||
|
} |
||||
|
</script> |
@ -1,4 +1,283 @@ |
|||||
<template> |
<template> |
||||
<div>Testcase</div> |
<q-splitter :model-value="splitterRef" unit="px" separator-style="width: 3px;" class="w-full" style="height: 100%"> |
||||
|
<template #before> |
||||
|
<div class="pr-1" style="height: 100%"> |
||||
|
<w-grid |
||||
|
ref="testcaseGridRef" |
||||
|
:title="$t('re.resources.designer.testCase.grid.title')" |
||||
|
:config-button="false" |
||||
|
selection="multiple" |
||||
|
:checkbox-selection="false" |
||||
|
:tree="false" |
||||
|
:data-url="Environment.apiContextPath('/api/re/testCase')" |
||||
|
:pageable="true" |
||||
|
:toolbar-configure="{ noIcon: false }" |
||||
|
:toolbar-actions="[ |
||||
|
'refresh', |
||||
|
'separator', |
||||
|
'clone', |
||||
|
{ |
||||
|
extend: 'clone', |
||||
|
name: 'deepClone', |
||||
|
label: $t('deepClone'), |
||||
|
icon: 'bi-copy', |
||||
|
click: (arg) => {}, |
||||
|
}, |
||||
|
'edit', |
||||
|
'remove', |
||||
|
'separator', |
||||
|
{ |
||||
|
name: 'execute', |
||||
|
label: $t('execute'), |
||||
|
icon: 'bi-caret-right', |
||||
|
}, |
||||
|
{ |
||||
|
name: 'executeAll', |
||||
|
label: $t('executeAll'), |
||||
|
icon: 'bi-caret-right-fill', |
||||
|
}, |
||||
|
'view', |
||||
|
'separator', |
||||
|
'export', |
||||
|
]" |
||||
|
:columns="[ |
||||
|
{ width: 50, name: 'order', label: $t('order'), hidden: true }, |
||||
|
{ width: 100, name: 'id', label: $t('id'), hidden: true }, |
||||
|
{ |
||||
|
width: 80, |
||||
|
name: 'testResult', |
||||
|
label: $t('re.resources.designer.testCase.grid.entity.testResult'), |
||||
|
align: 'center', |
||||
|
sortable: false, |
||||
|
format: PassOrNotFormater, |
||||
|
}, |
||||
|
{ width: 150, name: 'lastTestDate', label: $t('re.resources.designer.testCase.grid.entity.lastTestDate') }, |
||||
|
{ width: 200, name: 'name', label: $t('name') }, |
||||
|
{ width: '100%', name: 'description', label: $t('description') }, |
||||
|
]" |
||||
|
:editor="{ |
||||
|
dialog: { |
||||
|
width: '600px', |
||||
|
height: '250px', |
||||
|
}, |
||||
|
form: { |
||||
|
colsNum: 1, |
||||
|
fields: [ |
||||
|
{ name: 'order', label: $t('order'), type: 'text', hidden: true }, |
||||
|
{ name: 'id', label: $t('id'), type: 'text', hidden: true }, |
||||
|
{ name: 'name', label: $t('name'), type: 'text', required: true }, |
||||
|
{ name: 'description', label: $t('description'), type: 'text' }, |
||||
|
], |
||||
|
}, |
||||
|
}" |
||||
|
:viewer="{ |
||||
|
panel: { |
||||
|
columnNum: 1, |
||||
|
fields: [ |
||||
|
{ name: 'order', label: $t('order') }, |
||||
|
{ name: 'id', label: $t('id') }, |
||||
|
{ name: 'name', label: $t('name') }, |
||||
|
{ name: 'description', label: $t('description') }, |
||||
|
|
||||
|
{ name: 'dataComeFrom', label: $t('dataComeFrom') }, |
||||
|
{ name: 'creator', label: $t('creator') }, |
||||
|
{ name: 'createDate', label: $t('createDate') }, |
||||
|
{ name: 'lastModifier', label: $t('lastModifier') }, |
||||
|
{ name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.none() }, |
||||
|
{ name: 'corporationCode', label: $t('corporationCode') }, |
||||
|
], |
||||
|
}, |
||||
|
}" |
||||
|
@row-click=" |
||||
|
(evt, row, index) => { |
||||
|
currentSelectedTestCaseRef = row; |
||||
|
testcaseParameterGridRef?.refresh(); |
||||
|
} |
||||
|
" |
||||
|
@before-request-data=" |
||||
|
() => { |
||||
|
currentSelectedTestCaseRef = {}; |
||||
|
testcaseParameterGridRef?.refresh(); |
||||
|
} |
||||
|
" |
||||
|
></w-grid> |
||||
|
</div> |
||||
|
</template> |
||||
|
<template #after> |
||||
|
<div class="pl-1" style="height: 100%"> |
||||
|
<w-grid |
||||
|
ref="testcaseParameterGridRef" |
||||
|
:title="$t('re.resources.designer.testCaseParameter.grid.title')" |
||||
|
dense-body |
||||
|
hide-bottom |
||||
|
:config-button="false" |
||||
|
selection="multiple" |
||||
|
:checkbox-selection="false" |
||||
|
:tree="true" |
||||
|
:tree-icon=" |
||||
|
(row) => { |
||||
|
if (row.category === 'M') { |
||||
|
return { name: 'folder', color: 'amber' }; |
||||
|
} else { |
||||
|
return { name: 'bi-p-circle' }; |
||||
|
} |
||||
|
} |
||||
|
" |
||||
|
:fetch-data-url="Environment.apiContextPath('/api/re/testCaseParameter/findByTestCase?testCaseId=' + currentSelectedTestCaseRef.id)" |
||||
|
:data-url="Environment.apiContextPath('/api/re/testCaseParameter')" |
||||
|
:pageable="false" |
||||
|
:toolbar-configure="{ noIcon: false }" |
||||
|
:toolbar-actions="[ |
||||
|
'refresh', |
||||
|
'separator', |
||||
|
'expand', |
||||
|
'separator', |
||||
|
{ |
||||
|
extend: 'edit', |
||||
|
}, |
||||
|
'separator', |
||||
|
{ |
||||
|
name: 'execute', |
||||
|
label: $t('execute'), |
||||
|
icon: 'bi-caret-right', |
||||
|
click: () => { |
||||
|
axios.post(Environment.apiContextPath('/api/re/testCase/executeTestCase/' + currentSelectedTestCaseRef.id)).then(() => { |
||||
|
testcaseParameterGridRef?.refresh(); |
||||
|
}); |
||||
|
}, |
||||
|
}, |
||||
|
'separator', |
||||
|
'view', |
||||
|
'separator', |
||||
|
'export', |
||||
|
]" |
||||
|
:columns="[ |
||||
|
{ width: 300, name: 'name', label: $t('name') }, |
||||
|
{ width: 100, name: 'parameterType', label: $t('type'), format: Formater.enum(Enums.ParameterType) }, |
||||
|
{ |
||||
|
width: 100, |
||||
|
name: 'valueType', |
||||
|
label: $t('re.resources.designer.parameter.grid.entity.valueType'), |
||||
|
format: (value) => { |
||||
|
return ValueTypeMap[value]; |
||||
|
}, |
||||
|
}, |
||||
|
{ width: 100, name: 'defaultValue', label: $t('defaultValue') }, |
||||
|
{ width: 100, name: 'inputValue', label: $t('re.resources.designer.testCaseParameter.grid.entity.inputValue') }, |
||||
|
{ width: 100, name: 'expectValue', label: $t('re.resources.designer.testCaseParameter.grid.entity.expectValue') }, |
||||
|
{ width: 100, name: 'resultValue', label: $t('re.resources.designer.testCaseParameter.grid.entity.resultValue') }, |
||||
|
{ width: 100, name: 'skipCheck', label: $t('re.resources.designer.testCaseParameter.grid.entity.skipCheck') }, |
||||
|
{ width: 100, name: 'testResult', label: $t('re.resources.designer.testCaseParameter.grid.entity.testResult'), format: PassOrNotFormater }, |
||||
|
]" |
||||
|
:editor="{ |
||||
|
dialog: { |
||||
|
width: '600px', |
||||
|
}, |
||||
|
form: { |
||||
|
colsNum: 1, |
||||
|
fields: [ |
||||
|
{ name: 'testCase', label: $t('testCase'), type: 'text', defaultValue: currentSelectedTestCaseRef.id, hidden: true }, |
||||
|
{ name: 'id', label: $t('id'), type: 'text', hidden: true }, |
||||
|
{ name: 'source', label: $t('source'), type: 'text', hidden: true }, |
||||
|
{ name: 'parameterType', label: $t('parameterType'), type: 'text', hidden: true }, |
||||
|
{ name: 'scoreCardVarType', label: $t('scoreCardVarType'), type: 'text', hidden: true }, |
||||
|
{ name: 'indicatorType', label: $t('indicatorType'), type: 'text', hidden: true }, |
||||
|
{ |
||||
|
name: 'inputValue', |
||||
|
label: $t('re.resources.designer.testCaseParameter.grid.entity.inputValue'), |
||||
|
type: 'code-mirror', |
||||
|
rows: 4, |
||||
|
showIf: (arg) => { |
||||
|
const parameterType = arg.form.getFieldValue('parameterType'); |
||||
|
const scoreCardVarType = arg.form.getFieldValue('scoreCardVarType'); |
||||
|
const indicatorType = arg.form.getFieldValue('indicatorType'); |
||||
|
if ( |
||||
|
(!Tools.isUndefinedOrNull(parameterType) && (parameterType === 'IN' || parameterType === 'IN_OPTION' || parameterType === 'INDICATOR')) || |
||||
|
(!Tools.isUndefinedOrNull(scoreCardVarType) && scoreCardVarType !== 'RESULT') || |
||||
|
(!Tools.isUndefinedOrNull(indicatorType) && indicatorType === 'INTERFACE') |
||||
|
) { |
||||
|
return true; |
||||
|
} |
||||
|
return false; |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'expectValue', |
||||
|
label: $t('re.resources.designer.testCaseParameter.grid.entity.expectValue'), |
||||
|
type: 'code-mirror', |
||||
|
rows: 4, |
||||
|
showIf: (arg) => { |
||||
|
const parameterType = arg.form.getFieldValue('parameterType'); |
||||
|
const scoreCardVarType = arg.form.getFieldValue('scoreCardVarType'); |
||||
|
const indicatorType = arg.form.getFieldValue('indicatorType'); |
||||
|
if ( |
||||
|
(!Tools.isUndefinedOrNull(parameterType) && |
||||
|
(parameterType === 'INTERMEDIATE' || |
||||
|
parameterType === 'OUT' || |
||||
|
parameterType === 'RULE_RESULT' || |
||||
|
parameterType === 'SINGLE_RULE_RESULT')) || |
||||
|
!Tools.isUndefinedOrNull(scoreCardVarType) || |
||||
|
(!Tools.isUndefinedOrNull(indicatorType) && indicatorType === 'INDICATOR') |
||||
|
) { |
||||
|
return true; |
||||
|
} |
||||
|
return false; |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'resultValue', |
||||
|
label: $t('re.resources.designer.testCaseParameter.grid.entity.resultValue'), |
||||
|
type: 'code-mirror', |
||||
|
rows: 4, |
||||
|
lang: 'json', |
||||
|
}, |
||||
|
{ name: 'skipCheck', label: $t('re.resources.designer.testCaseParameter.grid.entity.skipCheck'), type: 'checkbox' }, |
||||
|
], |
||||
|
}, |
||||
|
}" |
||||
|
:viewer="{ |
||||
|
panel: { |
||||
|
columnNum: 1, |
||||
|
fields: [ |
||||
|
{ name: 'dataComeFrom', label: $t('dataComeFrom') }, |
||||
|
{ name: 'creator', label: $t('creator') }, |
||||
|
{ name: 'createDate', label: $t('createDate') }, |
||||
|
{ name: 'lastModifier', label: $t('lastModifier') }, |
||||
|
{ name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.none() }, |
||||
|
{ name: 'corporationCode', label: $t('corporationCode') }, |
||||
|
], |
||||
|
}, |
||||
|
}" |
||||
|
></w-grid> |
||||
|
</div> |
||||
|
</template> |
||||
|
</q-splitter> |
||||
</template> |
</template> |
||||
<script setup lang="ts"></script> |
<script setup lang="ts"> |
||||
|
import { onMounted, ref, useAttrs } from 'vue'; |
||||
|
import { axios, Environment, EnumTools, Formater, Options, Tools } from 'platform-core'; |
||||
|
import PassOrNotFormater from '@/utils/PassOrNotFormater'; |
||||
|
|
||||
|
const splitterRef = ref(400); //特征库上下分割符上面的高度 |
||||
|
const testcaseGridRef = ref(); |
||||
|
const testcaseParameterGridRef = ref(); |
||||
|
|
||||
|
const currentSelectedTestCaseRef = ref({}); |
||||
|
|
||||
|
const Enums = await EnumTools.fetch([ |
||||
|
'io.sc.platform.core.enums.RoundingMode', |
||||
|
'io.sc.engine.rule.core.enums.ParameterType', |
||||
|
'io.sc.engine.rule.core.enums.DeployStatus', |
||||
|
]); |
||||
|
let ValueTypeMap = {}; |
||||
|
const ValueTypeList = []; |
||||
|
const response = await axios.get(Environment.apiContextPath('/api/re/dictionary/getAllDictionaryMap')); |
||||
|
if (response && response.data) { |
||||
|
ValueTypeMap = {}; |
||||
|
ValueTypeList.splice(0, ValueTypeList.length); |
||||
|
for (const item of response.data) { |
||||
|
ValueTypeMap[item.key] = item.value; |
||||
|
ValueTypeList.push({ value: item.key, label: item.value }); |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
@ -1,4 +1,223 @@ |
|||||
<template> |
<template> |
||||
<div>workflow</div> |
<q-splitter :model-value="splitterRef" unit="px" separator-style="width: 3px;" class="w-full" style="height: 100%"> |
||||
|
<template #before> |
||||
|
<div class="pr-1" style="height: 100%"> |
||||
|
<w-grid |
||||
|
ref="processTaskGridRef" |
||||
|
:title="$t('re.workflow.task.grid.title')" |
||||
|
:config-button="false" |
||||
|
selection="multiple" |
||||
|
:checkbox-selection="false" |
||||
|
:tree="false" |
||||
|
:fetch-data-url="Environment.apiContextPath('/api/re/resource/workflow/task/query')" |
||||
|
:pageable="true" |
||||
|
:toolbar-configure="{ noIcon: false }" |
||||
|
:toolbar-actions="[ |
||||
|
'refresh', |
||||
|
'separator', |
||||
|
{ |
||||
|
name: 'viewResource', |
||||
|
label: $t('re.workflow.task.grid.toolbar.viewResource'), |
||||
|
icon: 'bi-boxes', |
||||
|
}, |
||||
|
{ |
||||
|
name: 'attachment', |
||||
|
label: $t('re.workflow.task.grid.toolbar.viewAttachment'), |
||||
|
icon: 'bi-briefcase-fill', |
||||
|
enableIf: (arg) => { |
||||
|
return arg.selected && arg.selected.attachments; |
||||
|
}, |
||||
|
click: (arg) => { |
||||
|
if (arg.selected) { |
||||
|
foreignValueRef = arg.selected.id; |
||||
|
attachmentDialogRef.open(); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
'separator', |
||||
|
[ |
||||
|
{ |
||||
|
label: $t('operation'), |
||||
|
icon: 'bi-cursor', |
||||
|
}, |
||||
|
{ |
||||
|
name: 'claim', |
||||
|
label: $t('re.workflow.task.grid.toolbar.claim'), |
||||
|
icon: 'bi-clipboard-check', |
||||
|
enableIf: function (selecteds) { |
||||
|
return selecteds && selecteds.length > 0 && !selecteds[0].assignee; |
||||
|
}, |
||||
|
click: (arg) => { |
||||
|
if (arg.selected) { |
||||
|
DialogManager.confirm($t('re.workflow.task.grid.toolbar.claim.tip'), () => { |
||||
|
axios.post(Environment.apiContextPath('/api/flowable/process/operation/claim/') + arg.selected.id).then(() => { |
||||
|
taskGridRef.refresh(); |
||||
|
NotifyManager.success(); |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'unclaim', |
||||
|
label: $t('re.workflow.task.grid.toolbar.unclaim'), |
||||
|
icon: 'bi-clipboard-x', |
||||
|
enableIf: function (arg) { |
||||
|
return arg.selected && arg.selected.assignee; |
||||
|
}, |
||||
|
click: (arg) => { |
||||
|
if (arg.selected) { |
||||
|
DialogManager.confirm($t('re.workflow.task.grid.toolbar.unclaim.tip'), () => { |
||||
|
axios.post(Environment.apiContextPath('/api/flowable/process/operation/unClaim/') + arg.selected.id).then(() => { |
||||
|
taskGridRef.refresh(); |
||||
|
NotifyManager.success(); |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'complete', |
||||
|
label: $t('re.workflow.task.grid.toolbar.complete'), |
||||
|
icon: 'bi-caret-right', |
||||
|
enableIf: function (arg) { |
||||
|
return arg.selected; |
||||
|
}, |
||||
|
click: (arg) => { |
||||
|
if (arg.selected) { |
||||
|
completeTaskDialogRef.open(arg.selected.id); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
name: 'terminate', |
||||
|
label: $t('re.workflow.task.grid.toolbar.terminate'), |
||||
|
icon: 'bi-stop', |
||||
|
enableIf: function (arg) { |
||||
|
return arg.selected; |
||||
|
}, |
||||
|
click: (arg) => { |
||||
|
if (arg.selected) { |
||||
|
DialogManager.confirm($t('re.workflow.task.grid.toolbar.terminate.tip'), () => { |
||||
|
axios.post(Environment.apiContextPath('/api/flowable/process/operation/terminateProcessInstance/') + arg.selected.id).then(() => { |
||||
|
taskGridRef.refresh(); |
||||
|
NotifyManager.success(); |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
], |
||||
|
'separator', |
||||
|
'view', |
||||
|
'separator', |
||||
|
'export', |
||||
|
]" |
||||
|
:columns="[ |
||||
|
{ width: 50, name: 'resourceType', label: $t('type') }, |
||||
|
{ width: 50, name: 'resourceCode', label: $t('code') }, |
||||
|
{ width: 50, name: 'resourceName', label: $t('name') }, |
||||
|
{ width: 50, name: 'resourceVersion', label: $t('version') }, |
||||
|
{ width: 50, name: 'attachments', label: $t('attachment') }, |
||||
|
{ width: 50, name: 'taskName', label: $t('re.workflow.task.grid.entity.taskName') }, |
||||
|
{ width: 50, name: 'taskAssignee', label: $t('re.workflow.task.grid.entity.taskAssignee') }, |
||||
|
{ width: 50, name: 'taskCreateTime', label: $t('re.workflow.task.grid.entity.taskCreateTime') }, |
||||
|
]" |
||||
|
:editor="{ |
||||
|
dialog: { |
||||
|
width: '600px', |
||||
|
height: '250px', |
||||
|
}, |
||||
|
form: { |
||||
|
colsNum: 1, |
||||
|
fields: [ |
||||
|
{ name: 'order', label: $t('order'), type: 'text', hidden: true }, |
||||
|
{ name: 'id', label: $t('id'), type: 'text', hidden: true }, |
||||
|
{ name: 'name', label: $t('name'), type: 'text', required: true }, |
||||
|
{ name: 'description', label: $t('description'), type: 'text' }, |
||||
|
], |
||||
|
}, |
||||
|
}" |
||||
|
:viewer="{ |
||||
|
panel: { |
||||
|
columnNum: 1, |
||||
|
fields: [ |
||||
|
{ name: 'order', label: $t('order') }, |
||||
|
{ name: 'id', label: $t('id') }, |
||||
|
{ name: 'name', label: $t('name') }, |
||||
|
{ name: 'description', label: $t('description') }, |
||||
|
|
||||
|
{ name: 'dataComeFrom', label: $t('dataComeFrom') }, |
||||
|
{ name: 'creator', label: $t('creator') }, |
||||
|
{ name: 'createDate', label: $t('createDate') }, |
||||
|
{ name: 'lastModifier', label: $t('lastModifier') }, |
||||
|
{ name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.none() }, |
||||
|
{ name: 'corporationCode', label: $t('corporationCode') }, |
||||
|
], |
||||
|
}, |
||||
|
}" |
||||
|
@row-click=" |
||||
|
(evt, row, index) => { |
||||
|
currentSelectedTaskRef = row; |
||||
|
historyProcessTaskGridRef?.refresh(); |
||||
|
} |
||||
|
" |
||||
|
@before-request-data=" |
||||
|
() => { |
||||
|
currentSelectedTaskRef = {}; |
||||
|
historyProcessTaskGridRef?.refresh(); |
||||
|
} |
||||
|
" |
||||
|
></w-grid> |
||||
|
</div> |
||||
|
</template> |
||||
|
<template #after> |
||||
|
<div class="pl-1" style="height: 100%"> |
||||
|
<w-grid |
||||
|
ref="historyProcessTaskGridRef" |
||||
|
:title="$t('re.workflow.historyTask.grid.title')" |
||||
|
dense-body |
||||
|
hide-bottom |
||||
|
:config-button="false" |
||||
|
selection="multiple" |
||||
|
:checkbox-selection="false" |
||||
|
:tree="false" |
||||
|
:fetch-data-url="Environment.apiContextPath('/api/re/testCaseParameter/findByTestCase?testCaseId=' + currentSelectedTaskRef.id)" |
||||
|
:pageable="false" |
||||
|
:toolbar-configure="{ noIcon: false }" |
||||
|
:toolbar-actions="['refresh', 'separator', 'view', 'separator', 'export']" |
||||
|
:columns="[ |
||||
|
{ width: 100, name: 'taskName', label: $t('re.workflow.task.grid.entity.taskName') }, |
||||
|
{ width: 100, name: 'taskAssignee', label: $t('re.workflow.task.grid.entity.taskAssignee') }, |
||||
|
{ width: 120, name: 'taskEndTime', label: $t('re.workflow.task.grid.entity.taskEndTime') }, |
||||
|
{ width: 300, name: 'taskTreatment', label: $t('re.workflow.task.grid.entity.taskTreatment') }, |
||||
|
]" |
||||
|
:viewer="{ |
||||
|
panel: { |
||||
|
columnNum: 1, |
||||
|
fields: [ |
||||
|
{ name: 'dataComeFrom', label: $t('dataComeFrom') }, |
||||
|
{ name: 'creator', label: $t('creator') }, |
||||
|
{ name: 'createDate', label: $t('createDate') }, |
||||
|
{ name: 'lastModifier', label: $t('lastModifier') }, |
||||
|
{ name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.none() }, |
||||
|
{ name: 'corporationCode', label: $t('corporationCode') }, |
||||
|
], |
||||
|
}, |
||||
|
}" |
||||
|
></w-grid> |
||||
|
</div> |
||||
|
</template> |
||||
|
</q-splitter> |
||||
</template> |
</template> |
||||
<script setup lang="ts"></script> |
<script setup lang="ts"> |
||||
|
import { onMounted, ref, useAttrs } from 'vue'; |
||||
|
import { axios, Environment, EnumTools, Formater, Options, Tools } from 'platform-core'; |
||||
|
import PassOrNotFormater from '@/utils/PassOrNotFormater'; |
||||
|
|
||||
|
const splitterRef = ref(800); //特征库上下分割符上面的高度 |
||||
|
const processTaskGridRef = ref(); |
||||
|
const historyProcessTaskGridRef = ref(); |
||||
|
|
||||
|
const currentSelectedTaskRef = ref({}); |
||||
|
</script> |
||||
|
@ -0,0 +1,37 @@ |
|||||
|
import { blobAxios } from '@/platform'; |
||||
|
|
||||
|
class Downloader { |
||||
|
public static get(url: string, data: any) { |
||||
|
blobAxios.get(url, data, { responseType: 'blob' }).then((response) => { |
||||
|
Downloader.download(response); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
public static post(url: string, data: any) { |
||||
|
blobAxios.post(url, data, { responseType: 'blob' }).then((response) => { |
||||
|
Downloader.download(response); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
private static download(response) { |
||||
|
if (response) { |
||||
|
const { data, headers } = response; |
||||
|
let fileName = headers['content-disposition-url-encode'].match(/filename=(.*)/)[1]; |
||||
|
fileName = decodeURIComponent(fileName || 'download'); |
||||
|
// 如果下载的内容是 json 字符串, 返回的 data 是一个 js Object, 需要转换成 json 字符串
|
||||
|
const _data = data instanceof Object ? JSON.stringify(data, null, ' ') : data; |
||||
|
const blob = new Blob([_data], { type: headers['content-type'] }); |
||||
|
const url = window.URL.createObjectURL(blob); |
||||
|
const a = document.createElement('a'); |
||||
|
a.href = url; |
||||
|
a.download = decodeURI(fileName); |
||||
|
a.style.display = 'none'; |
||||
|
document.body.appendChild(a); |
||||
|
a.click(); |
||||
|
a.parentNode.removeChild(a); |
||||
|
window.URL.revokeObjectURL(url); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
export { Downloader }; |
@ -1,39 +1,25 @@ |
|||||
<template> |
<template> |
||||
<w-grid |
<div class="w-full border rounded-md" style="height: 100%"> |
||||
ref="userGridRef" |
<ToolBar></ToolBar> |
||||
:height="300" |
<q-splitter :model-value="20" unit="%" separator-style="width:2px;" style="height: calc(100% - 50px)"> |
||||
:title="$t('system.user.grid.title')" |
<template #before> |
||||
:config-button="true" |
<SideBar></SideBar> |
||||
selection="multiple" |
</template> |
||||
:checkbox-selection="true" |
<template #after> |
||||
:data-url="Environment.apiContextPath('/api/system/user')" |
<q-splitter :model-value="65" unit="%" separator-style="width:2px;" style="height: 100%"> |
||||
:pagination="{ |
<template #before><Editor></Editor></template> |
||||
sortBy: 'loginName', |
<template #after><Properties></Properties></template> |
||||
descending: false, |
</q-splitter> |
||||
}" |
</template> |
||||
:query-form-cols-num="3" |
</q-splitter> |
||||
:query-form-fields="[ |
</div> |
||||
{ name: 'loginName', label: $t('loginName'), type: 'text' }, |
|
||||
{ name: 'userName', label: $t('userName'), type: 'text' }, |
|
||||
{ name: 'enable', label: $t('isEnable'), type: 'select' }, |
|
||||
]" |
|
||||
:toolbar-configure="{ noIcon: false }" |
|
||||
:toolbar-actions="['query', 'refresh', 'separator', 'add', 'clone', 'edit', 'remove', 'separator']" |
|
||||
:columns="[ |
|
||||
{ width: 150, name: 'loginName', label: $t('loginName') }, |
|
||||
{ width: '100%', name: 'userName', label: $t('userName') }, |
|
||||
{ |
|
||||
width: 150, |
|
||||
name: 'enable', |
|
||||
label: $t('status'), |
|
||||
format: Formater.checkTag(), |
|
||||
}, |
|
||||
{ width: 100, name: 'lastModifier', label: $t('lastModifier') }, |
|
||||
{ width: 110, name: 'lastModifyDate', label: $t('lastModifyDate') }, |
|
||||
]" |
|
||||
></w-grid> |
|
||||
</template> |
</template> |
||||
|
|
||||
<script setup lang="ts"> |
<script setup lang="ts"> |
||||
import { Environment, Formater } from '@/platform'; |
import { ref, onMounted } from 'vue'; |
||||
|
import { type CellStyle, Graph, InternalEvent } from '@maxgraph/core'; |
||||
|
import ToolBar from './ToolBar.vue'; |
||||
|
import SideBar from './SideBar.vue'; |
||||
|
import Editor from './Editor.vue'; |
||||
|
import Properties from './Properties.vue'; |
||||
</script> |
</script> |
||||
|
@ -0,0 +1,8 @@ |
|||||
|
dependencies { |
||||
|
api( |
||||
|
"org.apache.poi:ooxml-schemas:${ooxml_schemas_version}", |
||||
|
"org.apache.poi:poi:${poi_version}", |
||||
|
"org.apache.poi:poi-ooxml:${poi_version}", |
||||
|
"org.apache.poi:poi-scratchpad:${poi_version}", |
||||
|
) |
||||
|
} |
@ -1,6 +1,7 @@ |
|||||
{ |
{ |
||||
"includes":[ |
"includes":[ |
||||
"io/sc/platform/security/i18n/initializer", |
"io/sc/platform/security/i18n/initializer", |
||||
"io/sc/platform/security/i18n/messages" |
"io/sc/platform/security/i18n/messages", |
||||
|
"io/sc/platform/security/i18n/parameter" |
||||
] |
] |
||||
} |
} |
@ -0,0 +1,3 @@ |
|||||
|
parameter.login.encodePassword=Encode Password in Login Page |
||||
|
parameter.login.encodePassword.options.true=True |
||||
|
parameter.login.encodePassword.options.false=False |
@ -0,0 +1,3 @@ |
|||||
|
parameter.login.encodePassword=\u767B\u9304\u9801\u9762\u5BC6\u78BC\u52A0\u5BC6 |
||||
|
parameter.login.encodePassword.options.true=\u662F |
||||
|
parameter.login.encodePassword.options.false=\u5426 |
@ -0,0 +1,3 @@ |
|||||
|
parameter.login.encodePassword=\u767B\u5F55\u9875\u9762\u5BC6\u7801\u52A0\u5BC6 |
||||
|
parameter.login.encodePassword.options.true=\u662F |
||||
|
parameter.login.encodePassword.options.false=\u5426 |
@ -1,15 +1,48 @@ |
|||||
package io.sc.platform.system.parameter.controller; |
package io.sc.platform.system.parameter.controller; |
||||
|
|
||||
import io.sc.platform.mvc.controller.support.RestCrudController; |
import io.sc.platform.mvc.controller.support.RestCrudController; |
||||
|
import io.sc.platform.mvc.plugins.PluginManager; |
||||
|
import io.sc.platform.mvc.plugins.item.Parameter; |
||||
|
import io.sc.platform.orm.service.support.QueryParameter; |
||||
import io.sc.platform.system.api.parameter.ParameterVo; |
import io.sc.platform.system.api.parameter.ParameterVo; |
||||
import io.sc.platform.system.parameter.jpa.entity.ParameterEntity; |
import io.sc.platform.system.parameter.jpa.entity.ParameterEntity; |
||||
import io.sc.platform.system.parameter.jpa.repository.ParameterRepository; |
import io.sc.platform.system.parameter.jpa.repository.ParameterRepository; |
||||
import io.sc.platform.system.parameter.service.ParameterService; |
import io.sc.platform.system.parameter.service.ParameterService; |
||||
|
import org.springframework.data.domain.Page; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
import org.springframework.web.bind.annotation.RequestMapping; |
||||
import org.springframework.web.bind.annotation.RestController; |
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
import javax.servlet.http.HttpServletRequest; |
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
@RestController |
@RestController |
||||
@RequestMapping("api/system/parameter") |
@RequestMapping("api/system/parameter") |
||||
public class ParameterWebController extends RestCrudController<ParameterVo, ParameterEntity,String, ParameterRepository, ParameterService> { |
public class ParameterWebController extends RestCrudController<ParameterVo, ParameterEntity,String, ParameterRepository, ParameterService> { |
||||
|
@Override |
||||
|
protected Page<ParameterVo> query(HttpServletRequest request, HttpServletResponse response, QueryParameter queryParameter) throws Exception { |
||||
|
Page<ParameterVo> page =super.query(request, response, queryParameter); |
||||
|
List<ParameterVo> vos =page.getContent(); |
||||
|
if(vos!=null && !vos.isEmpty()){ |
||||
|
List<Parameter> parameters = PluginManager.getInstance().getParameters(); |
||||
|
if(parameters!=null && !parameters.isEmpty()){ |
||||
|
Map<String,Parameter> parameterMap =new HashMap<>(parameters.size()); |
||||
|
for(Parameter parameter : parameters){ |
||||
|
parameterMap.put(parameter.getCode(),parameter); |
||||
|
} |
||||
|
for(ParameterVo vo : vos){ |
||||
|
Parameter parameter =parameterMap.get(vo.getCode()); |
||||
|
if(parameter!=null) { |
||||
|
vo.setDefaultValue(parameter.getDefaultValue()); |
||||
|
if (parameter.getOptions() != null) { |
||||
|
vo.setOptions(parameter.getOptions()); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return page; |
||||
|
} |
||||
} |
} |
||||
|
@ -1,5 +1,6 @@ |
|||||
{ |
{ |
||||
"includes":[ |
"includes":[ |
||||
"io/sc/platform/system/i18n/initializer" |
"io/sc/platform/system/i18n/initializer", |
||||
|
"io/sc/platform/system/i18n/parameter" |
||||
] |
] |
||||
} |
} |
@ -0,0 +1,3 @@ |
|||||
|
parameter.system=System |
||||
|
parameter.system.homePage=Home Page |
||||
|
parameter.login.encodePassword=\u767B\u9304\u9801\u9762\u5BC6\u78BC\u52A0\u5BC6 |
@ -0,0 +1,3 @@ |
|||||
|
parameter.system=\u7CFB\u7D71 |
||||
|
parameter.system.homePage=\u9996\u9801 |
||||
|
parameter.login.encodePassword=\u767B\u9304\u9801\u9762\u5BC6\u78BC\u52A0\u5BC6 |
@ -0,0 +1,3 @@ |
|||||
|
parameter.system=\u7CFB\u7EDF |
||||
|
parameter.system.homePage=\u9996\u9875 |
||||
|
parameter.login.encodePassword=\u767B\u9304\u9801\u9762\u5BC6\u78BC\u52A0\u5BC6 |
Loading…
Reference in new issue