| | |
| | | <template> |
| | | <view class="uni-goods-nav"> |
| | | <!-- 底部占位 --> |
| | | <view class="uni-tab__seat" /> |
| | | <view class="uni-tab__cart-box flex"> |
| | | <view class="flex uni-tab__cart-sub-left"> |
| | | <view v-for="(item,index) in options" :key="index" class="flex uni-tab__cart-button-left uni-tab__shop-cart" @click="onClick(index,item)"> |
| | | <view class="uni-tab__icon"> |
| | | <uni-icons :type="item.icon" size="20" color="#646566"></uni-icons> |
| | | <!-- <image class="image" :src="item.icon" mode="widthFix" /> --> |
| | | </view> |
| | | <text class="uni-tab__text">{{ item.text }}</text> |
| | | <view class="flex uni-tab__dot-box"> |
| | | <text v-if="item.info" :class="{ 'uni-tab__dots': item.info > 9 }" class="uni-tab__dot " :style="{'backgroundColor':item.infoBackgroundColor?item.infoBackgroundColor:'#ff0000', |
| | | color:item.infoColor?item.infoColor:'#fff' |
| | | }">{{ item.info }}</text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view :class="{'uni-tab__right':fill}" class="flex uni-tab__cart-sub-right "> |
| | | <view v-for="(item,index) in buttonGroup" :key="index" :style="{background:item.backgroundColor,color:item.color}" |
| | | class="flex uni-tab__cart-button-right" @click="buttonClick(index,item)"><text :style="{color:item.color}" class="uni-tab__cart-button-right-text">{{ item.text }}</text></view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | initVueI18n |
| | | } from '@dcloudio/uni-i18n' |
| | | import messages from './i18n/index.js' |
| | | const { t } = initVueI18n(messages) |
| | | /** |
| | | * GoodsNav 商品导航 |
| | | * @description 商品加入购物车、立即购买等 |
| | | * @tutorial https://ext.dcloud.net.cn/plugin?id=865 |
| | | * @property {Array} options 组件参数 |
| | | * @property {Array} buttonGroup 组件按钮组参数 |
| | | * @property {Boolean} fill = [true | false] 组件按钮组参数 |
| | | * @event {Function} click 左侧点击事件 |
| | | * @event {Function} buttonClick 右侧按钮组点击事件 |
| | | * @example <uni-goods-nav :fill="true" options="" buttonGroup="buttonGroup" @click="" @buttonClick="" /> |
| | | */ |
| | | export default { |
| | | name: 'UniGoodsNav', |
| | | emits:['click','buttonClick'], |
| | | props: { |
| | | options: { |
| | | type: Array, |
| | | default () { |
| | | return [{ |
| | | icon: 'shop', |
| | | text: t("uni-goods-nav.options.shop"), |
| | | }, { |
| | | icon: 'cart', |
| | | text: t("uni-goods-nav.options.cart") |
| | | }] |
| | | } |
| | | }, |
| | | buttonGroup: { |
| | | type: Array, |
| | | default () { |
| | | return [{ |
| | | text: t("uni-goods-nav.buttonGroup.addToCart"), |
| | | backgroundColor: 'linear-gradient(90deg, #FFCD1E, #FF8A18)', |
| | | color: '#fff' |
| | | }, |
| | | { |
| | | text: t("uni-goods-nav.buttonGroup.buyNow"), |
| | | backgroundColor: 'linear-gradient(90deg, #FE6035, #EF1224)', |
| | | color: '#fff' |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | fill: { |
| | | type: Boolean, |
| | | default: false |
| | | } |
| | | }, |
| | | methods: { |
| | | onClick(index, item) { |
| | | this.$emit('click', { |
| | | index, |
| | | content: item, |
| | | }) |
| | | }, |
| | | buttonClick(index, item) { |
| | | if (uni.report) { |
| | | uni.report(item.text, item.text) |
| | | } |
| | | this.$emit('buttonClick', { |
| | | index, |
| | | content: item |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .flex { |
| | | /* #ifndef APP-NVUE */ |
| | | display: flex; |
| | | /* #endif */ |
| | | flex-direction: row; |
| | | } |
| | | |
| | | .uni-goods-nav { |
| | | /* #ifndef APP-NVUE */ |
| | | display: flex; |
| | | /* #endif */ |
| | | flex: 1; |
| | | flex-direction: row; |
| | | } |
| | | |
| | | .uni-tab__cart-box { |
| | | flex: 1; |
| | | height: 50px; |
| | | background-color: #fff; |
| | | z-index: 900; |
| | | } |
| | | |
| | | .uni-tab__cart-sub-left { |
| | | padding: 0 5px; |
| | | } |
| | | |
| | | .uni-tab__cart-sub-right { |
| | | flex: 1; |
| | | } |
| | | |
| | | .uni-tab__right { |
| | | margin: 5px 0; |
| | | margin-right: 10px; |
| | | border-radius: 100px; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .uni-tab__cart-button-left { |
| | | /* #ifndef APP-NVUE */ |
| | | display: flex; |
| | | /* #endif */ |
| | | // flex: 1; |
| | | position: relative; |
| | | justify-content: center; |
| | | align-items: center; |
| | | flex-direction: column; |
| | | margin: 0 10px; |
| | | /* #ifdef H5 */ |
| | | cursor: pointer; |
| | | /* #endif */ |
| | | } |
| | | |
| | | .uni-tab__icon { |
| | | width: 18px; |
| | | height: 18px; |
| | | } |
| | | |
| | | .image { |
| | | width: 18px; |
| | | height: 18px; |
| | | } |
| | | |
| | | .uni-tab__text { |
| | | margin-top: 3px; |
| | | font-size: 12px; |
| | | color: #646566; |
| | | } |
| | | |
| | | .uni-tab__cart-button-right { |
| | | /* #ifndef APP-NVUE */ |
| | | display: flex; |
| | | flex-direction: column; |
| | | /* #endif */ |
| | | flex: 1; |
| | | justify-content: center; |
| | | align-items: center; |
| | | /* #ifdef H5 */ |
| | | cursor: pointer; |
| | | /* #endif */ |
| | | } |
| | | |
| | | .uni-tab__cart-button-right-text { |
| | | font-size: 14px; |
| | | color: #fff; |
| | | } |
| | | |
| | | .uni-tab__cart-button-right:active { |
| | | opacity: 0.7; |
| | | } |
| | | |
| | | .uni-tab__dot-box { |
| | | /* #ifndef APP-NVUE */ |
| | | display: flex; |
| | | flex-direction: column; |
| | | /* #endif */ |
| | | position: absolute; |
| | | right: -2px; |
| | | top: 2px; |
| | | justify-content: center; |
| | | align-items: center; |
| | | // width: 0; |
| | | // height: 0; |
| | | } |
| | | |
| | | .uni-tab__dot { |
| | | // width: 30rpx; |
| | | // height: 30rpx; |
| | | padding: 0 4px; |
| | | line-height: 15px; |
| | | color: #ffffff; |
| | | text-align: center; |
| | | font-size: 12px; |
| | | background-color: #ff0000; |
| | | border-radius: 15px; |
| | | } |
| | | |
| | | .uni-tab__dots { |
| | | padding: 0 4px; |
| | | // width: auto; |
| | | border-radius: 15px; |
| | | } |
| | | </style> |
| | | <template>
|
| | | <view class="uni-goods-nav">
|
| | | <!-- 底部占位 -->
|
| | | <view class="uni-tab__seat" />
|
| | | <view class="uni-tab__cart-box flex">
|
| | | <view class="flex uni-tab__cart-sub-left">
|
| | | <view v-for="(item,index) in options" :key="index" class="flex uni-tab__cart-button-left uni-tab__shop-cart" @click="onClick(index,item)">
|
| | | <view class="uni-tab__icon">
|
| | | <uni-icons :type="item.icon" size="20" color="#646566"></uni-icons>
|
| | | <!-- <image class="image" :src="item.icon" mode="widthFix" /> -->
|
| | | </view>
|
| | | <text class="uni-tab__text">{{ item.text }}</text>
|
| | | <view class="flex uni-tab__dot-box">
|
| | | <text v-if="item.info" :class="{ 'uni-tab__dots': item.info > 9 }" class="uni-tab__dot " :style="{'backgroundColor':item.infoBackgroundColor?item.infoBackgroundColor:'#ff0000',
|
| | | color:item.infoColor?item.infoColor:'#fff'
|
| | | }">{{ item.info }}</text>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | <view :class="{'uni-tab__right':fill}" class="flex uni-tab__cart-sub-right ">
|
| | | <view v-for="(item,index) in buttonGroup" :key="index" :style="{background:item.backgroundColor,color:item.color}"
|
| | | class="flex uni-tab__cart-button-right" @click="buttonClick(index,item)"><text :style="{color:item.color}" class="uni-tab__cart-button-right-text">{{ item.text }}</text></view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </template>
|
| | |
|
| | | <script>
|
| | | import {
|
| | | initVueI18n
|
| | | } from '@dcloudio/uni-i18n'
|
| | | import messages from './i18n/index.js'
|
| | | const { t } = initVueI18n(messages)
|
| | | /**
|
| | | * GoodsNav 商品导航
|
| | | * @description 商品加入购物车、立即购买等
|
| | | * @tutorial https://ext.dcloud.net.cn/plugin?id=865
|
| | | * @property {Array} options 组件参数
|
| | | * @property {Array} buttonGroup 组件按钮组参数
|
| | | * @property {Boolean} fill = [true | false] 组件按钮组参数
|
| | | * @event {Function} click 左侧点击事件
|
| | | * @event {Function} buttonClick 右侧按钮组点击事件
|
| | | * @example <uni-goods-nav :fill="true" options="" buttonGroup="buttonGroup" @click="" @buttonClick="" />
|
| | | */
|
| | | export default {
|
| | | name: 'UniGoodsNav',
|
| | | emits:['click','buttonClick'],
|
| | | props: {
|
| | | options: {
|
| | | type: Array,
|
| | | default () {
|
| | | return [{
|
| | | icon: 'shop',
|
| | | text: t("uni-goods-nav.options.shop"),
|
| | | }, {
|
| | | icon: 'cart',
|
| | | text: t("uni-goods-nav.options.cart")
|
| | | }]
|
| | | }
|
| | | },
|
| | | buttonGroup: {
|
| | | type: Array,
|
| | | default () {
|
| | | return [{
|
| | | text: t("uni-goods-nav.buttonGroup.addToCart"),
|
| | | backgroundColor: 'linear-gradient(90deg, #FFCD1E, #FF8A18)',
|
| | | color: '#fff'
|
| | | },
|
| | | {
|
| | | text: t("uni-goods-nav.buttonGroup.buyNow"),
|
| | | backgroundColor: 'linear-gradient(90deg, #FE6035, #EF1224)',
|
| | | color: '#fff'
|
| | | }
|
| | | ]
|
| | | }
|
| | | },
|
| | | fill: {
|
| | | type: Boolean,
|
| | | default: false
|
| | | }
|
| | | },
|
| | | methods: {
|
| | | onClick(index, item) {
|
| | | this.$emit('click', {
|
| | | index,
|
| | | content: item,
|
| | | })
|
| | | },
|
| | | buttonClick(index, item) {
|
| | | if (uni.report) {
|
| | | uni.report(item.text, item.text)
|
| | | }
|
| | | this.$emit('buttonClick', {
|
| | | index,
|
| | | content: item
|
| | | })
|
| | | }
|
| | | }
|
| | | }
|
| | | </script>
|
| | |
|
| | | <style lang="scss" scoped>
|
| | | .flex {
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | /* #endif */
|
| | | flex-direction: row;
|
| | | }
|
| | |
|
| | | .uni-goods-nav {
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | /* #endif */
|
| | | flex: 1;
|
| | | flex-direction: row;
|
| | | }
|
| | |
|
| | | .uni-tab__cart-box {
|
| | | flex: 1;
|
| | | height: 50px;
|
| | | background-color: #fff;
|
| | | z-index: 900;
|
| | | }
|
| | |
|
| | | .uni-tab__cart-sub-left {
|
| | | padding: 0 5px;
|
| | | }
|
| | |
|
| | | .uni-tab__cart-sub-right {
|
| | | flex: 1;
|
| | | }
|
| | |
|
| | | .uni-tab__right {
|
| | | margin: 5px 0;
|
| | | margin-right: 10px;
|
| | | border-radius: 100px;
|
| | | overflow: hidden;
|
| | | }
|
| | |
|
| | | .uni-tab__cart-button-left {
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | /* #endif */
|
| | | // flex: 1;
|
| | | position: relative;
|
| | | justify-content: center;
|
| | | align-items: center;
|
| | | flex-direction: column;
|
| | | margin: 0 10px;
|
| | | /* #ifdef H5 */
|
| | | cursor: pointer;
|
| | | /* #endif */
|
| | | }
|
| | |
|
| | | .uni-tab__icon {
|
| | | width: 18px;
|
| | | height: 18px;
|
| | | }
|
| | |
|
| | | .image {
|
| | | width: 18px;
|
| | | height: 18px;
|
| | | }
|
| | |
|
| | | .uni-tab__text {
|
| | | margin-top: 3px;
|
| | | font-size: 12px;
|
| | | color: #646566;
|
| | | }
|
| | |
|
| | | .uni-tab__cart-button-right {
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | flex-direction: column;
|
| | | /* #endif */
|
| | | flex: 1;
|
| | | justify-content: center;
|
| | | align-items: center;
|
| | | /* #ifdef H5 */
|
| | | cursor: pointer;
|
| | | /* #endif */
|
| | | }
|
| | |
|
| | | .uni-tab__cart-button-right-text {
|
| | | font-size: 14px;
|
| | | color: #fff;
|
| | | }
|
| | |
|
| | | .uni-tab__cart-button-right:active {
|
| | | opacity: 0.7;
|
| | | }
|
| | |
|
| | | .uni-tab__dot-box {
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | flex-direction: column;
|
| | | /* #endif */
|
| | | position: absolute;
|
| | | right: -2px;
|
| | | top: 2px;
|
| | | justify-content: center;
|
| | | align-items: center;
|
| | | // width: 0;
|
| | | // height: 0;
|
| | | }
|
| | |
|
| | | .uni-tab__dot {
|
| | | // width: 30rpx;
|
| | | // height: 30rpx;
|
| | | padding: 0 4px;
|
| | | line-height: 15px;
|
| | | color: #ffffff;
|
| | | text-align: center;
|
| | | font-size: 12px;
|
| | | background-color: #ff0000;
|
| | | border-radius: 15px;
|
| | | }
|
| | |
|
| | | .uni-tab__dots {
|
| | | padding: 0 4px;
|
| | | // width: auto;
|
| | | border-radius: 15px;
|
| | | }
|
| | | </style>
|