<!--
 * @Author: hisense.liangjunhua
 * @Date: 2022-06-29 15:59:51
 * @LastEditors: Light
 * @LastEditTime: 2022-10-27 16:04:01
 * @Description: 告诉大家这是什么
-->
<!--  流程业务表单   -->
<template>
  <el-card shadow="never" class="aui-card--fill" :key="showKey">
    <!-- 申请人详情 -->
    <div>
      <h3>申请人信息</h3>
      <div class="big-BOX">
        <p>
          <span class="text">申请人：<span> {{ dataForm.content.user || '--' }}</span></span>
          <span class="text">电话：<span>{{ dataForm.content.phone || '--' }}</span></span>
          <span class="text">单位：<span>{{ dataForm.content.unit || '--' }}</span></span>
        </p>
        <p>
          <span class="text">
            能力申请标题：<span>
              {{ dataForm.content.title || '--' }}</span></span>
          <span class="text" v-if="dataForm.content.applicationSystem">应用系统：<span>{{
          dataForm.content.applicationSystem || '--'
          }}</span></span>
          <span class="text"></span>
        </p>
        <p>
          <span v-if="dataForm.content.applicationSceneStr">应用场景：<span>
              {{ dataForm.content.applicationSceneStr || '--' }}</span></span>
        </p>
        <p>
          <span>
            需求依据：<span>
              {{ dataForm.content.applicationBackground || '--' }}</span></span>
        </p>
        <p>
          <div>
            <el-button type="primary" v-if="dataForm.content.attachment" size="small" @click="download(dataForm.content)">附件下载</el-button>
          </div>
        </p>
        <!-- <p>
          <span>
            能力应用期望效果：<span>
              {{ dataForm.content.effectWish || '--' }}</span
            ></span
          >
        </p> -->
        <!-- <p v-if="dataForm.content.enclosure" class="lastP">
          <span>
            申请附件：<span>
              {{ dataForm.content.enclosure || '--'
              }}<button @click="downloadFile2(dataForm.content.enclosure)">
                预览
              </button></span
            ></span
          >
        </p> -->
      </div>
    </div>

    <!-- 申请能力 -->
    <div class="AbilityApply">
      <h3>申请能力</h3>
      <ul v-for="item in dataList" :key="item.id">
        <!-- <li class="title">{{item.address}}</li> -->
        <li class="clearfix">
          <img src="~@/assets/img/imgLeft.png" />
          <div>
            <h2>
              {{ item.name }}<span>{{ item.type }}</span>
            </h2>
            <p>{{ item.describe }}</p>
          </div>
        </li>
      </ul>
    </div>
    <!--  流程综合组件   -->
      <!-- <ren-process-multiple
      v-if="processVisible"
      updateInstanceIdUrl="/processForm/tabilityapplication/updateInstanceId"
      saveFormUrl="/processForm/tabilityapplication"
      dataFormName="dataForm"
      ref="renProcessMultiple"
    ></ren-process-multiple> -->

    <!-- 审批 -->
    <div class="agreeOr" v-if="dataForm.taskId">
      <h3>审批</h3>
      <div>
        <!-- <el-radio-group v-model="agreeOrList" style="width:230px;">
          <el-radio-button label="同意" class="blueAll" @click="showDialog('同意')">同意</el-radio-button>
          <el-radio-button label="退回" class="redAll" @click="showDialog('退回')">退回</el-radio-button>
        </el-radio-group> -->
        <!-- 委托 -->
        <el-button type="info" @click="entrustTask()" v-if='taskEntrustFlag && taskEntrustFlag2'>转办</el-button>
        <el-button type="primary" @click="showDialog('同意')">同意</el-button>
        <el-button type="danger" plain @click="showDialog('驳回')">驳回</el-button>
        <!-- <el-input v-if="agreeOrList ==='同意' " v-model="inputAgree" placeholder="请输入同意意见"></el-input>
        <el-input v-if="agreeOrList ==='退回'" v-model="inputNo" placeholder="请输入退回意见"></el-input>
         <el-button class="inputBule" @click="agreeOrNot">提交</el-button> -->
      </div>
    </div>

        <ren-task-entrust v-if="renTaskEntrustVisible" ref="renTaskEntrust"></ren-task-entrust>
    <!--  流程详情   -->
    <ren-process-detail ref="renProcessMultiple"></ren-process-detail>
    <el-dialog title="审批意见" :close-on-click-modal="false" :visible.sync="dialogVisible" width="30%"
      :before-close="handleClose">
      <el-input v-model="input" placeholder="请输入审批意见"></el-input>
      <span slot="footer" class="dialog-footer">
        <el-button @click="handleClose2">取 消</el-button>
        <el-button type="primary" @click.native="agreeOrNot($store.state.contentTabsActiveName)">确 定</el-button>
      </span>
    </el-dialog>
  </el-card>
