ll
liukangdong
2024-09-13 7a29f062e2e9ea3fe7ecbf937ed7a51461f5299a
ll
已修改17个文件
2910 ■■■■ 文件已修改
admin/src/components/business/OperaCarDriverWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/system/dict/OperaDictDataWindow.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/system/dict/OperaDictWindow.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/reportRecord.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/visits.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/system/dict.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/task/visSubDetail.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/api/staff.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/applicationRecord/applicationRecord.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/appointmentDetails/appointmentDetails.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/task/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/task/vDangetAppr.vue 2710 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/task/visitorApprove.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/task/visitorReport.vue 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/vehicle/applePeo.vue 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staffLogin/login.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaCarDriverWindow.vue
@@ -101,7 +101,7 @@
    },
    loadCars () {
      carList({
        type: 1 //公务车
        type: 0 //公务车
      })
        .then(res => {
          this.carList = res
admin/src/components/system/dict/OperaDictDataWindow.vue
@@ -7,17 +7,17 @@
  >
    <el-form :model="form" ref="form" :rules="rules">
      <el-form-item label="数据说明" prop="label" required>
        <el-input v-model="form.remark" placeholder="请输入数据说明" v-trim maxlength="50"/>
        <el-input v-model="form.remark" placeholder="请输入数据说明" v-trim/>
      </el-form-item>
      <el-form-item label="数据标签" prop="label" required>
        <el-input v-model="form.label" placeholder="请输入数据标签" v-trim maxlength="50"/>
        <el-input v-model="form.label" placeholder="请输入数据标签" v-trim/>
      </el-form-item>
      <el-form-item label="是否富文本" prop="istext" >
        <el-switch v-model="form.istext" :active-value="true" :inactive-value="false"/>
        <span class="status-text">{{form.istext | disabledText1}}</span>
      </el-form-item>
      <el-form-item label="数据值" prop="code" required>
        <el-input v-if="!form.istext" v-model="form.code" placeholder="请输入数据值" v-trim maxlength="50"/>
        <el-input v-if="!form.istext" v-model="form.code" placeholder="请输入数据值" v-trim/>
        <RichEditor v-else  :richData="form.code" :styleEditor="styleEditor" @getWangedditor="getWangedditor" :readonly="false"/>
      </el-form-item>
      <el-form-item label="状态" prop="disabled" required class="form-item-status">
admin/src/components/system/dict/OperaDictWindow.vue
@@ -7,10 +7,10 @@
  >
    <el-form :model="form" ref="form" :rules="rules">
      <el-form-item label="字典编码" prop="code" required>
        <el-input v-model="form.code" placeholder="请输入字典编码" v-trim maxlength="50"/>
        <el-input v-model="form.code" placeholder="请输入字典编码" v-trim />
      </el-form-item>
      <el-form-item label="字典名称" prop="name" required>
        <el-input v-model="form.name" placeholder="请输入字典名称" v-trim maxlength="50"/>
        <el-input v-model="form.name" placeholder="请输入字典名称" v-trim />
      </el-form-item>
      <el-form-item label="备注" prop="remark">
        <el-input v-model="form.remark" type="textarea" placeholder="请输入备注" :rows="3" v-trim maxlength="500"/>
admin/src/views/business/reportRecord.vue
@@ -59,6 +59,7 @@
        prop="status"
        fixed="right"
        label="状态"
        align="center"
        min-width="100"
      >
        <template slot-scope="{ row }">
@@ -66,21 +67,21 @@
            >待提交审批</span
          >
          <span v-if="row.status === 1" style="color: rgba(245, 154, 35, 0.996)"
            >审批中</span
            >处理中</span
          >
          <span v-if="row.status === 2" style="color: rgba(245, 154, 35, 0.996)"
            >审核通过</span
            >已同意</span
          >
          <span style="color: gray" v-if="row.status === 3">审核不通过</span>
          <span style="color: gray" v-if="row.status === 3">已拒绝</span>
          <span v-if="row.status === 4" style="color: gray">取消</span>
          <span v-if="row.status === 5" style="color: green">预约成功</span>
          <span v-if="row.status === 6" style="color: gray">预约失败</span>
          <span v-if="row.status === 5" style="color: green">下发成功</span>
          <span v-if="row.status === 6" style="color: gray">下发失败</span>
          <span v-if="row.status === 7" style="color: green">拜访中</span>
          <span v-if="row.status === 8" style="color: red">已签离</span>
          <span v-if="row.status === 9" style="color: gray">已失效</span>
        </template>
      </el-table-column>
      <el-table-column label="操作" width="100" fixed="right">
      <el-table-column label="操作" align="center" width="100" fixed="right">
        <template slot-scope="{ row }">
          <el-button
            type="text"
admin/src/views/business/visits.vue
@@ -78,12 +78,12 @@
                <el-table-column prop="status" fixed="right" label="状态" min-width="100px">
                    <template slot-scope="{row}">
                        <span style="color: rgba(245, 154, 35, 0.996);" v-if="row.status === 0">待提交审批</span>
                        <span v-if="row.status === 1" style="color: rgba(245, 154, 35, 0.996);">审批中</span>
                        <span v-if="row.status === 2" style="color: rgba(245, 154, 35, 0.996);">审核通过</span>
                        <span style="color: gray;" v-if="row.status === 3" >审核不通过</span>
                        <span v-if="row.status === 1" style="color: rgba(245, 154, 35, 0.996);">处理中</span>
                        <span v-if="row.status === 2" style="color: rgba(245, 154, 35, 0.996);">已同意</span>
                        <span style="color: gray;" v-if="row.status === 3" >已拒绝</span>
                        <span v-if="row.status === 4" style="color: gray">取消</span>
                        <span v-if="row.status === 5" style="color: green">预约成功</span>
                        <span v-if="row.status === 6" style="color: gray">预约失败</span>
                        <span v-if="row.status === 5" style="color: green">下发成功</span>
                        <span v-if="row.status === 6" style="color: gray">下发失败</span>
                        <span v-if="row.status === 7" style="color: green">拜访中</span>
                        <span v-if="row.status === 8" style="color: red">已签离</span>
                      <span v-if="row.status === 9" style="color: gray">已失效</span>
admin/src/views/system/dict.vue
@@ -3,10 +3,10 @@
    <!-- 搜索表单 -->
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
      <el-form-item label="字典编码" prop="code">
        <el-input v-model="searchForm.code" v-trim placeholder="请输入字典编码" @keypress.enter.native="search"/>
        <el-input v-model="searchForm.code" placeholder="请输入字典编码" @keypress.enter.native="search"/>
      </el-form-item>
      <el-form-item label="字典名称" prop="name">
        <el-input v-model="searchForm.name" v-trim placeholder="请输入字典名称" @keypress.enter.native="search"/>
        <el-input v-model="searchForm.name" placeholder="请输入字典名称" @keypress.enter.native="search"/>
      </el-form-item>
      <section>
        <el-button type="primary" @click="search">搜索</el-button>
admin/src/views/task/visSubDetail.vue
@@ -231,11 +231,6 @@
        2: '已同意',
        3: '已拒绝',
        4: '已取消',
        5: '预约成功',
        6: '预约失败',
        7: '拜访中',
        8: '已签离',
        9: '已失效'
      },
      cateList: {
        0: '访客申请',
h5/api/staff.js
@@ -116,6 +116,14 @@
    data
  })
}
// 隐患 流程列表
export const findListFlowDanger = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/business/hiddenDangerLog/findList',
    method: 'post',
    data
  })
}
// 车辆 列表
export const getCarsList = (data) => {
  return http({
h5/pages/applicationRecord/applicationRecord.vue
@@ -90,13 +90,16 @@
      status: '',
      statusMap: {
        0: '待审核',
        1: '已提交',
        0: '待审批',
        1: '审批中',
        2: '审核通过',
        3: '审核驳回',
        4: '取消',
        5: '下发成功',
        6: '下发失败',
        7: '拜访中',
        8: '已签离',
        9: '已失效',
      }
    }
  },
h5/pages/appointmentDetails/appointmentDetails.vue
@@ -14,10 +14,18 @@
      <view class="h1">访客预约待审核</view>
      <view class="h2">您的预约单已提交审核,请等待被访人审核</view>
    </view>
        <view class="head_wrap head_padding" v-if="info.status == 1">
          <view class="h1">访客预约审批中</view>
          <view class="h2">您的来访申请正在审核</view>
        </view>
    <view class="head_wrap head_error" v-if="info.status == 3">
      <view class="h1">访客预约审核不通过</view>
      <view class="h2">您的来访申请已被驳回,如有疑问,可联系被访人</view>
    </view>
        <view class="head_wrap head_error" v-if="info.status == 9">
          <view class="h1">访客预约已失效</view>
          <view class="h2">您的来访申请已失效,请重新申请</view>
        </view>
    <view class="box_list">
      <view class="box_list_label">拜访信息</view>
      <!-- <view class="box_list_tips" v-if="info.status == 6 || info.status == 3"
h5/pages/staff/index.vue
@@ -63,8 +63,8 @@
        <image class="img" src="@/static/staff/ic_renwuzhongxin.png"></image>
        <view class="h1">任务中心</view>
        <view class="h2">TASK CENTER</view>
        <view class="task_num" v-if="taskInfo.noticeWaitNum && taskInfo.noticeCopyNum">{{
          taskInfo.noticeWaitNum + taskInfo.noticeCopyNum
        <view class="task_num">{{
         taskInfo
        }}</view>
      </view>
      <view class="img_wrap" @click="jump('/pages/staff/meetingCalendar')">
@@ -170,7 +170,7 @@
      stagingHead({
        isDetail: '1'
      }).then(res => {
        this.taskInfo = res.data || ''
        this.taskInfo = res.data.noticeWaitNum + res.data.noticeCopyNum
      })
    },
  }
h5/pages/staff/task/index.vue
@@ -70,7 +70,7 @@
      >
        <view class="box_list_item_head">
          <view class="df_ac">
            <text v-if="item.readed == 0" class="readed"></text>
            <text v-if="item.readed == 0 && search.queryType === 3" class="readed"></text>
            <text class="tt">{{ item.title }}</text>
          </view>
          <view class="info" :class="{ loading: search.queryType === 0 }">{{ item.info }}</view>
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>
h5/pages/staff/task/visitorApprove.vue
@@ -68,6 +68,10 @@
        <view class="label">来访事由</view>
        <view class="value">{{ info.visitReason }}</view>
      </view>
            <view v-if="info.constructionReason" class="item">
              <view class="label">施工内容</view>
              <view class="value">{{ info.constructionReason }}</view>
            </view>
    </view>
    <!-- 流程 -->
    <view class="flow_wrap">
h5/pages/staff/task/visitorReport.vue
@@ -2,14 +2,18 @@
  <view class="main_app">
    <view class="status_wrap">
      <view class="name">{{ info.createMemberName }}提交的{{ cateList[type].name }}</view>
      <view class="desc" :class="{
        gray: info.status == '2' || info.status == '5' || info.status == '4',
      }">{{ statusMap[info.status] }}</view>
      <view v-if="info.status == '0'" class="status">{{
        statusMap[info.status]
        }}</view>
      <image v-if="info.status == '2'" src="@/static/ic_passed@2x.png" mode="widthFix" class="status_img"></image>
      <image v-if="info.status == '3' || info.status == '6'" src="@/static/ic_refused@2x.png" mode="widthFix"
      <view
        class="desc"
        :class="{
          gray: info.businessStatus == '2' || info.businessStatus == '3' || info.businessStatus == '4',
        }"
        >{{ infoStatus }}</view
      >
      <view v-if="info.businessStatus == '0' || info.businessStatus == '1'" class="status">{{
        statusMap[info.businessStatus]
      }}</view>
      <image v-if="info.businessStatus == '2'" src="@/static/ic_passed@2x.png" mode="widthFix" class="status_img"></image>
      <image v-if="info.businessStatus == '3' || info.businessStatus == '6'" src="@/static/ic_refused@2x.png" mode="widthFix"
        class="status_img"></image>
    </view>
    <!--  -->
