vhis-detail.js 6.34 KB
import api from '@/api/api'
import {
	httpGet,
	httpPost
} from '@/api/fetch-api.js'
import {
	mapGetters,
	mapActions,
	mapState
} from "vuex";
var UA = require("ua-device")

export default {
	data() {
		return {
			key: 'value',
			// swiper
			swiperOption: {
				navigation: {
					nextEl: '.swiper-button-next',
					prevEl: '.swiper-button-prev'
				},
				pagination: {
					el: '.swiper-pagination',
					clickable: true,
				},
				autoplay: {
					delay: 5000,
					stopOnLastSlide: false,
					disableOnInteraction: false
				},
				speed: 1000,
			},
			bannerList: [],
			bannerCandidateList: [],
			// 视频
			playerOptions: {},
			bannerTipsVisible: false,
			productList: [],
			// 全部的信息
			sourceData: {},
			bottomBtnType: "",
			bottomBtnLink: ""
		}
	},
	components: {},
	computed: {
		...mapState({
			isSmallScreen: state => state.isSmallScreen,
			isMobile: state => state.isMobile
		}),
		locale() {
			return this.$i18n.locale || 'tc';
		},
		i18n() {
			return this.$i18n.messages && this.$i18n.locale ? this.$i18n.messages[this.$i18n.locale] : {};
		},
		player() {
			return this.$refs.videoPlayer.player
		},
	},
	methods: {
		onHideBannerTipsHandler() {
			this.bannerTipsVisible = false;
		},
		// fetchBanner() {
		// 	return new Promise((resolve, reject) => {
		// 		httpPost({
		// 			url: api.banner
		// 		}).then(res => {
		// 			resolve(res);
		// 		});
		// 	});
		// },
		// fetchIndexVideo() {
		// 	return new Promise((resolve, reject) => {
		// 		httpPost({
		// 			url: api.indexVideo
		// 		}).then(res => {
		// 			sessionStorage.setItem("_video_url", res.videoUrl);
		// 			sessionStorage.setItem("_poster_url", res.posterUrl);
		// 			resolve(res);
		// 		});
		// 	});
		// },
		bottomBtnHandle() {
			this.btnNavigateTo(this.bottomBtnType, this.bottomBtnLink);
		},
		btnNavigateTo(type, link) {
			switch (type) {
				case "none":
					break;
				case "news":
					this.$router.push({
						path: "/news/detail",
						query: {
							c: link
						}
					});
					break;
				case "product":
					break;
				case "vhis":
					this.$router.push({
						path: "/vhis",
						query: {
							p: link
						}
					});
					break;
				default:
					location.href = link;
					break;
			}
		},
		refreshVideoPlayer(videoUrl, posterUrl) {
			// let videoUrl = sessionStorage.getItem("_video_url");
			// let posterUrl = sessionStorage.getItem("_poster_url");
			let playerOptions = {
				// width: 800,
				// height: 450,
				width: 1200,
				height: 675,
				// aspectRatio: '16:9', // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
				autoplay: false, //如果true,浏览器准备好时开始回放。
				muted: true, // 默认情况下将会消除任何音频。
				language: 'en',
				// playbackRates: [0.7, 1.0, 1.5, 2.0],//播放速度
				sources: [{
					type: "video/mp4",
					// mp4
					src: videoUrl,
					// webm
					// src: "https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm"
				}],
				poster: posterUrl,
				controlBar: {
					timeDivider: true,
					durationDisplay: true,
					remainingTimeDisplay: false,
					fullscreenToggle: true //全屏按钮
				}
			}
			let output = new UA(navigator.userAgent);
			let deviceType = output.device.type;
			let isMobile = deviceType == "mobile";
			// if (this.isSmallScreen) {
			if (isMobile) {
				playerOptions.aspectRatio = "16:9";
			}
			this.playerOptions = playerOptions;
		},
		initProduct() {
			// let productList = [{
			// 	showMore: false,
			// 	title: "保證續保至100歲",
			// 	desc: "平安人壽(香港)「好e時」自願醫保標準計劃 接受任何介乎14天至80歲人士投保,您可以一直續保至100歲。計劃保證不會因您的索償記錄或身體狀況變而調高續保保費,而您的續保保費將根據當時保單週年日之保費表釐定。",
			// 	tips:"*需根據香港自願醫保計劃保單所繳付的合資格保費的扣稅安排"
			// }, {
			// 	showMore: false,
			// 	title: "不設終身保障限額"
			// }, {
			// 	showMore: false,
			// 	title: "一家投保 盡享稅務扣減"
			// }, {
			// 	showMore: false,
			// 	title: "承保投保前未知的已有疾病"
			// }, {
			// 	showMore: false,
			// 	title: "出院免找數 讓您安心無憂"
			// }, {
			// 	showMore: false,
			// 	title: "無索償折扣"
			// }];
			let productList = this.i18n.vhisDetail.productList;
			productList.forEach(element => {
				element.showMore = false;
			});
			console.log("productList:", productList);
			this.productList = productList;
		},
		onShowMoreHandler(idx) {
			console.log("idx:", idx);
			let productList = this.productList;
			let curProduct = productList[idx];
			if (curProduct) {
				curProduct.showMore = !curProduct.showMore;
			}
			this.productList = productList;
			console.log("this.productList:", this.productList);
		},
		initData() {
			this.initProduct();
			let targetData = null;
			switch (this.locale) {
				case "zh":
					targetData = this.sourceData.confCn;
					break;
				case "en":
					targetData = this.sourceData.confEn;
					break;
				case "tc":
					targetData = this.sourceData.confTc;
					break;
			}
			if (targetData) {
				let bannerList = [{
					pcBannerUrl: targetData.pcBannerUrl,
					mobileBannerUrl: targetData.mobileBannerUrl,
					btns: targetData.btnDescribe
				}];
				this.$set(this, 'bannerList', bannerList);
				console.log(this.bannerList);

				this.refreshVideoPlayer(targetData.videoUrl, targetData.videoPoster);
				// 设置标题
				document.title = targetData.productName;

				this.bottomBtnType = targetData.bottomUrlType;
				this.bottomBtnLink = targetData.bottomUrlLink;
			}
			// this.fetchBanner().then(res => {
			// 	this.bannerCandidateList = res;
			// 	this.refreshBanner();
			// });
			// this.fetchIndexVideo().then(res => {
			// 	this.refreshVideoPlayer();
			// });
		},
		initActivity() {
			let d = localStorage.getItem("voluntaryInfo");
			if (d) {
				try {
					this.sourceData = JSON.parse(d);
					this.initData();
				} catch (e) {}
			}
		}
	},
	mounted() {
		this.initActivity();
	},
	created() {
		httpGet({
			url: api.productInfo,
			data: {
				code: "voluntary"
			}
		}).then(res => {
			if (res) {
				localStorage.setItem("voluntaryInfo", JSON.stringify(res));
				this.sourceData = res;
			}
			this.initData();
		})
	}
}