parent
d0e9a3f075
commit
824df64b19
@ -0,0 +1,35 @@ |
||||
export default{ |
||||
data(){ |
||||
return { |
||||
//设置默认的分享参数
|
||||
//如果页面不设置share,就触发这个默认的分享
|
||||
share:{ |
||||
title:'嗨森逛', |
||||
path:'/pages/tabBar/home/home', |
||||
imageUrl:'', |
||||
desc:'', |
||||
content:'' |
||||
} |
||||
} |
||||
}, |
||||
onShareAppMessage(res) { |
||||
return { |
||||
title:this.share.title, |
||||
path:this.share.path, |
||||
imageUrl:this.share.imageUrl, |
||||
desc:this.share.desc, |
||||
content:this.share.content, |
||||
success(res){ |
||||
uni.showToast({ |
||||
title:'分享成功' |
||||
}) |
||||
}, |
||||
fail(res){ |
||||
uni.showToast({ |
||||
title:'分享失败', |
||||
icon:'none' |
||||
}) |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,145 @@ |
||||
<template> |
||||
<view v-if="width" class="uni-grid-item"> |
||||
<view :class="{ 'uni-grid-item--border': showBorder, 'uni-grid-item__box-square': square, 'uni-grid-item--border-top': showBorder && index < column, 'uni-highlight': highlight }" |
||||
:style="{ 'border-right-color': borderColor ,'border-bottom-color': borderColor ,'border-top-color': borderColor }" |
||||
class="uni-grid-item__box" @click="_onClick"> |
||||
<view class="uni-grid-item__box-item" :class="{'uni-grid-item__box-item-square': square}"> |
||||
<slot /> |
||||
</view> |
||||
</view> |
||||
</view> |
||||
</template> |
||||
|
||||
<script> |
||||
export default { |
||||
name: 'UniGridItem', |
||||
inject: ['grid'], |
||||
data() { |
||||
return { |
||||
column: 0, |
||||
showBorder: true, |
||||
square: true, |
||||
highlight: true, |
||||
left: 0, |
||||
top: 0, |
||||
index: 0, |
||||
openNum: 2, |
||||
width: 0, |
||||
borderColor: '#e5e5e5' |
||||
} |
||||
}, |
||||
created() { |
||||
this.column = this.grid.column |
||||
this.showBorder = this.grid.showBorder |
||||
this.square = this.grid.square |
||||
this.highlight = this.grid.highlight |
||||
this.top = this.hor === 0 ? this.grid.hor : this.hor |
||||
this.left = this.ver === 0 ? this.grid.ver : this.ver |
||||
this.borderColor = this.grid.borderColor |
||||
this.index = this.grid.index++ |
||||
this.grid.children.push(this) |
||||
}, |
||||
methods: { |
||||
_onClick() { |
||||
// console.log('点击', this.index); |
||||
this.grid.change({ |
||||
detail: { |
||||
index: this.index |
||||
} |
||||
}) |
||||
} |
||||
} |
||||
} |
||||
</script> |
||||
|
||||
<style scoped> |
||||
.uni-grid-item { |
||||
/* #ifndef APP-NVUE */ |
||||
height: 100%; |
||||
/* #endif */ |
||||
width: 168rpx; |
||||
} |
||||
|
||||
.uni-grid-item__box { |
||||
/* #ifndef APP-NVUE */ |
||||
display: flex; |
||||
/* #endif */ |
||||
flex: 1; |
||||
position: relative; |
||||
flex-direction: row; |
||||
align-items: center; |
||||
/* margin-top: 9rpx; |
||||
margin-right: 17rpx; |
||||
margin-bottom: 9rpx; |
||||
margin-left: 17rpx; */ |
||||
/* #ifdef APP-NVUE */ |
||||
justify-content: center; |
||||
|
||||
/* #endif */ |
||||
} |
||||
|
||||
.uni-grid-item__box-item { |
||||
/* #ifndef APP-NVUE */ |
||||
display: flex; |
||||
width: 100%; |
||||
/* #endif */ |
||||
position: relative; |
||||
flex: 1; |
||||
justify-content: center; |
||||
flex-direction: column; |
||||
align-items: center; |
||||
width: 152rpx; |
||||
height: 146rpx; |
||||
/* padding-top: 10rpx; |
||||
padding-right: 23rpx; |
||||
padding-bottom: 10rpx; |
||||
padding-left: 23rpx; */ |
||||
border-radius: 1rpx; |
||||
/* padding: 15px 0; */ |
||||
} |
||||
|
||||
.uni-grid-item__box-item-square { |
||||
position: absolute; |
||||
top: 0; |
||||
bottom: 0; |
||||
} |
||||
|
||||
.uni-grid-item--image { |
||||
width: 25px; |
||||
height: 25px; |
||||
} |
||||
|
||||
.uni-grid-item--text { |
||||
font-size: 24px; |
||||
margin-top: 5px; |
||||
} |
||||
|
||||
.uni-grid-item__box-square { |
||||
height: 0; |
||||
padding-top: 100%; |
||||
} |
||||
|
||||
.uni-grid-item--border { |
||||
position: relative; |
||||
border-bottom-color: #e5e5e5; |
||||
border-bottom-style: solid; |
||||
border-bottom-width: 1px; |
||||
border-right-color: #e5e5e5; |
||||
border-right-style: solid; |
||||
border-right-width: 1px; |
||||
} |
||||
|
||||
.uni-grid-item--border-top { |
||||
border-top-color: #e5e5e5; |
||||
border-top-style: solid; |
||||
border-top-width: 1px; |
||||
/* #ifndef APP-NVUE */ |
||||
height: 100%; |
||||
box-sizing: border-box; |
||||
/* #endif */ |
||||
} |
||||
|
||||
.uni-highlight:active { |
||||
background-color: #f1f1f1; |
||||
} |
||||
</style> |
@ -0,0 +1,129 @@ |
||||
<template> |
||||
<view class="uni-grid-wrap"> |
||||
<view :id="elId" ref="uni-grid" class="uni-grid" :class="{ 'uni-grid--border': showBorder }" :style="{ 'border-left-style':'solid','border-left-color':borderColor, 'border-left-width':showBorder?'1px':0 }"> |
||||
<slot /> |
||||
</view> |
||||
</view> |
||||
</template> |
||||
|
||||
<script> |
||||
// #ifdef APP-NVUE |
||||
const dom = weex.requireModule('dom'); |
||||
// #endif |
||||
export default { |
||||
name: 'UniGrid', |
||||
props: { |
||||
// 每列显示个数 |
||||
column: { |
||||
type: Number, |
||||
default: 3 |
||||
}, |
||||
// 是否显示边框 |
||||
showBorder: { |
||||
type: Boolean, |
||||
default: true |
||||
}, |
||||
// 边框颜色 |
||||
borderColor: { |
||||
type: String, |
||||
default: '#e5e5e5' |
||||
}, |
||||
// 全局标记水平方向移动距离 ,起点为中心,负数为左移动,正数为右移动 |
||||
hor: { |
||||
type: Number, |
||||
default: 0 |
||||
}, |
||||
// 全局标记垂直方向移动距离 ,起点为中心,负数为上移动,正数为下移动 |
||||
ver: { |
||||
type: Number, |
||||
default: 0 |
||||
}, |
||||
// 是否正方形显示,默认为 true |
||||
square: { |
||||
type: Boolean, |
||||
default: true |
||||
}, |
||||
highlight: { |
||||
type: Boolean, |
||||
default: true |
||||
} |
||||
}, |
||||
provide() { |
||||
return { |
||||
grid: this |
||||
} |
||||
}, |
||||
data() { |
||||
const elId = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}` |
||||
return { |
||||
index: 0, |
||||
elId, |
||||
width: 0 |
||||
} |
||||
}, |
||||
created() { |
||||
this.children = [] |
||||
this.index = 0 |
||||
}, |
||||
mounted() { |
||||
setTimeout(() => { |
||||
this._getSize((width) => { |
||||
this.children.forEach((item, index) => { |
||||
item.width = width |
||||
}) |
||||
}) |
||||
}, 50) |
||||
}, |
||||
methods: { |
||||
change(e) { |
||||
this.$emit('change', e) |
||||
}, |
||||
_getSize(fn) { |
||||
// #ifndef APP-NVUE |
||||
uni.createSelectorQuery() |
||||
.in(this) |
||||
.select(`#${this.elId}`) |
||||
.boundingClientRect() |
||||
.exec(ret => { |
||||
this.width = parseInt(ret[0].width / this.column) - 1 + 'px' |
||||
fn(this.width) |
||||
}) |
||||
// #endif |
||||
// #ifdef APP-NVUE |
||||
dom.getComponentRect(this.$refs['uni-grid'], (ret) => { |
||||
this.width = parseInt(ret.size.width / this.column) - 1 + 'px' |
||||
fn(this.width) |
||||
}) |
||||
// #endif |
||||
} |
||||
} |
||||
} |
||||
</script> |
||||
|
||||
<style scoped> |
||||
.uni-grid-wrap { |
||||
/* #ifndef APP-NVUE */ |
||||
display: flex; |
||||
/* #endif */ |
||||
flex: 1; |
||||
flex-direction: column; |
||||
/* #ifdef H5 */ |
||||
width: 100%; |
||||
/* #endif */ |
||||
} |
||||
|
||||
.uni-grid { |
||||
/* #ifndef APP-NVUE */ |
||||
display: flex; |
||||
/* #endif */ |
||||
flex: 1; |
||||
flex-direction: row; |
||||
flex-wrap: wrap; |
||||
} |
||||
|
||||
.uni-grid--border { |
||||
border-left-color: #e5e5e5; |
||||
border-left-style: solid; |
||||
border-left-width: 1px; |
||||
} |
||||
</style> |
@ -0,0 +1,205 @@ |
||||
<template> |
||||
<view class="warp"> |
||||
<view class="example-body"> |
||||
<uni-grid :show-border="false" :square="false" :highlight="false" @change="change"> |
||||
<uni-grid-item :hor="0" :ver="0" marker="badge" type="error" style="width: 25%;text-align: center;" text="12" v-for="item in list" :key="item.id"> |
||||
<image class="image" :src="item.url" mode="aspectFill" @click="webTo" /> |
||||
<text class="text">{{item.text}}</text> |
||||
</uni-grid-item> |
||||
</uni-grid> |
||||
</view> |
||||
</view> |
||||
</template> |
||||
|
||||
<script> |
||||
import uniGrid from '@/components/zc-grid-wrap/zc-grid-wrap.vue' |
||||
import uniGridItem from '@/components/zc-grid-item/zc-grid-item.vue' |
||||
export default { |
||||
components: { |
||||
uniGrid, |
||||
uniGridItem |
||||
}, |
||||
props:{ |
||||
list:{ |
||||
type:Array, |
||||
default:function () { |
||||
return [] |
||||
} |
||||
} |
||||
}, |
||||
data() { |
||||
return { |
||||
// list: [{ |
||||
// url: 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/images/cbd.jpg', |
||||
// text: 'Grid 1' |
||||
// }, |
||||
// { |
||||
// url: 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/images/muwu.jpg', |
||||
// text: 'Grid 2' |
||||
// }, |
||||
// { |
||||
// url: 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/images/cbd.jpg', |
||||
// text: 'Grid 3' |
||||
// }, |
||||
// { |
||||
// url: 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/images/muwu.jpg', |
||||
// text: 'Grid 4' |
||||
// }, |
||||
// { |
||||
// url: 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/images/cbd.jpg', |
||||
// text: 'Grid 5' |
||||
// }, |
||||
// { |
||||
// url: 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/images/muwu.jpg', |
||||
// text: 'Grid 6' |
||||
// }, |
||||
// { |
||||
// url: 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/images/cbd.jpg', |
||||
// text: 'Grid 7' |
||||
// }, |
||||
// { |
||||
// url: 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/images/muwu.jpg', |
||||
// text: 'Grid 8' |
||||
// }, |
||||
// { |
||||
// url: 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/images/cbd.jpg', |
||||
// text: 'Grid 9' |
||||
// } |
||||
// ] |
||||
} |
||||
}, |
||||
methods: { |
||||
change(e) { |
||||
let { |
||||
index |
||||
} = e.detail |
||||
console.log(index) |
||||
}, |
||||
webTo() { |
||||
this.$emit('goTo') |
||||
} |
||||
} |
||||
} |
||||
</script> |
||||
|
||||
<style> |
||||
/* 头条小程序组件内不能引入字体 */ |
||||
/* #ifdef MP-TOUTIAO */ |
||||
@font-face { |
||||
font-family: uniicons; |
||||
font-weight: normal; |
||||
font-style: normal; |
||||
src: url('~@/static/uni.ttf') format('truetype'); |
||||
} |
||||
|
||||
/* #endif */ |
||||
|
||||
/* #ifndef APP-NVUE */ |
||||
page { |
||||
display: flex; |
||||
flex-direction: column; |
||||
box-sizing: border-box; |
||||
background-color: #efeff4; |
||||
min-height: 100%; |
||||
height: auto; |
||||
} |
||||
|
||||
view { |
||||
font-size: 28rpx; |
||||
line-height: inherit; |
||||
} |
||||
|
||||
.example { |
||||
padding: 0 30rpx 30rpx; |
||||
} |
||||
|
||||
.example-info { |
||||
padding: 30rpx; |
||||
color: #3b4144; |
||||
background: #ffffff; |
||||
} |
||||
|
||||
.example-body { |
||||
text-align: center; |
||||
flex-direction: row; |
||||
flex-wrap: wrap; |
||||
justify-content: center; |
||||
padding: 0; |
||||
font-size: 14rpx; |
||||
background-color: #ffffff; |
||||
} |
||||
|
||||
/* #endif */ |
||||
.example { |
||||
padding: 0 30rpx; |
||||
} |
||||
|
||||
.example-info { |
||||
/* #ifndef APP-NVUE */ |
||||
display: block; |
||||
/* #endif */ |
||||
padding: 30rpx; |
||||
color: #3b4144; |
||||
background-color: #ffffff; |
||||
font-size: 30rpx; |
||||
} |
||||
|
||||
.example-info-text { |
||||
font-size: 28rpx; |
||||
line-height: 36rpx; |
||||
} |
||||
|
||||
|
||||
.example-body { |
||||
flex-direction: column; |
||||
padding: 0rpx; |
||||
padding-bottom: 10px; |
||||
background-color: #ffffff; |
||||
} |
||||
|
||||
.word-btn-white { |
||||
font-size: 18px; |
||||
color: #FFFFFF; |
||||
} |
||||
|
||||
.word-btn { |
||||
/* #ifndef APP-NVUE */ |
||||
display: flex; |
||||
/* #endif */ |
||||
flex-direction: row; |
||||
align-items: center; |
||||
justify-content: center; |
||||
border-radius: 6px; |
||||
height: 48px; |
||||
margin: 15px; |
||||
background-color: #007AFF; |
||||
} |
||||
|
||||
.word-btn--hover { |
||||
background-color: #4ca2ff; |
||||
} |
||||
|
||||
|
||||
.image { |
||||
width: 80rpx; |
||||
height: 80rpx; |
||||
margin-bottom: 20rpx; |
||||
border-radius: 10rpx; |
||||
} |
||||
|
||||
.text { |
||||
font-size: 26rpx; |
||||
line-height: 26rpx; |
||||
width: 104rpx; |
||||
overflow: hidden; |
||||
white-space: nowrap; |
||||
text-overflow: ellipsis; |
||||
color: #3A3C40; |
||||
} |
||||
|
||||
.example-body { |
||||
/* #ifndef APP-NVUE */ |
||||
display: block; |
||||
/* #endif */ |
||||
} |
||||
</style> |
After Width: | Height: | Size: 4.0 KiB |
Loading…
Reference in new issue