|
@@ -4,6 +4,9 @@
|
|
|
<script>
|
|
|
// const util = require('@/static/utils/util.js');
|
|
|
const config = require('@/services/urlConfig.js');
|
|
|
+ import {
|
|
|
+ Toast
|
|
|
+ } from 'mint-ui';
|
|
|
// import Bus from '@/common/bus';
|
|
|
// import commonMethod from '@/common/commonMethod.js';
|
|
|
// import requestConfig from '@/static/lib/requestConfig';
|
|
@@ -26,18 +29,20 @@
|
|
|
text: '等待说话',
|
|
|
},
|
|
|
recording: false, // 正在录音
|
|
|
- startX: 0,
|
|
|
- startY: 0,
|
|
|
- clientX: 0,
|
|
|
- clientY: 0,
|
|
|
- defaultIndex: 0, //默认选中的户型大类
|
|
|
- carefulList: [],
|
|
|
- lastSpace: null, //上一个语音操作的空间对象
|
|
|
- bigWord: "变大,放大,大一点,变宽",
|
|
|
- bigWordPY: "bianda,fangda,dayidian,biankuan",
|
|
|
- smaillWord: "变小,缩放,小一点,变窄",
|
|
|
- smaillWordPY: "bianxiao,suofang,xiaoyidian,bianzhai",
|
|
|
- changeRate: 0.05, //每次变化的比例
|
|
|
+ startX:0,
|
|
|
+ startY:0,
|
|
|
+ clientX:0,
|
|
|
+ clientY:0,
|
|
|
+ defaultIndex:0,//默认选中的户型大类
|
|
|
+ carefulList:[],
|
|
|
+ lastSpace:null, //上一个语音操作的空间对象
|
|
|
+ bigWord:"变大,放大,大一点,变宽",
|
|
|
+ bigWordPY:"bianda,fangda,dayidian,biankuan",
|
|
|
+ smaillWord:"变小,缩放,小一点,变窄",
|
|
|
+ smaillWordPY:"bianxiao,suofang,xiaoyidian,bianzhai",
|
|
|
+ changeRate:0.05, //每次变化的比例
|
|
|
+ spaceList:[],
|
|
|
+ showX:false,
|
|
|
}
|
|
|
},
|
|
|
props: {
|
|
@@ -47,17 +52,17 @@
|
|
|
// return []
|
|
|
// }
|
|
|
// },
|
|
|
- // curHouseObj: {//当前展示的户型
|
|
|
- // type: Object,
|
|
|
- // default: () => {
|
|
|
- // return null
|
|
|
- // }
|
|
|
- // },
|
|
|
- overChange: { //当前选中的户型类型
|
|
|
+ curHouseObj: {//当前展示的户型
|
|
|
+ type: Object,
|
|
|
+ default: () => {
|
|
|
+ return null
|
|
|
+ }
|
|
|
+ },
|
|
|
+ overChange: {//当前选中的户型类型
|
|
|
type: Boolean,
|
|
|
default: false,
|
|
|
},
|
|
|
- styleType: {
|
|
|
+ styleType:{
|
|
|
type: [String, Number],
|
|
|
default: '',
|
|
|
}
|
|
@@ -71,16 +76,36 @@
|
|
|
// }
|
|
|
// },
|
|
|
// },
|
|
|
- // curHouseObj: {
|
|
|
- // handler(newVal,oldVal) {
|
|
|
- // if (newVal) {
|
|
|
- // console.warn("***curHouseObj-CHANGE-layout***", newVal)
|
|
|
- // if((oldVal && oldVal.id != newVal.id) || !oldVal){
|
|
|
- // this.initSpanceData();
|
|
|
- // }
|
|
|
- // }
|
|
|
- // },
|
|
|
- // },
|
|
|
+ curHouseObj: {
|
|
|
+ handler(newVal,oldVal) {
|
|
|
+ if (newVal) {
|
|
|
+ console.warn("***curHouseObj-CHANGE-layout***", newVal)
|
|
|
+ // if((oldVal && oldVal.id != newVal.id) || !oldVal){
|
|
|
+ // this.initSpanceData();
|
|
|
+ // }
|
|
|
+ const spaceDetail = newVal;
|
|
|
+ this.spaceList = JSON.parse(spaceDetail.houseJson);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
+ curSpaceId: {
|
|
|
+ handler(newVal,oldVal) {
|
|
|
+ if (newVal) {
|
|
|
+ console.warn("***curSpaceId-CHANGE-layout***", newVal)
|
|
|
+ let space = this.spaceList.find(it=>it.spaceId==this.curSpaceId);
|
|
|
+ if(space && space.spaceType==15){//X空间
|
|
|
+ this.showX = true;
|
|
|
+ }else{
|
|
|
+ this.showX = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ curSpaceId() {
|
|
|
+ return this.$store.state.curSpaceId;
|
|
|
+ },
|
|
|
},
|
|
|
async mounted() {
|
|
|
// this.getRecordAuth();//获取录音权限
|
|
@@ -90,343 +115,119 @@
|
|
|
},
|
|
|
// 页面被展示时执行
|
|
|
onPageShow: function() {
|
|
|
-
|
|
|
+
|
|
|
},
|
|
|
//页面被隐藏时执行
|
|
|
onPageHide: function() {
|
|
|
console.warn("***detached-hide***")
|
|
|
},
|
|
|
methods: {
|
|
|
- //返回上一页
|
|
|
- goback(){
|
|
|
- this.$router.go(-1);
|
|
|
- },
|
|
|
- //上划触发
|
|
|
- upCom() {
|
|
|
- console.warn("***upCom***")
|
|
|
- this.$emit("upCom");
|
|
|
- let param = {
|
|
|
- type: 'CLK', //埋点类型
|
|
|
- clkId: 'clk_2cmina_23080403', //点击ID
|
|
|
- clkName: 'adjust_clk', //点击前往的页面名称
|
|
|
- clkParams: {
|
|
|
- locusName: "精细调整",
|
|
|
+ initSpanceData(){
|
|
|
+ this.carefulList = [];
|
|
|
+ // var currPage = getCurrentPages()[getCurrentPages().length - 1] ? getCurrentPages()[getCurrentPages().length - 1].$vm : null;
|
|
|
+ const spaceDetail = this.curHouseObj;
|
|
|
+ const spaceList = JSON.parse(spaceDetail.houseJson);
|
|
|
+ spaceList && spaceList.forEach(async (item,index)=>{
|
|
|
+ let curSpaceArea = parseFloat(
|
|
|
+ (item.spaceWidth * item.spaceHeight) / 10000
|
|
|
+ ).toFixed(1);
|
|
|
+ let minArea = 0;
|
|
|
+ let maxArea = 100;
|
|
|
+ if(item.hasOwnProperty('spaceWidthMin') && item.hasOwnProperty('spaceHeightMin')){
|
|
|
+ minArea = parseFloat((item.spaceWidthMin * item.spaceHeightMin) / 10000).toFixed(1);
|
|
|
}
|
|
|
- };
|
|
|
- // util.trackRequest(param);
|
|
|
- },
|
|
|
- goRoam() {
|
|
|
- this.$parent.$refs.viewCareful.goRoam();
|
|
|
- },
|
|
|
- //获取录音权限
|
|
|
- getRecordAuth: function() {
|
|
|
- uni.getSetting({
|
|
|
- success(res) {
|
|
|
- console.log("succ")
|
|
|
- console.log(res)
|
|
|
- if (!res.authSetting['scope.record']) {
|
|
|
- uni.authorize({
|
|
|
- scope: 'scope.record',
|
|
|
- success() {
|
|
|
- // 用户已经同意小程序使用录音功能,后续调用 wx.startRecord 接口不会弹窗询问
|
|
|
- console.log("succ auth")
|
|
|
- },
|
|
|
- fail() {
|
|
|
- console.log("fail auth")
|
|
|
- }
|
|
|
- })
|
|
|
- } else {
|
|
|
- console.log("record has been authed")
|
|
|
- }
|
|
|
- },
|
|
|
- fail(res) {
|
|
|
- console.log("fail")
|
|
|
- console.log(res)
|
|
|
+ if(item.hasOwnProperty('spaceWidthMax') && item.hasOwnProperty('spaceHeightMax')){
|
|
|
+ maxArea = parseFloat((item.spaceWidthMax * item.spaceHeightMax) / 10000).toFixed(1);
|
|
|
}
|
|
|
- })
|
|
|
- },
|
|
|
- //求最长公共子集
|
|
|
- findSubStr(str1, str2) {
|
|
|
- if (str1.length > str2.length) {
|
|
|
- var temp = str1;
|
|
|
- str1 = str2;
|
|
|
- str2 = temp;
|
|
|
- }
|
|
|
- let len1 = str1.length;
|
|
|
- let len2 = str2.length;
|
|
|
- for (var j = len1; j > 0; j--) {
|
|
|
- for (var i = 0; i < len1 - j; i++) {
|
|
|
- var current = str1.substr(i, j);
|
|
|
- if (str2.indexOf(current) >= 0) {
|
|
|
- return current;
|
|
|
+ let text = item.spaceName;
|
|
|
+ if(text && !item.isSizeLock){
|
|
|
+ // let res = await requestConfig("chineseToPinyin", {chinese:text},true);
|
|
|
+ // let pinyin = res.single;
|
|
|
+ let data = {
|
|
|
+ spaceId:item.spaceId,
|
|
|
+ index:this.carefulList.length,
|
|
|
+ name:text,
|
|
|
+ namePY:'',
|
|
|
+ area:curSpaceArea,
|
|
|
+ percent:null,
|
|
|
+ minArea:minArea, //最小面积
|
|
|
+ maxArea:maxArea, //最大面积
|
|
|
}
|
|
|
+ this.carefulList.push(data)
|
|
|
}
|
|
|
- }
|
|
|
- return "";
|
|
|
- },
|
|
|
- //声音变化
|
|
|
- async textChange(text) {
|
|
|
- if (this.overChange) {
|
|
|
- uni.showToast({
|
|
|
- title: '请慢一点',
|
|
|
- icon: 'none',
|
|
|
- duration: 2000
|
|
|
- })
|
|
|
- return false;
|
|
|
- }
|
|
|
- let res = await requestConfig("chineseToPinyin", {
|
|
|
- chinese: text
|
|
|
- });
|
|
|
- let pinyin = res.single;
|
|
|
- console.warn("****pinyin***", pinyin)
|
|
|
- text = pinyin;
|
|
|
- //全匹配轮一遍
|
|
|
- let curSpace = this.carefulList.find(space => {
|
|
|
- return text.includes(space.namePY)
|
|
|
})
|
|
|
- if (!curSpace) {
|
|
|
- let list = this.carefulList.map((space, index) => {
|
|
|
- let comStr = this.findSubStr(text, space.namePY + ' ');
|
|
|
- return {
|
|
|
- spaceId: space.spaceId,
|
|
|
- namePY: space.namePY,
|
|
|
- name: space.name,
|
|
|
- comStr,
|
|
|
- index,
|
|
|
- }
|
|
|
- })
|
|
|
- //寻找5个字符串以上的
|
|
|
- let tmpList = list.filter(it => {
|
|
|
- return it.comStr.length > 5;
|
|
|
- })
|
|
|
- if (tmpList && tmpList.length > 0) {
|
|
|
- tmpList.sort((a, b) => a.comStr.length - b.comStr.length);
|
|
|
- let index = tmpList[tmpList.length - 1].index; //最大值在carefulList的序号
|
|
|
- curSpace = this.carefulList[index]; //
|
|
|
- } else {
|
|
|
- curSpace = this.lastSpace;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //没有找到语音操作对象
|
|
|
- if (!curSpace) {
|
|
|
- uni.showToast({
|
|
|
- title: '请再说一次',
|
|
|
- icon: 'none',
|
|
|
- duration: 2000
|
|
|
- })
|
|
|
- return false;
|
|
|
- }
|
|
|
- this.lastSpace = curSpace;
|
|
|
-
|
|
|
- console.log("textChange:", curSpace, this.carefulList, text, this.bigWordPY, this.smaillWordPY);
|
|
|
-
|
|
|
- let biglist = this.bigWordPY.split(',').map(word => {
|
|
|
- return text.lastIndexOf(word)
|
|
|
- })
|
|
|
- let smalllist = this.smaillWordPY.split(',').map(word => {
|
|
|
- return text.lastIndexOf(word)
|
|
|
+ console.warn("***viewlayout-init***", this.carefulList)
|
|
|
+ },
|
|
|
+ initData(houseList){
|
|
|
+ this.seedLayoutList = [];
|
|
|
+ houseList && houseList.forEach(item=>{
|
|
|
+ let data = {
|
|
|
+ spaceStructure: item.spaceStructure,
|
|
|
+ spaceName: item.spaceName,
|
|
|
+ set: false, //是否已经设置过
|
|
|
+ };
|
|
|
+ this.seedLayoutList.push(data);
|
|
|
})
|
|
|
- let a = Math.max(...biglist);
|
|
|
- let b = Math.max(...smalllist);
|
|
|
- let big = false;
|
|
|
- if (a == -1 && b == -1) { //都没命中
|
|
|
- uni.showToast({
|
|
|
- title: '请再说一次',
|
|
|
- icon: 'none',
|
|
|
- duration: 2000
|
|
|
- })
|
|
|
- return false;
|
|
|
- } else if (a > -1 && b > -1) { //两个都命中了
|
|
|
- if (a > b) { //放大靠后-命中靠后
|
|
|
- big = true;
|
|
|
- } else {
|
|
|
- big = false;
|
|
|
+ // var currPage = getCurrentPages()[getCurrentPages().length - 1] ? getCurrentPages()[getCurrentPages().length - 1].$vm : null;
|
|
|
+ // if(currPage.curHouseType){//获取当前页面选中的户型类型
|
|
|
+ // this.selectSeedId = currPage.curHouseType
|
|
|
+ // } else if(this.seedLayoutList && this.seedLayoutList[this.defaultIndex]){//默认选中第一个
|
|
|
+ // this.selectSeedId = this.seedLayoutList[this.defaultIndex].spaceStructure;
|
|
|
+ // }
|
|
|
+ this.selectSeedId = this.seedLayoutList[this.defaultIndex].spaceStructure;
|
|
|
+ let keyWord = this.$route.query.layer;
|
|
|
+ if(keyWord){//如果存在结构特征,则定位到该模型大类下
|
|
|
+ let item = this.seedLayoutList.find(it=>keyWord.includes(it.spaceName));
|
|
|
+ if(item){
|
|
|
+ this.selectSeedId = item.spaceStructure;
|
|
|
}
|
|
|
- } else if (a > -1) {
|
|
|
- big = true;
|
|
|
}
|
|
|
- let _area = parseFloat(curSpace.area) * this.changeRate;
|
|
|
- let data = {
|
|
|
- spaceId: curSpace.spaceId,
|
|
|
- area: _area,
|
|
|
- isZoomIn: big, //true 放大 false 缩放
|
|
|
- }
|
|
|
- console.log("viewlayout-发送消息-空间变化: ", data, curSpace.area, big);
|
|
|
- uni.showToast({
|
|
|
- title: '正在变化,请稍后',
|
|
|
- icon: 'none',
|
|
|
- duration: 2000
|
|
|
- })
|
|
|
- // this.sendMessageAction(JSON.stringify(parmas));
|
|
|
- this.$emit("curSpaceChange", data); //通知父组件-当前已经选中了户型大类
|
|
|
- },
|
|
|
- /**
|
|
|
- * 初始化语音识别回调
|
|
|
- * 绑定语音播放开始事件
|
|
|
- */
|
|
|
- initRecord: function() {
|
|
|
- // var currPage = getCurrentPages()[getCurrentPages().length - 1] ? getCurrentPages()[getCurrentPages().length - 1].$vm : null;
|
|
|
- //有新的识别内容返回,则会调用此事件
|
|
|
- manager.onRecognize = (res) => {
|
|
|
- let currentData = Object.assign({}, this.currentTranslate, {
|
|
|
- text: res.result,
|
|
|
+ if(this.selectSeedId){
|
|
|
+ let item = this.seedLayoutList.find(it=>{
|
|
|
+ return it.spaceStructure == this.selectSeedId
|
|
|
})
|
|
|
- this.currentTranslate = currentData;
|
|
|
- console.warn("***manager-正在录音***", this.currentTranslate)
|
|
|
- }
|
|
|
- // 识别结束事件
|
|
|
- manager.onStop = (res) => {
|
|
|
- console.warn("***manager-识别结束0***", this.recording, res)
|
|
|
- // this.textChange("客厅大一点");
|
|
|
- if (this.recording == false) { //已经强制结束识别了
|
|
|
- return false; //不识别
|
|
|
- }
|
|
|
- let text = res.result
|
|
|
- if (text == '') { //识别内容为空时的反馈
|
|
|
- this.showRecordEmptyTip()
|
|
|
- return
|
|
|
- }
|
|
|
- console.warn("***manager-识别结束***", text);
|
|
|
+ this.$emit("seedChange", item);//通知父组件-当前已经选中了户型大类
|
|
|
let param = {
|
|
|
type: 'CLK', //埋点类型
|
|
|
- clkId: 'clk_2cmina_23080407', //点击ID
|
|
|
- clkName: 'voice_clk', //点击前往的页面名称
|
|
|
+ clkId: 'clk_2cmina_23080402', //点击ID
|
|
|
+ clkName: 'seedroom_clk', //点击前往的页面名称
|
|
|
clkParams: {
|
|
|
- locusName: "语音调整",
|
|
|
- text: text
|
|
|
+ type: item.spaceName,
|
|
|
+ locusValue: item.spaceStructure,
|
|
|
+ locusName: "切换种子户型",
|
|
|
}
|
|
|
};
|
|
|
// util.trackRequest(param);
|
|
|
- text = text.replaceAll(/,|。/ig, "");
|
|
|
- this.textChange(text);
|
|
|
- this.stopRecordHandle();
|
|
|
- //翻译
|
|
|
- // this.translateText(currentData, this.dialogList.length)
|
|
|
}
|
|
|
-
|
|
|
- // 识别错误事件
|
|
|
- manager.onError = (res) => {
|
|
|
- console.warn("***manager-识别错误***", this.recording, res)
|
|
|
- if (this.recording == false) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- this.stopRecordHandle();
|
|
|
- uni.showToast({
|
|
|
- title: '请再说一次',
|
|
|
- icon: 'none',
|
|
|
- duration: 2000
|
|
|
- })
|
|
|
- }
|
|
|
- // 语音播放开始事件
|
|
|
- uni.onBackgroundAudioPlay(res => {
|
|
|
- const backgroundAudioManager = uni.getBackgroundAudioManager()
|
|
|
- let src = backgroundAudioManager.src
|
|
|
-
|
|
|
- this.currentTranslateVoice = src;
|
|
|
- })
|
|
|
- },
|
|
|
- //执行停止录音的方法
|
|
|
- stopRecordHandle() {
|
|
|
- // var currPage = getCurrentPages()[getCurrentPages().length - 1] ? getCurrentPages()[getCurrentPages().length - 1].$vm : null;
|
|
|
- this.recording = false;
|
|
|
- this.$emit("streamRecordEnd"); //通知父组件
|
|
|
- // currPage.voiceMaskChange(false);//关闭蒙层
|
|
|
- },
|
|
|
- //用户语音为空
|
|
|
- showRecordEmptyTip() {
|
|
|
- this.stopRecordHandle();
|
|
|
- uni.showToast({
|
|
|
- title: '告诉我您的想法',
|
|
|
- icon: 'none',
|
|
|
- duration: 2000
|
|
|
- })
|
|
|
- },
|
|
|
- catchTapEvent: function() {
|
|
|
- return false;
|
|
|
+ console.warn("***curHouseType-init***",this.seedLayoutList)
|
|
|
},
|
|
|
- /**
|
|
|
- * 按住按钮开始语音识别
|
|
|
- */
|
|
|
- streamRecord: function(e) {
|
|
|
- // this.getRecordAuth();//获取录音权限
|
|
|
- console.warn("streamrecord", e)
|
|
|
- let currPage = getCurrentPages()[getCurrentPages().length - 1] ? getCurrentPages()[getCurrentPages()
|
|
|
- .length - 1].$vm : null;
|
|
|
- // let buttonItem = detail.buttonItem || {}
|
|
|
- manager.start({
|
|
|
- lang: language[0].lang_content,
|
|
|
- })
|
|
|
- // this.recordStatus = 0;
|
|
|
- this.clientX = 0;
|
|
|
- this.clientY = 0;
|
|
|
- this.startX = e.changedTouches[0].clientX;
|
|
|
- this.startY = e.changedTouches[0].clientY;
|
|
|
- this.recording = true; //录音中
|
|
|
- currPage.voiceMaskChange(true); //显示蒙层
|
|
|
- this.$emit("streamRecord");
|
|
|
- },
|
|
|
- mytouchmove(e) {
|
|
|
- let startX = this.startX // 开始x坐标
|
|
|
- let startY = this.startY //开始y坐标
|
|
|
- let touchMoveX = e.changedTouches[0].clientx //滑动变化坐标
|
|
|
- let touchMoveY = e.changedTouches[0].clientY //滑动变化坐标
|
|
|
- this.clientX = touchMoveX - startX;
|
|
|
- this.clientY = touchMoveY - startY;
|
|
|
- },
|
|
|
- angle(start, end) {
|
|
|
- let _X = end.X - start.X;
|
|
|
- let _Y = end.Y - start.Y;
|
|
|
- if (_X == 0) return 90;
|
|
|
- return 360 * Math.atan((_Y / _X) / (2 * Math.PI))
|
|
|
- },
|
|
|
- /**
|
|
|
- * 松开按钮结束语音识别
|
|
|
- */
|
|
|
- streamRecordEnd: function(e) {
|
|
|
- console.warn("streamRecordEnd", this.recording, e)
|
|
|
- // let detail = e.detail || {} // 自定义组件触发事件时提供的detail对象
|
|
|
- // let buttonItem = detail.buttonItem || {}
|
|
|
-
|
|
|
- // 防止重复触发stop函数
|
|
|
- if (this.recording == false) {
|
|
|
- console.warn("has finished!")
|
|
|
- return
|
|
|
+ //打开布局
|
|
|
+ openLayout(style) {
|
|
|
+ console.warn("***openLayout***",style,this.curSpaceId)
|
|
|
+ let space = this.spaceList.find(it=>it.spaceId==this.curSpaceId);
|
|
|
+ if(space && space.spaceType==15){//X空间
|
|
|
+ this.showX = true;
|
|
|
+ }else{
|
|
|
+ this.showX = false;
|
|
|
}
|
|
|
- let startX = this.startX; // 开始x坐标
|
|
|
- let startY = this.startY; //开始y坐标
|
|
|
- let touchMoveX = e.changedTouches[0].clientX; //滑动变化坐标
|
|
|
- let touchMoveY = e.changedTouches[0].clientY; //滑动变化坐标
|
|
|
- let angle = this.angle({
|
|
|
- X: startX,
|
|
|
- Y: startY
|
|
|
- }, {
|
|
|
- X: touchMoveX,
|
|
|
- Y: touchMoveY
|
|
|
- })
|
|
|
- //滑动角度超过45retrun
|
|
|
- // console.log(Math.abs(angle), "Math.abs(angle)")
|
|
|
- if (Math.abs(angle) > 45) { //上下滑动
|
|
|
- if (startY > touchMoveY && (startY - touchMoveY) > 20) { //上滑
|
|
|
- console.warn("***touchend-上滑***", startY - touchMoveY);
|
|
|
- this.stopRecordHandle(); //停止录音了
|
|
|
- manager.stop()
|
|
|
- uni.showToast({
|
|
|
- title: '识别已取消!',
|
|
|
- icon: 'none',
|
|
|
- duration: 2000
|
|
|
- })
|
|
|
- } else {
|
|
|
- this.stopRecordHandle(); //停止录音了
|
|
|
- manager.stop()
|
|
|
- console.warn("streamRecordEnd-stop1", this.recording)
|
|
|
+ if(style==3){
|
|
|
+ if(this.showX){//X空间
|
|
|
+ this.$emit("changeStyle",style);
|
|
|
+ }else{
|
|
|
+ Toast({
|
|
|
+ message: '此空间无法更改功能',
|
|
|
+ });
|
|
|
+ return false
|
|
|
}
|
|
|
- } else {
|
|
|
- this.stopRecordHandle(); //停止录音了
|
|
|
- manager.stop();
|
|
|
- console.warn("streamRecordEnd-stop2", this.recording)
|
|
|
+ }else{
|
|
|
+ this.$emit("changeStyle",style);
|
|
|
}
|
|
|
+ // util.trackRequest(param);
|
|
|
+ },
|
|
|
+ goRoam(){
|
|
|
+ this.$parent.$refs.viewCareful.goRoam();
|
|
|
},
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
</script>
|