<template>
  <div>
    <home-header></home-header>
    <div id="apply-container">
      <!-- <aside>
        <aside-menu></aside-menu>
      </aside> -->
      <article>
        <div class="from-card" v-if="applySuccess">
          <AbilityToApplyFor :dataList="list"></AbilityToApplyFor>
        </div>
        <div class="form-container">
          <div v-if="applySuccess">
            <a-form
              ref="formRef"
              :model="formName"
              name="basic"
              :label-col="{ style: { width: '106px' } }"
              :wrapper-col="{ style: { width: '230px' } }"
              labelAlign="left"
              autocomplete="off"
            >
              <div class="base-info">
                <a-form-item
                  label="申请标题"
                  name="title"
                  :rules="[{ required: true, message: '请输入申请标题' }]"
                >
                  <a-input
                    placeholder="请输入能力申请标题"
                    v-model:value="formName.title"
                  />
                </a-form-item>
              </div>
              <div class="base-info">
                <a-form-item
                  label="申请人信息"
                  name="user"
                  :rules="[{ required: true, message: '请输入申请人' }]"
                >
                  <a-input
                    placeholder="请输入申请人"
                    v-model:value="formName.user"
                    disabled
                  />
                </a-form-item>

                <a-form-item
                  style="margin: 0 22px"
                  label="电话"
                  name="phone"
                  :rules="[
                    {
                      required: true,
                      pattern: /^1[3456789]\d{9}$/,
                      message: '请输入正确的电话号码',
                    },
                  ]"
                >
                  <a-input
                    placeholder="请输入申请人电话"
                    v-model:value="formName.phone"
                  />
                </a-form-item>

                <a-form-item
                  label="单位"
                  name="unit"
                  :rules="[{ required: true, message: '请输入单位' }]"
                >
                  <a-input
                    placeholder="请输入单位"
                    v-model:value="formName.unit"
                    disabled
                  />
                </a-form-item>
              </div>
              <div class="base-info">
                <a-form-item
                  label="应用系统"
                  name="applicationSystem"
                  :rules="[{ required: true, message: '请选择应用系统' }]"
                >
                  <a-select
                    v-model:value="formName.applicationSystem"
                    show-search
                    placeholder="请输入关键字"
                    style="width: 200px"
                    :options="systemOptions"
                    @focus="handleFocus"
                    @blur="handleBlur"
                    @change="systemHandleChange"
                    @search="systemHandleSearch"
                  ></a-select>
                </a-form-item>
                <a-form-item
                  class="applicationScene"
                  label="应用场景"
                  name="applicationScene"
                  :rules="[{ required: true, message: '请选择应用场景' }]"
                  style="width: 6.93rem"
                >
                  <a-select
                    v-model:value="formName.applicationScene"
                    :options="applicationSceneOpthion"
                    mode="tags"
                    :size="size"
                    placeholder="请选择应用场景"
                    :filterOption="false"
                    :searchValue="false"
                    style="width: 5.87rem"
                  ></a-select>
                </a-form-item>
              </div>
              <div>
                <a-form-item
                  label="应用背景"
                  name="applicationBackground"
                  :rules="[{ required: true, message: '请输入应用背景' }]"
                >
                  <a-textarea
                    placeholder="请输入应用背景"
                    v-model:value="formName.applicationBackground"
                    :rows="4"
                  />
                </a-form-item>
              </div>
              <div>
                <a-form-item
                  label="期望效果"
                  name="effectWish"
                  :rules="[{ required: true, message: '请输入期望效果' }]"
                >
                  <a-textarea
                    placeholder="请输入期望效果"
                    v-model:value="formName.effectWish"
                    :rows="4"
                  />
                </a-form-item>
              </div>

              <a-form-item
                style="color: #666; font-size: 16px"
                label="申请单附件"
                name="applyDoc"
              >
                <a-upload
                  v-model:file-list="fileList"
                  name="file"
                  :action="`${baseURL}/upload`"
                  :headers="headers"
                  @change="handleChange"
                  :before-upload="beforeUpload"
                >
                  <a-button
                    style="
                      width: 100px;
                      height: 30px;
                      margin-right: 10px;
                      background: #edf4fc;
                      color: #0087ff;
                      font-size: 14px;
                      border-radius: 6px;
                      border: 1px solid #bbd3ef;
                      padding: 0;
                      text-align: center;
                    "
                  >
                    <upload-outlined></upload-outlined>
                    文件上传
                  </a-button>
                  <span style="font-size: 14px; color: #999">
                    支持doc、docx、jpg、png、jpeg、pdf、xlxs、ppt类型文件
                  </span>
                </a-upload>
              </a-form-item>

              <div class="bottom-btn">
                <a-button
                  style="
                    width: 80px;
                    height: 38px;
                    margin-right: 20px;
                    background: #e1edfa;
                    color: #0087ff;
                    font-size: 14px;
                    border-radius: 6px;
                    border: none;
                    padding: 0;
                    text-align: center;
                  "
                  type="primary"
                  html-type="cancle"
                  @click="resetFields()"
                >
                  退出申请
                </a-button>
                <a-button
                  style="
                    width: 80px;
                    height: 38px;
                    background: #0087ff;
                    color: #fff;
                    font-size: 14px;
                    border-radius: 6px;
                    border: none;
                    padding: 0;
                    text-align: center;
                  "
                  type="primary"
                  html-type="submit"
                  @click="processStartHandle()"
                >
                  提交申请
                </a-button>
              </div>
            </a-form>
          </div>
          <div class="success" v-else>
            <div>
              <img src="../../assets/home/success.png" alt="" />
            </div>
            <p>您已成功申请能力，请耐心等待审批结果，结果会第一时间通知您！</p>
          </div>
        </div>
      </article>
    </div>
  </div>
