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/spare-drawer.vue |  149 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 149 insertions(+), 0 deletions(-)

diff --git a/eims-ui/apps/web-antd/src/views/eims/spare/spare-drawer.vue b/eims-ui/apps/web-antd/src/views/eims/spare/spare-drawer.vue
new file mode 100644
index 0000000..3ddb4f6
--- /dev/null
+++ b/eims-ui/apps/web-antd/src/views/eims/spare/spare-drawer.vue
@@ -0,0 +1,149 @@
+<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 { addSpare, getSpare, updateSpare } from '#/api/eims/spare';
+import { listSpareType } from '#/api/eims/spare-type';
+import { ImageUpload } from '#/components/upload';
+
+import { drawerSchema } from './data';
+
+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: {
+    formItemClass: 'col-span-2',
+    componentProps: {
+      class: 'w-full'
+    },
+    labelWidth: 120
+  },
+  schema: drawerSchema(),
+  showDefaultActions: false,
+  wrapperClass: 'grid-cols-2'
+});
+
+const [BasicDrawer, drawerApi] = useVbenDrawer({
+  onCancel: handleCancel,
+  onConfirm: handleConfirm,
+  async onOpenChange(isOpen) {
+    if (!isOpen) {
+      return null;
+    }
+    drawerApi.drawerLoading(true);
+    const { id } = drawerApi.getData() as { id?: number | string };
+    await setupSpareTypeSelect();
+    onImageChange();
+    isUpdate.value = !!id;
+
+    // 鏇存柊 && 璧嬪��
+    if (isUpdate.value && id) {
+      const record = await getSpare(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 ? updateSpare(data) : addSpare(data));
+    emit('reload');
+    await handleCancel();
+  } catch (error) {
+    console.error(error);
+  } finally {
+    drawerApi.drawerLoading(false);
+  }
+}
+
+async function handleCancel() {
+  drawerApi.close();
+  await formApi.resetForm();
+}
+
+async function setupSpareTypeSelect() {
+  // status-0 鍙煡璇㈡湭鍋滅敤
+  const equArray = await listSpareType({ status: 0 });
+  // support i18n
+  equArray.forEach((item) => {
+    item.typeName = $t(item.typeName);
+  });
+  const equTree = listToTree(equArray, { id: 'id', pid: 'parentId' });
+  const fullEquTree = [
+    {
+      id: 0,
+      typeName: $t('menu.root'),
+      children: equTree
+    }
+  ];
+  addFullName(fullEquTree, 'typeName', ' / ');
+  formApi.updateSchema([
+    {
+      componentProps: {
+        fieldNames: {
+          label: 'typeName',
+          value: 'id'
+        },
+        getPopupContainer,
+        // 璁剧疆寮圭獥婊氬姩楂樺害 榛樿256
+        listHeight: 300,
+        showSearch: true,
+        treeData: fullEquTree,
+        treeDefaultExpandAll: false,
+        // 榛樿灞曞紑鐨勬爲鑺傜偣
+        treeDefaultExpandedKeys: [0],
+        treeLine: { showLeafIcon: false },
+        // 绛涢�夌殑瀛楁
+        treeNodeFilterProp: 'typeName',
+        treeNodeLabelProp: 'fullName'
+      },
+      fieldName: 'type'
+    }
+  ]);
+}
+
+const accept = ref(['jpg', 'jpeg', 'png', 'gif', 'webp']);
+const maxNumber = ref(1);
+
+function onImageChange() {
+  formApi.updateSchema([
+    {
+      componentProps: () => ({
+        async onChange(value: any) {
+          await formApi.setValues({ 'img': value });
+        }
+      }),
+      fieldName: 'imgUrl'
+    }
+  ]);
+}
+</script>
+
+<template>
+  <BasicDrawer :close-on-click-modal="false" :title="title" class="w-[600px]">
+    <BasicForm>
+      <template #imgUrl="slotProps">
+        <!--娉ㄦ剰锛氫笂浼犳垚鍔熷悗杩斿洖ossid-->
+        <ImageUpload v-bind="slotProps" :accept="accept" :max-number="maxNumber"
+                     result-field="ossId" />
+      </template>
+    </BasicForm>
+  </BasicDrawer>
+</template>

--
Gitblit v1.9.3