mirror of
https://github.com/pure-admin/pure-admin-thin.git
synced 2025-04-25 07:57:18 +08:00
210 lines
5.5 KiB
Vue
210 lines
5.5 KiB
Vue
<script setup lang="ts">
|
|
import { ref } from "vue";
|
|
import ReCol from "@/components/ReCol";
|
|
import { formRules } from "./rule";
|
|
import { UserRequest } from "@/api/system/user";
|
|
import { PostPageResponse } from "@/api/system/post";
|
|
import { RoleDTO } from "@/api/system/role";
|
|
import { useUserStoreHook } from "@/store/modules/user";
|
|
|
|
interface FormProps {
|
|
formInline: UserRequest;
|
|
deptOptions: any[];
|
|
postOptions: PostPageResponse[];
|
|
roleOptions: RoleDTO[];
|
|
}
|
|
|
|
const props = withDefaults(defineProps<FormProps>(), {
|
|
formInline: () => ({
|
|
userId: 0,
|
|
username: "",
|
|
nickname: "",
|
|
deptId: 0,
|
|
phone: "",
|
|
email: "",
|
|
password: "",
|
|
sex: 0,
|
|
status: 1,
|
|
postId: 0,
|
|
roleId: 0,
|
|
remark: ""
|
|
}),
|
|
deptOptions: () => [],
|
|
postOptions: () => [],
|
|
roleOptions: () => []
|
|
});
|
|
|
|
const newFormInline = ref(props.formInline);
|
|
const deptOptions = ref(props.deptOptions);
|
|
const roleOptions = ref(props.roleOptions);
|
|
const postOptions = ref(props.postOptions);
|
|
|
|
const formRuleRef = ref();
|
|
|
|
function getFormRuleRef() {
|
|
return formRuleRef.value;
|
|
}
|
|
|
|
defineExpose({ getFormRuleRef });
|
|
</script>
|
|
|
|
<template>
|
|
<el-form
|
|
ref="formRuleRef"
|
|
:model="newFormInline"
|
|
:rules="formRules"
|
|
label-width="82px"
|
|
>
|
|
<el-row :gutter="30">
|
|
<re-col :value="12">
|
|
<el-form-item label="用户名" prop="username">
|
|
<el-input
|
|
v-model="newFormInline.username"
|
|
clearable
|
|
placeholder="请输入用户名"
|
|
/>
|
|
</el-form-item>
|
|
</re-col>
|
|
<re-col :value="12">
|
|
<el-form-item label="部门">
|
|
<el-tree-select
|
|
class="w-full"
|
|
v-model="newFormInline.deptId"
|
|
:data="deptOptions"
|
|
:show-all-levels="false"
|
|
value-key="id"
|
|
:props="{
|
|
value: 'id',
|
|
label: 'deptName',
|
|
emitPath: false,
|
|
checkStrictly: true
|
|
}"
|
|
clearable
|
|
placeholder="请选择部门"
|
|
/>
|
|
</el-form-item>
|
|
</re-col>
|
|
|
|
<re-col :value="12">
|
|
<el-form-item label="手机号码" prop="phoneNumber">
|
|
<el-input
|
|
v-model="newFormInline.phoneNumber"
|
|
clearable
|
|
placeholder="请输入手机号码"
|
|
/>
|
|
</el-form-item>
|
|
</re-col>
|
|
|
|
<re-col :value="12">
|
|
<el-form-item label="邮箱" prop="email">
|
|
<el-input
|
|
v-model="newFormInline.email"
|
|
clearable
|
|
placeholder="请输入邮箱"
|
|
/>
|
|
</el-form-item>
|
|
</re-col>
|
|
|
|
<re-col :value="12">
|
|
<el-form-item label="昵称" prop="nickname">
|
|
<el-input
|
|
v-model="newFormInline.nickname"
|
|
clearable
|
|
placeholder="请输入昵称"
|
|
/>
|
|
</el-form-item>
|
|
</re-col>
|
|
|
|
<re-col :value="12">
|
|
<el-form-item label="性别" prop="sex">
|
|
<el-select
|
|
class="w-full"
|
|
v-model="newFormInline.sex"
|
|
placeholder="请选择性别"
|
|
clearable
|
|
>
|
|
<el-option
|
|
v-for="dict in useUserStoreHook().dictionaryList['sysUser.sex']"
|
|
:key="dict.value"
|
|
:label="dict.label"
|
|
:value="dict.value"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
</re-col>
|
|
|
|
<re-col :value="12">
|
|
<el-form-item label="岗位" prop="postId">
|
|
<el-select
|
|
class="w-full"
|
|
v-model="newFormInline.postId"
|
|
placeholder="请选择岗位"
|
|
clearable
|
|
>
|
|
<el-option
|
|
v-for="item in postOptions"
|
|
:key="item.postId"
|
|
:label="item.postName"
|
|
:value="item.postId"
|
|
:disabled="item.status == 0"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
</re-col>
|
|
|
|
<re-col :value="12">
|
|
<el-form-item label="角色" prop="roleId">
|
|
<el-select
|
|
class="w-full"
|
|
v-model="newFormInline.roleId"
|
|
placeholder="请选择角色"
|
|
clearable
|
|
>
|
|
<el-option
|
|
v-for="item in roleOptions"
|
|
:key="item.roleId"
|
|
:label="item.roleName"
|
|
:value="item.roleId"
|
|
:disabled="item.status == 0"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
</re-col>
|
|
|
|
<re-col :value="12" :xs="24" :sm="24">
|
|
<el-form-item label="状态" prop="status">
|
|
<el-radio-group v-model="newFormInline.status">
|
|
<el-radio
|
|
v-for="item in useUserStoreHook().dictionaryList['common.status']"
|
|
:key="item.value"
|
|
:label="item.value"
|
|
>{{ item.label }}
|
|
</el-radio>
|
|
</el-radio-group>
|
|
</el-form-item>
|
|
</re-col>
|
|
|
|
<re-col :value="12" v-if="newFormInline.password !== undefined">
|
|
<el-form-item label="密码" prop="password">
|
|
<el-input
|
|
v-model="newFormInline.password"
|
|
clearable
|
|
placeholder="请输入密码"
|
|
/>
|
|
</el-form-item>
|
|
</re-col>
|
|
<re-col :value="24">
|
|
<el-form-item label="备注" prop="remark">
|
|
<el-input
|
|
v-model="newFormInline.remark"
|
|
clearable
|
|
placeholder="请输入备注内容"
|
|
rows="6"
|
|
type="textarea"
|
|
/>
|
|
</el-form-item>
|
|
</re-col>
|
|
</el-row>
|
|
</el-form>
|
|
</template>
|