|
|
<template>
|
|
|
<v-touch tag="a" @tap="click">
|
|
|
<v-touch tag="span" class="link-a" @tap="click">
|
|
|
<slot></slot>
|
|
|
</v-touch>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
import parse from 'yoho-qs/parse';
|
|
|
import {REPORT_YAS} from 'store/yoho/types';
|
|
|
import parse from 'yoho-qs/parse';
|
|
|
|
|
|
export default {
|
|
|
name: 'ALink',
|
|
|
props: {
|
|
|
href: [String],
|
|
|
to: String,
|
|
|
yas: Object,
|
|
|
yasF: Number,
|
|
|
yasI: Number
|
|
|
},
|
|
|
methods: {
|
|
|
click() {
|
|
|
if (this.href) {
|
|
|
let url = this.href;
|
|
|
const classList = this.$el.classList;
|
|
|
const excluded = classList.contains('no-intercept');
|
|
|
|
|
|
if (excluded) {
|
|
|
location.href = this.href;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (/^\/\//.test(url)) {
|
|
|
url = 'https:' + url;
|
|
|
}
|
|
|
const routeUrl = url.replace(location.origin, '');
|
|
|
const route = this.$router.resolve(routeUrl).route;
|
|
|
|
|
|
export default {
|
|
|
name: 'ALink',
|
|
|
props: {
|
|
|
href: [String],
|
|
|
to: String
|
|
|
if (route.matched.length) {
|
|
|
this.reportYas(`${location.origin}${routeUrl}`);
|
|
|
this.$router.push(routeUrl);
|
|
|
} else {
|
|
|
this.reportYas(url);
|
|
|
this.dispatch(url);
|
|
|
}
|
|
|
} else if (this.to) {
|
|
|
this.reportYas(`${location.origin}${this.to}`);
|
|
|
this.$router.push(this.to);
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
click() {
|
|
|
if (this.href) {
|
|
|
let url = this.href;
|
|
|
const classList = this.$el.classList;
|
|
|
const excluded = classList.contains('no-intercept');
|
|
|
|
|
|
if (excluded) {
|
|
|
location.href = this.href;
|
|
|
return;
|
|
|
reportYas(url) {
|
|
|
const param = {
|
|
|
F_URL: url,
|
|
|
PAGE_URL: `${location.origin}${this.$route.fullPath}`,
|
|
|
PAGE_NAME: this.$route.name
|
|
|
};
|
|
|
|
|
|
if (this.yas) {
|
|
|
param.F_ID = this.yas.template_id;
|
|
|
param.F_NM = this.yas.template_name;
|
|
|
param.F_INDEX = (this.yasF || 0) + 1;
|
|
|
param.I_INDEX = (this.yasI || 0) + 1;
|
|
|
}
|
|
|
this.$store.dispatch(REPORT_YAS, {
|
|
|
params: {
|
|
|
appop: 'YB_H5_PAGE_FLR_C',
|
|
|
param
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
dispatch(url) {
|
|
|
const origin = location.origin;
|
|
|
const defaultTitleMap = {
|
|
|
1: {
|
|
|
headerid: '1',
|
|
|
left: {
|
|
|
action: ''
|
|
|
},
|
|
|
title: {
|
|
|
des: '',
|
|
|
action: ''
|
|
|
}
|
|
|
|
|
|
if (/^\/\//.test(url)) {
|
|
|
url = 'https:' + url;
|
|
|
},
|
|
|
2: {
|
|
|
headerid: '2',
|
|
|
left: {
|
|
|
action: ''
|
|
|
},
|
|
|
title: {
|
|
|
des: '',
|
|
|
action: ''
|
|
|
},
|
|
|
right: {
|
|
|
icon: 'chat',
|
|
|
action: 'goToService'
|
|
|
}
|
|
|
const routeUrl = url.replace(location.origin, '');
|
|
|
const route = this.$router.resolve(routeUrl).route;
|
|
|
|
|
|
if (route.matched.length) {
|
|
|
this.$router.push(routeUrl);
|
|
|
} else {
|
|
|
this.dispatch(url);
|
|
|
},
|
|
|
3: {
|
|
|
headerid: '3',
|
|
|
left: {
|
|
|
action: ''
|
|
|
},
|
|
|
title: {
|
|
|
des: '',
|
|
|
action: ''
|
|
|
},
|
|
|
right: {
|
|
|
des: '提交',
|
|
|
action: 'test'
|
|
|
}
|
|
|
|
|
|
} else if (this.to) {
|
|
|
this.$router.push(this.to);
|
|
|
}
|
|
|
},
|
|
|
dispatch(url) {
|
|
|
const origin = location.origin;
|
|
|
const defaultTitleMap = {
|
|
|
1: {
|
|
|
headerid: '1',
|
|
|
left: {
|
|
|
action: ''
|
|
|
},
|
|
|
title: {
|
|
|
des: '',
|
|
|
action: ''
|
|
|
}
|
|
|
},
|
|
|
4: {
|
|
|
headerid: '4',
|
|
|
ltitle: {
|
|
|
des: '品牌',
|
|
|
action: origin + '/brands'
|
|
|
},
|
|
|
2: {
|
|
|
headerid: '2',
|
|
|
left: {
|
|
|
action: ''
|
|
|
},
|
|
|
title: {
|
|
|
des: '',
|
|
|
action: ''
|
|
|
},
|
|
|
right: {
|
|
|
icon: 'chat',
|
|
|
action: 'goToService'
|
|
|
}
|
|
|
rtitle: {
|
|
|
des: '品类',
|
|
|
action: origin + '/cate'
|
|
|
}
|
|
|
},
|
|
|
5: {
|
|
|
headerid: '5',
|
|
|
left: {
|
|
|
action: ''
|
|
|
},
|
|
|
3: {
|
|
|
headerid: '3',
|
|
|
left: {
|
|
|
action: ''
|
|
|
},
|
|
|
title: {
|
|
|
des: '',
|
|
|
action: ''
|
|
|
},
|
|
|
right: {
|
|
|
des: '提交',
|
|
|
action: 'test'
|
|
|
}
|
|
|
ltitle: {
|
|
|
des: '商品',
|
|
|
action: origin + '/me/collection'
|
|
|
},
|
|
|
4: {
|
|
|
headerid: '4',
|
|
|
ltitle: {
|
|
|
des: '品牌',
|
|
|
action: origin + '/brands'
|
|
|
},
|
|
|
rtitle: {
|
|
|
des: '品类',
|
|
|
action: origin + '/cate'
|
|
|
}
|
|
|
|
|
|
// mtitle: {
|
|
|
// des: '品牌',
|
|
|
// action: origin + '/me/collection?tab=brand'
|
|
|
// },
|
|
|
rtitle: {
|
|
|
des: '资讯',
|
|
|
action: origin + '/me/collection?tab=article'
|
|
|
},
|
|
|
5: {
|
|
|
headerid: '5',
|
|
|
left: {
|
|
|
action: ''
|
|
|
},
|
|
|
ltitle: {
|
|
|
des: '商品',
|
|
|
action: origin + '/me/collection'
|
|
|
},
|
|
|
|
|
|
// mtitle: {
|
|
|
// des: '品牌',
|
|
|
// action: origin + '/me/collection?tab=brand'
|
|
|
// },
|
|
|
rtitle: {
|
|
|
des: '资讯',
|
|
|
action: origin + '/me/collection?tab=article'
|
|
|
},
|
|
|
right: {
|
|
|
des: '编辑',
|
|
|
action: 'editModel'
|
|
|
},
|
|
|
defaultSelectedIndex: '0'
|
|
|
right: {
|
|
|
des: '编辑',
|
|
|
action: 'editModel'
|
|
|
},
|
|
|
6: {
|
|
|
headerid: '6',
|
|
|
title: {
|
|
|
des: '资讯',
|
|
|
action: ''
|
|
|
}
|
|
|
defaultSelectedIndex: '0'
|
|
|
},
|
|
|
6: {
|
|
|
headerid: '6',
|
|
|
title: {
|
|
|
des: '资讯',
|
|
|
action: ''
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
};
|
|
|
|
|
|
if (this.$yoho.isApp || this.$yoho.isYohoBuy) {
|
|
|
let titleMap ={...defaultTitleMap};
|
|
|
let [path, qs] = url.split('?');
|
|
|
if (this.$yoho.isApp || this.$yoho.isYohoBuy) {
|
|
|
let titleMap = {...defaultTitleMap};
|
|
|
let [path, qs] = url.split('?');
|
|
|
|
|
|
qs = parse(qs);
|
|
|
qs = parse(qs);
|
|
|
|
|
|
// 个人中心收藏
|
|
|
if (/\/me\/collection$/.test(path)) {
|
|
|
let header = titleMap[5];
|
|
|
// 个人中心收藏
|
|
|
if (/\/me\/collection$/.test(path)) {
|
|
|
let header = titleMap[5];
|
|
|
|
|
|
if (qs.tab === 'article') {
|
|
|
header.defaultSelectedIndex = '1';
|
|
|
} else {
|
|
|
header.defaultSelectedIndex = '0';
|
|
|
}
|
|
|
return this.$yoho.goPageView({
|
|
|
header: header
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// 个人中心首页
|
|
|
if (/\/me$/.test(path)) {
|
|
|
return this.$yoho.goTab({
|
|
|
index: 4
|
|
|
});
|
|
|
if (qs.tab === 'article') {
|
|
|
header.defaultSelectedIndex = '1';
|
|
|
} else {
|
|
|
header.defaultSelectedIndex = '0';
|
|
|
}
|
|
|
return this.$yoho.goPageView({
|
|
|
header: header
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// 资讯
|
|
|
if (/\/editorial\/list$/.test(path)) {
|
|
|
return this.$yoho.goTab({
|
|
|
index: 2
|
|
|
});
|
|
|
}
|
|
|
// 个人中心首页
|
|
|
if (/\/me$/.test(path)) {
|
|
|
return this.$yoho.goTab({
|
|
|
index: 4
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// 品类
|
|
|
if (/\/cate$/.test(path)) {
|
|
|
return this.$yoho.goTab({
|
|
|
index: 1,
|
|
|
headerIndex: 1
|
|
|
});
|
|
|
}
|
|
|
// 资讯
|
|
|
if (/\/editorial\/list$/.test(path)) {
|
|
|
return this.$yoho.goTab({
|
|
|
index: 2
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// 首页
|
|
|
if (/\/$/.test(path) || !path) {
|
|
|
return this.$yoho.goTab({
|
|
|
index: 0,
|
|
|
url: /^(https?:)?\/\//i.test(url) ? url : origin + url
|
|
|
});
|
|
|
}
|
|
|
// 品类
|
|
|
if (/\/cate$/.test(path)) {
|
|
|
return this.$yoho.goTab({
|
|
|
index: 1,
|
|
|
headerIndex: 1
|
|
|
});
|
|
|
}
|
|
|
|
|
|
const args = {
|
|
|
// 首页
|
|
|
if (/\/$/.test(path) || !path) {
|
|
|
return this.$yoho.goTab({
|
|
|
index: 0,
|
|
|
url: /^(https?:)?\/\//i.test(url) ? url : origin + url
|
|
|
};
|
|
|
});
|
|
|
}
|
|
|
|
|
|
if (/\/me\/service$/.test(path)) {
|
|
|
args.showLoading = 'no';
|
|
|
}
|
|
|
const args = {
|
|
|
url: /^(https?:)?\/\//i.test(url) ? url : origin + url
|
|
|
};
|
|
|
|
|
|
// 处理 feature.yoho.cn 等域名下的站外链接
|
|
|
if (/^(https?:)?\/\//i.test(path) && !/m\.yohoblk\.com/.test(path)) {
|
|
|
args.showLoading = 'no';
|
|
|
}
|
|
|
args.header = {
|
|
|
headerid: '-1'
|
|
|
};
|
|
|
this.$yoho.goNewPage(args);
|
|
|
} else {
|
|
|
location.href = url;
|
|
|
if (/\/me\/service$/.test(path)) {
|
|
|
args.showLoading = 'no';
|
|
|
}
|
|
|
|
|
|
// 处理 feature.yoho.cn 等域名下的站外链接
|
|
|
if (/^(https?:)?\/\//i.test(path) && !/m\.yohoblk\.com/.test(path)) {
|
|
|
args.showLoading = 'no';
|
|
|
}
|
|
|
args.header = {
|
|
|
headerid: '-1'
|
|
|
};
|
|
|
this.$yoho.goNewPage(args);
|
|
|
} else {
|
|
|
location.href = url;
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
};
|
|
|
</script>
|
|
|
|
|
|
<style>
|
...
|
...
|
|