<template>
    <div class="app-container">
      <van-nav-bar
        title="纠纷调请"
        left-arrow
        fixed
        placeholder
        @click-left="goBack()"
        z-index="998"
      >
        <template #right>
          <van-icon name="../../../static/images/icon/icon_flow.png" size="20" @click="openMenu" v-if="!!id"/>
        </template>
      </van-nav-bar>

      <div class="main" style="padding-bottom: 1rem;">
        <van-form ref="form">
          <div :class="formEnabled.baseFormEnabled ? '' : 'noModify'">
            <p class="topTit">纠纷调请</p>
            <template> <!-- 申请 基本信息 -->
              <div>
                <p class="main_title">基本信息</p>
                <div class="main_box">
                  <van-field :readonly="true" v-model="arbitrationData.applicant" label="申请人" placeholder="申请人" input-align="right" required :rules="[{ required: true }]"/>
                  <van-field required :readonly="true" v-model="arbitrationData.applicantPhone" label="联系电话" placeholder="联系电话" input-align="right" type="digit" :rules="[{pattern: /(^\d{7}(\d{4})?$)/}]"/>
                  <field-select
                    v-model="arbitrationData.applyProposerId"
                    label="宅基地申请"
                    value-key="projectName"
                    data-key="id"
                    placeholder="选择宅基地申请"
                    :rules="[{ required: true }]"
                    required
                    :readonly="!formEnabled.baseFormEnabled"
                    :columns="userHouseApplyProposer"
                  />
                  <van-field :readonly="!formEnabled.baseFormEnabled" v-model="arbitrationData.disputant" label="纠纷人" placeholder="纠纷人" input-align="right" required :rules="[{ required: true }]"/>
                  <field-date-picker
                    v-model="arbitrationData.applyTime"
                    label="申请时间"
                    placeholder="请选择申请时间"
                    :rules="[{ required: true }]"
                    formatter="yyyy-MM-dd"
                    required
                    :readonly="!formEnabled.baseFormEnabled"
                  />
                </div>
              </div>

              <div>
                <p class="main_title">纠纷事项</p>
                <div class="main_box">
                  <van-field
                    rows="3"
                    autosize
                    type="textarea"
                    placeholder="纠纷事项"
                    input-align="left"
                    v-model="arbitrationData.disputes"
                    :readonly="!formEnabled.baseFormEnabled"
                    :rules="[{ required: true }]" required
                  />
                </div>
              </div>

              <div>
                <p class="main_title">备注说明</p>
                <div class="main_box">
                  <van-field
                    rows="3"
                    autosize
                    type="textarea"
                    placeholder="备注说明"
                    input-align="left"
                    v-model="arbitrationData.remark"
                    :readonly="!formEnabled.baseFormEnabled"
                    :rules="[{ required: true }]" required
                  />
                </div>
              </div>
            </template>
          </div>

        </van-form>
      </div>

      <!-- 底部按钮 -->
      <van-goods-action style="z-index: 999;" v-if="formVisible.editVisible || formVisible.operationVisible || formVisible.approvalVisible">
        <template v-if="formVisible.editVisible">
          <van-goods-action-button type="primary" text="保存"  @click="onSubmit('add')" :disabled="!formEnabled.baseFormEnabled" v-if="formEnabled.baseFormEnabled"/>
          <van-goods-action-button type="primary" :text="formEnabled.baseFormEnabled ? '保存并提交' : '提交'"  @click="onSubmit(formEnabled.baseFormEnabled ? 'save_and_submit' : 'submit')" v-if="formEnabled.submitEnabled"/>
        </template>
        <template v-if="formVisible.approvalVisible">
          <van-goods-action-button type="primary" text="受理"  @click="onSubmit('agree')" :disabled="!formEnabled.approvalEnabled"/>
          <van-goods-action-button type="danger" text="驳回"  @click="onSubmit('reject')" v-if="formEnabled.rejectEnabled"/>
        </template>
        <template v-if="formVisible.operationVisible">
          <van-goods-action-button type="primary" text="调解"  @click="onSubmit('mediate')" v-if="formEnabled.mediateEnabled"/>
          <van-goods-action-button type="danger" text="仲裁"  @click="onSubmit('arbitrate')" v-if="formEnabled.arbitrateEnabled"/>
          <van-goods-action-button type="primary" text="归档"  @click="onSubmit('archive')" v-if="formEnabled.archiveEnabled"/>
        </template>
      </van-goods-action>

      <van-popup
        v-model="menuVisible"
        closeable
        position="bottom"
        :close-on-click-overlay="true"
        :lazy-render="false"
      >
        <van-cell title="菜单"></van-cell>

        <van-cell-group inset>
          <van-cell title="调解/冲裁员" is-link @click="openArbitrationHandlerPage()"/>
          <van-cell title="处理过程" is-link @click="openArbitrationProcessPage()"/>
        </van-cell-group>
      </van-popup>
    </div>
