<template>
<a-row :gutter="24">
<a-col :span="24 / colNum" v-for="(item, index) in rowlist" :key="index">
<a-form-item
v-if="item.type != 'custom' && !item.hide"
:field="item.value"
:label="item.label"
:label-col-flex="isInline ? '' : labelWidth"
:rules="item.rules || null"
>
<!-- 输入框 -->
<template v-if="item.type == 'input'">
<a-input :max-length="20" v-model="filterForm[item.value]" placeholder="请输入" allow-clear />
<span class="normal" v-if="item.units"> {{ item.units }}</span>
</template>
<!-- 下拉选择 -->
<a-select v-if="item.type == 'select'" v-model="filterForm[item.value]" placeholder="请选择" allow-clear>
<a-option
v-for="option in Array.isArray(item.options) ? item.options : transformOption(item.options)"
:value="item.optionAttr ? option[item.optionAttr.value] : option.value"
:key="item.optionAttr ? option[item.optionAttr.value] : option.value"
>{{ item.optionAttr ? option[item.optionAttr.label] : option.label }}</a-option
>
</a-select>
<!-- 单选框 -->
<a-space size="large" v-if="item.type == 'radio'">
<a-radio-group v-model="filterForm[item.value]">
<a-radio
v-for="option in Array.isArray(item.options) ? item.options : transformOption(item.options)"
:value="item.optionAttr ? option[item.optionAttr.value] : option.value"
:key="item.optionAttr ? option[item.optionAttr.value] : option.value"
>
{{ item.optionAttr ? option[item.optionAttr.label] : option.label }}
</a-radio>
</a-radio-group>
</a-space>
<!-- 级联选择 -->
<a-cascader
v-if="item.type == 'cascader'"
v-model="filterForm[item.value]"
placeholder="请选择"
allow-clear
:field-names="item.fieldNames || null"
:multiple="item.multiple || false"
:options="Array.isArray(item.options) ? item.options : transformOption(item.options)"
/>
<!-- 树选择 -->
<a-tree-select
v-if="item.type == 'treeSelect'"
v-model="filterForm[item.value]"
placeholder="请选择"
:multiple="item.multiple || false"
:tree-checkable="item.treeCheckable || false"
:fieldNames="item.fieldNames || null"
:data="Array.isArray(item.options) ? item.options : transformOption(item.options)"
>
</a-tree-select>
<!-- 数字输入框 -->
<!-- :formatter="formatter" :parser="parser" -->
<template v-if="item.type == 'numberInput'">
<a-input-number
max-length="13"
v-model="filterForm[item.value]"
:placeholder="$t('numDigital.pleaseEnter')"
:min="item.min"
:max="item.max"
:precision="getPrecision(item.precision)"
/>
<span class="normal" v-if="item.units"> {{ item.units }} </span>
</template>
<!-- 多行输入框 -->
<a-textarea v-if="item.type == 'textArea'" class="textarea" placeholder="请输入" v-model="filterForm[item.value]" max-length="300" />
<!-- 日期选择 -->
<a-date-picker style="width: 100%" value-format="YYYY-MM-DD " v-if="item.type == 'datePicker'" v-model="filterForm[item.value]" />
<!-- 日期范围 -->
<!-- :value-format="item.valueFormat?item.valueFormat:'YYYY-MM-DD'" -->
<a-range-picker v-if="item.type == 'rangePicker'" @change="timeChange(item)" v-model="filterForm[item.value]" />
<!-- 月份选择 -->
<a-month-picker style="width: 100%" v-if="item.type == 'monthPicker'" v-model="filterForm[item.value]" />
<!-- 月份范围 -->
<a-range-picker mode="month" v-if="item.type == 'monthRangePicker'" v-model="filterForm[item.value]" />
<!-- 输入范围 -->
<template v-if="item.type == 'inputRange'">
<a-input max-length="20" v-model="filterForm[item.value[0]]" placeholder="请输入" />
<span class="normal"> 至 </span>
<a-input max-length="20" v-model="filterForm[item.value[1]]" placeholder="请输入" />
<span class="normal" v-if="item.units"> {{ item.units }}</span>
</template>
<!-- 输入数字范围 -->
<template v-if="item.type == 'numberInputRange'">
<!-- :formatter="formatter" :parser="parser" -->
<a-input-number
max-length="13"
v-model="filterForm[item.value[0]]"
placeholder="请输入"
:precision="getPrecision(item.precision)"
:min="item.min"
:max="item.max"
/>
<span class="normal"> 至 </span>
<a-input-number
max-length="13"
v-model="filterForm[item.value[1]]"
placeholder="请输入"
:precision="getPrecision(item.precision)"
:min="filterForm[item.value[0]]"
:max="item.max"
/>
<span class="normal" v-if="item.units"> {{ item.units }}</span>
</template>
<span v-if="item.tips" class="tips">{{ item.tips }}</span>
</a-form-item>
<slot v-if="item.custom" :name="'item-' + item.custom" v-bind="{ item }" />
</a-col>
</a-row>
</template>
<script lang="ts" setup>
import { ref, computed, onMounted, watch, onBeforeMount, nextTick, reactive, getCurrentInstance } from 'vue'
import useLoading from '@/hooks/loading'
const { loading, setLoading } = useLoading()
import { valid } from 'mockjs'
const emit = defineEmits(['uploadOnsuccess'])
const props = defineProps({
isInline: {
type: Boolean,
default: true,
},
labelWidth: {
type: String,
default: '90px',
},
type: {
type: String,
default: 'search',
},
rowlist: Array,
/**
* @example
rowlist:[
{ type: 'input', label: '宠物编号/名称', value: 'keyword' },
{ type: 'cascader', label: '宠物类别/品种',value: 'sort',options: deptOptions,fieldNames: {value: 'id', label: 'deptName'}},
{ type: 'treeSelect',label: '部门',value: 'dept', options: deptOptions, fieldNames:{key: 'id',title: 'deptName',children: 'children'}},
{ type: 'select', label: '状态', value: 'status', options: [{label:'正常',value:'1'},{label:'停用',value:'2'}] },
{ type: 'select', label: '状态2', value: 'status2', optionAttr:{'label':'name','value':'code'},options: [{name:'正常',code:'1'},{name:'停用',code:'2'}] },
{ type: 'select', label: '状态3', value: 'status3', options: 'stateOptions' },
{ type: 'rangePicker', label: '时间', value: 'reportTime',startTimeField:'startTime',endTimeField:'endTime'},
] */
filterForm: Object,
colNum: {
type: Number,
default: 3,
},
})
onMounted(() => {})
const timeChange = (item: any) => {
if (props.filterForm[item.value] && props.filterForm[item.value].length > 0) {
props.filterForm[item.startTimeField || 'startTime'] = props.filterForm[item.value][0] + ' 00:00:00'
props.filterForm[item.endTimeField || 'endTime'] = props.filterForm[item.value][1] + ' 23:59:59'
} else {
props.filterForm[item.startTimeField || 'startTime'] = ''
props.filterForm[item.endTimeField || 'endTime'] = ''
}
}
const transformOption = (name) => {
return []
}
//对下拉框选项处理
let optionsData = reactive({
optionsObj: {},
})
/* watch(
() => props.filterForm,
(val) => {
transFormToNumber(props.list);
},
{ deep: true }
); */
//转�
没有合适的资源?快使用搜索试试~ 我知道了~
ArcoDesin+Vue3 快速构建列表及编辑页面
共5个文件
vue:5个
0 下载量 176 浏览量
2023-08-04
11:38:20
上传
评论
收藏 8KB ZIP 举报
温馨提示
ArcoDesin+Vue3 快速构建列表及编辑页面
资源推荐
资源详情
资源评论
收起资源包目录
blade.zip (5个子文件)
blade
bl-table.vue 9KB
bl-form-item.vue 11KB
bl-confirm-modal.vue 1KB
bl-tag.vue 931B
bl-filter-form.vue 2KB
共 5 条
- 1
资源评论
Holly31
- 粉丝: 1698
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功