</template>

<script>
// 引入工作流公共方法
import RenTaskEntrust from '@/components/ren-process-running/src/ren-task-entrust'
import processModule from '@/mixins/process-module'
// import mixinViewModule from '@/mixins/view-module'
import debounce from 'lodash/debounce'
import qs from 'qs'
import RenProcessDetail from '@/components/ren-process-detail/src/ren-process-detail'
import bus from '@/views/bus.js'
export default {
  // 注入公共方法
  mixins: [processModule],
  data () {
    return {
      callbacks: null,
      taskEntrustFlag: false,
      taskEntrustFlag2: false,
      dialogVisible: false,
      renTaskEntrustVisible: false,
      dialogType: '',
      input: '',
      visible: true,
      showKey: 0,
      // 表单属性是否可编辑
      // fieldDisabled: false,
      // dataForm: {
      //   id: '',
      //   user: '',
      //   phone: '',
      //   unit: '',
      //   area: '',
      //   system: '',
      //   scene: '',
      //   basis: ''
      // }
      dataForm: {
        id: '',
        content: {}
      },
      dataList: [],
      inputAgree: '',
      inputNo: '',
      agreeOrList: '同意'
    }
  },
  created () {
    // 获取角色信息
    this.$http.get('/sys/user/info').then(({ data: res }) => {
      res.data.roleIdList.map(val => {
        this.$http.get('/sys/role/' + val).then(role => {
          if (role.data.data.name === '流程管理员') {
            this.taskEntrustFlag = true
          }
        })
      })
    })
    // 将业务KEY赋值给表单
    console.log('params=================>', this.$route, this.$route.params)
    this.dataForm.taskId = this.$route.params.taskId
    this.dataForm.instanceId = this.$route.params.processInstanceId
    this.init()
    // // 流程回调
    var callbacks = {
      startProcessSuccessCallback: this.closeCurrentTab,
      startProcessErrorCallback: this.startProcessErrorCallback,
      taskHandleSuccessCallback: this.closeCurrentTab,
      taskHandleErrorCallback: this.taskHandleErrorCallback,
      formSaveSuccessCallback: null,
      formSaveErrorCallback: null
    }
    // 初始化综合组件
    this.initProcessMultiple(callbacks)
  },
  computed: {
    // dataRule () {
    //   return {
    //     inputAgree: [
    //       { required: true, message: this.$t('validate.required'), trigger: 'blur' }
    //     ],
    //     inputNo: [
    //       { required: true, message: this.$t('validate.required'), trigger: 'blur' }
    //     ]
    //   }
    // }
  },
  components: {
    RenProcessDetail,
    RenTaskEntrust
  },
  methods: {
    init () {
      // this.visible = true
      this.$nextTick(() => {
        // this.$refs.dataForm.resetFields()
        this.getInfo()
        if (this.dataForm.taskId) {
          // 如业务KEY已存在，不允许编辑
          // this.fieldDisabled = true
          console.log(this.dataForm, 'init')
        }
      })
    },
    entrustTask () {
      this.renTaskEntrustVisible = true
      this.$nextTick(() => {
        this.$refs.renTaskEntrust.dataForm.taskId = this.dataForm.taskId
        this.$refs.renTaskEntrust.callbacks = this.callbacks
        this.$refs.renTaskEntrust.init()
      })
    },
    showDialog (title) {
      this.dialogVisible = true
      this.dialogType = title
    },
    handleClose (done) {
      this.$confirm('确认关闭？')
        .then((_) => {
          this.input = ''
          done()
        })
        .catch((_) => { })
    },
    handleClose2 () {
      this.dialogVisible = false
      this.input = ''
    },
    downloadFile2 (url) {
      console.log(window.SITE_CONFIG.previewUrl)
      window.open(
        window.SITE_CONFIG.previewUrl +
        'hisense_office/onlinePreview?url=' +
        btoa(encodeURI(url))
      )
    },
    // 获取信息
    getInfo () {
      let params = ''
      if (this.dataForm.taskId) {
        params = `taskId=${this.dataForm.taskId}`
        this.$http
          .get(
            `/act/task/getTaskVariables?${params}&variableName=tAbilityApplicationDTOList`
          )
          .then(({ data: res }) => {
            if (res.code !== 0) {
              console.log(res.data)
              return this.$message.error(res.msg)
            }
            console.log(
              res.data,
              this.dataForm,
              'elas============================'
            )
            this.$http
              .get(
            `/act/task/getTaskVariables?${params}&variableName=allowEntrust`
              ).then(entrust => {
                if (entrust.data.data.allowEntrust === true) {
                  this.taskEntrustFlag2 = true
                  if (this.taskEntrustFlag && this.taskEntrustFlag2) {
                    this.$alert('当前审核部门为' + res.data.tAbilityApplicationDTOList[0].resourceOwnerDept.name + '，该部门未配置审核人，请联系运维工程师配置完成后进行流程转办！', '流程提醒', {
                      confirmButtonText: '确定',
                      callback: action => {
                        // this.$message({
                        //   type: 'info',
                        //   message: `action: ${action}`
                        // })
                      }
                    })
                  }
                }
              })
            if (res.data.tAbilityApplicationDTOList[0].applicationScene) {
              res.data.tAbilityApplicationDTOList[0].applicationSceneStr = ''
              res.data.tAbilityApplicationDTOList[0].applicationScene.map(
                (val, index) => {
                  res.data.tAbilityApplicationDTOList[0].applicationSceneStr +=
                    val
                  if (
                    index <
                    res.data.tAbilityApplicationDTOList[0].applicationScene
                      .length -
                    1
                  ) {
                    res.data.tAbilityApplicationDTOList[0].applicationSceneStr +=
                      '、'
                  }
                }
              )
            }
            this.dataForm.content = res.data.tAbilityApplicationDTOList[0]
            const obj = {
              name: '申请摄像头列表',
              type: '基础设施',
              describe: ''
            }
            let flag = false
            res.data.tAbilityApplicationDTOList.map((val) => {
              if (val.cameraList) {
                flag = true
                obj.describe += val.system
                obj.describe += '；'
              } else {
                this.$http.get('/resource/' + val.resourceId).then((res1) => {
                  // console.log(res1.data.data, '1111111111111111111111111111111111')
                  this.dataList.push({
                    name: res1.data.data.name,
                    type: res1.data.data.type,
                    describe: res1.data.data.description
                  })
                })
              }
            })
            if (flag) {
              this.dataList.push(obj)
            }
          })
          .catch(() => { })
      } else {
        params = `instanceId=${this.dataForm.instanceId}`
        this.$http
          .get(
            `/act/his/getVariablesByInstanceId?${params}&variableName=tAbilityApplicationDTOList`
          )
          .then(({ data: res }) => {
            if (res.code !== 0) {
              console.log(res.data)
              return this.$message.error(res.msg)
            }
            console.log(
              res.data,
              this.dataForm,
              'elas============================'
            )
            if (res.data[0].applicationScene) {
              res.data[0].applicationSceneStr = ''
              res.data[0].applicationScene.map((val, index) => {
                res.data[0].applicationSceneStr += val
                if (index < res.data[0].applicationScene.length - 1) {
                  res.data[0].applicationSceneStr += '、'
                }
              })
            }
            this.dataForm.content = res.data[0]
            const obj = {
              name: '申请摄像头列表',
              type: '基础设施',
              describe: ''
            }
            let flag = false
            res.data.tAbilityApplicationDTOList.map((val) => {
              if (val.cameraList) {
                flag = true
                obj.describe += val.system
              } else {
                this.$http.get('/resource/' + val.resourceId).then((res1) => {
                  // console.log(res1.data.data, '1111111111111111111111111111111111')
                  this.dataList.push({
                    name: res1.data.data.name,
                    type: res1.data.data.type,
                    describe: res1.data.data.description
                  })
                })
              }
            })
            if (flag) {
              this.dataList.push(obj)
            }
          })
          .catch(() => { })
      }
    },
    // 申请能力
    applyData () {
      this.$http
        .get(`/resource/select/${this.dataForm.instanceId}`)
        .then(({ data: res }) => {
          if (res.code !== 0) {
            console.log(res.data, 'hhhhh')
            // return this.$message.error(res.msg)
          }
          // console.log(res.data, 'elas')
          // this.dataForm.content = res.data
          // console.log(this.dataForm, 'ela')
        })
        .catch(() => { })
    },
    // 同意与退回
    agreeOrNot: debounce(
      function (data) {
        if (this.dialogType === '同意') {
          if (this.input !== '') {
            console.log('this.dataForm', this.dataForm)
            const params = qs.stringify({
              taskId: this.dataForm.taskId,
              comment: this.input
            })
            console.log(params)
            this.$http
              .post('/act/task/complete?' + params)
              .then(({ data: res }) => {
                if (res.code !== 0) {
                  this.$message.error(res.msg)
                  if (this.callbacks.taskHandleErrorCallback) {
                    this.callbacks.taskHandleErrorCallback(res)
                  }
                  return
                }
                bus.$emit('competencyApplicationInit')
                this.$message({
                  message: this.$t('prompt.success'),
                  type: 'success',
                  duration: 500,
                  onClose: () => {
                    this.visible = false
                    this.dialogVisible = false
                    if (this.callbacks.taskHandleSuccessCallback) {
                      this.callbacks.taskHandleSuccessCallback(res)
                    }
                  }
                })
              })
              .catch(() => { })
            this.tabRemoveHandle(data)
          } else {
            this.$message.error('请输入审批意见！')
          }
        } else if (this.dialogType === '驳回') {
          if (this.input !== '') {
            const params = qs.stringify({
              taskId: this.dataForm.taskId,
              comment: this.input
            })
            this.$http
              .post('/act/task/backToFirst?', params)
              .then(({ data: res }) => {
                if (res.code !== 0) {
                  this.$message.error(res.msg)
                  if (this.callbacks.taskHandleErrorCallback) {
                    this.callbacks.taskHandleErrorCallback(res)
                  }
                  return
                }
                bus.$emit('competencyApplicationInit')
                this.$message({
                  message: this.$t('prompt.success'),
                  type: 'success',
                  duration: 500,
                  onClose: () => {
                    this.visible = false
                    if (this.callbacks.taskHandleSuccessCallback) {
                      this.callbacks.taskHandleSuccessCallback(res)
                    }
                  }
                })
              })
            this.tabRemoveHandle(data)
          } else {
            this.$message.error('请输入审批意见！')
          }
        }
      },
      1000,
      { leading: true, trailing: false }
    ),
    tabRemoveHandle (tabName) {
      console.log(tabName, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
      if (tabName === 'home') {
        return false
      }
      this.$store.state.contentTabs = this.$store.state.contentTabs.filter(
        (item) => item.name !== tabName
      )
      if (this.$store.state.contentTabs.length <= 0) {
        this.$store.state.sidebarMenuActiveName =
          this.$store.state.contentTabsActiveName = 'home'
        return false
      }
      // 当前选中tab被删除
      if (tabName === this.$store.state.contentTabsActiveName) {
        const tab =
          this.$store.state.contentTabs[
            this.$store.state.contentTabs.length - 1
          ]
        this.$router.push({
          name: /^iframe_.+/.test(tab.name) ? 'iframe' : tab.name,
          params: { ...tab.params },
          query: { ...tab.query }
        })
      }
    },
    // 启动流程出错回调
    startProcessErrorCallback (data) {
      console.log(data)
    },
    // 任务处理出错回调
    taskHandleErrorCallback (data) { },
    download (data) {
      const alink = document.createElement('a')
      alink.download = '附件' // 文件名,大部分浏览器兼容,IE10及以下不兼容
      alink.href = data.attachment // 创建 url地址
      alink.click() // 自动点击
    }
  },
  mounted () {
    // this.applyData()
  }
}
</script>
<style scoped lang="scss">
::v-deep .big-BOX {
  background: rgba(244, 245, 248, 0.8);
  padding: 24px;

  h3 {
    font-size: 16px;
    color: #212121;
  }

  p {
    width: 100%;
    display: flex;
    justify-content: space-between;
    color: #212121;
    font-size: 14px;

    span {
      display: inline-block;
      margin-left: 8px;
      line-height: 32px;

      span {
        font-weight: bold;
      }
    }

    .text {
      width: 500px;
    }
  }

  .lastP {
    margin-top: 16px;
    width: 100%;

    span {
      display: flex;

      span {
        padding: 0 12px;
        height: 32px;
        background: rgba(232, 234, 239, 1);
        border-radius: 2px;

        button {
          background: unset;
          border: 0;
          color: #0558e1;
          font-size: 14px;
        }
      }
    }
  }
}

::v-deep .AbilityApply {
  margin-top: 32px;

  h3 {
    font-size: 16px;
    color: #212121;
    border-bottom: 1px solid #dddee1;
    padding-bottom: 10px;
  }

  ul {
    padding-left: 0px;

    li {
      list-style: none;
      padding: 30px 0;
      border-bottom: 1px solid #dddee1;
      display: flex;

      img {
        width: 100px;
        height: 100px;
      }

      div {
        margin-left: 16px;
        display: flex;
        flex-direction: column;
        justify-content: center;

        h2 {
          margin-bottom: 20px;
          font-size: 20px;
          color: #000;
          display: flex;

          span {
            display: block;
            font-size: 14px;
            color: #ffffff;
            margin-left: 8px;
            background: rgba(0, 184, 230, 0.8);
            display: flex;
            align-items: center;
            padding: 0 5px;
            border-radius: 4px;
          }
        }

        p {
          margin-bottom: 0;
        }
      }
    }

    .clearfix:after {
      display: block;
      content: "";
      clear: both;
    }

    .title {
      color: #0558e1;
      font-size: 18px;
      padding-bottom: 0;
      border-bottom: 0;
    }

    .title:before {
      content: "";
      width: 6px;
      height: 6px;
      display: inline-block;
      border-radius: 50%;
      background: #0558e1;
      vertical-align: middle;
      margin-right: 10px;
      margin-top: 6px;
    }
  }
}

::v-deep .agreeOr > div {
  display: flex;
  align-items: center;

  .el-input {
    margin-right: 10px;
    margin-left: 32px;
  }
}

::v-deep .agreeOr > div:last-of-type {
  margin-top: 15px;
}

.blueAll {
  ::v-deep .el-radio-button__inner {
    width: 80px;
    height: 32px;
    line-height: 32px;
    padding: 0;
    border-radius: 2px;
    background: #ffffff;
    color: #0558e1;
    border: 1px solid #0558e1;
  }

  ::v-deep .el-radio-button__orig-radio:checked + .el-radio-button__inner {
    box-shadow: unset !important;
    background: #0558e1;
    color: #ffffff;
  }
}

.inputBule {
  width: 55px;
  height: 32px;
  line-height: 32px;
  padding: 0;
  border-radius: 2px;
  background: #0558e1;
  color: #ffffff;
  border: 1px solid #0558e1;
}

.redAll {
  margin-left: 10px;

  ::v-deep .el-radio-button__inner {
    width: 80px;
    height: 32px;
    line-height: 32px;
    padding: 0;
    border-radius: 2px;
    border: 1px solid #e83a48;
    background: #ffffff;
    color: #e83a48;
    margin-left: 10px;
  }

  ::v-deep .el-radio-button__orig-radio:checked + .el-radio-button__inner {
    box-shadow: unset !important;
    color: #ffffff;
    background: #e83a48;
  }
}

.blueInput {
  width: 55px;
}
</style>
