<template>
  <div>
    <TableHeader datePicker nextFlag theCurrentTime showTimeAll showExport ref='TableHeaderRef' showCustomColumn>
      <template #select>
        <el-form-item label='项目名称'>
          <el-input v-model='tableStore.table.params.projectName' placeholder='请输入项目名称' maxlength="32" show-word-limit clearable></el-input>
        </el-form-item>
        <el-form-item label='所在地市'>
          <el-select v-model='tableStore.table.params.city' clearable placeholder='请选择所在地市' filterable>
            <el-option
                v-for='item in areaOptionList'
                :key='item.id'
                :label='item.name'
                :value='item.name'
            ></el-option>
          </el-select>
        </el-form-item>
      </template>
      <template #operation>
        <!-- <el-button icon='el-icon-Download' type='primary'>导出</el-button> -->
      </template>
    </TableHeader>
    <Table ref='tableRef'/>
  </div>

  <el-dialog
      title='干扰源用户详细信息'
      v-if='dialogVisible'
      v-model='dialogVisible'
      width='65%'
      :append-to-body='true'
      :close-on-click-modal='false'
      draggable
  >
    <BpmUserReportDetail :id='interId' ref='detailsRef'></BpmUserReportDetail>
  </el-dialog>
  <!-- 查看详情 detail 新增/修改 create-->
  <addForm
      ref='addForms'
      @onSubmit='tableStore.index()'
      :update='update'
      :normalizedControl='true'
      openType='create'
  ></addForm>
</template>
<script setup lang='ts'>
defineOptions({
  name: 'supervision/interferenceUserTable'
})

import {ref, onMounted, provide, watch} from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import {useDictData} from '@/stores/dictData'
import addForm from '@/views/pqs/supervise/interfere/components/undocumented/addForm.vue'
import {getUserReportById, getUserReportByFangAnId} from '@/api/supervision-boot/interfere'
import BpmUserReportDetail from '../../components/undocumented/detail.vue'
import {useAdminInfo} from '@/stores/adminInfo'
import {ElMessage, ElMessageBox} from 'element-plus'
import {userReportRenewalCancel} from '@/api/process-boot/generalTest'

const dictData = useDictData()
const flag = ref(false)
const areaOptionList = dictData
    .getBasicData('jibei_area')
    .filter(item => !(item.name == '超高压' || item.name == '风光储'))
const statusSelect = dictData.statusSelect()
//获取登陆用户姓名和部门
const adminInfo = useAdminInfo()
const jb_pl = ref(false)
const jb_dky = ref(false)
const update = ref(false)
const addForms = ref()
jb_pl.value =
    adminInfo.$state.roleCode.filter(item => {
      return item == 'jb_pl'
    }).length != 0
        ? true
        : false
jb_dky.value =
    adminInfo.$state.roleCode.filter(item => {
      return item == 'jb_dky'
    }).length != 0
        ? true
        : false

