ll
liukangdong
2024-09-13 7a29f062e2e9ea3fe7ecbf937ed7a51461f5299a
h5/pages/staff/task/vDangetAppr.vue
@@ -1,1408 +1,1302 @@
<template>
  <view class="main_app">
    <view class="status_wrap">
      <view class="name">{{ info.categoryName }}</view>
      <view v-if="info.status == '0'" class="status">{{
        statusMap[info.status]
      }}</view>
      <image
        v-if="info.status == '1'"
        src="@/static/ic_yizhenggai.png"
        mode="widthFix"
        class="status_img"
      ></image>
      <image
        v-if="info.status == '2'"
        src="@/static/ic_yituihui-1.png"
        mode="widthFix"
        class="status_img"
      ></image>
      <image
        v-if="info.status == '3' || info.status == '6'"
        src="@/static/ic_refused@2x.png"
        mode="widthFix"
        class="status_img"
      ></image>
      <view>{{ info.content }}</view>
      <view class="file_list">
        <view
          class="img_wrap"
          v-for="item in info.submitFileList"
          :key="item.id"
        >
          <image
            v-if="item.type == 0"
            :src="item.fileurlFull"
            @click="priviewImage(item.fileurlFull)"
            mode="widthFix"
            class="img"
          />
          <video
            v-if="item.type == 1"
            :src="item.fileurlFull"
            class="video"
            controls
          />
        </view>
      </view>
      <view class="text_wrap">
        <view class="line">
          <text class="label">隐患区域:</text>
          <text>{{ info.areaName }}</text>
        </view>
        <view class="line">
          <text class="label">提报人:</text>
          <text>{{ info.memberName }} {{ info.memberPhone }}</text>
        </view>
      </view>
    </view>
    <!--  -->
    <view class="emyty"></view>
    <view v-if="info.status == 1" class="module_list">
      <view class="item">
        <view class="label">处理结果</view>
        <view class="value primaryColor">{{ statusMap[info.status] }}</view>
      </view>
      <view class="item">
        <view class="label">整改前</view>
        <view class="value">
          <view
            class="adduser_list_item_ipt1_upload"
            v-for="(item, i) in info.dealBeforeFileList"
            :key="i"
            ><image
              v-if="item.type == 0"
              :src="item.fileurlFull"
              mode="widthFix"
            ></image
            ><video v-if="item.type == 1" :src="item.fileurlFull"></video
          ></view>
        </view>
      </view>
      <view class="item">
        <view class="label">整改后</view>
        <view class="value">
          <view
            class="adduser_list_item_ipt1_upload"
            v-for="(item, i) in info.dealAfterFileList"
            :key="i"
            ><image
              v-if="item.type == 0"
              :src="item.fileurlFull"
              mode="widthFix"
            ></image
            ><video v-if="item.type == 1" :src="item.fileurlFull"></video
          ></view>
        </view>
      </view>
      <view class="item">
        <view class="label">整改说明</view>
        <view class="value">{{ info.checkInfo }}</view>
      </view>
    </view>
    <!-- 流程 -->
    <view class="flow_wrap">
      <view class="flow_title">处理流程</view>
      <view
        class="list"
        v-if="
          info.approveDateVO != null && info.approveDateVO.approveList != null
        "
      >
        <view
          class="item"
          v-for="(item, index) in info.approveDateVO.approveList"
          :key="item.id"
        >
          <view class="separate"></view>
          <view class="avatar">
            <image
              class="img"
              :src="
                item.faceImg
                  ? item.faceImg
                  : require('@/static/meeting/common/default_user@2x.png')
              "
            />
            <image
              v-if="item.status == 1"
              class="status"
              src="@/static/staff/liucheng_success@2x.png"
              mode="widthFix"
            />
            <image
              v-if="item.status == 2"
              class="status"
              src="@/static/staff/liucheng_fail@2x.png"
              mode="widthFix"
            />
          </view>
          <view class="content">
            <view class="head">
              <view class="event">{{ item.title }}</view>
              <view class="time" v-if="item.createDate">{{
                item.createDate.slice(0, 16)
              }}</view>
            </view>
            <view class="name_wrap">
              <text
                >{{ item.memberName
                }}<text class="status" v-if="item.statusInfo"
                  >({{ item.statusInfo }})</text
                ></text
              >
            </view>
            <view v-if="item.checkInfo" class="remark">{{
              item.checkInfo
            }}</view>
            <!-- 抄送人 -->
            <view v-if="item.approveType == 1" class="children">
              <view
                class="child"
                v-for="child in item.approveList"
                :key="child.id"
              >
                <image
                  class="child_img"
                  :src="
                    child.faceImg
                      ? child.faceImg
                      : require('@/static/meeting/common/default_user@2x.png')
                  "
                />
                <view>{{ child.memberName }}</view>
              </view>
            </view>
          </view>
        </view>
      </view>
    </view>
    <view class="emyty"></view>
    <view
      v-if="
        info.approveDateVO != null &&
        info.approveDateVO.canBeApproved != null &&
        info.approveDateVO.canBeApproved == 1 &&
        info.status == 0
      "
      class="main_footer"
    >
      <view class="btn" @click="handleBack">退回</view>
      <view class="btn transfer" @click="handleTransfer">转交</view>
      <view class="btn handle" @click="handleOpen">处理</view>
    </view>
    <!-- 退回 -->
    <u-popup
      :show="isShowBack"
      :round="10"
      :safeAreaInsetBottom="true"
      mode="bottom"
      @close="isShowBack = false"
    >
      <view class="appr_modal">
        <view class="title">隐患退回</view>
        <view class="df_sb">
          <view>退回时间</view>
          <view
            class="df_ac"
            @click="isShowBackDate = true"
            v-if="backParam.dealTime"
            >{{ backParam.dealTime }}<u-icon name="arrow-right"></u-icon
          ></view>
          <view @click="isShowBackDate = true" v-else class="placeholder9 df_ac"
            >请选择<u-icon name="arrow-right"></u-icon
          ></view>
        </view>
        <view class="label">图片/视频</view>
        <view class="upload_wrap">
          <view class="adduser_list_item_ipt1_upload" @click="showUpload = true"
            ><u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
            <view class="mt6">图片/视频</view>
          </view>
          <view
            class="adduser_list_item_ipt1_upload"
            v-for="(item, i) in submitFileList"
            :key="i"
          >
            <u-icon
              class="close"
              size="20"
              name="close-circle-fill"
              color="red"
              @click="fileDel('submitFileList', i)"
            ></u-icon>
            <image
              v-if="item.type == 0"
              :src="item.fileurlFull"
              mode="widthFix"
            ></image
            ><video v-if="item.type == 1" :src="item.fileurlFull"></video
          ></view>
        </view>
        <view class="label">退回说明</view>
        <textarea
          v-model="backParam.checkInfo"
          placeholder="请详细描述现场情况,不少于10个字"
          placeholder-class="placeholder9"
        />
        <view class="back_footer">
          <view class="btn" @click="isShowBack = false">取消</view>
          <view class="btn agree" @click="onSubBack">提交</view>
        </view>
      </view>
    </u-popup>
    <!-- 处理 -->
    <u-popup
      :show="isShowHandle"
      :round="10"
      :safeAreaInsetBottom="true"
      mode="bottom"
      @close="isShowHandle = false"
    >
      <view class="appr_modal">
        <view class="title">隐患整改</view>
        <view class="df_sb">
          <view>整改时间</view>
          <view
            class="df_ac"
            @click="isShowHandleDate = true"
            v-if="handleParam.dealTime"
            >{{ handleParam.dealTime }}
            <u-icon name="arrow-right"></u-icon>
          </view>
          <view
            @click="isShowHandleDate = true"
            v-else
            class="placeholder9 df_ac"
            >请选择<u-icon name="arrow-right"></u-icon
          ></view>
        </view>
        <view class="label"><text>*</text>整改前</view>
        <view class="upload_wrap">
          <view
            class="adduser_list_item_ipt1_upload"
            @click="showUploadBe = true"
            ><u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
            <view class="mt6">图片/视频</view>
          </view>
          <view
            class="adduser_list_item_ipt1_upload"
            v-for="(item, i) in dealBeforeFileList"
            :key="i"
          >
            <u-icon
              class="close"
              size="20"
              name="close-circle-fill"
              color="red"
              @click="fileDel('dealBeforeFileList', i)"
            ></u-icon>
            <image
              v-if="item.type == 0"
              :src="item.fileurlFull"
              mode="widthFix"
            ></image
            ><video v-if="item.type == 1" :src="item.fileurlFull"></video
          ></view>
        </view>
        <view class="label"><text>*</text>整改后</view>
        <view class="upload_wrap">
          <view
            class="adduser_list_item_ipt1_upload"
            @click="showUploadAf = true"
            ><u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
            <view class="mt6">图片/视频</view></view
          >
          <view
            class="adduser_list_item_ipt1_upload"
            v-for="(item, i) in dealAfterFileList"
            :key="i"
          >
            <u-icon
              class="close"
              size="20"
              name="close-circle-fill"
              color="red"
              @click="fileDel('dealAfterFileList', i)"
            ></u-icon>
            <image
              v-if="item.type == 0"
              :src="item.fileurlFull"
              mode="widthFix"
            ></image
            ><video v-if="item.type == 1" :src="item.fileurlFull"></video
          ></view>
        </view>
        <view class="label">整改说明</view>
        <textarea
          v-model="handleParam.checkInfo"
          placeholder="请详细描述现场情况,不少于10个字"
          placeholder-class="placeholder9"
        />
        <view class="back_footer">
          <view class="btn" @click="isShowHandle = false">取消</view>
          <view class="btn agree" @click="onSubmit">提交</view>
        </view>
      </view>
    </u-popup>
    <!-- 上传 -->
    <u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay>
      <view class="sel_upload_wrap">
        <view class="btn" @click="uploadImage">选择图片</view>
        <view class="btn" @click="uploadVideo">选择视频</view>
      </view>
    </u-popup>
    <u-popup
      :show="showUploadBe"
      @close="showUploadBe = false"
      closeOnClickOverlay
    >
      <view class="sel_upload_wrap">
        <view class="btn" @click="uploadBeImage">选择图片</view>
        <view class="btn" @click="uploadBeVideo">选择视频</view>
      </view>
    </u-popup>
    <u-popup
      :show="showUploadAf"
      @close="showUploadAf = false"
      closeOnClickOverlay
    >
      <view class="sel_upload_wrap">
        <view class="btn" @click="uploadAfImage">选择图片</view>
        <view class="btn" @click="uploadAfVideo">选择视频</view>
      </view>
    </u-popup>
    <!-- 转交 -->
    <u-popup
      :show="isShowTransfer"
      :round="10"
      safeAreaInsetBottom
      mode="bottom"
      @close="isShowTransfer = false"
    >
      <view class="appr_modal">
        <view class="title">选择员工</view>
        <view class="search_inp df_ac">
          <image
            class="mr12 search"
            src="@/static/ic_search@2x.png"
            mode="widthFix"
          ></image>
          <input
            v-model="transferModel.name"
            @blur="getMemList()"
            type="text"
            placeholder="搜索部门/人员"
            placeholder-style="color: #999999;"
          />
        </view>
        <view class="member_list">
          <view class="mt24 placeholder6">共{{ memberList.length }}条数据</view>
          <view v-for="item in memberList" :key="item.id" class="line">
            <image
              :src="
                item.faceImgFull
                  ? item.faceImgFull
                  : require('@/static/meeting/common/default_user@2x.png')
              "
              class="avatar"
              mode=""
            ></image>
            <view class="content">
              <view class="info">
                <text class="name">{{ item.name }}</text>
                <!-- <text class="tag">tag</text> -->
              </view>
              <view class="depart">{{ item.companyName }}</view>
            </view>
            <image
              @click="changeMem(item)"
              v-if="transferParam.id == item.id"
              src="@/static/meeting/icon/ic_choose_sel@2x.png"
              mode="widthFix"
              class="checked"
            ></image>
            <image
              @click="changeMem(item)"
              v-else
              src="@/static/meeting/icon/ic_choose@2x.png"
              mode="widthFix"
              class="checked"
            ></image>
            <text></text>
          </view>
          <view class="empty"></view>
        </view>
        <view class="Transfer_footer">
          <view class="btn" @click="isShowTransfer = fales">取消</view>
          <view class="btn active" @click="enterTransfer">确认转交</view>
        </view>
      </view>
    </u-popup>
    <!-- 退回时间 -->
    <u-datetime-picker
      :show="isShowBackDate"
      @confirm="confirmBackDate"
      @cancel="isShowBackDate = false"
      mode="datetime"
    ></u-datetime-picker>
    <u-datetime-picker
      :minDate="new Date().getTime()"
      :show="isShowHandleDate"
      @confirm="confirmHandleDate"
      @cancel="isShowHandleDate = false"
      mode="datetime"
    ></u-datetime-picker>
  </view>
