- queryForm,这里主要包括两个部分,queryForm和FormItem组成,可以快速的搭建出查询表单
<template>
<div>
<div class="query-form">
<el-form :inline="true" :model="queryModel" ref="queryForm">
<template v-for="(item, index) in form" :key="index">
<FormItem :item="item" v-bind="item" v-model="queryModel[item.model]" />
</template>
<el-form-item>
<el-button type="primary" @click="handleQuery">查询</el-button>
<el-button @click="handleReset('form')">重置</el-button>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
import FormItem from "./FormItem.vue"
import {getCurrentInstance, reactive} from "vue"
export default {
name: 'QueryForm',
props: ["modelValue", "form"],
emits: ["update:modelValue", "update:handleQuery"],
components: {FormItem},
setup(props, context) {
const {proxy} = getCurrentInstance()
const queryModel = reactive({
...props.modelValue
})
const handleReset = () => {
proxy.$refs.queryForm.resetFields()
}
const handleQuery = () => {
context.emit("update:modelValue", {...queryModel})
context.emit("update:handleQuery", {...queryModel})
}
return {
handleQuery,
handleReset,
queryModel
}
}
}
</script>
<style lang='scss' scoped>
</style>
<template>
<el-form-item :prop="item.model">
<el-input v-if="item.type === 'input'" v-bind="$attrs"></el-input>
<el-select v-else-if="item.type === 'select'" v-bind="$attrs">
<el-option v-for="option in item.options"
:key="option.value"
v-bind="option"
/>
</el-select>
</el-form-item>
</template>
<script>
export default {
name: 'FormItem',
props: ["item"],
data(){
return {
}
}
}
</script>
<style lang='scss' scoped>
</style>
<template>
<div class="user-manage">
<div class="query-form">
<query-form
:form="form" v-model="user" @update:handleQuery="handleQuery" @reset="handleReset('form')"
></query-form>
</div>
</div>
</template>
<script lang="ts" setup>
import {getCurrentInstance, onMounted, reactive, ref, toRaw} from 'vue';
import api from '../api/index.js';
import QueryForm from '../../packages/QueryForm/QueryForm.vue';
const {proxy, ctx} = getCurrentInstance();
const user = ref({
});
const form = [
{
type: 'input',
label: '用户Id',
model: 'userId',
placeholder: '请输入用户Id',
},
{
type: 'input',
label: '用户名称',
model: 'userName',
placeholder: '请输入用户名称',
},
{
type: 'select',
label: '状态',
model: 'state',
placeholder: '请选择状态',
options: [
{
value: 0,
label: '所有',
},
{
value: 1,
label: '在职',
},
{
value: 2,
label: '离职',
},
{
value: 3,
label: '试用期',
}
]
}
];
onMounted(() => {
getUserList();
getDeptList();
getRoleList();
});
const getUserList = async () => {
let params = {...user.value, ...pager};
try {
const {list, page} = await api.getUserList(params);
userList.value = list;
pager.total = page.total;
} catch (e) {
console.log(e);
}
};
const handleQuery = (values) => {
console.log('values', values, user.value);
getUserList();
};
const handleReset = (form) => {
proxy.$refs[form].resetFields();
};
const userForm = reactive({
state: 3
});
const deptList = ref([]);
const roleList = ref([]);
const getDeptList = async () => {
let list = await proxy.$api.getDeptList();
deptList.value = list;
};
const getRoleList = async () => {
let list = await proxy.$api.getRoleList();
roleList.value = list;
};
</script>
<style>
</style>