</template>

<script>

import FieldSelect from "@/components/form/FieldSelect";
import FieldDatePicker from "@/components/form/FieldDatePicker";
import {formatDate} from "element-ui/src/utils/date-util.js";
import {getInfo} from '@/api/login/index'
import {Notify} from "vant";
import { getList } from "@/api/onlineHome/homestead/application";
import { addArbitration, getArbitrationDetail, submitArbitration, editArbitration } from "@/api/onlineHome/homestead/arbitration";

// 意图
const INTENT_VIEW = 1;
const INTENT_EDIT = 2;
const INTENT_ADD = 3;

export default {
  name: "ArbitrationDetail",
    components: {
      FieldDatePicker, FieldSelect},
    data() {
    return {
      // 申请ID
      id: '',
      // 表单数据
      arbitrationData: {
        applicantPhone: '',
        applyProposerId: '',
        applicant: '',
        disputant: '',
        disputes: '',
        remark: '',
        applyTime: '',
        deptName: '',
        disputeStatus: '1',
      },
      // 表单意图
      operationIntent: INTENT_ADD,
      // 显示控制
      formVisible: {
        editVisible: false,
        approvalVisible: false,
        operationVisible: false,
        finishVisible: false,
      },
      // 表单启用控制
      formEnabled: {
        baseFormEnabled: false,
        submitEnabled: false,
        approvalEnabled: false,
        rejectEnabled: false,
        mediateEnabled: false,
        arbitrateEnabled: false,
        archiveEnabled: false,
      },
      currentUserRole: null,
      userHouseApplyProposer: [],
      menuVisible: false,
    };
  },
  created() {
    this.id = this.$route.query.id;
    this.type = this.$route.query.type;
    this.getFormIntent();
    this.getDetail();
    this.getUserHouseApplyProposer();
  },
  methods: {
    // 初始化当前数据, 有ID则查询, 否则新增
    getDetail(){
      this.reset();
      if(this.id)
      {
        getArbitrationDetail(this.id).then(response => {
          this.init(response.data);
        });
      }
      else
      {
        this.init();
        this.getApplyerDetail();
      }
    },
    // 全局初始化
    init(value) {
      const role = this.$store.getters.roles;
      this.currentUserRole = role[0];

      // 默认状态
      this.formVisible.editVisible = false;
      this.formVisible.approvalVisible = false;
      this.formVisible.operationVisible = false;

      this.formEnabled.baseFormEnabled = false;
      this.formEnabled.submitEnabled = false;
      this.formEnabled.approvalEnabled = false;
      this.formEnabled.rejectEnabled = false;
      this.formEnabled.mediateEnabled = false;
      this.formEnabled.arbitrateEnabled = false;
      this.formEnabled.archiveEnabled = false;

      switch (this.operationIntent) {
        // 查看
        case INTENT_VIEW:
          this.arbitrationData = value;
          switch(value.disputeStatus)
          {
            case '1': // 草稿
              this.formEnabled.submitEnabled = true;
              this.formVisible.editVisible = true;
              break;
            case '2': // 待审
              this.formVisible.approvalVisible = true;
              this.formEnabled.approvalEnabled = true;
              this.formEnabled.rejectEnabled = true;
              break;
            case '3': // 受理
              this.formVisible.operationVisible = true;
              this.formEnabled.mediateEnabled = true;
              this.formEnabled.arbitrateEnabled = true;
              break;
            case '4': // 驳回
              this.formVisible.approvalVisible = true;
              this.formEnabled.approvalEnabled = true;
              break;
            case '5': // 调解
              this.formVisible.operationVisible = true;
              this.formEnabled.arbitrateEnabled = true;
              this.formEnabled.archiveEnabled = true;
              break;
            case '6': // 仲裁
              this.formVisible.operationVisible = true;
              this.formEnabled.archiveEnabled = true;
              break;
            case '7': // 归档
              break;
            default:
              break;
          }
          break;

        // 编辑/审批
        case INTENT_EDIT:
          this.arbitrationData = value;
          this.formEnabled.baseFormEnabled = true;
          this.formVisible.editVisible = true;
          this.formEnabled.submitEnabled = true;
          break;

        // 新建
        case INTENT_ADD:
          this.formEnabled.baseFormEnabled = true;
          this.formVisible.editVisible = true;
          break;
      }
    },
    // 获取query的意图
    getFormIntent() {
      console.log(this.type);
      switch (this.type) {
        case 'done':
        case 'view':
          this.operationIntent = INTENT_VIEW;
          break;
        case 'modify':
        case 'audit':
        case 'todo':
          this.operationIntent = INTENT_EDIT;
          break;
        case 'add':
        default:
          this.operationIntent = INTENT_ADD;
          break;
      }
      return this.operationIntent;
    },
    // 获取日期, yyyy-MM-dd
    getDate(d) {
      return formatDate(d ? d : new Date(), 'yyyy-MM-dd');
    },
    // 初始化基础表单
    reset() {
      this.$set(this.arbitrationData, 'applicantPhone', '');
      this.$set(this.arbitrationData, 'applyProposerId', '');
      this.$set(this.arbitrationData, 'applicant', '');
      this.$set(this.arbitrationData, 'disputant', '');
      this.$set(this.arbitrationData, 'disputes', '');
      this.$set(this.arbitrationData, 'remark', '');
      this.$set(this.arbitrationData, 'deptName', '');
      this.$set(this.arbitrationData, 'disputeStatus', 1);
      this.$set(this.arbitrationData, 'applyTime', this.getDate());
    },
    //返回上一步操作
    goBack(){
      this.$router.push({name: this.$router.back(-1)});
    },
    // 全局提交
    onSubmit(intent){
      console.log(this.arbitrationData, intent);
      switch (intent) {
        case 'add':
        case 'modify':
          this.saveArbitration();
          break;
        case 'submit':
          this.submitArbitration();
          break;
        case 'save_and_submit':
          this.saveArbitration(true);
          break;
        case 'agree':
          this.agreeArbitration();
          break;
        case 'reject':
          this.rejectArbitration();
          break;
        case 'mediate':
          this.mediateArbitration();
          break;
        case 'arbitrate':
          this.arbitrateArbitration();
          break;
        case 'archive':
          this.archiveArbitration();
          break;
        default:
          console.error('Unknown intent! ', intent);
          break;
      }
    },
    // 获取申请人信息
    getApplyerDetail(){
      getInfo().then(res => {
        let user = res.user;
        console.log(user);
        this.$set(this.arbitrationData, 'applicantPhone', user.phonenumber);
        this.$set(this.arbitrationData, 'applicant', user.nickName);
      });
    },
    // 检查字符串, 不符合返回true
    checkString(value, regexp) {
      let res = value === undefined || value === null || value === '' || value.toString().trim().length === 0;
      if(res)
        return true;
      if(regexp)
        res = !value.match(regexp);
      return res;
    },
    // 保存申请(是否提交)
    saveArbitration(submit) {
      this.$refs.form.validate().then(() => {
        /*if(this.checkString(this.arbitrationData.tHouseApplyProposedSituation.theGeom))
        {
          this.notify("请标注宅基地位置!", 'danger');
          return;
        }*/
        console.log("进行保存", this.arbitrationData);
        (this.arbitrationData.id ? editArbitration : addArbitration)(this.arbitrationData).then((response) => {
          if(submit && this.arbitrationData.id)
          {
            this.submitArbitration();
          }
          else
          {
            this.notify("保存成功", 'success');
            this.goBack();
          }
        }).catch((e) => {
          this.notify("保存失败!", 'danger');
        }).finally(() => {
        });
      }).catch(e => {
        this.notify('请填写完整表单', 'danger');
        return;
      });
    },
    submitArbitration() {
      this.setArbitrationStatus('2', '提交');
    },
    agreeArbitration() {
      this.setArbitrationStatus('3', '受理');
    },
    rejectArbitration() {
      this.setArbitrationStatus('4', '驳回');
    },
    mediateArbitration() {
      this.setArbitrationStatus('5', '调解');
    },
    arbitrateArbitration() {
      this.setArbitrationStatus('6', '仲裁');
    },
    archiveArbitration() {
      this.setArbitrationStatus('7', '归档');
    },
    setArbitrationStatus(status, reason) {
      submitArbitration(this.arbitrationData.id, status).then((response) => {
        this.notify(`${reason}成功`, 'success');
        this.goBack();
      }).catch((e) => {
        this.notify(`${reason}成功失败!`, 'danger');
      }).finally(() => {
      });
    },
    // 请求结果提示工具函数
    notify(message, type) {
      Notify.clear();
      Notify({ type: type || 'primary', message: message });
    },
    getUserHouseApplyProposer()
    {
      getList().then((resp) => {
        this.userHouseApplyProposer = resp.rows;
      });
    },
    openMenu() {
      this.menuVisible = true;
    },
    openArbitrationProcessPage()
    {
      this.$router.push({name:'arbitrationProcessList', query: {
          arbitrationId: this.arbitrationData.id,
        }});
    },
    openArbitrationHandlerPage()
    {
      this.$router.push({name:'arbitrationHandlerList', query: {
          arbitrationId: this.arbitrationData.id,
        }});
    },
  },
  watch: {
  }
}
</script>

