<template>
  <div class="card-edit">
    <a-form :model="dataModel"  autocomplete="off" @finish="onFinish">
      <a-divider orientation="left">运营机构信息</a-divider>
      <a-row type="flex">
        <a-col :span="8">
          <a-form-item label="企业名称"  name="companyName" :label-col="{span:8}"  :rules="[{ required: true, message: '请输入企业名称!' }]">
            <label v-if="opCategory==3">{{dataModel.companyName }}</label>
            <a-input v-model:value="dataModel.companyName" placeholder=""/>
          </a-form-item>
        </a-col>
        <a-col :span="7">
          <a-form-item label="企业地址" name="companyAddress" :label-col="{span:7}" :rules="[{ required: true, message: '请输入企业地址!' }]">
            <label v-if="opCategory==3">{{dataModel.companyAddress }}</label>
            <a-input v-model:value="dataModel.companyAddress" placeholder=""/>
          </a-form-item>
        </a-col>
        <a-col :span="8">
          <a-form-item label="负责人姓名" name="fzrName" :label-col="{span:8}" :rules="[{ required: true, message: '请输入负责人姓名!' }]">
            <label v-if="opCategory==3">{{dataModel.fzrName}}</label>
            <a-input v-model:value="dataModel.fzrName" placeholder=""/>
          </a-form-item>
        </a-col>
      </a-row>
      <a-row type="flex">
        <a-col :span="8">
          <a-form-item label="负责人电话"  name="fzrMobile" :label-col="{span:8}" :rules="[{ required: true, message: '请输入负责人电话!' }]">
            <label v-if="opCategory==3">{{dataModel.fzrMobile }}</label>
            <a-input v-model:value="dataModel.fzrMobile" placeholder=""/>
          </a-form-item>
        </a-col>
        <a-col :span="7">
          <a-form-item label="法人姓名"  name="frName" :label-col="{span:7}" :rules="[{ required: true, message: '请输入法人姓名!' }]">
            <label v-if="opCategory==3">{{dataModel.frName }}</label>
            <a-input v-model:value="dataModel.frName" placeholder=""/>
          </a-form-item>
        </a-col>
        <a-col :span="8">
          <a-form-item label="法人电话"  name="frMobile" :label-col="{span:8}" :rules="[{ required: true, message: '请输入法人电话!' }]">
            <label v-if="opCategory==3">{{dataModel.frMobile }}</label>
            <a-input v-model:value="dataModel.frMobile" placeholder=""/>
          </a-form-item>
        </a-col>
      </a-row>
      <a-row type="flex">
        <a-col :span="8">
          <a-form-item label="企业机构代码"  name="companyCode" :label-col="{span:8}" :rules="[{ required: true, message: '请输入企业机构代码!' }]">
            <label v-if="opCategory==3">{{dataModel.companyCode }}</label>
            <a-input v-model:value="dataModel.companyCode" placeholder=""/>
          </a-form-item>
        </a-col>
        <a-col :span="7">
          <a-form-item
            label="经济类型"
            :label-col="{ span: 7 }"
            name="economicTypeID"
          >
            <a-select
              ref="select"
              style="width: 100%"
              v-model:value="dataModel.economicTypeID"
              :options="companyTypeList"
              :field-names="{ label: 'name', value: 'value' }"
            >
            </a-select>
          </a-form-item>
        </a-col>
        <a-col :span="8">
          <a-form-item
            label="注册地址行政区划"
            :label-col="{ span: 8 }"
            name="signInPoliticalArea"
          >
            <a-input v-model:value="dataModel.signInPoliticalArea"></a-input>
          </a-form-item>
        </a-col>
      </a-row>
      <a-row type="flex">
        <a-col :span="8">
          <a-form-item
            label="营业执照有效期"
            :label-col="{ span: 8 }"
            name="validDate"
          >
            <a-radio-group v-model:value="showPicker" name="showPicker">
              <a-radio value="1">至长期</a-radio>
              <a-radio value="2">
                <a-date-picker
                  v-model:value="showDateTime"
                  picker="date"
                  value-format="YYYY-MM-DD"
                  :disabled="showPicker === '1'"
                />
              </a-radio>
            </a-radio-group>
          </a-form-item>
        </a-col>
        <a-col :span="7">
        </a-col>
        <a-col :span="8">
        </a-col>
      </a-row>
      <a-divider orientation="left" v-if="opCategory==2">管理驿站 共计:{{manageSites.length}}</a-divider>
      <!--      <a-row>
        <a-col :span="24" style="text-align: right; margin-top: 20px; margin-right: 20px">
          <Space>
            <a-button @click="addSite">
              <template #icon>
                <plus-circle-outlined/>
              </template>
              新增
            </a-button>
          </Space>
        </a-col>
      </a-row>-->
      <a-row  v-if="opCategory==2">
        <a-col style="margin-bottom: 20px;">
          <a-table :columns="columns" :data-source="manageSites" :pagination="pagination"
                   :loading="formState.loading"
                   @change="handleTableChange"
                   :row-selection="{ selectedRowKeys: formState.selectedRowKeys, onChange: onSelectChange}"
                   :row-key="record=>record.siteId"
                   bordered>
            <template #bodyCell="{ column ,index}">
              <template v-if="column.key === 'siteName'">
                <div>
                  <a-input v-model:value="manageSites[index][column.key]" style="border:none;text-align: center;"></a-input>