</template>
<script>
import {
  hiddenDangerDetail,
  uploadUrl,
  findHiddenAreaMemberList,
  dealHiddenDanger,
  transferHiddenDanger
} from '@/api'
import dayjs from 'dayjs'
export default {
  data() {
    return {
      isShowBack: false,
      param: {},
      info: {},
      id: '',
      type: '',
      cateList: [
        { name: '访客申请', id: 0 },
        { name: '访客报备', id: 1 },
        { name: '用车申请', id: 2 },
        { name: '隐患随手拍', id: 3 },
        { name: '物流车申请', id: 4 },
      ],
      statusMap: {
        0: '待处理',
        1: '已整改',
        2: '已退回',
        3: '已拒绝',
        4: '已取消',
        5: '他人或签',
        6: '他人拒绝',
      },
      showUpload: false,
      isShowBackDate: false,
      submitFileList: [],
      backParam: {},
      isShowHandle: false,
      handleParam: {},
      isShowHandleDate: false,
      showUploadBe: false,
      showUploadAf: false,
      dealBeforeFileList: [],
      dealAfterFileList: [],
      isShowTransfer: false,
      transferParam: {},
      transferModel: {},
      pagination: {
        page: 1,
        capacity: 50
      },
      memberList: []
    }
  },
  onLoad(op) {
    this.id = op.id
    this.type = op.objType
    this.getDetail()
  },
  methods: {
    priviewImage(url) {
      uni.previewImage({
        urls: [url]
      })
    },
    handleOpen() {
      this.isShowHandle = true
      console.log('info', this.info)
      this.dealBeforeFileList = [...this.info.submitFileList]
      this.$set(this.handleParam, 'dealTime', dayjs().format('YYYY-MM-DD HH:mm:ss'))
    },
    handleBack() {
      this.isShowBack = true
      this.submitFileList = [...this.info.submitFileList]
      this.$set(this.backParam, 'dealTime', dayjs().format('YYYY-MM-DD HH:mm:ss'))
    },
    getDetail() {
      const { id } = this
      hiddenDangerDetail(id).then(res => {
        this.info = res.data
      })
    },
    onSubmit() {
      const { dealBeforeFileList, dealAfterFileList, handleParam } = this
      if (dealBeforeFileList.length === 0) return uni.showToast({
        title: '请上传整改前图片或视频',
        icon: 'none'
      })
      if (dealAfterFileList.length === 0) return uni.showToast({
        title: '请上传整改后图片或视频',
        icon: 'none'
      })
      dealHiddenDanger({
        ...handleParam,
        dealBeforeFileList: dealBeforeFileList,
        dealAfterFileList: dealAfterFileList,
        status: 1,
        id: this.id
      }).then(res => {
        if (res.code === 200) {
          this.isShowHandle = false
          setTimeout(() => {
            uni.showToast({
              title: '操作成功',
              icon: 'success'
            })
          })
          uni.navigateBack()
        }
      })
    },
    enterTransfer() {
      const { transferParam, id } = this
      if (!transferParam.id) return uni.showToast({
        title: '请选择人员',
        icon: 'none'
      })
      transferHiddenDanger({
        checkUserId: transferParam.id,
        id
      }).then(res => {
        if (res.code === 200) {
          this.isShowTransfer = false
          setTimeout(() => {
            uni.showToast({
              title: '操作成功',
              icon: 'success'
            })
          })
          uni.navigateBack()
        }
      })
    },
    changeMem(e) {
      this.transferParam = e
    },
    handleTransfer() {
      this.isShowTransfer = true
      this.getMemList()
    },
    getMemList() {
      findHiddenAreaMemberList({
        model: {
          ...this.transferModel,
          id: this.info.areaId
        },
        ...this.pagination,
      }).then(res => {
        this.memberList = res.data || []
      })
    },
    confirmBackDate(e) {
      this.$set(this.backParam, 'dealTime', dayjs(e.value).format('YYYY-MM-DD HH:mm:ss'))
      this.isShowBackDate = false
    },
    confirmHandleDate(e) {
      this.$set(this.handleParam, 'dealTime', dayjs(e.value).format('YYYY-MM-DD HH:mm:ss'))
      this.isShowHandleDate = false
    },
    onSubBack() {
      const { submitFileList, backParam } = this
      dealHiddenDanger({
        ...backParam,
        dealBeforeFileList: submitFileList,
        status: 2,
        id: this.id
      }).then(res => {
        if (res.code === 200) {
          this.isShowBack = false
          setTimeout(() => {
            uni.showToast({
              title: '操作成功',
              icon: 'success'
            })
          })
          uni.navigateBack()
        }
      })
    },
    fileDel(str, i) {
      this[str].splice(i, 1)
    },
    uploadBeImage() {
      this.showUploadBe = false
      let token = uni.getStorageSync('token') || ''
      uni.chooseImage({
        count: 4,
        success: (chooseImageRes) => {
          uni.showLoading({ title: '上传中', mask: true })
          const tempFilePaths = chooseImageRes.tempFilePaths
          let imgs = tempFilePaths.map((value, index) => {
            return {
              name: 'file',
              uri: value
            }
          })
          uni.uploadFile({
            url: `${uploadUrl}`,
            files: imgs,
            name: 'file',
            formData: {
              folder: 'HIDDEN_DANGER_FILE'
            },
            header: {
              Dm_user_token: token
            },
            success: (uploadFileRes) => {
              let res = JSON.parse(uploadFileRes.data)
              let obj = {
                type: '0'
              }
              if (res.data && res.data.length > 0) {
                res.data.forEach(i => {
                  i.type = 0
                  i.fileurl = i.imgaddr
                  i.fileurlFull = i.url
                  this.dealBeforeFileList.push(i)
                })
              }
            },
            fail(err) {
              console.log('err', err)
            },
            complete() {
              uni.hideLoading()
              // if (i === chooseImageRes.tempFilePaths.length - 1) {
              //   uni.hideLoading()
              // }
            }
          })
        }
      })
    },
    uploadBeVideo() {
      this.showUploadBe = false
      let token = uni.getStorageSync('token') || ''
      uni.chooseVideo({
        success: (chooseImageRes) => {
          uni.showLoading({ title: '上传中', mask: true })
          uni.uploadFile({
            url: `${uploadUrl}`,
            filePath: chooseImageRes.tempFilePath,
            header: {
              Dm_user_token: token
            },
            name: 'file',
            formData: {
              folder: 'HIDDEN_DANGER_FILE'
            },
            success: (uploadFileRes) => {
              let res = JSON.parse(uploadFileRes.data)
              if (res.data && res.data.length > 0) {
                res.data.forEach(i => {
                  i.type = 1
                  i.fileurl = i.imgaddr
                  i.fileurlFull = i.url
                  this.dealBeforeFileList.push(i)
                })
              }
            },
            complete() {
              uni.hideLoading()
            }
          })
        }
      })
    },
    uploadAfImage() {
      this.showUploadAf = false
      let token = uni.getStorageSync('token') || ''
      uni.chooseImage({
        count: 4,
        success: (chooseImageRes) => {
          uni.showLoading({ title: '上传中', mask: true })
          const tempFilePaths = chooseImageRes.tempFilePaths
          let imgs = tempFilePaths.map((value, index) => {
            return {
              name: 'file',
              uri: value
            }
          })
          uni.uploadFile({
            url: `${uploadUrl}`,
            files: imgs,
            name: 'file',
            formData: {
              folder: 'HIDDEN_DANGER_FILE'
            },
            header: {
              Dm_user_token: token
            },
            success: (uploadFileRes) => {
              let res = JSON.parse(uploadFileRes.data)
              if (res.data && res.data.length > 0) {
                res.data.forEach(i => {
                  i.type = 0
                  i.fileurl = i.imgaddr
                  i.fileurlFull = i.url
                  this.dealAfterFileList.push(i)
                })
              }
            },
            fail(err) {
              console.log('err', err)
            },
            complete() {
              uni.hideLoading()
              // if (i === chooseImageRes.tempFilePaths.length - 1) {
              //   uni.hideLoading()
              // }
            }
          })
        }
      })
    },
    uploadAfVideo() {
      this.showUploadAf = false
      let token = uni.getStorageSync('token') || ''
      uni.chooseVideo({
        success: (chooseImageRes) => {
          uni.showLoading({ title: '上传中', mask: true })
          uni.uploadFile({
            url: `${uploadUrl}`,
            filePath: chooseImageRes.tempFilePath,
            header: {
              Dm_user_token: token
            },
            name: 'file',
            formData: {
              folder: 'HIDDEN_DANGER_FILE'
            },
            success: (uploadFileRes) => {
              let res = JSON.parse(uploadFileRes.data)
              if (res.data && res.data.length > 0) {
                res.data.forEach(i => {
                  i.type = 1
                  i.fileurl = i.imgaddr
                  i.fileurlFull = i.url
                  this.dealAfterFileList.push(i)
                })
              }
            },
            complete() {
              uni.hideLoading()
            }
          })
        }
      })
    },
    uploadImage() {
      this.showUpload = false
      let token = uni.getStorageSync('token') || ''
      uni.chooseImage({
        count: 4,
        success: (chooseImageRes) => {
          uni.showLoading({ title: '上传中', mask: true })
          const tempFilePaths = chooseImageRes.tempFilePaths
          let imgs = tempFilePaths.map((value, index) => {
            return {
              name: 'file',
              uri: value
            }
          })
          uni.uploadFile({
            url: `${uploadUrl}`,
            files: imgs,
            name: 'file',
            formData: {
              folder: 'HIDDEN_DANGER_FILE'
            },
            header: {
              Dm_user_token: token
            },
            success: (uploadFileRes) => {
              let res = JSON.parse(uploadFileRes.data)
              if (res.data && res.data.length > 0) {
                res.data.forEach(i => {
                  i.type = 0
                  i.fileurl = i.imgaddr
                  i.fileurlFull = i.url
                  this.submitFileList.push(i)
                })
              }
            },
            fail(err) {
              console.log('err', err)
            },
            complete() {
              uni.hideLoading()
              // if (i === chooseImageRes.tempFilePaths.length - 1) {
              //   uni.hideLoading()
              // }
            }
          })
        }
      })
    },
    uploadVideo() {
      this.showUpload = false
      let token = uni.getStorageSync('token') || ''
      uni.chooseVideo({
        success: (chooseImageRes) => {
          uni.showLoading({ title: '上传中', mask: true })
          uni.uploadFile({
            url: `${uploadUrl}`,
            filePath: chooseImageRes.tempFilePath,
            header: {
              Dm_user_token: token
            },
            name: 'file',
            formData: {
              folder: 'HIDDEN_DANGER_FILE'
            },
            success: (uploadFileRes) => {
              let res = JSON.parse(uploadFileRes.data)
              if (res.data && res.data.length > 0) {
                res.data.forEach(i => {
                  i.type = 1
                  i.fileurl = i.imgaddr
                  i.fileurlFull = i.url
                  this.submitFileList.push(i)
                })
              }
            },
            complete() {
              uni.hideLoading()
            }
          })
        }
      })
    },
  },
}
</script>
<style>
page {
  background-color: #f7f7f7;
}
</style>
<style lang="scss">
.main_app {
  background-color: #fff;
  padding-bottom: 0;
  .flow_wrap {
    padding: 30rpx 0;
    .flow_title {
      font-weight: 600;
      font-size: 32rpx;
      color: #222222;
      margin-bottom: 24rpx;
    }
    .list {
      .item {
        display: flex;
        margin-bottom: 48rpx;
        position: relative;
        .separate {
          position: absolute;
          width: 4rpx;
          height: 100%;
          background-color: #eeeeee;
          left: 40rpx;
          transform: translate(-50%, 0);
          top: 80rpx;
        }
        .avatar {
          width: 80rpx;
          height: 80rpx;
          position: relative;
          margin-right: 20rpx;
          .img {
            width: 80rpx;
            height: 80rpx;
            border-radius: 50%;
          }
          .status {
            width: 28rpx;
            height: 28rpx;
            border-radius: 50%;
            position: absolute;
            right: 0;
            bottom: 0;
          }
        }
        .content {
          flex: 1;
          .head {
            display: flex;
            justify-content: space-between;
            margin-bottom: 4rpx;
            .event {
              font-size: 30rpx;
            }
            .time {
              font-size: 26rpx;
              color: #999999;
            }
          }
          .name_wrap {
            font-size: 26rpx;
            color: #777777;
            .status {
              color: $uni-color-primary;
            }
          }
          .children {
            display: flex;
            flex-wrap: wrap;
            margin-top: 12rpx;
            .child {
              display: flex;
              flex-direction: column;
              justify-content: center;
              align-items: center;
              margin-right: 12rpx;
              .child_img {
                width: 48rpx;
                height: 48rpx;
                border-radius: 50%;
              }
            }
          }
          .remark {
            margin-top: 12rpx;
            background-color: #f7f7f7;
            padding: 14rpx 20rpx;
            border-radius: 8rpx;
            font-size: 26rpx;
            color: #666666;
            line-height: 36rpx;
          }
        }
        .carbon {
          display: flex;
          width: 590rpx;
          overflow-x: auto;
          margin-top: 12rpx;
          .carbon_item {
            text-align: center;
            flex-shrink: 0;
            width: 100rpx;
            image {
              width: 60rpx;
              height: 60rpx;
              margin: 0 auto;
            }
            view {
              font-size: 26rpx;
              color: #777777;
            }
          }
        }
        &:nth-last-child(1) {
          .separate {
            height: 0;
          }
        }
      }
    }
  }
  .adduser_list_item_ipt1_upload {
    width: 120rpx;
    height: 120rpx;
    margin-right: 24rpx;
    border: 2rpx solid #e5e5e5;
    background: #f7f7f7;
    color: #666666;
    font-size: 22rpx;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    position: relative;
    .close {
      position: absolute;
      right: -20rpx;
      top: -20rpx;
      z-index: 9999;
    }
    image {
      width: 100%;
      height: 100%;
    }
    video {
      width: 100%;
      max-height: 120rpx;
    }
  }
  .module_list {
    .item {
      padding: 30rpx 0;
      border-bottom: 1rpx solid #e5e5e5;
      .label {
        font-size: 26rpx;
        color: #666666;
        margin-bottom: 20rpx;
      }
      .value {
        font-size: 30rpx;
        display: flex;
        align-items: center;
        .avatar {
          margin-right: 20rpx;
          width: 120rpx;
          height: 120rpx;
          border-radius: 8rpx;
          border: 2rpx solid #e5e5e5;
        }
        .info {
          flex: 1;
          display: flex;
          flex-direction: column;
          justify-content: space-between;
          font-size: 26rpx;
          color: #666666;
          .name {
            font-size: 30rpx;
            color: #333333;
          }
        }
      }
    }
  }
  .status_wrap {
    position: relative;
    padding: 30rpx 0;
    .name {
      font-weight: 600;
      font-size: 32rpx;
      margin-bottom: 20rpx;
      color: $uni-color-primary;
    }
    .desc {
      font-size: 26rpx;
      color: #ed4545;
    }
    .gray {
      color: #999999;
    }
    .file_list {
      display: flex;
      margin-bottom: 20rpx;
      overflow-x: auto;
      .img_wrap {
        margin-top: 24rpx;
        min-width: 160rpx;
        height: 160rpx;
        border: 2rpx solid #e5e5e5;
        background: #f7f7f7;
        color: #666666;
        font-size: 22rpx;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        position: relative;
        margin-right: 16rpx;
        flex-shrink: 0;
      }
      .img {
        width: 100%;
        max-height: 100%;
      }
      .video {
        height: 160rpx;
      }
    }
    .text_wrap {
      padding: 20rpx;
      background-color: #f8f7f7;
      border-radius: 8rpx;
      margin-top: 20rpx;
      .line {
        margin-bottom: 12rpx;
        display: flex;
        font-size: 24rpx;
        .label {
          color: #999999;
          width: 140rpx;
        }
      }
    }
    .status {
      position: absolute;
      right: -30rpx;
      top: 0;
      height: 60rpx;
      line-height: 60rpx;
      padding: 0 32rpx;
      border-radius: 0rpx 0rpx 0rpx 30rpx;
      background-color: #e9edff;
      color: $uni-color-primary;
    }
    .status_img {
      position: absolute;
      right: 0rpx;
      top: 20rpx;
      width: 120rpx;
    }
  }
  .main_footer {
    position: fixed;
    bottom: 0;
    width: 100%;
    left: 0;
    padding: 30rpx 10rpx 60rpx;
    display: flex;
    justify-content: space-between;
    background: #ffffff;
    .btn {
      flex: 1;
      height: 88rpx;
      line-height: 88rpx;
      background: #ffffff;
      border-radius: 44rpx;
      border: 1rpx solid #999999;
      font-size: 32rpx;
      text-align: center;
      margin: 16rpx 8rpx;
    }
    .transfer {
      color: $uni-color-primary;
      border: 1rpx solid $uni-color-primary;
    }
    .handle {
      flex: 2;
      background: $uni-color-primary;
      color: #fff;
      border: 1rpx solid $uni-color-primary;
    }
  }
  .appr_modal {
    padding: 36rpx 30rpx 0;
    .title {
      font-weight: 600;
      font-size: 32rpx;
      color: #222222;
      margin-bottom: 40rpx;
      text-align: center;
    }
    .label {
      text {
        color: #ed4545;
      }
    }
    .df_sb {
      display: flex;
      justify-content: space-between;
      align-items: center;
      height: 90rpx;
      border-bottom: 1rpx solid #e4e4e4;
      margin-bottom: 30rpx;
    }
    .back_footer {
      display: flex;
      .btn {
        flex: 1;
        height: 88rpx;
        line-height: 88rpx;
        background: #ffffff;
        border-radius: 44rpx;
        border: 1rpx solid #999999;
        font-size: 32rpx;
        text-align: center;
        margin: 16rpx 8rpx;
      }
      .agree {
        background: $uni-color-primary;
        color: #fff;
        border: 1rpx solid $uni-color-primary;
      }
    }
    textarea {
      box-sizing: border-box;
      width: 690rpx;
      min-height: 200rpx;
      background-color: #f7f7f7;
      font-size: 28rpx;
      color: #333333;
      padding: 24rpx;
      border-radius: 8rpx;
      margin-bottom: 30rpx;
    }
    .upload_wrap {
      display: flex;
      flex-wrap: wrap;
      margin-bottom: 30rpx;
    }
    .adduser_list_item_ipt1_upload {
      margin-top: 24rpx;
      width: 120rpx;
      height: 120rpx;
      margin-right: 24rpx;
      border: 2rpx solid #e5e5e5;
      background: #f7f7f7;
      color: #666666;
      font-size: 22rpx;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      position: relative;
      .close {
        position: absolute;
        right: -20rpx;
        top: -20rpx;
        z-index: 9999;
      }
      image {
        width: 100%;
        height: 100%;
      }
      video {
        width: 100%;
        max-height: 120rpx;
      }
    }
  }
  .emyty {
    width: 750rpx;
    height: 20rpx;
    background-color: #f7f7f7;
    margin: 0 -30rpx;
  }
}
.sel_upload_wrap {
  width: 100%;
  border-top: 1px solid #333333;
  box-shadow: 0 1 1 #333333;
  .btn {
    height: 90rpx;
    line-height: 90rpx;
    text-align: center;
  }
}
.member_list {
  height: 920rpx;
  overflow: auto;
  .line {
    display: flex;
    align-items: center;
    border-bottom: 1rpx solid #e5e5e5;
    padding: 30rpx 0;
    .avatar {
      width: 64rpx;
      height: 64rpx;
      border-radius: 50%;
      overflow: hidden;
      margin-right: 20rpx;
    }
    .content {
      flex: 1;
      .depart {
        font-size: 24rpx;
        color: #666666;
      }
      .info {
        display: flex;
        margin-bottom: 16rpx;
        .name {
          font-size: 30rpx;
        }
        .tag {
          font-size: 24rpx;
          border-radius: 4rpx;
          border: 1rpx solid #f62710;
          color: #f62710;
          padding: 0rpx 6rpx;
          margin-left: 8rpx;
        }
      }
    }
    .checked {
      width: 48rpx;
    }
  }
  .empty {
    width: 100%;
    height: 280rpx;
  }
}
.search_inp {
  height: 72rpx;
  background: #f7f7f7;
  border-radius: 4rpx;
  padding-left: 16rpx;
  .search {
    width: 28rpx;
  }
  input {
    flex: 1;
    font-size: 28rpx;
    color: #333333;
  }
}
.Transfer_footer {
  display: flex;
  .btn {
    flex: 1;
    height: 88rpx;
    line-height: 88rpx;
    background: #ffffff;
    border-radius: 44rpx;
    border: 1rpx solid #999999;
    font-size: 32rpx;
    text-align: center;
    margin: 16rpx 8rpx;
  }
  .active {
    background: $uni-color-primary;
    color: #fff;
    border: 1rpx solid $uni-color-primary;
  }
}
</style>
<template>
   <view class="main_app">
      <view class="status_wrap">
         <view class="name">{{ info.categoryName }}</view>
         <view v-if="info.status == '0'" class="status">{{ statusMap[info.status] }}</view>
         <image v-if="info.status == '1'" src="@/static/ic_yizhenggai.png" mode="widthFix" class="status_img"></image>
         <image v-if="info.status == '2'" src="@/static/ic_yituihui-1.png" mode="widthFix" class="status_img"></image>
         <image v-if="info.status == '3' || info.status == '6'" src="@/static/ic_refused@2x.png" mode="widthFix"
            class="status_img"></image>
         <view>{{ info.content }}</view>
         <view class="file_list">
            <view class="img_wrap" v-for="item in info.submitFileList" :key="item.id">
               <image v-if="item.type == 0" :src="item.fileurlFull" @click="priviewImage(item.fileurlFull)" mode="widthFix"
                  class="img" />
               <video v-if="item.type == 1" :src="item.fileurlFull" class="video" controls />
            </view>
         </view>
         <view class="text_wrap">
            <view class="line">
               <text class="label">隐患区域:</text>
               <text>{{ info.areaName }}</text>
            </view>
            <view class="line">
               <text class="label">提报人:</text>
               <text>{{ info.memberName }} {{ info.memberPhone }}</text>
            </view>
         </view>
      </view>
      <!--  -->
      <view class="emyty"></view>
      <view v-if="info.status == 1" class="module_list">
         <view class="item">
            <view class="label">处理结果</view>
            <view class="value primaryColor">{{ statusMap[info.status] }}</view>
         </view>
         <view class="item">
            <view class="label">整改前</view>
            <view class="value">
               <view class="adduser_list_item_ipt1_upload" v-for="(item, i) in info.dealBeforeFileList" :key="i">
                  <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
                  <video v-if="item.type == 1" :src="item.fileurlFull"></video>
               </view>
            </view>
         </view>
         <view class="item">
            <view class="label">整改后</view>
            <view class="value">
               <view class="adduser_list_item_ipt1_upload" v-for="(item, i) in info.dealAfterFileList" :key="i">
                  <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
                  <video v-if="item.type == 1" :src="item.fileurlFull"></video>
               </view>
            </view>
         </view>
         <view class="item">
            <view class="label">整改说明</view>
            <view class="value">{{ info.checkInfo }}</view>
         </view>
      </view>
      <!-- 流程 -->
      <view class="flow_wrap">
         <view class="flow_title">处理流程</view>
         <view class="list">
            <view class="item" v-for="(item, index) in flowList" :key="item.id">
               <view class="separate"></view>
               <view class="avatar">
                  <image src="@/static/staff/liucheng_success@2x.png" class="status"
                     v-if="info.status == 1 || index < flowList.length - 1" />
                  <image src="@/static/staff/liucheng_fail@2x.png" class="status"
                     v-if="info.status == 2 && index == flowList.length - 1" />
                  <image v-if="item.avatar != null && item.avatar != ''" :src="item.avatar" class="img" alt="" />
                  <!-- <image v-else src="@/static/default_avatar.png" class="img" mode=""></image> -->
                  <span v-if="item.avatar == null || item.avatar == ''"
                     class="img_name">{{ item.createUserName && item.createUserName.slice(0, 1) }}</span>
               </view>
               <view class="content">
                  <view class="head">
                     <view class="event">{{ item.title }}</view>
                     <view class="time">{{ item.createDate }}</view>
                  </view>
                  <view class="line">
                     <view class="company">
                        {{ item.createUserName }} {{ item.companyName }}
                        <view style="display: inline" v-if="index == flowList.length - 1">
                           (
                           <span v-if="info.status == 1">已同意</span>
                           <span class="status-green" v-if="info.status == 0">待处理</span>
                           <span class="status-red" v-if="info.status == 2">已退回</span>
                           )
                        </view>
                     </view>
                  </view>
               </view>
            </view>
         </view>
      </view>
      <view class="emyty"></view>
      <view class="main_footer">
         <view  v-if="info.status==0&& info.checkUserId == userInfo.memberId" class="btn" @click="handleBack">退回</view>
         <view v-if="info.status==0 && info.checkUserId == userInfo.memberId" class="btn transfer" @click="handleTransfer">转交</view>
         <view v-if="info.status==0&& info.checkUserId == userInfo.memberId" class="btn handle" @click="handleOpen">处理</view>
      </view>
      <!-- 退回 -->
      <u-popup :show="isShowBack" :round="10" :safeAreaInsetBottom="true" mode="bottom" @close="isShowBack = false">
         <view class="appr_modal">
            <view class="title">隐患退回</view>
            <view class="df_sb">
               <view>退回时间</view>
               <view class="df_ac" @click="isShowBackDate = true" v-if="backParam.dealTime">
                  {{ backParam.dealTime }}
                  <u-icon name="arrow-right"></u-icon>
               </view>
               <view @click="isShowBackDate = true" v-else class="placeholder9 df_ac">
                  请选择
                  <u-icon name="arrow-right"></u-icon>
               </view>
            </view>
            <view class="label">图片/视频</view>
            <view class="upload_wrap">
               <view class="adduser_list_item_ipt1_upload" @click="showUpload = true">
                  <u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
                  <view class="mt6">图片/视频</view>
               </view>
               <view class="adduser_list_item_ipt1_upload" v-for="(item, i) in submitFileList" :key="i">
                  <u-icon class="close" size="20" name="close-circle-fill" color="red"
                     @click="fileDel('submitFileList', i)"></u-icon>
                  <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
                  <video v-if="item.type == 1" :src="item.fileurlFull"></video>
               </view>
            </view>
            <view class="label">退回说明</view>
            <textarea v-model="backParam.checkInfo" placeholder="请详细描述现场情况,不少于10个字" placeholder-class="placeholder9" />
            <view class="back_footer">
               <view class="btn" @click="isShowBack = false">取消</view>
               <view class="btn agree" @click="onSubBack">提交</view>
            </view>
         </view>
      </u-popup>
      <!-- 处理 -->
      <u-popup :show="isShowHandle" :round="10" :safeAreaInsetBottom="true" mode="bottom" @close="isShowHandle = false">
         <view class="appr_modal">
            <view class="title">隐患整改</view>
            <view class="df_sb">
               <view>整改时间</view>
               <view class="df_ac" @click="isShowHandleDate = true" v-if="handleParam.dealTime">
                  {{ handleParam.dealTime }}
                  <u-icon name="arrow-right"></u-icon>
               </view>
               <view @click="isShowHandleDate = true" v-else class="placeholder9 df_ac">
                  请选择
                  <u-icon name="arrow-right"></u-icon>
               </view>
            </view>
            <view class="label">
               <text>*</text>
               整改前
            </view>
            <view class="upload_wrap">
               <view class="adduser_list_item_ipt1_upload" @click="showUploadBe = true">
                  <u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
                  <view class="mt6">图片/视频</view>
               </view>
               <view class="adduser_list_item_ipt1_upload" v-for="(item, i) in dealBeforeFileList" :key="i">
                  <u-icon class="close" size="20" name="close-circle-fill" color="red"
                     @click="fileDel('dealBeforeFileList', i)"></u-icon>
                  <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
                  <video v-if="item.type == 1" :src="item.fileurlFull"></video>
               </view>
            </view>
            <view class="label">
               <text>*</text>
               整改后
            </view>
            <view class="upload_wrap">
               <view class="adduser_list_item_ipt1_upload" @click="showUploadAf = true">
                  <u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
                  <view class="mt6">图片/视频</view>
               </view>
               <view class="adduser_list_item_ipt1_upload" v-for="(item, i) in dealAfterFileList" :key="i">
                  <u-icon class="close" size="20" name="close-circle-fill" color="red"
                     @click="fileDel('dealAfterFileList', i)"></u-icon>
                  <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
                  <video v-if="item.type == 1" :src="item.fileurlFull"></video>
               </view>
            </view>
            <view class="label">整改说明</view>
            <textarea v-model="handleParam.checkInfo" placeholder="请详细描述现场情况,不少于10个字" placeholder-class="placeholder9" />
            <view class="back_footer">
               <view class="btn" @click="isShowHandle = false">取消</view>
               <view class="btn agree" @click="onSubmit">提交</view>
            </view>
         </view>
      </u-popup>
      <!-- 上传 -->
      <u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay>
         <view class="sel_upload_wrap">
            <view class="btn" @click="uploadImage">选择图片</view>
            <view class="btn" @click="uploadVideo">选择视频</view>
         </view>
      </u-popup>
      <u-popup :show="showUploadBe" @close="showUploadBe = false" closeOnClickOverlay>
         <view class="sel_upload_wrap">
            <view class="btn" @click="uploadBeImage">选择图片</view>
            <view class="btn" @click="uploadBeVideo">选择视频</view>
         </view>
      </u-popup>
      <u-popup :show="showUploadAf" @close="showUploadAf = false" closeOnClickOverlay>
         <view class="sel_upload_wrap">
            <view class="btn" @click="uploadAfImage">选择图片</view>
            <view class="btn" @click="uploadAfVideo">选择视频</view>
         </view>
      </u-popup>
      <!-- 转交 -->
      <u-popup :show="isShowTransfer" :round="10" safeAreaInsetBottom mode="bottom" @close="isShowTransfer = false">
         <view class="appr_modal">
            <view class="title">选择员工</view>
            <view class="search_inp df_ac">
               <image class="mr12 search" src="@/static/ic_search@2x.png" mode="widthFix"></image>
               <input v-model="transferModel.name" @blur="getMemList()" type="text" placeholder="搜索部门/人员"
                  placeholder-style="color: #999999;" />
            </view>
            <view class="member_list">
               <view class="mt24 placeholder6">共{{ memberList.length }}条数据</view>
               <view v-for="item in memberList" :key="item.id" class="line">
                  <image :src="item.faceImgFull ? item.faceImgFull : require('@/static/meeting/common/default_user@2x.png')"
                     class="avatar" mode=""></image>
                  <view class="content">
                     <view class="info">
                        <text class="name">{{ item.name }}</text>
                        <!-- <text class="tag">tag</text> -->
                     </view>
                     <view class="depart">{{ item.companyName }}</view>
                  </view>
                  <image @click="changeMem(item)" v-if="transferParam.id == item.id"
                     src="@/static/checkbox_sel@2x.png" mode="widthFix" class="checked"></image>
                  <image @click="changeMem(item)" v-else src="@/static/video@2x.png" mode="widthFix"
                     class="checked"></image>
                  <text></text>
               </view>
               <view class="empty"></view>
            </view>
            <view class="Transfer_footer">
               <view class="btn" @click="isShowTransfer = fales">取消</view>
               <view class="btn active" @click="enterTransfer">确认转交</view>
            </view>
         </view>
      </u-popup>
      <!-- 退回时间 -->
      <u-datetime-picker :show="isShowBackDate" @confirm="confirmBackDate" @cancel="isShowBackDate = false"
         mode="datetime"></u-datetime-picker>
      <u-datetime-picker :minDate="new Date().getTime()" :show="isShowHandleDate" @confirm="confirmHandleDate"
         @cancel="isShowHandleDate = false" mode="datetime"></u-datetime-picker>
   </view>
