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.
72 lines
2.1 KiB
72 lines
2.1 KiB
<template> |
|
<BasicDrawer |
|
v-bind="$attrs" |
|
@register="registerDrawer" |
|
showFooter |
|
:title="getTitle" |
|
width="500px" |
|
@ok="handleSubmit" |
|
> |
|
<BasicForm @register="registerForm"> |
|
<template #menu="{ model, field }"> |
|
<BasicTree |
|
v-model:value="model[field]" |
|
:treeData="treeData" |
|
:replaceFields="{ title: 'menuName', key: 'id' }" |
|
checkable |
|
toolbar |
|
title="菜单分配" |
|
/> |
|
</template> |
|
</BasicForm> |
|
</BasicDrawer> |
|
</template> |
|
<script lang="ts" setup> |
|
import { ref, computed, unref } from 'vue'; |
|
import { BasicForm, useForm } from '/@/components/Form/index'; |
|
import { formSchema } from './log.data'; |
|
import { BasicDrawer, useDrawerInner } from '/@/components/Drawer'; |
|
import { BasicTree, TreeItem } from '/@/components/Tree'; |
|
//import { getMenuList } from '/@/api/system/role'; |
|
|
|
const emit = defineEmits(['success', 'register']); |
|
const isUpdate = ref(true); |
|
const treeData = ref<TreeItem[]>([]); |
|
|
|
const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({ |
|
labelWidth: 90, |
|
schemas: formSchema, |
|
showActionButtonGroup: false, |
|
}); |
|
|
|
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => { |
|
resetFields(); |
|
setDrawerProps({ confirmLoading: false }); |
|
// 需要在setFieldsValue之前先填充treeData,否则Tree组件可能会报key not exist警告 |
|
if (unref(treeData).length === 0) { |
|
//treeData.value = (await getMenuList()) as any as TreeItem[]; |
|
} |
|
isUpdate.value = !!data?.isUpdate; |
|
|
|
if (unref(isUpdate)) { |
|
setFieldsValue({ |
|
...data.record, |
|
}); |
|
} |
|
}); |
|
|
|
const getTitle = computed(() => (!unref(isUpdate) ? '新增日志' : '编辑日志')); |
|
|
|
async function handleSubmit() { |
|
try { |
|
const values = await validate(); |
|
setDrawerProps({ confirmLoading: true }); |
|
// TODO custom api |
|
console.log(values); |
|
closeDrawer(); |
|
emit('success'); |
|
} finally { |
|
setDrawerProps({ confirmLoading: false }); |
|
} |
|
} |
|
</script>
|
|
|