index.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <template>
  2. <uni-shadow-root class="vant-action-sheet-index"><van-popup :show="show" position="bottom" :round="round" :z-index="zIndex" :overlay="overlay" custom-class="van-action-sheet" :safe-area-inset-bottom="safeAreaInsetBottom" :close-on-click-overlay="closeOnClickOverlay" @close="onClickOverlay">
  3. <view v-if="title" class="van-hairline--bottom van-action-sheet__header">
  4. {{ title }}
  5. <van-icon name="close" custom-class="van-action-sheet__close" @click="onClose"></van-icon>
  6. </view>
  7. <view v-if="description" class="van-action-sheet__description">
  8. {{ description }}
  9. </view>
  10. <view v-if="actions && actions.length">
  11. <button v-for="(item,index) in (actions)" :key="item.index" :open-type="item.openType" :style="item.color ? 'color: ' + item.color : ''" :class="(utils.bem('action-sheet__item', { disabled: item.disabled || item.loading }))+' van-hairline--top '+(item.className || '')" hover-class="van-action-sheet__item--hover" :data-index="index" @click="onSelect" @getuserinfo="bindGetUserInfo" @contact="bindContact" @getphonenumber="bindGetPhoneNumber" @error="bindError" @launchapp="bindLaunchApp" @opensetting="bindOpenSetting" :lang="lang" :session-from="sessionFrom" :send-message-title="sendMessageTitle" :send-message-path="sendMessagePath" :send-message-img="sendMessageImg" :show-message-card="showMessageCard" :app-parameter="appParameter">
  12. <block v-if="(!item.loading)">
  13. {{ item.name }}
  14. <text v-if="item.subname" class="van-action-sheet__subname">{{ item.subname }}</text>
  15. </block>
  16. <van-loading v-else custom-class="van-action-sheet__loading" size="20px"></van-loading>
  17. </button>
  18. </view>
  19. <slot></slot>
  20. <view v-if="cancelText" class="van-action-sheet__cancel" hover-class="van-action-sheet__cancel--hover" hover-stay-time="70" @click="onCancel">
  21. {{ cancelText }}
  22. </view>
  23. </van-popup></uni-shadow-root>
  24. </template>
  25. <wxs src="../wxs/utils.wxs" module="utils"></wxs>
  26. <script>
  27. import VanIcon from '../icon/index.vue'
  28. import VanPopup from '../popup/index.vue'
  29. import VanLoading from '../loading/index.vue'
  30. global['__wxVueOptions'] = {components:{'van-icon': VanIcon,'van-popup': VanPopup,'van-loading': VanLoading}}
  31. global['__wxRoute'] = 'vant/action-sheet/index'
  32. import { VantComponent } from '../common/component';
  33. import { button } from '../mixins/button';
  34. import { openType } from '../mixins/open-type';
  35. VantComponent({
  36. mixins: [button, openType],
  37. props: {
  38. show: Boolean,
  39. title: String,
  40. cancelText: String,
  41. description: String,
  42. round: {
  43. type: Boolean,
  44. value: true,
  45. },
  46. zIndex: {
  47. type: Number,
  48. value: 100,
  49. },
  50. actions: {
  51. type: Array,
  52. value: [],
  53. },
  54. overlay: {
  55. type: Boolean,
  56. value: true,
  57. },
  58. closeOnClickOverlay: {
  59. type: Boolean,
  60. value: true,
  61. },
  62. closeOnClickAction: {
  63. type: Boolean,
  64. value: true,
  65. },
  66. safeAreaInsetBottom: {
  67. type: Boolean,
  68. value: true,
  69. },
  70. },
  71. methods: {
  72. onSelect(event) {
  73. const { index } = event.currentTarget.dataset;
  74. const item = this.data.actions[index];
  75. if (item && !item.disabled && !item.loading) {
  76. this.$emit('select', item);
  77. if (this.data.closeOnClickAction) {
  78. this.onClose();
  79. }
  80. }
  81. },
  82. onCancel() {
  83. this.$emit('cancel');
  84. },
  85. onClose() {
  86. this.$emit('close');
  87. },
  88. onClickOverlay() {
  89. this.$emit('click-overlay');
  90. this.onClose();
  91. },
  92. },
  93. });
  94. export default global['__wxComponents']['vant/action-sheet/index']
  95. </script>
  96. <style platform="mp-weixin">
  97. @import '../common/index.css';.van-action-sheet{max-height:90%!important;max-height:var(--action-sheet-max-height,90%)!important;color:#323233;color:var(--action-sheet-item-text-color,#323233)}.van-action-sheet__cancel,.van-action-sheet__item{text-align:center;font-size:16px;font-size:var(--action-sheet-item-font-size,16px);line-height:50px;line-height:var(--action-sheet-item-height,50px);background-color:#fff;background-color:var(--action-sheet-item-background,#fff)}.van-action-sheet__cancel--hover,.van-action-sheet__item--hover{background-color:#f2f3f5;background-color:var(--active-color,#f2f3f5)}.van-action-sheet__cancel:before{display:block;content:" ";height:8px;height:var(--action-sheet-cancel-padding-top,8px);background-color:#f7f8fa;background-color:var(--action-sheet-cancel-padding-color,#f7f8fa)}.van-action-sheet__item--disabled{color:#c8c9cc;color:var(--action-sheet-item-disabled-text-color,#c8c9cc)}.van-action-sheet__item--disabled.van-action-sheet__item--hover{background-color:#fff;background-color:var(--action-sheet-item-background,#fff)}.van-action-sheet__subname{margin-left:4px;margin-left:var(--padding-base,4px);font-size:12px;font-size:var(--action-sheet-subname-font-size,12px);color:#646566;color:var(--action-sheet-subname-color,#646566)}.van-action-sheet__header{text-align:center;font-weight:500;font-weight:var(--font-weight-bold,500);font-size:16px;font-size:var(--action-sheet-header-font-size,16px);line-height:44px;line-height:var(--action-sheet-header-height,44px)}.van-action-sheet__description{text-align:center;padding:16px;padding:var(--padding-md,16px);color:#646566;color:var(--action-sheet-description-color,#646566);font-size:14px;font-size:var(--action-sheet-description-font-size,14px);line-height:20px;line-height:var(--action-sheet-description-line-height,20px)}.van-action-sheet__close{position:absolute!important;top:0;right:0;line-height:inherit!important;padding:0 12px;padding:var(--action-sheet-close-icon-padding,0 12px);font-size:18px!important;font-size:var(--action-sheet-close-icon-size,18px)!important;color:#969799;color:var(--action-sheet-close-icon-color,#969799)}.van-action-sheet__loading{display:-webkit-flex!important;display:flex!important;height:50px;height:var(--action-sheet-item-height,50px)}
  98. </style>