</template>
<script>
   import {
      hiddenDangerDetail,
      uploadUrl,
      findHiddenAreaMemberList,
      dealHiddenDanger,
      transferHiddenDanger,
      findListFlowDanger
   } from '@/api';
   import dayjs from 'dayjs';
   export default {
      data() {
         return {
            isShowBack: false,
            param: {},
            info: {},
            userInfo: this.$store.state.userInfo,
            flowList: [],
            id: '',
            type: '',
            cateList: [{
               name: '访客申请',
               id: 0
            }, {
               name: '访客报备',
               id: 1
            }, {
               name: '用车申请',
               id: 2
            }, {
               name: '隐患随手拍',
               id: 3
            }, {
               name: '物流车申请',
               id: 4
            }],
            statusMap: {
               0: '待处理',
               1: '已整改',
               2: '已退回',
               3: '已拒绝',
               4: '已取消',
               5: '他人或签',
               6: '他人拒绝'
            },
            showUpload: false,
            isShowBackDate: false,
            submitFileList: [],
            backParam: {},
            isShowHandle: false,
            handleParam: {},
            isShowHandleDate: false,
            showUploadBe: false,
            showUploadAf: false,
            dealBeforeFileList: [],
            dealAfterFileList: [],
            isShowTransfer: false,
            transferParam: {},
            transferModel: {},
            pagination: {
               page: 1,
               capacity: 50
            },
            memberList: []
         };
      },
      onLoad(op) {
         this.id = op.id;
         this.type = op.objType;
         this.getDetail();
      },
      methods: {
         priviewImage(url) {
            uni.previewImage({
               urls: [url]
            });
         },
         handleOpen() {
            this.isShowHandle = true;
            console.log('info', this.info);
            this.dealBeforeFileList = [...this.info.submitFileList];
            this.$set(this.handleParam, 'dealTime', dayjs().format('YYYY-MM-DD HH:mm:ss'));
         },
         handleBack() {
            this.isShowBack = true;
            this.submitFileList = [...this.info.submitFileList];
            this.$set(this.backParam, 'dealTime', dayjs().format('YYYY-MM-DD HH:mm:ss'));
         },
         getDetail() {
            const {
               id
            } = this;
            hiddenDangerDetail(id).then(res => {
               this.info = res.data;
            });
            findListFlowDanger({
               hiddenDangerId: id
            }).then(res => {
               this.flowList = res.data;
            });
         },
         onSubmit() {
            const {
               dealBeforeFileList,
               dealAfterFileList,
               handleParam
            } = this;
            if (dealBeforeFileList.length === 0)
               return uni.showToast({
                  title: '请上传整改前图片或视频',
                  icon: 'none'
               });
            if (dealAfterFileList.length === 0)
               return uni.showToast({
                  title: '请上传整改后图片或视频',
                  icon: 'none'
               });
            dealHiddenDanger({
               ...handleParam,
               dealBeforeFileList: dealBeforeFileList,
               dealAfterFileList: dealAfterFileList,
               status: 1,
               id: this.id
            }).then(res => {
               if (res.code === 200) {
                  this.isShowHandle = false;
                  setTimeout(() => {
                     uni.showToast({
                        title: '操作成功',
                        icon: 'success'
                     });
                  });
                  uni.navigateBack();
               }
            });
         },
         enterTransfer() {
            const {
               transferParam,
               id
            } = this;
            if (!transferParam.id)
               return uni.showToast({
                  title: '请选择人员',
                  icon: 'none'
               });
            transferHiddenDanger({
               checkUserId: transferParam.id,
               id
            }).then(res => {
               if (res.code === 200) {
                  this.isShowTransfer = false;
                  setTimeout(() => {
                     uni.showToast({
                        title: '操作成功',
                        icon: 'success'
                     });
                  });
                  uni.navigateBack();
               }
            });
         },
         changeMem(e) {
            this.transferParam = e;
         },
         handleTransfer() {
            this.isShowTransfer = true;
            this.getMemList();
         },
         getMemList() {
            findHiddenAreaMemberList({
               model: {
                  ...this.transferModel,
                  id: this.info.areaId
               },
               ...this.pagination
            }).then(res => {
               this.memberList = res.data || [];
            });
         },
         confirmBackDate(e) {
            this.$set(this.backParam, 'dealTime', dayjs(e.value).format('YYYY-MM-DD HH:mm:ss'));
            this.isShowBackDate = false;
         },
         confirmHandleDate(e) {
            this.$set(this.handleParam, 'dealTime', dayjs(e.value).format('YYYY-MM-DD HH:mm:ss'));
            this.isShowHandleDate = false;
         },
         onSubBack() {
            const {
               submitFileList,
               backParam
            } = this;
            dealHiddenDanger({
               ...backParam,
               dealBeforeFileList: submitFileList,
               status: 2,
               id: this.id
            }).then(res => {
               if (res.code === 200) {
                  this.isShowBack = false;
                  setTimeout(() => {
                     uni.showToast({
                        title: '操作成功',
                        icon: 'success'
                     });
                  });
                  uni.navigateBack();
               }
            });
         },
         fileDel(str, i) {
            this[str].splice(i, 1);
         },
         uploadBeImage() {
            this.showUploadBe = false;
            let token = uni.getStorageSync('token') || '';
            uni.chooseImage({
               count: 4,
               success: chooseImageRes => {
                  uni.showLoading({
                     title: '上传中',
                     mask: true
                  });
                  const tempFilePaths = chooseImageRes.tempFilePaths;
                  let imgs = tempFilePaths.map((value, index) => {
                     return {
                        name: 'file',
                        uri: value
                     };
                  });
                  uni.uploadFile({
                     url: `${uploadUrl}`,
                     files: imgs,
                     name: 'file',
                     formData: {
                        folder: 'HIDDEN_DANGER_FILE'
                     },
                     header: {
                        Dm_user_token: token
                     },
                     success: uploadFileRes => {
                        let res = JSON.parse(uploadFileRes.data);
                        let obj = {
                           type: '0'
                        };
                        if (res.data && res.data.length > 0) {
                           res.data.forEach(i => {
                              i.type = 0;
                              i.fileurl = i.imgaddr;
                              i.fileurlFull = i.url;
                              this.dealBeforeFileList.push(i);
                           });
                        }
                     },
                     fail(err) {
                        console.log('err', err);
                     },
                     complete() {
                        uni.hideLoading();
                        // if (i === chooseImageRes.tempFilePaths.length - 1) {
                        //   uni.hideLoading()
                        // }
                     }
                  });
               }
            });
         },
         uploadBeVideo() {
            this.showUploadBe = false;
            let token = uni.getStorageSync('token') || '';
            uni.chooseVideo({
               success: chooseImageRes => {
                  uni.showLoading({
                     title: '上传中',
                     mask: true
                  });
                  uni.uploadFile({
                     url: `${uploadUrl}`,
                     filePath: chooseImageRes.tempFilePath,
                     header: {
                        Dm_user_token: token
                     },
                     name: 'file',
                     formData: {
                        folder: 'HIDDEN_DANGER_FILE'
                     },
                     success: uploadFileRes => {
                        let res = JSON.parse(uploadFileRes.data);
                        if (res.data && res.data.length > 0) {
                           res.data.forEach(i => {
                              i.type = 1;
                              i.fileurl = i.imgaddr;
                              i.fileurlFull = i.url;
                              this.dealBeforeFileList.push(i);
                           });
                        }
                     },
                     complete() {
                        uni.hideLoading();
                     }
                  });
               }
            });
         },
         uploadAfImage() {
            this.showUploadAf = false;
            let token = uni.getStorageSync('token') || '';
            uni.chooseImage({
               count: 4,
               success: chooseImageRes => {
                  uni.showLoading({
                     title: '上传中',
                     mask: true
                  });
                  const tempFilePaths = chooseImageRes.tempFilePaths;
                  let imgs = tempFilePaths.map((value, index) => {
                     return {
                        name: 'file',
                        uri: value
                     };
                  });
                  uni.uploadFile({
                     url: `${uploadUrl}`,
                     files: imgs,
                     name: 'file',
                     formData: {
                        folder: 'HIDDEN_DANGER_FILE'
                     },
                     header: {
                        Dm_user_token: token
                     },
                     success: uploadFileRes => {
                        let res = JSON.parse(uploadFileRes.data);
                        if (res.data && res.data.length > 0) {
                           res.data.forEach(i => {
                              i.type = 0;
                              i.fileurl = i.imgaddr;
                              i.fileurlFull = i.url;
                              this.dealAfterFileList.push(i);
                           });
                        }
                     },
                     fail(err) {
                        console.log('err', err);
                     },
                     complete() {
                        uni.hideLoading();
                        // if (i === chooseImageRes.tempFilePaths.length - 1) {
                        //   uni.hideLoading()
                        // }
                     }
                  });
               }
            });
         },
         uploadAfVideo() {
            this.showUploadAf = false;
            let token = uni.getStorageSync('token') || '';
            uni.chooseVideo({
               success: chooseImageRes => {
                  uni.showLoading({
                     title: '上传中',
                     mask: true
                  });
                  uni.uploadFile({
                     url: `${uploadUrl}`,
                     filePath: chooseImageRes.tempFilePath,
                     header: {
                        Dm_user_token: token
                     },
                     name: 'file',
                     formData: {
                        folder: 'HIDDEN_DANGER_FILE'
                     },
                     success: uploadFileRes => {
                        let res = JSON.parse(uploadFileRes.data);
                        if (res.data && res.data.length > 0) {
                           res.data.forEach(i => {
                              i.type = 1;
                              i.fileurl = i.imgaddr;
                              i.fileurlFull = i.url;
                              this.dealAfterFileList.push(i);
                           });
                        }
                     },
                     complete() {
                        uni.hideLoading();
                     }
                  });
               }
            });
         },
         uploadImage() {
            this.showUpload = false;
            let token = uni.getStorageSync('token') || '';
            uni.chooseImage({
               count: 4,
               success: chooseImageRes => {
                  uni.showLoading({
                     title: '上传中',
                     mask: true
                  });
                  const tempFilePaths = chooseImageRes.tempFilePaths;
                  let imgs = tempFilePaths.map((value, index) => {
                     return {
                        name: 'file',
                        uri: value
                     };
                  });
                  uni.uploadFile({
                     url: `${uploadUrl}`,
                     files: imgs,
                     name: 'file',
                     formData: {
                        folder: 'HIDDEN_DANGER_FILE'
                     },
                     header: {
                        Dm_user_token: token
                     },
                     success: uploadFileRes => {
                        let res = JSON.parse(uploadFileRes.data);
                        if (res.data && res.data.length > 0) {
                           res.data.forEach(i => {
                              i.type = 0;
                              i.fileurl = i.imgaddr;
                              i.fileurlFull = i.url;
                              this.submitFileList.push(i);
                           });
                        }
                     },
                     fail(err) {
                        console.log('err', err);
                     },
                     complete() {
                        uni.hideLoading();
                        // if (i === chooseImageRes.tempFilePaths.length - 1) {
                        //   uni.hideLoading()
                        // }
                     }
                  });
               }
            });
         },
         uploadVideo() {
            this.showUpload = false;
            let token = uni.getStorageSync('token') || '';
            uni.chooseVideo({
               success: chooseImageRes => {
                  uni.showLoading({
                     title: '上传中',
                     mask: true
                  });
                  uni.uploadFile({
                     url: `${uploadUrl}`,
                     filePath: chooseImageRes.tempFilePath,
                     header: {
                        Dm_user_token: token
                     },
                     name: 'file',
                     formData: {
                        folder: 'HIDDEN_DANGER_FILE'
                     },
                     success: uploadFileRes => {
                        let res = JSON.parse(uploadFileRes.data);
                        if (res.data && res.data.length > 0) {
                           res.data.forEach(i => {
                              i.type = 1;
                              i.fileurl = i.imgaddr;
                              i.fileurlFull = i.url;
                              this.submitFileList.push(i);
                           });
                        }
                     },
                     complete() {
                        uni.hideLoading();
                     }
                  });
               }
            });
         }
      }
   };