@@ -127,6 +131,7 @@
      id: '',
      type: '',
      infoStatus: '',
      cateList: [
        { name: '访客申请', id: 0 },
        { name: '访客报备', id: 1 },
@@ -140,14 +145,13 @@
        2: '已通过',
        3: '已拒绝',
        4: '已取消',
        5: '他人或签',
        6: '他人拒绝',
      }
    }
  },
  onLoad(op) {
    this.id = op.id
    this.type = op.objType
    this.infoStatus = op.info
    this.getDetail()
  },
  methods: {
h5/pages/staff/vehicle/applePeo.vue
@@ -57,7 +57,7 @@
          <text v-for="(item, i) in selList" :key="i">{{ item.name }};</text>
        </view>
        <image
          @click="isShowSelMem = true"
          @click="openSeleter"
          class="open_icon"
          src="@/static/staff/renyuan_ic_open.png"
          mode=""
@@ -74,28 +74,30 @@
    >
      <view class="modal">
        <view class="modal_header">
          <text class="status">已选择:{{ selList.length }}人</text>
          <text class="status">已选择:{{ selList.filter(i => i.checkedTemp).length }}人</text>
          <text class="btn" @click="subSelMem">确认</text>
        </view>
        <view class="modal_mem_list">
          <view class="line" v-for="(item, i) in selList" :key="i">
            <image
              :src="
                item.faceImgFull
                  ? item.faceImgFull
                  : require('@/static/logo@2x.png')
              "
              class="avatar"
              mode=""
            ></image>
            <view class="content">
              <view class="info">
                <text class="name">{{ item.name }}</text>
              </view>
              <view class="depart">{{ item.componey }}</view>
            </view>
            <view class="btn" @click="handleRemove(i)">移除</view>
          </view>
                    <template v-for="(item, i) in selList">
                        <view class="line" v-if="item.checkedTemp" :key="i">
                          <image
                            :src="
                              item.faceImgFull
                                ? item.faceImgFull
                                : require('@/static/logo@2x.png')
                            "
                            class="avatar"
                            mode=""
                          ></image>
                          <view class="content">
                            <view class="info">
                              <text class="name">{{ item.name }}</text>
                            </view>
                            <view class="depart">{{ item.componey }}</view>
                          </view>
                          <view class="btn" @click="handleRemove(i)">移除</view>
                        </view>
                    </template>
        </view>
      </view>
    </u-popup>
@@ -151,7 +153,8 @@
      }).then(res => {
        this.memberList = res.data || []
        this.memberList.forEach(i => {
          i.checked = false
                    const index = this.selList.findIndex(ite => ite.id === i.id)
          i.checked = index > -1
        })
      })
    },
