policy-head-list.js 7.51 KB
import api from '@/api/api';
import {
    httpPost,
    requestDomain
} from '@/api/fetch-api.js';

import {
    mapState
} from 'vuex';
import { formatMoney, getInsuredPeriod } from "@/utils/biz.js";

export default {
    props: {
        multiSelectable: {
            type: Boolean,
            default: false
        },
        model: {
            type: String,
            // checkbox
            default: "download"
        }
    },
    name: "InsuranceQuery",
    data() {
        return {
            myPolicyList: [],
            maxShow: 2,
            selectPolicyCode: "",
            selectPolicyCodes: {},
            hide: false
        }
    },
    computed: {
        ...mapState({
            policyList: state => state.policyList
        }),
        lan() {
            return this.$i18n.locale;
        },
        i18n() {
            return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {};
        },
    },
    methods: {
        toContactUs() {
            this.$router.push({
                path: "/custom/service",
                query: {
                    q: "m1"
                }
            });
        },
        queryList() {
            if (this.policyList && this.policyList.length > 0) {
                this.myPolicyList = this.policyList;
                this.myPolicyList.forEach(element => {
                    element.activity = false;
                })
                this.initSelected();
            } else {
                this.checkCustomer().then(() => {
                    httpPost({ url: api.policyList, sid: true }).then(res => {
                        if (!res || res.length == 0) {
                            this.myPolicyList = null;
                        } else {
                            res.forEach(element => {
                                element.activity = false;
                                // let len = element.policyCode.length;
                                // element.policyCodeStr = element.policyCode && len > 5 ?
                                //     element.policyCode.substring(0, 2) + "**********"
                                //     + element.policyCode.substring(len - 4, len) : element.policyCode;
                            });
                            this.$store.commit("CACHE_POLICY_LIST", res);
                            this.myPolicyList = res;
                        }
                        this.initSelected();
                    }).catch(e => {
                        this.myPolicyList = null;
                        switch (e.code) {
                            case "2002":
                                // 不是客户,没有购买保单
                                break;
                        }
                    });
                });

            }
        },
        initSelected() {
            let selectPolicy = null;
            try {
                let data = sessionStorage.getItem("_hklife_policy");
                if (data) {
                    sessionStorage.removeItem("_hklife_policy");
                    selectPolicy = JSON.parse(decodeURIComponent(data));
                    if (selectPolicy) {
                        if (this.multiSelectable) {
                            this.selectPolicyCodes[selectPolicy.code] = selectPolicy;
                        } else {
                            this.selectPolicyCode = selectPolicy.code;
                        }
                        this.$emit("onSelect", [selectPolicy]);

                        // 判断最大显示
                        let index = -1;
                        for (let i = 0; i < this.myPolicyList.length; i++) {
                            if (selectPolicy.code == this.myPolicyList[i].policyCode) {
                                this.myPolicyList[i].activity = true;
                                index = i;
                            }
                        }
                        this.$set(this, "myPolicyList", this.myPolicyList);
                        if (index > 2) {
                            this.maxShow = this.myPolicyList.length;
                        }
                    }
                }
            } catch (e) {

            }
            if (!selectPolicy) {
                let firstPolicy = this.myPolicyList[0];
                this.myPolicyList[0].activity = true;
                selectPolicy = { id: firstPolicy.policyId, code: firstPolicy.policyCode };
                if (this.multiSelectable) {
                    this.selectPolicyCodes[selectPolicy.code] = selectPolicy;
                } else {
                    this.selectPolicyCode = selectPolicy.code;
                }
                this.$emit("onSelect", [selectPolicy]);
            }
        },
        handlePolicySelect(item, index) {
            let code = item.policyCode;
            if (this.multiSelectable) {
                let c = this.selectPolicyCodes[code];
                if (!c || typeof c == "undefined") {
                    item.activity = true;
                    this.selectPolicyCodes[code] = { code: code, id: item.policyId };
                } else {
                    item.activity = false;
                    delete this.selectPolicyCodes[code];
                }
                // this.$set(this, 'myPolicyList', this.myPolicyList);
                let data = [];
                for (let key in this.selectPolicyCodes) {
                    data.push(this.selectPolicyCodes[key]);
                }
                this.$emit("onSelect", data);
            } else {
                if (code != this.selectPolicyCode) {
                    this.selectPolicyCode = code;
                    this.$emit("onSelect", [{ code: code, id: item.policyId }]);
                }
            }
        },
        isPolicySelect(item, index) {
            let code = item.policyCode;
            if (this.multiSelectable) {
                let c = this.selectPolicyCodes[code];
                if (!c || typeof c == "undefined") {
                    return false;
                } else {
                    return true;
                }
            }
            return false;
        },
        checkCustomer() {
            return new Promise(resolve => {
                resolve();
                // httpPost({ url: api.profile, sid: true }).then(res => {
                //     if (res.isCustomer == 1) {
                //         resolve();
                //     } else {
                //         this.gotoCustomerAuthPage();
                //     }
                // }).catch(res => {

                // });
            });
        },
        gotoCustomerAuthPage() {
            let c = this.$route.fullPath;
            this.$router.push({
                name: "customerAuth",
                query: {
                    c: c
                }
            });
        },
        formatMoney(s, t) {
            if (typeof t == "undefined") {
                t = 1;
            }
            return formatMoney(s, t);
        },
        // 保障年限,保n年
        formatInsuredPeriod(t, v) {
            return getInsuredPeriod(this.$i18n.locale, t, v);
        },
        downloadPolicy(policy) {
            if (policy) {
                httpPost({ url: api.getDownloadPath, sid: true, data: { policyCode: policy.policyCode } }).then(res => {
                    if (res) {
                        let url = requestDomain() + api.downloadPolicy + "/" + res;
                        window.open(url);
                    }
                });
            }
        }
    },
    components: {
    },
    mounted() {
        this.queryList();
    },
}