</template>

<script>
  import AbilityToApplyFor from './AbilityToApplyFor.vue'
  import HomeHeader from '@/views/home/components/header'
  import { reactive, ref, watch, onBeforeUnmount } from 'vue'
  import { useRouter } from 'vue-router'
  import { message } from 'ant-design-vue'
  import qs from 'qs'
  // import { UploadOutlined } from '@ant-design/icons-vue'
  import { Upload } from 'ant-design-vue'
  import {
    lastestPage,
    tabilityapplication,
    startOfBusinessKey,
    updateInstanceId,
    submitApply,
    getUser,
    getUserInfo,
    relaunch,
    selectOne,
  } from '@/api/home'
  import { getCategoryTreePage } from '@/api/personalCenter'
  import mybus from '@/myplugins/mybus'
  import { sgcDel, getApplyForm } from '@/api/personalCenter'
  import { pageWithAttrs } from '@/api/home'
  // import { baseURL } from '@/config'
  // import AsideMenu from './components/asideMenu.vue'

  export default {
    name: '',
    props: {},
    components: {
      HomeHeader,
      AbilityToApplyFor,
      // AsideMenu,
      // UploadOutlined,
    },
    setup() {
      const router = useRouter()
      const disabled = ref(false)
      const list = ref(JSON.parse(localStorage.getItem('applyList')))
      const num = ref(0)
      list.value.map((item) => {
        if (item.checkedList) {
          console.log(item)
          num.value += Number(item.checkedList.length)
        }
      })
      console.log(
        'list',
        list.value
        // list.value[0].children.filter(
        //   (val) => val.id == list.value[0].checkedList[0]
        // )[0].resourceName
      )
      const baseURL = window.SITE_CONFIG.apiURL
      let record = ref('1')
      const text = ref('')
      const formName = reactive({
        title: list.value[0].children
          ? list.value[0].children
              .filter((val) => val.id == list.value[0].checkedList[0])[0]
              .resourceName.concat(
                list.value[0].checkedList.length > 1
                  ? '等能力申请' + num.value + '个'
                  : '能力申请'
              )
          : list.value[0].arr[0].resourceName.concat('能力申请'), // 标题
        applicationSystem: [], // 应用系统
        applicationScene: [], // 应用场景
        applicationBackground: '', // 应用背景
        effectWish: '', // 期望效果
        user: '',
        userId: '',
        phone: '',
        unit: '',
        system: [],
        enclosure: '', //附件
        enclosureName: '', //附件
      })
      const dataList = ref([])
      getUser().then((res) => {
        formName.user = res.data.data.realName
        formName.userId = res.data.data.id
        getUserInfo(formName.userId).then((res) => {
          if (res.data.data.mobile) {
            formName.phone = res.data.data.mobile
          }
          formName.unit = res.data.data.deptName
        })
      })
      // console.log('本地存储====================》', list.value)
      const businessKey = ref(router.currentRoute.value.query.id)
      const taskId = ref(router.currentRoute.value.query.taskId)
      if (businessKey.value) {
        getApplyForm(businessKey.value).then((res) => {
          formName.id = res.data.data.id
          formName.phone = res.data.data.phone
          formName.scene = res.data.data.scene
          formName.basis = res.data.data.basis
          formName.enclosure = res.data.data.enclosure
          // console.log('回填数据================>', res, formName.phone)
        })
      }
      const applicationSceneOpthion = ref([])
      getCategoryTreePage({
        page: 1,
        limit: 20,
        dictTypeId: '1513712507692818433',
        deFlage: 0,
      }).then((res) => {
        res.data.data.list.map((val) => {
          applicationSceneOpthion.value.push({
            value: val.dictLabel,
            label: val.dictLabel,
          })
        })
        // console.log('字典值========>', applicationSceneOpthion.value)
      })
      // console.log(formName.system)
      const formRef = ref()
      const applySuccess = ref(true)
      // const rootObj = null
      const dataForm = {
        processDefinitionKey: 'abilityprocess',
      }
      const callbacks = {
        startProcessSuccessCallback: null,
        startProcessErrorCallback: null,
        formSaveSuccessCallback: null,
        formSaveErrorCallback: null,
      }
      const instanceIdUrl = '/processForm/tabilityapplication/updateInstanceId'
      const formUrl = '/processForm/tabilityapplication'
      //退出返回上一页
      const resetFields = () => {
        window.history.go(-1)
      }
      const processStartHandle = () => {
        if (businessKey.value) {
          const obj = ref({})
          for (const key in formName) {
            if (key !== 'formNameSystem') {
              obj.value[key] = formName[key]
            }
          }
          obj.value.system = formName.system[0].resourceName
          tabilityapplication(obj.value).then((upres) => {
            if (upres.data.code == 0) {
              relaunch({ data: obj.value, taskId: taskId.value }).then(
                (res) => {
                  // console.log('驳回================>', res)
                  if (res.data.code == 0) {
                    message.success('重新发起流程成功！')
                    window.setTimeout(() => {
                      window.history.go(-1)
                    }, 1000)
                  } else {
                    message.error('重新发起流程失败！')
                  }
                }
              )
            } else {
              message.error('数据更新失败！')
            }
          })
        } else {
          formRef.value.validate().then(() => {
            if (!formUrl) {
              return message.error('请设置保存表单的URL')
            }
            if (!formName) {
              return message.error('请设置表单名称')
            }
            let ids = []
            formName.system = []
            console.log('list==================', list.value)
            list.value.map((val) => {
              val.arr.map((item) => {
                if (item.type !== '基础设施') {
                  formName.system.push({
                    resourceId: item.resourceId,
                    resourceName: item.resourceName,
                  })
                  console.log(item.id)
                  if (item.id) {
                    ids.push(item.id)
                  }
                } else {
                  let obj = {}
                  Object.assign(obj, formName)
                  console.log('摄像头===============>', obj, item)
                  obj.system = []
                  item.note1 = JSON.parse(item.note1)
                  item.note1.map((sxt) => {
                    obj.system.push({
                      resourceId: sxt.idtCameraChannel + '',
                      resourceName: sxt.channelName,
                      cameraId: sxt.channelId,
                    })
                  })
                  submitApply(obj).then((res) => {
                    applySuccess.value = false
                    console.log('摄像头申请================>', res)
                    if (item.id) {
                      sgcDel({ ids: [item.id] }).then((res) => {
                        if (res.data.msg === 'success') {
                          mybus.emit('getSgcNum')
                        }
                      })
                    }
                  })
                }
              })
            })
            console.log('提交数据==========================>', formName, ids)
            if (formName.system.length !== 0) {
              submitApply(formName).then((res) => {
                applySuccess.value = false
                message.success('操作成功！')
                console.log('能力申请================>', res)
                if (ids && ids.length > 0) {
                  sgcDel({ ids: ids }).then((res) => {
                    if (res.data.msg === 'success') {
                      mybus.emit('getSgcNum')

                      router.push({
                        path: '/DetailsPageconetent',
                        query: {
                          select: '组件服务',
                        },
                      })
                    }
                  })
                } else {
                  router.push({
                    path: '/DetailsPageconetent',
                    query: {
                      select: '组件服务',
                    },
                  })
                }
              })
            }
          })
        }
      }
      // 启动流程
      const startProcess = (processDefinitionKey, businessKey, formData) => {
        var data = {
          processDefinitionKey: processDefinitionKey,
          businessKey: businessKey,
          variables: formData,
        }
        // proxy.$http['post']('/act/running/startOfBusinessKey', data)
        startOfBusinessKey(data)
          .then(({ data: res }) => {
            applySuccess.value = false
            if (res.code !== 0) {
              if (callbacks.startProcessErrorCallback) {
                callbacks.startProcessErrorCallback(res.data)
              }
            }
            message({
              message: '操作成功',
              type: 'success',
              duration: 500,
              onClose: () => {
                if (callbacks.startProcessSuccessCallback) {
                  callbacks.startProcessSuccessCallback(res.data)
                }
              },
            })
            if (instanceIdUrl) {
              var params = qs.stringify({
                processInstanceId: res.data.processInstanceId,
                processDefinitionKey: processDefinitionKey,
                businessKey: businessKey,
              })
              // proxy.$http['post'](instanceIdUrl + '?' + params)
              updateInstanceId(params).then(
                // ({ data: res }) => {}
                () => {}
              )
            }
          })
          .catch(() => {})
      }

      const options = ref([
        {
          value: '政法委',
          label: '政法委',
        },
        {
          value: '公安局',
          label: '公安局',
        },
        {
          value: '卫健委',
          label: '卫健委',
        },
        {
          value: '城市管理局',
          label: '城市管理局',
        },
        {
          value: '生态环境局',
          label: '生态环境局',
        },
        {
          value: '交通运输局',
          label: '交通运输局',
        },
      ])
      const systemOptions = ref([])
      const systemOptions2 = ref([])

      const handleChange = (info) => {
        if (info.file.status !== 'uploading') {
          // console.log(info.file, info.fileList)
        }

        if (info.file.status === 'done') {
          message.success(`${info.file.name} 上传成功`)
          formName.enclosure = info.file.response.data
          formName.enclosureName = info.file.name
        } else if (info.file.status === 'error') {
          message.error(`${info.file.name} 上传失败`)
        }
      }
      const beforeUpload = (file) => {
        const isPNG =
          file.type === 'image/png' ||
          'image/doc' ||
          'image/docx' ||
          'image/jpg' ||
          'image/png' ||
          'image/jpeg' ||
          'image/pdf' ||
          'image/xlxs' ||
          'image/ppt'

        if (!isPNG) {
          message.error(`上传失败`)
        }

        return isPNG || Upload.LIST_IGNORE
      }
      const fileList = ref([])
      // 应用系统下拉
      const systemHandleChange = (value) => {
        console.log(`selected ${value}`)
      }
      const systemHandleSearch = (value) => {
        console.log(`search ${value}`)
        text.value = value
        systemOptions.value = systemOptions2.value.filter(
          (item) => item.label.search(text.value) > -1
        )
      }
      pageWithAttrs({
        pageNum: 1,
        pageSize: 99999,
        type: '应用资源',
        name: '',
        infoList: [],
      }).then((res) => {
        if (res.data.code == 0) {
          if (res.data.data.records.length == 0) {
            message.warning('该关键词，暂无应用资源！')
          } else {
            res.data.data.records.map((val) => {
              systemOptions2.value.push({
                value: val.name,
                label: val.name,
              })
            })
            // console.log('第一次获取===================>', systemOptions2.value)
          }
        } else {
          message.error('应用系统获取数据失败!')
        }
      })
      const handleBlur = () => {
        console.log('blur')
      }

      const handleFocus = () => {
        console.log('focus')
        // console.log(formName.applicationSystem)
        // formName.applicationSystem = []
        systemOptions.value = systemOptions2.value
        // systemOptions.value = []
      }

      // const filterOption = (input, option) => {
      //   return option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0
      // }

      onBeforeUnmount(() => {
        mybus.off('reomveOldData')
      })
      return {
        formRef,
        formName,
        instanceIdUrl,
        formUrl,
        processStartHandle,
        resetFields,
        startProcess,
        options,
        fileList,
        list,
        headers: {
          authorization: 'authorization-text',
        },
        handleChange,
        applySuccess,
        disabled,
        baseURL,
        beforeUpload,
        dataList,
        systemHandleChange,
        systemHandleSearch,
        handleBlur,
        handleFocus,
        systemOptions,
        applicationSceneOpthion,
      }
    },
  }
