vhis.js 4.88 KB
/**
 * 页面描述:vhis
 * 嵌套平安提供的iFrame
 */

import {
	mapState
} from "vuex";
import api from '@/api/api'
import {
	httpPost
} from '@/api/fetch-api.js'

import Auth from '@components/auth/auth.vue';
import JsEncrypt from "jsencrypt";

let key = process.env.VUE_APP_CONTENT_ENCRYPT_KEY;
let rsa = new JsEncrypt();
rsa.setPublicKey(key);

function encryptContent(obj) {
	let str = JSON.stringify(obj);
	let securityContent = rsa.encrypt(str);
	return securityContent;
};

/**
 * 路由上,p代表产品,d代表参数。
 * d 是一个json结构,对应的数据结构是:
 * 					name: 名字
					gender: 性别,M:男;F:女
					birthday: yyyy-MM-dd
					certiType: 参考用户体系码表
					certiNo: 
 */
export default {
	data() {
		return {
			key: 'value',
			outsideUrl: "",
			information: null,
			iframeSrc: "",
		}
	},
	components: {
		Auth
	},
	computed: {
		...mapState({
			userInfo: state => state.userInfo
		}),
	},
	methods: {
		init() {
			if (this.isLogin() && !this.information) {
				httpPost({
					url: api.profile,
					sid: true
				}).then(content => {
					if (content) {
						this.information = content;
						this.gotoVhis();
					}
				})
			} else {
				this.gotoVhis();
			}
		},
		userLogout() {
			this.gotoVhis();
		},
		isLogin() {
			return this.userInfo && this.userInfo.sid;
		},
		gotoVhis() {
			// 网销平台productCode : VHIS001,
			// let url = window.global.vhis;
			// 2020-06-16 改变策略,根据iframe中传入的内容决定调整路径
			let url = this.currentPath();
			let productCode = this.$route.query.p;
			productCode = productCode ? productCode : "VHIS001";
			let lan = this.$i18n.locale;
			switch (lan) {
				case 'zh':
					url += "?language=zh-cn";
					break;
				case 'en':
					url += "?language=en";
					break;
				default:
					url += "?language=zh-hk";
					break;
			}
			url += "&partnerId=PA001&productCode=" + productCode;

			let data = null;
			// console.log(JSON.stringify(this.information));

			if (this.$route.query.d) {
				try {
					let queryData = JSON.parse(this.$route.query.d);
					data = queryData;
				} catch (e) {
					console.error("paramster 'd' is not a json ", this.$route.query.d);
				}
			} else if (this.information && this.information.idType && this.information.idNo) {
				data = {
					name: this.information.fullName,
					gender: this.information.sex,
					birthday: this.information.birthDate,
					certiType: this.information.policyIdType ? this.information.policyIdType : this.information.idType,
					certiNo: this.information.idNo
				};
			}

			console.log("before into vhis, and data = ", data);
			if (data) {
				url += "&data=" + encryptContent(data);
			}
			// url = "http://www.baidu.com"
			// console.log("vhis:", url);
			this.$set(this, "outsideUrl", url);
			console.log("vhis:", url);
			// var iframe = document.getElementById("myiframe");
			// try {
			// 	iframe.height = 0;
			// 	iframe.style.height = "0px";
			// } catch (ex) { }

			// let _this = this;
			// setTimeout(function () {
			// 	console.log("vhis:", url);
			// 	_this.outsideUrl = url;
			// }, 100);
		},
		// 获取当前的路径
		currentPath() {
			// 	var url = document.location.toString();
			//   var arrUrl = url.split("//");
			//   var start = arrUrl[1].indexOf("/");
			//   var relUrl = arrUrl[1].substring(start);//stop省略,截取从start开始到结尾的所有字符
			let src = this.iframeSrc ? this.iframeSrc : window.global.vhis;
			return src;
		}
	},
	watch: {
		"$route.query.p": function () {
			this.init();
		}
	},
	mounted() {
		this.init();

		this.$root.eventBus.$on("langChange", () => {
			try {
				this.gotoVhis();
			} catch (e) { }
		});
		// let url = this.$route.query.p;
		// if (url) {
		//     this.outsideUrl = url;
		// setTimeout(() => {
		//     var iframe = document.getElementById("myiframe");
		//     try {
		//         var bHeight = iframe.contentWindow.document.body.scrollHeight;
		//         var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;
		//         var height = Math.min(bHeight, dHeight);
		//         iframe.height = height + 50;
		//     } catch (ex) {
		//     }
		// }, 500);
		// }

		// 隐藏滚动条
		// document.getElementsByTagName("body")[0].className = "hide-scrollbar";

		let _this = this;
		window.removeEventListener("message", function () { });
		window.addEventListener('message', function (e) {
			let height = e.data ? e.data.height : null;
			let iframeSrc = e.data ? e.data.iframeSrc : null;
			if (iframeSrc) {
				_this.iframeSrc = iframeSrc;
			}
			console.log("vhis url change : ", _this.iframeSrc);

			if (height) {
				var iframe = document.getElementById("myiframe");
				try {
					iframe.height = height;
					iframe.style.height = height + "px";
				} catch (ex) { }
			}
		});
	},
	beforeDestroy() {
		// 移除隐藏滚动条样式
		// document.body.removeAttribute("class", "hide-scrollbar");
	},
	created() {

	}
}