Browse Source

关联选项设置显示隐藏效果

Signed-off-by: liwenxuan <1298531568@qq.com>
lwx_v4
liwenxuan 12 months ago
parent
commit
83ef023520
  1. 282
      src/components/formTable/formItemGroup.vue
  2. 1807
      src/components/formTable/index.vue

282
src/components/formTable/formItemGroup.vue

@ -94,144 +94,172 @@ const clickBtn = (control: any) => {
injectBtnEvent && injectBtnEvent(control) injectBtnEvent && injectBtnEvent(control)
} }
} }
//
const linksIf = (obj: FormList) => {
const { type } = formProps.value;
const { config: { disabledAdd, disabledEdit, disabledDetail } = {} } = obj;
if (type === 1) {
if (disabledAdd) {
// ||
return false; //
}
} else if (type === 2) {
//
if (disabledEdit) {
return false;
}
} else if (type === 4 || type === 3) {
//
if (disabledDetail) {
return false;
}
}
// namevIf
const vIf: string | string[] = formProps.value.hideField;
if (vIf?.length > 0 && obj.name) {
return vIf.indexOf(obj.name) === -1; // false
}
return true;
};
</script> </script>
<template> <template>
<div v-for="(element,index) in dataList" :key="index" :style="getFormItemDivStyle(element)"> <div v-for="(element,index) in dataList" :key="index" :style="getFormItemDivStyle(element)">
<div v-if="linksIf(element)">
<template v-if="element.type === 'tabs'"> <template v-if="element.type === 'tabs'">
<!--选项卡--> <!--选项卡-->
<el-tabs <el-tabs
v-bind="element.control" v-bind="element.control"
:class="[element.config?.className]" :class="[element.config?.className]"
>
<el-tab-pane
v-for="(item, tIndex) in element.columns"
:label="item.label"
:key="tIndex"
> >
<FormItemGroup :data="item.list" data-type="not-nested" /> <el-tab-pane
v-for="(item, tIndex) in element.columns"
</el-tab-pane> :label="item.label"
</el-tabs> :key="tIndex"
</template> >
<template v-else-if="element.type === 'title'"> <FormItemGroup :data="item.list" data-type="not-nested" />
<!--标题-->
<div
class="title"
:class="[element.config.className]"
v-bind="element.control"
:style="getFormItemLableStyle(element.styles)"
>
<span v-html="element.control.modelValue"></span>
<Tooltips
:content="element.config.help"
v-if="element.config.help"
/>
</div>
</template>
<template v-else-if="element.type === 'txt'">
<!--文字-->
<div
v-bind="element.control"
:class="[element.config.className]"
v-html="element.control.modelValue"
>
</div>
</template>
<template v-else-if="element.type === 'table'">
<el-text v-if="element.item&&element.item.name">{{element.item.name}}}</el-text>
<TablePage :data="element" :type="type" />
</template>
<template v-else-if="element.type === 'grid'">
<el-row class="form-row" :style="type === 15?'padding: 0 0 20px 0;':''" :class="[element.className]">
<el-col
class="form-col"
:class="{
'active-col': activeKey === getGroupName(col),
[col.className]: col.className
}"
v-for="(col, i) in element.columns"
:key="i"
</el-tab-pane>
</el-tabs>
</template>
<template v-else-if="element.type === 'title'">
<!--标题-->
<div
class="title"
:class="[element.config.className]"
v-bind="element.control"
:style="getFormItemLableStyle(element.styles)"
>
<span v-html="element.control.modelValue"></span>
<Tooltips
:content="element.config.help"
v-if="element.config.help"
/>
</div>
</template>
<template v-else-if="element.type === 'txt'">
<!--文字-->
<div
v-bind="element.control"
:class="[element.config.className]"
v-html="element.control.modelValue"
> >
<FormItemGroup :data="col.list" data-type="not-nested" /> </div>
<div class="drag-control" v-if="type === 15"> </template>
<div class="item-control"> <template v-else-if="element.type === 'table'">
<i <el-text v-if="element.item&&element.item.name">{{element.item.name}}}</el-text>
class="icon-del" <TablePage :data="element" :type="type" />
@click.stop="click('delGridChild', i as number, element.columns)" </template>
> <template v-else-if="element.type === 'grid'">
</i> <el-row class="form-row" :style="type === 15?'padding: 0 0 20px 0;':''" :class="[element.className]">
<el-col
class="form-col"
:class="{
'active-col': activeKey === getGroupName(col),
[col.className]: col.className
}"
v-for="(col, i) in element.columns"
:key="i"
>
<FormItemGroup :data="col.list" data-type="not-nested" />
<div class="drag-control" v-if="type === 15">
<div class="item-control">
<i
class="icon-del"
@click.stop="click('delGridChild', i as number, element.columns)"
>
</i>
</div>
</div> </div>
</div> </el-col>
</el-col> </el-row>
</el-row> </template>
</template> <template v-else-if="element.type === 'card'">
<template v-else-if="element.type === 'card'"> <el-collapse model-value="1">
<el-collapse model-value="1"> <el-collapse-item :title="element.item.label" name="1">
<el-collapse-item :title="element.item.label" name="1"> <template #title v-if="element.help">
<template #title v-if="element.help"> {{ element.item.label }}
{{ element.item.label }} <Tooltips :content="element.help" />
<Tooltips :content="element.help" /> </template>
</template> <FormItemGroup :data="element.list" data-type="not-nested" />
<FormItemGroup :data="element.list" data-type="not-nested" /> </el-collapse-item>
</el-collapse-item> </el-collapse>
</el-collapse> </template>
</template> <template v-else-if="element.type === 'divider'">
<template v-else-if="element.type === 'divider'"> <!--分割线-->
<!--分割线--> <el-divider v-bind="element.control">{{ element.item && element.item.label }}</el-divider>
<el-divider v-bind="element.control">{{ element.item && element.item.label }}</el-divider> </template>
</template> <template v-else-if="element.type === 'div'">
<template v-else-if="element.type === 'div'"> <!--div容器-->
<!--div容器--> <div
<div class="div-layout "
class="div-layout "
v-bind="element.control"
:class="{
[element.className]: element.className,
inline: element.config?.inline,
[element.config?.textAlign]: element.config?.textAlign
}"
>
<div class="drag"><FormItemGroup :data="element.list" data-type="not-nested" /></div>
</div>
</template>
<template v-else-if="element.type === 'flex'">
<!---->
<FormItemGroup :tableinfo="props.tableinfo" :data="element.list" :alldata="props.alldata" data-type="not-flex" v-if="type === 15" />
<flex-box :data="element" v-else />
<el-button
style="position: relative; top: 0px; left: 10px"
v-if="element.config.addBtnText && type === 15"
size="small"
>
{{ element.config.addBtnText }}
</el-button>
</template>
<template v-else-if="element.type === 'button'">
<div
:class="[element.config?.className]"
:style="{ 'text-align': element.config?.textAlign }"
>
<el-button
v-bind="element.control" v-bind="element.control"
@click="clickBtn(element.control)" :class="{
color="#626aef" [element.className]: element.className,
inline: element.config?.inline,
[element.config?.textAlign]: element.config?.textAlign
}"
>
<div class="drag"><FormItemGroup :data="element.list" data-type="not-nested" /></div>
</div>
</template>
<template v-else-if="element.type === 'flex'">
<!---->
<FormItemGroup :tableinfo="props.tableinfo" :data="element.list" :alldata="props.alldata" data-type="not-flex" v-if="type === 15" />
<flex-box :data="element" v-else />
<el-button
style="position: relative; top: 0px; left: 10px"
v-if="element.config.addBtnText && type === 15"
size="small"
> >
<td :style="getFormItemLableStyle(element.styles)">{{ element.control?.label }}</td> {{ element.config.addBtnText }}
</el-button> </el-button>
</div>
</template> </template>
<FormItem v-else :data="element" /> <template v-else-if="element.type === 'button'">
<div
:class="[element.config?.className]"
:style="{ 'text-align': element.config?.textAlign }"
>
<el-button
v-bind="element.control"
@click="clickBtn(element.control)"
color="#626aef"
>
<td :style="getFormItemLableStyle(element.styles)">{{ element.control?.label }}</td>
</el-button>
</div>
</template>
<FormItem v-else :data="element" />
</div>
</div> </div>
</template> </template>

1807
src/components/formTable/index.vue

File diff suppressed because it is too large
Loading…
Cancel
Save