湖州项目前端
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

<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>