-
Notifications
You must be signed in to change notification settings - Fork 1.6k
可视化
liaofei edited this page Jan 20, 2021
·
1 revision
可视化页面目录:src/pages/setting/devise/index.vue;
页面分3个模块:移动端首页、首页的可视化编辑、项目链接;
页面组成
<div class="flex-wrapper">
<iframe class="iframe-box" :src="iframeUrl" frameborder="0" ref="iframe"></iframe>
<div>
<div class="content">
<rightConfig :name="configName" :pageId="pageId"></rightConfig>
</div>
</div>
<links></links>
</div>
1.移动端首页:使用iframe引用前台页面; 例如:
<iframe class="iframe-box" :src="iframeUrl" frameborder="0" ref="iframe"></iframe>
iframeUrl
iframe链接地址
生产线上环境:this.iframeUrl = `${location.origin}?type=iframeMakkMinkkJuan`
本地调试环境: this.iframeUrl = http://localhost:xxxx/?type=iframeMakkMinkkJuan
http://localhost:xxxx 为uni-app前台启动的环境,方便调试
iframe 参数接受
mounted () {
//监听子页面给当前页面传值
window.addEventListener('message', this.handleMessage, false)
},
//接收iframe值
handleMessage (event) {
if (event.data.name) {
this.configName = event.data.name
this.add(event.data.name)
}
},
拿到值之后就能判断到当前点击的是哪个组件
2.可视化编辑:
src/components/rightConfig/index.vue
页面为主要操作的容器;
所有小组件使用动态添加的方法引用到此页面;
例如:
<template>
<div class="right-box" v-if="rCom.length">
<div class="title-bar">模块配置</div>
<div class="mobile-config" v-if="rCom.length">
<div v-for="(item, key) in rCom" :key="key">
//此标签为动态添加组件
<component :is="item.components.name" :name="item.configNme" :configData="configData"></component>
</div>
<div style="text-align: center;" v-if="rCom.length">
<Button type="primary" style="width:100%;margin:0 auto;height: 40px" @click="saveConfig">保存</Button>
</div>
</div>
</div>
</template>
小组件目录:src/components/diyComponents/
放置你要编辑产品的具体操作功能;
例如(c_is_show.vue):
<template>
<div class="c_row-item">
<Col class="label" span="4">
是否显示
</Col>
<Col span="19">
<i-switch v-model="datas[name].val" />
</Col>
</div>
</template>
小组件初始化数据datas在vuex里面储存,查找src/store/module/moren.js
vuex中首页可视化数据:
例如:
import toolCom from '@/components/diyComponents/index.js';
export default {
namespaced: true,
state: {
activeName: {},
defaultConfig: {
//a_headerSerch此名字必须与前台页面组件名字保持一致
a_headerSerch: {
isShow: {
val: true
},
imgUrl: {
title: '最多可添加1张图片,图片建议宽度128 * 45px',
url: 'http://kaifa.crmeb.net/uploads/attach/2019/10/20191023/db7b7bef9dffdedd27e9a3aa34218cea.png'
}
}
},
component: {
//a_headerSerch此名字必须与前台页面组件名字保持一致
a_headerSerch: {
list: [
{
components: toolCom.c_is_show,
configNme: 'isShow'
},
{
components: toolCom.c_upload_img,
configNme: 'imgUrl'
}
]
}
}
},
mutations: {
setConfig(state, name) {
state.activeName = name;
},
upDataGoodList(state, type) {},
/**
* @description 更新默认数据
* @param {Object} state vuex state
* @param {Object} data
*/
updataConfig(state, data) {
state.defaultConfig = data;
let value = Object.assign({}, state.defaultConfig);
state.defaultConfig = value;
}
},
actions: {}
};