const {push, options, currentRoute} = useRouter()
const TableHeaderRef = ref()
const tableStore = new TableStore({
  url: '/supervision-boot/userReport/getNormalUserPage',
  publicHeight: 65,
  method: 'POST',
  filename:'常态化干扰源用户管理',
  column: [
    {title: '序号',  width: 80,formatter: (row: any) => {
        return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
      }},
    {field: 'city', title: '所在地市', minWidth: 80},
    {
      field: 'substation',
      title: '厂站名称',
      minWidth: 100,
      formatter: (row: any) => {
        row.cellValue = row.cellValue ? row.cellValue : '/'
        return row.cellValue
      }
    },
    {field: 'projectName', title: '项目名称', minWidth: 170},
    {
      field: 'userType',
      title: '用户性质',
      minWidth: 150,
      formatter: (obj: any) => {
        const userType = obj.row.userType
        return getUserTypeName(userType)
      }
    },
    {field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130},
    {
      field: 'userStatus',
      title: '用户状态',
      minWidth: 100,
      render: 'tag',
      custom: {
        0: 'primary',
        1: 'primary',
        2: 'success',
        3: 'warning'
      },
      replaceValue: {
        0: '可研',
        1: '建设',
        2: '运行',
        3: '退运'
      }
    },
    {
      field: 'status',
      title: '信息更新状态',
      minWidth: 100,
      render: 'tag',
      custom: {
        0: 'warning',
        1: 'primary',
        2: 'success',
        3: 'danger',
        4: 'warning',
        null: 'primary'
      },
      replaceValue: {
        0: '待提交审批',
        1: '审批中',
        2: '审批通过',
        3: '审批不通过',
        4: '已取消',
        null: '/'
      }
    },

    {
      title: '详细信息',
      minWidth: 100,
      render: 'buttons',
      buttons: [
        {
          name: 'productSetting',
          title: '详情',
          type: 'primary',
          icon: 'el-icon-EditPen',
          render: 'basicButton',
          click: row => {
            update.value = row.status == null ? false : true
            setTimeout(() => {
              open(row)
            }, 100)
          }
        }
      ]
    },
    {
      field: 'createBy',
      title: '填报人',
      minWidth: 80,
      formatter: (row: any) => {
        return dictData.state.userList.filter(item => item.id == row.cellValue)[0]?.name
      }
    },
    // visible:!jb_pl.value && !jb_dky.value?true:false,
    {
       title: '操作',fixed: 'right',
      minWidth: 300,
     
      render: 'buttons',

      buttons: [
        {
          name: 'productSetting',
          title: '流程详情',
          type: 'primary',
          icon: 'el-icon-EditPen',
          render: 'basicButton',
          click: row => {
            handleAudit(row.processInstanceId, row.historyInstanceId)
          },
          disabled: row => {
            return !row.processInstanceId
          }
        },
        {
          name: 'edit',
          title: '编辑',
          type: 'primary',
          icon: 'el-icon-Open',
          render: 'basicButton',
          showDisabled: row => {
            return (
                row.createBy != adminInfo.$state.id ||
                !(row.status == 0 || row.status == 2 || row.status == null)
            )
          },
          disabled: row => {
            return !(row.status == 0 || row.status == 2 || row.status == null)
          },
          click: row => {
            update.value = row.status == null ? false : true
            setTimeout(() => {
              addForms.value.open({
                title: '编辑',
                row: row
              })
            }, 100)
          }
        },
        {
          name: 'edit',
          title: '重新发起',
          type: 'warning',
          icon: 'el-icon-Open',
          render: 'basicButton',
          disabled: row => {
            return row.createBy != adminInfo.$state.id || !(row.status == 3 || row.status == 4)
          },
          click: row => {
            addForms.value.open({title: '重新发起', row: row})
          }
        },
        {
          name: 'cancel',
          title: '取消',
          type: 'danger',
          icon: 'el-icon-Open',
          render: 'basicButton',
          disabled: row => {
            return row.createBy != adminInfo.$state.id || row.status != 1
          },
          click: row => {
            cancelLeave(row)
          }
        },
        {
          name: 'productSetting',
          title: '入网设计方案申请',
          type: 'primary',
          icon: 'el-icon-EditPen',
          render: 'basicButton',
          // disabled: row => {
          //     return jb_pl.value || jb_dky.value
          // },
          click: row => {
            toFangAn(row, 0)
          }
        },
        {
          name: 'productSetting',
          title: '治理工程验收申请',
          type: 'primary',
          icon: 'el-icon-EditPen',
          render: 'basicButton',
          disabled: row => {
            return row.needGovernance == 0 //&& row.type == true
          },
          showDisabled: row => {
            return row.type == false
          },
          click: row => {
            toFangAn(row, 1)
          }
        }

        // {
        //     name: 'productSetting',
        //     title: '/',
        //     type: 'primary',
        //     icon: 'el-icon-EditPen',
        //     render: 'basicButton',
        //     disabled: row => {
        //         return !jb_pl.value && !jb_dky.value
        //     }
        // }
      ]
    }
  ],

  beforeSearchFun: () => {
    tableStore.table.params.orgNo = tableStore.table.params.deptIndex
    tableStore.table.params.relationUserName = tableStore.table.params.userName
  },
  exportProcessingData: () => {
        tableStore.table.allData = tableStore.table.allData.filter(item => {
            item.userStatus =
                item.userStatus == 0 ? '可研' : item.userStatus == 1 ? '建设' : item.userStatus == 2 ? '运行' : '退运'
            item.status =
                item.status == 0
                    ? '待提交审批'
                    : item.status == 1
                    ? '审批中'
                    : item.status == 2
                    ? '审批通过'
                    : item.status == 3
                    ? '审批不通过'
                    : '已取消'
            return item
        })
    }
})

tableStore.table.params.city = ''
tableStore.table.params.projectName = ''
tableStore.table.params.loadType = ''
tableStore.table.params.userName = ''
tableStore.table.params.relationUserName = ''
tableStore.table.params.dataType = 0
tableStore.table.params.orgId = adminInfo.$state.deptId
tableStore.table.params.aisFileUpload = ''
const dialogVisible = ref(false)
const interId = ref()
provide('tableStore', tableStore)
const detailsRef = ref(null)
/** 打开弹窗 */
const open = async val => {
  interId.value = val.id
  dialogVisible.value = true
}

