董国庆
2026-02-05 066c7da94565e08dcf315792689544fd5e00236f
修改文档内容问题
5个文件已修改
325 ■■■■■ 已修改文件
screen/src/view/accidentCase/detail.vue 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/view/home/index.vue 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/view/planOfAudit/index.vue 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/view/projectHome/index.vue 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/view/workList/index.vue 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/view/accidentCase/detail.vue
@@ -24,18 +24,18 @@
            <div class="flex a-center" v-if="detailData.casualties">
              <img
                src="../../assets/img/home/Shape@2x (1).png"
                class="mr--6 w--9 h--10"
                class="mr--8 w--12 h--13"
              />
              <div class="SHSN fs--12 lh--12 c-fff">
              <div class="SHSN fs--16 lh--16 c-fff">
                伤亡:{{ detailData.casualties }}
              </div>
            </div>
            <div class="flex a-center">
              <img
                src="../../assets/img/home/Shape@2x (2).png"
                class="mr--6 w--8 h--10"
                class="mr--8 w--11 h--13"
              />
              <div class="SHSN fs--12 lh--12 c-fff">
              <div class="SHSN fs--16 lh--16 c-fff">
                {{ detailData.province }}{{ detailData.city
                }}{{ detailData.area }}
              </div>
@@ -43,14 +43,14 @@
            <div class="flex a-center" v-if="detailData.time">
              <img
                src="../../assets/img/home/Shape@2x (3).png"
                class="mr--6 w--10 h--9"
                class="mr--8 w--13 h--12"
              />
              <div class="SHSN fs--12 lh--12 c-fff">
              <div class="SHSN fs--16 lh--16 c-fff">
                {{ formatDate(detailData.time) }}
              </div>
            </div>
          </div>
          <div class="mt--18 fs--14 c-fff SHSN" v-if="detailData.content">
          <div class="mt--18 fs--18 c-fff SHSN content-text" v-if="detailData.content">
            {{ detailData.content }}
          </div>
          <div class="mt--26 flex flex-column a-center gap--18">
@@ -66,6 +66,7 @@
                detailData.img
              "
              @error="handleImageError"
              class="detail-image"
            />
          </div>
        </template>
@@ -143,20 +144,30 @@
};
</script>
<style scoped lang="less">
.content-text {
  line-height: 28px;
  letter-spacing: 0.5px;
}
.detail-content {
  width: 100%;
  line-height: 1.8;
  font-size: 16px;
  line-height: 2;
  word-wrap: break-word;
  ::v-deep img {
    max-width: 100%;
    height: auto;
    width: 800px;
    height: 500px;
    object-fit: cover;
    display: block;
    margin: 10px auto;
    margin: 20px auto;
    border-radius: 4px;
  }
  ::v-deep p {
    margin: 10px 0;
    margin: 12px 0;
    font-size: 16px;
    line-height: 28px;
  }
  ::v-deep h1,
@@ -165,18 +176,27 @@
  ::v-deep h4,
  ::v-deep h5,
  ::v-deep h6 {
    margin: 15px 0 10px;
    margin: 20px 0 12px;
  }
}
.detail-image {
  width: 800px;
  height: 500px;
  object-fit: cover;
  border-radius: 4px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
.typeBox {
  min-width: 60px;
  line-height: 20px;
  min-width: 70px;
  padding: 0 12px;
  line-height: 24px;
  text-align: center;
  background: linear-gradient(180deg, #ff4d4f 0%, #e5484d 100%);
  border-radius: 20px;
  border: 1px solid #e5484d;
  font-size: 12px;
  font-size: 14px;
  color: #ffffff;
  font-family: "Source Han Sans CN Bold";
}
screen/src/view/home/index.vue
@@ -908,7 +908,7 @@
        time: time,
      }).then((res) => {
        this.scrollData = res;
        if (this.screenData.length > 4) {
        if (this.scrollData.length > 4) {
          this.initScrollData();
        }
      });
@@ -1270,6 +1270,15 @@
      marker.on("mouseout", () => {
        this.hideTooltip();
      });
      marker.on("click", () => {
        this.$router.push({
          path: "/projectHome",
          query: {
            projectId: item.projectId,
            projectName: item.projectName,
          },
        });
      });
      return marker;
    },
    updateMarkerVisibility() {
@@ -1311,7 +1320,7 @@
      if (!this.mapView) return;
      const pixel = this.mapView.lngLatToContainer(item.position);
      // 获取当前缩放比例
      let scaleX = 1;
      let scaleY = 1;
@@ -1363,12 +1372,32 @@
            console.error("Parse error", error);
          }
          // 对设备租赁单位进行去重处理
          let uniqueProperties = [];
          if (res.properties && res.properties.length > 0) {
            const seenNames = new Set();
            uniqueProperties = res.properties.filter((item) => {
              try {
                const parsed = JSON.parse(item);
                const companyName = parsed["工程起重机械租赁单位"];
                if (companyName && !seenNames.has(companyName)) {
                  seenNames.add(companyName);
                  return true;
                }
                return false;
              } catch (e) {
                return false;
              }
            });
          }
          this.tooltipData = {
            ...res,
            address,
            constructionCompanyInfo,
            supervisorCompanyInfo,
            developmentCompanyInfo,
            properties: uniqueProperties,
          };
          this.tooltipLoading = false;
        })
