/** * 系统内置属性组件 */ var resourceHtml = '
'; //CSS·组件 Vue.component("css", { props: ["src"], template: resourceHtml, created: function () { var self = this; //内联样式 if (this.$slots.default) { var css = "'; //防止重复加载资源 if ($("head").html().indexOf(css) == -1) { $("head").append(css); } //延迟 setTimeout(function () { self.$parent.data.lazyLoadCss = true; }, 10); } //外联样式 if (this.src) { //防止重复加载资源 if ($("head").html().indexOf(this.src) == -1) { var styleNode = createLink(this.src); styleOnload(styleNode, function () { self.$parent.data.lazyLoadCss = true; }); } else { //延迟 setTimeout(function () { self.$parent.data.lazyLoadCss = true; }, 10); } } } }); //JavaScript脚本·组件 Vue.component("js", { props: ["src"], template: resourceHtml, created: function () { var self = this; //如果JS全部是内部代码,则延迟10毫秒 //如果JS有内部代码、也有外部JS,则以外部JS加载完成时间为准,同时延迟10毫秒,让外部JS中的组件进行加载 //如果JS全部是外部代码,则以外部JS加载完成时间为准,同时延迟10毫秒,让外部JS中的组件进行加载 //内联js if (this.$slots.default) { var script = ""; $("body").append(script); //如果有外部JS,则以外部JS加载完成时间为准 if (this.$parent.data.outerCountJs == 0) { setTimeout(function () { self.$parent.data.lazyLoad = true; }, 10); } } //外联js if (this.src) { $.getScript(this.src, function (res) { setTimeout(function () { self.$parent.data.lazyLoad = true; }, 10); }); } } }); /** * 系统内置属性组件 */ var imageHtml = `
`; //图片组件 Vue.component("nc-image", { props: { src: { type: String, default: '' }, mode: { type: String, default: 'scaleToFill' }, width: { type: String, default: '100%' }, height: { type: String, default: '100%' } }, data: function () { return { style: { 'background-image': 'url('+ this.src +')', 'background-repeat': 'no-repeat', 'width': this.width, 'height': this.height, 'background-position': 'center', 'background-size': '' }, modeList: { aspectFit: {'background-size': 'contain'}, // 缩放 scaleToFill: {'background-size': '100% 100%'}, // 拉伸 aspectFill: {'background-size': 'cover'}, // 填充 center: {'background-size': 'auto auto'} // 居中裁剪 } } }, template: imageHtml, created: function () { if (this.modeList[ this.mode ]) Object.assign(this.style, this.modeList[ this.mode ]); }, watch: { mode: function (val) { this.$set(this.style, 'background-size', this.modeList[ this.mode ]['background-size']) }, src: function (val) { this.$set(this.style, 'background-image', 'url('+ this.src +')') } } }); /** * 图片显示模式组件 */ var imageModeHtml = ` `; Vue.component("nc-image-mode", { props: { data: { type: Object, default: function () { return { imageMode: "scaleToFill" }; } }, }, template: imageModeHtml, data: function () { return { modeList:{ scaleToFill: {mode: 'scaleToFill', name: '拉伸'}, aspectFit: {mode: 'aspectFit', name: '缩放'}, aspectFill: {mode: 'aspectFill', name: '填充'}, // center: {mode: 'center', name: '中心裁剪'} } }; }, created: function () { if (!this.data.imageMode) this.$set(this.data, 'imageMode', 'scaleToFill'); }, methods: { selected: function () { var $self = this; var h = `
' layer.open({ title: "图片缩放模式设置", type: 1, area: ['450px', '190px'], fixed: false, //不固定 content: h, success: function(){ layui.use('form', function(){ layui.form.render(); }) }, btn: ['保存', '取消'], yes: function () { let mode = $('[name="image_mode"]:checked').val(); $self.data.imageMode = mode; layer.closeAll(); } }) } } }); //[对齐方式]属性组件 var textAlignHtml = '
'; textAlignHtml += ''; textAlignHtml += '
'; textAlignHtml += ''; textAlignHtml += '
'; textAlignHtml += '
'; Vue.component("text-align", { props: { data: { type: Object, default: function () { return { field: "textAlign", label: "对齐方式" }; } } }, created: function () { if (this.data.label === undefined) this.data.label = "对齐方式"; if (this.data.field === undefined) this.data.field = "textAlign"; }, template: textAlignHtml, data: function () { return { list: [ {label: "居左", value: "left"}, {label: "居中", value: "center"}, {label: "居右", value: "right"} ], parent: this.$parent.data, }; } }); //[滑块]属性组件 var sliderHtml = '
'; sliderHtml += ''; sliderHtml += '
'; sliderHtml += '
'; // sliderHtml += '{{parent[compData.field]}}'; sliderHtml += '
'; sliderHtml += '
'; Vue.component("slide", { template: sliderHtml, props: { data: { type: Object, default: function () { return { field: "height", label: "空白高度", min: 0, max: 100, callback: null }; } } }, data: function () { return { id: "slide_" + ns.gen_non_duplicate(10), parent: this.$parent.data, compData:null }; }, created: function () { this.compData = this.data;// vue组件中不能直接改变props,定义内部变量处理 if (this.compData.label === undefined) this.compData.label = "空白高度"; if (this.compData.field === undefined) this.compData.field = "height"; if (this.compData.min === undefined) this.compData.min = 0; if (this.compData.max === undefined) this.compData.max = 100; if (this.compData.parent === 'global') this.parent = this.$parent.global; else if (this.compData.parent === 'template') this.parent = this.$parent.global.template; else if (this.compData.parent !== undefined) this.parent = this.$parent.data[this.compData.parent]; var fieldArr = this.compData.field.split('.'); this.compData.field = fieldArr[fieldArr.length - 1]; for (var i = 0; i < fieldArr.length - 1; i++) { this.parent = this.parent[fieldArr[i]]; } var _self = this; setTimeout(function () { layui.use('slider', function () { var slider = layui.slider; slider.render({ elem: '#' + _self.id, min: _self.compData.min, max: _self.compData.max, tips: false, input: true, value: _self.parent[_self.compData.field], change: function (value) { _self.parent[_self.compData.field] = value; // 如果修改页面属性,那么组件属性也要变化 if (_self.compData.parent === 'template') { for (var i = 0; i < vue.data.length; i++) { if (fieldArr.length > 1) { for (var j = 0; j < fieldArr.length - 1; j++) { vue.data[i][fieldArr[j]][_self.compData.field] = value; } } else { vue.data[i][_self.compData.field] = value; } } } if (_self.compData.callback) _self.compData.callback.call(this); } }); }); }, 10); } }); //[链接地址]属性组件 var linkHtml = ''; /** * 链接组件: * 参数说明:data:链接对象,callback:回调 */ Vue.component("nc-link", { props: { data: { type: Object, default: function () { return { field: null,// 链接对象 label: "链接地址",// 文本 }; } }, callback: null, }, template: linkHtml, data: function () { return { myData: [this.data], // 此处用数组的目的是触发变异方法,进行视图更新 }; }, created: function () { if (this.data.label == undefined) this.data.label = "链接地址"; }, methods: { //设置链接地址 set: function (link) { //由于Vue2.0是单向绑定的:子组件无法修改父组件,但是可以修改单个属性,循环遍历属性赋值 if (this.myData[0].field) { for (var k in this.myData[0].field) delete this.myData[0].field[k]; for (var k in link) this.myData[0].field[k] = link[k]; } //触发变异方法,进行视图更新 this.myData.push({}); this.myData.pop(); }, selected: function () { var $self = this; ns.select_link($self.myData[0].field, function (data) { $self.set(data); if ($self.callback) $self.callback.call(this, data); }); } } }); //[颜色]属性组件 var colorHtml = '
'; colorHtml += '
'; colorHtml += ''; colorHtml += ''; colorHtml += '
'; colorHtml += '{{ parent[item] ? parent[item].toUpperCase() : "透明" }}'; colorHtml += '
'; colorHtml += ''; colorHtml += '
'; colorHtml += '
'; colorHtml += '
'; colorHtml += '重置'; colorHtml += '
'; colorHtml += '
'; /** * 颜色组件: * 参数说明: * data:{ field : 字段名, value : 值(默认:#303133), 'label' : 文本标签(默认:文字颜色) } */ Vue.component("color", { props: { data: { type: Object, default: function () { return { field: "textColor", label: "文字颜色", defaultColor: "", value: "", callback: null }; } }, }, template: colorHtml, data: function () { return { compData: this.data, field: [], // 支持多个颜色 defaultColor: [], // 支持多个颜色值 ids: [], parent: this.$parent.data ? ((Object.keys(this.$parent.data).length) ? this.$parent.data : this.$parent.global) : this.$parent.global, }; }, created: function () { this.bindColor(); }, methods: { init: function () { this.compData = this.data; if (this.compData.field === undefined) this.compData.field = "textColor"; if (this.compData.label === undefined) this.compData.label = "文字颜色"; if (this.compData.value === undefined) this.compData.value = "#303133"; if (this.compData.defaultColor === undefined) this.compData.defaultColor = ""; // 检查是否有多个颜色 if (this.compData.field.indexOf(',') !== -1) this.field = this.compData.field.split(','); else this.field = [this.compData.field]; // 检查是否有多个颜色 if (this.compData.defaultColor.indexOf(',') !== -1) this.defaultColor = this.compData.defaultColor.split(','); else this.defaultColor = [this.compData.defaultColor]; // 找寻父级 if (this.compData.parent === 'global') this.parent = this.$parent.global; else if (this.compData.parent === 'template') this.parent = this.$parent.global.template; else if (this.compData.parent !== undefined) { if (typeof this.compData.parent == 'string') this.parent = this.$parent.data[this.compData.parent]; if (typeof this.compData.parent == 'object') this.parent = this.compData.parent; } //如果当前字段没有值数据,则给予默认值,反之用该字段的值,用于优化调用该组件 for (var i = 0; i < this.field.length; i++) { if (this.parent[this.field[i]] === undefined) this.$set(this.parent, this.field[i], this.compData.value); else this.compData.value = this.parent[this.field[i]]; this.parent[this.field[i]] = this.compData.value; } }, reset: function () { try { for (var i = 0; i < this.field.length; i++) { this.parent[this.field[i]] = this.defaultColor[i]; } } catch (e) { console.log("color reset() ERROR:", e); } }, bindColor() { this.init(); for (var i = 0; i < this.field.length; i++) { var name = "colorSelector_" + this.field[i] + '_' + (this.compData.id || ns.gen_non_duplicate(5)); this.ids.push(name); var $self = this; setColorPicker(this.parent[this.field[i]], name, function (hex, elem) { try { // data数据可能不全,所以要用compData,通过对象的引用关系绑定数据 // 这里要更新$self,不然如果删除了,就会出问题 var field = elem.attr('id').split('_')[1]; if (hex) { $self.parent[field] = hex; } else { $self.parent[field] = ""; } } catch (e) { console.log("color ERROR:" + e.message); } }); } } } }); /** * 生成颜色选择器 * @param defaultColor * @param name * @param callBack */ function setColorPicker(defaultColor, name, callBack) { setTimeout(function () { Colorpicker.create({ el: name, color: defaultColor, change: function (elem, hex) { $(elem).find("div").css('background', hex); if (callBack) callBack(hex,$(elem)); } }); if (defaultColor) $("#" + name).find("div").css('background', defaultColor); }, 500); } //[文字大小]属性组件 var fontSizeHtml = '
'; fontSizeHtml += ''; fontSizeHtml += '
'; fontSizeHtml += '
'; fontSizeHtml += '
'; fontSizeHtml += ''; fontSizeHtml += ''; fontSizeHtml += '
'; fontSizeHtml += '
'; fontSizeHtml += '
{{item.text}}
'; fontSizeHtml += '
'; fontSizeHtml += '
'; fontSizeHtml += '
'; fontSizeHtml += '
'; /** * 文字大小 * 参数说明: * data:{ field : 字段名, value : 值(默认:14), 'label' : 文本标签(默认:文字大小) } */ Vue.component("font-size", { template: fontSizeHtml, props: { data: { type: Object, default: function () { return { field: "fontSize", label: "文字大小", value: 14 }; } }, }, data: function () { return { d: this.data, isShowFontSize: false, selectIndex: 2, //当前选中的下标 list: [], parent: (Object.keys(this.$parent.data).length) ? this.$parent.data : this.$parent.global, }; }, created: function () { if (this.data.field == undefined) this.data.field = "fontSize"; if (this.data.label == undefined) this.data.label = "文字大小"; if (this.data.value == undefined) this.data.value = 14; if (this.parent[this.data.field] == undefined) this.$set(this.parent, this.data.field, this.data.value); this.parent[this.data.field] = this.data.value; for (var i = 12; i <= 30; i++) this.list.push({value: i, text: i + "px"}); for (var i = 0; i < this.list.length; i++) { if (this.list[i].value == this.data.value) { this.selectIndex = i; break; } } }, }); //[图片上传]组件 var imageHtml = '
'; imageHtml += '
'; imageHtml += ''; imageHtml += ''; imageHtml += '
'; imageHtml += '
'; /** * 图片上传 * 参数说明: * data:{ field : 字段名, value : 值(默认:14), 'label' : 文本标签(默认:文字大小) ,isShow: 控制右上角显隐,注意使用场景(一张图片且需要删除时使用,参考拼团、限时折扣等背景)} */ Vue.component("img-upload", { template: imageHtml, props: { data: { type: Object, default: function () { return { data: {}, field: "imageUrl", callback: null }; } }, condition: { type: Boolean, default: true } }, data: function () { return { myData: this.data, upload: null, id: ns.gen_non_duplicate(10), // parent: (Object.keys(this.$parent.data).length) ? this.$parent.data : this.data, }; }, created: function () { if (this.myData.field === undefined) this.myData.field = "imageUrl"; this.id = ns.gen_non_duplicate(10); }, methods: { del: function () { this.myData.data[this.myData.field] = ""; }, //转换图片路径 changeImgUrl: function (url) { if (url == null || url === "") return ''; if (url.indexOf("static/img/") > -1) return ns.img(ns_url.staticImg + "/" + url.replace("public/static/img/", "")); else return ns.img(url); }, uploadImg: function () { var self = this; openAlbum(function (obj) { for (var i = 0; i < obj.length; i++) { self.myData.data[self.myData.field] = obj[i].pic_path; self.myData.data.imgWidth = obj[i].pic_spec.split("*")[0]; self.myData.data.imgHeight = obj[i].pic_spec.split("*")[1]; if (self.myData.callback) self.myData.callback.call(this); loadImgMagnify(); } }, 1); }, previewImg(id){ $('#'+id).find('div>img').click(); }, } }); //[视频上传]组件 var videoHtml = '
'; videoHtml += '
'; videoHtml += ''; videoHtml += ''; videoHtml += '
'; videoHtml += '
'; /** * 视频上传 * 参数说明: * data:{ field : 字段名, value : 值(默认:14), 'label' : 文本标签(默认:文字大小) } */ Vue.component("video-upload", { template: videoHtml, props: { data: { type: Object, default: function () { return { data: {}, field: "videoUrl", callback: null }; } } }, data: function () { return { myData: this.data, }; }, created: function () { if (this.myData.field === undefined) this.myData.field = "videoUrl"; }, methods: { //转换图片路径 changeImgUrl: function (url) { if (url == null || url === "") return ''; else return ns.img(url); }, uploadImg: function () { var self = this; openAlbum(function (obj) { self.myData.data[self.myData.field] = obj[0].pic_path; if (self.myData.callback) self.myData.callback.call(this); }, 1,0,'video'); } } }); var imgIconHtml = `
`; /** * 图片或图标选择 * 参数说明: * data:{ field : 字段名, value : 值(默认:14), 'label' : 文本标签(默认:文字大小) ,isShow: 控制右上角显隐,注意使用场景(一张图片且需要删除时使用,参考拼团、限时折扣等背景)} */ Vue.component("img-icon-upload", { template: imgIconHtml, props: { data: { type: Object, default: function () { return { data: {}, field: "imageUrl", iconField: "icon", displayType : 'img,icon', callback: null }; } } }, data: function () { return { myData: this.data, upload: null, id: ns.gen_non_duplicate(10), }; }, created: function () { if (this.myData.field === undefined) this.myData.field = "imageUrl"; if (this.myData.iconField === undefined) this.myData.iconField = "icon"; this.id = ns.gen_non_duplicate(10); }, methods: { del: function () { if (this.myData.data.iconType && this.myData.data.iconType == 'icon') this.myData.data[this.myData.iconField] = ''; else this.myData.data[this.myData.field] = ""; this.$forceUpdate(); }, //转换图片路径 changeImgUrl: function (url) { if (url == null || url === "") return ''; if (url.indexOf("static/img/") > -1) return ns.img(ns_url.staticImg + "/" + url.replace("public/static/img/", "")); else return ns.img(url); }, uploadImg: function () { var self = this; if(self.data.displayType === undefined) self.data.displayType ='img,icon'; openAlbum(function (obj) { if (typeof obj == 'object') { self.myData.data[self.myData.field] = obj[0].pic_path; self.myData.data.imgWidth = obj[0].pic_spec.split("*")[0]; self.myData.data.imgHeight = obj[0].pic_spec.split("*")[1]; self.myData.data.iconType = 'img'; loadImgMagnify(); } else { self.myData.data[self.myData.iconField] = obj; self.myData.data.iconType = 'icon'; if (!self.myData.data.style) { self.$set(self.myData.data, 'style', { fontSize: 60, iconBgColor: ["#7b00ff"], iconBgColorDeg: 180, iconBgImg: 'public/static/ext/diyview/img/icon_bg/bg_05.png', bgRadius: 38, iconColor: ['#fff'], iconColorDeg: 0, }) } } self.$forceUpdate(); }, 1, 0, 'img', self.data.displayType); }, previewImg(){ $('#'+this.id).find('img').click(); } } }); var commonSetHtml = '
'; commonSetHtml += '
'; commonSetHtml += '

组件样式

'; commonSetHtml += ''; commonSetHtml += ''; commonSetHtml += ''; commonSetHtml += '
'; commonSetHtml += '
'; /** * 公共属性设置 */ Vue.component("common-set", { template: commonSetHtml, props: { // 忽略属性【textColor(文本颜色)、backgroundColor(背景色)、marginTop(上边距)、marginBottom(下边距)、marginBoth(左右边距)、componentAngle(圆角展示)】 ignore: { type: Array, default: function () { return []; } }, callback: { type: Function, default: function () { } } }, data: function () { return { data: this.$parent.data, angleList: [ { text: "直角", value: "right", src: 'icongl-square' }, { text: "圆角", value: "round", src: 'iconyuanjiao' } ], } }, created: function () { }, methods: { triggerCallback(){ if(this.callback) this.callback(this); } }, }); var popWindowHtml = '
'; popWindowHtml += '
'; popWindowHtml += '
'; popWindowHtml += '
'; popWindowHtml += '

弹窗广告

'; popWindowHtml += '
'; popWindowHtml += ''; popWindowHtml += '
'; popWindowHtml += '关闭'; popWindowHtml += '开启'; popWindowHtml += '
'; popWindowHtml += '
'; popWindowHtml += '
'; popWindowHtml += '
'; popWindowHtml += ''; popWindowHtml += '
'; popWindowHtml += ''; popWindowHtml += '
'; popWindowHtml += ''; popWindowHtml += '
'; popWindowHtml += '
建议上传图片大小:290px * 410px
'; popWindowHtml += '
'; popWindowHtml += ''; popWindowHtml += '
'; popWindowHtml += '
'; popWindowHtml += '
'; popWindowHtml += '
'; /** * 弹出广告组件 */ Vue.component("pop-window", { template: popWindowHtml, props: ['currentIndex', 'global','globalLazyLoad'], data: function () { return {} }, created: function () { // console.log('popWindow', this.currentIndex, this.global); }, methods: {} }); var pageSetHtml = '
'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '页面设置'; pageSetHtml += '
'; pageSetHtml += '内容'; pageSetHtml += '样式'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '

页面内容

'; pageSetHtml += '
'; pageSetHtml += ''; pageSetHtml += '
'; pageSetHtml += ''; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += ''; pageSetHtml += '
'; pageSetHtml += '
风格{{global.navStyle}}
'; pageSetHtml += '
选择
'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += ''; pageSetHtml += '
'; pageSetHtml += ''; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '
宽度自适应(最大150px),高度28px
'; pageSetHtml += '
宽度自适应(85px),高度30px
'; pageSetHtml += ''; pageSetHtml += '
'; pageSetHtml += ''; pageSetHtml += '
'; pageSetHtml += ''; pageSetHtml += '
    '; pageSetHtml += '
  • '; pageSetHtml += ''; pageSetHtml += '
  • '; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += ''; pageSetHtml += '
'; pageSetHtml += '显示'; pageSetHtml += '隐藏'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '
此处控制当前页面导航栏是否显示
'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '

底部导航

'; pageSetHtml += '
'; pageSetHtml += ''; pageSetHtml += '
'; pageSetHtml += '显示'; pageSetHtml += '隐藏'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '
此处控制当前页面底部导航菜单是否显示
'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += ''; // pageSetHtml += '
'; // pageSetHtml += '

小程序收藏

'; // pageSetHtml += '
'; // // pageSetHtml += '
'; // pageSetHtml += '
'; // pageSetHtml += ''; // pageSetHtml += '
'; // pageSetHtml += '显示'; // pageSetHtml += '隐藏'; // pageSetHtml += '
'; // pageSetHtml += '
'; // pageSetHtml += '
'; // pageSetHtml += '
首次进入小程序是否显示添加小程序提示
'; // pageSetHtml += '
'; // pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '
'; pageSetHtml += '
'; /** * 页面设置组件 */ Vue.component("page-set", { template: pageSetHtml, props: ['currentIndex', 'global','globalLazyLoad'], data: function () { return { data: this.$parent.data, appModule: ns.appModule, templateType: $("#template_type").val(), textImgPositionList: [ { text: "居左", value: "left", src: "iconzuoduiqi" }, { text: "居中", value: "center", src: "iconjuzhongduiqi" } ], angleList: [ { text: "直角", value: "right", src: 'icongl-square' }, { text: "圆角", value: "round", src: 'iconyuanjiao' } ], } }, created: function () { }, methods: { //选择页面顶部风格,默认文字、图片+文字、图片+搜索框、定位门店 selectPageStyle: function () { var html = ''; layer.open({ type: 1, title: '风格选择', area: ['800px', '380px'], btn: ['确定', '返回'], content: html, success: function (layero, index) { $('.nav-style .text-title').click(function () { $(this).addClass('border-color').siblings().removeClass('border-color'); }); }, yes: function (index, layero) { changeStyle($('.nav-style .text-title.border-color').attr('data-style')); layer.closeAll(); } }); } } }); //导航样式切换 function changeStyle(val) { $('.text-title:nth-child(' + (val) + ')').addClass('border-color').siblings().removeClass('border-color'); vue.global.navStyle = val; // if (val == 4) vue.global.topNavColor = '#FF6A00'; // vue.$forceUpdate() } var tabbarHtml = '
'; tabbarHtml += '
'; tabbarHtml += '{{global.title}}'; tabbarHtml += '
'; tabbarHtml += '
'; tabbarHtml += ''; tabbarHtml += '{{global.title}}'; tabbarHtml += '
'; tabbarHtml += '
'; tabbarHtml += ''; tabbarHtml += '
'; tabbarHtml += '
'; tabbarHtml += ''; tabbarHtml += '门店名称'; tabbarHtml += ''; tabbarHtml += '
附近门店
'; tabbarHtml += '
'; tabbarHtml += '
'; /** * 顶部tabbar组件 */ Vue.component("tabbar", { template: tabbarHtml, props: ['global'], data: function () { return {} }, created: function () {}, methods: { //转换图片路径 changeImgUrl: function (url) { if (url == null || url === "") return ''; if (url.indexOf("static/img/") > -1) return ns.img(ns_url.staticImg + "/" + url.replace("public/static/img/", "")); else return ns.img(url); }, } }); //[Icon组件]属性组件 var iconHtml = '
'; iconHtml += ''; iconHtml += '
'; iconHtml += ''; iconHtml += '
'; iconHtml += '
'; /** * 选择Icon组件: * 参数说明:data:链接对象,callback:回调 */ Vue.component("nc-icon", { props: { data: { type: Object, default: function () { return { field: null,// icon对象 label: "图标",// 文本 color: "" // 图标颜色 }; } } }, template: iconHtml, data: function () { return { parent: (Object.keys(this.$parent.data).length) ? this.$parent.data : this.$parent.global }; }, created: function () { // 找寻父级 if (typeof this.data.parent == "string") this.parent = this.$parent.data[this.data.parent]; if (typeof this.data.parent == "object") this.parent = this.data.parent; }, methods: { selected: function () { iconSelect((data)=>{ this.parent[this.data.field] = data; },{icon: this.parent[this.data.field]}) } } });