You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
3.3 KiB
152 lines
3.3 KiB
6 months ago
|
<template>
|
||
|
<view @click="onclick">
|
||
|
<slot :options="options" :data="adData" :loading="loading" :error="errorMessage" />
|
||
|
</view>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
const AD_URL = 'https://wxac1.dcloud.net.cn/openPage/acs'
|
||
|
const AD_REPORT_URL = 'https://wxac1.dcloud.net.cn/openPage/acs'
|
||
|
//const WEBVIEW_PATH = '/uni_modules/uni-ad-interactive/pages/uni-ad-interactive/uni-ad-interactive'
|
||
|
|
||
|
const events = {
|
||
|
load: 'load',
|
||
|
close: 'close',
|
||
|
error: 'error'
|
||
|
}
|
||
|
|
||
|
const OpenTypes = {
|
||
|
Interactive: 'interactive'
|
||
|
}
|
||
|
|
||
|
export default {
|
||
|
name: 'AdInteractive',
|
||
|
props: {
|
||
|
options: {
|
||
|
type: [Object, Array],
|
||
|
default () {
|
||
|
return {}
|
||
|
}
|
||
|
},
|
||
|
disabled: {
|
||
|
type: [Boolean, String],
|
||
|
default: false
|
||
|
},
|
||
|
adpid: {
|
||
|
type: [Number, String],
|
||
|
default: ''
|
||
|
},
|
||
|
openType: {
|
||
|
type: String,
|
||
|
default: 'interactive'
|
||
|
},
|
||
|
openPagePath: {
|
||
|
type: String,
|
||
|
default: ""
|
||
|
}
|
||
|
},
|
||
|
data() {
|
||
|
return {
|
||
|
adData: null,
|
||
|
loading: false,
|
||
|
errorMessage: ""
|
||
|
}
|
||
|
},
|
||
|
created() {
|
||
|
this._interactiveUrl = null
|
||
|
if (this.openPagePath) {
|
||
|
this.getAdData()
|
||
|
}
|
||
|
},
|
||
|
methods: {
|
||
|
getAdData() {
|
||
|
if (!this.adpid) {
|
||
|
this.$emit(events.error, {
|
||
|
code: -5002,
|
||
|
message: 'invalid adpid'
|
||
|
})
|
||
|
return
|
||
|
}
|
||
|
|
||
|
this.loading = true
|
||
|
|
||
|
uni.request({
|
||
|
url: AD_URL,
|
||
|
method: 'POST',
|
||
|
data: {
|
||
|
adpid: this.adpid
|
||
|
},
|
||
|
timeout: 5000,
|
||
|
dataType: 'json',
|
||
|
success: (res) => {
|
||
|
if (res.statusCode !== 200) {
|
||
|
this.$emit(events.error, {
|
||
|
errCode: res.statusCode,
|
||
|
errMsg: res.statusCode
|
||
|
})
|
||
|
return
|
||
|
}
|
||
|
|
||
|
const responseData = res.data
|
||
|
if (responseData.ret === 0) {
|
||
|
this._interactiveUrl = responseData.data.adp_url
|
||
|
this.adData = {
|
||
|
imgUrl: responseData.data.icon_url,
|
||
|
openPath: this.openPagePath + '?url=' + encodeURIComponent(this._interactiveUrl)
|
||
|
}
|
||
|
this.$emit(events.load, this.adData)
|
||
|
} else {
|
||
|
const errMsg = {
|
||
|
errCode: responseData.ret,
|
||
|
errMsg: responseData.msg
|
||
|
}
|
||
|
this.errorMessage = errMsg
|
||
|
this.$emit(events.error, errMsg)
|
||
|
}
|
||
|
},
|
||
|
fail: (err) => {
|
||
|
this.$emit(events.error, {
|
||
|
errCode: '',
|
||
|
errMsg: err.errMsg
|
||
|
})
|
||
|
},
|
||
|
complete: () => {
|
||
|
this.loading = false
|
||
|
}
|
||
|
})
|
||
|
},
|
||
|
onclick() {
|
||
|
if (this.disabled) {
|
||
|
return
|
||
|
}
|
||
|
if (!this._interactiveUrl) {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
uni.navigateTo({
|
||
|
url: this.adData.openPath
|
||
|
})
|
||
|
|
||
|
this._report()
|
||
|
},
|
||
|
_report() {
|
||
|
uni.request({
|
||
|
url: AD_REPORT_URL,
|
||
|
data: {
|
||
|
adpid: this.adpid,
|
||
|
t: '10019'
|
||
|
},
|
||
|
timeout: 5000,
|
||
|
dataType: 'json'
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<style>
|
||
|
view {
|
||
|
display: block;
|
||
|
}
|
||
|
</style>
|