You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
227 lines
6.2 KiB
227 lines
6.2 KiB
<template>
|
|
<BasicDrawer v-bind="$attrs" @register="registerDrawer" showFooter title="用户" width="30%" @ok="handleSave">
|
|
<BasicForm @register="registerForm" />
|
|
|
|
<!-- <template #appendFooter>
|
|
<a-button-save @click="handleSaveAndAdd" text="保存并新增" />
|
|
</template> -->
|
|
</BasicDrawer>
|
|
</template>
|
|
<script lang="ts">
|
|
import { defineComponent, ref, unref } from 'vue';
|
|
import { BasicForm, useForm } from '@/components/Form';
|
|
import { BasicDrawer, useDrawerInner } from '@/components/Drawer';
|
|
import { add, save } from '@/api/auth/sysUser';
|
|
import { SysUser } from '@/api/auth/model/sysUserModel';
|
|
import { AButtonSave } from '@/components/Button';
|
|
import { checkPassword } from '@/utils/validator';
|
|
import { message } from 'ant-design-vue';
|
|
import { saveUser } from "./address.api"
|
|
export default defineComponent({
|
|
name: 'SysUserInput',
|
|
components: { AButtonSave, BasicForm, BasicDrawer },
|
|
emits: ['success', 'register'],
|
|
setup(_, { emit }) {
|
|
const deptId = ref();
|
|
|
|
const [
|
|
registerForm,
|
|
{ resetFields, setFieldsValue, validate, updateSchema, getFieldsValue },
|
|
] = useForm({
|
|
schemas: [
|
|
{ field: 'id', label: 'id', component: 'Input', show: false },
|
|
{ field: 'version', label: 'version', component: 'Input', show: false },
|
|
{
|
|
field: 'nickname',
|
|
label: '昵称',
|
|
component: 'Input',
|
|
required: true,
|
|
rules: [{ max: 32, message: '昵称不能超过32个字符', trigger: 'blur' }],
|
|
},
|
|
{
|
|
field: 'username',
|
|
label: '账号',
|
|
component: 'Input',
|
|
required: true,
|
|
rules: [{ max: 32, message: '名称不能超过32个字符', trigger: 'blur' }],
|
|
},
|
|
{
|
|
field: 'password',
|
|
label: '密码',
|
|
component: 'InputPassword',
|
|
rules: [],
|
|
componentProps: {
|
|
autocomplete: 'new-password',
|
|
},
|
|
show: ({ values }) => !values.id,
|
|
},
|
|
{
|
|
field: 'roleIdList',
|
|
label: '单位类型',
|
|
required: true,
|
|
component: 'Select',
|
|
componentProps: {
|
|
mode: 'multiple',
|
|
options: [
|
|
// {
|
|
// value:"1765250614939729921",
|
|
// label: "建设单位"
|
|
// },
|
|
{
|
|
value: "1765250961473126402",
|
|
label: "承建单位"
|
|
}, {
|
|
value: "1765250818753544193",
|
|
label: "咨询单位",
|
|
}, {
|
|
value: "1765250743927160833",
|
|
label: "监理单位",
|
|
}
|
|
],
|
|
// multiple: true,
|
|
|
|
},
|
|
},
|
|
{
|
|
field: 'sex',
|
|
label: '性别',
|
|
required: true,
|
|
component: 'DictRadio',
|
|
componentProps: {
|
|
dictType: 'sex',
|
|
},
|
|
itemProps: { validateTrigger: 'blur' },
|
|
},
|
|
{
|
|
field: 'status',
|
|
label: '状态',
|
|
required: true,
|
|
component: 'DictRadio',
|
|
componentProps: {
|
|
dictType: 'commonStatus',
|
|
},
|
|
itemProps: { validateTrigger: 'blur' },
|
|
},
|
|
{
|
|
field: 'phoneNumber',
|
|
label: '手机号',
|
|
component: 'Input',
|
|
rules: [{ max: 32, message: '手机号不能超过32个字符', trigger: 'blur' }],
|
|
},
|
|
// {
|
|
// field: 'workplaceType',
|
|
// label: '单位类型',
|
|
// required: true,
|
|
// component: 'DictSelect',
|
|
// componentProps: {
|
|
// dictType: 'workplaceType',
|
|
// },
|
|
// itemProps: { validateTrigger: 'blur' },
|
|
// },
|
|
{
|
|
field: 'workplace',
|
|
label: '单位名称',
|
|
component: 'Input',
|
|
required: true,
|
|
},
|
|
// {
|
|
// field: 'email',
|
|
// label: '邮箱',
|
|
// component: 'Input',
|
|
// rules: [{ max: 32, message: '邮箱不能超过32个字符', trigger: 'blur' }],
|
|
// },
|
|
// {
|
|
// field: 'birthday',
|
|
// label: '生日',
|
|
// component: 'DatePicker',
|
|
// },
|
|
// {
|
|
// field: 'source',
|
|
// label: '来源',
|
|
// component: 'Input',
|
|
// rules: [{ max: 32, message: '来源不能超过32个字符', trigger: 'blur' }],
|
|
// },
|
|
],
|
|
showActionButtonGroup: false,
|
|
baseColProps: { md: 24 },
|
|
});
|
|
|
|
const [registerDrawer, { changeLoading, closeDrawer }] = useDrawerInner(async (data) => {
|
|
await setForm(data);
|
|
});
|
|
|
|
async function setForm(data) {
|
|
changeLoading(true);
|
|
|
|
// 重置表单
|
|
await resetFields();
|
|
deptId.value = data?.deptId;
|
|
await updateSchema({
|
|
field: 'roleIdList',
|
|
componentProps: {
|
|
type: 'deptId',
|
|
deptId: deptId.value,
|
|
},
|
|
});
|
|
|
|
if (data.id) {
|
|
// 不允许在此页面修改密码
|
|
await updateSchema({
|
|
field: 'password',
|
|
rules: [],
|
|
});
|
|
} else {
|
|
await updateSchema({
|
|
field: 'password',
|
|
// rules: [{ required: true, validator: checkPassword, trigger: 'change' }],
|
|
});
|
|
}
|
|
|
|
await setFieldsValue(data);
|
|
changeLoading(false);
|
|
}
|
|
|
|
async function handleSubmit(callback: (_: SysUser) => any) {
|
|
try {
|
|
changeLoading(true);
|
|
await validate();
|
|
const values = getFieldsValue();
|
|
|
|
await saveUser({
|
|
...values,
|
|
deptId: unref(deptId),
|
|
}).then((res) => {
|
|
message.success('保存成功');
|
|
emit('success');
|
|
callback(res);
|
|
});
|
|
} catch (e) {
|
|
console.error(e);
|
|
changeLoading(false);
|
|
}
|
|
}
|
|
|
|
async function handleSave() {
|
|
await handleSubmit((_) => {
|
|
changeLoading(false);
|
|
closeDrawer();
|
|
});
|
|
}
|
|
|
|
async function handleSaveAndAdd() {
|
|
await handleSubmit((res) => {
|
|
add(res.deptId!).then(async (data) => {
|
|
await setForm(data);
|
|
});
|
|
});
|
|
}
|
|
|
|
return {
|
|
registerDrawer,
|
|
registerForm,
|
|
handleSave,
|
|
handleSaveAndAdd,
|
|
};
|
|
},
|
|
});
|
|
</script>
|
|
|