@ -17,25 +17,39 @@
import { ref , watch } from 'vue'
import { ref , watch } from 'vue'
import { useI18n } from 'vue-i18n'
import { useI18n } from 'vue-i18n'
import { uniqBy } from 'lodash'
import type { IJsonItem } from '../types'
import type { IJsonItem } from '../types'
export function usePreTasks ( model : { [ field : string ] : any } ) : IJsonItem {
export function usePreTasks (
model : { [ field : string ] : any } ,
code? : number
) : IJsonItem {
const { t } = useI18n ( )
const { t } = useI18n ( )
const options = ref ( [ ] )
const options = ref ( [ ] as { value : number ; label : string } [ ] )
const getOptions = ( ) = > {
const getOptions = (
if ( ! model . preTaskOptions ? . length ) return [ ]
options : { code : number ; name : string } [ ]
return model . preTaskOptions . map ( ( task : { code : number ; name : string } ) = > ( {
) : { value : number ; label : string } [ ] = > {
if ( ! options ? . length ) return [ ]
return options . map ( ( task : { code : number ; name : string } ) = > ( {
value : task.code ,
value : task.code ,
label : task.name
label : task.name
} ) )
} ) )
}
}
watch (
watch (
( ) = > model . preTaskOptions ,
( ) = > model . definition ,
( ) = > {
( value ) = > {
options . value = getOptions ( )
if ( ! value ) return
const {
preTaskOptions ,
preTasks = [ ] ,
postTaskOptions = [ ]
} = getTaskOptions ( value , code )
model . preTasks = preTasks
model . postTaskOptions = postTaskOptions
options . value = getOptions ( preTaskOptions )
}
}
)
)
@ -51,3 +65,64 @@ export function usePreTasks(model: { [field: string]: any }): IJsonItem {
options
options
}
}
}
}
function getTaskOptions (
processDefinition : {
processTaskRelationList : [ ]
taskDefinitionList : [ ]
} ,
code? : number
) : {
preTaskOptions : { code : number ; name : string } [ ]
preTasks? : number [ ]
postTaskOptions ? : { code : number ; name : string } [ ]
} {
const { processTaskRelationList = [ ] , taskDefinitionList = [ ] } =
processDefinition
const preTaskOptions : { code : number ; name : string } [ ] = [ ]
const tasks : { [ field : number ] : string } = { }
taskDefinitionList . forEach (
( task : { code : number ; taskType : string ; name : string } ) = > {
tasks [ task . code ] = task . name
if ( task . code === code ) return
if (
task . taskType === 'CONDITIONS' &&
processTaskRelationList . filter (
( relation : { preTaskCode : number } ) = >
relation . preTaskCode === task . code
) . length >= 2
) {
return
}
preTaskOptions . push ( {
code : task.code ,
name : task.name
} )
}
)
if ( ! code )
return {
preTaskOptions : uniqBy ( preTaskOptions , 'code' )
}
const preTasks : number [ ] = [ ]
const postTaskOptions : { code : number ; name : string } [ ] = [ ]
processTaskRelationList . forEach (
( relation : { preTaskCode : number ; postTaskCode : number } ) = > {
if ( relation . preTaskCode === code ) {
postTaskOptions . push ( {
code : relation.postTaskCode ,
name : tasks [ relation . postTaskCode ]
} )
}
if ( relation . postTaskCode === code && relation . preTaskCode !== 0 ) {
preTasks . push ( relation . preTaskCode )
}
}
)
return {
preTaskOptions : uniqBy ( preTaskOptions , 'code' ) ,
preTasks ,
postTaskOptions
}
}