MrShi
2025-08-19 ff087240b3dee29ce4e14ad0836e76b9fdf312cf
admin/src/components/business/OperaWorkorderDetailDcaWindow.vue
@@ -8,19 +8,18 @@
    <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 == '3' || info.status == '4' || info.status == '5',  msg: info.status == '6' }">{{statusMap[info.status] }}</div>
          <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="info">  <div class="title">工单信息</div>
          <div class="list">
            <div class="item">
              <div class="label">员工姓名</div>
@@ -31,24 +30,28 @@
              <div class="value">{{ info.companyName }} </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.submitDate }}</div>
            </div>
            <div class="item">
              <div class="label">发生时间</div>
              <div class="label">发现时间</div>
              <div class="value">{{ info.happenTime}}</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="label">位置</div>
              <div class="value">{{ info.locationName }}</div>
            </div>
            <div class="item">
              <div class="label">风险描述</div>
              <div class="value">{{ info.riskInfo }}</div>
              <div class="label">通知人</div>
              <div class="value">{{ info.memberNames }}</div>
            </div>
            <div class="item">
              <div class="label">观察项统计</div>
              <div class="value"  style="color: #1562e2" >符合:【{{ info.dcaYesNum || 0 }}】    不符合:【 <span  style="color: red" >{{(info.dcaNoNum||0)}}</span> 】</div>
            </div>
            <div class="item" style="width: 100%">
              <div class="label">图片</div>
@@ -74,87 +77,92 @@
            </div>
          </div>
        </div>
      </div>
      <div class="side" >
        <div class="side_title">处理流程</div>
        <div class="list" v-if=" info.logList != null && info.logList.length != 0
        ">
          <div class="item" v-for="(item, index) in info.logList" :key="item.id">
            <div class="separate" v-if="index < info.logList.length - 1"></div>
            <div class="info">
              <img src="@/assets/icons/ic_dangqian.png" class="iconnew"  />
              <div class="content">
                <div class="line">
                  <div class="name">{{ item.title }}</div>
                </div>
                <div class="line">
                  <div class="company">
                    员工:<span>  {{ item.userName }} / {{item.companyName}}</span>
                    <div style="display: block" >时间:<span>{{item.createDate}}</span></div>
                    <div class="dealinfo">
                      <div style="display: block" v-if="item.param2" >处理人:<span>{{item.param2}}</span></div>
                      <div style="display: block" v-if="item.remark" >说明:<span>{{item.remark}}</span></div>
                      <div style="display: block;margin-top:10px"  v-if="item.multifileList !=null && item.multifileList.length">
                        <div v-for="item in item.multifileList" :key="item.id" style="display: inline;margin-right: 5px">
                          <video
                              v-if="item.fileurlFull && item.fileurlFull.endsWith('.mp4')"
                              ref="videoRef"
                              controls
                              preload="auto"
                              style="width: 50px;height: 50px;object-fit: contain;"
                              :src="item.fileurlFull"
                          />
                          <el-image
                              v-else-if="item.fileurlFull"
                              style="width:50px; height: 50px;"
                              :src="item.fileurlFull"
                              :preview-src-list="[item.fileurlFull]">
                          </el-image>
                        </div>
                        </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        <div class="table_info">
          <div class="title">不符合项工单列表</div>
          <el-table :data="info.dcaChildList" border fit>
            <el-table-column prop="index" label="序号" width="55" fixed="left">
              <template slot-scope="scope">{{ scope.$index+1}}</template>
            </el-table-column>
            <el-table-column label="工单号" prop="code" min-width="120">
              <template slot-scope="{row}">
                <span style="color: #2E68EC;cursor: pointer" @click="$refs.OperaWorkorderDetailDcaInfoWindow.open('DCA不符合项工单详情', row)" >{{ row.code || '-'}}</span>
              </template>
            </el-table-column>
            <el-table-column label="一级主题" prop="typeName" min-width="60"> </el-table-column>
            <el-table-column label="二级主题" prop="categoryName" min-width="60"> </el-table-column>
            <el-table-column label="观察项" prop="problemTitle" min-width="100"> </el-table-column>
            <el-table-column label="状态" prop="status" min-width="80">
              <template slot-scope="{row}">
