k94314517
2025-04-11 4d4394311a96e15ea204e2cae03dda00750d0fdd
admin/src/components/business/OperaWorkorderDetailSheWindow.vue
@@ -1,7 +1,7 @@
<template>
  <GlobalWindow
      :title="title"
      width="80%"
      width="85%"
      :visible.sync="visible"
      :confirm-working="isWorking"
      @confirm="confirm">
@@ -20,36 +20,84 @@
          <div class="right"  :class="{ scs: info.status == '3' || info.status == '4' || info.status == '5',  msg: info.status == '6' }">{{statusMap[info.status] }}</div>
        </div>
        <div class="info">
          <div class="title">访客预约信息</div>
          <div class="title">工单信息</div>
          <div class="list">
            <div class="item">
              <div class="label">被访人</div>
              <div class="value">{{ info.visitUserName }}</div>
              <div class="label">员工姓名</div>
              <div class="value">{{ info.memberName }} - {{ info.memberPhone || '[无手机号]' }}</div>
            </div>
            <div class="item">
              <div class="label">来访时间</div>
              <div class="value">{{ info.visitTime }}</div>
              <div class="label">所属部门</div>
              <div class="value">{{ info.companyName }} </div>
            </div>
            <div class="item">
              <div class="label">来访事由</div>
              <div class="value">{{ info.visitReason }}</div>
              <div class="label">上报时间</div>
              <div class="value">{{ info.submitDate +' '}}</div>
            </div>
            <div class="item">
              <div class="label">随行车辆</div>
              <div class="value">{{ info.carNos }}</div>
              <div class="label">涉及人员</div>
              <div class="value" v-if="info.memberType == 2">供应商-{{info.memberNames}}</div>
              <div class="value" v-else-if="info.memberType == 1">同事-{{info.memberNames}}</div>
              <div class="value" v-else>本人</div>
            </div>
            <div class="item">
              <div class="label">涉及施工作业</div>
              <div class="value">{{ info.type == "0" ? "否" : "是" }}</div>
              <div class="label">发生地点</div>
              <div class="value">{{ info.locationName }}</div>
            </div>
            <div class="item">
              <div class="label">施工内容</div>
              <div class="value">{{ info.constructionReason }}</div>
              <div class="label">具体位置</div>
              <div class="value">{{ info.remark }}</div>
            </div>
            <div class="item">
              <div class="label">外部就医</div>
              <div class="value">{{ info.outJiuyi == "0" ? "否" : "是" }}</div>
            </div>
            <div class="item" v-if="info.outJiuyi == '0'">
              <div class="label">医务室</div>
              <div class="value">{{ info.isYiwushi == "0" ? "否" : "是" }}</div>
            </div>
            <div class="item" v-if="info.isYiwushi == '0'">
              <div class="label">是否受伤</div>
              <div class="value">{{ info.isHurted == "0" ? "否" : "是" }}</div>
            </div>
            <div class="item">
              <div class="label">伤害类型</div>
              <div class="value">{{ info.typeName }}</div>
            </div>
            <div class="item">
              <div class="label">和工作相关</div>
              <div class="value">{{ info.workRelated == "0" ? "否" : "是" }}</div>
            </div>
            <div class="item">
              <div class="label">事件说明</div>
              <div class="value">{{ info.eventInfo || '-'}}</div>
            </div>
            <div class="item" style="width: 100%">
          <div class="label">图片</div>
          <div class="value" v-if="info.multifileList ==null || !info.multifileList.length">无</div>
          <div class="value" v-if="info.multifileList !=null && info.multifileList.length">
            <div v-for="item in info.multifileList" :key="item.id" style="display: inline;margin-right: 20px">
              <video
                  v-if="item.fileurlFull && item.fileurlFull.endsWith('.mp4')"
                  ref="videoRef"
                  controls
                  preload="auto"
                  style="width: 80px;height: 80px;object-fit: contain;"
                  :src="item.fileurlFull"
              />
              <el-image
                  v-else-if="item.fileurlFull"
                  style="width:80px; height: 80px"
                  :src="item.fileurlFull"
                  :preview-src-list="[item.fileurlFull]">
              </el-image>
            </div>
          </div>
        </div>
          </div>
        </div>
      </div>
      <div class="side">
      <div class="side" v-if="false">
        <div class="side_title">操作历史</div>
        <div class="list" v-if=" info.logList != null && info.logList.length != 0
        ">
@@ -115,6 +163,7 @@
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import {getById } from '@/api/business/workorder'
export default {
  name: 'OperaWorkorderWindow',
  extends: BaseOpera,
@@ -135,9 +184,9 @@
      },
      cateList: {
        0: 'SHE事件工单',
        1: '跌绊滑事件工单',
        2: 'DCA事件提交记录',
        3: 'DCA事件工单'
        1: 'DCA事件提交记录',
        2: 'DCA事件工单',
        3: '跌绊滑事件工单'
      }
    }
  },
@@ -146,34 +195,27 @@
      this.title = title
      this.visible = true
      this.info = target
      this.getDetail()
      this.type = this.info.type
    },
    close () {
      this.visible = false
    },
    getDetail () {
      const { id, type } = this
      switch (type) {
      case 0:
        getVisitedDetail({ id }).then(res => {
          this.info = res
          if (this.info.approveDateVO && this.info.approveDateVO.approveList.length > 0) {
            this.info.approveDateVO.approveList.forEach(item => {
              if (item.approveList && item.approveList.length == 1 && item.type !== 1) {
                item.title = item.approveList[0].title
                item.faceImg = item.approveList[0].faceImg
                item.memberName = item.approveList[0].memberName
                item.statusInfo = item.approveList[0].statusInfo
                item.approveList = []
              }
            })
          }
        })
        break
      default:
        break
      }
      getById(this.info.id).then(res => {
        this.info = res
        if (this.info.logList && this.info.logList.length > 0) {
          this.info.logList.forEach(item => {
            if (item.approveList && item.approveList.length == 1 && item.type !== 1) {
              item.title = item.approveList[0].title
              item.faceImg = item.approveList[0].faceImg
              item.memberName = item.approveList[0].memberName
              item.statusInfo = item.approveList[0].statusInfo
              item.approveList = []
            }
          })
        }
      })
    },
    reject () { },
    handleAvatarSuccess () { },
@@ -242,6 +284,7 @@
        .item {
          display: flex;
          width: 40%;
          font-size: 14px;
          margin-bottom: 20px;
          &:nth-of-type(2n) {
@@ -264,6 +307,7 @@
      display: flex;
      justify-content: space-between;
      align-items: center;
      vertical-align: center;
      padding: 20px 30px;
      margin: 0 -30px;
      border-radius: 8px 8px 0 0;