董国庆
2026-01-30 09337f289b0a8ca93e4a06c9c78f7abd90b0d1dc
提交
3个文件已修改
98 ■■■■■ 已修改文件
screen/src/view/accidentCase/index.vue 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/view/planOfAudit/index.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/view/projectProgress/index.vue 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/view/accidentCase/index.vue
@@ -194,8 +194,9 @@
          <img
            v-if="item.img"
            :src="VUE_APP_BASE_URL + '/project/download/' + item.img"
            class="w--264 h--160 shrink0 ml--54 br--10"
            class="w--264 h--160 shrink0 ml--54 br--10 cursor-pointer"
            @error="handleImageError"
            @click.stop="previewImage(item)"
          />
          <img
            v-else
@@ -220,16 +221,23 @@
        :total="total"
      />
    </div>
    <!-- 图片预览 -->
    <CustomPreview
      :show="previewVisible"
      :imgArr="previewImages"
      @close="previewVisible = false"
    />
  </div>
</template>
<script>
import HeaderBox from "../header/index.vue";
import CustomPreview from "../../components/customPreview.vue";
import moment from "moment";
import { getAccidentClassify, getStoryPage } from "./service";
export default {
  components: { HeaderBox },
  components: { HeaderBox, CustomPreview },
  props: {},
  data() {
    return {
@@ -256,6 +264,8 @@
      storyList: [],
      loading: false,
      VUE_APP_BASE_URL: process.env.VUE_APP_BASE_URL,
      previewVisible: false,
      previewImages: [],
    };
  },
  computed: {},
@@ -539,11 +549,31 @@
      if (!this.dateTime) {
        this.handleSearch();
      }
    }
    },
    // 预览图片
    previewImage(item) {
      if (item.img) {
        // 如果img是字符串,可能是逗号分隔的多张图片
        const imageUrl = this.VUE_APP_BASE_URL + '/project/download/' + item.img;
        this.previewImages = [imageUrl];
        this.previewVisible = true;
      } else {
        this.$message.warning("暂无图片");
      }
    },
  },
};
</script>
<style scoped lang="less">
.br--10 {
  border-radius: 10px;
}
.cursor-pointer {
  cursor: pointer;
}
.text-ellipsis-3 {
  display: -webkit-box;
  -webkit-box-orient: vertical;
screen/src/view/planOfAudit/index.vue
@@ -156,7 +156,7 @@
              <template #reference>
                <el-button
                  type="text"
                  class="btnColor"
                  :class="hasAnyReport(row) ? 'btnColor' : 'btnDisabled'"
                  :disabled="!hasAnyReport(row)"
                  @click="checkReportAvailability(row)"
                >
@@ -729,7 +729,7 @@
        }
        // 检查 Word 文档是否生成成功
        if (!wordBlob || wordBlob.size === 0) {
          this.$message.error("报告生成失败");
@@ -755,7 +755,7 @@
          return;
        }
        // 根据后端返回的数据结构获取PDF链接
        // 假设后端返回格式为 { data: "http://xxx.pdf" } 或直接返回字符串
@@ -1033,6 +1033,11 @@
  color: #00ebfc;
}
.btnDisabled {
  color: #666666 !important;
  cursor: not-allowed !important;
}
.report-btn {
  cursor: pointer;
  transition: all 0.3s ease;
screen/src/view/projectProgress/index.vue
@@ -188,26 +188,24 @@
      </div>
    </CustomDialog>
    <!-- 媒体预览弹窗 -->
    <!-- 图片预览 -->
    <CustomPreview
      :show="previewVisible"
      :imgArr="previewImages"
      @close="previewVisible = false"
    />
    <!-- 视频预览弹窗 -->
    <el-dialog
      :visible.sync="previewVisible"
      :visible.sync="videoPreviewVisible"
      width="80%"
      :show-close="true"
      @close="closePreview"
      @close="closeVideoPreview"
      class="media-preview-dialog"
      append-to-body
    >
      <div class="preview-content">
        <!-- 图片预览 -->
        <img
          v-if="previewType === 'image'"
          :src="previewUrl"
          class="preview-image"
          @error="handleImageError"
        />
        <!-- 视频预览 -->
        <video
          v-else-if="previewType === 'video'"
          :src="previewUrl"
          class="preview-video"
          controls
@@ -221,6 +219,7 @@
<script>
import HeaderBox from "../header/index.vue";
import CustomPreview from "../../components/customPreview.vue";
import moment from "moment";
import {
  getProjectProgressList,
@@ -228,7 +227,7 @@
} from "./service";
export default {
  components: { HeaderBox },
  components: { HeaderBox, CustomPreview },
  props: {},
  data() {
    return {
@@ -264,9 +263,10 @@
      VUE_APP_BASE_URL: process.env.VUE_APP_IMAGE_BASE_URL, // 基础URL
      progressMediaList: [], // 处理后的媒体列表(包含类型信息)
      // 预览相关
      previewVisible: false, // 预览弹窗显示状态
      previewVisible: false, // 图片预览弹窗显示状态
      previewImages: [], // 图片预览数组
      videoPreviewVisible: false, // 视频预览弹窗显示状态
      previewUrl: '', // 预览的URL
      previewType: 'image', // 预览类型:'image' 或 'video'
    };
  },
  computed: {},
@@ -507,7 +507,7 @@
        });
        const contentType = response.headers.get('Content-Type') || '';
        // 判断是否为视频
        if (contentType.startsWith('video/')) {
@@ -531,17 +531,22 @@
    // 预览进度媒体(图片或视频)- 弹窗预览
    previewProgressMedia(item) {
      if (item && item.url) {
        this.previewUrl = item.url;
        this.previewType = item.type || 'image';
        this.previewVisible = true;
        if (item.type === 'video') {
          // 视频使用单独的弹窗
          this.previewUrl = item.url;
          this.videoPreviewVisible = true;
        } else {
          // 图片使用 CustomPreview 组件
          this.previewImages = [item.url];
          this.previewVisible = true;
        }
      }
    },
    // 关闭预览弹窗
    closePreview() {
      this.previewVisible = false;
    // 关闭视频预览弹窗
    closeVideoPreview() {
      this.videoPreviewVisible = false;
      this.previewUrl = '';
      this.previewType = 'image';
    },
    // 图片加载失败处理