完成大部分功能
Showing
24 changed files
with
991 additions
and
225 deletions
... | @@ -42,6 +42,14 @@ module.exports = { | ... | @@ -42,6 +42,14 @@ module.exports = { |
42 | // 保存預約服務 | 42 | // 保存預約服務 |
43 | saveReservation: "/pingan_hklife_webapi/customService/reservation/save", | 43 | saveReservation: "/pingan_hklife_webapi/customService/reservation/save", |
44 | // 保存投訴建議 | 44 | // 保存投訴建議 |
45 | saveComplain: "/pingan_hklife_webapi/customService/complain/save" | 45 | saveComplain: "/pingan_hklife_webapi/customService/complain/save", |
46 | 46 | ||
47 | // 保单接口 | ||
48 | policyList : "/pingan_hklife_webapi/policy/list", | ||
49 | // 保单接口 | ||
50 | policyDetail : "/pingan_hklife_webapi/policy/detail", | ||
51 | // 保单聯系方式變更 | ||
52 | updatePolicyContanct : "/pingan_hklife_webapi/policy/updateContacts", | ||
53 | // 保单客戶資料變更 | ||
54 | updatePolicyInfo : "/pingan_hklife_webapi/policy/updateInfo", | ||
47 | } | 55 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -617,20 +617,20 @@ module.exports = { | ... | @@ -617,20 +617,20 @@ module.exports = { |
617 | checkTips: "I do not agree to receive promotional information", | 617 | checkTips: "I do not agree to receive promotional information", |
618 | submit: "Save", | 618 | submit: "Save", |
619 | errorTips: { | 619 | errorTips: { |
620 | e1: "請填寫正確的聯繫電話", | 620 | e1: "Please enter the collect mobile no", |
621 | e2: "請填寫聯繫地址", | 621 | e2: "請填寫聯繫地址", |
622 | e3: "請填寫正確的E-Mail地址" | 622 | e3: "Please enter the collect E-mail" |
623 | } | 623 | }, |
624 | success : "Success", | ||
624 | }, | 625 | }, |
625 | policyChangeInformation: { | 626 | policyChangeInformation: { |
626 | title: "Change of Customer Information", | 627 | title: "Change of Customer Information", |
627 | hkClient: "HK Customer", | 628 | owner: "Policy Owner", |
628 | yes: "是", | 629 | insured: "Insured", |
629 | no: "否", | ||
630 | obj: "Select for change", | 630 | obj: "Select for change", |
631 | name: "Name", | 631 | name: "Name", |
632 | sex: "Sex", | 632 | sex: "Sex", |
633 | birth: "出生日期", | 633 | birth: "Date of Birth", |
634 | type: "Type of Identification Document", | 634 | type: "Type of Identification Document", |
635 | NO: "ID No.", | 635 | NO: "ID No.", |
636 | validityPeriod: "ID Validation Date", | 636 | validityPeriod: "ID Validation Date", |
... | @@ -639,8 +639,9 @@ module.exports = { | ... | @@ -639,8 +639,9 @@ module.exports = { |
639 | maritalStatus: "Marital Status", | 639 | maritalStatus: "Marital Status", |
640 | submit: "Save", | 640 | submit: "Save", |
641 | upload: "Upload Attachment", | 641 | upload: "Upload Attachment", |
642 | modifyTips1: "如需修改請", | 642 | modifyTips1: "If you need to modify please", |
643 | modifyTips2: "聯繫客服", | 643 | modifyTips2: " contact customer service", |
644 | success : "Success", | ||
644 | }, | 645 | }, |
645 | contactUs: { | 646 | contactUs: { |
646 | service: { | 647 | service: { |
... | @@ -683,6 +684,8 @@ module.exports = { | ... | @@ -683,6 +684,8 @@ module.exports = { |
683 | menu7: "Complaints", | 684 | menu7: "Complaints", |
684 | menu8: "Useful Forms", | 685 | menu8: "Useful Forms", |
685 | insuranceQuery: { | 686 | insuranceQuery: { |
687 | modify: "modify", | ||
688 | |||
686 | InsurantNumber: "Policy Number", | 689 | InsurantNumber: "Policy Number", |
687 | Insurant: "Insured", | 690 | Insurant: "Insured", |
688 | InsurantName: "Policy Type", | 691 | InsurantName: "Policy Type", |
... | @@ -690,42 +693,51 @@ module.exports = { | ... | @@ -690,42 +693,51 @@ module.exports = { |
690 | effectiveDate: "Premium Due Date", | 693 | effectiveDate: "Premium Due Date", |
691 | period: "Protection Duration", | 694 | period: "Protection Duration", |
692 | 695 | ||
693 | t2Title: "Guarantee information", | ||
694 | t2InsurantClassify: "Name of insurance", | ||
695 | t2InsurantAmount: "Insured amount", | ||
696 | 696 | ||
697 | t3Title: "Customer information", | 697 | t2Title: "Policy Information", |
698 | t3InsurantNameCn: "Name of applicant (Cn)", | 698 | t2n1: "Policy Type", |
699 | t3InsurantNameEn: "Name of applicant (En)", | 699 | t2n2: "Sum Insured", |
700 | t3InsurantIdNumber: "ID Number", | 700 | t2n3: "Effective Date", |
701 | t3InsurantContactAddress: "Contact address", | 701 | t2n4: "Protection Duration", |
702 | t3InsurantAddress: "Address", | 702 | t2n5: "Name of Insured(Chinese)", |
703 | t3InsurantMobile: "mobile", | 703 | t2n6: "Name of Insured (English) ", |
704 | t3InsurantEmail: "email", | 704 | t2n7: "Date of Birth", |
705 | t3InsuredNameCn: "Name of insured (Cn)", | 705 | t2n8: "ID No", |
706 | t3InsuredNameEn: "Name of insured (En)", | 706 | |
707 | t3InsuredBirthday: "Birthday", | 707 | |
708 | t3InsuredIdNumber: "ID Number", | 708 | t3Title: "Customer Information", |
709 | t3n1: "Name of Policy Owner(Chinese)", | ||
710 | t3n2: "Name of Policy Owner(English)", | ||
711 | t3n3: "Date of Birth", | ||
712 | t3n4: "ID No", | ||
713 | t3n5: "Postal Address", | ||
714 | t3n6: "Residential Address", | ||
715 | t3n7: "Mobile No.", | ||
716 | t3n8: "Email", | ||
709 | 717 | ||
710 | t4Title: "Beneficiary information", | 718 | t4Title: "Beneficiary information", |
711 | t4NameCn: "Name (Cn)", | 719 | t4NameCn: "Name(Chinese)", |
712 | t4NameEn: "Name (En)", | 720 | t4NameEn: "Name (English)", |
713 | t4Relation: "與受保人關係", | 721 | t4Relation: "Relationship with Insured", |
714 | t4Allocation: "Distribution ratio", | 722 | t4Allocation: "Distribution ratio", |
715 | 723 | ||
716 | t5Title: "Payment information", | 724 | t5Title: "Payment information", |
717 | t5PaymentPeriod: "Payment period", | 725 | t5PaymentPeriod: "Payment period", |
718 | t5PaymentMethod: "Payment method", | 726 | t5PaymentMethod: "Mode of Payment", |
719 | t5PaymentCurrency: "Payment currency", | 727 | t5PaymentCurrency: "Currency", |
720 | t5CurrentPremium: "Current premium", | 728 | t5CurrentPremium: "Current premium", |
721 | t5PaymentBank: "Payment bank", | 729 | t5PaymentBank: "Bank", |
722 | t5PaymentAccount: "Payment account", | 730 | t5PaymentAccount: "Payment Account", |
731 | |||
732 | t6Title: "Payment History", | ||
733 | t6PaymentPeriod: "Installment", | ||
734 | t6PaymentMethod: "Mode of Payment", | ||
735 | t6ClosingDate: "Received Date", | ||
736 | t6PaymentAmount: "Amount", | ||
723 | 737 | ||
724 | t6Title: "Payment record", | 738 | showMore: "Show All Policies", |
725 | t6PaymentPeriod: "Payment period", | 739 | noPolicy: "You haven't bought any policy, if you have any questions please", |
726 | t6PaymentMethod: "Payment method", | 740 | customService: " contact customer service", |
727 | t6ClosingDate: "Closing date", | ||
728 | t6PaymentAmount: "Payment amount", | ||
729 | }, | 741 | }, |
730 | reservation: { | 742 | reservation: { |
731 | submitBtn: '確認', | 743 | submitBtn: '確認', |
... | @@ -741,8 +753,8 @@ module.exports = { | ... | @@ -741,8 +753,8 @@ module.exports = { |
741 | or: "or", | 753 | or: "or", |
742 | login: " login", | 754 | login: " login", |
743 | register: " register", | 755 | register: " register", |
744 | baseInfoTip : "Your complete information can help us to provide you with complete services", | 756 | baseInfoTip: "Your complete information can help us to provide you with complete services", |
745 | infoBtn : " Go to perfection" | 757 | infoBtn: " Go to perfection" |
746 | } | 758 | } |
747 | } | 759 | } |
748 | } | 760 | } | ... | ... |
... | @@ -620,13 +620,13 @@ module.exports = { | ... | @@ -620,13 +620,13 @@ module.exports = { |
620 | e1: "請填寫正確的聯繫電話", | 620 | e1: "請填寫正確的聯繫電話", |
621 | e2: "請填寫聯繫地址", | 621 | e2: "請填寫聯繫地址", |
622 | e3: "請填寫正確的E-Mail地址" | 622 | e3: "請填寫正確的E-Mail地址" |
623 | } | 623 | }, |
624 | success : "更新成功", | ||
624 | }, | 625 | }, |
625 | policyChangeInformation: { | 626 | policyChangeInformation: { |
626 | title : "客戶資料變更", | 627 | title : "客戶資料變更", |
627 | hkClient: "是否平安香港客戶", | 628 | owner: "投保人", |
628 | yes: "是", | 629 | insured: "受保人", |
629 | no: "否", | ||
630 | obj: "變更對象", | 630 | obj: "變更對象", |
631 | name: "姓名", | 631 | name: "姓名", |
632 | sex: "性别", | 632 | sex: "性别", |
... | @@ -641,6 +641,7 @@ module.exports = { | ... | @@ -641,6 +641,7 @@ module.exports = { |
641 | upload: "附件上傳", | 641 | upload: "附件上傳", |
642 | modifyTips1: "如需修改請", | 642 | modifyTips1: "如需修改請", |
643 | modifyTips2: "聯繫客服", | 643 | modifyTips2: "聯繫客服", |
644 | success : "更新成功", | ||
644 | }, | 645 | }, |
645 | contactUs: { | 646 | contactUs: { |
646 | service: { | 647 | service: { |
... | @@ -683,6 +684,8 @@ module.exports = { | ... | @@ -683,6 +684,8 @@ module.exports = { |
683 | menu7: "投訴受理", | 684 | menu7: "投訴受理", |
684 | menu8: "常用表格", | 685 | menu8: "常用表格", |
685 | insuranceQuery: { | 686 | insuranceQuery: { |
687 | modify : "修改", | ||
688 | |||
686 | InsurantNumber: "保單號碼", | 689 | InsurantNumber: "保單號碼", |
687 | Insurant: "受保人", | 690 | Insurant: "受保人", |
688 | InsurantName: "險種名稱", | 691 | InsurantName: "險種名稱", |
... | @@ -690,22 +693,26 @@ module.exports = { | ... | @@ -690,22 +693,26 @@ module.exports = { |
690 | effectiveDate: "保費到期日", | 693 | effectiveDate: "保費到期日", |
691 | period: "保障年期", | 694 | period: "保障年期", |
692 | 695 | ||
693 | t2Title: "保障內容", | 696 | t2Title: "保單信息", |
694 | t2InsurantClassify: "險種名稱", | 697 | t2n1: "險種名稱", |
695 | t2InsurantAmount: "保額", | 698 | t2n2: "保額", |
699 | t2n3: "生效日期", | ||
700 | t2n4: "保障年期", | ||
701 | t2n5: "受保人姓名(中文)", | ||
702 | t2n6: "受保人姓名(英文)", | ||
703 | t2n7: "出生日期", | ||
704 | t2n8: "證件號碼", | ||
705 | |||
696 | 706 | ||
697 | t3Title: "客戶資料", | 707 | t3Title: "客戶資料", |
698 | t3InsurantNameCn: "投保人姓名(中文)", | 708 | t3n1: "投保人姓名(中文)", |
699 | t3InsurantNameEn: "投保人姓名(英文)", | 709 | t3n2: "投保人姓名(英文)", |
700 | t3InsurantIdNumber: "證件號碼", | 710 | t3n3: "出生日期", |
701 | t3InsurantContactAddress: "聯繫地址", | 711 | t3n4: "證件號碼", |
702 | t3InsurantAddress: "居住地址", | 712 | t3n5: "聯繫地址", |
703 | t3InsurantMobile: "手提電話", | 713 | t3n6: "居住地址", |
704 | t3InsurantEmail: "電子郵箱", | 714 | t3n7: "手提電話", |
705 | t3InsuredNameCn: "受保人姓名(中文)", | 715 | t3n8: "電子郵箱", |
706 | t3InsuredNameEn: "受保人姓名(英文)", | ||
707 | t3InsuredBirthday: "出生日期", | ||
708 | t3InsuredIdNumber: "證件號碼", | ||
709 | 716 | ||
710 | t4Title: "受益人資料", // t4BeneficiaryInformation | 717 | t4Title: "受益人資料", // t4BeneficiaryInformation |
711 | t4NameCn: "姓名(中文)", | 718 | t4NameCn: "姓名(中文)", |
... | @@ -726,6 +733,10 @@ module.exports = { | ... | @@ -726,6 +733,10 @@ module.exports = { |
726 | t6PaymentMethod: "繳費方式", | 733 | t6PaymentMethod: "繳費方式", |
727 | t6ClosingDate: "實收日期", | 734 | t6ClosingDate: "實收日期", |
728 | t6PaymentAmount: "繳費金額", | 735 | t6PaymentAmount: "繳費金額", |
736 | |||
737 | showMore : "顯示所有保單", | ||
738 | noPolicy: "您還未購買保單,如有疑問請", | ||
739 | customService : "聯繫客服", | ||
729 | }, | 740 | }, |
730 | reservation: { | 741 | reservation: { |
731 | submitBtn: '確認', | 742 | submitBtn: '確認', | ... | ... |
... | @@ -621,13 +621,13 @@ module.exports = { | ... | @@ -621,13 +621,13 @@ module.exports = { |
621 | e1: "請填寫正確的聯繫電話", | 621 | e1: "請填寫正確的聯繫電話", |
622 | e2: "請填寫聯繫地址", | 622 | e2: "請填寫聯繫地址", |
623 | e3: "請填寫正確的E-Mail地址" | 623 | e3: "請填寫正確的E-Mail地址" |
624 | } | 624 | }, |
625 | success : "更新成功", | ||
625 | }, | 626 | }, |
626 | policyChangeInformation: { | 627 | policyChangeInformation: { |
627 | title: "客户资料变更", | 628 | title: "客户资料变更", |
628 | hkClient: "是否平安香港客戶", | 629 | owner: "投保人", |
629 | yes: "是", | 630 | insured: "受保人", |
630 | no: "否", | ||
631 | obj: "变更对象", | 631 | obj: "变更对象", |
632 | name: "姓名", | 632 | name: "姓名", |
633 | sex: "性别", | 633 | sex: "性别", |
... | @@ -642,6 +642,7 @@ module.exports = { | ... | @@ -642,6 +642,7 @@ module.exports = { |
642 | upload: "附件上传", | 642 | upload: "附件上传", |
643 | modifyTips1: "如需修改请", | 643 | modifyTips1: "如需修改请", |
644 | modifyTips2: "联系客服", | 644 | modifyTips2: "联系客服", |
645 | success : "更新成功", | ||
645 | }, | 646 | }, |
646 | contactUs: { | 647 | contactUs: { |
647 | service: { | 648 | service: { |
... | @@ -691,22 +692,26 @@ module.exports = { | ... | @@ -691,22 +692,26 @@ module.exports = { |
691 | effectiveDate: "保费到期日", | 692 | effectiveDate: "保费到期日", |
692 | period: "保障年期", | 693 | period: "保障年期", |
693 | 694 | ||
694 | t2Title: "保障内容", | 695 | |
695 | t2InsurantClassify: "险种名称", | 696 | t2Title: "保單信息", |
696 | t2InsurantAmount: "保额", | 697 | t2n1: "险种名称", |
698 | t2n2: "保额", | ||
699 | t2n3: "生效日期", | ||
700 | t2n4: "保障年期", | ||
701 | t2n5: "受保人姓名(中文)", | ||
702 | t2n6: "受保人姓名(英文)", | ||
703 | t2n7: "出生日期", | ||
704 | t2n8: "证件号码", | ||
697 | 705 | ||
698 | t3Title: "客户资料", | 706 | t3Title: "客户资料", |
699 | t3InsurantNameCn: "投保人姓名(中文)", | 707 | t3n1: "投保人姓名(中文)", |
700 | t3InsurantNameEn: "投保人姓名(英文)", | 708 | t3n2: "投保人姓名(英文)", |
701 | t3InsurantIdNumber: "证件号码", | 709 | t3n3: "出生日期", |
702 | t3InsurantContactAddress: "联系地址", | 710 | t3n4: "证件号码", |
703 | t3InsurantAddress: "居住地址", | 711 | t3n5: "联系地址", |
704 | t3InsurantMobile: "手提电话", | 712 | t3n6: "居住地址", |
705 | t3InsurantEmail: "电子邮箱", | 713 | t3n7: "手提电话", |
706 | t3InsuredNameCn: "受保人姓名(中文)", | 714 | t3n8: "电子邮箱", |
707 | t3InsuredNameEn: "受保人姓名(英文)", | ||
708 | t3InsuredBirthday: "出生日期", | ||
709 | t3InsuredIdNumber: "证件号码", | ||
710 | 715 | ||
711 | t4Title: "受益人资料", // t4BeneficiaryInformation | 716 | t4Title: "受益人资料", // t4BeneficiaryInformation |
712 | t4NameCn: "姓名(中文)", | 717 | t4NameCn: "姓名(中文)", |
... | @@ -727,6 +732,10 @@ module.exports = { | ... | @@ -727,6 +732,10 @@ module.exports = { |
727 | t6PaymentMethod: "缴费方式", | 732 | t6PaymentMethod: "缴费方式", |
728 | t6ClosingDate: "实收日期", | 733 | t6ClosingDate: "实收日期", |
729 | t6PaymentAmount: "缴费金额", | 734 | t6PaymentAmount: "缴费金额", |
735 | |||
736 | showMore : "显示所有保单", | ||
737 | noPolicy: "您还未购买保单,如有疑问请", | ||
738 | customService : "联系客服", | ||
730 | }, | 739 | }, |
731 | reservation: { | 740 | reservation: { |
732 | submitBtn: '确认', | 741 | submitBtn: '确认', | ... | ... |
... | @@ -24,7 +24,7 @@ export default { | ... | @@ -24,7 +24,7 @@ export default { |
24 | i18n() { | 24 | i18n() { |
25 | return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {}; | 25 | return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {}; |
26 | }, | 26 | }, |
27 | showPanel(){ | 27 | showPanel() { |
28 | return this.showProfileInfo || this.showUnAuth; | 28 | return this.showProfileInfo || this.showUnAuth; |
29 | } | 29 | } |
30 | }, | 30 | }, |
... | @@ -50,16 +50,28 @@ export default { | ... | @@ -50,16 +50,28 @@ export default { |
50 | }, | 50 | }, |
51 | logoutAction() { | 51 | logoutAction() { |
52 | this.showUnAuth = true; | 52 | this.showUnAuth = true; |
53 | this.showProfileInfo = false; | ||
53 | this.$emit("onLogout", {}); | 54 | this.$emit("onLogout", {}); |
54 | }, | 55 | }, |
55 | gotoLoginPage() { | 56 | gotoLoginPage() { |
56 | this.$router.push({ path: "/login" }); | 57 | let callback = this.$route.path; |
58 | let separator = "?"; | ||
59 | for (let key in this.$route.query) { | ||
60 | callback += separator + key + "=" + this.$route.query[key]; | ||
61 | separator = "&"; | ||
62 | } | ||
63 | this.$router.push({ path: "/login?callback=" + callback }); | ||
57 | }, | 64 | }, |
58 | gotoRegisterPage() { | 65 | gotoRegisterPage() { |
59 | this.$router.push({ path: "/register" }); | 66 | this.$router.push({ path: "/register" }); |
60 | }, | 67 | }, |
61 | gotoInformationPage(){ | 68 | gotoInformationPage() { |
62 | this.$router.push({ path: "/infomation/improve" }); | 69 | this.$router.push({ path: "/infomation/improve" }); |
70 | }, | ||
71 | noAuth() { | ||
72 | this.$store.commit("SET_USER_INFO", null); | ||
73 | this.initData(); | ||
74 | this.$emit("onLogout", {}); | ||
63 | } | 75 | } |
64 | }, | 76 | }, |
65 | mounted() { | 77 | mounted() { | ... | ... |
... | @@ -19,10 +19,21 @@ export default { | ... | @@ -19,10 +19,21 @@ export default { |
19 | type: Boolean, | 19 | type: Boolean, |
20 | default: false | 20 | default: false |
21 | }, | 21 | }, |
22 | // 过滤类型,含这些模型 | ||
23 | // history : 历史不可选择 | ||
24 | // future : 未来不可选择 | ||
25 | // weekend : 周末不可选择 | ||
26 | // today : 当日不可选择 | ||
27 | filtModel: { | ||
28 | type: Array, | ||
29 | default() { | ||
30 | return ["history", "weekend", "today"] | ||
31 | } | ||
32 | }, | ||
22 | // 需要过滤的日期列表 格式 ["yyyy-MM-dd","yyyy-MM-dd"] | 33 | // 需要过滤的日期列表 格式 ["yyyy-MM-dd","yyyy-MM-dd"] |
23 | filterDates: { | 34 | filterDates: { |
24 | type: Array, | 35 | type: Array, |
25 | default () { | 36 | default() { |
26 | return [] // ["2019-11-26", "2019-11-28"] | 37 | return [] // ["2019-11-26", "2019-11-28"] |
27 | } | 38 | } |
28 | }, | 39 | }, |
... | @@ -95,6 +106,10 @@ export default { | ... | @@ -95,6 +106,10 @@ export default { |
95 | } | 106 | } |
96 | }, | 107 | }, |
97 | methods: { | 108 | methods: { |
109 | activity(item) { | ||
110 | let ymd = item.year + "-" + (item.month > 9 ? item.month : "0" + item.month) + "-" + (item.date > 9 ? item.date : "0" + item.date); | ||
111 | return ymd == this.dateValue; | ||
112 | }, | ||
98 | /** | 113 | /** |
99 | * 画月历图 | 114 | * 画月历图 |
100 | * 所需数据 | 115 | * 所需数据 |
... | @@ -122,10 +137,28 @@ export default { | ... | @@ -122,10 +137,28 @@ export default { |
122 | let curData = {} | 137 | let curData = {} |
123 | curData.standards = 0; | 138 | curData.standards = 0; |
124 | let date = index + 1; | 139 | let date = index + 1; |
125 | let day = Date.parse(`${year}.${month}.${date}`).getDay(); | 140 | let buildDate = Date.parse(`${year}.${month}.${date}`); |
141 | let nowDate = new Date(); | ||
142 | let day = buildDate.getDay(); | ||
126 | let isWeekend = day == 0 || day == 6; | 143 | let isWeekend = day == 0 || day == 6; |
127 | let disable = false; // 判断是否不可选 | 144 | let disable = false; // 判断是否不可选 |
128 | disable = isWeekend && !this.weekend; // 判断周末不可选 | 145 | if (this.filtModel.indexOf("weekend") >= 0) { |
146 | disable = isWeekend; | ||
147 | } | ||
148 | if (!disable && this.filtModel.indexOf("future") >= 0) { | ||
149 | buildDate.setHours(23, 59, 59, 999); | ||
150 | disable = buildDate.getTime() > nowDate.getTime() | ||
151 | } | ||
152 | if (!disable && this.filtModel.indexOf("history") >= 0) { | ||
153 | buildDate.setHours(0, 0, 0, 0); | ||
154 | disable = buildDate.getTime() < nowDate.getTime() | ||
155 | } | ||
156 | if (!disable && this.filtModel.indexOf("today") >= 0) { | ||
157 | buildDate.setHours(0, 0, 0, 0); | ||
158 | nowDate.setHours(0, 0, 0, 0); | ||
159 | disable = buildDate.getTime() == nowDate.getTime(); | ||
160 | } | ||
161 | // disable = isWeekend && !this.weekend; // 判断周末不可选 | ||
129 | let filterDates = this.filterDates; | 162 | let filterDates = this.filterDates; |
130 | filterDates.forEach(element => { | 163 | filterDates.forEach(element => { |
131 | let curDate = `${year}-${month}-${date}`; | 164 | let curDate = `${year}-${month}-${date}`; |
... | @@ -243,7 +276,7 @@ export default { | ... | @@ -243,7 +276,7 @@ export default { |
243 | disable: index == 0 || index == 11 | 276 | disable: index == 0 || index == 11 |
244 | }); | 277 | }); |
245 | } | 278 | } |
246 | this.yearRange = `${yearPage * 10 + 0 }-${yearPage * 10 + 9 }` | 279 | this.yearRange = `${yearPage * 10 + 0}-${yearPage * 10 + 9}` |
247 | this.yearList = yearList; | 280 | this.yearList = yearList; |
248 | }, | 281 | }, |
249 | // 显示日历 | 282 | // 显示日历 |
... | @@ -289,7 +322,6 @@ export default { | ... | @@ -289,7 +322,6 @@ export default { |
289 | } | 322 | } |
290 | }, | 323 | }, |
291 | onNextHandler() { | 324 | onNextHandler() { |
292 | console.log("this.dateType:", this.dateType); | ||
293 | if (this.dateType == 1) { | 325 | if (this.dateType == 1) { |
294 | this.nextMonth(); | 326 | this.nextMonth(); |
295 | return; | 327 | return; |
... | @@ -313,20 +345,60 @@ export default { | ... | @@ -313,20 +345,60 @@ export default { |
313 | } | 345 | } |
314 | this.dateValue = `${year}-${month}-${date}`; | 346 | this.dateValue = `${year}-${month}-${date}`; |
315 | }, | 347 | }, |
316 | initData() {} | 348 | initData() { |
317 | }, | ||
318 | mounted() {}, | ||
319 | created() { | ||
320 | // 设置今天日期 | 349 | // 设置今天日期 |
350 | let isInit = false; | ||
351 | if (this.value) { | ||
352 | let ymd = this.value.split("-"); | ||
353 | if (ymd.length == 3) { | ||
354 | try { | ||
355 | this.year = Number(ymd[0]); | ||
356 | this.month = Number(ymd[1]); | ||
357 | this.date = Number(ymd[2]); | ||
358 | isInit = true; | ||
359 | } catch (e) { | ||
360 | } | ||
361 | } | ||
362 | } | ||
363 | if (!isInit) { | ||
321 | let today = Date.today(); | 364 | let today = Date.today(); |
365 | try { | ||
366 | if (this.filtModel.indexOf("today") >= 0) { | ||
367 | if (this.filtModel.indexOf("future") >= 0) { | ||
368 | today.setDate(today.getDate() - 1); | ||
369 | if (this.filtModel.indexOf("weekend") >= 0) { | ||
370 | let day = today.getDay(); | ||
371 | let m = day == 0 ? -2 : day == 6 ? -1 : 0; | ||
372 | today.setDate(today.getDate() + m); | ||
373 | } | ||
374 | } else if (this.filtModel.indexOf("history") >= 0) { | ||
375 | today.setDate(today.getDate() + 1); | ||
376 | if (this.filtModel.indexOf("weekend") >= 0) { | ||
377 | let day = today.getDay(); | ||
378 | let m = day == 0 ? 1 : day == 6 ? 2 : 0; | ||
379 | today.setDate(today.getDate() + m); | ||
380 | } | ||
381 | } | ||
382 | } | ||
383 | } catch (e) { | ||
384 | console.error(e); | ||
385 | } | ||
322 | this.year = today.getFullYear(); | 386 | this.year = today.getFullYear(); |
323 | this.month = today.getMonth() + 1; | 387 | this.month = today.getMonth() + 1; |
324 | this.date = today.getDate(); | 388 | this.date = today.getDate(); |
389 | } | ||
325 | this.formatDate(); | 390 | this.formatDate(); |
391 | } | ||
392 | }, | ||
393 | mounted() { | ||
394 | }, | ||
395 | created() { | ||
396 | this.initData(); | ||
326 | }, | 397 | }, |
327 | watch: { | 398 | watch: { |
328 | value(val) { | 399 | value(val) { |
329 | this.dateValue = val; | 400 | this.dateValue = val; |
401 | this.initData(); | ||
330 | }, | 402 | }, |
331 | dateValue(val) { | 403 | dateValue(val) { |
332 | this.$emit('input', val) | 404 | this.$emit('input', val) | ... | ... |
... | @@ -47,7 +47,7 @@ | ... | @@ -47,7 +47,7 @@ |
47 | <!-- 日历主体 --> | 47 | <!-- 日历主体 --> |
48 | <div class="tr"> | 48 | <div class="tr"> |
49 | <div class="td" v-for="(item,index) in fortmatMonthData" :key="index"> | 49 | <div class="td" v-for="(item,index) in fortmatMonthData" :key="index"> |
50 | <div @click="selectDay(item.disable ? null : item)" v-if="item && item.date" class="pointer point" :class="{'sel':item && item.date && item.date == date,'disable':item.disable}"> | 50 | <div @click="selectDay(item.disable ? null : item)" v-if="item && item.date" class="pointer point" :class="{'sel':item && activity(item),'disable':item.disable}"> |
51 | <div>{{item && item.date || ""}}</div> | 51 | <div>{{item && item.date || ""}}</div> |
52 | </div> | 52 | </div> |
53 | </div> | 53 | </div> | ... | ... |
... | @@ -5,52 +5,70 @@ import { | ... | @@ -5,52 +5,70 @@ import { |
5 | } from '@/api/fetch-api.js' | 5 | } from '@/api/fetch-api.js' |
6 | 6 | ||
7 | import Auth from '@components/auth/auth.vue'; | 7 | import Auth from '@components/auth/auth.vue'; |
8 | import PolicyHeadList from "./policy-head-list.vue"; | ||
8 | 9 | ||
9 | export default { | 10 | export default { |
10 | name: "InsuranceQuery", | 11 | name: "InsuranceQuery", |
11 | data() { | 12 | data() { |
12 | return { | 13 | return { |
13 | showForm: false, | 14 | showForm: false, |
14 | dataForm: { | 15 | dataForm: null, |
15 | |||
16 | }, | ||
17 | insuranceForm: { | 16 | insuranceForm: { |
18 | f1: true, | 17 | f1: true, |
19 | f2: true, | 18 | f2: true, |
20 | f3: true, | 19 | f3: true, |
21 | f4: true, | 20 | f4: true, |
22 | f5: true, | 21 | f5: true, |
23 | } | 22 | }, |
23 | policy: null, | ||
24 | } | 24 | } |
25 | }, | 25 | }, |
26 | methods: { | 26 | methods: { |
27 | test() { | 27 | handlePolicySelect(data) { |
28 | let i18n = this.$i18n.locale; | 28 | let submitData = { |
29 | let data = {}; | 29 | policyId: data[0].id, |
30 | if (i18n == 'zh') { | 30 | policyCode: data[0].code |
31 | data.v1 = "分红重疾"; | 31 | } |
32 | data.v2 = "终身"; | 32 | this.policy = submitData; |
33 | data.v3 = "深圳市益田路5033号"; | 33 | this.dataForm = null; |
34 | data.v4 = "张三"; | 34 | httpPost({ url: api.policyDetail, sid: true, data: submitData }).then(res => { |
35 | data.v4_2 = "父母"; | 35 | this.dataForm = res; |
36 | data.v4_3 = "子女"; | 36 | }).catch(err => { |
37 | data.v5 = "银行转账"; | 37 | if (err.code == 404) { |
38 | data.v6 = "港币"; | 38 | this.$refs.auth.noAuth(); |
39 | data.v7 = "平安银行"; | 39 | } |
40 | data.v8 = "现金"; | 40 | }); |
41 | // console.log(data); | ||
42 | }, | ||
43 | |||
44 | toMoneyCode(moneyCode) { | ||
45 | switch (moneyCode) { | ||
46 | case "USD": | ||
47 | return "$"; | ||
48 | default: | ||
49 | return "HK$"; | ||
50 | } | ||
51 | }, | ||
52 | toMoneyCodeName(moneyCode) { | ||
53 | switch (moneyCode) { | ||
54 | case "USD": | ||
55 | return "美元"; | ||
56 | default: | ||
57 | return "港币"; | ||
58 | } | ||
59 | }, | ||
60 | toModifyPage(type) { | ||
61 | // 1=受保人;2=投保人 | ||
62 | if (!this.policy || !this.dataForm) { | ||
63 | return; | ||
64 | } | ||
65 | let data = encodeURIComponent(JSON.stringify({ id: this.policy.policyId, code: this.policy.policyCode })); | ||
66 | sessionStorage.setItem("_hklife_policy", data); | ||
67 | if (type == 1) { | ||
68 | this.$router.push({ path: "/custom/service", query: { q: "m43", u: 1 } }); | ||
41 | } else { | 69 | } else { |
42 | data.v1 = "分紅重疾"; | 70 | this.$router.push({ path: "/custom/service", query: { q: "m43", u: 2 } }); |
43 | data.v2 = "終身"; | ||
44 | data.v3 = "深圳市益田路5033號"; | ||
45 | data.v4 = "張三"; | ||
46 | data.v4_2 = "父母"; | ||
47 | data.v4_3 = "子女"; | ||
48 | data.v5 = "銀行轉帳"; | ||
49 | data.v6 = "港幣"; | ||
50 | data.v7 = "平安銀行"; | ||
51 | data.v8 = "現金"; | ||
52 | } | 71 | } |
53 | this.$set(this, 'dataForm', data); | ||
54 | }, | 72 | }, |
55 | userLogout() { | 73 | userLogout() { |
56 | this.showForm = false; | 74 | this.showForm = false; |
... | @@ -60,9 +78,9 @@ export default { | ... | @@ -60,9 +78,9 @@ export default { |
60 | } | 78 | } |
61 | }, | 79 | }, |
62 | components: { | 80 | components: { |
63 | Auth | 81 | Auth, |
82 | PolicyHeadList | ||
64 | }, | 83 | }, |
65 | mounted() { | 84 | mounted() { |
66 | this.test(); | ||
67 | }, | 85 | }, |
68 | } | 86 | } | ... | ... |
... | @@ -96,6 +96,15 @@ | ... | @@ -96,6 +96,15 @@ |
96 | display: flex; | 96 | display: flex; |
97 | justify-content: space-between; | 97 | justify-content: space-between; |
98 | margin: auto; | 98 | margin: auto; |
99 | |||
100 | div:first-child{ | ||
101 | text-align: left; | ||
102 | min-width: 6.666667rem !important; | ||
103 | } | ||
104 | } | ||
105 | |||
106 | .cell1:nth-child(1){ | ||
107 | text-align: right !important; | ||
99 | } | 108 | } |
100 | 109 | ||
101 | .separator-v { | 110 | .separator-v { |
... | @@ -106,6 +115,7 @@ | ... | @@ -106,6 +115,7 @@ |
106 | } | 115 | } |
107 | } | 116 | } |
108 | 117 | ||
118 | |||
109 | .label span { | 119 | .label span { |
110 | color: #f05a23; | 120 | color: #f05a23; |
111 | margin-left: .583333rem; | 121 | margin-left: .583333rem; | ... | ... |
This diff is collapsed.
Click to expand it.
... | @@ -5,33 +5,43 @@ import { | ... | @@ -5,33 +5,43 @@ import { |
5 | } from '@/api/fetch-api.js' | 5 | } from '@/api/fetch-api.js' |
6 | 6 | ||
7 | import Auth from '@components/auth/auth.vue'; | 7 | import Auth from '@components/auth/auth.vue'; |
8 | import modalComp from '@/components/modal-comp/modal-comp.vue'; | ||
9 | import PolicyHeadList from "./policy-head-list.vue"; | ||
8 | 10 | ||
9 | export default { | 11 | export default { |
10 | data() { | 12 | data() { |
11 | return { | 13 | return { |
14 | loading: false, | ||
12 | showForm: false, | 15 | showForm: false, |
13 | key: 'value', | 16 | key: 'value', |
14 | checked1: false, | 17 | checked1: false, |
15 | checked2: false, | 18 | checked2: false, |
16 | checked3: false, | 19 | checked3: false, |
20 | dataInit: false, | ||
21 | selectedPolicies: [], | ||
17 | data: { | 22 | data: { |
18 | mobileAreaCode: "", | 23 | mobileAreaCode: "", |
19 | mobile: "", | 24 | mobile: "", |
20 | mobileAcceptMessage: 0, | ||
21 | email: "", | 25 | email: "", |
22 | emailAcceptMessage: 0, | ||
23 | address: "", | 26 | address: "", |
24 | addressAcceptMessage: 0 | ||
25 | }, | 27 | }, |
26 | errorTips: { | 28 | errorTips: { |
27 | e1: "", | 29 | e1: "", |
28 | e2: "", | 30 | e2: "", |
29 | e3: "" | 31 | e3: "" |
30 | }, | 32 | }, |
33 | |||
34 | modalSimpleVisiable: false, | ||
35 | modalVisiable: false, | ||
36 | targetPath: "", | ||
37 | modalIcon: "succ", | ||
38 | modalContent: "", | ||
31 | } | 39 | } |
32 | }, | 40 | }, |
33 | components: { | 41 | components: { |
34 | Auth | 42 | Auth, |
43 | PolicyHeadList, | ||
44 | modalComp | ||
35 | }, | 45 | }, |
36 | computed: { | 46 | computed: { |
37 | locale() { | 47 | locale() { |
... | @@ -39,50 +49,73 @@ export default { | ... | @@ -39,50 +49,73 @@ export default { |
39 | }, | 49 | }, |
40 | i18n() { | 50 | i18n() { |
41 | return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {}; | 51 | return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {}; |
52 | }, | ||
53 | submitBtnDisabled() { | ||
54 | let b1 = !this.selectedPolicies || this.selectedPolicies.length == 0; | ||
55 | let b2 = !this.data.address && !this.data.email && !this.data.mobile; | ||
56 | return b1 || b2; | ||
42 | } | 57 | } |
43 | }, | 58 | }, |
44 | methods: { | 59 | methods: { |
60 | showModal(content, icon) { | ||
61 | icon = !icon || typeof icon === "undefined" ? "succ" : icon; | ||
62 | this.modalIcon = icon; | ||
63 | this.modalContent = content; | ||
64 | this.modalVisiable = true; | ||
65 | }, | ||
45 | modalCallback() { | 66 | modalCallback() { |
46 | this.modalVisiable = false; | 67 | this.modalVisiable = false; |
47 | }, | 68 | }, |
48 | sessionLost() { | ||
49 | // let message = this.i18n.glbalTips.sessionLost; | ||
50 | // alert(message); | ||
51 | // let targetPath = "/login?callback=" + this.buildCallbackPath(); | ||
52 | // this.$router.push({ | ||
53 | // path: targetPath | ||
54 | // }); | ||
55 | }, | ||
56 | showSuccess() { | 69 | showSuccess() { |
57 | alert("更新成功") | 70 | this.showModal(this.i18n.policyChangeContact.success); |
58 | }, | 71 | }, |
59 | updateContactsHandler() { | 72 | updateContactsHandler() { |
73 | if (this.submitBtnDisabled) { | ||
74 | return; | ||
75 | } | ||
76 | |||
60 | let b1 = this.checkMobile(); | 77 | let b1 = this.checkMobile(); |
61 | let b2 = this.checkEmail(); | 78 | let b2 = this.checkEmail(); |
62 | let b3 = this.checkAddress(); | 79 | let b3 = this.checkAddress(); |
63 | let b = b1 & b2 & b3; | 80 | let b = b1 & b2 & b3; |
64 | if (b) { | 81 | if (b) { |
65 | this.data.mobileAcceptMessage = this.checked1 ? 1 : 0; | 82 | if (this.loading) { |
66 | this.data.addressAcceptMessage = this.checked2 ? 1 : 0; | 83 | return; |
67 | this.data.emailAcceptMessage = this.checked3 ? 1 : 0; | 84 | } |
68 | 85 | let policies = []; | |
86 | this.selectedPolicies.forEach(element => { | ||
87 | policies.push({ policyId: element.id, policyCode: element.code }); | ||
88 | }); | ||
89 | let data = { | ||
90 | mobileNo: this.data.mobile, | ||
91 | address: this.data.address, | ||
92 | email: this.data.email, | ||
93 | mobileNoAcceptMsg: this.checked1 ? 1 : 0, | ||
94 | addressAcceptMsg: this.checked2 ? 1 : 0, | ||
95 | emailAcceptMsg: this.checked3 ? 1 : 0, | ||
96 | policies: policies | ||
97 | } | ||
98 | this.loading = true; | ||
69 | httpPost({ | 99 | httpPost({ |
70 | url: api.updateContacts, | 100 | url: api.updatePolicyContanct, |
71 | data: this.data, | 101 | data: data, |
72 | sid: true | 102 | sid: true |
73 | }).then(() => { | 103 | }).then(() => { |
104 | this.loading = false; | ||
74 | this.showSuccess(); | 105 | this.showSuccess(); |
75 | }).catch(() => { | 106 | }).catch(err => { |
76 | this.sessionLost(); | 107 | this.loading = false; |
108 | if (err.code == 404) { | ||
109 | this.$refs.auth.noAuth(); | ||
110 | } | ||
77 | }) | 111 | }) |
78 | } | 112 | } |
79 | }, | 113 | }, |
80 | checkMobile() { | 114 | checkMobile() { |
81 | if (!this.data.mobile) { | 115 | if (this.data.mobile) { |
82 | this.errorTips.e1 = this.i18n.policyChangeContact.errorTips.e1; | 116 | let hkMobile = /^[5689]{1}\d{7}$/.test(this.data.mobile); |
83 | return false; | 117 | let zhMobile = /^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0-9])|(18[0-9])|(19[0-9]))\d{8}$/.test(this.data.mobile); |
84 | } else { | 118 | if (!hkMobile && !zhMobile) { |
85 | if (this.data.mobile.length != 8 && this.data.mobile.length != 11) { | ||
86 | this.errorTips.e1 = this.i18n.policyChangeContact.errorTips.e1; | 119 | this.errorTips.e1 = this.i18n.policyChangeContact.errorTips.e1; |
87 | return false; | 120 | return false; |
88 | } | 121 | } |
... | @@ -90,49 +123,53 @@ export default { | ... | @@ -90,49 +123,53 @@ export default { |
90 | return true; | 123 | return true; |
91 | }, | 124 | }, |
92 | checkAddress() { | 125 | checkAddress() { |
93 | if (!this.data.address) { | ||
94 | this.errorTips.e2 = this.i18n.policyChangeContact.errorTips.e2; | ||
95 | return false; | ||
96 | } | ||
97 | return true; | 126 | return true; |
98 | }, | 127 | }, |
99 | checkEmail() { | 128 | checkEmail() { |
100 | if (!/^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/.test(this.data.email)) { | 129 | if (this.data.email && !/^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/.test(this.data.email)) { |
101 | this.errorTips.e3 = this.i18n.policyChangeContact.errorTips.e3; | 130 | this.errorTips.e3 = this.i18n.policyChangeContact.errorTips.e3; |
102 | return false; | 131 | return false; |
103 | } | 132 | } |
104 | return true; | 133 | return true; |
105 | }, | 134 | }, |
106 | initData() { | 135 | initData() { |
136 | if (this.dataInit) { | ||
137 | return; | ||
138 | } | ||
139 | if (this.loading) { | ||
140 | return; | ||
141 | } | ||
142 | this.data = null; | ||
143 | this.loading = true; | ||
144 | let param = { | ||
145 | policyId: this.selectedPolicies[0].id, | ||
146 | policyCode: this.selectedPolicies[0].code | ||
147 | }; | ||
107 | httpPost({ | 148 | httpPost({ |
108 | url: api.getContacts, | 149 | url: api.policyDetail, |
150 | data: param, | ||
109 | sid: true | 151 | sid: true |
110 | }).then(response => { | 152 | }).then(response => { |
153 | this.data = {}; | ||
111 | if (response) { | 154 | if (response) { |
112 | this.data.mobile = response.mobile; | 155 | this.loading = false; |
113 | this.data.mobileAcceptMessage = response.mobileAcceptMessage; | 156 | this.dataInit = true; |
114 | this.data.email = response.email; | 157 | this.data.mobile = response.clientMobileNo; |
115 | this.data.emailAcceptMessage = response.emailAcceptMessage; | 158 | this.checked1 = "1" == response.clientMobileAcceptMessage; |
116 | this.data.address = response.address; | 159 | this.data.address = response.clientContactAddress; |
117 | this.data.addressAcceptMessage = response.addressAcceptMessage; | 160 | this.checked2 = "1" == response.clientAddressAcceptMessage; |
118 | } | 161 | this.data.email = response.clientEmail; |
119 | this.checked1 = this.data.mobileAcceptMessage == 1 ? true : false; | 162 | this.checked3 = "1" == response.clientEmailAcceptMessage; |
120 | this.checked2 = this.data.addressAcceptMessage == 1 ? true : false; | 163 | } |
121 | this.checked3 = this.data.emailAcceptMessage == 1 ? true : false; | ||
122 | }).catch(res => { | 164 | }).catch(res => { |
123 | if (res.code == "404") { | 165 | if (res.code == "404") { |
124 | this.sessionLost(); | 166 | this.$refs.auth.noAuth(); |
125 | } | 167 | } |
126 | }); | 168 | }); |
127 | }, | 169 | }, |
128 | buildCallbackPath() { | 170 | handlePolicySelect(data) { |
129 | let path = this.$route.path; | 171 | this.selectedPolicies = data; |
130 | let sep = "?" | 172 | this.initData(); |
131 | for (let key in this.$route.query) { | ||
132 | path += sep + key + "=" + this.$route.query[key]; | ||
133 | sep = "&"; | ||
134 | } | ||
135 | return path; | ||
136 | }, | 173 | }, |
137 | userLogout() { | 174 | userLogout() { |
138 | this.showForm = false; | 175 | this.showForm = false; |
... | @@ -153,7 +190,5 @@ export default { | ... | @@ -153,7 +190,5 @@ export default { |
153 | } | 190 | } |
154 | }, | 191 | }, |
155 | mounted() { | 192 | mounted() { |
156 | this.initData(); | 193 | } |
157 | }, | ||
158 | created() {} | ||
159 | } | 194 | } | ... | ... |
1 | 1 | ||
2 | <template> | 2 | <template> |
3 | <div> | 3 | <div> |
4 | <auth @onLogin="userLogin" @onLogout="userLogout" :checkProfile="true"></auth> | 4 | <auth @onLogin="userLogin" @onLogout="userLogout" :checkProfile="true" ref="auth"></auth> |
5 | <div class="container border" v-if="showForm"> | 5 | <modal-comp :visible="modalVisiable" :show-confirm="false" :icon="modalIcon" :content="modalContent" :confirm="modalCallback" :overlay="modalCallback"></modal-comp> |
6 | <template v-if="showForm"> | ||
7 | <policy-head-list :multiSelectable="true" @onSelect="handlePolicySelect"></policy-head-list> | ||
8 | <div class="container border" v-if="selectedPolicies.length > 0 && data"> | ||
6 | <div class="form"> | 9 | <div class="form"> |
7 | <div class="form-item"> | 10 | <div class="form-item"> |
8 | <div class="label"> | 11 | <div class="label"> |
... | @@ -55,10 +58,12 @@ | ... | @@ -55,10 +58,12 @@ |
55 | </div> | 58 | </div> |
56 | </div> | 59 | </div> |
57 | </div> | 60 | </div> |
58 | <div class="submit-btn" @click="updateContactsHandler"> | 61 | <div class="submit-btn" @click="updateContactsHandler" :class="{disabled: submitBtnDisabled}"> |
59 | {{$t("policyChangeContact.submit")}} | 62 | {{$t("policyChangeContact.submit")}} |
60 | </div> | 63 | </div> |
61 | </div> | 64 | </div> |
65 | <div v-else style="height:400px"></div> | ||
66 | </template> | ||
62 | </div> | 67 | </div> |
63 | </template> | 68 | </template> |
64 | 69 | ... | ... |
... | @@ -5,21 +5,39 @@ import { | ... | @@ -5,21 +5,39 @@ import { |
5 | } from '@/api/fetch-api.js' | 5 | } from '@/api/fetch-api.js' |
6 | 6 | ||
7 | import Auth from '@components/auth/auth.vue'; | 7 | import Auth from '@components/auth/auth.vue'; |
8 | import PolicyHeadList from "./policy-head-list.vue"; | ||
9 | import DatePicker from '@/components/date-picker/date-picker.vue' | ||
10 | import modalComp from '@/components/modal-comp/modal-comp.vue'; | ||
8 | import modalUploadCardComp from '@/components/modal-upload-card-comp/modal-upload-card-comp.vue'; | 11 | import modalUploadCardComp from '@/components/modal-upload-card-comp/modal-upload-card-comp.vue'; |
9 | 12 | ||
10 | export default { | 13 | export default { |
11 | data() { | 14 | data() { |
12 | return { | 15 | return { |
16 | loading: false, | ||
13 | showForm: false, | 17 | showForm: false, |
14 | key: 'value', | 18 | key: 'value', |
15 | isHkCus: true, | 19 | isOwner: true, |
16 | checked: false, | 20 | checked: false, |
17 | modalUploadCardVisiable: false, | 21 | modalUploadCardVisiable: false, |
22 | selectedPolicies: [], | ||
23 | data: null, | ||
24 | // 保单信息 | ||
25 | policy: null, | ||
26 | |||
27 | // 模态窗 | ||
28 | modalSimpleVisiable: false, | ||
29 | modalVisiable: false, | ||
30 | targetPath: "", | ||
31 | modalIcon: "succ", | ||
32 | modalContent: "", | ||
18 | } | 33 | } |
19 | }, | 34 | }, |
20 | components: { | 35 | components: { |
21 | modalUploadCardComp, | 36 | modalUploadCardComp, |
22 | Auth | 37 | PolicyHeadList, |
38 | Auth, | ||
39 | DatePicker, | ||
40 | modalComp | ||
23 | }, | 41 | }, |
24 | computed: { | 42 | computed: { |
25 | locale() { | 43 | locale() { |
... | @@ -27,10 +45,107 @@ export default { | ... | @@ -27,10 +45,107 @@ export default { |
27 | }, | 45 | }, |
28 | i18n() { | 46 | i18n() { |
29 | return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {}; | 47 | return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {}; |
30 | } | 48 | }, |
49 | sexCandidates() { | ||
50 | let i18n = this.$i18n.messages[this.$i18n.locale]; | ||
51 | return i18n.infomationImprove.candidates.sex; | ||
52 | }, | ||
53 | idTypeCandidates() { | ||
54 | let i18n = this.$i18n.messages[this.$i18n.locale]; | ||
55 | return i18n.infomationImprove.candidates.idType; | ||
56 | }, | ||
31 | }, | 57 | }, |
32 | methods: { | 58 | methods: { |
33 | initData() {}, | 59 | showModal(content, icon) { |
60 | icon = !icon || typeof icon === "undefined" ? "succ" : icon; | ||
61 | this.modalIcon = icon; | ||
62 | this.modalContent = content; | ||
63 | this.modalVisiable = true; | ||
64 | }, | ||
65 | modalCallback() { | ||
66 | this.modalVisiable = false; | ||
67 | }, | ||
68 | loadData() { | ||
69 | if (this.loading) { | ||
70 | return; | ||
71 | } | ||
72 | this.loading = true; | ||
73 | this.data = null; | ||
74 | let param = { | ||
75 | policyId: this.selectedPolicies[0].id, | ||
76 | policyCode: this.selectedPolicies[0].code | ||
77 | }; | ||
78 | httpPost({ | ||
79 | url: api.policyDetail, | ||
80 | data: param, | ||
81 | sid: true | ||
82 | }).then(response => { | ||
83 | this.loading = false; | ||
84 | if (response) { | ||
85 | this.policy = response; | ||
86 | this.initData(); | ||
87 | } | ||
88 | }).catch(res => { | ||
89 | this.loading = false; | ||
90 | if (res.code == "404") { | ||
91 | this.$refs.auth.noAuth(); | ||
92 | } | ||
93 | }); | ||
94 | }, | ||
95 | initData() { | ||
96 | let res = this.policy; | ||
97 | let name = ""; | ||
98 | let isOwner = this.isOwner; | ||
99 | if (isOwner) { | ||
100 | name = res.clientNameCn ? res.clientNameCn : res.clientNameEn; | ||
101 | } else { | ||
102 | name = res.insuredNameCn ? res.insuredNameCn : res.insuredNameEn; | ||
103 | } | ||
104 | let data = { | ||
105 | name: name, | ||
106 | idType: isOwner ? res.clientIdType : res.insuredIdType, | ||
107 | idNumber: isOwner ? res.clientIdNumber : res.insuredIdNumber, | ||
108 | idExpireAt: isOwner ? res.clientExpireAt : res.insurantExpireAt, | ||
109 | nature: isOwner ? res.clientNationality : res.insurantNationality, | ||
110 | company: isOwner ? res.clientCompany : res.insurantCompany, | ||
111 | marriage: isOwner ? res.clientMarriage : res.insurantMarriage, | ||
112 | sex: isOwner ? res.clientSex : res.insuredSex, | ||
113 | birthday: isOwner ? res.clientBirthday : res.insuredBirthday | ||
114 | }; | ||
115 | data.sex = data.sex ? data.sex : "M"; | ||
116 | console.log("data ===", data); | ||
117 | this.$set(this, 'data', data); | ||
118 | }, | ||
119 | handlePolicySelect(data) { | ||
120 | this.selectedPolicies = data; | ||
121 | this.loadData(); | ||
122 | }, | ||
123 | updatePolicyInfo() { | ||
124 | console.log(1, this.loading); | ||
125 | if (this.loading) { | ||
126 | return; | ||
127 | } | ||
128 | this.loading = true; | ||
129 | let param = JSON.parse(JSON.stringify(this.data)); | ||
130 | delete param.birthday; | ||
131 | delete param.sex; | ||
132 | param.modifyObj = this.isOwner ? 1 : 2; | ||
133 | param.policyId = this.selectedPolicies[0].id; | ||
134 | param.policyCode = this.selectedPolicies[0].code; | ||
135 | |||
136 | console.log("2,", param); | ||
137 | httpPost({ url: api.updatePolicyInfo, data: param, sid: true }).then(res => { | ||
138 | console.log("3,", res); | ||
139 | this.loading = false; | ||
140 | this.showModal(this.i18n.policyChangeInformation.success); | ||
141 | }).catch(err => { | ||
142 | this.loading = false; | ||
143 | if (err.code == 404) { | ||
144 | this.$refs.auth.noAuth(); | ||
145 | } | ||
146 | }); | ||
147 | |||
148 | }, | ||
34 | userLogout() { | 149 | userLogout() { |
35 | this.showForm = false; | 150 | this.showForm = false; |
36 | }, | 151 | }, |
... | @@ -38,6 +153,8 @@ export default { | ... | @@ -38,6 +153,8 @@ export default { |
38 | this.showForm = true; | 153 | this.showForm = true; |
39 | } | 154 | } |
40 | }, | 155 | }, |
41 | mounted() {}, | 156 | mounted() { |
42 | created() {} | 157 | this.isOwner = this.$route.query.u == 1 ? true : false; |
158 | }, | ||
159 | created() { } | ||
43 | } | 160 | } | ... | ... |
1 | 1 | ||
2 | <template> | 2 | <template> |
3 | <div> | 3 | <div> |
4 | <auth @onLogin="userLogin" @onLogout="userLogout" :checkProfile="true"></auth> | 4 | <auth @onLogin="userLogin" @onLogout="userLogout" :checkProfile="true" ref="auth"></auth> |
5 | <modal-upload-card-comp :visible="modalUploadCardVisiable" :show-confirm="true" ></modal-upload-card-comp> | 5 | <template v-if="showForm"> |
6 | <div class="container border" v-if="showForm"> | ||
7 | <div class="table"> | ||
8 | <div class="table-header orange"> | ||
9 | <div class="table-header-item">{{$t('policyChangeInformation.title')}}</div> | ||
10 | </div> | ||
11 | <div class="gird-g form"> | ||
12 | 6 | ||
13 | <!-- 變更對象 checkbox --> | ||
14 | <div class="pure-u-1 form-item form-item2"> | 7 | <div class="pure-u-1 form-item form-item2"> |
15 | <div class="label"> | 8 | <div class="label"> |
16 | {{$t('policyChangeInformation.hkClient')}} | 9 | {{$t('policyChangeInformation.obj')}} |
17 | </div> | 10 | </div> |
18 | <div class="cont"> | 11 | <div class="cont"> |
19 | <div class="boo-btn pointer" :class="{active:isHkCus}" @click="isHkCus=true">{{$t('policyChangeInformation.yes')}}</div> | 12 | <div class="boo-btn pointer" :class="{active:isOwner}" @click="isOwner=true">{{$t('policyChangeInformation.owner')}}</div> |
20 | <div class="boo-btn pointer" :class="{active:!isHkCus}" @click="isHkCus=false">{{$t('policyChangeInformation.no')}}</div> | 13 | <div class="boo-btn pointer" :class="{active:!isOwner}" @click="isOwner=false">{{$t('policyChangeInformation.insured')}}</div> |
21 | </div> | 14 | </div> |
22 | </div> | 15 | </div> |
23 | 16 | ||
24 | <!-- start --> | 17 | <policy-head-list :multiSelectable="false" @onSelect="handlePolicySelect" :model="'checkbox'"></policy-head-list> |
18 | <modal-upload-card-comp :visible="modalUploadCardVisiable" :show-confirm="true" ></modal-upload-card-comp> | ||
19 | <div class="container border" v-if="selectedPolicies.length > 0 && data"> | ||
20 | <div class="table"> | ||
21 | <div class="table-header orange"> | ||
22 | <div class="table-header-item">{{$t('policyChangeInformation.title')}}</div> | ||
23 | </div> | ||
24 | <div class="gird-g form"> | ||
25 | <!-- 1 --> | 25 | <!-- 1 --> |
26 | <div class="pure-u-1 pure-u-md-1-2 form-item"> | 26 | <div class="pure-u-1 pure-u-md-1-2 form-item"> |
27 | <div class="label"> | 27 | <div class="label"> |
28 | <div class="icon"><img src="@/assets/images/policy-change-information/icon-pci-info.png"></div> {{$t('policyChangeInformation.obj')}} | 28 | <div class="icon"><img src="@/assets/images/policy-change-information/icon-pci-info.png"></div> {{$t('policyChangeInformation.name')}} |
29 | </div> | 29 | </div> |
30 | <div class="ipt-wrap"> | 30 | <div class="ipt-wrap"> |
31 | <input class="ipt" type="text"> | 31 | <input class="ipt" type="text" v-model="data.name"> |
32 | </div> | 32 | </div> |
33 | </div> | 33 | </div> |
34 | 34 | ||
... | @@ -46,9 +46,11 @@ | ... | @@ -46,9 +46,11 @@ |
46 | </div> | 46 | </div> |
47 | <div class="ipt-wrap"> | 47 | <div class="ipt-wrap"> |
48 | <div class="down-arrow"></div> | 48 | <div class="down-arrow"></div> |
49 | <select disabled class="ipt disable"> | 49 | |
50 | <option v-if="locale !='zh'">男</option> | 50 | <select disabled class="ipt disable" v-model="data.sex"> |
51 | <option v-else>男</option> | 51 | <template v-if="sexCandidates"> |
52 | <option v-for="(item,index) in sexCandidates" :key="index" :value="item.value">{{item.name}}</option> | ||
53 | </template> | ||
52 | </select> | 54 | </select> |
53 | </div> | 55 | </div> |
54 | </div> | 56 | </div> |
... | @@ -66,7 +68,7 @@ | ... | @@ -66,7 +68,7 @@ |
66 | </div> | 68 | </div> |
67 | </div> | 69 | </div> |
68 | <div class="ipt-wrap"> | 70 | <div class="ipt-wrap"> |
69 | <input disabled placeholder="1999-1-1" class="ipt disable" type="text"> | 71 | <input disabled class="ipt disable" type="text" v-model="data.birthday"> |
70 | </div> | 72 | </div> |
71 | </div> | 73 | </div> |
72 | 74 | ||
... | @@ -77,12 +79,9 @@ | ... | @@ -77,12 +79,9 @@ |
77 | </div> | 79 | </div> |
78 | <div class="ipt-wrap"> | 80 | <div class="ipt-wrap"> |
79 | <div class="down-arrow"></div> | 81 | <div class="down-arrow"></div> |
80 | <select class="ipt"> | 82 | <select class="ipt" v-model="data.idType"> |
81 | <template v-if="locale =='zh'"> | 83 | <template v-if="idTypeCandidates"> |
82 | <option>身份证</option> | 84 | <option v-for="(item,index) in idTypeCandidates" :key="index" :value="item.value">{{item.name}}</option> |
83 | </template> | ||
84 | <template v-else> | ||
85 | <option>身份證</option> | ||
86 | </template> | 85 | </template> |
87 | </select> | 86 | </select> |
88 | </div> | 87 | </div> |
... | @@ -97,7 +96,7 @@ | ... | @@ -97,7 +96,7 @@ |
97 | <div class="eye"></div> | 96 | <div class="eye"></div> |
98 | <!-- --> | 97 | <!-- --> |
99 | <!-- <div class="eye eye-act"></div> --> | 98 | <!-- <div class="eye eye-act"></div> --> |
100 | <input class="ipt" type="text"> | 99 | <input class="ipt" type="text" v-model="data.idNumber"> |
101 | </div> | 100 | </div> |
102 | </div> | 101 | </div> |
103 | 102 | ||
... | @@ -107,7 +106,7 @@ | ... | @@ -107,7 +106,7 @@ |
107 | <div class="icon"><img src="@/assets/images/policy-change-information/icon-pci-card.png"></div> {{$t('policyChangeInformation.validityPeriod')}} | 106 | <div class="icon"><img src="@/assets/images/policy-change-information/icon-pci-card.png"></div> {{$t('policyChangeInformation.validityPeriod')}} |
108 | </div> | 107 | </div> |
109 | <div class="ipt-wrap"> | 108 | <div class="ipt-wrap"> |
110 | <input class="ipt" type="text"> | 109 | <date-picker class="date" v-model="data.idExpireAt" :filtModel="['history', 'today']"></date-picker> |
111 | </div> | 110 | </div> |
112 | </div> | 111 | </div> |
113 | 112 | ||
... | @@ -117,7 +116,7 @@ | ... | @@ -117,7 +116,7 @@ |
117 | <div class="icon"><img src="@/assets/images/policy-change-information/icon-pci-earth.png"></div> {{$t('policyChangeInformation.nationality')}} | 116 | <div class="icon"><img src="@/assets/images/policy-change-information/icon-pci-earth.png"></div> {{$t('policyChangeInformation.nationality')}} |
118 | </div> | 117 | </div> |
119 | <div class="ipt-wrap"> | 118 | <div class="ipt-wrap"> |
120 | <input class="ipt" type="text"> | 119 | <input class="ipt" type="text" v-model="data.nature"> |
121 | </div> | 120 | </div> |
122 | </div> | 121 | </div> |
123 | 122 | ||
... | @@ -127,7 +126,7 @@ | ... | @@ -127,7 +126,7 @@ |
127 | <div class="icon"><img src="@/assets/images/policy-change-information/icon-pci-build.png"></div> {{$t('policyChangeInformation.employer')}} | 126 | <div class="icon"><img src="@/assets/images/policy-change-information/icon-pci-build.png"></div> {{$t('policyChangeInformation.employer')}} |
128 | </div> | 127 | </div> |
129 | <div class="ipt-wrap"> | 128 | <div class="ipt-wrap"> |
130 | <input class="ipt" type="text"> | 129 | <input class="ipt" type="text" v-model="data.company"> |
131 | </div> | 130 | </div> |
132 | </div> | 131 | </div> |
133 | 132 | ||
... | @@ -137,7 +136,7 @@ | ... | @@ -137,7 +136,7 @@ |
137 | <div class="icon"><img src="@/assets/images/policy-change-information/icon-pci-love.png"></div> {{$t('policyChangeInformation.maritalStatus')}} | 136 | <div class="icon"><img src="@/assets/images/policy-change-information/icon-pci-love.png"></div> {{$t('policyChangeInformation.maritalStatus')}} |
138 | </div> | 137 | </div> |
139 | <div class="ipt-wrap"> | 138 | <div class="ipt-wrap"> |
140 | <input class="ipt" type="text"> | 139 | <input class="ipt" type="text" v-model="data.marriage"> |
141 | </div> | 140 | </div> |
142 | </div> | 141 | </div> |
143 | 142 | ||
... | @@ -145,11 +144,13 @@ | ... | @@ -145,11 +144,13 @@ |
145 | 144 | ||
146 | </div> | 145 | </div> |
147 | 146 | ||
148 | <div class="submit-btn"> | 147 | <div class="submit-btn" @click="updatePolicyInfo"> |
149 | {{$t("policyChangeInformation.submit")}} | 148 | {{$t("policyChangeInformation.submit")}} |
150 | </div> | 149 | </div> |
151 | </div> | 150 | </div> |
152 | </div> | 151 | </div> |
152 | <div v-else style="height:400px"></div> | ||
153 | </template> | ||
153 | </div> | 154 | </div> |
154 | 155 | ||
155 | </template> | 156 | </template> | ... | ... |
1 | import api from '@/api/api'; | ||
2 | import { | ||
3 | httpPost | ||
4 | } from '@/api/fetch-api.js'; | ||
5 | |||
6 | import { | ||
7 | mapState | ||
8 | } from 'vuex'; | ||
9 | |||
10 | export default { | ||
11 | props: { | ||
12 | multiSelectable: { | ||
13 | type: Boolean, | ||
14 | default: false | ||
15 | }, | ||
16 | model: { | ||
17 | type: String, | ||
18 | // checkbox | ||
19 | default: "download" | ||
20 | } | ||
21 | }, | ||
22 | name: "InsuranceQuery", | ||
23 | data() { | ||
24 | return { | ||
25 | myPolicyList: [], | ||
26 | maxShow: 2, | ||
27 | selectPolicyCode: "", | ||
28 | selectPolicyCodes: {}, | ||
29 | } | ||
30 | }, | ||
31 | computed: { | ||
32 | ...mapState({ | ||
33 | policyList: state => state.policyList | ||
34 | }), | ||
35 | }, | ||
36 | methods: { | ||
37 | queryList() { | ||
38 | if (this.policyList && this.policyList.length > 0) { | ||
39 | this.myPolicyList = this.policyList; | ||
40 | this.myPolicyList.forEach(element => { | ||
41 | element.activity = false; | ||
42 | }) | ||
43 | this.initSelected(); | ||
44 | } else { | ||
45 | httpPost({ url: api.policyList, sid: true }).then(res => { | ||
46 | if (!res || res.length == 0) { | ||
47 | this.myPolicyList = null; | ||
48 | } else { | ||
49 | res.forEach(element => { | ||
50 | element.activity = false; | ||
51 | // let len = element.policyCode.length; | ||
52 | // element.policyCodeStr = element.policyCode && len > 5 ? | ||
53 | // element.policyCode.substring(0, 2) + "**********" | ||
54 | // + element.policyCode.substring(len - 4, len) : element.policyCode; | ||
55 | }); | ||
56 | this.$store.commit("CACHE_POLICY_LIST", res); | ||
57 | this.myPolicyList = res; | ||
58 | } | ||
59 | this.initSelected(); | ||
60 | }).catch(e => { | ||
61 | this.myPolicyList = null; | ||
62 | switch (e.code) { | ||
63 | case "2002": | ||
64 | // 不是客户,没有购买保单 | ||
65 | break; | ||
66 | } | ||
67 | }) | ||
68 | } | ||
69 | }, | ||
70 | initSelected() { | ||
71 | let selectPolicy = null; | ||
72 | try { | ||
73 | let data = sessionStorage.getItem("_hklife_policy"); | ||
74 | if (data) { | ||
75 | sessionStorage.removeItem("_hklife_policy"); | ||
76 | selectPolicy = JSON.parse(decodeURIComponent(data)); | ||
77 | if (selectPolicy) { | ||
78 | if (this.multiSelectable) { | ||
79 | this.selectPolicyCodes[selectPolicy.code] = selectPolicy; | ||
80 | } else { | ||
81 | this.selectPolicyCode = selectPolicy.code; | ||
82 | } | ||
83 | this.$emit("onSelect", [selectPolicy]); | ||
84 | |||
85 | // 判断最大显示 | ||
86 | let index = -1; | ||
87 | for (let i = 0; i < this.myPolicyList.length; i++) { | ||
88 | if (selectPolicy.code == this.myPolicyList[i].policyCode) { | ||
89 | this.myPolicyList[i].activity = true; | ||
90 | index = i; | ||
91 | } | ||
92 | } | ||
93 | this.$set(this, "myPolicyList", this.myPolicyList); | ||
94 | if (index > 2) { | ||
95 | this.maxShow = this.myPolicyList.length; | ||
96 | } | ||
97 | } | ||
98 | } | ||
99 | } catch (e) { | ||
100 | |||
101 | } | ||
102 | }, | ||
103 | handlePolicySelect(item, index) { | ||
104 | let code = item.policyCode; | ||
105 | if (this.multiSelectable) { | ||
106 | let c = this.selectPolicyCodes[code]; | ||
107 | if (!c || typeof c == "undefined") { | ||
108 | item.activity = true; | ||
109 | this.selectPolicyCodes[code] = { code: code, id: item.policyId }; | ||
110 | } else { | ||
111 | item.activity = false; | ||
112 | delete this.selectPolicyCodes[code]; | ||
113 | } | ||
114 | // this.$set(this, 'myPolicyList', this.myPolicyList); | ||
115 | let data = []; | ||
116 | for (let key in this.selectPolicyCodes) { | ||
117 | data.push(this.selectPolicyCodes[key]); | ||
118 | } | ||
119 | this.$emit("onSelect", data); | ||
120 | } else { | ||
121 | if (code != this.selectPolicyCode) { | ||
122 | this.selectPolicyCode = code; | ||
123 | this.$emit("onSelect", [{ code: code, id: item.policyId }]); | ||
124 | } | ||
125 | } | ||
126 | }, | ||
127 | isPolicySelect(item, index) { | ||
128 | let code = item.policyCode; | ||
129 | if (this.multiSelectable) { | ||
130 | let c = this.selectPolicyCodes[code]; | ||
131 | if (!c || typeof c == "undefined") { | ||
132 | return false; | ||
133 | } else { | ||
134 | return true; | ||
135 | } | ||
136 | } | ||
137 | return false; | ||
138 | } | ||
139 | }, | ||
140 | components: { | ||
141 | }, | ||
142 | mounted() { | ||
143 | this.queryList(); | ||
144 | }, | ||
145 | } |
1 | @import '@/styles/_support'; | ||
2 | .container { | ||
3 | overflow-x: scroll; | ||
4 | } | ||
5 | .cell-group { | ||
6 | margin-bottom: 1rem; | ||
7 | |||
8 | &:last-child { | ||
9 | margin-bottom: 0; | ||
10 | } | ||
11 | |||
12 | div { | ||
13 | color: #4c4948; | ||
14 | } | ||
15 | |||
16 | .w1 { | ||
17 | // width: 10rem; | ||
18 | width: 20rem; | ||
19 | text-align: center; | ||
20 | } | ||
21 | |||
22 | .w2 { | ||
23 | // width: 6.25rem; | ||
24 | width: 12.5rem; | ||
25 | text-align: center; | ||
26 | } | ||
27 | |||
28 | .table-header { | ||
29 | // width: 64.166667rem; | ||
30 | height: 3.25rem; | ||
31 | border-top-left-radius: .666667rem; | ||
32 | border-top-right-radius: .666667rem; | ||
33 | background-color: #f2f2f2; | ||
34 | display: flex; | ||
35 | align-items: center; | ||
36 | |||
37 | .normal-header { | ||
38 | // width: 58.833333rem; | ||
39 | @extend .bb; | ||
40 | padding: 0 2.75rem; | ||
41 | width: 100%; | ||
42 | margin: auto; | ||
43 | display: flex; | ||
44 | justify-content: space-between; | ||
45 | align-items: center; | ||
46 | |||
47 | .title { | ||
48 | font-weight: bold; | ||
49 | color: #575453; | ||
50 | } | ||
51 | |||
52 | .guide { | ||
53 | transition: all 0.5s; | ||
54 | cursor: pointer; | ||
55 | width: 1rem; | ||
56 | height: .666667rem; | ||
57 | background: url("~@/assets/images/insurance-query/triangle-down.png") no-repeat center center; | ||
58 | background-size: 100% 100%; | ||
59 | } | ||
60 | |||
61 | .rotate180 { | ||
62 | transform: rotate(180deg); | ||
63 | transition: all 0.5s; | ||
64 | } | ||
65 | } | ||
66 | } | ||
67 | |||
68 | .table-content { | ||
69 | // width: 64.166667rem; | ||
70 | |||
71 | height: auto; | ||
72 | // display: inline-block; | ||
73 | border-bottom-left-radius: .666667rem; | ||
74 | border-bottom-right-radius: .666667rem; | ||
75 | border-left: solid .083333rem #f2f2f2; | ||
76 | border-right: solid .083333rem #f2f2f2; | ||
77 | border-bottom: solid .083333rem #f2f2f2; | ||
78 | padding: 0 2.75rem; | ||
79 | // max-height: 41.666667rem; | ||
80 | // transition: max-height ease-out 0.3s !important; | ||
81 | overflow: hidden; | ||
82 | |||
83 | .data-line { | ||
84 | // padding: 0 2.75rem; | ||
85 | height: 4.416667rem; | ||
86 | margin: auto; | ||
87 | display: flex; | ||
88 | justify-content: space-between; | ||
89 | align-items: center; | ||
90 | |||
91 | .td { | ||
92 | display: flex; | ||
93 | justify-content: center; | ||
94 | align-items: center; | ||
95 | } | ||
96 | |||
97 | .cell1 { | ||
98 | width: 98%; | ||
99 | display: flex; | ||
100 | justify-content: space-between; | ||
101 | margin: auto; | ||
102 | } | ||
103 | |||
104 | .separator-v { | ||
105 | height: 2.5rem; | ||
106 | width: .166667rem; | ||
107 | background-color: #f2f2f2; | ||
108 | margin: 0 .916667rem; | ||
109 | } | ||
110 | } | ||
111 | |||
112 | .label span { | ||
113 | color: #f05a23; | ||
114 | margin-left: .583333rem; | ||
115 | cursor: pointer; | ||
116 | text-decoration: underline; | ||
117 | } | ||
118 | |||
119 | .separator-h { | ||
120 | width: 100%; | ||
121 | height: 1px; | ||
122 | background-color: #f2f2f2; | ||
123 | } | ||
124 | } | ||
125 | |||
126 | .orange { | ||
127 | background-color: #f05a23 !important; | ||
128 | |||
129 | div { | ||
130 | color: #ffffff; | ||
131 | } | ||
132 | } | ||
133 | |||
134 | .hide { | ||
135 | max-height: 0; | ||
136 | border-bottom: none; | ||
137 | } | ||
138 | |||
139 | .sp { | ||
140 | text-decoration :underline; | ||
141 | padding: 0 .4rem; | ||
142 | } | ||
143 | |||
144 | .ac { | ||
145 | color: #f05a23 !important; | ||
146 | } | ||
147 | } | ||
148 | |||
149 | .show-more-btn { | ||
150 | width: 100%; | ||
151 | color: #f05a23 !important; | ||
152 | text-decoration :underline; | ||
153 | cursor: pointer; | ||
154 | justify-content: center !important; | ||
155 | } | ||
156 | |||
157 | .pointer { | ||
158 | cursor: pointer; | ||
159 | } | ||
160 | |||
161 | .activity { | ||
162 | background-color: #f05a23 !important; | ||
163 | opacity: .5; | ||
164 | div{ | ||
165 | color: #FFFFFF !important; | ||
166 | } | ||
167 | } | ||
168 | |||
169 | .empty{ | ||
170 | height: 41.666667rem; | ||
171 | display: flex; | ||
172 | align-items: center; | ||
173 | justify-content: center; | ||
174 | |||
175 | .tips { | ||
176 | display: flex; | ||
177 | |||
178 | .icon { | ||
179 | margin-right: 5px; | ||
180 | display: inline-block; | ||
181 | } | ||
182 | |||
183 | .btn { | ||
184 | color: #f05a23; | ||
185 | } | ||
186 | } | ||
187 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | <template> | ||
2 | <div class="container"> | ||
3 | <div class="cell-group"> | ||
4 | <div class="table-header orange"> | ||
5 | <div class="normal-header"> | ||
6 | <div class="td w1">{{$t('customService.insuranceQuery.InsurantNumber')}}</div> | ||
7 | <div class="td w2">{{$t('customService.insuranceQuery.Insurant')}}</div> | ||
8 | <div class="td w1">{{$t('customService.insuranceQuery.InsurantName')}}</div> | ||
9 | <div class="td w2">{{$t('customService.insuranceQuery.InsurantAmount')}}</div> | ||
10 | <div class="td w2">{{$t('customService.insuranceQuery.effectiveDate')}}</div> | ||
11 | <div class="td w2">{{$t('customService.insuranceQuery.period')}}</div> | ||
12 | </div> | ||
13 | </div> | ||
14 | <div class="table-content"> | ||
15 | <template v-if="myPolicyList"> | ||
16 | <div v-for="(item,index) in myPolicyList" :key="index"> | ||
17 | <template v-if="index < maxShow"> | ||
18 | <div class="data-line" @click="handlePolicySelect(item,index)"> | ||
19 | <div class="td w1 pointer"> | ||
20 | <template v-if="multiSelectable"> | ||
21 | <img v-if="item.activity" class="icon-check pointer" src="@/assets/images/insurance-query/check.png"> | ||
22 | <img v-else class="icon-check pointer" src="@/assets/images/insurance-query/un-check.png"> | ||
23 | <span class="sp" :class="{ac: item.activity}">{{item.policyCode}}</span> | ||
24 | </template> | ||
25 | <template v-else> | ||
26 | <template v-if="model != 'download'"> | ||
27 | <img v-if="selectPolicyCode == item.policyCode" class="icon-check pointer" src="@/assets/images/insurance-query/check.png"> | ||
28 | <img v-else class="icon-check pointer" src="@/assets/images/insurance-query/un-check.png"> | ||
29 | </template> | ||
30 | <span class="sp" :class="{ac: selectPolicyCode == item.policyCode}">{{item.policyCode}}</span> | ||
31 | <template v-if="model == 'download'"> | ||
32 | <img class="icon-download" src="@/assets/images/insurance-query/icon-down-load.png" alt=""> | ||
33 | </template> | ||
34 | </template> | ||
35 | </div> | ||
36 | <div class="td w2">{{item.insuredName}}</div> | ||
37 | <div class="td w1">{{item.productName}}</div> | ||
38 | <div class="td w2">{{item.moneyCode}}{{item.amount}}</div> | ||
39 | <div class="td w2">{{item.expireAt}}</div> | ||
40 | <div class="td w2">{{item.guaranteeAge}}</div> | ||
41 | </div> | ||
42 | <div class="separator-h" v-if="index < myPolicyList.length - 1 && index < maxShow - 1"></div> | ||
43 | </template> | ||
44 | </div> | ||
45 | <template v-if="!policyList || maxShow < policyList.length"> | ||
46 | <div class="separator-h"></div> | ||
47 | <div class="data-line show-more-btn" @click="maxShow = policyList.length">{{$t('customService.insuranceQuery.showMore')}}</div> | ||
48 | </template> | ||
49 | </template> | ||
50 | |||
51 | <template v-else> | ||
52 | <div class="empty"> | ||
53 | <div class="tips"> | ||
54 | <img class="icon" src="@/assets/images/common/icon-alert-i.png" alt=""> | ||
55 | <div class="txt"> | ||
56 | {{$t('customService.insuranceQuery.noPolicy')}} | ||
57 | <span class="pointer btn">{{$t('customService.insuranceQuery.customService')}}</span> | ||
58 | </div> | ||
59 | </div> | ||
60 | </div> | ||
61 | </template> | ||
62 | </div> | ||
63 | </div> | ||
64 | </div> | ||
65 | </template> | ||
66 | |||
67 | |||
68 | <script src="./policy-head-list.js"></script> | ||
69 | <style lang="scss" scoped> | ||
70 | @import "./policy-head-list.scss"; | ||
71 | </style> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
... | @@ -3,6 +3,10 @@ import { | ... | @@ -3,6 +3,10 @@ import { |
3 | httpGet, | 3 | httpGet, |
4 | httpPost | 4 | httpPost |
5 | } from '@/api/fetch-api.js' | 5 | } from '@/api/fetch-api.js' |
6 | import { | ||
7 | mapState | ||
8 | } from 'vuex'; | ||
9 | |||
6 | 10 | ||
7 | import Auth from '@components/auth/auth.vue'; | 11 | import Auth from '@components/auth/auth.vue'; |
8 | import modalComp from '@/components/modal-comp/modal-comp.vue'; | 12 | import modalComp from '@/components/modal-comp/modal-comp.vue'; |
... | @@ -12,6 +16,7 @@ import DatePicker from '@/components/date-picker/date-picker.vue' | ... | @@ -12,6 +16,7 @@ import DatePicker from '@/components/date-picker/date-picker.vue' |
12 | export default { | 16 | export default { |
13 | data() { | 17 | data() { |
14 | return { | 18 | return { |
19 | loading: false, | ||
15 | showForm: false, | 20 | showForm: false, |
16 | key: 'value', | 21 | key: 'value', |
17 | values: { | 22 | values: { |
... | @@ -53,6 +58,9 @@ export default { | ... | @@ -53,6 +58,9 @@ export default { |
53 | modalSimpleComp | 58 | modalSimpleComp |
54 | }, | 59 | }, |
55 | computed: { | 60 | computed: { |
61 | ...mapState({ | ||
62 | userInfo: state => state.userInfo | ||
63 | }), | ||
56 | locale() { | 64 | locale() { |
57 | return this.$i18n.locale || 'tc'; | 65 | return this.$i18n.locale || 'tc'; |
58 | }, | 66 | }, |
... | @@ -116,11 +124,17 @@ export default { | ... | @@ -116,11 +124,17 @@ export default { |
116 | // let day = y + "-" + (m < 10 ? "0" + m : m) + "-" + (d < 10 ? "0" + d : d); | 124 | // let day = y + "-" + (m < 10 ? "0" + m : m) + "-" + (d < 10 ? "0" + d : d); |
117 | this.information.birthDate = this.birthDate; | 125 | this.information.birthDate = this.birthDate; |
118 | this.loadIdentify().then(() => { | 126 | this.loadIdentify().then(() => { |
127 | |||
128 | if (this.loading) { | ||
129 | return; | ||
130 | } | ||
131 | this.loading = true; | ||
119 | httpPost({ | 132 | httpPost({ |
120 | url: api.updateInformation, | 133 | url: api.updateInformation, |
121 | data: this.information, | 134 | data: this.information, |
122 | sid: true | 135 | sid: true |
123 | }).then(response => { | 136 | }).then(response => { |
137 | this.loading = false; | ||
124 | let message = ""; | 138 | let message = ""; |
125 | switch (response.returnCode) { | 139 | switch (response.returnCode) { |
126 | case "GS_MODIFYFIVEKEYS_ERROR_IDNOERROR": | 140 | case "GS_MODIFYFIVEKEYS_ERROR_IDNOERROR": |
... | @@ -136,8 +150,12 @@ export default { | ... | @@ -136,8 +150,12 @@ export default { |
136 | this.showModal(message, "succ"); | 150 | this.showModal(message, "succ"); |
137 | let path = this.$route.query.callback || "/"; | 151 | let path = this.$route.query.callback || "/"; |
138 | this.targetPath = path; | 152 | this.targetPath = path; |
153 | this.userInfo.hadFullInfo = 1; | ||
154 | this.$store.commit("SET_USER_INFO", this.userInfo); | ||
139 | break; | 155 | break; |
140 | } | 156 | } |
157 | }).catch(err => { | ||
158 | this.loading = false; | ||
141 | }); | 159 | }); |
142 | }); | 160 | }); |
143 | } | 161 | } | ... | ... |
... | @@ -63,7 +63,7 @@ | ... | @@ -63,7 +63,7 @@ |
63 | </div> | 63 | </div> |
64 | <div class="ipt-wrap"> | 64 | <div class="ipt-wrap"> |
65 | <!-- <input class="ipt" type="date" :class="{err : errorTips.e3.length > 0}" v-model="birthDate"> --> | 65 | <!-- <input class="ipt" type="date" :class="{err : errorTips.e3.length > 0}" v-model="birthDate"> --> |
66 | <date-picker class="date" v-model="information.birthDate"></date-picker> | 66 | <date-picker class="date" v-model="information.birthDate" :filtModel="['future','today']"></date-picker> |
67 | </div> | 67 | </div> |
68 | <div class="validator" v-if="errorTips.e3.length > 0 "> | 68 | <div class="validator" v-if="errorTips.e3.length > 0 "> |
69 | <img src="@/assets/images/common/icon-notice.png" alt=""> {{errorTips.e3}} | 69 | <img src="@/assets/images/common/icon-notice.png" alt=""> {{errorTips.e3}} | ... | ... |
... | @@ -22,6 +22,7 @@ import { | ... | @@ -22,6 +22,7 @@ import { |
22 | export default { | 22 | export default { |
23 | data() { | 23 | data() { |
24 | return { | 24 | return { |
25 | loading: false, | ||
25 | key: 'value', | 26 | key: 'value', |
26 | type: 1, // 1:帐密登陆 2:OTP登陆, | 27 | type: 1, // 1:帐密登陆 2:OTP登陆, |
27 | values: { | 28 | values: { |
... | @@ -41,10 +42,10 @@ export default { | ... | @@ -41,10 +42,10 @@ export default { |
41 | tip: "" // 显示的文字 | 42 | tip: "" // 显示的文字 |
42 | }, | 43 | }, |
43 | loginForm: { | 44 | loginForm: { |
44 | // userId: "18334783910", | 45 | userId: "18334783910", |
45 | // password: "qweqwe123", | 46 | password: "qweqwe123", |
46 | userId: "18145729463", | 47 | // userId: "18145729463", |
47 | password: "ccc123!@#", | 48 | // password: "ccc123!@#", |
48 | // userId: "", | 49 | // userId: "", |
49 | // password: "", | 50 | // password: "", |
50 | 51 | ||
... | @@ -199,6 +200,11 @@ export default { | ... | @@ -199,6 +200,11 @@ export default { |
199 | this._showEmptyPasswordTips(); | 200 | this._showEmptyPasswordTips(); |
200 | return; | 201 | return; |
201 | } | 202 | } |
203 | |||
204 | if (this.loading) { | ||
205 | return; | ||
206 | } | ||
207 | this.loading = true; | ||
202 | this.handlerIsShowImageVcode().then(() => { | 208 | this.handlerIsShowImageVcode().then(() => { |
203 | httpPost({ | 209 | httpPost({ |
204 | url: api.gsLogin, | 210 | url: api.gsLogin, |
... | @@ -208,6 +214,7 @@ export default { | ... | @@ -208,6 +214,7 @@ export default { |
208 | loginPwd: passwordEncrypt(this.loginForm.password) | 214 | loginPwd: passwordEncrypt(this.loginForm.password) |
209 | } | 215 | } |
210 | }).then(response => { | 216 | }).then(response => { |
217 | this.loading = false; | ||
211 | this._handlerLoginResponse(response); | 218 | this._handlerLoginResponse(response); |
212 | }) | 219 | }) |
213 | }); | 220 | }); |
... | @@ -273,10 +280,16 @@ export default { | ... | @@ -273,10 +280,16 @@ export default { |
273 | otp: this.loginForm.otp, | 280 | otp: this.loginForm.otp, |
274 | deviceId: this.refreshDeviceId() | 281 | deviceId: this.refreshDeviceId() |
275 | }; | 282 | }; |
283 | |||
284 | if (this.loading) { | ||
285 | return; | ||
286 | } | ||
287 | this.loading = true; | ||
276 | httpPost({ | 288 | httpPost({ |
277 | url: api.otpLogin, | 289 | url: api.otpLogin, |
278 | data: data | 290 | data: data |
279 | }).then(response => { | 291 | }).then(response => { |
292 | this.loading = false; | ||
280 | this._handlerLoginResponse(response); | 293 | this._handlerLoginResponse(response); |
281 | }); | 294 | }); |
282 | }); | 295 | }); | ... | ... |
... | @@ -11,6 +11,7 @@ import { passwordEncrypt } from '@/utils/encrypt.js'; | ... | @@ -11,6 +11,7 @@ import { passwordEncrypt } from '@/utils/encrypt.js'; |
11 | export default { | 11 | export default { |
12 | data() { | 12 | data() { |
13 | return { | 13 | return { |
14 | loading: false, | ||
14 | key: 'value', | 15 | key: 'value', |
15 | type: 1, // 1:输入用户信息 2:找回密码 3:核对信息 4.重置密码 | 16 | type: 1, // 1:输入用户信息 2:找回密码 3:核对信息 4.重置密码 |
16 | values: { | 17 | values: { |
... | @@ -117,6 +118,10 @@ export default { | ... | @@ -117,6 +118,10 @@ export default { |
117 | if (this.times.remain > 0) { | 118 | if (this.times.remain > 0) { |
118 | return; | 119 | return; |
119 | } | 120 | } |
121 | if (this.loading) { | ||
122 | return; | ||
123 | } | ||
124 | this.loading = true; | ||
120 | // 定位用户 | 125 | // 定位用户 |
121 | httpPost({ | 126 | httpPost({ |
122 | url: api.sendOtp, | 127 | url: api.sendOtp, |
... | @@ -124,6 +129,7 @@ export default { | ... | @@ -124,6 +129,7 @@ export default { |
124 | cid: this.values.cid | 129 | cid: this.values.cid |
125 | } | 130 | } |
126 | }).then(response => { | 131 | }).then(response => { |
132 | this.loading = false; | ||
127 | if (this.responseHandler(response)) { | 133 | if (this.responseHandler(response)) { |
128 | switch (response.returnCode) { | 134 | switch (response.returnCode) { |
129 | case "COMMON_ERROR_E3": | 135 | case "COMMON_ERROR_E3": |
... | @@ -134,6 +140,8 @@ export default { | ... | @@ -134,6 +140,8 @@ export default { |
134 | return; | 140 | return; |
135 | } | 141 | } |
136 | } | 142 | } |
143 | }).catch(err => { | ||
144 | this.loading = false; | ||
137 | }) | 145 | }) |
138 | }, | 146 | }, |
139 | checkOtp() { | 147 | checkOtp() { |
... | @@ -180,7 +188,10 @@ export default { | ... | @@ -180,7 +188,10 @@ export default { |
180 | return; | 188 | return; |
181 | } | 189 | } |
182 | let pwd = passwordEncrypt(this.step4.pwd); | 190 | let pwd = passwordEncrypt(this.step4.pwd); |
183 | // 定位用户 | 191 | if (this.loading) { |
192 | return; | ||
193 | } | ||
194 | this.loading = true; | ||
184 | httpPost({ | 195 | httpPost({ |
185 | url: api.resetPwd, | 196 | url: api.resetPwd, |
186 | data: { | 197 | data: { |
... | @@ -188,6 +199,7 @@ export default { | ... | @@ -188,6 +199,7 @@ export default { |
188 | password: pwd | 199 | password: pwd |
189 | } | 200 | } |
190 | }).then(response => { | 201 | }).then(response => { |
202 | this.loading = false; | ||
191 | if (this.responseHandler(response)) { | 203 | if (this.responseHandler(response)) { |
192 | let message = this.i18n().passwordCheck.success; | 204 | let message = this.i18n().passwordCheck.success; |
193 | this.step4.success = true; | 205 | this.step4.success = true; |
... | @@ -201,6 +213,8 @@ export default { | ... | @@ -201,6 +213,8 @@ export default { |
201 | break; | 213 | break; |
202 | } | 214 | } |
203 | } | 215 | } |
216 | }).catch(err => { | ||
217 | this.loading = false; | ||
204 | }) | 218 | }) |
205 | }, | 219 | }, |
206 | checkPassword(password) { | 220 | checkPassword(password) { | ... | ... |
... | @@ -20,5 +20,10 @@ export function SET_USER_INFO(state, val) { | ... | @@ -20,5 +20,10 @@ export function SET_USER_INFO(state, val) { |
20 | } else { | 20 | } else { |
21 | setCookie("_user_profile", "", 1); | 21 | setCookie("_user_profile", "", 1); |
22 | state.userInfo = null; | 22 | state.userInfo = null; |
23 | state.policyList = null; | ||
23 | } | 24 | } |
24 | } | 25 | } |
26 | |||
27 | export function CACHE_POLICY_LIST(state, val) { | ||
28 | state.policyList = val; | ||
29 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -3,9 +3,10 @@ export default { | ... | @@ -3,9 +3,10 @@ export default { |
3 | isMobile: false, //是否手机访问 | 3 | isMobile: false, //是否手机访问 |
4 | isSmallScreen: false, // 是否小屏幕 (PC时,小屏幕机导航栏会改变)) | 4 | isSmallScreen: false, // 是否小屏幕 (PC时,小屏幕机导航栏会改变)) |
5 | 5 | ||
6 | userInfo : { | 6 | userInfo: { |
7 | sid : "", | 7 | sid: "", |
8 | name : "", | 8 | name: "", |
9 | hadFullInfo: "" | 9 | hadFullInfo: "", |
10 | } | 10 | }, |
11 | policyList: [] | ||
11 | } | 12 | } | ... | ... |
-
Please register or sign in to post a comment