<!--                  <a-select
                    ref="select"
                    v-model:value="manageSites[index][column.key]"
                    :options="allSites"
                    @change="manageSitesChange(index,manageSites[index][column.key])"
                    :field-names="{ label: 'siteName', value: 'siteID' }" style="width: 200px" >
                  </a-select>-->
                </div>
              </template>
              <template v-if="column.key === 'detailAddress'">
                   {{manageSites[index][column.key]}}
              </template>
              <!--              <template v-if="column.key === 'operation'">
                <a-button type="link" size="small" @click="delSite(index)">删除</a-button>
              </template>-->
            </template>
          </a-table>
        </a-col>
      </a-row>
      <a-divider orientation="left">其他</a-divider>
      <a-row>
        <a-textarea :auto-size="{ minRows: 4, maxRows: 10 }"  v-model:value="dataModel.companyDesc" :disabled="opCategory==3"
                    placeholder="企业简介" style="text-align: left;vertical-align: middle;"/>
      </a-row>
      <a-row style="height: 10px"></a-row>
      <a-row>
        <a-textarea :auto-size="{ minRows: 4, maxRows: 10 }"  v-model:value="dataModel.remark"  :disabled="opCategory==3"
                    placeholder="备注" style="text-align: left;" />
      </a-row>
      <a-form-item class="buttom-btns">
        <a-button @click="onClose">取消</a-button>
        <a-button type="primary" html-type="submit">提交</a-button>
      </a-form-item>
    </a-form>
  </div>
</template>
<script lang="ts">
import {computed, defineComponent, reactive, ref, toRefs} from "vue";
import {useTabsViewStore} from "@/store/modules/tabsView";
import {getInstitutionByID, saveInstitution} from "@/api/baseSettings/institution";
import {getSiteList,getListByInstitutionID,getSiteByID} from "@/api/baseSettings/siteInfo";
import BUploadFile from "@/components/file/uploadFile.vue";
import {message, type SelectProps, TableColumnsType, TableProps} from "ant-design-vue";
import {getPaginationTotalTitle} from "@/utils/common";
import {getSysDictionaryList} from "@/api/system/dictionary";
import dayjs from "dayjs";

