ll
liukangdong
2024-12-03 35ed9cd31d7b675082425361a9f08bec40aa1292
admin/src/views/workorder/components/detail.vue
@@ -1,5 +1,5 @@
<template>
  <GlobalWindow width="820px" title="工单详情" :visible.sync="visible" :confirm-working="isWorking" @close="close"
  <GlobalWindow width="920px" title="工单详情" :visible.sync="visible" :confirm-working="isWorking" @close="close"
    @confirm="confirm">
    <div class="main">
      <div class="title">
@@ -10,54 +10,72 @@
          <div class="status gray" v-if="info.dealStatus == 2">已处理</div>
        </div>
      </div>
      <div class="list">
        <div class="item">
          <div class="la">位置类型</div>
          <div class="val">{{ info.areaType == 0 ? '室内维修' : '公共维修' }}</div>
      <div class="main_content">
        <div class="list">
          <div class="item">
            <div class="la">位置类型</div>
            <div class="val">{{ info.areaType == 0 ? '室内维修' : '公共维修' }}</div>
          </div>
          <div class="item">
            <div class="la">对应位置</div>
            <div class="val">{{ info.projectName }}/{{ info.buildingName }} / {{ info.roomNum || info.floorName }}</div>
          </div>
          <div class="item">
            <div class="la">工单分类</div>
            <div class="val">{{ info.categoryName }}</div>
          </div>
          <div class="item">
            <div class="la">上报人</div>
            <div class="val">{{ info.creatorName }}{{ info.creatorCompany ? "-" + info.creatorCompany : '' }}</div>
          </div>
          <div class="item">
            <div class="la">上报人电话</div>
            <div class="val">{{ info.creatorPhone || info.creatorMobile }}</div>
          </div>
          <div class="item">
            <div class="la">上报时间</div>
            <div class="val">{{ info.createDate }}</div>
          </div>
          <div class="item max" v-if="info.areaType == 0">
            <div class="la">上门时间</div>
            <div class="val">{{ info.getDate }}</div>
          </div>
          <div class="item max">
            <div class="la">问题描述</div>
            <div class="val">{{ info.content }}</div>
          </div>
          <div class="item max">
            <div class="la">问题图片</div>
            <div class="value" v-if="info.fileList == null || !info.fileList.length">无</div>
            <div class="value" v-if="info.fileList != null && info.fileList.length">
              <div v-for="item in info.fileList" :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 class="item">
          <div class="la">对应位置</div>
          <div class="val">{{ info.buildingName }} / {{ info.roomNum || info.floorName }}</div>
        </div>
        <div class="item">
          <div class="la">工单类别</div>
          <div class="val">{{ info.categoryName }}</div>
        </div>
        <div class="item">
          <div class="la">上报人</div>
          <div class="val">{{ info.creatorName }}</div>
        </div>
        <div class="item">
          <div class="la">上报人电话</div>
          <div class="val">{{ info.creatorPhone }}</div>
        </div>
        <div class="item">
          <div class="la">上报时间</div>
          <div class="val">{{ info.createDate }}</div>
        </div>
        <div class="item max">
          <div class="la">上门时间</div>
          <div class="val">{{ info.getDate }}</div>
        </div>
        <div class="item max">
          <div class="la">问题描述</div>
          <div class="val">{{ info.content }}</div>
        </div>
        <div class="item max">
          <div class="la">问题图片</div>
          <div class="value" v-if="info.fileList == null || !info.fileList.length">无</div>
          <div class="value" v-if="info.fileList != null && info.fileList.length">
            <div v-for="item in info.fileList" :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 class="side">
          <div class="title">工单流转记录</div>
          <div class="flow_list">
            <div class="item" v-for="item,i in info.logList">
              <div class="icon">
                <div class="dian"></div>
                <div v-if="i < info.logList.length - 1" class="line"></div>
              </div>
              <div class="content">
                <div class="name">{{ item.title }}</div>
                <div class="time">操作时间:{{ item.createDate }}</div>
                <div class="creator">操作人:{{ item.param1 }}</div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="title">工单处理</div>
      <div class="title">{{ info.dealStatus == 0 || info.dealStatus == 1 ? '工单处理' : '处理结果' }}</div>
      <el-form :model="param" ref="form" :rules="rules">
        <template v-if="info.dealStatus == 0 || info.dealStatus == null">
          <el-form-item label="处理方式" prop="dealType">