</script>

<style scoped lang="less">
  #apply-container {
    // background-color: #f5f8fc;
    height: 100%;
    width: 100%;
    margin: 0.8rem auto 0;
    display: flex;
    justify-content: space-between;
    aside {
      width: 282px;
      height: 96%;
      overflow-y: auto;
      background-color: #fff;
      margin: 1% 0 3%;
    }
    article {
      width: 1090px;
      height: 99%;
      overflow-y: auto;
      background-color: #fff;
      margin: 1% auto;
    }
    .form-container {
      padding: 20px 20px 30px 20px;
      .title {
        font-size: 20px;
        color: #000;
        font-weight: bold;
        margin-bottom: 20px;
      }
    }
    .base-info {
      display: flex;
      justify-content: space-between;
    }
    :deep(.ant-form-item-label) {
      label {
        color: #666;
        font-size: 16px;
        &::after {
          content: '';
        }
      }
    }
    :deep(.ant-form-item-required) {
      &::before {
        font-size: 8px;
        margin-right: 10px;
      }
    }

    :deep(.ant-input) {
      border: 1px solid #e0e0e0;
      border-radius: 6px;
    }
    .success {
      div {
        width: 100px;
        margin: 80px auto 40px;
      }
      text-align: center;
      font-size: 20px;
      font-weight: bold;
      color: #000;
    }
  }
  .applicationScene {
    :deep(.ant-select-selector) {
      overflow-x: scroll;
    }
    :deep(.ant-select-selection-overflow) {
      flex-wrap: nowrap;
    }
  }
  textarea {
    resize: none;
    font-size: 14px;
  }
  .bottom-btn {
    display: flex;
    justify-content: center;
    // position: fixed;
  }
</style>
