mirror of
https://github.com/continew-org/continew-admin-ui.git
synced 2025-09-11 16:57:09 +08:00
feat: GiForm 新增 show 属性配置,优先级比 hide 高(同步 GiDemo 更新)
This commit is contained in:
@@ -3,12 +3,14 @@
|
|||||||
<a-grid class="w-full" :col-gap="8" v-bind="options.grid" :collapsed="collapsed">
|
<a-grid class="w-full" :col-gap="8" v-bind="options.grid" :collapsed="collapsed">
|
||||||
<template v-for="(item, index) in columns" :key="item.field">
|
<template v-for="(item, index) in columns" :key="item.field">
|
||||||
<a-grid-item
|
<a-grid-item
|
||||||
v-if="!isHide(item.hide)" v-show="colVShow(index)" v-bind="item.gridItemProps || props.options.gridItem"
|
v-if="item.show !== undefined ? isShow(item) : !isHide(item.hide)"
|
||||||
|
v-show="colVShow(index)"
|
||||||
|
v-bind="item.gridItemProps || props.options.gridItem"
|
||||||
:span="item.span || options.gridItem?.span"
|
:span="item.span || options.gridItem?.span"
|
||||||
>
|
>
|
||||||
<a-form-item
|
<a-form-item
|
||||||
v-bind="item.formItemProps" :field="item.field" :rules="item.rules"
|
v-bind="item.formItemProps" :field="item.field" :rules="item.rules"
|
||||||
:disabled="isDisabled(item.disabled)"
|
:disabled="isDisabled(item)"
|
||||||
>
|
>
|
||||||
<template #label>
|
<template #label>
|
||||||
<template v-if="typeof item.label === 'string'">{{ item.label }}</template>
|
<template v-if="typeof item.label === 'string'">{{ item.label }}</template>
|
||||||
@@ -16,7 +18,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<slot
|
<slot
|
||||||
v-if="!['group-title'].includes(item.type || '')" :name="item.field"
|
v-if="!['group-title'].includes(item.type || '')" :name="item.field"
|
||||||
v-bind="{ disabled: isDisabled(item.disabled) }"
|
v-bind="{ disabled: isDisabled(item) }"
|
||||||
>
|
>
|
||||||
<template v-if="item.type === 'range-picker'">
|
<template v-if="item.type === 'range-picker'">
|
||||||
<DateRangePicker
|
<DateRangePicker
|
||||||
@@ -72,7 +74,7 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { cloneDeep } from 'lodash-es'
|
import { cloneDeep } from 'lodash-es'
|
||||||
import type { ColumnsItem, ColumnsItemDisabled, ColumnsItemHide, Options } from './type'
|
import type { ColumnsItem, Options } from './type'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
modelValue: any
|
modelValue: any
|
||||||
@@ -150,19 +152,29 @@ const valueChange = (value: any, field: string) => {
|
|||||||
emit('update:modelValue', Object.assign(props.modelValue, { [field]: value }))
|
emit('update:modelValue', Object.assign(props.modelValue, { [field]: value }))
|
||||||
}
|
}
|
||||||
|
|
||||||
const isHide = (hide?: ColumnsItemHide<boolean | object>) => {
|
/** 显示表单项 */
|
||||||
if (hide === undefined) return false
|
const isShow = (item: ColumnsItem) => {
|
||||||
if (typeof hide === 'boolean') return hide
|
if (typeof item.show === 'boolean') return item.show
|
||||||
if (typeof hide === 'function') {
|
if (typeof item.show === 'function') {
|
||||||
return hide(props.modelValue)
|
return item.show(props.modelValue)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const isDisabled = (disabled?: ColumnsItemDisabled<boolean | object>) => {
|
/** 隐藏表单项 */
|
||||||
if (disabled === undefined) return false
|
const isHide = (item: ColumnsItem) => {
|
||||||
if (typeof disabled === 'boolean') return disabled
|
if (item.hide === undefined) return false
|
||||||
if (typeof disabled === 'function') {
|
if (typeof item.hide === 'boolean') return item.hide
|
||||||
return disabled(props.modelValue)
|
if (typeof item.hide === 'function') {
|
||||||
|
return item.hide(props.modelValue)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 禁用表单项 */
|
||||||
|
const isDisabled = (item: ColumnsItem) => {
|
||||||
|
if (item.disabled === undefined) return false
|
||||||
|
if (typeof item.disabled === 'boolean') return item.disabled
|
||||||
|
if (typeof item.disabled === 'function') {
|
||||||
|
return item.disabled(props.modelValue)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -50,6 +50,7 @@ export type ColumnsItemPropsKey =
|
|||||||
| keyof A.AlertInstance['$props']
|
| keyof A.AlertInstance['$props']
|
||||||
|
|
||||||
export type ColumnsItemHide<F> = boolean | ((form: F) => boolean)
|
export type ColumnsItemHide<F> = boolean | ((form: F) => boolean)
|
||||||
|
export type ColumnsItemShow<F> = boolean | ((form: F) => boolean)
|
||||||
export type ColumnsItemDisabled<F> = boolean | ((form: F) => boolean)
|
export type ColumnsItemDisabled<F> = boolean | ((form: F) => boolean)
|
||||||
export type ColumnsItemRequest<F = any> = (form: F) => Promise<any>
|
export type ColumnsItemRequest<F = any> = (form: F) => Promise<any>
|
||||||
export type ColumnsItemFormat<T = any> = (
|
export type ColumnsItemFormat<T = any> = (
|
||||||
@@ -101,6 +102,7 @@ export interface ColumnsItem<F = any> {
|
|||||||
// 下拉树组件的data
|
// 下拉树组件的data
|
||||||
span?: A.GridItemProps['span']
|
span?: A.GridItemProps['span']
|
||||||
data?: A.TreeSelectInstance['$props']['data']
|
data?: A.TreeSelectInstance['$props']['data']
|
||||||
|
show?: ColumnsItemShow<F> // 是否显示(优先级比hide高)
|
||||||
hide?: ColumnsItemHide<F> // 是否隐藏
|
hide?: ColumnsItemHide<F> // 是否隐藏
|
||||||
disabled?: ColumnsItemDisabled<F> // 是否禁用
|
disabled?: ColumnsItemDisabled<F> // 是否禁用
|
||||||
request?: ColumnsItemRequest<F> // 接口请求api
|
request?: ColumnsItemRequest<F> // 接口请求api
|
||||||
|
Reference in New Issue
Block a user