zouyu
2025-03-18 bc44c8e3c9d85691ce3fa73ef1300a6fae46e365
src/views/business/reportPreparation/index.vue
@@ -1,4 +1,9 @@
<style scoped>
.reportPreparation {
  width: 100%;
  height: 100%;
}
.title {
  height: 60px;
  line-height: 60px;
@@ -15,7 +20,7 @@
  display: flex;
  align-items: center;
  height: 50px;
  width: 230px;
  width: 210px;
}
.search_label {
@@ -65,8 +70,8 @@
</style>
<template>
  <div class="inspection_order">
    <div style="width: 100%; height: 100%">
  <div>
    <div class="reportPreparation bg-1">
      <div>
        <el-row class="title">
          <el-col :span="12" style="padding-left: 20px; text-align: left"
@@ -196,6 +201,7 @@
                :icon="!more ? 'el-icon-arrow-down' : 'el-icon-arrow-up'"
                style="color: #3a7bfa"
                @click="more = !more"
                v-hasPermi="['bbusiness:reportPreparation:more']"
                >{{ !more ? "更多" : "收起" }}</el-button
              >
              <div class="search_thing" style="padding-left: 20px">
@@ -224,62 +230,31 @@
                      <el-dropdown-item
                        icon="el-icon-download"
                        command="batchDownload"
                        v-hasPermi="['business:reportPreparation:batchDownload']"
                        >批量下载</el-dropdown-item
                      >
                      <el-dropdown-item
                        icon="el-icon-upload"
                        command="batchUpload"
                         v-hasPermi="['business:reportPreparation:batchUpload']"
                        >批量上传</el-dropdown-item
                      >
                      <el-dropdown-item
                        icon="el-icon-s-check"
                        command="oneClickApproval"
                         v-hasPermi="['business:reportPreparation:oneClickApproval']"
                        >一键审批</el-dropdown-item
                      >
                      <el-dropdown-item
                        icon="el-icon-setting"
                        command="approvalConfig"
                         v-hasPermi="['business:reportPreparation:signatureConfiguration']"
                        >审批签名配置</el-dropdown-item
                      >
                    </el-dropdown-menu>
                  </el-dropdown>
                </template>
                <template>
                  <el-button
                    size="small"
                    type="primary"
                    @click="handleDowns"
                    :loading="outLoading"
                    style="margin-right: 6px"
                    >批量下载</el-button
                  >
                  <el-button
                    size="small"
                    type="primary"
                    @click="openBatchUploadDia()"
                    :loading="inLoading"
                    >批量上传</el-button
                  >
                  <el-button
                    size="small"
                    type="primary"
                    @click="oneClickApproval()"
                    :loading="approvalLoading"
                    >一键审批</el-button
                  >
                  <el-button
                    size="small"
                    type="primary"
                    @click="openApprovalConfig()"
                    :loading="approvalConfigLoading"
                    >审批签名配置</el-button
                  >
                </template>
              </div>
              <!-- <div class="btns">
              <el-button size="small" type="primary" @click="handleDowns" :loading="outLoading" style="margin-right: 16px;">批量下载</el-button>
              <el-button size="small" type="primary" @click="openBatchUploadDia()" :loading="inLoading">批量上传</el-button>
            </div> -->
            </div>
          </el-col>
        </el-row>
@@ -316,10 +291,12 @@
          </p>
        </div>
        <lims-table
          :handleSelectionChange="handleSelectionChange"
          isSelection
          :tableData="tableData"
          :column="column"
          :tableLoading="tableLoading"
          :height="'calc(100vh - 270px)'"
          :height="tableHeight+''"
          :page="page"
          @pagination="pagination"
        ></lims-table>
@@ -341,13 +318,6 @@
          style="cursor: pointer; font-size: 18px"
          @click="fullscreen = true"
        ></i>
        <!-- <img
          v-else
          alt=""
          src="../../../static/img/no-full.svg"
          style="cursor: pointer"
          @click="fullscreen = false"
        /> -->
      </div>
      <div v-if="viewIssuedVisible" style="height: 80vh">
        <onlyoffice
@@ -371,13 +341,6 @@
          @click="fullscreen = true"
          v-if="!fullscreen"
        ></i>
        <!-- <img
          src="../../../static/img/no-full.svg"
          alt=""
          v-else
          style="cursor: pointer"
          @click="fullscreen = false"
        /> -->
      </div>
      <Word
        style="height: 70vh"
@@ -406,13 +369,6 @@
          @click="fullscreen = true"
          v-if="!fullscreen"
        ></i>
        <!-- <img
          src="../../../static/img/no-full.svg"
          alt=""
          v-else
          style="cursor: pointer"
          @click="fullscreen = false"
        /> -->
      </div>
      <div style="height: 75vh" v-if="issuedVisible">
        <onlyoffice
@@ -477,13 +433,6 @@
          @click="fullscreen = true"
          v-if="!fullscreen"
        ></i>
        <!-- <img
          src="../../../static/img/no-full.svg"
          alt=""
          v-else
          style="cursor: pointer"
          @click="fullscreen = false"
        /> -->
      </div>
      <div style="height: 75vh" v-if="approveVisible">
        <onlyoffice
@@ -542,18 +491,6 @@
      top="5vh"
    >
      <div>
        <!-- <el-upload
            class="upload-demo"
            :action="action"
            :headers="headers"
            :show-file-list="false"
            accept=".doc,.docx"
            :limit="1"
            :before-upload="beforeUpload"
            :on-success="handleSuccess"
            ref="upload"
            :on-error="onError">
          </el-upload> -->
        <el-upload
          ref="upload"
          class="upload-demo custom-upload"
@@ -850,14 +787,20 @@
  downAll,
  getBatchApprovalProgress,
  getReportCountInfo,
  downReport,
  upReportUrl,
  ratifyReport,
  writeReport,
  examineReport,
  downLoad,
  getReportInfo,
  getURL,
  batchApprovalReport,
  downReport,
} from "../../../api/business/reportPreparation";
import { getToken } from "@/utils/auth";
import auth from "@/plugins/auth.js";
export default {
  components: {
@@ -866,6 +809,7 @@
  },
  data() {
    return {
      tableHeight: "",
      tagField: {
        isUpload: {
          select: [
@@ -1117,6 +1061,9 @@
              disabled: (row) => {
                return row.isExamine != -9;
              },
              showHide: () => {
                return auth.hasPermi("business:reportPreparation:establishment");
              },
            },
            {
              name: "下载",
@@ -1124,15 +1071,17 @@
              clickFun: (row) => {
                this.download(row);
              },
              showHide: () => {
                return auth.hasPermi("business:reportPreparation:download");
              },
            },
            {
              name: "上传",
              type: "upload",
              url: "/file/attachmentType/upload",
              url: "/insReport/inReport",
              data: (row) => {
                return {
                  id: row.id,
                  type: 1,
                };
              },
              uploadIdFun: (row) => {
@@ -1140,6 +1089,9 @@
              },
              disabled: (row) => {
                return row.isExamine != -9;
              },
              showHide: () => {
                return auth.hasPermi("business:reportPreparation:upload");
              },
            },
            {
@@ -1151,6 +1103,9 @@
              disabled: (row) => {
                return row.isExamine != -9;
              },
              showHide: () => {
                return auth.hasPermi("business:reportPreparation:restore");
              },
            },
            {
              name: "提交",
@@ -1160,6 +1115,9 @@
              },
              disabled: (row) => {
                return row.state != 0;
              },
              showHide: () => {
                return auth.hasPermi("business:reportPreparation:submit");
              },
            },
            {
@@ -1172,6 +1130,9 @@
                return (
                  row.state == null || row.state == 0 || row.isExamine == 1
                );
              },
              showHide: () => {
                return auth.hasPermi("business:reportPreparation:examine");
              },
            },
            {
@@ -1189,6 +1150,9 @@
                  row.isRatify == 1
                );
              },
              showHide: () => {
                return auth.hasPermi("business:reportPreparation:approve");
              },
            },
            {
              name: "撤回",
@@ -1198,6 +1162,9 @@
              },
              disabled: (row) => {
                return row.state == 1;
              },
              showHide: () => {
                return auth.hasPermi("business:reportPreparation:withdraw");
              },
            },
          ],
