tuqin
2026-09-24 dc3fc550fe292043cc452dc9aeb0c8a1eeab3b30
src/views/inventoryManagement/dispatchLog/Record.vue
@@ -76,6 +76,7 @@
    </div>
    <div class="actions">
      <!-- <el-button type="primary" @click="handleBatchApprove">审批</el-button> -->
      <el-button type="info" plain icon="Upload" @click="handleImport">导入</el-button>
      <el-button @click="handleOut">导出</el-button>
      <el-button type="danger" plain @click="handleDelete">删除</el-button>
      <el-button type="primary" plain @click="handlePrint">打印</el-button>
@@ -153,6 +154,41 @@
        @pagination="paginationChange"
      />
    </div>
    <!-- 出库导入对话框 -->
    <el-dialog :title="upload.title"
               v-model="upload.open"
               width="400px"
               append-to-body>
      <el-upload ref="uploadRef"
                 :limit="1"
                 accept=".xlsx, .xls"
                 :headers="upload.headers"
                 :action="upload.url"
                 :disabled="upload.isUploading"
                 :on-progress="handleFileUploadProgress"
                 :on-success="handleFileSuccess"
                 :on-error="handleFileError"
                 :auto-upload="false"
                 drag>
        <el-icon class="el-icon--upload"><upload-filled /></el-icon>
        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
        <template #tip>
          <div class="el-upload__tip text-center">
            <span>仅允许导入 xls、xlsx 格式文件。</span>
            <el-link type="primary"
                     :underline="false"
                     style="font-size: 12px; vertical-align: baseline"
                     @click="importTemplate">下载模板</el-link>
          </div>
        </template>
      </el-upload>
      <template #footer>
        <div class="dialog-footer">
          <el-button type="primary" @click="submitFileForm">确 定</el-button>
          <el-button @click="upload.open = false">取 消</el-button>
        </div>
      </template>
    </el-dialog>
  </div>
</template>
@@ -172,6 +208,7 @@
  findAllUnQualifiedStockOutRecordTypeOptions,
} from "@/api/basicData/enum.js";
import { parseTime } from "@/utils/ruoyi";
import { getToken } from "@/utils/auth.js";
const userStore = useUserStore();
const { proxy } = getCurrentInstance();
@@ -682,6 +719,55 @@
  const seconds = String(date.getSeconds()).padStart(2, "0");
  return `${year}/${month}/${day} ${hours}:${minutes}:${seconds}`;
};
// 导入
const uploadRef = ref();
const upload = reactive({
  open: false,
  title: "",
  isUploading: false,
  headers: { Authorization: "Bearer " + getToken() },
  url: import.meta.env.VITE_APP_BASE_API + "/stockOutRecord/import?type=" + props.type,
});
const handleImport = () => {
  upload.title = "出库导入";
  upload.open = true;
};
const importTemplate = () => {
  proxy.download("/stockOutRecord/importTemplate", {}, "出库导入模板.xlsx");
};
const submitFileForm = () => {
  upload.isUploading = true;
  uploadRef.value.submit();
};
const handleFileUploadProgress = () => {
  upload.isUploading = true;
};
const handleFileSuccess = (response) => {
  upload.isUploading = false;
  upload.open = false;
  uploadRef.value.clearFiles();
  if (response.code === 200) {
    const failCount = response.failCount || 0;
    if (failCount > 0) {
      const errors = Array.isArray(response.errors) ? response.errors : [];
      proxy.$modal.alert(`${response.msg}\n\n${errors.join("\n")}`, "导入结果", {
        confirmButtonText: "知道了",
      }).then(() => {
        getList();
      });
    } else {
      proxy.$modal.msgSuccess(response.msg || "导入成功");
      getList();
    }
  } else {
    proxy.$modal.msgError(response.msg || "导入失败");
  }
};
const handleFileError = () => {
  upload.isUploading = false;
  proxy.$modal.msgError("文件上传失败");
};
onMounted(() => {
  getList();
  fetchStockRecordTypeOptions();