@@ -163,23 +166,6 @@
      this.$eventBus.$emit('applePeo', this.selList)
      uni.navigateBack()
    },
    closeModal() {
      this.selList = this.memberList.filter(i => i.checked)
      this.isShowSelMem = false
    },
    subSelMem() {
      const { selList, memberList } = this
      memberList.forEach(ite => {
        ite.checked = false
        selList.forEach(item => {
          if (ite.id === item.id) {
            ite.checked = true
          } else { }
        })
      })
      this.isShowSelMem = false
      this.$forceUpdate()
    },
    changeMem(item, index) {
      // this.memberList.forEach(mem => {
      //   if(item.id === mem.id){
@@ -187,11 +173,40 @@
      //   }
      // })
      item.checked = !item.checked
      this.selList = this.memberList.filter(i => i.checked)
            const i = this.selList.findIndex(a => a.id === item.id)
            if(item.checked && i === -1){
                this.selList.push(item)
            }else{
                this.selList.splice(i, 1)
            }
      this.$forceUpdate()
    },
        openSeleter() {
            this.isShowSelMem = true
            this.selList.forEach(item => {
                item.checkedTemp = true
            })
            this.$forceUpdate()
        },
        subSelMem() {
          const { memberList } = this
            this.selList = this.selList.filter(i => i.checkedTemp)
            console.log('selList', this.selList);
          memberList.forEach(ite => {
                const index = this.selList.findIndex(i => i.id === ite.id)
            ite.checked = index > -1
          })
          this.isShowSelMem = false
          this.$forceUpdate()
        },
        closeModal() {
          this.selList.forEach(item => {
              item.checkedTemp = true
          })
          this.isShowSelMem = false
        },
    handleRemove(i) {
      this.selList.splice(i, 1)
      this.selList[i].checkedTemp = false
      this.$forceUpdate()
    },
  }
h5/pages/staffLogin/login.vue
@@ -71,7 +71,7 @@
  data() {
    return {
      form: {
        username: '13996529050',
        username: '13956044505',
        password: '123456',
                code: 1
      },