screen/src/view/planOfAudit/index.vue
@@ -330,7 +330,7 @@
                :key="index"
                :src="item"
                class="w--150 h--120 cursor-pointer"
                @click="previewImage(item)"
                @click="previewImage(parseImages(checkMaterialDetail.safetySlip), index)"
              />
            </div>
            <div v-else class="c-fff fs--14 SHSR">暂无图片</div>
@@ -350,7 +350,7 @@
                :key="index"
                :src="item"
                class="w--150 h--120 cursor-pointer"
                @click="previewImage(item)"
                @click="previewImage(parseImages(checkMaterialDetail.checkUserImg), index)"
              />
            </div>
            <div v-else class="c-fff fs--14 SHSR">暂无图片</div>
@@ -373,7 +373,7 @@
                :key="index"
                :src="item"
                class="w--150 h--120 cursor-pointer"
                @click="previewImage(item)"
                @click="previewImage(parseImages(checkMaterialDetail.integrityNotification), index)"
              />
            </div>
            <div v-else class="c-fff fs--14 SHSR">暂无图片</div>
@@ -381,6 +381,14 @@
        </div>
      </div>
    </CustomDialog>
    <!-- 图片预览 -->
    <el-image-viewer
    style="z-index: 9999;"
      v-if="showImageViewer"
      :on-close="closeImageViewer"
      :url-list="previewImageList"
      :initial-index="previewImageIndex"
    />
  </div>