/** 流程实例详情 */
const handleAudit = (instanceId: string, historyInstanceId: string) => {
  push({
    name: 'BpmProcessInstanceDetail',
    state: {
      id: instanceId,
      historyInstanceId
    }
  })
}
/**取消流程操作*/
const cancelLeave = async (row: any) => {
  // 二次确认
  const {value} = await ElMessageBox.prompt('请输入取消原因', '取消流程', {
    confirmButtonText: '确定',
    cancelButtonText: '取消',
    inputType: 'textarea',
    inputPattern: /^[\s\S]*.*\S[\s\S]*$/, // 判断非空，且非空格
    inputErrorMessage: '取消原因不能为空'
  })
  // 发起取消
  let data = {
    id: row.id,
    processInstanceId: row.processInstanceId,
    reason: value
  }
  await userReportRenewalCancel(data).then(res => {
    ElMessage.success('取消成功')
    // 加载数据
    tableStore.index()
  })
}

const needGovernance = ref()
/** 方案审查 */
const toFangAn = (row: any, typeNo: number) => {
  //查询详情拿到needGovernance
  /** 获得数据 */
  getUserReportById(row.id).then(res => {
    if (res.data.userType == '0' || res.data.userType == '1') {
      needGovernance.value = res.data.userReportProjectPO?.needGovernance
    } else if (
        res.data.userType == '2' ||
        res.data.userType == '3' ||
        res.data.userType == '4' ||
        res.data.userType == '5'
    ) {
      needGovernance.value = res.data.userReportSubstationPO?.needGovernance
    } else if (res.data.userType == '6') {
      needGovernance.value = res.data.userReportSensitivePO?.needGovernance
    }
    push({
      name: 'ProgramReview',
      query: {
        id: row.id,
        type: typeNo,
        needGovernance: needGovernance.value
      }
    })
    flag.value = true
  })
}

const toFangAnById = (id: string, typeNo: number) => {
  //查询详情拿到needGovernance
  /** 获得数据 */
  getUserReportByFangAnId(id).then(res => {
    let userId;
    if (res.data.userType == '0' || res.data.userType == '1') {
      userId = res.data.userReportProjectPO?.id
      needGovernance.value = res.data.userReportProjectPO?.needGovernance
    } else if (
        res.data.userType == '2' ||
        res.data.userType == '3' ||
        res.data.userType == '4' ||
        res.data.userType == '5'
    ) {
      userId = res.data.userReportSubstationPO?.id
      needGovernance.value = res.data.userReportSubstationPO?.needGovernance
    } else if (res.data.userType == '6') {
      userId = res.data.userReportSensitivePO?.id
      needGovernance.value = res.data.userReportSensitivePO?.needGovernance
    }
    push({
      name: 'ProgramReview',
      query: {
        id: userId,
        fangAnId: id,
        type: typeNo,
        needGovernance: needGovernance.value
      }
    })
    flag.value = true
  })
}

/**获取用户性质*/
const getUserTypeName = (userType: any) => {
  if (userType === 0) {
    return '新建电网工程'
  }
  if (userType === 1) {
    return '扩建电网工程'
  }
  if (userType === 2) {
    return '新建非线性负荷用户'
  }
  if (userType === 3) {
    return '扩建非线性负荷用户'
  }
  if (userType === 4) {
    return '新建新能源发电站'
  }
  if (userType === 5) {
    return '扩建新能源发电站'
  }
  if (userType === 6) {
    return '敏感及重要用户'
  }
  return '新建电网工程'
}
watch(
    () => currentRoute.value.path,
    () => {
      if (flag.value && options.history.state.forward?.split('/')[1] == 'bpm') {
        tableStore.index()
        flag.value = false
      }
    },
    {
      deep: true
    }
)

//初始进来时如果有id就直接打开重新发起
onMounted(async () => {
  tableStore.index()
})
/**
 * 监听 props.id变了，根据id查询详细数据用户重新发起
 */
const props = defineProps(['id', 'businessKey'])
watch(() => props.id, async (newValue, oldValue) => {
  if (newValue === 'null') return; // 直接返回，避免后续逻辑执行
  const fullId = newValue.split('@')[0]
  let nowTime = Date.now()
  const routeTime = Number(newValue.split('@')[1])
  if (isNaN(routeTime) || nowTime - routeTime > import.meta.env.VITE_ROUTE_TIME_OUT) return // 路由时间超过500ms，则不执行
  // 此处较为复杂，需要判断是更新、入网检测、治理工程验收
  if (props.businessKey == 'user_go_net') {
    // 入网检测
    toFangAnById(fullId, 0)
  } else if (props.businessKey == 'user_treat_check') {
    // 治理工程验收
    toFangAnById(fullId, 1)
  } else {
    await getUserReportById(fullId).then(res => {
      if (res && res.code == 'A0000') {
        addForms.value.open({
          title: '重新发起',
          row: res.data
        })
      }
    })
  }

}, {immediate: true})


</script>
