Commit b037b4a5 authored by 王's avatar

公众号菜单

parent ae08ff81
...@@ -112,16 +112,16 @@ ...@@ -112,16 +112,16 @@
<div class="frm_controls frm_vertical_pt"> <div class="frm_controls frm_vertical_pt">
<template v-if="selectedChildIndex === -1"> <template v-if="selectedChildIndex === -1">
<el-radio-group v-model="buttonList[selectedIndex].type" @change="onTypeChange"> <el-radio-group v-model="buttonList[selectedIndex].type" @change="onTypeChange">
<el-radio label="media_id">发送消息</el-radio> <el-radio label="click">发送消息</el-radio>
<el-radio label="view">跳转网页</el-radio> <el-radio label="view">跳转网页</el-radio>
<el-radio label="click">关键字</el-radio> <el-radio label="miniprogram">跳转小程序</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
<template v-else> <template v-else>
<el-radio-group v-model="buttonList[selectedIndex].sub_button[selectedChildIndex].type" @change="onTypeChange"> <el-radio-group v-model="buttonList[selectedIndex].sub_button[selectedChildIndex].type" @change="onTypeChange">
<el-radio label="media_id">发送消息</el-radio> <el-radio label="click">发送消息</el-radio>
<el-radio label="view">跳转网页</el-radio> <el-radio label="view">跳转网页</el-radio>
<el-radio label="click">关键字</el-radio> <el-radio label="miniprogram">跳转小程序</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</div> </div>
...@@ -139,7 +139,7 @@ ...@@ -139,7 +139,7 @@
</div> </div>
</div> </div>
</div> </div>
<div v-else-if="buttonList[selectedIndex].type === 'media_id'" style="display: block;"> <div v-else-if="buttonList[selectedIndex].type === 'click'" style="display: block;">
<div class="inner" v-loading="loading"> <div class="inner" v-loading="loading">
<ul class="weui-desktop-msg-sender__tabs"> <ul class="weui-desktop-msg-sender__tabs">
<li class="weui-desktop-msg-sender__tab weui-desktop-msg-sender__tab_appmsg" :class="buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.type === 'news' ? 'weui-desktop-msg-sender__tab_selected' : ''" @click="onClickSendMsg('news')">图文</li> <li class="weui-desktop-msg-sender__tab weui-desktop-msg-sender__tab_appmsg" :class="buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.type === 'news' ? 'weui-desktop-msg-sender__tab_selected' : ''" @click="onClickSendMsg('news')">图文</li>
...@@ -154,7 +154,7 @@ ...@@ -154,7 +154,7 @@
<el-input <el-input
type="textarea" type="textarea"
:autosize="{ minRows: 4, maxRows: 8}" :autosize="{ minRows: 4, maxRows: 8}"
v-model="content" v-model="buttonList[selectedIndex].media_info.content"
placeholder="请输入内容"> placeholder="请输入内容">
</el-input> </el-input>
</div> </div>
...@@ -175,8 +175,8 @@ ...@@ -175,8 +175,8 @@
</div> </div>
</div> </div>
<div class="img-action" v-if="buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.type === 'image'"> <div class="img-action" v-if="buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.type === 'image'">
<template v-if="selectedIndex > -1 && buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.url"> <template v-if="selectedIndex > -1 && buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.content">
<img style="max-width: 30%" :src="buttonList[selectedIndex].media_info.url"/> <img style="max-width: 30%" :src="buttonList[selectedIndex].media_info.content"/>
<i class="el-icon-delete" @click="deleteMedia()" style="display: inline-block"></i> <i class="el-icon-delete" @click="deleteMedia()" style="display: inline-block"></i>
</template> </template>
<div class="display-b" v-else> <div class="display-b" v-else>
...@@ -209,10 +209,10 @@ ...@@ -209,10 +209,10 @@
</div> </div>
</div> </div>
<div class="img-action" v-if="buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.type === 'news'"> <div class="img-action" v-if="buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.type === 'news'">
<template v-if="buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.news_item"> <template v-if="buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.content && buttonList[selectedIndex].media_info.content.news_item">
<div class="news-media"> <div class="news-media" v-if="buttonList[selectedIndex].media_info.content.news_item.length > 0">
<div v-for="(child, childIndex) in buttonList[selectedIndex].media_info.news_item" style="position: relative"> <div v-for="(child, childIndex) in buttonList[selectedIndex].media_info.content.news_item" style="position: relative">
<div v-if="buttonList[selectedIndex].media_info.news_item.length === 1" class="single-cover"> <div v-if="buttonList[selectedIndex].media_info.content.news_item.length === 1" class="single-cover">
<div class="title">{{child.title}}</div> <div class="title">{{child.title}}</div>
<img :src="child.thumb_url" style="width: 100%;margin-top: 20px;"/> <img :src="child.thumb_url" style="width: 100%;margin-top: 20px;"/>
<div class="digest">{{child.digest}}</div> <div class="digest">{{child.digest}}</div>
...@@ -220,7 +220,7 @@ ...@@ -220,7 +220,7 @@
预览文章 预览文章
</a> </a>
</div> </div>
<div v-else-if="buttonList[selectedIndex].media_info.news_item.length > 1" class="clear-both bottomCover" style="position: relative"> <div v-else-if="buttonList[selectedIndex].media_info.content.news_item.length > 1" class="clear-both bottomCover" style="position: relative">
<div v-if="childIndex === 0" class="muti-cover"> <div v-if="childIndex === 0" class="muti-cover">
<img style="width: 100%;margin-top: 20px;" :src="child.thumb_url"/> <img style="width: 100%;margin-top: 20px;" :src="child.thumb_url"/>
<div class="bottom-title">{{child.title}}</div> <div class="bottom-title">{{child.title}}</div>
...@@ -283,7 +283,7 @@ ...@@ -283,7 +283,7 @@
</div> </div>
</div> </div>
<div class="img-action" v-if="buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.type === 'voice'"> <div class="img-action" v-if="buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.type === 'voice'">
<template v-if="selectedIndex > -1 && buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.url"> <template v-if="selectedIndex > -1 && buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.content">
<i class="el-icon-delete" @click="deleteMedia()" style="display: inline-block"></i> <i class="el-icon-delete" @click="deleteMedia()" style="display: inline-block"></i>
</template> </template>
<div class="display-b" v-else> <div class="display-b" v-else>
...@@ -313,8 +313,8 @@ ...@@ -313,8 +313,8 @@
</div> </div>
</div> </div>
<div class="img-action" style="text-align: left" v-if="buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.type === 'video'"> <div class="img-action" style="text-align: left" v-if="buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.type === 'video'">
<template v-if="selectedIndex > -1 && buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.down_url"> <template v-if="selectedIndex > -1 && buttonList[selectedIndex].media_info && buttonList[selectedIndex].media_info.content && buttonList[selectedIndex].media_info.content.down_url">
<a :href="buttonList[selectedIndex].media_info.down_url">{{buttonList[selectedIndex].media_info.title}}</a> <a :href="buttonList[selectedIndex].media_info.content.down_url">{{buttonList[selectedIndex].media_info.content.title}}</a>
<i class="el-icon-delete" @click="deleteMedia()" style="display: inline-block"></i> <i class="el-icon-delete" @click="deleteMedia()" style="display: inline-block"></i>
</template> </template>
<div class="display-b" v-else> <div class="display-b" v-else>
...@@ -351,12 +351,28 @@ ...@@ -351,12 +351,28 @@
</div> </div>
</div> </div>
<div v-else class="menu_content url jsMain" style="display: block;"> <div v-else class="menu_content url jsMain" style="display: block;">
<p class="menu_content_tips tips_global">click</p> <p class="menu_content_tips tips_global">小程序</p>
<div class="frm_control_group"> <div class="frm_control_group">
<label for="" class="frm_label">key</label> <label for="" class="frm_label">url</label>
<div class="frm_controls"> <div class="frm_controls">
<span class="frm_input_box"> <span class="frm_input_box">
<input v-model="buttonList[selectedIndex].key" type="text" class="frm_input"/> <input v-model="buttonList[selectedIndex].url" type="text" class="frm_input" value="http://mp.weixin.qq.com"/>
</span>
</div>
</div>
<div class="frm_control_group">
<label for="" class="frm_label">appid</label>
<div class="frm_controls">
<span class="frm_input_box">
<input v-model="buttonList[selectedIndex].appid" type="text" class="frm_input"/>
</span>
</div>
</div>
<div class="frm_control_group">
<label for="" class="frm_label">小程序路径</label>
<div class="frm_controls">
<span class="frm_input_box">
<input v-model="buttonList[selectedIndex].pagepath" type="text" class="frm_input" />
</span> </span>
</div> </div>
</div> </div>
...@@ -374,7 +390,7 @@ ...@@ -374,7 +390,7 @@
</div> </div>
</div> </div>
</div> </div>
<div v-else-if="buttonList[selectedIndex].sub_button[selectedChildIndex].type === 'media_id'" style="display: block;"> <div v-else-if="buttonList[selectedIndex].sub_button[selectedChildIndex].type === 'click'" style="display: block;">
<div class="inner" v-loading="loading"> <div class="inner" v-loading="loading">
<ul class="weui-desktop-msg-sender__tabs"> <ul class="weui-desktop-msg-sender__tabs">
<li class="weui-desktop-msg-sender__tab weui-desktop-msg-sender__tab_appmsg" :class="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type === 'news' ? 'weui-desktop-msg-sender__tab_selected' : ''" @click="onClickSubSendMsg('news')">图文</li> <li class="weui-desktop-msg-sender__tab weui-desktop-msg-sender__tab_appmsg" :class="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type === 'news' ? 'weui-desktop-msg-sender__tab_selected' : ''" @click="onClickSubSendMsg('news')">图文</li>
...@@ -389,7 +405,7 @@ ...@@ -389,7 +405,7 @@
<el-input <el-input
type="textarea" type="textarea"
:autosize="{ minRows: 4, maxRows: 8}" :autosize="{ minRows: 4, maxRows: 8}"
v-model="content" v-model="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content"
placeholder="请输入内容"> placeholder="请输入内容">
</el-input> </el-input>
</div> </div>
...@@ -399,19 +415,19 @@ ...@@ -399,19 +415,19 @@
width="400" width="400"
:offset="10" :offset="10"
trigger="manual" trigger="manual"
v-model="showEmotion"> v-model="showSubEmotion">
<div> <div>
<emotion @emotion="handleEmotion" :height="200" ></emotion> <emotion2 @emotion="handleSubEmotion" :height="200" ></emotion2>
</div> </div>
<el-button @click="showEmotion = !showEmotion" slot="reference" type="text"> <el-button @click="showSubEmotion = !showSubEmotion" slot="reference" type="text">
<span class="icon_emotion emotion_switch"></span> <span class="icon_emotion emotion_switch"></span>
</el-button> </el-button>
</el-popover> </el-popover>
</div> </div>
</div> </div>
<div class="img-action" v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type === 'image'"> <div class="img-action" v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type === 'image'">
<template v-if="selectedIndex && selectedChildIndex > -1 && buttonList[selectedIndex].sub_button[selectedChildIndex] && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.url"> <template v-if="selectedIndex && selectedChildIndex > -1 && buttonList[selectedIndex].sub_button[selectedChildIndex] && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content">
<img style="max-width: 30%" :src="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.url" v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.url"/> <img style="max-width: 30%" :src="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content" v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content"/>
<i class="el-icon-delete" @click="deleteSubMedia()" style="display: inline-block"></i> <i class="el-icon-delete" @click="deleteSubMedia()" style="display: inline-block"></i>
</template> </template>
<div class="display-b" v-else> <div class="display-b" v-else>
...@@ -444,10 +460,10 @@ ...@@ -444,10 +460,10 @@
</div> </div>
</div> </div>
<div class="img-action" v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type === 'news'"> <div class="img-action" v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type === 'news'">
<template v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.news_item"> <template v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content">
<div class="news-media"> <div class="news-media">
<div v-for="(child, childIndex) in buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.news_item" style="position: relative"> <div v-for="(child, childIndex) in buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content.news_item" style="position: relative">
<div v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.news_item.length === 1" class="single-cover"> <div v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content.news_item.length === 1" class="single-cover">
<div class="title">{{child.title}}</div> <div class="title">{{child.title}}</div>
<img :src="child.thumb_url" style="width: 100%;margin-top: 20px;"/> <img :src="child.thumb_url" style="width: 100%;margin-top: 20px;"/>
<div class="digest">{{child.digest}}</div> <div class="digest">{{child.digest}}</div>
...@@ -455,7 +471,7 @@ ...@@ -455,7 +471,7 @@
预览文章 预览文章
</a> </a>
</div> </div>
<div v-else-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.news_item.length > 1" class="clear-both bottomCover" style="position: relative"> <div v-else-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content.news_item.length > 1" class="clear-both bottomCover" style="position: relative">
<div v-if="childIndex === 0" class="muti-cover"> <div v-if="childIndex === 0" class="muti-cover">
<img style="width: 100%;margin-top: 20px;" :src="child.thumb_url"/> <img style="width: 100%;margin-top: 20px;" :src="child.thumb_url"/>
<div class="bottom-title">{{child.title}}</div> <div class="bottom-title">{{child.title}}</div>
...@@ -518,8 +534,8 @@ ...@@ -518,8 +534,8 @@
</div> </div>
</div> </div>
<div class="img-action" v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type === 'voice'"> <div class="img-action" v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type === 'voice'">
<template v-if="selectedIndex && selectedChildIndex > -1 && buttonList[selectedIndex].sub_button[selectedChildIndex] && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.url"> <template v-if="selectedIndex && selectedChildIndex > -1 && buttonList[selectedIndex].sub_button[selectedChildIndex] && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content">
<a :href="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.url" v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.url">{{buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.title}}</a> <a :href="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content" v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content">{{buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.title}}</a>
<i class="el-icon-delete" @click="deleteSubMedia()" style="display: inline-block"></i> <i class="el-icon-delete" @click="deleteSubMedia()" style="display: inline-block"></i>
</template> </template>
<div class="display-b" v-else> <div class="display-b" v-else>
...@@ -552,8 +568,8 @@ ...@@ -552,8 +568,8 @@
</div> </div>
</div> </div>
<div class="img-action" style="text-align: left" v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type === 'video'"> <div class="img-action" style="text-align: left" v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type === 'video'">
<template v-if="selectedIndex && selectedChildIndex > -1 && buttonList[selectedIndex].sub_button[selectedChildIndex] && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.down_url"> <template v-if="selectedIndex && selectedChildIndex > -1 && buttonList[selectedIndex].sub_button[selectedChildIndex] && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content && buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content.down_url">
<a :href="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.url" v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.down_url">{{buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.title}}</a> <a :href="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content.down_url" v-if="buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content.down_url">{{buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content.title}}</a>
<i class="el-icon-delete" @click="deleteSubMedia()" style="display: inline-block"></i> <i class="el-icon-delete" @click="deleteSubMedia()" style="display: inline-block"></i>
</template> </template>
<div class="display-b" v-else> <div class="display-b" v-else>
...@@ -590,12 +606,28 @@ ...@@ -590,12 +606,28 @@
</div> </div>
</div> </div>
<div v-else class="menu_content url jsMain" style="display: block;"> <div v-else class="menu_content url jsMain" style="display: block;">
<p class="menu_content_tips tips_global">click</p> <p class="menu_content_tips tips_global">小程序</p>
<div class="frm_control_group">
<label for="" class="frm_label">url</label>
<div class="frm_controls">
<span class="frm_input_box">
<input v-model="buttonList[selectedIndex].sub_button[selectedChildIndex].url" type="text" class="frm_input" value="http://mp.weixin.qq.com"/>
</span>
</div>
</div>
<div class="frm_control_group"> <div class="frm_control_group">
<label for="" class="frm_label">key</label> <label for="" class="frm_label">appid</label>
<div class="frm_controls"> <div class="frm_controls">
<span class="frm_input_box"> <span class="frm_input_box">
<input v-model="buttonList[selectedIndex].sub_button[selectedChildIndex].key" type="text" class="frm_input"/> <input v-model="buttonList[selectedIndex].sub_button[selectedChildIndex].appid" type="text" class="frm_input"/>
</span>
</div>
</div>
<div class="frm_control_group">
<label for="" class="frm_label">小程序路径</label>
<div class="frm_controls">
<span class="frm_input_box">
<input v-model="buttonList[selectedIndex].sub_button[selectedChildIndex].pagepath" type="text" class="frm_input" />
</span> </span>
</div> </div>
</div> </div>
...@@ -627,19 +659,21 @@ ...@@ -627,19 +659,21 @@
</template> </template>
<script> <script>
import {getPublicMenuApi, savePublicMenuApi,getMediaListApi,getMediaApi} from "../../service/api"; import {getPublicMenuApi, savePublicMenuApi,getMediaListApi,getConfigListApi,saveConfigApi,updateConfigApi} from "../../service/api";
import draggable from 'vuedraggable' import draggable from 'vuedraggable'
import { MessageBox } from 'element-ui'; import { MessageBox } from 'element-ui';
import page from '../framework/page' import page from '../framework/page'
import page2 from '../framework/page' import page2 from '../framework/page'
import emotion from '../framework/Emotion/index' import emotion from '../framework/Emotion/index'
import emotion2 from '../framework/Emotion/index'
export default { export default {
name: "index", name: "index",
components: { components: {
draggable, draggable,
page, page,
page2, page2,
emotion emotion,
emotion2
}, },
data(){ data(){
return { return {
...@@ -660,13 +694,29 @@ ...@@ -660,13 +694,29 @@
showMedia: false, showMedia: false,
mediaList: [], mediaList: [],
showEmotion: false, showEmotion: false,
content: '' showSubEmotion: false,
content: '',
keywordsList: [],
keywordsMap: new Map()
} }
}, },
mounted(){ mounted(){
this.getMenu(); this.getConfigList();
}, },
methods:{ methods:{
getConfigList(){
getConfigListApi({key: 'menu_keywords'}).then(res => {
this.keywordsList = res.list;
res.list.forEach((i)=>{
let obj = {
id: i.id,
desc: i.desc ? JSON.parse(i.desc)[0] : []
}
this.keywordsMap.set(i.value, obj);
})
this.getMenu();
})
},
getName(){ getName(){
if (this.selectedChildIndex === -1){ if (this.selectedChildIndex === -1){
return this.buttonList[this.selectedIndex].name || '' return this.buttonList[this.selectedIndex].name || ''
...@@ -681,7 +731,7 @@ ...@@ -681,7 +731,7 @@
this.selectedIndex = 0 this.selectedIndex = 0
this.selectedChildIndex = -1 this.selectedChildIndex = -1
this.showOrder = false; this.showOrder = false;
// this.searchMenu(); this.searchMenu();
} }
}) })
...@@ -689,8 +739,10 @@ ...@@ -689,8 +739,10 @@
searchMenu(){ searchMenu(){
let list = this.buttonList; let list = this.buttonList;
for (let i = 0 ; i< list.length ; i ++) { for (let i = 0 ; i< list.length ; i ++) {
if (list[i].media_id){ if (list[i].key){
this.getMediaApi(i,-1,list[i].media_id); if(this.keywordsMap.has(list[i].key)){
this.buttonList[i].media_info = this.keywordsMap.get(list[i].key).desc
}
} else if (list[i].sub_button && list[i].sub_button.length > 0){ } else if (list[i].sub_button && list[i].sub_button.length > 0){
this.searchSubMenu(i); this.searchSubMenu(i);
} }
...@@ -699,25 +751,10 @@ ...@@ -699,25 +751,10 @@
searchSubMenu(i){ searchSubMenu(i){
let list = this.buttonList[i].sub_button; let list = this.buttonList[i].sub_button;
for (let j = 0; j< list.length; j++) { for (let j = 0; j< list.length; j++) {
if (list[j].media_id){ if (list[j].key && this.keywordsMap.has(list[j].key)){
this.getMediaApi(i,j,list[j].media_id); this.buttonList[i].sub_button[j].media_info = this.keywordsMap.get(list[j].key).desc
}
}
},
getMediaApi(index1,index2,id){
getMediaApi(id).then((res)=>{
if(res && res.news_item && res.news_item.length > 0) {
let media_info = {};
media_info.news_item = res.news_item
media_info.type = 'news'
if (index2 > -1) {
this.buttonList[index1].sub_button[index2].media_info = media_info
} else {
this.buttonList[index1].media_info = media_info
} }
} }
})
}, },
clickMenu(index, item){ clickMenu(index, item){
this.selectedIndex = index this.selectedIndex = index
...@@ -743,6 +780,15 @@ ...@@ -743,6 +780,15 @@
type: 'view', type: 'view',
url: '' url: ''
} }
if(this.buttonList[this.selectedIndex].key){
delete this.buttonList[this.selectedIndex].key
}
if(this.buttonList[this.selectedIndex].media_info){
delete this.buttonList[this.selectedIndex].media_info
}
if(this.buttonList[this.selectedIndex].type){
delete this.buttonList[this.selectedIndex].type
}
this.buttonList[this.selectedIndex].sub_button.push(item) this.buttonList[this.selectedIndex].sub_button.push(item)
this.selectedChildIndex = this.buttonList[this.selectedIndex].sub_button.length - 1 this.selectedChildIndex = this.buttonList[this.selectedIndex].sub_button.length - 1
}, },
...@@ -789,18 +835,42 @@ ...@@ -789,18 +835,42 @@
onTypeChange(val){ onTypeChange(val){
console.log('onTypeChange', val) console.log('onTypeChange', val)
}, },
searchSubButton(firstIndex,list){
list.forEach((item,index)=>{
if(item.type && item.type === 'click' && !item.key){
this.buttonList[firstIndex].sub_button[index].key = `menuKey_${firstIndex+1}_${index+1}`
}
})
},
onSave(){ onSave(){
let buttonList = this.buttonList this.buttonList.forEach((item,index)=>{
if(item.type && item.type === 'click' && !item.key){
this.buttonList[index].key = `menuKey_${index+1}`
}
if(item.sub_button && item.sub_button.length > 0){
this.searchSubButton(index, item.sub_button)
}
})
let json = { let json = {
buttons: JSON.stringify(buttonList) buttons: JSON.stringify(this.buttonList)
} }
let _this = this;
savePublicMenuApi(json).then(res=>{ savePublicMenuApi(json).then(res=>{
if (res.errcode === 0){ if (res.errcode === 0){
this.$message({ this.$message({
type: 'success', type: 'success',
message: '保存成功!' message: '保存成功!'
}); });
this.getMenu(); this.buttonList.forEach((item)=>{
if(item.key && !_this.keywordsMap.has(item.key)){
_this.onSaveConfig(item);
} else if(item.key && _this.keywordsMap.has(item.key)){
_this.onUpdateConfig(_this.keywordsMap.get(item.key).id, item)
}
if(item.sub_button && item.sub_button.length > 0){
this.onSaveSubConfig(item.sub_button)
}
})
} else { } else {
MessageBox({ MessageBox({
title:'错误!', title:'错误!',
...@@ -810,6 +880,33 @@ ...@@ -810,6 +880,33 @@
} }
}) })
}, },
onSaveSubConfig(list){
list.forEach((item)=>{
if(item.key && !this.keywordsMap.has(item.key)){
this.onSaveConfig(item);
} else if(item.key && this.keywordsMap.has(item.key)){
this.onUpdateConfig(this.keywordsMap.get(item.key).id, item)
}
})
},
onSaveConfig(item){
let json = {
key: 'menu_keywords',
value: item.key,
desc: JSON.stringify([item.media_info])
}
saveConfigApi(json).then(()=>{
})
},
onUpdateConfig(id,item){
let json = {
key: 'menu_keywords',
value: item.key,
desc: JSON.stringify([item.media_info])
}
updateConfigApi(id,json).then(()=>{
})
},
onPageChange(val){ onPageChange(val){
this.nowPage = val this.nowPage = val
this.getMediaList(this.buttonList[this.selectedIndex].media_info.type) this.getMediaList(this.buttonList[this.selectedIndex].media_info.type)
...@@ -846,17 +943,18 @@ ...@@ -846,17 +943,18 @@
onChooseMedia(val){ onChooseMedia(val){
let selectedIndex = this.selectedIndex; let selectedIndex = this.selectedIndex;
let _type = this.buttonList[selectedIndex].media_info.type; let _type = this.buttonList[selectedIndex].media_info.type;
let _menuIndex = selectedIndex + 1;
this.buttonList[selectedIndex].key = `menuKey_${_menuIndex}`
if(_type === 'image') { if(_type === 'image') {
this.buttonList[selectedIndex].media_id = val.media_id; this.buttonList[selectedIndex].media_id = val.media_id;
this.buttonList[selectedIndex].media_info.url = val.url; this.buttonList[selectedIndex].media_info.content = val.url;
this.buttonList[selectedIndex].key = 'image'
}else if (_type === 'news'){ }else if (_type === 'news'){
this.buttonList[selectedIndex].media_id = val.media_id; this.buttonList[selectedIndex].media_id = val.media_id;
this.buttonList[selectedIndex].media_info = val.content; this.buttonList[selectedIndex].media_info.content = val.content;
this.buttonList[selectedIndex].media_info.type = 'news'; this.buttonList[selectedIndex].media_info.type = 'news';
}else if (_type === 'video'){ }else if (_type === 'video'){
this.buttonList[selectedIndex].media_id = val.media_id; this.buttonList[selectedIndex].media_id = val.media_id;
this.buttonList[selectedIndex].media_info = val.info; this.buttonList[selectedIndex].media_info.content = val.info;
this.buttonList[selectedIndex].media_info.type = 'video'; this.buttonList[selectedIndex].media_info.type = 'video';
} }
this.showMedia = false; this.showMedia = false;
...@@ -865,17 +963,18 @@ ...@@ -865,17 +963,18 @@
onChooseSubMedia(val){ onChooseSubMedia(val){
let selectedIndex = this.selectedIndex; let selectedIndex = this.selectedIndex;
let selectedChildIndex = this.selectedChildIndex; let selectedChildIndex = this.selectedChildIndex;
this.buttonList[selectedIndex].sub_button[selectedChildIndex].key = `menuKey_${selectedIndex + 1}_${selectedChildIndex + 1}`
let _type = this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type; let _type = this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type;
if(_type === 'image') { if(_type === 'image') {
this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_id = val.media_id; this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_id = val.media_id;
this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.url = val.url; this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content = val.url;
}else if (_type === 'news'){ }else if (_type === 'news'){
this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_id = val.media_id; this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_id = val.media_id;
this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info = val.content; this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content = val.content;
this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type = 'news'; this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type = 'news';
}else if (_type === 'video'){ }else if (_type === 'video'){
this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_id = val.media_id; this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_id = val.media_id;
this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info = val.info; this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content = val.info;
this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type = 'video'; this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type = 'video';
} }
this.showMedia = false; this.showMedia = false;
...@@ -902,7 +1001,7 @@ ...@@ -902,7 +1001,7 @@
this.$forceUpdate(); this.$forceUpdate();
}, },
deleteMedia(){ deleteMedia(){
let _type = this.buttonList[selectedIndex].media_info.type; let _type = this.buttonList[this.selectedIndex].media_info.type;
this.buttonList[this.selectedIndex].media_id = ''; this.buttonList[this.selectedIndex].media_id = '';
if (_type === 'image') { if (_type === 'image') {
this.buttonList[this.selectedIndex].media_info.url = ''; this.buttonList[this.selectedIndex].media_info.url = '';
...@@ -917,14 +1016,14 @@ ...@@ -917,14 +1016,14 @@
this.$forceUpdate(); this.$forceUpdate();
}, },
deleteSubMedia(){ deleteSubMedia(){
let _type = this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type;
let selectedIndex = this.selectedIndex; let selectedIndex = this.selectedIndex;
let selectedChildIndex = this.selectedChildIndex; let selectedChildIndex = this.selectedChildIndex;
let _type = this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.type;
this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_id = ''; this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_id = '';
if (_type === 'image') { if (_type === 'image') {
this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.url = ''; this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.url = '';
} else if (_type === 'text'){ } else if (_type === 'text'){
this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content = '';
} else { } else {
this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info = { this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info = {
type: _type type: _type
...@@ -933,7 +1032,14 @@ ...@@ -933,7 +1032,14 @@
this.$forceUpdate(); this.$forceUpdate();
}, },
handleEmotion (i) { handleEmotion (i) {
this.content += i this.buttonList[this.selectedIndex].media_info.content += i;
this.$forceUpdate();
},
handleSubEmotion (i) {
let selectedIndex = this.selectedIndex;
let selectedChildIndex = this.selectedChildIndex;
this.buttonList[selectedIndex].sub_button[selectedChildIndex].media_info.content +=i;
this.$forceUpdate();
}, },
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment