WXL
2025-09-28 84d5f2ddb619b227a6f8b2e331326bc824dd68d5
src/views/project/travelexpenseapply/travelexpensedetail/index.vue
@@ -58,17 +58,30 @@
          </el-col>
          <el-col :span="5">
            <el-form-item label="报销类别" prop="costtype">
              <el-select v-model="form.costtype" value-key="value" placeholder="请选择报销人员类别" @change="getTravelers">
                <el-option v-for="dict in dict.type.sys_travelexpensebelong" :key="dict.value" :label="dict.label"
                  :value="dict.value"></el-option>
              <el-select
                v-model="form.costtype"
                value-key="value"
                placeholder="请选择报销人员类别"
              >
                <el-option
                  v-for="dict in dict.type.sys_travelexpensebelong"
                  :key="dict.value"
                  :label="dict.label"
                  :value="dict.value"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="5">
            <el-form-item label="捐献者" prop="infoid" v-show="form.costtype==4">
            <el-form-item
              label="捐献者"
              prop="infoid"
              v-show="form.costtype == 4"
            >
              <el-select
                v-model="form.infoid"
                @change="selectbaseinfo"
                clearable
                filterable
                placeholder="请选择捐献者"
              >
@@ -118,8 +131,8 @@
                v-model="form.bigstrmoney"
                placeholder="报销大写金额"
              />
            </el-form-item>
            </el-col>
            </el-form-item>
          </el-col>
        </el-row>
        <!--
        <el-row>
@@ -127,7 +140,7 @@
            <el-form-item label="出差事由" prop="reason">
              <el-input v-model="form.reason" placeholder="出差事由" />
            </el-form-item>
          </el-col>
          </el-col>
          <el-col :span="5">
            <el-form-item label="出差人" prop="travelers">
              <el-select v-model="form.travelers" clearable filterable allow-create ref="getReportname"
@@ -1093,15 +1106,29 @@
              class="pdfimgmin"
            >
              <!-- <img :src="pdfimg" /> -->
              <el-image
              <!-- <el-image
                style="width: 95%; height: 90%"
                :src="pdfimg"
                :preview-src-list="pdfimgsrcList"
                :preview-src-list="pdfimgsrcList" -->
              >
                <!-- <div slot="error" class="image-slot">
              <el-image
                ref="imagePreview"
                style="width: 95%; height: 90%"
                :src="pdfimg"
                @click="handleImageClick(initialIndex)"
              >
              </el-image>
              <custom-image-viewer
                :url-list="pdfimgsrcList"
                :initial-index="currentIndex"
                :visible="viewerVisible"
                @update:visible="viewerVisible = $event"
                @close="handleViewerClose"
              />
              <!-- <div slot="error" class="image-slot">
              <i class="el-icon-picture-outline"></i>
            </div> -->
              </el-image>
              <!-- </el-image> -->
            </div>
            <div v-else class="pdfimgmins">{{ hintitle }}</div>
          </div>
@@ -1193,12 +1220,16 @@
              <el-image
                style="width: 95%; height: 90%"
                :src="invoicepdfimg"
                :preview-src-list="invoicepdfimgsrcList"
                @click="invoicehandleImageClick(initialIndex)"
              >
                <!-- <div slot="error" class="image-slot">
              <i class="el-icon-picture-outline"></i>
            </div> -->
              </el-image>
              <custom-image-viewer
                :url-list="invoicepdfimgsrcList"
                :initial-index="invoicecurrentIndex"
                :visible="invoiceviewerVisible"
                @update:visible="invoiceviewerVisible = $event"
                @close="invoicehandleViewerClose"
              />
            </div>
            <div v-else class="pdfimgmins">{{ hintitle }}</div>
          </div>
@@ -1258,6 +1289,7 @@
import { getInfoBytheUserNo } from "@/api/project/externalperson";
import { regionDataPlus, CodeToText } from "element-china-area-data";
import Li_area_select from "@/components/Address";
import CustomImageViewer from "@/components/CustomImageViewer"; // 根据你的路径调整
import { getUser, getUserProfile } from "@/api/system/user";
import { treeselect } from "@/api/system/dept";
import { getSubsidy } from "@/api/project/travelcity";
@@ -1268,6 +1300,7 @@
  components: {
    Treeselect,
    Li_area_select,
    CustomImageViewer,
    pdf
  },
  name: "Funddetail",
@@ -1430,6 +1463,12 @@
      invoicefileListto: [],
      invoicepdfimg: "",
      invoicepdfimgsrcList: [],
      currentIndex: 0, // 初始索引
      invoicecurrentIndex: 0, // 初始索引
      initialIndex: 0, // 初始索引
      viewerVisible: false, // 控制预览组件显示
      invoiceviewerVisible: false, // 控制预览组件显示
      //人员类别
      persontype: null,
      //到达地
@@ -1491,7 +1530,14 @@
  mounted() {
    window.addEventListener("beforeunload", e => this.beforeunloadHandler(e));
    this.$nextTick(() => {
      const viewer = this.$refs.imagePreview.$el.querySelector(
        ".el-image-viewer"
      );
      if (viewer) {
        viewer.addEventListener("click", this.handlePreviewClick);
      }
    });
    //选择业务类型:1、新增;2、修改;3、查看
    let curId = this.$route.query.id;
    let pos = this.$route.query.pos;
@@ -1514,7 +1560,15 @@
  destroyed() {
    window.removeEventListener("beforeunload", e => this.beforeunloadFn(e));
  }, //生命周期 - 销毁完成
  beforeDestroy() {
    // 移除事件监听
    const viewer = this.$refs.imagePreview.$el.querySelector(
      ".el-image-viewer"
    );
    if (viewer) {
      viewer.removeEventListener("click", this.handlePreviewClick);
    }
  },
  methods: {
    // 浏览器页面关闭或刷新提示
    beforeunloadHandler(e) {
@@ -1533,7 +1587,57 @@
        return "关闭提示";
      }
    },
    handlePreviewClick(e) {
      const viewer = this.$refs.imagePreview.$el.querySelector(
        ".el-image-viewer"
      );
      if (!viewer) return;
      // 判断是否点击了“下一张”按钮(右侧箭头)
      const isNextBtn = e.target.closest(".el-image-viewer__next");
      if (isNextBtn) {
        const currentIndex = this.getCurrentPreviewIndex();
        if (currentIndex === this.pdfimgsrcList.length - 1) {
          e.preventDefault(); // 阻止默认切换行为
          this.$message.warning("已经是最后一张了!");
          return;
        }
      }
    },
    // 获取当前预览的图片索引
    getCurrentPreviewIndex() {
      const viewer = this.$refs.imagePreview.$el.querySelector(
        ".el-image-viewer"
      );
      if (viewer) {
        const img = viewer.querySelector(".el-image-viewer__img");
        if (img) {
          const currentSrc = img.getAttribute("src");
          return this.pdfimgsrcList.indexOf(currentSrc);
        }
      }
      return 0;
    },
    handleImageClick(index) {
      this.currentIndex = index;
      this.viewerVisible = true;
    },
    invoicehandleImageClick(index) {
      this.invoicecurrentIndex = index;
      this.invoiceviewerVisible = true;
    },
    handleViewerClose() {
      this.viewerVisible = false;
    },
    invoicehandleViewerClose() {
      this.invoiceviewerVisible = false;
    },
    handleImageError() {
      console.error("图片加载失败");
    },
    handleImageLoad() {
      console.log("图片加载成功");
    },
    handleUploadError() {},
    // 获取请求头
    Getnetworkheader() {
@@ -2576,9 +2680,9 @@
              );
              return;
            }
          }
          }
          if (this.form.id != null) {
          if (this.form.id != null) {
            updateReimbursement(this.form);
            //   .then(res => {
            //保存明细