MrShi
2025-08-19 ff087240b3dee29ce4e14ad0836e76b9fdf312cf
admin/src/components/business/OperaWorkorderDetailSheWindow.vue
@@ -1,55 +1,107 @@
<template>
  <GlobalWindow
      :title="title"
      width="80%"
      width="85%"
      :visible.sync="visible"
      :confirm-working="isWorking"
      @confirm="confirm">
    <div class="modal_wrap">
      <div class="modal_content">
        <div class="header">
          <img v-if="info.status == '3'" class="head_bg"
               src="@/assets/task/bg_shenhe_fail@2x.png" alt="">
          <img v-else-if="info.status == '4'" class="head_bg"
<!--          <img v-if="info.status == '0'" class="head_bg"
               src="@/assets/task/bg_shenhe_fail@2x.png" alt="">-->
          <img v-if="info.status == '4' || info.status == '3'||info.status == '5'||info.status == '6'" class="head_bg"
               src="@/assets/task/bg_shenhe_pass@2x.png" alt="">
          <img v-else class="head_bg" src="@/assets/task/bg_shenhe@2x.png" alt="">
          <div class="left">
            <div class="h1">{{ cateList[type] }}</div>
            <div class="time">提交时间:{{ info.createDate }}</div>
          </div>
          <div class="right"  :class="{ scs: info.status == '4', msg: info.status == '3' }">{{   statusMap[info.status] }}</div>
          <div class="right"  :style="(info.status ==0 ||info.status ==1 || info.status ==2)?'min-width: 90px':''"   :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.happenTime }}</div>
            </div>
            <div class="item">
              <div class="label">施工内容</div>
              <div class="value">{{ info.constructionReason }}</div>
              <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.locationName }}</div>
            </div>
            <div class="item">
              <div class="label">具体位置</div>
              <div class="value">{{ info.remark }}</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
        ">
@@ -96,7 +148,7 @@
            <div v-if="item.approveType == 1" class="childList">
              <div class="m_content company" v-for="item1 in item.approveList" :key="item1.id">
                <img v-if="item1.faceImg != null && item1.faceImg != ''" :src="item1.faceImg" class="avatar" alt="" />
                <img v-if="item1.faceImg == null || item1.faceImg == ''" src="@/assets/avatar/man.png" class="avatar"
                <img v-if="item1.faceImg == null || item1.faceImg == ''" src="../../assets/avatar/man.png" class="avatar"
                     alt="" />
                <span> {{ item1.memberName }}</span>
              </div>
@@ -115,6 +167,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,
@@ -126,17 +179,18 @@
      title: '工单详情',
      info: {},
      statusMap: {
        0: '待审核',
        0: '处理中',
        1: '处理中',
        2: '已同意',
        3: '已拒绝',
        4: '已取消',
        2: '处理中',
        3: '已处理',
        4: '已处理',
        5: '已处理'
      },
      cateList: {
        0: 'SHE事件工单',
        1: '跌绊滑事件工单',
        2: 'DCA事件提交记录',
        3: 'DCA事件工单'
        1: 'DCA事件提交记录',
        2: 'DCA事件工单',
        3: '跌绊滑事件工单'
      }
    }
  },
@@ -145,34 +199,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 () { },
@@ -216,7 +263,7 @@
.modal_wrap {
  display: flex;
  height: 100%;
  height: auto;
  .modal_content {
    flex: 1;
@@ -240,11 +287,12 @@
        .item {
          display: flex;
          width: 40%;
          width: 50%;
          font-size: 14px;
          margin-bottom: 20px;
          &:nth-of-type(2n) {
            width: 60%;
            width: 50%;
          }
          .label {
@@ -253,6 +301,7 @@
          }
          .value {
             width: calc(100% - 100px);
            color: #111111;
          }
        }
@@ -263,6 +312,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;