- 组件包括两个部分baseQueryForm和BaseQueryFormItem
- baseQueryForm代码
<template>
<div>
<div class="query-form">
<el-form :inline="true" :model="value" ref="queryForm">
<template v-for="(item, index) in form">
<base-query-form-item :item="item" v-bind="item" v-model="value[item.model]" :key="index"/>
</template>
<el-form-item>
<el-button @click="handleReset" size="small">重置</el-button>
<el-button type="primary" @click="handleQuery" size="small">查询</el-button>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
import BaseQueryFormItem from "@/components/BaseQueryForm/BaseQueryFormItem.vue";
export default {
name: 'QueryForm',
props: ["value", "form"],
components: {BaseQueryFormItem},
data() {
return {
queryModel: {...this.value}
}
},
methods: {
handleReset() {
this.$refs.queryForm.resetFields()
this.$emit('update:handleReset')
},
handleQuery() {
this.$emit("update:handleQuery", {...this.queryModel})
}
}
}
</script>
<style scoped>
</style>
- BaseQueryFormItem的代码,这里可以具体根据业务场景进行类型扩展
<template>
<el-form-item :prop="item.model" :label="item.label">
<el-input v-if="item.type === 'input'" v-bind="$attrs" v-on="$listeners" :value="value"></el-input>
<el-select v-else-if="item.type === 'select'" v-bind="$attrs" v-on="$listeners" :value="value" placeholder="请选择">
<el-option v-for="option in item.options" :key="option.value" :label="option.label" :value="option.value"></el-option>
</el-select>
</el-form-item>
</template>
<script>
export default {
name: 'BaseQueryFormItem',
props: ["item", "value"],
data() {
return {
}
},
computed: {
selectedOption: {
get() {
return this.value
},
set(value) {
this.$emit('update:value', value)
}
}
},
methods: {
handleInput(value) {
this.value = value
this.$emit('update:value', this.value)
}
}
}
</script>
<style scoped>
</style>
<template>
<div>
<base-query-form
:form="form" v-model="queryForm"
@update:handleQuery="handleQuery"
@update:handleReset="handleReset"
></base-query-form>
</div>
</template>
<script>
import BaseQueryForm from "@/components/BaseQueryForm/BaseQueryForm.vue";
export default {
name: 'bookKeepingTopSearchForm',
components: {BaseQueryForm},
props: ['queryForm'],
data() {
return {
form: [
{
clearable: true,
type: 'input',
label: '集团号:',
model: 'csrGroupNo',
placeholder: '请输入',
},
{
clearable: true,
type: 'input',
label: '会员号:',
model: 'pnNo',
placeholder: '请输入',
},
{
clearable: true,
type: 'select',
label: '资产状态',
model: 'isDeleted',
placeholder: '请选择',
options: [
{
value: 0,
label: '已生效',
},
{
value: 1,
label: '已失效',
},
]
},
{
clearable: true,
type: 'input',
label: '记账单号:',
model: 'id',
placeholder: '请输入',
}
],
};
},
methods: {
handleQuery(values) {
this.$emit('searchTableData');
},
onSubmit() {
this.$emit('searchTableData');
},
handleReset(form) {
this.$emit('searchTableData');
}
},
};
</script>
<style scoped lang="scss">
</style>