From e47bc9e53ed3d64016c1e0db67d280e63b367e07 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期五, 21 八月 2026 17:05:54 +0800
Subject: [PATCH] 导入模板下载 导入 计算迟到加班早退

---
 src/views/basicData/mdm/unit/modules/import-form.vue |  105 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 105 insertions(+), 0 deletions(-)

diff --git a/src/views/basicData/mdm/unit/modules/import-form.vue b/src/views/basicData/mdm/unit/modules/import-form.vue
new file mode 100644
index 0000000..de36691
--- /dev/null
+++ b/src/views/basicData/mdm/unit/modules/import-form.vue
@@ -0,0 +1,105 @@
+<script lang="ts" setup>
+import type { FileType } from 'ant-design-vue/es/upload/interface';
+
+import { h } from 'vue';
+
+import { useVbenModal } from '@vben/common-ui';
+import { downloadFileFromBlobPart } from '@vben/utils';
+
+import { Button, message, notification, Upload } from 'ant-design-vue';
+
+import { useVbenForm } from '#/adapter/form';
+import { importUnit, importUnitTemplate } from '#/api/mdm/unit';
+import { $t } from '#/locales';
+
+import { useImportFormSchema } from '../data';
+
+const emit = defineEmits(['success']);
+
+const [Form, formApi] = useVbenForm({
+  commonConfig: {
+    formItemClass: 'col-span-2',
+    labelWidth: 120,
+  },
+  layout: 'horizontal',
+  schema: useImportFormSchema(),
+  showDefaultActions: false,
+});
+
+const [Modal, modalApi] = useVbenModal({
+  async onConfirm() {
+    const { valid } = await formApi.validate();
+    if (!valid) {
+      return;
+    }
+    modalApi.lock();
+    // 鎻愪氦琛ㄥ崟
+    const data = await formApi.getValues();
+    try {
+      const response = (await importUnit(data.file, data.updateSupport)) as any;
+      // 鍏抽棴骞舵彁绀�
+      await modalApi.close();
+      emit('success');
+
+      const resultData = response?.data || response || {};
+      const failureList = resultData.failureList || {};
+
+      if (Object.keys(failureList).length > 0) {
+        const errorNodes = Object.entries(failureList).map(([name, reason]) => {
+          return h('div', `${name}: ${reason}`);
+        });
+
+        notification.warning({
+          message: '瀵煎叆瀹屾垚锛岄儴鍒嗚閲忓崟浣嶅鍏ュけ璐�',
+          description: () => h('div', errorNodes),
+          duration: null,
+        });
+      } else {
+        message.success($t('ui.actionMessage.operationSuccess'));
+      }
+    } finally {
+      modalApi.unlock();
+    }
+  },
+});
+
+/** 涓婁紶鍓� */
+function beforeUpload(file: FileType) {
+  formApi.setFieldValue('file', file);
+  return false;
+}
+
+/** 涓嬭浇妯$増 */
+async function handleDownload() {
+  const data = await importUnitTemplate();
+  downloadFileFromBlobPart({ fileName: '璁¢噺鍗曚綅瀵煎叆妯℃澘.xls', source: data });
+}
+</script>
+
+<template>
+  <Modal title="瀵煎叆璁¢噺鍗曚綅" class="w-1/3">
+    <Form class="mx-4">
+      <template #file>
+        <div class="w-full">
+          <Upload
+            :max-count="1"
+            accept=".xls,.xlsx"
+            :before-upload="beforeUpload"
+          >
+            <Button type="primary"> 閫夋嫨 Excel 鏂囦欢 </Button>
+          </Upload>
+        </div>
+      </template>
+    </Form>
+    <div class="mx-4 mt-2 mb-4 text-gray-500 text-xs">
+      鎻愮ず锛氭ā鏉夸腑鐨勨�滀富鍗曚綅缂栫爜鈥濊濉啓涓诲崟浣嶇殑缂栫爜锛堝 PC锛夛紝涓诲崟浣嶆湰韬鍒楃暀绌哄嵆鍙��
+      <div>鈥滄槸鍚︿富鍗曚綅鈥濆~ true/false銆�</div>
+      <div>鈥滅姸鎬佲�濆~ 0锛堝惎鐢級/1锛堢鐢級銆�</div>
+    </div>
+    <template #prepend-footer>
+      <div class="flex flex-auto items-center">
+        <Button @click="handleDownload"> 涓嬭浇瀵煎叆妯℃澘 </Button>
+      </div>
+    </template>
+  </Modal>
+</template>

--
Gitblit v1.9.3