¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <u-popup |
| | | mode="center" |
| | | :zoom="zoom" |
| | | :show="show" |
| | | :customStyle="{ |
| | | borderRadius: '6px', |
| | | overflow: 'hidden', |
| | | marginTop: `-${$u.addUnit(negativeTop)}` |
| | | }" |
| | | :closeOnClickOverlay="closeOnClickOverlay" |
| | | :safeAreaInsetBottom="false" |
| | | :duration="400" |
| | | @click="clickHandler" |
| | | > |
| | | <view |
| | | class="u-modal" |
| | | :style="{ |
| | | width: $u.addUnit(width), |
| | | }" |
| | | > |
| | | <text |
| | | class="u-modal__title" |
| | | v-if="title" |
| | | >{{ title }}</text> |
| | | <view |
| | | class="u-modal__content" |
| | | :style="{ |
| | | paddingTop: `${title ? 12 : 25}px` |
| | | }" |
| | | > |
| | | <slot> |
| | | <text class="u-modal__content__text">{{ content }}</text> |
| | | </slot> |
| | | </view> |
| | | <view |
| | | class="u-modal__button-group--confirm-button" |
| | | v-if="$slots.confirmButton" |
| | | > |
| | | <slot name="confirmButton"></slot> |
| | | </view> |
| | | <template v-else> |
| | | <u-line></u-line> |
| | | <view |
| | | class="u-modal__button-group" |
| | | :style="{ |
| | | flexDirection: buttonReverse ? 'row-reverse' : 'row' |
| | | }" |
| | | > |
| | | <view |
| | | class="u-modal__button-group__wrapper u-modal__button-group__wrapper--cancel" |
| | | :hover-stay-time="150" |
| | | hover-class="u-modal__button-group__wrapper--hover" |
| | | :class="[showCancelButton && !showConfirmButton && 'u-modal__button-group__wrapper--only-cancel']" |
| | | v-if="showCancelButton" |
| | | @tap="cancelHandler" |
| | | > |
| | | <text |
| | | class="u-modal__button-group__wrapper__text" |
| | | :style="{ |
| | | color: cancelColor |
| | | }" |
| | | >{{ cancelText }}</text> |
| | | </view> |
| | | <u-line |
| | | direction="column" |
| | | v-if="showConfirmButton && showCancelButton" |
| | | ></u-line> |
| | | <view |
| | | class="u-modal__button-group__wrapper u-modal__button-group__wrapper--confirm" |
| | | :hover-stay-time="150" |
| | | hover-class="u-modal__button-group__wrapper--hover" |
| | | :class="[!showCancelButton && showConfirmButton && 'u-modal__button-group__wrapper--only-confirm']" |
| | | v-if="showConfirmButton" |
| | | @tap="confirmHandler" |
| | | > |
| | | <u-loading-icon v-if="loading"></u-loading-icon> |
| | | <text |
| | | v-else |
| | | class="u-modal__button-group__wrapper__text" |
| | | :style="{ |
| | | color: confirmColor |
| | | }" |
| | | >{{ confirmText }}</text> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | </view> |
| | | </u-popup> |
| | | </template> |
| | | |
| | | <script> |
| | | import props from './props.js'; |
| | | /** |
| | | * Modal æ¨¡ææ¡ |
| | | * @description å¼¹åºæ¨¡ææ¡ï¼å¸¸ç¨äºæ¶æ¯æç¤ºãæ¶æ¯ç¡®è®¤ãå¨å½å页é¢å
宿ç¹å®çäº¤äºæä½ã |
| | | * @tutorial https://www.uviewui.com/components/modul.html |
| | | * @property {Boolean} show æ¯å¦æ¾ç¤ºæ¨¡ææ¡ï¼è¯·èµå¼ç»show ï¼é»è®¤ false ï¼ |
| | | * @property {String} title æ é¢å
容 |
| | | * @property {String} content æ¨¡ææ¡å
容ï¼å¦ä¼ å
¥slotå
容ï¼åæ¤åæ°æ æ |
| | | * @property {String} confirmText 确认æé®çæå ï¼é»è®¤ '确认' ï¼ |
| | | * @property {String} cancelText åæ¶æé®çæå ï¼é»è®¤ 'åæ¶' ï¼ |
| | | * @property {Boolean} showConfirmButton æ¯å¦æ¾ç¤ºç¡®è®¤æé® ï¼é»è®¤ true ï¼ |
| | | * @property {Boolean} showCancelButton æ¯å¦æ¾ç¤ºåæ¶æé® ï¼é»è®¤ false ï¼ |
| | | * @property {String} confirmColor 确认æé®çé¢è² ï¼é»è®¤ '#2979ff' ï¼ |
| | | * @property {String} cancelColor åæ¶æé®çé¢è² ï¼é»è®¤ '#606266' ï¼ |
| | | * @property {Boolean} buttonReverse 对è°ç¡®è®¤ååæ¶çä½ç½® ï¼é»è®¤ false ï¼ |
| | | * @property {Boolean} zoom æ¯å¦å¼å¯ç¼©æ¾æ¨¡å¼ ï¼é»è®¤ true ï¼ |
| | | * @property {Boolean} asyncClose æ¯å¦å¼æ¥å
³éï¼åªå¯¹ç¡®å®æé®ææï¼è§ä¸æ¹è¯´æ ï¼é»è®¤ false ï¼ |
| | | * @property {Boolean} closeOnClickOverlay æ¯å¦å
许ç¹å»é®ç½©å
³éModal ï¼é»è®¤ false ï¼ |
| | | * @property {String | Number} negativeTop å¾ä¸åç§»çå¼ï¼ç»ä¸ä¸ªè´çmargin-topï¼å¾ä¸åç§»ï¼é¿å
åé®çéåçæ
åµï¼åä½ä»»æï¼æ°å¼åé»è®¤ä¸ºpxåä½ ï¼é»è®¤ 0 ï¼ |
| | | * @property {String | Number} width modal宽度ï¼ä¸æ¯æç¾åæ¯ï¼å¯ä»¥æ°å¼ï¼pxï¼rpxåä½ ï¼é»è®¤ '650rpx' ï¼ |
| | | * @property {String} confirmButtonShape 确认æé®çæ ·å¼,å¦è®¾ç½®ï¼å°ä¸ä¼æ¾ç¤ºåæ¶æé® |
| | | * @event {Function} confirm ç¹å»ç¡®è®¤æé®æ¶è§¦å |
| | | * @event {Function} cancel ç¹å»åæ¶æé®æ¶è§¦å |
| | | * @event {Function} close ç¹å»é®ç½©å
³éåºåï¼closeOnClickOverlay为trueææ |
| | | * @example <u-modal :show="true" title="title" content="content"></u-modal> |
| | | */ |
| | | export default { |
| | | name: 'u-modal', |
| | | mixins: [uni.$u.mpMixin, uni.$u.mixin, props], |
| | | data() { |
| | | return { |
| | | loading: false |
| | | } |
| | | }, |
| | | watch: { |
| | | show(n) { |
| | | // 为äºé¿å
ç¬¬ä¸æ¬¡æå¼modalï¼å使ç¨äºå¼æ¥å
³éçloading |
| | | // ç¬¬äºæ¬¡æå¼modalæ¶ï¼loadingä¾ç¶åå¨çæ
åµ |
| | | if (n && this.loading) this.loading = false |
| | | } |
| | | }, |
| | | methods: { |
| | | // ç¹å»ç¡®å®æé® |
| | | confirmHandler() { |
| | | // 妿é
ç½®äºå¼æ¥å
³éï¼å°æé®å¼ä¸ºloadingç¶æ |
| | | if (this.asyncClose) { |
| | | this.loading = true; |
| | | } |
| | | this.$emit('confirm') |
| | | }, |
| | | // ç¹å»åæ¶æé® |
| | | cancelHandler() { |
| | | this.$emit('cancel') |
| | | }, |
| | | // ç¹å»é®ç½© |
| | | // ä»åç䏿¥è¯´ï¼modalçé®ç½©ç¹å»ï¼å¹¶ä¸æ¯ççç¹å»å°äºé®ç½© |
| | | // å 为modalä¾èµäºpopupçä¸é¨å¼¹çªç±»åï¼ä¸é¨å¼¹çªæ¯è¾ç¹æ®ï¼è½ç¶æé®ç½©ï¼ä½æ¯ä¸ºäºè®©å¼¹çªå
容è½flexå±
ä¸ |
| | | // å¤äºä¸ä¸ªéæçé®ç½©ï¼æ¤éæçé®ç½©ä¼è¦çå¨ç°è²çé®ç½©ä¸ï¼æä»¥å®é
䏿¯ç¹å»ä¸å°ç°è²é®ç½©çï¼popupå
é¨å¨ |
| | | // éæé®ç½©çåå
ç´ åäº.stopå¤çï¼æä»¥ç¹å»å
容åºï¼ä¹ä¸ä¼å¯¼è´è¯¯è§¦å |
| | | clickHandler() { |
| | | if (this.closeOnClickOverlay) { |
| | | this.$emit('close') |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "../../libs/css/components.scss"; |
| | | $u-modal-border-radius: 6px; |
| | | |
| | | .u-modal { |
| | | width: 650rpx; |
| | | border-radius: $u-modal-border-radius; |
| | | overflow: hidden; |
| | | |
| | | &__title { |
| | | font-size: 16px; |
| | | font-weight: bold; |
| | | color: $u-content-color; |
| | | text-align: center; |
| | | padding-top: 25px; |
| | | } |
| | | |
| | | &__content { |
| | | padding: 12px 25px 25px 25px; |
| | | @include flex; |
| | | justify-content: center; |
| | | |
| | | &__text { |
| | | font-size: 15px; |
| | | color: $u-content-color; |
| | | flex: 1; |
| | | } |
| | | } |
| | | |
| | | &__button-group { |
| | | @include flex; |
| | | |
| | | &--confirm-button { |
| | | flex-direction: column; |
| | | padding: 0px 25px 15px 25px; |
| | | } |
| | | |
| | | &__wrapper { |
| | | flex: 1; |
| | | @include flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | height: 48px; |
| | | |
| | | &--confirm, |
| | | &--only-cancel { |
| | | border-bottom-right-radius: $u-modal-border-radius; |
| | | } |
| | | |
| | | &--cancel, |
| | | &--only-confirm { |
| | | border-bottom-left-radius: $u-modal-border-radius; |
| | | } |
| | | |
| | | &--hover { |
| | | background-color: $u-bg-color; |
| | | } |
| | | |
| | | &__text { |
| | | color: $u-content-color; |
| | | font-size: 16px; |
| | | text-align: center; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |