|
@@ -1,199 +1,558 @@
|
|
|
<template>
|
|
|
- <view class="content" :style="{paddingBottom: paddingBottom}">
|
|
|
- <view class="item" v-for="(item, index) in json" :class="item.classText.join(' ')" @click="click(item)">
|
|
|
- <p v-if="item.type == 'h5-text'" :style="item.style">{{item.content}}</p>
|
|
|
- <img :ref="'myImage' + index" @load="handleImageLoad(index, item)" v-if="item.type == 'h5-image'" :src="item.url"></p>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
+ <view class="content" :style="{paddingBottom: paddingBottom}">
|
|
|
+ <view class="item" v-for="(item, index) in json" :class="item.classText.join(' ')" @click="click(item)">
|
|
|
+ <p v-if="item.type === 'h5-text'" :style="item.style">{{ item.content }}</p>
|
|
|
+ <img :ref="'myImage' + index" @load="handleImageLoad(index, item)" v-if="item.type === 'h5-image'"
|
|
|
+ :src="item.url"/>
|
|
|
+ <div v-if="item.type === 'h5-sep'" :class="item.classText.join(' ')"></div>
|
|
|
+ <div class="countdown2-box"
|
|
|
+ :style="{ backgroundImage: item.bgImage && item.bgImage !== '#' ? `url(${item.bgImage})` : '' }"
|
|
|
+ v-if="item.type==='h5-countdown'"
|
|
|
+ >
|
|
|
+ 距结束<span id="days" :style="{background: item.mainColor}">{{ item.days }}</span>天
|
|
|
+ <span id="hours" :style="{background: item.mainColor}">{{ item.hours }}</span>时
|
|
|
+ <span id="minutes" :style="{background: item.mainColor}">{{ item.minutes }}</span>分
|
|
|
+ <span id="seconds" :style="{background: item.mainColor}">{{ item.seconds }}</span>秒
|
|
|
+ </div>
|
|
|
+ <div :class="item.classText.join(' ')" v-if="item.type==='h5-chat'">
|
|
|
+ <div class="chat-container">
|
|
|
+ <div class="chat-messages">
|
|
|
+ <!-- Messages -->
|
|
|
+ <div v-for="(message, index) in item.messages" :key="index"
|
|
|
+ :class="['message-wrapper', message.sender === 'user' ? 'user-message' : 'agent-message']"
|
|
|
+ >
|
|
|
+ <div class="avatar">
|
|
|
+ <img :src="message.sender === 'user' ? userAvatar : getAgentAvatar(item)" alt="Avatar"/>
|
|
|
+ </div>
|
|
|
+ <div class="message-content">
|
|
|
+ <div v-if="message.text" class="message-text" v-html="message.text"></div>
|
|
|
+ <!-- Options buttons -->
|
|
|
+ <div v-if="message.options && message.options.length > 0" class="options-container">
|
|
|
+ <button
|
|
|
+ v-for="(option, optIndex) in message.options"
|
|
|
+ :key="optIndex"
|
|
|
+ :style="{color: item.style.btnTextColor,backgroundColor: item.style.buttonColor}"
|
|
|
+ class="option-button"
|
|
|
+ :class="{ 'selected': isOptionSelected(message.id, option) }"
|
|
|
+ @click="selectOption(message.id, option)"
|
|
|
+ >
|
|
|
+ {{ option.text }}
|
|
|
+ </button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
</template>
|
|
|
<script>
|
|
|
- import Clipboard from 'clipboard'; // 引入Clipboard
|
|
|
- import {getTemplateByNo,getTemplateById,callback,youkuClickCallback, iqiyiClickCallback} from '../../api/api.js'
|
|
|
- import {clicks} from '../../common/common.js'
|
|
|
-
|
|
|
-
|
|
|
- export default {
|
|
|
- data() {
|
|
|
- return {
|
|
|
- images: [],
|
|
|
- params: {},
|
|
|
- site: {},
|
|
|
- data: {},
|
|
|
- json: {},
|
|
|
- vid: '',
|
|
|
- click_id: '',
|
|
|
- aid: '',
|
|
|
- id: null,
|
|
|
- no: null,
|
|
|
- type: 0,
|
|
|
- show: false,
|
|
|
- name: '',
|
|
|
- tel: '',
|
|
|
- accountId: '',
|
|
|
- ip: '',
|
|
|
- paddingBottom: 0,
|
|
|
- order_plan_id: "",
|
|
|
- creative_id: "",
|
|
|
- impress_id: "",
|
|
|
- sign: "",
|
|
|
- }
|
|
|
- },
|
|
|
- mounted() {
|
|
|
- window.vueInstance = this; // 将 Vue 实例暴露到全局
|
|
|
- },
|
|
|
- onLoad(option) {
|
|
|
- this.params = option;
|
|
|
- this.no = this.params.no;
|
|
|
- this.id = this.params.tid;
|
|
|
- if((this.id == null || this.id == "" || this.id == undefined) && (this.no == null || this.no == "" || this.no == undefined)){
|
|
|
- uni.showToast({
|
|
|
- icon:'none',
|
|
|
- title: '推广链接错误',
|
|
|
- });
|
|
|
- return;
|
|
|
- }
|
|
|
- this.accountId = this.params.accountId;
|
|
|
- this.type = this.params.type;
|
|
|
- this.no = this.params.no;
|
|
|
- if(this.id){
|
|
|
- getTemplateById(this.id).then(e => {
|
|
|
- this.data = e.data;
|
|
|
- this.site = e.site;
|
|
|
- this.type = e.site.type;
|
|
|
- this.json = JSON.parse(e.data.json)
|
|
|
- this.setData();
|
|
|
- })
|
|
|
- }else if(this.no){
|
|
|
- getTemplateByNo(this.no).then(e => {
|
|
|
- this.data = e.data;
|
|
|
- this.json = JSON.parse(e.data.json)
|
|
|
- this.setData();
|
|
|
- })
|
|
|
- }
|
|
|
- // callback({vid: this.vid}).then(e => {
|
|
|
- // console.info(e)
|
|
|
- // })
|
|
|
- },
|
|
|
- methods: {
|
|
|
- setData(){
|
|
|
- // 百度
|
|
|
- if(this.type == 0){
|
|
|
- this.vid = this.params.bd_vid;
|
|
|
+import Clipboard from 'clipboard' // 引入Clipboard
|
|
|
+import {getTemplateByNo, getTemplateById, callback, youkuClickCallback, iqiyiClickCallback} from '../../api/api.js'
|
|
|
+import {clicks} from '../../common/common.js'
|
|
|
+import agentAvatar from '../../static/customer.png'
|
|
|
+import userAvatar from '../../static/profile.png'
|
|
|
+
|
|
|
+export default {
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ userAvatar: userAvatar, // Placeholder for user avatar
|
|
|
+ agentAvatar: agentAvatar,
|
|
|
+ images: [],
|
|
|
+ params: {},
|
|
|
+ site: {},
|
|
|
+ data: {},
|
|
|
+ json: [],
|
|
|
+ vid: '',
|
|
|
+ click_id: '',
|
|
|
+ aid: '',
|
|
|
+ id: null,
|
|
|
+ no: null,
|
|
|
+ type: 0,
|
|
|
+ show: false,
|
|
|
+ name: '',
|
|
|
+ tel: '',
|
|
|
+ accountId: '',
|
|
|
+ ip: '',
|
|
|
+ paddingBottom: 0,
|
|
|
+ order_plan_id: '',
|
|
|
+ creative_id: '',
|
|
|
+ impress_id: '',
|
|
|
+ sign: ''
|
|
|
+ }
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ window.vueInstance = this // 将 Vue 实例暴露到全局
|
|
|
+ },
|
|
|
+ onLoad(option) {
|
|
|
+ this.params = option;
|
|
|
+ this.no = this.params.no;
|
|
|
+ this.id = this.params.tid;
|
|
|
+ if ((this.id == null || this.id == '' || this.id == undefined) && (this.no == null || this.no == '' || this.no == undefined)) {
|
|
|
+ uni.showToast({
|
|
|
+ icon: 'none',
|
|
|
+ title: '推广链接错误'
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ this.accountId = this.params.accountId;
|
|
|
+ this.type = this.params.type;
|
|
|
+ this.no = this.params.no;
|
|
|
+ if (this.id) {
|
|
|
+ getTemplateById(this.id).then(e => {
|
|
|
+ this.data = e.data;
|
|
|
+ this.site = e.site;
|
|
|
+ this.type = e.site.type;
|
|
|
+ this.json = JSON.parse(e.data.json)
|
|
|
+ }).finally(() => {
|
|
|
+ this.setData();
|
|
|
+ })
|
|
|
+ } else if (this.no) {
|
|
|
+ getTemplateByNo(this.no).then(e => {
|
|
|
+ this.data = e.data;
|
|
|
+ this.json = JSON.parse(e.data.json)
|
|
|
+ }).finally(() => {
|
|
|
+ this.setData();
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },
|
|
|
+ beforeDestroy() {
|
|
|
+ this.json.filter(e => e.type === 'h5-countdown').forEach(item => {
|
|
|
+ if (item.intervalId) {
|
|
|
+ clearInterval(item.intervalId)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ setData() {
|
|
|
+ // 百度
|
|
|
+ if (this.type == 0) {
|
|
|
+ this.vid = this.params.bd_vid;
|
|
|
+ }
|
|
|
+ // 优酷
|
|
|
+ if (this.type == 1) {
|
|
|
+ this.vid = this.params.bd_vid;
|
|
|
+ this.aid = this.params.aid;
|
|
|
+ this.click_id = this.params.click_id;
|
|
|
+ this.ip = this.params.ip;
|
|
|
+ }
|
|
|
+ // 爱奇艺
|
|
|
+ if (this.type == 2) {
|
|
|
+ this.order_plan_id = this.params.order_plan_id;
|
|
|
+ this.creative_id = this.params.creative_id;
|
|
|
+ this.impress_id = this.params.impress_id;
|
|
|
+ this.sign = this.params.sign;
|
|
|
+ }
|
|
|
+ this.loadCountdownData();
|
|
|
+ this.loadChatMessage();
|
|
|
+ },
|
|
|
+ getChatMsgIdMax(){
|
|
|
+ let h5ChatItem = this.json.filter(e => e.type === 'h5-chat')[0]
|
|
|
+ let maxId = Math.max(0,...h5ChatItem.messages.map(e=>e.id))
|
|
|
+ return maxId + 1
|
|
|
+ },
|
|
|
+ // 聊天组件选择了选项
|
|
|
+ selectOption(id,option){
|
|
|
+ let h5ChatItem = this.json.filter(e => e.type === 'h5-chat')[0]
|
|
|
+ h5ChatItem.messages.push({
|
|
|
+ id: this.getChatMsgIdMax(),
|
|
|
+ sender: 'user',
|
|
|
+ text: option.text,
|
|
|
+ options: []
|
|
|
+ })
|
|
|
+ // 选项存在回复就回复用户
|
|
|
+ if(option.answer) {
|
|
|
+ setTimeout(()=>{
|
|
|
+ h5ChatItem.messages.push({
|
|
|
+ id: this.getChatMsgIdMax(),
|
|
|
+ sender: 'agent',
|
|
|
+ text: option.answer,
|
|
|
+ options: []
|
|
|
+ })
|
|
|
+ },1000)
|
|
|
+ }
|
|
|
+ // 然后发送下一个客服消息
|
|
|
+ let nextMsg = h5ChatItem.agentMsg.shift()
|
|
|
+ if(nextMsg) {
|
|
|
+ setTimeout(()=>{
|
|
|
+ h5ChatItem.messages.push(nextMsg)
|
|
|
+ },1000)
|
|
|
+ } else {
|
|
|
+ setTimeout(()=>{
|
|
|
+ h5ChatItem.messages.push({
|
|
|
+ id: this.getChatMsgIdMax(),
|
|
|
+ sender: 'agent',
|
|
|
+ text: "好的,已经为您分配专业老师。<span style='color:red'>【点击下方按钮】</span>添加老师,获取免费上课链接。!",
|
|
|
+ options: []
|
|
|
+ })
|
|
|
+ },2000)
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 加载计时器数据
|
|
|
+ loadCountdownData() {
|
|
|
+ let countdownItems = this.json.filter(e => e.type === 'h5-countdown')
|
|
|
+ countdownItems.forEach(item => {
|
|
|
+ // 为每个item启动一个定时器
|
|
|
+ this.startCountdown(item)
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 加载聊天组件的消息
|
|
|
+ loadChatMessage() {
|
|
|
+ let h5ChatItem = this.json.filter(e => e.type === 'h5-chat')[0]
|
|
|
+ h5ChatItem.messages = []
|
|
|
+
|
|
|
+ // 先输出所有的欢迎信息,欢迎信息为没有options的数据,以及后面一条数据
|
|
|
+ let isOutputWelcome = 0;
|
|
|
+
|
|
|
+ while (h5ChatItem.agentMsg.length > 0) {
|
|
|
+ let msg = h5ChatItem.agentMsg.shift()
|
|
|
+
|
|
|
+ if (!msg.options || msg.options.length === 0) {
|
|
|
+ isOutputWelcome = 1
|
|
|
+ setTimeout(() => {
|
|
|
+ h5ChatItem.messages.push(msg)
|
|
|
+ }, 1000)
|
|
|
+ } else {
|
|
|
+ if ((isOutputWelcome === 1) || (isOutputWelcome === 0)) {
|
|
|
+ isOutputWelcome = 2
|
|
|
+ setTimeout(() => {
|
|
|
+ h5ChatItem.messages.push(msg)
|
|
|
+ }, 3000)
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
- // 优酷
|
|
|
- if(this.type == 1){
|
|
|
- this.vid = this.params.bd_vid;
|
|
|
- this.aid = this.params.aid;
|
|
|
- this.click_id = this.params.click_id;
|
|
|
- this.ip = this.params.ip;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ startCountdown(item) {
|
|
|
+ if (!item.active) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ let intervalId = setInterval(() => {
|
|
|
+ let timeLeft
|
|
|
+
|
|
|
+ if (item.countdownMode === '1') {
|
|
|
+ // 模式1:now() - endDateTime 的时间差
|
|
|
+ timeLeft = this.calculateTimePassed(item)
|
|
|
+ } else if (item.countdownMode === '2') {
|
|
|
+ // 模式2:timeDisplay 分钟数倒计时
|
|
|
+ timeLeft = this.calculateTimeLeftFromDisplay(item)
|
|
|
}
|
|
|
- // 爱奇艺
|
|
|
- if(this.type == 2){
|
|
|
- this.order_plan_id = this.params.order_plan_id;
|
|
|
- this.creative_id = this.params.creative_id;
|
|
|
- this.impress_id = this.params.impress_id;
|
|
|
- this.sign = this.params.sign;
|
|
|
+ // 不再有 total <= 0 的判断, 因为模式1是不断增加的
|
|
|
+ item.days = timeLeft.days
|
|
|
+ item.hours = timeLeft.hours
|
|
|
+ item.minutes = timeLeft.minutes
|
|
|
+ item.seconds = timeLeft.seconds
|
|
|
+
|
|
|
+ }, 1000)
|
|
|
+ item.intervalId = intervalId // 存储 intervalId
|
|
|
+ },
|
|
|
+
|
|
|
+ calculateTimePassed(item) {
|
|
|
+ // 如果已经结束,直接返回
|
|
|
+ if (item.isFinished) {
|
|
|
+ return {
|
|
|
+ days: 0,
|
|
|
+ hours: 0,
|
|
|
+ minutes: 0,
|
|
|
+ seconds: 0
|
|
|
}
|
|
|
- },
|
|
|
- handleImageLoad(index, item){
|
|
|
- if(item.classText.indexOf("footer") != -1){
|
|
|
- const imgElement = this.$refs["myImage" + index];
|
|
|
- // 获取真实高度(包含以下两种方式)
|
|
|
- const naturalHeight = imgElement[0].naturalHeight; // 原始高度
|
|
|
- const clientHeight = imgElement[0].clientHeight; // 渲染高度
|
|
|
- this.paddingBottom = clientHeight + "px";
|
|
|
- }
|
|
|
- },
|
|
|
- confirm() {
|
|
|
- this.show = false;
|
|
|
- },
|
|
|
- clickToWx(workUrl){
|
|
|
- // 百度
|
|
|
- if(this.type == 0){
|
|
|
- let data = {
|
|
|
- id: this.id,
|
|
|
- url: window.location.href,
|
|
|
- vid: this.vid,
|
|
|
- clickType: 67,
|
|
|
- };
|
|
|
- baiduClickCallback(data).then(e => {
|
|
|
- window.location.href = workUrl + "?customer_channel=" + this.vid;
|
|
|
- })
|
|
|
- }
|
|
|
- // 优酷
|
|
|
- if(this.type == 1){
|
|
|
- let data = {
|
|
|
- id: this.id,
|
|
|
- url: window.location.href,
|
|
|
- vid: this.vid,
|
|
|
- aid: this.aid,
|
|
|
- clickId: this.click_id,
|
|
|
- ip: this.ip,
|
|
|
- };
|
|
|
- youkuClickCallback(data).then(e => {
|
|
|
- window.location.href = workUrl + "?customer_channel=" + this.vid;
|
|
|
- })
|
|
|
- }
|
|
|
- // 爱奇艺
|
|
|
- if(this.type == 2){
|
|
|
- if(this.id){
|
|
|
- let data = {
|
|
|
- url: window.location.href,
|
|
|
- id: this.id,
|
|
|
- planId: this.order_plan_id,
|
|
|
- creativeId: this.creative_id,
|
|
|
- vid: this.impress_id,
|
|
|
- sign: this.sign,
|
|
|
- clickType: "200"
|
|
|
- };
|
|
|
- iqiyiClickCallback(data).then(e => {
|
|
|
- window.location.href = workUrl + "?customer_channel=" + this.impress_id;
|
|
|
- })
|
|
|
- }else{
|
|
|
- let data = {
|
|
|
- accountId: this.accountId,
|
|
|
- url: window.location.href,
|
|
|
- no: this.no,
|
|
|
- planId: this.order_plan_id,
|
|
|
- creativeId: this.creative_id,
|
|
|
- vid: this.impress_id,
|
|
|
- sign: this.sign,
|
|
|
- clickType: "200"
|
|
|
- };
|
|
|
- iqiyiClickCallback(data).then(e => {
|
|
|
- window.location.href = workUrl + "?customer_channel=" + this.impress_id;
|
|
|
- })
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- },
|
|
|
- click(item){
|
|
|
- if(!item.addWxFun){
|
|
|
- return;
|
|
|
- }
|
|
|
- this.clickToWx(item.workUrl);
|
|
|
- },
|
|
|
- }
|
|
|
- }
|
|
|
+ }
|
|
|
+
|
|
|
+ let endTime = new Date(item.endDateTime)
|
|
|
+ let now = new Date()
|
|
|
+ let diff = endTime.getTime() - now.getTime() // 毫秒差, end - now
|
|
|
+
|
|
|
+ if (diff <= 0) {
|
|
|
+ // 如果 endDateTime 比当前时间晚, 则显示 0
|
|
|
+ clearInterval(item.intervalId)
|
|
|
+ item.intervalId = null
|
|
|
+ item.isFinished = true
|
|
|
+ return {
|
|
|
+ days: 0,
|
|
|
+ hours: 0,
|
|
|
+ minutes: 0,
|
|
|
+ seconds: 0
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return this.millisecondsToTimeObject(diff)
|
|
|
+ },
|
|
|
+
|
|
|
+ calculateTimeLeftFromDisplay(item) {
|
|
|
+ if (!item.startTime) {
|
|
|
+ item.startTime = Date.now() // 记录开始时间
|
|
|
+ }
|
|
|
+ let totalSeconds = item.timeDisplay * 60 // timeDisplay 是分钟数
|
|
|
+ let passedSeconds = Math.floor((Date.now() - item.startTime) / 1000)
|
|
|
+ let timeLeft = totalSeconds - passedSeconds
|
|
|
+
|
|
|
+ if (timeLeft <= 0) {
|
|
|
+ clearInterval(item.intervalId)
|
|
|
+ item.intervalId = null//清除id
|
|
|
+ return {
|
|
|
+ days: 0,
|
|
|
+ hours: 0,
|
|
|
+ minutes: 0,
|
|
|
+ seconds: 0
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return this.secondsToTimeObject(timeLeft)
|
|
|
+ },
|
|
|
+
|
|
|
+ millisecondsToTimeObject(milliseconds) {
|
|
|
+ let totalSeconds = Math.floor(milliseconds / 1000)
|
|
|
+ return this.secondsToTimeObject(totalSeconds)
|
|
|
+ },
|
|
|
+ secondsToTimeObject(totalSeconds) {
|
|
|
+ let days = Math.floor(totalSeconds / (3600 * 24))
|
|
|
+ let hours = Math.floor((totalSeconds % (3600 * 24)) / 3600)
|
|
|
+ let minutes = Math.floor((totalSeconds % 3600) / 60)
|
|
|
+ let seconds = Math.floor(totalSeconds % 60)
|
|
|
+ return {
|
|
|
+ days: days,
|
|
|
+ hours: hours,
|
|
|
+ minutes: minutes,
|
|
|
+ seconds: seconds
|
|
|
+ }
|
|
|
+ },
|
|
|
+ getAgentAvatar(item) {
|
|
|
+ if (item.style.avatar) {
|
|
|
+ return item.style.avatar
|
|
|
+ }
|
|
|
+ return this.agentAvatar
|
|
|
+ },
|
|
|
+ isOptionSelected(messageId, option) {
|
|
|
+ let messages = this.json.find(t => t.type === 'h5-chat').messages
|
|
|
+ const message = messages.find(m => m.id === messageId)
|
|
|
+ return message && message.userSelection && message.userSelection.id === option.id
|
|
|
+ },
|
|
|
+ handleImageLoad(index, item) {
|
|
|
+ if (item.classText.indexOf("footer") != -1) {
|
|
|
+ const imgElement = this.$refs["myImage" + index];
|
|
|
+ // 获取真实高度(包含以下两种方式)
|
|
|
+ const naturalHeight = imgElement[0].naturalHeight; // 原始高度
|
|
|
+ const clientHeight = imgElement[0].clientHeight; // 渲染高度
|
|
|
+ this.paddingBottom = clientHeight + "px";
|
|
|
+ }
|
|
|
+ },
|
|
|
+ confirm() {
|
|
|
+ this.show = false
|
|
|
+ },
|
|
|
+ clickToWx(workUrl) {
|
|
|
+ // 百度
|
|
|
+ if (this.type == 0) {
|
|
|
+ let data = {
|
|
|
+ id: this.id,
|
|
|
+ url: window.location.href,
|
|
|
+ vid: this.vid,
|
|
|
+ clickType: 67,
|
|
|
+ };
|
|
|
+ baiduClickCallback(data).then(e => {
|
|
|
+ window.location.href = workUrl + "?customer_channel=" + this.vid;
|
|
|
+ })
|
|
|
+ }
|
|
|
+ // 优酷
|
|
|
+ if (this.type == 1) {
|
|
|
+ let data = {
|
|
|
+ id: this.id,
|
|
|
+ url: window.location.href,
|
|
|
+ vid: this.vid,
|
|
|
+ aid: this.aid,
|
|
|
+ clickId: this.click_id,
|
|
|
+ ip: this.ip,
|
|
|
+ };
|
|
|
+ youkuClickCallback(data).then(e => {
|
|
|
+ window.location.href = workUrl + "?customer_channel=" + this.vid;
|
|
|
+ })
|
|
|
+ }
|
|
|
+ // 爱奇艺
|
|
|
+ if (this.type == 2) {
|
|
|
+ if (this.id) {
|
|
|
+ let data = {
|
|
|
+ url: window.location.href,
|
|
|
+ id: this.id,
|
|
|
+ planId: this.order_plan_id,
|
|
|
+ creativeId: this.creative_id,
|
|
|
+ vid: this.impress_id,
|
|
|
+ sign: this.sign,
|
|
|
+ clickType: "200"
|
|
|
+ };
|
|
|
+ iqiyiClickCallback(data).then(e => {
|
|
|
+ window.location.href = workUrl + "?customer_channel=" + this.impress_id;
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ let data = {
|
|
|
+ accountId: this.accountId,
|
|
|
+ url: window.location.href,
|
|
|
+ no: this.no,
|
|
|
+ planId: this.order_plan_id,
|
|
|
+ creativeId: this.creative_id,
|
|
|
+ vid: this.impress_id,
|
|
|
+ sign: this.sign,
|
|
|
+ clickType: "200"
|
|
|
+ };
|
|
|
+ iqiyiClickCallback(data).then(e => {
|
|
|
+ window.location.href = workUrl + "?customer_channel=" + this.impress_id;
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+ click(item) {
|
|
|
+ if (!item.addWxFun) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ this.clickToWx(item.workUrl)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
- .item{
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- flex: 1;
|
|
|
- margin: 0;
|
|
|
- width: 100%;
|
|
|
- img{
|
|
|
- width: 100%;
|
|
|
- }
|
|
|
- p{
|
|
|
- white-space: pre-line;
|
|
|
- }
|
|
|
- }
|
|
|
- .footer{
|
|
|
- position: fixed;
|
|
|
- bottom: 0;
|
|
|
- left: 0;
|
|
|
- }
|
|
|
+.chat-container {
|
|
|
+ width: 100%;
|
|
|
+ // max-width: 500px;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ background-color: #f8f8f8;
|
|
|
+ font-family: Arial, sans-serif;
|
|
|
+ max-height: 500px;
|
|
|
+}
|
|
|
+
|
|
|
+.chat-messages {
|
|
|
+ flex: 1;
|
|
|
+ overflow-y: auto;
|
|
|
+ padding: 16px;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+}
|
|
|
+
|
|
|
+.message-wrapper {
|
|
|
+ display: flex;
|
|
|
+ margin-bottom: 16px;
|
|
|
+ max-width: 80%;
|
|
|
+}
|
|
|
+
|
|
|
+.agent-message {
|
|
|
+ align-self: flex-start;
|
|
|
+}
|
|
|
+
|
|
|
+.user-message {
|
|
|
+ align-self: flex-end;
|
|
|
+ flex-direction: row-reverse;
|
|
|
+}
|
|
|
+
|
|
|
+.avatar {
|
|
|
+ font-size: 14px;
|
|
|
+ display: flex;
|
|
|
+ padding-right: 5px;
|
|
|
+ padding-left: 0;
|
|
|
+ margin-bottom: 15px;
|
|
|
+}
|
|
|
+
|
|
|
+.avatar img {
|
|
|
+ width: 36px;
|
|
|
+ height: 36px;
|
|
|
+ border-radius: 50%;
|
|
|
+}
|
|
|
+
|
|
|
+.message-content {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+}
|
|
|
+
|
|
|
+.message-text {
|
|
|
+ padding: 12px;
|
|
|
+ border-radius: 18px;
|
|
|
+ font-size: 14px;
|
|
|
+ line-height: 1.4;
|
|
|
+ word-break: break-word;
|
|
|
+}
|
|
|
+
|
|
|
+.agent-message .message-text {
|
|
|
+ background-color: white;
|
|
|
+ color: #333;
|
|
|
+ border-top-left-radius: 4px;
|
|
|
+}
|
|
|
+
|
|
|
+.user-message .message-text {
|
|
|
+ background-color: #4a90e2;
|
|
|
+ color: white;
|
|
|
+ border-top-right-radius: 4px;
|
|
|
+}
|
|
|
+
|
|
|
+.options-container {
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ gap: 8px;
|
|
|
+ margin-top: 8px;
|
|
|
+}
|
|
|
+
|
|
|
+.option-button {
|
|
|
+ background-color: #4a90e2;
|
|
|
+ color: white;
|
|
|
+ border: none;
|
|
|
+ border-radius: 18px;
|
|
|
+ padding: 8px 16px;
|
|
|
+ font-size: 14px;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: background-color 0.2s;
|
|
|
+}
|
|
|
+
|
|
|
+.option-button:hover {
|
|
|
+ background-color: #045dba;
|
|
|
+}
|
|
|
+
|
|
|
+.option-button.selected {
|
|
|
+ background-color: #2a70c2;
|
|
|
+}
|
|
|
+
|
|
|
+.item {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ flex: 1;
|
|
|
+ margin: 0;
|
|
|
+ width: 100%;
|
|
|
+
|
|
|
+ img {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+
|
|
|
+ p {
|
|
|
+ white-space: pre-line;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.footer {
|
|
|
+ position: fixed;
|
|
|
+ bottom: 0;
|
|
|
+ left: 0;
|
|
|
+}
|
|
|
+
|
|
|
+.countdown2-box {
|
|
|
+ background: url('#') no-repeat center;
|
|
|
+ background-size: 100%;
|
|
|
+ width: 100%;
|
|
|
+ height: 54px;
|
|
|
+ line-height: 54px;
|
|
|
+ color: #515A6E;
|
|
|
+ font-size: 14px;
|
|
|
+ text-align: center;
|
|
|
+}
|
|
|
+
|
|
|
+.countdown2-box span {
|
|
|
+ display: inline-block;
|
|
|
+ color: #fff;
|
|
|
+ width: 22px;
|
|
|
+ line-height: 20px;
|
|
|
+ text-align: center;
|
|
|
+ height: 20px;
|
|
|
+ border-radius: 3px;
|
|
|
+ margin: 7px;
|
|
|
+ background: #FF5A29;
|
|
|
+}
|
|
|
</style>
|