123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- import { ref, onMounted } from 'vue'
- import { useI18n } from 'vue-i18n'
- import { uniqBy } from 'lodash'
- import {
- querySimpleList,
- queryProcessDefinitionByCode
- } from '@/service/modules/process-definition'
- import type { IJsonItem } from '../types'
- import { number } from 'echarts'
- export function useChildNode({
- model,
- projectCode,
- isCreate,
- from,
- processName,
- code
- }: {
- model: { [field: string]: any }
- projectCode: number
- isCreate: boolean
- from?: number
- processName?: number
- code?: number
- }): IJsonItem {
- const { t } = useI18n()
- const options = ref([] as { label: string; value: string }[])
- const loading = ref(false)
- const getProcessList = async () => {
- if (loading.value) return
- loading.value = true
- try {
- const res = await querySimpleList(projectCode)
- options.value = res.map((option: { name: string; code: number }) => ({
- label: option.name,
- value: option.code
- }))
- loading.value = false
- } catch (err) {
- loading.value = false
- }
- }
- const getProcessListByCode = async (processCode: number) => {
- if (!processCode) return
- try {
- const res = await queryProcessDefinitionByCode(processCode, projectCode)
- getTaskOptions(res)
- } catch (err) {}
- }
- const getTaskOptions = (processDefinition: {
- processTaskRelationList: []
- taskDefinitionList: []
- }) => {
- 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
- })
- }
- )
- model.preTaskOptions = uniqBy(preTaskOptions, 'code')
- if (!code) return
- 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)
- }
- }
- )
- model.preTasks = preTasks
- model.postTaskOptions = postTaskOptions
- }
- const onChange = (code: number) => {
- getProcessListByCode(code)
- }
- onMounted(() => {
- if (from === 1 && processName) {
- getProcessListByCode(processName)
- }
- getProcessList()
- })
- return {
- type: 'select',
- field: 'processName',
- span: 24,
- name: t('project.node.child_node'),
- props: {
- loading: loading,
- disabled: !isCreate,
- 'on-update:value': onChange
- },
- options: options
- }
- }
|