interface InstitutionModel {
  dataModel: any;
}
export default defineComponent({
  name:'InstitutionEditForm',
  components: {BUploadFile},
  props: {
    loadData: {
      type: Function,
      default: null
    }
  },
  setup() {
    const title = ref();
    const opCategory = ref();
    const tabsViewStore = useTabsViewStore();
    const isAllowCommit = ref<boolean>(false);
    const formData = reactive<InstitutionModel>({ dataModel:{}});
    const pageParams = reactive({
      pageIndex: 1,
      pageSize: 10,
      institutionID:''
    });
    const columns: TableColumnsType = [
      {title: '序号', align: "center",key: 'siteID',customRender: item => `${pageParams.pageSize * (pageParams.pageIndex - 1) + item.index + 1}`},
      {title: '驿站名称', dataIndex: 'siteName', key: 'siteName', align: "center"},
      {title: '驿站地址', dataIndex: 'detailAddress', key: 'detailAddress', align: "center"},
     /* {title: '操作', key: 'operation', fixed: 'right',width:170, align: "center"},*/
    ];
    const pagination = computed(() => ({
      total: formState.total,
      current: pageParams.pageIndex,
      pageSize: pageParams.pageSize,
      showSizeChanger: true,
      showTotal: total => getPaginationTotalTitle(total)
    }));
    const onSelectChange = (selectedRowKeys: any) => {
      formState.selectedRowKeys = selectedRowKeys;
    };
    const handleTableChange: TableProps['onChange'] = (pag: { pageSize: number; current: number },) => {
      pageParams.pageIndex = pag.current;
      pageParams.pageSize = pag.pageSize;
    };
    const formState = reactive({
      total: 0,
      selectedRowKeys: [],
      loading: false
    });

    const allSites = ref<any>([]);
    const manageSites = ref<any>([]);
    const showPicker = ref('1');
    const showDateTime = ref<any>();

    const companyTypeList = ref<SelectProps['options']>();

    const getCompanyTypeList = async function () {
      const data: any = await getSysDictionaryList("CompanyType");
      companyTypeList.value = data;
    }

    const loadData = (institutionID: any,operateType:any) => {
      getAllSites();
      getCompanyTypeList();
      opCategory.value = operateType;
      getInstitutionByID(institutionID).then((result: any) => {
        formData.dataModel = result;
        GetManageSites(formData.dataModel.institutionID);
        showPicker.value = formData.dataModel.validDate == '2099-12-31T00:00:00.000+08:00' ? '1' : '2';
        if (showPicker.value === '1') {
          showDateTime.value = dayjs(new Date().toLocaleDateString().replaceAll("/", "-"));
        } else {
          showDateTime.value = formData.dataModel.validDate;
        }
      });
    }

    const getAllSites = () => {
      pageParams.institutionID = '';
      getSiteList(pageParams).then((result :any) => {
        allSites.value = result.list;
        // console.log('allSites',allSites);
      })
    }

    const GetManageSites = (id: string) => {
      pageParams.institutionID = id;
      getListByInstitutionID(pageParams).then((result :any)=> {
          manageSites.value = result.list;
      });
    }

   /* const addSite = () => {
      if(allSites.value.length >0){
        const newSite = allSites.value[0];
        (manageSites.value as any[]).push({siteID:newSite.siteID,siteName:newSite.siteName,detailAddress:newSite.detailAddress});
        validateSameSite();
      }else{
        message.error("未查询到站点信息!");
      }
    }
    const delSite = (site) =>{
      (manageSites.value as any[]).splice(site, 1);
      validateSameSite();
    }*/

    const manageSitesChange = (index:any,siteID:any) =>{
      getSiteByID(siteID).then((result :any)=> {
        manageSites.value[index]= result;
        // console.log("manageSites",manageSites.value);
        /*validateSameSite();*/
      });
    };

    /*const validateSameSite = ()=>{
      if(manageSites.value.length>1){
        manageSites.value.forEach(item=>{
          const sameData = manageSites.value.filter(x => x.siteID == item.siteID);
          // console.log("sameData",sameData);
          if (sameData.length >1){
            isAllowCommit.value = false;
          }
        });
      }
    };*/
    const mobileValidate = ()=>{
      isAllowCommit.value = true;
      const mobileReg = /^1[3|4|5|6|7|8|9]\d{9}$/;
      if(!mobileReg.test(formData.dataModel.frMobile)){
        message.error("输入的法人电话有误!");
        isAllowCommit.value = false;
      }
      if(!mobileReg.test(formData.dataModel.fzrMobile)){
        message.error("输入的负责人电话有误!");
        isAllowCommit.value = false;
      }
    };

    const onClose = (reload: any) => {
      tabsViewStore.closeCurrentTabByPath('/baseSettings/institution/add');
      tabsViewStore.closeCurrentTabByPath('/baseSettings/institution/edit');
      tabsViewStore.openTab('/baseSettings/institution/index',{reload:reload});
    };

    const onFinish = () => {
      mobileValidate();
      if (showPicker.value === '1') {
        formData.dataModel.validDate = '2099-12-31T00:00:00.000+08:00';
      } else {
        formData.dataModel.validDate = showDateTime.value;
      }
      if (isAllowCommit.value){
        formData.dataModel.manageSites = manageSites.value;
        saveInstitution(formData.dataModel).then(result => {
          if (result) {
            onClose(1);
          }
        });
      }
    };


    return {
      ...toRefs(formData),
      loadData,
      onClose,
      onFinish,
      title,
      opCategory,
      columns,
      pageParams,
      pagination,
      formState,
      allSites,
      manageSites,
      isAllowCommit,
      companyTypeList,
      showPicker,
      showDateTime,
      getAllSites,
      GetManageSites,
      /*addSite,
      delSite,*/
      handleTableChange,
      onSelectChange,
      manageSitesChange,
    };
  },
  created() {
    const id = history.state.params?.id;
    const operateType = history.state.params?.op;
    this.loadData(id,operateType);
  },
})
</script>