<template>
    <layout-card>
        <el-form ref="formRef" :rules="rules" :model="form" label-width="140px">
            <el-row :gutter="20">
                <el-col :span="24">
                    <el-divider content-position="left">车辆选择</el-divider>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="保险车型" prop="VEHICLE_MODEL">
                        <el-select v-model="form.VEHICLE_MODEL" @change="getVehicle">
                            <el-option
                                    v-for="item in OPERATING_VEHICLE_TYPE_LIST"
                                    :key="item.ID"
                                    :label="item.NAME"
                                    :value="item.ID"
                            />
                        </el-select>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="保险车辆" prop="VEHICLE">
                        <el-select v-model="form.VEHICLE" @change="getBusInfo">
                            <el-option
                                    v-for="item in data.vehicleList"
                                    :key="item.ID"
                                    :label="item.PLATE_NUMBER"
                                    :value="item.ID"
                            />
                        </el-select>
                    </el-form-item>
                </el-col>
                <el-col :span="24">
                    <el-divider content-position="left">基本信息</el-divider>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="行驶证照片" prop="DRIVING_LICENSE_IMG">
                        <layout-upload
                                v-model:file-list="data.busInfo.DRIVING_LICENSE_IMG"
                                list-type="picture-card"
                                accept=".jpg,.jpeg,.png"
                                delete-to-server
                                disabled
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="车牌号" prop="PLATE_NUMBER">
                        <el-input v-model="data.busInfo.PLATE_NUMBER" disabled />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="车架号" prop="VIN">
                        <el-input v-model="data.busInfo.VIN" disabled/>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="车辆类型" prop="TRAILER_TYPE">
                        <el-input v-model="data.busInfo.TRAILER_TYPE" disabled/>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="车主/业户" prop="CAR_OWNERS ">
                        <el-input v-model="data.busInfo.CAR_OWNERS " disabled/>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="车主电话" prop="CAR_OWNERS_TEL">
                        <el-input v-model="data.busInfo.CAR_OWNERS_TEL" disabled/>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="初登日期" prop="INITIAL_REGISTRATION_DATE">
                        <el-date-picker
                                v-model="data.busInfo.INITIAL_REGISTRATION_DATE"
                                value-format="YYYY-MM-DD"
                                format="YYYY-MM-DD"
                                type="date"
                                disabled
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="所属区域" prop="COMPANY_AREA">
                        <el-input v-model="data.busInfo.COMPANY_AREA" disabled/>
                    </el-form-item>
                </el-col>
                <el-col :span="24">
                    <el-divider content-position="left">投保信息</el-divider>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="编号" prop="NUM">
                        <el-input v-model="form.NUM"  maxlength="50" show-word-limit/>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="车主业户" prop="CAR_OWNERS">
                        <el-input v-model="form.CAR_OWNERS"  maxlength="50" show-word-limit/>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="联系电话" prop="TELEPHONE">
                        <el-input v-model="form.TELEPHONE"  maxlength="11" show-word-limit/>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="登记人" prop="REGISTRANT">
                        <el-input v-model="form.REGISTRANT"  maxlength="50" show-word-limit/>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="保险公司" prop="INSURANCE_COMPANY">
                        <el-select v-model="form.INSURANCE_COMPANY">
                            <el-option
                                    v-for="item in insuranceCompanyList"
                                    :key="item.DICTIONARIES_ID"
                                    :label="item.NAME"
                                    :value="item.DICTIONARIES_ID"
                            />
                        </el-select>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="保险项目" prop="INSURANCE_COVERAGE">
                        <el-input v-model="form.INSURANCE_COVERAGE"  maxlength="50" show-word-limit/>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="办理日期" prop="PROCESSING_DATE">
                        <el-date-picker
                                v-model="form.PROCESSING_DATE"
                                value-format="YYYY-MM-DD"
                                format="YYYY-MM-DD"
                                type="date"
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="生效日期" prop="EFFECTIVE_DATE">
                        <el-date-picker
                                v-model="form.EFFECTIVE_DATE"
                                value-format="YYYY-MM-DD"
                                format="YYYY-MM-DD"
                                type="date"
                                @change="getDueDate"
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="到期日期" prop="DUE_DATE">
                        <el-date-picker
                                v-model="form.DUE_DATE"
                                value-format="YYYY-MM-DD"
                                format="YYYY-MM-DD"
                                type="date"
                                disabled
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="保险全费" prop="ALL_FEES">
                        <el-input v-model="form.ALL_FEES"  maxlength="50" show-word-limit/>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="净费实收" prop="ACTUAL_COLLECTION">
                        <el-input v-model="form.ACTUAL_COLLECTION"  maxlength="50" show-word-limit/>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="提醒天数" prop="REMINDER_DAYS">
                        <el-input v-model.number="form.REMINDER_DAYS"  maxlength="50" show-word-limit @change="getRemiderDate"/>
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="提醒日期" prop="REMINDER_DATE">
                        <el-date-picker
                                v-model="form.REMINDER_DATE"
                                value-format="YYYY-MM-DD"
                                format="YYYY-MM-DD"
                                type="date"
                                disabled
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="提醒状态" prop="REMINDER_STATUS">
                        <el-switch
                                v-model="form.REMINDER_STATUS"
                                inline-prompt
                                active-text="开"
                                inactive-text="关"
                                active-value="1"
                                inactive-value="0"
                        />
                    </el-form-item>
                </el-col>

                <el-col :span="12">
                    <el-form-item label="附件上传" prop="ATTACHMENT_UPLOAD">
                        <layout-upload
                                v-model:file-list="form.ATTACHMENT_UPLOAD"
                                accept=".pdf"
                                :limit="99"
                                delete-to-server
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="保险资料" prop="INSUREINFO">
                        <layout-upload
                                v-model:file-list="form.INSUREINFO"
                                list-type="picture-card"
                                accept=".jpg,.jpeg,.png"
                                :limit="99"
                                delete-to-server
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="备注" prop="NOTES">
                        <el-input
                                v-model="form.NOTES"
                                type="textarea"
                                :autosize="{ minRows: 3 }"
                                maxlength="250" show-word-limit
                        />
                    </el-form-item>
                </el-col>
            </el-row>
        </el-form>
        <div class="mt-10 tc">
            <el-button type="primary" @click="fnSubmit">保存</el-button>
        </div>
    </layout-card>
