ny
23 小时以前 282fbc6488f4e8ceb5fda759f963ee88fbf7b999
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
<script lang="ts" setup>
import { computed, unref } from 'vue';
 
import { InterfaceModal } from '#/components/CommonModal';
import { interfaceSystemOptions, sourceTypeFlowOptions, systemFieldOptions, templateJsonColumns } from '#/utils/define';
 
const props = defineProps({
  value: { type: String, default: '' },
  title: { type: String, default: '' },
  // 参数json
  templateJson: { type: Array, default: () => [] },
  // 字段options
  fieldOptions: { type: Array, default: () => [] },
  // 参数来源类型 1:全部参数来源  2:参数来源不回显字段  3:参数来源不显示系统变量 4:参数来源不显示全局变量
  type: { type: Number, default: 1 },
  // 是否流程
  isFlow: { type: Boolean, default: false },
  // 系统字段显示表单id
  showSystemFormId: { type: Boolean, default: true },
  // 系统字段显示完整名称
  showSystemFullLabel: { type: Boolean, default: false },
  fieldWidth: { type: String, default: 'full' },
  globalOptions: { type: Array, default: () => [] },
  tabOptions: { type: Array, default: () => [] },
  groupOptions: { type: Array, default: () => [] },
  systemOptions: { type: Array, default: () => [] },
});
const emit = defineEmits(['update:value', 'change', 'fieldChange', 'onTabChange', 'onSourceTypeChange']);
 
const getsourceTypeFlowOptions = computed(() => {
  const filterId = { 2: 1, 3: 4, 4: 5 }[props.type];
  return sourceTypeFlowOptions.filter((o) => o.id !== filterId);
});
const getNotNullsourceTypeFlowOptions = computed(() => unref(getsourceTypeFlowOptions).filter((o) => o.id != 3));
const getSystemFieldOptions = computed(() => {
  if (props.systemOptions?.length) return props.systemOptions;
  if (props.isFlow) return systemFieldOptions;
  return props.showSystemFormId ? interfaceSystemOptions : interfaceSystemOptions.filter((o) => o.id != '@formId');
});
// 必填字段
const requiredFieldOptions = computed(() => {
  const options: any[] = (props.fieldOptions as any[]).filter((o) => o.__config__ && o.__config__.required);
  return options.map((o) => ({ ...o, label: o.fullName ? `${o.id}(${o.fullName})` : o.id }));
});
const tabList: any = computed(() => {
  return props.tabOptions;
});
 
function onInterfaceChange(selectId, selectRow) {
  emit('update:value', selectId);
  emit('change', selectId, selectRow);
}
function onFieldChange(e, row) {
  emit('fieldChange', e, row);
}
function onTabChange(e) {
  emit('onTabChange', e);
}
function onSourceTypeChange(record) {
  emit('onSourceTypeChange', record);
  record.relationField = record.sourceType == 4 ? (unref(getSystemFieldOptions)[0] as any)?.id : '';
}
</script>
<template>
  <InterfaceModal :value="value" :title="title" v-bind="$attrs" @change="onInterfaceChange" />
  <div class="ant-form-item-label !mt-[12px]"><label class="ant-form-item-no-colon">参数设置:</label></div>
  <a-tabs v-if="tabList?.length > 0" @change="onTabChange">
    <a-tab-pane :key="item.id" :tab="item.value" v-for="item in tabList" />
  </a-tabs>
  <a-table :data-source="templateJson" :columns="templateJsonColumns" size="small" :pagination="false">
    <template #bodyCell="{ column, record }">
      <template v-if="column.key === 'field'">
        <div class="interface-field-box" :class="`w-${fieldWidth}`" :title="record.field + (record.fieldName ? `(${record.fieldName})` : '')">
          <span class="required-sign">{{ record.required ? '*' : '' }}</span>
          <span>{{ record.field }}{{ record.fieldName ? `(${record.fieldName})` : '' }}</span>
        </div>
      </template>
      <template v-if="column.key === 'sourceType'">
        <jnpf-select
          v-if="record.required"
          v-model:value="record.sourceType"
          :options="getNotNullsourceTypeFlowOptions"
          placeholder="请选择"
          class="!w-[100px]"
          @change="onSourceTypeChange(record)" />
        <jnpf-select v-else v-model:value="record.sourceType" :options="getsourceTypeFlowOptions" class="!w-[100px]" @change="onSourceTypeChange(record)" />
      </template>
      <template v-if="column.key === 'relationField'">
        <jnpf-select
          v-model:value="record.relationField"
          @change="onFieldChange($event, record)"
          :options="groupOptions"
          style="width: 200px"
          placeholder="请选择"
          :field-names="{ label: 'fullName', options: 'children' }"
          v-if="groupOptions?.length > 0 && record.sourceType === 1" />
        <jnpf-select
          v-model:value="record.relationField"
          :options="record.required && isFlow ? requiredFieldOptions : fieldOptions"
          allow-clear
          show-search
          :field-names="{ label: 'label', options: 'children' }"
          option-label-prop="label"
          class="!w-[204px]"
          @change="onFieldChange($event, record)"
          v-else-if="record.sourceType === 1" />
        <template v-else-if="record.sourceType === 2">
          <jnpf-input-number v-if="['int', 'decimal'].includes(record.dataType)" v-model:value="record.relationField" placeholder="请输入" allow-clear />
          <jnpf-date-picker
            v-else-if="record.dataType == 'datetime'"
            class="!w-full"
            v-model:value="record.relationField"
            placeholder="请选择"
            format="YYYY-MM-DD HH:mm:ss"
            allow-clear />
          <a-input v-else v-model:value="record.relationField" placeholder="请输入" allow-clear @change="isFlow ? onFieldChange($event, record) : ''" />
        </template>
        <jnpf-select
          v-model:value="record.relationField"
          :options="getSystemFieldOptions"
          :field-names="{ label: showSystemFullLabel ? 'label' : 'fullName', options: 'options1' }"
          :option-label-prop="showSystemFullLabel ? 'label' : 'fullName'"
          allow-clear
          @change="isFlow ? onFieldChange($event, record) : ''"
          class="!w-[204px]"
          v-else-if="record.sourceType === 4" />
        <jnpf-select
          v-model:value="record.relationField"
          :options="globalOptions"
          @change="isFlow ? onFieldChange($event, record) : ''"
          :field-names="{ label: 'fieldName', value: 'fieldName', options: 'options1' }"
          allow-clear
          class="!w-[204px]"
          v-else-if="record.sourceType === 5" />
      </template>
    </template>
    <template #emptyText>
      <p class="leading-[60px]">暂无数据</p>
    </template>
  </a-table>
</template>
<style scoped lang="scss">
.interface-field-box {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
</style>