parent
d2e07d8a6c
commit
63ad31bb3c
25 changed files with 90 additions and 1655 deletions
@ -1,130 +0,0 @@ |
||||
<template> |
||||
<view |
||||
class="u-mask" |
||||
hover-stop-propagation |
||||
:style="[maskStyle, zoomStyle]" |
||||
@tap="click" |
||||
@touchmove.stop.prevent="() => {}" |
||||
:class="{ |
||||
'u-mask-zoom': zoom, |
||||
'u-mask-show': show, |
||||
}" |
||||
> |
||||
<slot /> |
||||
</view> |
||||
</template> |
||||
|
||||
<script> |
||||
/** |
||||
* mask 遮罩 |
||||
* @description 创建一个遮罩层,用于强调特定的页面元素,并阻止用户对遮罩下层的内容进行操作,一般用于弹窗场景 |
||||
* @tutorial https://www.uviewui.com/components/mask.html |
||||
* @property {Boolean} show 是否显示遮罩(默认false) |
||||
* @property {String Number} z-index z-index 层级(默认1070) |
||||
* @property {Object} custom-style 自定义样式对象,见上方说明 |
||||
* @property {String Number} duration 动画时长,单位毫秒(默认300) |
||||
* @property {Boolean} zoom 是否使用scale对这招进行缩放(默认true) |
||||
* @property {Boolean} mask-click-able 遮罩是否可点击,为false时点击不会发送click事件(默认true) |
||||
* @event {Function} click mask-click-able为true时,点击遮罩发送此事件 |
||||
* @example <u-mask :show="show" @click="show = false"></u-mask> |
||||
*/ |
||||
export default { |
||||
name: "u-mask", |
||||
props: { |
||||
// 是否显示遮罩 |
||||
show: { |
||||
type: Boolean, |
||||
default: false, |
||||
}, |
||||
// 层级z-index |
||||
zIndex: { |
||||
type: [Number, String], |
||||
default: "", |
||||
}, |
||||
// 用户自定义样式 |
||||
customStyle: { |
||||
type: Object, |
||||
default() { |
||||
return {}; |
||||
}, |
||||
}, |
||||
// 遮罩的动画样式, 是否使用使用zoom进行scale进行缩放 |
||||
zoom: { |
||||
type: Boolean, |
||||
default: true, |
||||
}, |
||||
// 遮罩的过渡时间,单位为ms |
||||
duration: { |
||||
type: [Number, String], |
||||
default: 300, |
||||
}, |
||||
// 是否可以通过点击遮罩进行关闭 |
||||
maskClickAble: { |
||||
type: Boolean, |
||||
default: true, |
||||
}, |
||||
}, |
||||
data() { |
||||
return { |
||||
zoomStyle: { |
||||
transform: "", |
||||
}, |
||||
scale: "scale(1.2, 1.2)", |
||||
}; |
||||
}, |
||||
watch: { |
||||
show(n) { |
||||
if (n && this.zoom) { |
||||
// 当展示遮罩的时候,设置scale为1,达到缩小(原来为1.2)的效果 |
||||
this.zoomStyle.transform = "scale(1, 1)"; |
||||
} else if (!n && this.zoom) { |
||||
// 当隐藏遮罩的时候,设置scale为1.2,达到放大(因为显示遮罩时已重置为1)的效果 |
||||
this.zoomStyle.transform = this.scale; |
||||
} |
||||
}, |
||||
}, |
||||
computed: { |
||||
maskStyle() { |
||||
let style = {}; |
||||
style.backgroundColor = "rgba(0, 0, 0, 0.6)"; |
||||
if (this.show) |
||||
style.zIndex = this.zIndex ? this.zIndex : this.$u.zIndex.mask; |
||||
else style.zIndex = -1; |
||||
style.transition = `all ${this.duration / 1000}s ease-in-out`; |
||||
// 判断用户传递的对象是否为空,不为空就进行合并 |
||||
if (Object.keys(this.customStyle).length) |
||||
style = { |
||||
...style, |
||||
...this.customStyle, |
||||
}; |
||||
return style; |
||||
}, |
||||
}, |
||||
methods: { |
||||
click() { |
||||
if (!this.maskClickAble) return; |
||||
this.$emit("click"); |
||||
}, |
||||
}, |
||||
}; |
||||
</script> |
||||
|
||||
<style lang="scss" scoped> |
||||
.u-mask { |
||||
position: fixed; |
||||
top: 0; |
||||
left: 0; |
||||
right: 0; |
||||
bottom: 0; |
||||
opacity: 0; |
||||
transition: transform 0.3s; |
||||
} |
||||
|
||||
.u-mask-show { |
||||
opacity: 1; |
||||
} |
||||
|
||||
.u-mask-zoom { |
||||
transform: scale(1.2, 1.2); |
||||
} |
||||
</style> |
@ -1,510 +0,0 @@ |
||||
<template> |
||||
<view |
||||
v-if="visibleSync" |
||||
:style="[ |
||||
customStyle, |
||||
{ |
||||
zIndex: uZindex - 1, |
||||
}, |
||||
]" |
||||
class="u-drawer" |
||||
hover-stop-propagation |
||||
> |
||||
<z-mask |
||||
:duration="duration" |
||||
:custom-style="maskCustomStyle" |
||||
:maskClickAble="maskCloseAble" |
||||
:z-index="uZindex - 2" |
||||
:show="showDrawer && mask" |
||||
@click="maskClick" |
||||
></z-mask> |
||||
<view |
||||
class="u-drawer-content" |
||||
@tap="modeCenterClose(mode)" |
||||
:class="[ |
||||
safeAreaInsetBottom ? 'safe-area-inset-bottom' : '', |
||||
'u-drawer-' + mode, |
||||
showDrawer ? 'u-drawer-content-visible' : '', |
||||
zoom && mode == 'center' ? 'u-animation-zoom' : '', |
||||
]" |
||||
@transitionend="transitionend" |
||||
@touchmove.stop.prevent |
||||
@tap.stop.prevent |
||||
:style="[style]" |
||||
> |
||||
<view |
||||
class="u-mode-center-box" |
||||
@tap.stop.prevent |
||||
@touchmove.stop.prevent |
||||
v-if="mode == 'center'" |
||||
:style="[centerStyle]" |
||||
> |
||||
<u-icon |
||||
@click="close" |
||||
v-if="closeable" |
||||
class="u-close" |
||||
:class="['u-close--' + closeIconPos]" |
||||
:name="closeIcon" |
||||
:color="closeIconColor" |
||||
:size="closeIconSize" |
||||
></u-icon> |
||||
<scroll-view class="u-drawer__scroll-view" scroll-y="true"> |
||||
<slot /> |
||||
</scroll-view> |
||||
<slot name="fixedContent" /> |
||||
</view> |
||||
<scroll-view class="u-drawer__scroll-view" scroll-y="true" v-else> |
||||
<slot /> |
||||
</scroll-view> |
||||
<view @tap="close" class="u-close" :class="['u-close--' + closeIconPos]"> |
||||
<u-icon |
||||
v-if="mode != 'center' && closeable" |
||||
:name="closeIcon" |
||||
:color="closeIconColor" |
||||
:size="closeIconSize" |
||||
></u-icon> |
||||
</view> |
||||
</view> |
||||
</view> |
||||
</template> |
||||
|
||||
<script> |
||||
/** |
||||
* popup 弹窗 |
||||
* @description 弹出层容器,用于展示弹窗、信息提示等内容,支持上、下、左、右和中部弹出。组件只提供容器,内部内容由用户自定义 |
||||
* @tutorial https://www.uviewui.com/components/popup.html |
||||
* @property {String} mode 弹出方向(默认left) |
||||
* @property {Boolean} mask 是否显示遮罩(默认true) |
||||
* @property {Stringr | Number} length mode=left | 见官网说明(默认auto) |
||||
* @property {Boolean} zoom 是否开启缩放动画,只在mode为center时有效(默认true) |
||||
* @property {Boolean} safe-area-inset-bottom 是否开启底部安全区适配(默认false) |
||||
* @property {Boolean} mask-close-able 点击遮罩是否可以关闭弹出层(默认true) |
||||
* @property {Object} custom-style 用户自定义样式 |
||||
* @property {Stringr | Number} negative-top 中部弹出时,往上偏移的值 |
||||
* @property {Numberr | String} border-radius 弹窗圆角值(默认0) |
||||
* @property {Numberr | String} z-index 弹出内容的z-index值(默认1075) |
||||
* @property {Boolean} closeable 是否显示关闭图标(默认false) |
||||
* @property {String} close-icon 关闭图标的名称,只能uView的内置图标 |
||||
* @property {String} close-icon-pos 自定义关闭图标位置(默认top-right) |
||||
* @property {String} close-icon-color 关闭图标的颜色(默认#909399) |
||||
* @property {Number | String} close-icon-size 关闭图标的大小,单位rpx(默认30) |
||||
* @event {Function} open 弹出层打开 |
||||
* @event {Function} close 弹出层收起 |
||||
* @example <u-popup v-model="show"><view>出淤泥而不染,濯清涟而不妖</view></u-popup> |
||||
*/ |
||||
import ZMask from "./mask.vue"; |
||||
export default { |
||||
name: "popup", |
||||
components: { |
||||
ZMask, |
||||
}, |
||||
props: { |
||||
/** |
||||
* 显示状态 |
||||
*/ |
||||
show: { |
||||
type: Boolean, |
||||
default: false, |
||||
}, |
||||
/** |
||||
* 弹出方向,left|right|top|bottom|center |
||||
*/ |
||||
mode: { |
||||
type: String, |
||||
default: "left", |
||||
}, |
||||
/** |
||||
* 是否显示遮罩 |
||||
*/ |
||||
mask: { |
||||
type: Boolean, |
||||
default: true, |
||||
}, |
||||
// 抽屉的宽度(mode=left|right),或者高度(mode=top|bottom),单位rpx,或者"auto" |
||||
// 或者百分比"50%",表示由内容撑开高度或者宽度 |
||||
length: { |
||||
type: [Number, String], |
||||
default: "auto", |
||||
}, |
||||
// 是否开启缩放动画,只在mode=center时有效 |
||||
zoom: { |
||||
type: Boolean, |
||||
default: true, |
||||
}, |
||||
// 是否开启底部安全区适配,开启的话,会在iPhoneX机型底部添加一定的内边距 |
||||
safeAreaInsetBottom: { |
||||
type: Boolean, |
||||
default: false, |
||||
}, |
||||
// 是否可以通过点击遮罩进行关闭 |
||||
maskCloseAble: { |
||||
type: Boolean, |
||||
default: true, |
||||
}, |
||||
// 用户自定义样式 |
||||
customStyle: { |
||||
type: Object, |
||||
default() { |
||||
return {}; |
||||
}, |
||||
}, |
||||
value: { |
||||
type: Boolean, |
||||
default: false, |
||||
}, |
||||
// 此为内部参数,不在文档对外使用,为了解决Picker和keyboard等融合了弹窗的组件 |
||||
// 对v-model双向绑定多层调用造成报错不能修改props值的问题 |
||||
popup: { |
||||
type: Boolean, |
||||
default: true, |
||||
}, |
||||
// 显示显示弹窗的圆角,单位rpx |
||||
borderRadius: { |
||||
type: [Number, String], |
||||
default: 0, |
||||
}, |
||||
zIndex: { |
||||
type: [Number, String], |
||||
default: "10075", |
||||
}, |
||||
// 是否显示关闭图标 |
||||
closeable: { |
||||
type: Boolean, |
||||
default: false, |
||||
}, |
||||
// 关闭图标的名称,只能uView的内置图标 |
||||
closeIcon: { |
||||
type: String, |
||||
default: "close", |
||||
}, |
||||
// 自定义关闭图标位置,top-left为左上角,top-right为右上角,bottom-left为左下角,bottom-right为右下角 |
||||
closeIconPos: { |
||||
type: String, |
||||
default: "top-right", |
||||
}, |
||||
// 关闭图标的颜色 |
||||
closeIconColor: { |
||||
type: String, |
||||
default: "#909399", |
||||
}, |
||||
// 关闭图标的大小,单位rpx |
||||
closeIconSize: { |
||||
type: [String, Number], |
||||
default: "30", |
||||
}, |
||||
// 宽度,只对左,右,中部弹出时起作用,单位rpx,或者"auto" |
||||
// 或者百分比"50%",表示由内容撑开高度或者宽度,优先级高于length参数 |
||||
width: { |
||||
type: String, |
||||
default: "", |
||||
}, |
||||
// 高度,只对上,下,中部弹出时起作用,单位rpx,或者"auto" |
||||
// 或者百分比"50%",表示由内容撑开高度或者宽度,优先级高于length参数 |
||||
height: { |
||||
type: String, |
||||
default: "", |
||||
}, |
||||
// 给一个负的margin-top,往上偏移,避免和键盘重合的情况,仅在mode=center时有效 |
||||
negativeTop: { |
||||
type: [String, Number], |
||||
default: 0, |
||||
}, |
||||
// 遮罩的样式,一般用于修改遮罩的透明度 |
||||
maskCustomStyle: { |
||||
type: Object, |
||||
default() { |
||||
return {}; |
||||
}, |
||||
}, |
||||
// 遮罩打开或收起的动画过渡时间,单位ms |
||||
duration: { |
||||
type: [String, Number], |
||||
default: 250, |
||||
}, |
||||
// 中间弹窗的背景颜色值 |
||||
centerPupBg: { |
||||
type: String, |
||||
default: "#fff", |
||||
}, |
||||
bgColor: { |
||||
type: String, |
||||
default: "#fff", |
||||
}, |
||||
}, |
||||
|
||||
data() { |
||||
return { |
||||
visibleSync: false, |
||||
showDrawer: false, |
||||
timer: null, |
||||
closeFromInner: false, // value的值改变,是发生在内部还是外部 |
||||
}; |
||||
}, |
||||
computed: { |
||||
// 根据mode的位置,设定其弹窗的宽度(mode = left|right),或者高度(mode = top|bottom) |
||||
style() { |
||||
let style = {}; |
||||
// 如果是左边或者上边弹出时,需要给translate设置为负值,用于隐藏 |
||||
if (this.mode == "left" || this.mode == "right") { |
||||
style = { |
||||
width: this.width |
||||
? this.getUnitValue(this.width) |
||||
: this.getUnitValue(this.length), |
||||
height: "100%", |
||||
transform: `translate3D(${ |
||||
this.mode == "left" ? "-100%" : "100%" |
||||
},0px,0px)`, |
||||
background: this.bgColor, |
||||
}; |
||||
} else if (this.mode == "top" || this.mode == "bottom") { |
||||
style = { |
||||
width: "100%", |
||||
height: this.height |
||||
? this.getUnitValue(this.height) |
||||
: this.getUnitValue(this.length), |
||||
transform: `translate3D(0px,${ |
||||
this.mode == "top" ? "-100%" : "100%" |
||||
},0px)`, |
||||
background: this.bgColor, |
||||
}; |
||||
} |
||||
style.zIndex = this.uZindex; |
||||
// 如果用户设置了borderRadius值,添加弹窗的圆角 |
||||
if (this.borderRadius) { |
||||
switch (this.mode) { |
||||
case "left": |
||||
style.borderRadius = `0 ${this.borderRadius}rpx ${this.borderRadius}rpx 0`; |
||||
break; |
||||
case "top": |
||||
style.borderRadius = `0 0 ${this.borderRadius}rpx ${this.borderRadius}rpx`; |
||||
break; |
||||
case "right": |
||||
style.borderRadius = `${this.borderRadius}rpx 0 0 ${this.borderRadius}rpx`; |
||||
break; |
||||
case "bottom": |
||||
style.borderRadius = `${this.borderRadius}rpx ${this.borderRadius}rpx 0 0`; |
||||
break; |
||||
default: |
||||
} |
||||
// 不加可能圆角无效 |
||||
style.overflow = "hidden"; |
||||
} |
||||
if (this.duration) |
||||
style.transition = `all ${this.duration / 1000}s linear`; |
||||
return style; |
||||
}, |
||||
// 中部弹窗的特有样式 |
||||
centerStyle() { |
||||
let style = {}; |
||||
style.width = this.width |
||||
? this.getUnitValue(this.width) |
||||
: this.getUnitValue(this.length); |
||||
// 中部弹出的模式,如果没有设置高度,就用auto值,由内容撑开高度 |
||||
style.height = this.height ? this.getUnitValue(this.height) : "auto"; |
||||
style.zIndex = this.uZindex; |
||||
// style.marginTop = `-${this.$u.addUnit(this.negativeTop)}`; |
||||
style.background = this.centerPupBg; |
||||
if (this.borderRadius) { |
||||
style.borderRadius = `${this.borderRadius}rpx`; |
||||
// 不加可能圆角无效 |
||||
style.overflow = "hidden"; |
||||
} |
||||
return style; |
||||
}, |
||||
// 计算整理后的z-index值 |
||||
uZindex() { |
||||
return this.zIndex ? this.zIndex : this.$u.zIndex.popup; |
||||
}, |
||||
}, |
||||
watch: { |
||||
value(val) { |
||||
if (val) { |
||||
this.open(); |
||||
} else if (!this.closeFromInner) { |
||||
this.close(); |
||||
} |
||||
this.closeFromInner = false; |
||||
}, |
||||
}, |
||||
mounted() { |
||||
// 组件渲染完成时,检查value是否为true,如果是,弹出popup |
||||
this.value && this.open(); |
||||
}, |
||||
methods: { |
||||
// 动画结束回调 |
||||
transitionend(e) { |
||||
// console.log(e, "动画结束popup"); |
||||
}, |
||||
// 判断传入的值,是否带有单位,如果没有,就默认用rpx单位 |
||||
getUnitValue(val) { |
||||
if (/(%|px|rpx|auto)$/.test(val)) return val; |
||||
else return val + "rpx"; |
||||
}, |
||||
// 遮罩被点击 |
||||
maskClick() { |
||||
this.close(); |
||||
}, |
||||
close() { |
||||
// 标记关闭是内部发生的,否则修改了value值,导致watch中对value检测,导致再执行一遍close |
||||
// 造成@close事件触发两次 |
||||
this.closeFromInner = true; |
||||
this.change("showDrawer", "visibleSync", false); |
||||
}, |
||||
// 中部弹出时,需要.u-drawer-content将居中内容,此元素会铺满屏幕,点击需要关闭弹窗 |
||||
// 让其只在mode=center时起作用 |
||||
modeCenterClose(mode) { |
||||
if (mode != "center" || !this.maskCloseAble) return; |
||||
this.close(); |
||||
}, |
||||
open() { |
||||
this.change("visibleSync", "showDrawer", true); |
||||
}, |
||||
// 此处的原理是,关闭时先通过动画隐藏弹窗和遮罩,再移除整个组件 |
||||
// 打开时,先渲染组件,延时一定时间再让遮罩和弹窗的动画起作用 |
||||
change(param1, param2, status) { |
||||
// 如果this.popup为false,意味着为picker,actionsheet等组件调用了popup组件 |
||||
if (this.popup == true) { |
||||
this.$emit("input", status); |
||||
} |
||||
this[param1] = status; |
||||
if (status) { |
||||
// #ifdef H5 || MP |
||||
this.timer = setTimeout(() => { |
||||
this[param2] = status; |
||||
this.$emit(status ? "open" : "close"); |
||||
}, 50); |
||||
// #endif |
||||
// #ifndef H5 || MP |
||||
this.$nextTick(() => { |
||||
this[param2] = status; |
||||
this.$emit(status ? "open" : "close"); |
||||
}); |
||||
// #endif |
||||
} else { |
||||
this.timer = setTimeout(() => { |
||||
this[param2] = status; |
||||
this.$emit(status ? "open" : "close"); |
||||
}, this.duration); |
||||
} |
||||
}, |
||||
}, |
||||
}; |
||||
</script> |
||||
|
||||
<style scoped lang="scss"> |
||||
@mixin vue-flex($direction: row) { |
||||
/* #ifndef APP-NVUE */ |
||||
display: flex; |
||||
flex-direction: $direction; |
||||
/* #endif */ |
||||
} |
||||
.u-drawer { |
||||
/* #ifndef APP-NVUE */ |
||||
display: block; |
||||
/* #endif */ |
||||
position: fixed; |
||||
top: 0; |
||||
left: 0; |
||||
right: 0; |
||||
bottom: 0; |
||||
overflow: hidden; |
||||
} |
||||
|
||||
.u-drawer-content { |
||||
/* #ifndef APP-NVUE */ |
||||
display: block; |
||||
/* #endif */ |
||||
position: absolute; |
||||
z-index: 1003; |
||||
transition: all 0.25s linear; |
||||
} |
||||
|
||||
.u-drawer__scroll-view { |
||||
width: 100%; |
||||
height: 100%; |
||||
} |
||||
|
||||
.u-drawer-left { |
||||
top: 0; |
||||
bottom: 0; |
||||
left: 0; |
||||
} |
||||
|
||||
.u-drawer-right { |
||||
right: 0; |
||||
top: 0; |
||||
bottom: 0; |
||||
} |
||||
|
||||
.u-drawer-top { |
||||
top: 0; |
||||
left: 0; |
||||
right: 0; |
||||
} |
||||
|
||||
.u-drawer-bottom { |
||||
bottom: 0; |
||||
left: 0; |
||||
right: 0; |
||||
} |
||||
|
||||
.u-drawer-center { |
||||
@include vue-flex; |
||||
flex-direction: column; |
||||
bottom: 0; |
||||
left: 0; |
||||
right: 0; |
||||
top: 0; |
||||
justify-content: center; |
||||
align-items: center; |
||||
opacity: 0; |
||||
z-index: 99999; |
||||
} |
||||
|
||||
.u-mode-center-box { |
||||
min-width: 100rpx; |
||||
min-height: 100rpx; |
||||
/* #ifndef APP-NVUE */ |
||||
display: block; |
||||
/* #endif */ |
||||
position: relative; |
||||
} |
||||
|
||||
.u-drawer-content-visible.u-drawer-center { |
||||
transform: scale(1); |
||||
opacity: 1; |
||||
} |
||||
|
||||
.u-animation-zoom { |
||||
transform: scale(1.15); |
||||
} |
||||
|
||||
.u-drawer-content-visible { |
||||
transform: translate3D(0px, 0px, 0px) !important; |
||||
} |
||||
|
||||
.u-close { |
||||
position: absolute; |
||||
z-index: 3; |
||||
} |
||||
|
||||
.u-close--top-left { |
||||
top: 30rpx; |
||||
left: 30rpx; |
||||
} |
||||
|
||||
.u-close--top-right { |
||||
top: 30rpx; |
||||
right: 30rpx; |
||||
} |
||||
|
||||
.u-close--bottom-left { |
||||
bottom: 30rpx; |
||||
left: 30rpx; |
||||
} |
||||
|
||||
.u-close--bottom-right { |
||||
right: 30rpx; |
||||
bottom: 30rpx; |
||||
} |
||||
</style> |
@ -1,155 +0,0 @@ |
||||
## 导入即用 全端支持 |
||||
|
||||
### 有问题 + wx : zy597172583 标注来意 可评论 看到及时回复 |
||||
1.使用方式 |
||||
|
||||
```javascript |
||||
<template> |
||||
<filter-popup :data="filterData" :form.sync="filterForm" v-model="popup.filter" title="全部筛选" height="1104rpx" @finsh="subFinsh"></filter-popup> |
||||
</template> |
||||
<script> |
||||
import FilterPopup from "@/components/filter-popup/filter-popup"; |
||||
export default { |
||||
components: { |
||||
FilterPopup, |
||||
}, |
||||
data() { |
||||
return { |
||||
//筛选表单数据 |
||||
filterData: [ |
||||
{ |
||||
children: false,//是否有子项 |
||||
title: "意向度", |
||||
key: "intention_type", //键名 接收对象名字 |
||||
keyValue: "value", //获取的值是哪个 |
||||
isRadio: true, //是否单选 否则多选 |
||||
data: [ |
||||
{ |
||||
title: "一般意向", |
||||
id: 1, |
||||
value: 1, |
||||
}, |
||||
{ |
||||
title: "中意向度", |
||||
id: 2, |
||||
value: 2, |
||||
}, |
||||
{ |
||||
title: "高意向度", |
||||
id: 3, |
||||
value: 3, |
||||
}, |
||||
], |
||||
}, |
||||
{ |
||||
children: false,//是否有子项 |
||||
title: "手机号码", |
||||
key: "is_bind_phone", //键名 接收对象名字 |
||||
keyValue: "value", //获取的值是哪个 |
||||
isRadio: true, //是否单选 否则多选 |
||||
data: [ |
||||
{ |
||||
title: "未绑定", |
||||
value: 0, |
||||
}, |
||||
{ |
||||
title: "已绑定", |
||||
value: 1, |
||||
}, |
||||
], |
||||
}, |
||||
{ |
||||
children: false,//是否有子项 |
||||
title: "企微好友", |
||||
key: "is_work_customer", //键名 接收对象名字 |
||||
keyValue: "value", //获取的值是哪个 |
||||
isRadio: true, //是否单选 否则多选 |
||||
data: [ |
||||
{ |
||||
title: "未添加", |
||||
value: 0, |
||||
}, |
||||
{ |
||||
title: "已添加", |
||||
value: 1, |
||||
}, |
||||
], |
||||
}, |
||||
{ |
||||
children: true,//是否有子项 |
||||
isRadio: false, //是否单选 |
||||
title: "标签内容", |
||||
key: "label", //键名 接收对象名字 |
||||
keyValue: "id", //获取的值是哪个 |
||||
data: [ |
||||
{ |
||||
title: "客户重要程度", |
||||
id: 22, |
||||
children: [ |
||||
{ |
||||
title: "一般意向2", |
||||
id: 32, |
||||
value: 1, |
||||
}, |
||||
{ |
||||
title: "一般意向3", |
||||
id: 12, |
||||
value: 1, |
||||
}, |
||||
], |
||||
}, |
||||
{ |
||||
title: "客户重要程度2", |
||||
id: 122, |
||||
children: [ |
||||
{ |
||||
title: "一般意向2", |
||||
id: 43, |
||||
value: 1, |
||||
}, |
||||
{ |
||||
title: "一般意向3", |
||||
id: 23, |
||||
value: 1, |
||||
}, |
||||
], |
||||
}, |
||||
], |
||||
}, |
||||
], //筛选数据 |
||||
filterForm: {}, //选中的表单 |
||||
}; |
||||
}, |
||||
} |
||||
``` |
||||
|
||||
2.组件props |
||||
|
||||
| 参数名 | 类型 | 介绍 | |
||||
| ---------- | ------- | ------------------------------------------------- | |
||||
| form | Object | .sync双向绑定的表单值 , 可传入显示初始哪些被选中 | |
||||
| data | Array | 动态渲染选项的数据数组 | |
||||
| title | String | 标题 | |
||||
| height | String | 弹出层高度 单位 rpx px upx 百分比 vw等 | |
||||
| themeColor | String | 组件主体颜色 默认:\#0066ff | |
||||
| mask | Boolean | 是否显示弹出遮盖层 | |
||||
|
||||
3.data 参数 |
||||
|
||||
| 参数名 | 类型 | 是否必填 | 介绍 | |
||||
| -------- | ------- | -------- | ------------------------------------------------------------ | |
||||
| children | Boolean | 是 | 是否有子项 | |
||||
| data | Array | 是 | 渲染出来的选项数据 | |
||||
| isRadio | Boolean | 是 | 是否单选 单个选项指定,单选还是多选 | |
||||
| title | String | 是 | 标签内容标题 | |
||||
| key | String | 是 | 接收对象名字 会作为@finsh返回对象的键名 | |
||||
| keyValue | String | 是 | 获取的值是哪个 自定义指定获取哪个键值 value还是id或者自己定义的 | |
||||
|
||||
4.事件 |
||||
|
||||
| 事件名 | 返回参数 | 简介 | |
||||
| ------ | -------- | ----------------------------------------- | |
||||
| finsh | Object | 点击确定时触发 返回参数为选中值的对象数组 | |
||||
| close | 无 | 组件点击关闭时触发 | |
||||
|
||||
![image-20210730095456900](https://yzhsaas-cdn.qietongvip.com/asd.png) |
@ -1,596 +0,0 @@ |
||||
<template> |
||||
<popup |
||||
:mask="mask" |
||||
border-radius="50" |
||||
v-model="acceptValue" |
||||
mode="bottom" |
||||
class="filter-popup" |
||||
:height="height" |
||||
@close="close" |
||||
:style="{ '--color': themeColor }" |
||||
:mask-custom-style="{ background: 'rgba(0, 0, 0, 0.7)' }" |
||||
> |
||||
<view class="top-title flex-row-sb" v-if="showTop"> |
||||
<view class="popup-title flex-row-c-c">{{ title }}</view> |
||||
<text class="saasIcon flex-row-c-c" @click="close"></text> |
||||
</view> |
||||
|
||||
<scroll-view class="select-scroll" scroll-y :style="{ height: `calc( ${height} - 120rpx - 152rpx )` }"> |
||||
<view class="select-main"> |
||||
<view v-if="showCategory" class="select-item"> |
||||
<view class="title">学科专业</view> |
||||
<view class="category-wrap"> |
||||
<picker mode="multiSelector" v-model="category" @change="change" @columnchange="columnchange" :range="categories" range-key="title"> |
||||
<view class="category">{{categoryName ? categoryName : '请选择'}}</view> |
||||
</picker> |
||||
<uni-icons v-if="categoryName" class="icon" type="closeempty" size="16" color="#333" @click.stop="delCatagory"></uni-icons> |
||||
</view> |
||||
</view> |
||||
|
||||
<view class="select-item" v-for="(item, index) in data" :key="index"> |
||||
<view class="title"> {{ item.title }} </view> |
||||
<view class="tag-list" v-if="!item.children"> |
||||
<view |
||||
class="tag-item" |
||||
:class="[acceptForm[item.key].includes(item2.value) ? 'select-on' : '']" |
||||
v-for="(item2, index2) in item.data" |
||||
:key="index2" |
||||
@click="selectTagBuyValueOrId(item2, item.key, item.keyValue, item.isRadio)" |
||||
> |
||||
{{ item2.title }} |
||||
</view> |
||||
</view> |
||||
<!-- 有childer --> |
||||
<view class="select-childer" v-else v-for="item2 in item.data" :key="item2.id"> |
||||
<view class="childer-title flex-row--c">{{ item2.title }}</view> |
||||
<view class="tag-list"> |
||||
<view |
||||
class="tag-item" |
||||
:class="[acceptForm[item.key].includes(item3.id) ? 'select-on' : '']" |
||||
v-for="item3 in item2.children" |
||||
:key="item3.id" |
||||
@click="selectTagBuyValueOrId(item3, item.key, item.keyValue, item.isRadio)" |
||||
> |
||||
{{ item3.title }} |
||||
</view> |
||||
</view> |
||||
</view> |
||||
</view> |
||||
</view> |
||||
</scroll-view> |
||||
|
||||
<view class="filter-button flex-row-c"> |
||||
<view class="btn flex-row"> |
||||
<view class="btn-1 flex-row-c-c" @click="reset">重置</view> |
||||
<view class="btn-2 flex-row-c-c" @click="finsh">完成</view> |
||||
</view> |
||||
</view> |
||||
</popup> |
||||
</template> |
||||
|
||||
<script> |
||||
import { courseDiscipline, courseProfessionalClass, courseProfessional } from '@/apis/modules/product.js' |
||||
import Popup from './components/popup.vue'; |
||||
export default { |
||||
components:{ |
||||
Popup |
||||
}, |
||||
name: "filter-popup", |
||||
props: { |
||||
//选中的表单 |
||||
form: { |
||||
type: Object, |
||||
default: () => {}, |
||||
}, |
||||
//主题颜色 |
||||
themeColor: { |
||||
type: String, |
||||
default: "#0066ff", |
||||
}, |
||||
//渲染数据 |
||||
data: { |
||||
type: Array, |
||||
default: () => [], |
||||
}, |
||||
//标题 |
||||
title: { |
||||
type: String, |
||||
default: "请选择", |
||||
}, |
||||
value: { |
||||
type: Boolean, |
||||
default: false, |
||||
}, |
||||
mask: { |
||||
type: Boolean, |
||||
default: true, |
||||
}, |
||||
height: { |
||||
type: String, |
||||
default: "600rpx", |
||||
}, |
||||
//是否显示退出按钮 |
||||
showTop: { |
||||
type: Boolean, |
||||
default: true, |
||||
}, |
||||
//是否显示学科专业选择 |
||||
showCategory: { |
||||
type: Boolean, |
||||
default: false, |
||||
}, |
||||
}, |
||||
computed: { |
||||
// 接收表单 |
||||
acceptForm: { |
||||
get() { |
||||
this.originForm = JSON.parse(JSON.stringify(this.form)) |
||||
if (Object.keys(this.form).length) { |
||||
return this.form; |
||||
} else { |
||||
let obj = {}; |
||||
this.data.forEach((item) => { |
||||
obj[item.key] = []; |
||||
}); |
||||
return obj; |
||||
} |
||||
}, |
||||
set(nval) { |
||||
// console.log("set Form :>> ", nval); |
||||
this.$emit("update:form", nval); |
||||
}, |
||||
}, |
||||
acceptValue: { |
||||
get() { |
||||
return this.value; |
||||
}, |
||||
set(nval) { |
||||
this.$emit("input", nval); |
||||
}, |
||||
}, |
||||
}, |
||||
data() { |
||||
return { |
||||
originForm: {}, |
||||
|
||||
categoryName:'', |
||||
categoryId: '', |
||||
professionalCategoryId: '', |
||||
professionalId: '', |
||||
categories:[], |
||||
category: [] |
||||
} |
||||
}, |
||||
mounted() { |
||||
this.getDis() |
||||
}, |
||||
methods: { |
||||
//选择存value 还是id |
||||
selectTagBuyValueOrId(item, key, keyValue, isRadio) { |
||||
//如果是单选 |
||||
if (isRadio) { |
||||
if (keyValue == "value") { |
||||
if (this.acceptForm[key].some((value) => value === item.value)) { |
||||
this.acceptForm[key] = this.acceptForm[key].filter((value) => value !== item.value); |
||||
return; |
||||
} |
||||
this.acceptForm[key] = []; |
||||
this.acceptForm[key].push(item.value); |
||||
} else { |
||||
if (this.acceptForm[key].some((id) => id === item.id)) { |
||||
this.acceptForm[key] = this.acceptForm[key].filter((id) => id !== item.id); |
||||
return; |
||||
} |
||||
this.acceptForm[key] = []; |
||||
this.acceptForm[key].push(item.id); |
||||
} |
||||
} else { |
||||
if (keyValue == "value") { |
||||
this.acceptForm[key].some((value) => value === item.value) |
||||
? (this.acceptForm[key] = this.acceptForm[key].filter((value) => value !== item.value)) |
||||
: this.acceptForm[key].push(item.value); |
||||
} else { |
||||
this.acceptForm[key].some((id) => id === item.id) |
||||
? (this.acceptForm[key] = this.acceptForm[key].filter((id) => id !== item.id)) |
||||
: this.acceptForm[key].push(item.id); |
||||
} |
||||
} |
||||
|
||||
this.acceptForm = this.acceptForm; |
||||
}, |
||||
|
||||
// 查询学科类别 |
||||
async getDis() { |
||||
const { list } = await courseDiscipline() |
||||
list.map(e => { |
||||
e.id = e.disciplineId |
||||
e.title = e.disciplineName |
||||
}) |
||||
this.categories.push(list) |
||||
|
||||
const res = await courseProfessionalClass(1) |
||||
res.list.map(e => { |
||||
e.id = e.professionalClassId |
||||
e.title = e.professionalClassName |
||||
}) |
||||
this.categories.push(res.list) |
||||
|
||||
const res1 = await courseProfessional(1) |
||||
res1.list.map(e => { |
||||
e.id = e.professionalId |
||||
e.title = e.professionalName |
||||
}) |
||||
this.categories.push(res1.list) |
||||
}, |
||||
// 学科专业确定回调 |
||||
change(e) { |
||||
const i0 = e.detail.value[0] |
||||
const i1 = e.detail.value[1] |
||||
const i2 = e.detail.value[2] |
||||
const i1IsNumber = typeof i1 === 'number' |
||||
const i2IsNumber = typeof i2 === 'number' |
||||
const list = this.categories |
||||
this.categoryId = list[0][i0].id |
||||
this.categoryName = list[0][i0].title |
||||
|
||||
this.professionalCategoryId = '' |
||||
this.professionalId = '' |
||||
if (i1IsNumber && list[1].length > 0) { |
||||
this.professionalCategoryId = list[1][i1].id |
||||
this.categoryName += '/' + list[1][i1].title |
||||
} |
||||
if (i2IsNumber && list[2].length > 0) { |
||||
this.professionalId = list[2][i2].id |
||||
this.categoryName += '/' + list[2][i2].title |
||||
} |
||||
}, |
||||
// 学科专业切换回调 |
||||
async columnchange(e) { |
||||
const { column } = e.detail |
||||
if (column == 0) { |
||||
const { list } = await courseProfessionalClass(this.categories[0][e.detail.value].id) |
||||
list.map(e => { |
||||
e.id = e.professionalClassId |
||||
e.title = e.professionalClassName |
||||
}) |
||||
this.categories[1] = list |
||||
this.categories[2] = [] |
||||
this.$set(this.categories, 1, list) |
||||
console.log('inner',this.categories) |
||||
} else |
||||
if (column == 1) { |
||||
const { list } = await courseProfessional(this.categories[1][e.detail.value].id) |
||||
list.map(e => { |
||||
e.id = e.professionalId |
||||
e.title = e.professionalName |
||||
}) |
||||
this.categories[2] = list |
||||
this.$set(this.categories, 2, list) |
||||
} |
||||
}, |
||||
// 删除学科专业 |
||||
delCatagory() { |
||||
this.category = [] |
||||
this.categoryName = '' |
||||
this.categoryId = '' |
||||
this.professionalCategoryId = '' |
||||
this.professionalId = '' |
||||
}, |
||||
|
||||
// 点击完成 |
||||
finsh() { |
||||
if (this.showCategory) { |
||||
this.acceptForm.categoryId = this.categoryId |
||||
this.acceptForm.professionalCategoryId = this.professionalCategoryId |
||||
this.acceptForm.professionalId = this.professionalId |
||||
this.acceptForm.categoryName = this.categoryName |
||||
} |
||||
this.$emit("finsh", this.acceptForm); |
||||
this.$emit("input", false); |
||||
}, |
||||
close() { |
||||
this.$emit("input", false); |
||||
this.$emit("close"); |
||||
}, |
||||
//重置 |
||||
reset() { |
||||
this.acceptForm = {} |
||||
this.categoryId = '' |
||||
this.professionalCategoryId = '' |
||||
this.professionalId = '' |
||||
this.categoryName = '' |
||||
this.$nextTick(() => { |
||||
this.$emit("finsh", this.acceptForm); |
||||
this.$emit("input", false); |
||||
}) |
||||
}, |
||||
}, |
||||
}; |
||||
</script> |
||||
<style lang="scss" scoped> |
||||
@font-face { |
||||
font-family: 'iconfont'; /* Project id 2729410 */ |
||||
src: url('https://at.alicdn.com/t/font_2729410_3nhq3ibbcqg.woff2?t=1628330097695') format('woff2'), |
||||
url('https://at.alicdn.com/t/font_2729410_3nhq3ibbcqg.woff?t=1628330097695') format('woff'), |
||||
url('https://at.alicdn.com/t/font_2729410_3nhq3ibbcqg.ttf?t=1628330097695') format('truetype'); |
||||
} |
||||
.saasIcon { |
||||
font-family: "iconfont" !important; |
||||
font-style: normal; |
||||
-webkit-font-smoothing: antialiased; |
||||
-webkit-text-stroke-width: 0.2px; |
||||
-moz-osx-font-smoothing: grayscale; |
||||
} |
||||
.filter-popup { |
||||
color: #000000; |
||||
.top-title { |
||||
font-weight: bold; |
||||
height: 90rpx; |
||||
margin-left: 70rpx; |
||||
font-size: 30rpx; |
||||
margin-top: 20rpx; |
||||
.popup-title { |
||||
height: 100%; |
||||
} |
||||
.saasIcon { |
||||
// width: 150rpx; |
||||
height: 100%; |
||||
padding-right: 70rpx; |
||||
} |
||||
} |
||||
.select-scroll { |
||||
} |
||||
.category-wrap { |
||||
display: flex; |
||||
align-items: center; |
||||
margin-top: 10rpx; |
||||
.icon { |
||||
margin-left: 10rpx; |
||||
} |
||||
} |
||||
.category { |
||||
font-size: 28rpx; |
||||
} |
||||
.select-main { |
||||
padding: 0 32rpx; |
||||
.select-item { |
||||
.title { |
||||
font-weight: bold; |
||||
font-size: 28rpx; |
||||
color: #000000; |
||||
padding-top: 30rpx; |
||||
} |
||||
.tag-list { |
||||
display: flex; |
||||
flex-wrap: wrap; |
||||
margin-left: -12rpx; |
||||
.tag-item { |
||||
margin-top: 20rpx; |
||||
padding: 10rpx 40rpx; |
||||
font-size: 26rpx; |
||||
background: #f5f5f5; |
||||
color: #484848; |
||||
border-radius: 36rpx; |
||||
margin-left: 12rpx; |
||||
&.select-on { |
||||
background: var(--color); |
||||
color: #fff; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
.select-childer { |
||||
.childer-title { |
||||
color: #484848; |
||||
font-size: 28rpx; |
||||
border-bottom: 1px solid #f5f5f5; |
||||
height: 80rpx; |
||||
} |
||||
} |
||||
} |
||||
.filter-button { |
||||
width: 100%; |
||||
height: 152rpx; |
||||
background: #ffffff; |
||||
box-shadow: 0px -3px 12px rgba(0, 0, 0, 0.06); |
||||
position: fixed; |
||||
bottom: 0; |
||||
.btn { |
||||
border-radius: 100rpx; |
||||
margin-top: 26rpx; |
||||
width: 680rpx; |
||||
height: 80rpx; |
||||
color: #ffffff; |
||||
font-size: 28rpx; |
||||
overflow: hidden; |
||||
.btn-1 { |
||||
flex: 1; |
||||
background: linear-gradient(271deg, #2698fb 0%, #84c6ff 100%); |
||||
} |
||||
.btn-2 { |
||||
flex: 1; |
||||
background: linear-gradient(90deg, #0066ff 0%, #1371ff 100%); |
||||
} |
||||
} |
||||
} |
||||
|
||||
// 自定义css |
||||
.flex-row { |
||||
display: flex; |
||||
} |
||||
|
||||
.flex-row-c { |
||||
display: flex; |
||||
justify-content: center; |
||||
} |
||||
|
||||
.flex-row--c { |
||||
display: flex; |
||||
align-items: center; |
||||
} |
||||
|
||||
.flex-row-c-c { |
||||
display: flex; |
||||
justify-content: center; |
||||
align-items: center; |
||||
} |
||||
|
||||
.flex-row-sb-c { |
||||
display: flex; |
||||
justify-content: space-between; |
||||
align-items: center; |
||||
} |
||||
|
||||
.flex-row-sb-t { |
||||
display: flex; |
||||
justify-content: space-between; |
||||
align-items: flex-start; |
||||
} |
||||
|
||||
.flex-row-sb-b { |
||||
display: flex; |
||||
justify-content: space-between; |
||||
align-items: flex-end; |
||||
} |
||||
|
||||
.flex-row-c-sb { |
||||
display: flex; |
||||
justify-content: center; |
||||
align-items: space-between; |
||||
} |
||||
|
||||
.flex-row-sb { |
||||
display: flex; |
||||
justify-content: space-between; |
||||
} |
||||
|
||||
.flex-row-l { |
||||
display: flex; |
||||
justify-content: flex-start; |
||||
} |
||||
|
||||
.flex-row-l-c { |
||||
display: flex; |
||||
justify-content: flex-start; |
||||
align-items: center; |
||||
} |
||||
|
||||
.flex-row-c-t { |
||||
display: flex; |
||||
justify-content: center; |
||||
align-items: flex-start; |
||||
} |
||||
|
||||
.flex-row-r-c { |
||||
display: flex; |
||||
justify-content: flex-end; |
||||
align-items: center; |
||||
} |
||||
|
||||
.flex-row-r { |
||||
display: flex; |
||||
justify-content: flex-end; |
||||
} |
||||
|
||||
.flex-row--b { |
||||
display: flex; |
||||
align-items: flex-end; |
||||
} |
||||
|
||||
.flex-col { |
||||
display: flex; |
||||
flex-direction: column; |
||||
} |
||||
|
||||
.flex-col-c { |
||||
display: flex; |
||||
flex-direction: column; |
||||
justify-content: center; |
||||
} |
||||
|
||||
.flex-col--c { |
||||
display: flex; |
||||
flex-direction: column; |
||||
align-items: center; |
||||
} |
||||
|
||||
.flex-col-c-c { |
||||
display: flex; |
||||
flex-direction: column; |
||||
justify-content: center; |
||||
align-items: center; |
||||
} |
||||
|
||||
.flex-col-sb-c { |
||||
display: flex; |
||||
flex-direction: column; |
||||
justify-content: space-between; |
||||
align-items: center; |
||||
} |
||||
|
||||
.flex-col-c-sb { |
||||
display: flex; |
||||
flex-direction: column; |
||||
justify-content: center; |
||||
align-items: space-between; |
||||
} |
||||
|
||||
.flex-col-sb { |
||||
display: flex; |
||||
flex-direction: column; |
||||
justify-content: space-between; |
||||
} |
||||
|
||||
.flex-col-t-c { |
||||
display: flex; |
||||
flex-direction: column; |
||||
justify-content: flex-start; |
||||
align-items: center; |
||||
} |
||||
|
||||
.flex-col-c-l { |
||||
display: flex; |
||||
flex-direction: column; |
||||
justify-content: center; |
||||
align-items: flex-start; |
||||
} |
||||
|
||||
.flex-col-t { |
||||
display: flex; |
||||
flex-direction: column; |
||||
justify-content: flex-start; |
||||
} |
||||
|
||||
.flex-col-b { |
||||
display: flex; |
||||
flex-direction: column; |
||||
justify-content: flex-end; |
||||
} |
||||
|
||||
.flex-col-b-c { |
||||
display: flex; |
||||
flex-direction: column; |
||||
justify-content: flex-end; |
||||
align-items: center; |
||||
} |
||||
|
||||
.flex-col-c-l { |
||||
display: flex; |
||||
flex-direction: column; |
||||
justify-content: center; |
||||
align-items: flex-end; |
||||
} |
||||
|
||||
.flex-col--l { |
||||
display: flex; |
||||
flex-direction: column; |
||||
align-items: flex-start; |
||||
} |
||||
|
||||
.flex-col--r { |
||||
display: flex; |
||||
flex-direction: column; |
||||
align-items: flex-end; |
||||
} |
||||
} |
||||
</style> |
@ -1,10 +0,0 @@ |
||||
/** |
||||
/** |
||||
* 产品 配置文件 |
||||
* @author yujialong |
||||
*/ |
||||
|
||||
export default { |
||||
normalIcon: 'https://huoran.oss-cn-shenzhen.aliyuncs.com/20220609/png/1534733700683030528.png', // 通用图标
|
||||
dataIcon: 'https://huoran.oss-cn-shenzhen.aliyuncs.com/20220627/png/1541256164447641600.png' // 数据图标
|
||||
} |
@ -1,39 +0,0 @@ |
||||
/** |
||||
* @file 百度移动统计配置文件 |
||||
*/ |
||||
|
||||
module.exports = { |
||||
/** |
||||
* 从百度移动统计获取的AppKey |
||||
* @type {string} |
||||
*/ |
||||
appKey: 'ce2fa79380', |
||||
|
||||
/** |
||||
* 是否使用了插件 |
||||
* @type {boolean} |
||||
*/ |
||||
hasPlugin: false, |
||||
|
||||
/** |
||||
* 是否获取当前的地理位置和速度信息 |
||||
* @type {boolean} |
||||
*/ |
||||
getLocation: false, |
||||
|
||||
/** |
||||
* 是否获取组件滚动信息 |
||||
* @type {boolean} |
||||
*/ |
||||
getComponentScroll: false, |
||||
/** |
||||
* 是否开启了A/B 测试 |
||||
* @type {boolean} |
||||
*/ |
||||
hasABTest: false, |
||||
/** |
||||
* 是否开启热力图功能 |
||||
* @type {boolean} |
||||
*/ |
||||
hasHeatmap: false, |
||||
}; |
File diff suppressed because one or more lines are too long
@ -1,18 +0,0 @@ |
||||
|
||||
import uma from 'umtrack-wx'; |
||||
uma.init({ |
||||
appKey: '64cc98d5a1a164591b62da3e', // 由友盟分配的APP_KEY
|
||||
useOpenid: true, |
||||
// 使用Openid进行统计,此项为false时将使用友盟+uuid进行用户统计。
|
||||
// 使用Openid来统计微信小程序的用户,会使统计的指标更为准确,对系统准确性要求高的应用推荐使用Openid
|
||||
autoGetOpenid: true, |
||||
// 使用openid进行统计时,是否授权友盟自动获取Openid,
|
||||
// 如若需要,请到友盟后台"设置管理-应用信息"(https://mp.umeng.com/setting/appset)中设置appId及secret
|
||||
debug: true,// 是否打开调试模式
|
||||
uploadUserInfo: true, // 自动上传用户信息,设为false取消上传,默认为false
|
||||
enableVerify: true |
||||
}); |
||||
uma.install = function(Vue) { |
||||
Vue.prototype.$uma = uma; |
||||
} |
||||
export default uma; |
@ -1,32 +0,0 @@ |
||||
@font-face { |
||||
font-family: "iconfont";
src: url('/static/iconfont/iconfont.ttf') format('truetype'); |
||||
} |
||||
|
||||
.iconfont { |
||||
font-family: "iconfont" !important; |
||||
font-size: 16px; |
||||
font-style: normal; |
||||
-webkit-font-smoothing: antialiased; |
||||
-moz-osx-font-smoothing: grayscale; |
||||
} |
||||
|
||||
.icon-qrcode:before { |
||||
content: "\e7dd"; |
||||
} |
||||
|
||||
.icon-dingdan:before { |
||||
content: "\e601"; |
||||
} |
||||
|
||||
.icon-product:before { |
||||
content: "\e788"; |
||||
} |
||||
|
||||
.icon-edit:before { |
||||
content: "\e621"; |
||||
} |
||||
|
||||
.icon-filter:before { |
||||
content: "\e6b9"; |
||||
} |
||||
|
Binary file not shown.
Loading…
Reference in new issue