<!--                <span :class="'statusInfo'+row.status" v-if="row.status ==0">待处理</span>-->
                <span :class="'statusInfo'+row.status" v-if="row.status ==3 ||row.status ==4||row.status ==5">已处理</span>
                <span :class="'statusInfo'+row.status" v-else>处理中</span>
              </template>
            </el-table-column>
            <el-table-column prop="statusInfo" label="状态描述" min-width="100px">
              <template slot-scope="{row}">
                <span :class="'statusInfo'+row.status" >{{ row.statusName }}</span>
              </template>
            </el-table-column>
            <el-table-column label="不符合原因" prop="eventInfo" min-width="180" />
            <el-table-column label="操作" prop="status" min-width="80">
              <template slot-scope="{row}">
                <el-button type="text" @click="$refs.OperaWorkorderDetailDcaInfoWindow.open('DCA不符合项工单详情', row)" icon="el-icon-zoom-out" >查看详情</el-button>
                <!--<el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:workorder:delete']">删除</el-button>-->
              </template>
            </el-table-column>
          </el-table>
        </div>
        <div class="table_info">
          <div class="title">符合项列表</div>
          <el-table :data="dataList2" border fit>
            <el-table-column prop="index" label="序号" width="55" fixed="left">
              <template slot-scope="scope">{{ scope.$index+1}}</template>
            </el-table-column>
            <el-table-column label="一级主题" prop="typeName" min-width="140"> </el-table-column>
            <el-table-column label="二级主题" prop="categoryName" min-width="150"> </el-table-column>
            <el-table-column label="观察项" prop="problemTitle" min-width="400"> </el-table-column>
          </el-table>
        </div>
      </div>
    </div>
    <!--  -->
    <template v-slot:footer>
      <el-button @click="close">返回</el-button>
    </template>
    <OperaWorkorderDetailDcaInfoWindow ref="OperaWorkorderDetailDcaInfoWindow" />
  </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import OperaWorkorderDetailDcaInfoWindow from '@/components/business/OperaWorkorderDetailDcaInfoWindow'
import { getById } from '@/api/business/workorder'
export default {
  name: 'OperaWorkorderDetailDbhWindow',
  extends: BaseOpera,
  components: { GlobalWindow },
  components: { GlobalWindow ,OperaWorkorderDetailDcaInfoWindow},
  data () {
    return {
      id: '',
      type: null,
      title: '工单详情',
      info: {},
      dataList2: [],
      statusMap: {
        0: '待分配WTS',
        1: '待分配任务',
        2: '待处理',
        3: '已解决',
        4: '已解决',
        5: '已解决'
        0: '处理中',
        1: '处理中',
        2: '处理中',
        3: '已处理',
        4: '已处理',
        5: '已处理'
      },
      cateList: {
        0: 'SHE事件工单',
        1: '跌绊滑事件工单',
        2: 'DCA事件提交记录',
        3: 'DCA事件工单'
        1: 'DCA事件提交记录',
        2: 'DCA事件工单',
        3: '跌绊滑事件工单'
      }
    }
  },
@@ -172,6 +180,7 @@
    getDetail () {
      getById(this.info.id).then(res => {
        this.info = res
        this.getDataListByRemak()
        if (this.info.logList && this.info.logList.length > 0) {
          this.info.logList.forEach(item => {
            if (item.approveList && item.approveList.length == 1 && item.type !== 1) {
@@ -184,6 +193,25 @@
          })
        }
      })
    },
    getDataListByRemak () {
      this.dataList2 =[]
      if(this.info.remark){
        var obj = JSON.parse(this.info.remark)
        console.log(obj)
        if(obj && obj.childMapList){
          obj.childMapList.forEach(item =>{
            if(item && item.problemMapList){
              item.problemMapList.forEach(item1 =>{
                if(item1 && item1.status === 1){
                  this.dataList2.push({'typeName':this.info.typeName, 'categoryName':item.childTitle,'problemTitle':item1.title})
                }
              })
            }
          })
        }
      }
    },
    reject () { },
    handleAvatarSuccess () { },
@@ -227,7 +255,7 @@
.modal_wrap {
  display: flex;
  height: 100%;
  height: auto;
  .modal_content {
    flex: 1;
@@ -248,15 +276,14 @@
      .list {
        display: flex;
        flex-wrap: wrap;
        .item {
          display: flex;
          width: 40%;
          width: 50%;
          font-size: 14px;
          margin-bottom: 20px;
          &:nth-of-type(2n) {
            width: 60%;
            width: 50%;
          }
          .label {
@@ -265,6 +292,7 @@
          }
          .value {
            width: calc(100% - 100px);
            color: #111111;
          }
        }