@@ -65,7 +83,7 @@
              <el-radio v-model="param.dealType" :label="0">指派</el-radio>
              <el-radio v-model="param.dealType" :label="1">直接回复</el-radio>
            </div>
          </el-form-item>
          </el-form-item>
          <el-form-item v-if="param.dealType == 0" label="指派给" prop="dealUserId">
            <el-select v-model="param.dealUserId" clearable filterable class="w400">
              <el-option v-for="item in staffList" :label="item.realname" :value="item.id"></el-option>
@@ -80,13 +98,13 @@
            <el-date-picker type="datetime" class="w400" v-model="param.getDate" format="yyyy-MM-dd HH:mm"
              value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择"></el-date-picker>
          </el-form-item>
          <el-form-item label="回复内容" prop="dealInfo">
          <el-form-item label="处理说明" prop="dealInfo">
            <el-input type="textarea" class="w400" :rows="4" v-model="param.dealInfo" placeholder="请填写说明"></el-input>
          </el-form-item>
          <el-form-item label="现场图片">
            <div class="file_list">
              <el-upload class="avatar-uploader" :data="uploadData" multiple :limit="6" :auto-upload="true" :action="uploadImgUrl"
                :show-file-list="false" :on-success="uploadAvatarSuccess" :on-error="uploadError"
              <el-upload class="avatar-uploader" :data="uploadData" :auto-upload="true"
                :action="uploadImgUrl" :show-file-list="false" :on-success="uploadAvatarSuccess" :on-error="uploadError"
                :before-upload="beforeUpload">
                <div class="upload_wrap">
                  <i class="el-icon-plus avatar-uploader-icon"></i>
@@ -105,14 +123,18 @@
        <template v-if="info.dealStatus == 2">
          <div class="list">
            <div class="item item2">
              <div class="la">处理时间:</div>
              <div class="val">{{ info.getDate }}</div>
              <div class="la">{{ info.dispatchUserId ? '处理人' : '回复人' }}:</div>
              <div class="val">{{ info.dealUserName }}{{ info.dealUserCompany ? '-' + info.dealUserCompany : '' }}</div>
            </div>
            <div class="item item2">
              <div class="la">处理备注:</div>
              <div class="la">{{ info.dispatchUserId ? '处理时间' : '回复时间' }}:</div>
              <div class="val">{{ info.dealDate || info.getDate }}</div>
            </div>
            <div class="item item2">
              <div class="la">{{ info.dispatchUserId ? '处理说明' : '回复内容' }}:</div>
              <div class="val">{{ info.dealInfo }}</div>
            </div>
            <div class="item item2">
            <div v-if="info.dealFileList != null && info.dealFileList.length" class="item item2">
              <div class="la">现场照片:</div>
              <div class="value" v-if="info.dealFileList == null || !info.dealFileList.length">无</div>
              <div class="value" v-if="info.dealFileList != null && info.dealFileList.length">
@@ -160,7 +182,7 @@
      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch',
      dealFileList: [],
      uploadData: {
        folder: 'HIDDEN_DANGER_FILE'
        folder: 'YW_WORKORDER_FILE'
      },
    }
  },
@@ -178,9 +200,9 @@
        if (valid) {
          const { param, id, dealFileList, info } = this
          let fn = null
          if(info.dealStatus == 0 || info.dealStatus == null){
          if (info.dealStatus == 0 || info.dealStatus == null) {
            fn = param.dealType == 0 ? dispatchOrder : dealOrder
          }else{
          } else {
            fn = dealOrder
          }
          fn({
@@ -326,6 +348,46 @@
      width: 100%;
    }
  }
  .main_content{
    display: flex;
    .side{
      width: 370px;
      .title{
        font-size: 14px;
      }
      .flow_list{
        .item{
          display: flex;
          .icon{
            width: 28px;
            display: flex;
            flex-direction: column;
            align-items: center;
            .dian{
              width: 12px;
              height: 12px;
              border-radius: 50%;
              background-color: #e89e42;
            }
            .line{
              width: 1px;
              height: 100%;
              background-color: #e89e42;
            }
          }
          .content{
            font-size: 12px;
            color: #999999;
            padding-bottom: 12px;
            .name{
              font-size: 13px;
              color: #333333;
            }
          }
        }
      }
    }
  }
}
.file_list {