From 3baaad59171ded6aca17340fcc907acbeeb45b7b Mon Sep 17 00:00:00 2001 From: zhuguifei <zhuguifei@zhuguifeideiMac.local> Date: 星期二, 08 四月 2025 08:14:43 +0800 Subject: [PATCH] Merge branch 'main' of http://lanpucloud.cn:1111/r/eims-master --- eims-ui/apps/web-antd/src/views/eims/spare-type/spare-type-drawer.vue | 132 ++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 132 insertions(+), 0 deletions(-) diff --git a/eims-ui/apps/web-antd/src/views/eims/spare-type/spare-type-drawer.vue b/eims-ui/apps/web-antd/src/views/eims/spare-type/spare-type-drawer.vue new file mode 100644 index 0000000..510a19f --- /dev/null +++ b/eims-ui/apps/web-antd/src/views/eims/spare-type/spare-type-drawer.vue @@ -0,0 +1,132 @@ +<script setup lang="ts"> +import { computed, ref } from 'vue'; + +import { useVbenDrawer } from '@vben/common-ui'; +import { $t } from '@vben/locales'; +import { addFullName, cloneDeep, getPopupContainer, listToTree } from '@vben/utils'; + +import { useVbenForm } from '#/adapter/form'; +import { addSpareType, getSpareType, listSpareType, updateSpareType } from '#/api/eims/spare-type'; + +import { drawerSchema } from './data'; + +interface ModalProps { + id?: number | string; + update: boolean; +} + +const emit = defineEmits<{ reload: [] }>(); + +const isUpdate = ref(false); +const title = computed(() => { + return isUpdate.value ? $t('pages.common.edit') : $t('pages.common.add'); +}); + +const [BasicForm, formApi] = useVbenForm({ + commonConfig: { + componentProps: { + class: 'w-full' + }, + formItemClass: 'col-span-2', + labelWidth: 90 + }, + schema: drawerSchema(), + showDefaultActions: false, + wrapperClass: 'grid-cols-2' +}); + +async function setupSpareTypeSelect() { + // menu + const menuArray = await listSpareType({ status: '0' }); + // support i18n + menuArray.forEach((item) => { + item.typeName = $t(item.typeName); + }); + // const folderArray = menuArray.filter((item) => item.menuType === 'M'); + const menuTree = listToTree(menuArray, { id: 'id', pid: 'parentId' }); + const fullMenuTree = [ + { + id: 0, + typeName: $t('menu.root'), + children: menuTree + } + ]; + addFullName(fullMenuTree, 'typeName', ' / '); + formApi.updateSchema([ + { + componentProps: { + fieldNames: { + label: 'typeName', + value: 'id' + }, + getPopupContainer, + // 璁剧疆寮圭獥婊氬姩楂樺害 榛樿256 + listHeight: 300, + showSearch: true, + treeData: fullMenuTree, + treeDefaultExpandAll: false, + // 榛樿灞曞紑鐨勬爲鑺傜偣 + treeDefaultExpandedKeys: [0], + treeLine: { showLeafIcon: false }, + // 绛涢�夌殑瀛楁 + treeNodeFilterProp: 'typeName', + treeNodeLabelProp: 'fullName' + }, + fieldName: 'parentId' + } + ]); +} + +const [BasicDrawer, drawerApi] = useVbenDrawer({ + onCancel: handleCancel, + onConfirm: handleConfirm, + async onOpenChange(isOpen) { + if (!isOpen) { + return null; + } + drawerApi.drawerLoading(true); + const { id, update } = drawerApi.getData() as ModalProps; + isUpdate.value = update; + + // 鍔犺浇璁惧绫诲瀷鏍戦�夋嫨 + await setupSpareTypeSelect(); + if (id) { + await formApi.setFieldValue('parentId', id); + if (update) { + const record = await getSpareType(id); + await formApi.setValues(record); + } + } + drawerApi.drawerLoading(false); + } +}); + +async function handleConfirm() { + try { + drawerApi.drawerLoading(true); + const { valid } = await formApi.validate(); + if (!valid) { + return; + } + const data = cloneDeep(await formApi.getValues()); + await (isUpdate.value ? updateSpareType(data) : addSpareType(data)); + emit('reload'); + await handleCancel(); + } catch (error) { + console.error(error); + } finally { + drawerApi.drawerLoading(false); + } +} + +async function handleCancel() { + drawerApi.close(); + await formApi.resetForm(); +} +</script> + +<template> + <BasicDrawer :close-on-click-modal="false" :title="title" class="w-[600px]"> + <BasicForm /> + </BasicDrawer> +</template> -- Gitblit v1.9.3