</script>
<style>
   page {
      background-color: #f7f7f7;
   }
</style>
<style lang="scss">
   .main_app {
      background-color: #fff;
      padding-bottom: 0;
      .flow_wrap {
         padding: 30rpx 0;
         .flow_title {
            font-weight: 600;
            font-size: 32rpx;
            color: #222222;
            margin-bottom: 24rpx;
         }
         .list {
            .item {
               display: flex;
               margin-bottom: 48rpx;
               position: relative;
               .separate {
                  position: absolute;
                  width: 4rpx;
                  height: 100%;
                  background-color: #eeeeee;
                  left: 40rpx;
                  transform: translate(-50%, 0);
                  top: 80rpx;
               }
               .avatar {
                  width: 80rpx;
                  height: 80rpx;
                  position: relative;
                  margin-right: 20rpx;
                  .img {
                     width: 80rpx;
                     height: 80rpx;
                     border-radius: 50%;
                  }
                  .status {
                     width: 28rpx;
                     height: 28rpx;
                     border-radius: 50%;
                     position: absolute;
                     right: 0;
                     bottom: 0;
                  }
               }
               .content {
                  flex: 1;
                  .head {
                     display: flex;
                     justify-content: space-between;
                     margin-bottom: 4rpx;
                     .event {
                        font-size: 30rpx;
                     }
                     .time {
                        font-size: 26rpx;
                        color: #999999;
                     }
                  }
                  .name_wrap {
                     font-size: 26rpx;
                     color: #777777;
                     .status {
                        color: $uni-color-primary;
                     }
                  }
                  .line{
                     .company{
                        font-size: 26rpx;
                        color: #777777;
                     }
                     .status-green{
                        color: $uni-color-primary;
                     }
                     .status-red{
                        color: red;
                     }
                  }
                  .remark {
                     margin-top: 12rpx;
                     background-color: #f7f7f7;
                     padding: 14rpx 20rpx;
                     border-radius: 8rpx;
                     font-size: 26rpx;
                     color: #666666;
                     line-height: 36rpx;
                  }
               }
               .carbon {
                  display: flex;
                  width: 590rpx;
                  overflow-x: auto;
                  margin-top: 12rpx;
                  .carbon_item {
                     text-align: center;
                     flex-shrink: 0;
                     width: 100rpx;
                     image {
                        width: 60rpx;
                        height: 60rpx;
                        margin: 0 auto;
                     }
                     view {
                        font-size: 26rpx;
                        color: #777777;
                     }
                  }
               }
               &:nth-last-child(1) {
                  .separate {
                     height: 0;
                  }
               }
            }
         }
      }
      .adduser_list_item_ipt1_upload {
         width: 120rpx;
         height: 120rpx;
         margin-right: 24rpx;
         border: 2rpx solid #e5e5e5;
         background: #f7f7f7;
         color: #666666;
         font-size: 22rpx;
         display: flex;
         flex-direction: column;
         align-items: center;
         justify-content: center;
         position: relative;
         .close {
            position: absolute;
            right: -20rpx;
            top: -20rpx;
            z-index: 9999;
         }
         image {
            width: 100%;
            height: 100%;
         }
         video {
            width: 100%;
            max-height: 120rpx;
         }
      }
      .module_list {
         .item {
            padding: 30rpx 0;
            border-bottom: 1rpx solid #e5e5e5;
            .label {
               font-size: 26rpx;
               color: #666666;
               margin-bottom: 20rpx;
            }
            .value {
               font-size: 30rpx;
               display: flex;
               align-items: center;
               .avatar {
                  margin-right: 20rpx;
                  width: 120rpx;
                  height: 120rpx;
                  border-radius: 8rpx;
                  border: 2rpx solid #e5e5e5;
               }
               .info {
                  flex: 1;
                  display: flex;
                  flex-direction: column;
                  justify-content: space-between;
                  font-size: 26rpx;
                  color: #666666;
                  .name {
                     font-size: 30rpx;
                     color: #333333;
                  }
               }
            }
         }
      }
      .status_wrap {
         position: relative;
         padding: 30rpx 0;
         .name {
            font-weight: 600;
            font-size: 32rpx;
            margin-bottom: 20rpx;
            color: $uni-color-primary;
         }
         .desc {
            font-size: 26rpx;
            color: #ed4545;
         }
         .gray {
            color: #999999;
         }
         .file_list {
            display: flex;
            margin-bottom: 20rpx;
            overflow-x: auto;
            .img_wrap {
               margin-top: 24rpx;
               min-width: 160rpx;
               height: 160rpx;
               border: 2rpx solid #e5e5e5;
               background: #f7f7f7;
               color: #666666;
               font-size: 22rpx;
               display: flex;
               flex-direction: column;
               align-items: center;
               justify-content: center;
               position: relative;
               margin-right: 16rpx;
               flex-shrink: 0;
            }
            .img {
               width: 100%;
               max-height: 100%;
            }
            .video {
               height: 160rpx;
            }
         }
         .text_wrap {
            padding: 20rpx;
            background-color: #f8f7f7;
            border-radius: 8rpx;
            margin-top: 20rpx;
            .line {
               margin-bottom: 12rpx;
               display: flex;
               font-size: 24rpx;
               .label {
                  color: #999999;
                  width: 140rpx;
               }
            }
         }
         .status {
            position: absolute;
            right: -30rpx;
            top: 0;
            height: 60rpx;
            line-height: 60rpx;
            padding: 0 32rpx;
            border-radius: 0rpx 0rpx 0rpx 30rpx;
            background-color: #e9edff;
            color: $uni-color-primary;
         }
         .status_img {
            position: absolute;
            right: 0rpx;
            top: 20rpx;
            width: 120rpx;
         }
      }
      .main_footer {
         position: fixed;
         bottom: 0;
         width: 100%;
         left: 0;
         padding: 30rpx 10rpx 60rpx;
         display: flex;
         justify-content: space-between;
         background: #ffffff;
         .btn {
            flex: 1;
            height: 88rpx;
            line-height: 88rpx;
            background: #ffffff;
            border-radius: 44rpx;
            border: 1rpx solid #999999;
            font-size: 32rpx;
            text-align: center;
            margin: 16rpx 8rpx;
         }
         .transfer {
            color: $uni-color-primary;
            border: 1rpx solid $uni-color-primary;
         }
         .handle {
            flex: 2;
            background: $uni-color-primary;
            color: #fff;
            border: 1rpx solid $uni-color-primary;
         }
      }
      .appr_modal {
         padding: 36rpx 30rpx 0;
         .title {
            font-weight: 600;
            font-size: 32rpx;
            color: #222222;
            margin-bottom: 40rpx;
            text-align: center;
         }
         .label {
            text {
               color: #ed4545;
            }
         }
         .df_sb {
            display: flex;
            justify-content: space-between;
            align-items: center;
            height: 90rpx;
            border-bottom: 1rpx solid #e4e4e4;
            margin-bottom: 30rpx;
         }
         .back_footer {
            display: flex;
            .btn {
               flex: 1;
               height: 88rpx;
               line-height: 88rpx;
               background: #ffffff;
               border-radius: 44rpx;
               border: 1rpx solid #999999;
               font-size: 32rpx;
               text-align: center;
               margin: 16rpx 8rpx;
            }
            .agree {
               background: $uni-color-primary;
               color: #fff;
               border: 1rpx solid $uni-color-primary;
            }
         }
         textarea {
            box-sizing: border-box;
            width: 690rpx;
            min-height: 200rpx;
            background-color: #f7f7f7;
            font-size: 28rpx;
            color: #333333;
            padding: 24rpx;
            border-radius: 8rpx;
            margin-bottom: 30rpx;
         }
         .upload_wrap {
            display: flex;
            flex-wrap: wrap;
            margin-bottom: 30rpx;
         }
         .adduser_list_item_ipt1_upload {
            margin-top: 24rpx;
            width: 120rpx;
            height: 120rpx;
            margin-right: 24rpx;
            border: 2rpx solid #e5e5e5;
            background: #f7f7f7;
            color: #666666;
            font-size: 22rpx;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            position: relative;
            .close {
               position: absolute;
               right: -20rpx;
               top: -20rpx;
               z-index: 9999;
            }
            image {
               width: 100%;
               height: 100%;
            }
            video {
               width: 100%;
               max-height: 120rpx;
            }
         }
      }
      .emyty {
         width: 750rpx;
         height: 20rpx;
         background-color: #f7f7f7;
         margin: 0 -30rpx;
      }
   }
   .sel_upload_wrap {
      width: 100%;
      border-top: 1px solid #333333;
      box-shadow: 0 1 1 #333333;
      .btn {
         height: 90rpx;
         line-height: 90rpx;
         text-align: center;
      }
   }
   .member_list {
      height: 920rpx;
      overflow: auto;
      .line {
         display: flex;
         align-items: center;
         border-bottom: 1rpx solid #e5e5e5;
         padding: 30rpx 0;
         .avatar {
            width: 64rpx;
            height: 64rpx;
            border-radius: 50%;
            overflow: hidden;
            margin-right: 20rpx;
         }
         .content {
            flex: 1;
            .depart {
               font-size: 24rpx;
               color: #666666;
            }
            .info {
               display: flex;
               margin-bottom: 16rpx;
               .name {
                  font-size: 30rpx;
               }
               .tag {
                  font-size: 24rpx;
                  border-radius: 4rpx;
                  border: 1rpx solid #f62710;
                  color: #f62710;
                  padding: 0rpx 6rpx;
                  margin-left: 8rpx;
               }
            }
         }
         .checked {
            width: 48rpx;
         }
      }
      .empty {
         width: 100%;
         height: 280rpx;
      }
   }
   .search_inp {
      height: 72rpx;
      background: #f7f7f7;
      border-radius: 4rpx;
      padding-left: 16rpx;
      .search {
         width: 28rpx;
      }
      input {
         flex: 1;
         font-size: 28rpx;
         color: #333333;
      }
   }
   .Transfer_footer {
      display: flex;
      .btn {
         flex: 1;
         height: 88rpx;
         line-height: 88rpx;
         background: #ffffff;
         border-radius: 44rpx;
         border: 1rpx solid #999999;
         font-size: 32rpx;
         text-align: center;
         margin: 16rpx 8rpx;
      }
      .active {
         background: $uni-color-primary;
         color: #fff;
         border: 1rpx solid $uni-color-primary;
      }
   }
</style>