</template>
@@ -398,9 +406,10 @@
  getScoreReportPdfUrl,
} from "./service";
import { planTypeMap } from "@/utils/riskSourceMap";
import ElImageViewer from "element-ui/packages/image/src/image-viewer";
export default {
  components: { HeaderBox },
  components: { HeaderBox, ElImageViewer },
  props: {},
  data() {
    return {
@@ -447,6 +456,11 @@
      // 图片基础路径
      VUE_APP_IMAGE_BASE_URL: process.env.VUE_APP_IMAGE_BASE_URL,
      // 图片预览相关
      showImageViewer: false, // 是否显示图片预览器
      previewImageList: [], // 预览图片列表
      previewImageIndex: 0, // 当前预览图片索引
      // 枚举映射
      planTypeMap: planTypeMap, // 计划类型映射
@@ -920,9 +934,17 @@
    },
    // 预览图片
    previewImage(url) {
      // 可以使用 el-image-viewer 或其他图片预览组件
      window.open(url, "_blank");
    previewImage(imageList, index) {
      this.previewImageList = imageList;
      this.previewImageIndex = index;
      this.showImageViewer = true;
    },
    // 关闭图片预览
    closeImageViewer() {
      this.showImageViewer = false;
      this.previewImageList = [];
      this.previewImageIndex = 0;
    },
  },
  beforeDestroy() {
@@ -1083,8 +1105,6 @@
  opacity: 0.7;
}
::v-deep .el-descriptions {
  .el-descriptions__body {
    background-color: transparent;
@@ -1095,4 +1115,21 @@
    }
  }
}
// 图片预览器样式优化
::v-deep .el-image-viewer__wrapper {
  z-index: 9999 !important; // 设置足够高的层级,确保在弹窗之上
}
::v-deep .el-image-viewer__mask {
  z-index: 9999 !important;
}
::v-deep .el-image-viewer__btn {
  z-index: 10000 !important;
}
::v-deep .el-image-viewer__canvas {
  z-index: 9999 !important;
}
</style>
screen/src/view/projectHome/index.vue
@@ -23,13 +23,14 @@
                </div>
                <div class="flex1 flex">
                  <div class="label">工程类型</div>
                  <div class="value">{{ ['房建工程','市政工程','固定资产'][projectInfo.type] }}</div>
                  <div class="value">{{ ['房建工程', '市政工程', '固定资产'][projectInfo.type] }}</div>
                </div>
              </div>
              <div class="info-item">
                <div class="flex2 flex">
                  <div class="label">项目地址</div>
                  <div class="value">{{ projectInfo.address || '-' }}</div>
                  <div class="value address-value" :title="projectInfo.address || '-'">{{ projectInfo.address || '-' }}
                  </div>
                </div>
                <div class="flex1 flex">
                  <div class="label">项目阶段</div>
@@ -66,14 +67,36 @@
                  <div class="value">{{ projectInfo.constructionCompanyInfo.leader || '-' }}</div>
                </div>
              </div>
              <div class="info-item" v-for="item in projectInfo.properties">
              <div class="info-item" v-if="projectInfo.properties && projectInfo.properties.length > 0">
                <div class="flex2 flex">
                  <div class="label dept">设备租赁单位</div>
                  <div class="value">{{ JSON.parse(item)['工程起重机械租赁单位'] || '-' }}</div>
                  <div class="label dept">
                    设备租赁单位
                    <el-tooltip v-if="projectInfo.properties.length > 1" placement="top" effect="dark">
                      <div slot="content" class="tooltip-content">
                        <div v-for="(item, index) in projectInfo.properties" :key="index" class="tooltip-item">
                          <div class="tooltip-label">单位{{ index + 1 }}:</div>
                          <div class="tooltip-value">{{ JSON.parse(item)['工程起重机械租赁单位'] || '-' }}</div>
                        </div>
                      </div>
                      <span class="count-badge">{{ projectInfo.properties.length }}</span>
                    </el-tooltip>
                  </div>
                  <div class="value">{{ JSON.parse(projectInfo.properties[0])['工程起重机械租赁单位'] || '-' }}</div>
                </div>
                <div class="flex1 flex">
                  <div class="label">联系人</div>
                  <div class="value">{{ JSON.parse(item)['联系电话'] || '-' }}</div>
                  <div class="label">
                    联系人
                    <el-tooltip v-if="projectInfo.properties.length > 1" placement="top" effect="dark">
                      <div slot="content" class="tooltip-content">
                        <div v-for="(item, index) in projectInfo.properties" :key="index" class="tooltip-item">
                          <div class="tooltip-label">联系人{{ index + 1 }}:</div>
                          <div class="tooltip-value">{{ JSON.parse(item)['联系电话'] || '-' }}</div>
                        </div>
                      </div>
                      <span class="count-badge">{{ projectInfo.properties.length }}</span>
                    </el-tooltip>
                  </div>
                  <div class="value">{{ JSON.parse(projectInfo.properties[0])['联系电话'] || '-' }}</div>
                </div>
              </div>
              <div class="info-item">
@@ -287,10 +310,12 @@
        <TitleBox>
          <template #title>项目风险趋势 </template>
          <template #right>
            <div class="risk-picker">
            <div @click="handleRiskPickerClick" class="risk-picker">
              <el-date-picker v-model="dateRange" ref="riskDatePicker" type="monthrange" range-separator=""
                start-placeholder="" end-placeholder="">
              </el-date-picker>
              <div class="risk-ab">
                <img src="../../assets/img/home/Shape@2x (6).png" class="pick-img" />
                <div class="pick-text">
                  {{ dateTxt }}
                </div>
@@ -1739,6 +1764,10 @@
      }
      riskChart.setOption(option)
    },
    // 处理风险趋势时间选择器点击
    handleRiskPickerClick() {
      this.$refs.riskDatePicker.focus();
    },
    toRiskTrend() {
      this.$router.push({ path: '/subentry', query: { projectId: this.projectId, projectName: this.projectName } })
    }