@@ -1237,19 +1204,20 @@
  },
  computed: {
    headers() {
      let token = getToken();
      return {
        token: sessionStorage.getItem("token"),
        authorization: token,
      };
    },
    action() {
      return "";
      return this.javaApi + "/insReport/upAll";
    },
  },
  created() {
    this.getAuthorizedPerson();
    this.handleResize();
    // 监听窗口大小改变事件
    window.addEventListener("resize", this.handleResize);
    window.addEventListener("resize", this.handleResize);
  },
  beforeDestroy() {
    if (this.time != null) {
@@ -1269,6 +1237,11 @@
    this.entityCopy = this.HaveJson(this.entity);
    this.getList();
    this.getReportCountInfo();
    this.getTableHeight();
    window.addEventListener('resize', this.calculateTableHeight); // 监听窗口大小变化
  },
  beforeDestroy() {
    window.removeEventListener('resize', this.calculateTableHeight); // 移除监听
  },
  watch: {
    batchUploadDia(newVal) {
@@ -1306,6 +1279,12 @@
    },
  },
  methods: {
    // 获取表格高度
    getTableHeight() {
      const windowHeight =   window.innerHeight; // 浏览器窗口高度
      this.tableHeight = windowHeight - 60 - 80 - 46 - 50 - 32 - 44 -30 - 30;
      console.log('this.tableHeight',this.tableHeight);
    },
    // 返回分页值
    pagination({ page, limit }) {
      this.page.current = page;
@@ -1331,7 +1310,7 @@
    },
    // 撤回 弹框
    withdraw(row) {
      getLaboratoryByReportId(row.id).then((res) => {
      getLaboratoryByReportId({ id: row.id }).then((res) => {
        this.laboratorys = res.data;
        this.reportId = row.id;
        this.withdrawDialogVisible = true;
@@ -1349,6 +1328,7 @@
      withdraw(data).then((res) => {
        if (res.code == 200) {
          this.$message.success("撤回成功");
          this.laboratory = [];
          this.withdrawDialogVisible = false;
          this.refresh();
        }
@@ -1399,6 +1379,7 @@
    getAuthorizedPerson() {
      getUserList()
        .then((res) => {
          console.log('res',res);
          this.personList = res.data;
        })
        .catch((error) => {
@@ -1539,6 +1520,10 @@
    handleChange(arr) {
      this.mutiList = arr;
    },
    handleSelectionChange(val) {
      this.mutiList = val;
      console.log(`output->val`, val);
    },
    handleDowns() {
      if (this.mutiList.length == 0) {
        this.$message.error("请选择报告");
@@ -1582,14 +1567,8 @@
      downAll({ ids: str }).then((res) => {
        this.outLoading = false;
        this.$message.success("导出成功");
        // const blob = new Blob([res],{ type: 'application/octet-stream' });
        // const url = URL.createObjectURL(blob);
        // const link = document.createElement('a');
        // link.href = url;
        // link.download = '报告.zip';
        // link.click();
        const link = document.createElement("a");
        link.href = this.javaApi + res.message;
        link.href = this.javaApi + res.data;
        link.target = "_blank";
        document.body.appendChild(link);
        link.click();
@@ -1718,27 +1697,21 @@
      console.log(`output->row`, row);
    },
    download(row) {
      getReportInfo({ id: row.id, type: 1,suffix:'.docx' }).then((response) => {
        if (response.data && response.data.contentType) {
          downLoad({ id: row.id, type: 1, code: row.code,suffix: '.docx' })
            .then((res) => {
              // 获取文件名
              const blob = new Blob([res], { type: response.data.contentType });
              const url = URL.createObjectURL(blob);
              let link = document.createElement("a");
              link.href = url;
              link.download = row.code;
              document.body.appendChild(link);
              link.click();
              document.body.removeChild(link);
              URL.revokeObjectURL(url);
            })
            .catch((error) => {
              this.$message.error(error);
            });
        } else {
          this.$message.error("未找到文件");
        }
      downReport({ id: row.id, type: 0 }).then((res) => {
          let rowUrl = row.urlS ? row.urlS : row.url;
          let fileName =
            rowUrl.indexOf("_") == -1
              ? rowUrl.split("/")[2]
              : rowUrl.split("_")[1];
          console.log(fileName);
          const blod = new Blob([res], { type: "application/octet-stream" });
          const url = URL.createObjectURL(blod);
          const link = document.createElement("a");
          link.href = url;
          link.target = "_blank";
          link.download = fileName;
          document.body.appendChild(link);
          link.click();
      });
    },
    // 还原操作
@@ -1749,7 +1722,7 @@
        type: "warning",
      })
        .then(() => {
          upReportUrl({ id: row.id,type:1 }).then((res) => {
          upReportUrl({ id: row.id, type: 1 }).then((res) => {
            if (res.code === 200) {
              this.$message.success("操作成功");
              this.refreshTable("page");
@@ -1762,7 +1735,7 @@
      this.currentInfo = row;
      let fileName = row.urlS === null || row.urlS === "" ? row.url : row.urlS;
      fileName = fileName.replace("/word/", "");
      const userName = JSON.parse(localStorage.getItem("user")).name;
      const userName = this.$store.state.user.name;
      this.option = {
        url: this.javaApi + "/word/" + fileName,
        isEdit: false,
@@ -1800,7 +1773,7 @@
      this.currentInfo = row;
      let fileName = row.urlS === null || row.urlS === "" ? row.url : row.urlS;
      fileName = fileName.replace("/word/", "");
      const userName = JSON.parse(localStorage.getItem("user")).name;
      const userName = this.$store.state.user.name;
      this.option = {
        url: this.javaApi + "/word/" + fileName,
        isEdit: false,
@@ -1888,8 +1861,8 @@
      this.loadingApproveReason = true;
      examineReport({
        id: this.currentInfo.id,
        isRatify: 0,
        ratifyTell: this.reason,
        isExamine: 0,
        examineTell: this.reason,
      })
        .then((res) => {
          this.loadingApproveReason = false;