</template>

<script setup>
    import LayoutUpload from "@/components/upload/index.vue";
    import { ref ,reactive} from "vue";
    import { debounce } from "throttle-debounce";
    import {getInsureView, setInsureAdd ,setInsureEdit,getTrailerList} from "@/request/mechanical_files.js";
    import {OPERATING_VEHICLE_TYPE_LIST} from "@/assets/js/constant.js"
    import {layoutFnGetInsuranceCompany} from "@/assets/js/data_dictionary.js"
    import { setUploadImg } from "@/request/api.js";
    import { ElMessage } from "element-plus";
    import { useRoute, useRouter, } from "vue-router";
    import useFormValidate from "@/assets/js/useFormValidate.js";
    import { addingPrefixToFile ,timeTransformation,subtractDaysFromDate} from "@/assets/js/utils.js";
    const route = useRoute();
    const router = useRouter();
    const INSURE_ID = route.query.INSURE_ID
    const insuranceCompanyList = await layoutFnGetInsuranceCompany()
    const formRef = ref(null);
    const form = ref({
        VEHICLE_MODEL : '',
        VEHICLE : '',
        NUM : '',
        CAR_OWNERS : '',
        TELEPHONE : '',
        REGISTRANT : '',
        INSURANCE_COMPANY : '',
        INSURANCE_COVERAGE : '',
        PROCESSING_DATE : '',
        EFFECTIVE_DATE : '',
        DUE_DATE : '',
        ALL_FEES : '',
        ACTUAL_COLLECTION : '',
        REMINDER_DAYS : '',
        REMINDER_DATE : '',
        REMINDER_STATUS : '0',
        ATTACHMENT_UPLOAD : [],
        INSUREINFO : [],
        NOTES : '',
    });
    const data = reactive({
        vehicleList: [],
        busInfo:{
            DRIVING_LICENSE_IMG : [],
            PLATE_NUMBER : '',
            VIN : '',
            TRAILER_TYPE : '',
            CAR_OWNERS : '',
            CAR_OWNERS_TEL : '',
            INITIAL_REGISTRATION_DATE : '',
            COMPANY_AREA:'',
        }
    });
    const rules = {
        VEHICLE_MODEL: [{ required: true, message: "请输入", trigger: "blur" }],
        VEHICLE: [{ required: true, message: "请输入", trigger: "blur" }],
        CAR_OWNERS: [{ required: true, message: "请输入", trigger: "blur" }],
        TELEPHONE: [
            { required: true, message: "请输入", trigger: "blur" },
            { min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
            {
                pattern:
                    /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[189]))\d{8}$/,
                message: "请输入正确的手机号码",
            },
        ],
        INSURANCE_COMPANY: [{ required: true, message: "请输入", trigger: "blur" }],
        INSURANCE_COVERAGE: [{ required: true, message: "请输入", trigger: "blur" }],
        REGISTRANT: [{ required: true, message: "请输入", trigger: "blur" }],
        PROCESSING_DATE: [{ required: true, message: "请输入", trigger: "blur" }],
        EFFECTIVE_DATE: [{ required: true, message: "请输入", trigger: "blur" }],
        DUE_DATE: [{ required: true, message: "请输入", trigger: "blur" }],
        REMINDER_DAYS: [{ required: true, message: "请输入", trigger: "blur" }],
        REMINDER_DATE: [{ required: true, message: "请输入", trigger: "blur" }],
    }
    const getVehicle = async (event) =>{
        const resData = await getTrailerList({TRAFFIC_TYPE:event})
        data.vehicleList = resData.list
        form.value.VEHICLE = ''
        data.busInfo.DRIVING_LICENSE_IMG = []
        data.busInfo.PLATE_NUMBER = ''
        data.busInfo.VIN = ''
        data.busInfo.TRAILER_TYPE = ''
        data.busInfo.CAR_OWNERS = ''
        data.busInfo.CAR_OWNERS_TEL = ''
        data.busInfo.INITIAL_REGISTRATION_DATE = ''
        data.busInfo.DRIVING_LICENSE_IMG = addingPrefixToFile(
            []
        );
    }
    const fnBusChange = async (event) => {
        const resData = await getTrailerList({ID:event})
        data.busInfo = resData.list[0]
        data.busInfo.DRIVING_LICENSE_IMG = addingPrefixToFile(
            resData.drivingLicenseImgs
        );
    };
    const getBusInfo = (val)=>{
        console.log(val)
        if(val){
            fnBusChange(val)
        }else {
            data.busInfo.DRIVING_LICENSE_IMG = []
            data.busInfo.PLATE_NUMBER = ''
            data.busInfo.VIN = ''
            data.busInfo.TRAILER_TYPE = ''
            data.busInfo.CAR_OWNERS = ''
            data.busInfo.CAR_OWNERS_TEL = ''
            data.busInfo.INITIAL_REGISTRATION_DATE = ''
            data.busInfo.COMPANY_AREA = ''
            data.busInfo.DRIVING_LICENSE_IMG = addingPrefixToFile(
                []
            );
        }
    }
    const getDueDate = (val)=>{
        if(val){
            form.value.DUE_DATE = timeTransformation(val,12)
            if(form.value.REMINDER_DAYS){
                form.value.REMINDER_DATE = subtractDaysFromDate(form.value.DUE_DATE,form.value.REMINDER_DAYS)
            }
        }else {
            form.value.DUE_DATE = ''
            form.value.REMINDER_DATE = ''
        }
    }
    const getRemiderDate = (val)=>{
        if(val){
            if(form.value.DUE_DATE){
                form.value.REMINDER_DATE = subtractDaysFromDate(form.value.DUE_DATE,val)
            }
        }else {
            form.value.REMINDER_DATE = ''
        }
    }
    const fnGetData = async () => {
        if (!INSURE_ID) return;
        const resData = await getInsureView({ INSURE_ID });
        form.value = resData.pd;
        const listData = await getTrailerList({TRAFFIC_TYPE:form.value.VEHICLE_MODEL})
        data.vehicleList = listData.list
        fnBusChange(form.value.VEHICLE)
        form.value.ATTACHMENT_UPLOAD = addingPrefixToFile(
            resData.attachmentUploadImgs
        );
        form.value.INSUREINFO = addingPrefixToFile(
            resData.insureinfoImgs
        );
    };
    fnGetData();

    const fnSubmit = debounce(
        1000,
        async () => {
            await useFormValidate(formRef);
            const resData = !INSURE_ID
                ? await setInsureAdd({ ...form.value })
                : await setInsureEdit({ ...form.value ,INSURE_ID:INSURE_ID});
            const currentId =resData.pd.INSURE_ID
            for (let i = 0; i < form.value.ATTACHMENT_UPLOAD.length; i++) {
                if (form.value.ATTACHMENT_UPLOAD[i].raw)
                    await fnUploadImage(currentId, form.value.ATTACHMENT_UPLOAD[i].raw, 129);
            }
            for (let i = 0; i < form.value.INSUREINFO.length; i++) {
                if (form.value.INSUREINFO[i].raw)
                    await fnUploadImage(currentId, form.value.INSUREINFO[i].raw, 125);
            }
            ElMessage.success("保存成功");
            router.back();
        },
        { atBegin: true }
    );
    const fnUploadImage = async (HIDDEN_ID, FFILE, TYPE) => {
        const formData = new FormData();
        formData.append("FOREIGN_KEY", HIDDEN_ID);
        formData.append("TYPE", TYPE);
        formData.append("FFILE", FFILE);
        await setUploadImg(formData);
    };
</script>

<style scoped lang="scss"></style>