@@ -1835,14 +1864,40 @@
      color: #dcdfe6;
      flex-shrink: 0;
      width: 64px;
      position: relative;
      display: flex;
      align-items: center;
      gap: 4px;
    }
    .dept {
      width: 76px;
      width: 100px;
    }
    .time {
      width: 100px;
    }
    .count-badge {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      min-width: 18px;
      height: 18px;
      padding: 0 5px;
      background: linear-gradient(135deg, #32C5FF 0%, #0E5DFB 100%);
      border-radius: 9px;
      font-weight: bold;
      font-size: 11px;
      color: #ffffff;
      cursor: pointer;
      transition: all 0.3s ease;
      box-shadow: 0 2px 6px rgba(50, 197, 255, 0.4);
      &:hover {
        transform: scale(1.1);
        box-shadow: 0 3px 10px rgba(50, 197, 255, 0.6);
      }
    }
    .value {
@@ -1850,6 +1905,24 @@
      font-size: 12px;
      color: #4cefe6;
      max-width: 144px;
      // 项目地址特殊处理:最多显示两行,超出省略
      &.address-value {
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 2;
        overflow: hidden;
        text-overflow: ellipsis;
        word-break: break-all;
        line-height: 18px;
        max-height: 36px; // 2行的高度:18px * 2
        cursor: pointer;
        transition: color 0.3s ease;
        &:hover {
          color: #66FFFF;
        }
      }
    }
  }
@@ -2470,8 +2543,13 @@
    position: relative;
    display: flex;
    align-items: center;
    cursor: pointer;
    ::v-deep .el-input__icon {
      display: none;
    }
    ::v-deep .el-range-separator {
      display: none;
    }
@@ -2497,11 +2575,9 @@
      display: flex;
      align-items: center;
      justify-content: space-between;
    }
    .pick-text {
      font-weight: 400;
      font-size: 12px;
      color: #FFFFFF;
@@ -2514,7 +2590,6 @@
      margin-right: 12px;
    }
  }
}
// 项目进度弹窗 - 历史进度按钮固定定位
@@ -2746,4 +2821,64 @@
    }
  }
}
// Tooltip 提示框样式
::v-deep .el-tooltip__popper {
  max-width: 400px;
  &.is-dark {
    background: rgba(0, 22, 53, 0.95);
  }
}
.tooltip-content {
    min-width: 200px;
    max-height: 300px;
    overflow-y: auto;
    padding: 4px 0;
    // 自定义滚动条
    &::-webkit-scrollbar {
      width: 4px;
    }
    &::-webkit-scrollbar-track {
      background: rgba(255, 255, 255, 0.1);
      border-radius: 2px;
    }
    &::-webkit-scrollbar-thumb {
      background: rgba(50, 197, 255, 0.6);
      border-radius: 2px;
      &:hover {
        background: rgba(50, 197, 255, 0.8);
      }
    }
    .tooltip-item {
      padding: 8px 0;
      display: flex;
      align-items: center;
      min-width: 200px;
      &:last-child {
        border-bottom: none;
      }
      .tooltip-label {
        font-weight: 500;
        font-size: 12px;
        color: #32C5FF;
        margin-bottom: 4px;
      }
      .tooltip-value {
        font-weight: 400;
        font-size: 13px;
        color: #FFFFFF;
        line-height: 1.5;
        word-break: break-all;
      }
    }
  }
</style>
screen/src/view/workList/index.vue
@@ -129,7 +129,17 @@
          </template>
        </el-table-column>
        <el-table-column label="标题" prop="title" />
        <el-table-column label="简介" prop="intro" />
        <el-table-column label="简介" prop="intro">
          <template #default="{ row }">
            <el-tooltip
              :content="row.intro"
              placement="top"
              :disabled="!row.intro"
            >
              <div class="intro-text">{{ row.intro }}</div>
            </el-tooltip>
          </template>
        </el-table-column>
        <el-table-column label="图片" prop="img">
          <template #default="{ row }"
            ><div
@@ -695,6 +705,18 @@
  cursor: not-allowed;
}
.intro-text {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
  text-overflow: ellipsis;
  word-break: break-all;
  line-height: 1.6em;
  max-height: 3em;
  white-space: normal;
}
::v-deep .el-descriptions {
  .el-descriptions__body {
    background-color: transparent;