<style scoped lang="scss">
  .app-container {
    padding-bottom: 5%;
  }
  .examine_box{
    background-color: #1D6FE9!important;
    padding: 0.18rem!important;
    padding-left: 0!important;
    border-radius: 0.15rem!important;
    margin-top: 0.3rem!important;
  }
  .examine_box .van-col:first-child{
    color: #FFF!important;
    font-size: 0.45rem!important;
    text-align: center!important;
  }
  .examine_box .van-col:last-child{
    background-color: #FFF!important;
    border-radius: 0.15rem!important;
    overflow: hidden!important;
    .van-radio-group--horizontal{
      padding: 0.2rem 0;
      border-bottom: 1px solid #eee;
    }
  }
  #mapWrap{
    width: 96%;
    margin: 0 auto;
    border-bottom-left-radius: 12px;
    border-bottom-right-radius: 12px;
    overflow: hidden;
  }
  .mapBox{
    position: relative;
    .mapBox_button{
      position: absolute;
      top: 0.2rem;
      right: 2%;
    }
  }
  .van-steps{
    padding: 2% 6% 0;
  }
  .topTit{
    font-size: 0.45rem;
    background-color: #1D6FE9;
    color: #FFFFFF;
    line-height: 58px;
    text-align: center;
    padding: 15px 0;
    box-shadow: 0px 3px 6px 0px rgba(15,67,145,0.40);
  }
  .main_title{
    font-size: 0.4rem;
    color: #1D6FE9;
    margin: 0.2rem 6%;
    position: relative;
  }
  .main_box{
    width: 96%;
    margin: 0 auto;
    border-radius: 6px;
    box-shadow: 0px 3px 6px 0px rgba(0,0,0,0.16);
    overflow: hidden;
    background-color: #FFF;
  }
  .collapse{
    width: 96%;
    margin: 0 auto;
    border-radius: 6px;
    box-shadow: 0px 3px 6px 0px rgba(0,0,0,0.16);
    overflow: hidden;
    margin-bottom: 15px;
  }
  /deep/.van-radio--horizontal{
    margin-left: 20px;
    margin-right: 0;
  }
  .file-box{
    padding: 2% 5% 0;
  }
  .submitButton{
    width: 80%;
    margin: 0 auto;
    border-radius: 14px;
  }
  .timeTit{
    text-align: center;
    font-size: 16px;
    line-height: 27px;
  }
  .action-box{
    padding: 15px 0!important;
    margin-top: 0.4rem;
  }
  .check-box{
    margin-top: 0.4rem;
  }
  .addFamily{
    position: absolute;
    top: -2px;
    right: 0;
    border-radius: 50%;
    display: inline-block;
    width: 0.7rem;
    height: 0.7rem;
  }
  .deleteFamily{
    position: absolute;
    top: -0.35rem;
    right: 6%;
    z-index: 9;
    border-radius: 50%;
    display: inline-block;
    width: 0.7rem;
    height: 0.7rem;
  }
  .familyList{
    margin-top: 0.4rem;
    position: relative;
  }
  .noModify{
    .topTit{
      background-color:#ABABAB ;
      box-shadow: 0px 3px 6px 0px rgba(171,171,171,0.40);
    }
    .van-cell__title{
      color: #B4B0B0;
    }
  }
  .flow_main_box{
    width: 96%;
    margin: 0 auto;
    border-radius: 6px;
    box-shadow: 0px 3px 6px 0px rgba(0,0,0,0.16);
    overflow: hidden;
    background-color: #FFF;
    margin-top: 2%;
    padding: 5% 1%;
    .van-col{
      text-align: center;
    }
    .tit{
      background: #1d6fe9;
      border-radius: 12px;
      font-size: 0.4rem;
      font-family: Source Han Sans CN, Source Han Sans CN-Regular;
      font-weight: 400;
      color: #ffffff;
      line-height: 0.65rem;
      letter-spacing: 0px;
      width: 70%;
      margin: 0 auto;
    }
    .van-step--vertical{
      padding-right: 0;
      text-align: left;
    }
    .van-step--vertical:not(:last-child)::after{
      border: none;
    }
    .van-step--finish{
      color: #1d6fe9;
    }
  }
  .van-goods-action {
    justify-content: center;
  }
</style>
