zhangzengfei
2021-09-16 38430ddb8612fce15a2f1c940f9bd57d4da3e70b
components/uni-swipe-action-item/uni-swipe-action-item.vue
@@ -1,101 +1,101 @@
<template>
   <view class="uni-swipe">
      <!-- 在微信小程序 app vue端 h5 使用wxs 实现-->
      <!-- #ifdef APP-VUE || MP-WEIXIN || H5 -->
      <view class="uni-swipe_content">
         <view :data-disabled="disabled" :data-position="pos" :change:prop="swipe.sizeReady" :prop="pos" class="uni-swipe_move-box selector-query-hock move-hock"
          @touchstart="swipe.touchstart" @touchmove="swipe.touchmove" @touchend="swipe.touchend" @change="change">
            <view class="uni-swipe_box">
               <slot />
            </view>
<template>
   <view class="uni-swipe">
      <!-- 在微信小程序 app vue端 h5 使用wxs 实现-->
      <!-- #ifdef APP-VUE || MP-WEIXIN || H5 -->
      <view class="uni-swipe_content">
         <view :data-disabled="disabled" :data-position="pos" :change:prop="swipe.sizeReady" :prop="pos" class="uni-swipe_move-box selector-query-hock move-hock"
          @touchstart="swipe.touchstart" @touchmove="swipe.touchmove" @touchend="swipe.touchend" @change="change">
            <view class="uni-swipe_box">
               <slot />
            </view>
            <view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock">
               <!-- 使用 touchend 解决 ios 13 不触发按钮事件的问题-->
               <view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{
                backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',
                fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'
              }"
                class="uni-swipe_button button-hock" @touchend="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view>
            </view>
         </view>
      </view>
      <!-- #endif -->
      <!--  app nvue端 使用 bindingx -->
      <!-- #ifdef APP-NVUE -->
      <view ref="selector-box-hock" class="uni-swipe_content" @horizontalpan="touchstart" @touchend="touchend">
         <view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock" :style="{width:right+'px'}">
            <view ref="button-hock" v-for="(item,index) in options" :key="index" :style="{
        backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',left: right+'px'}"
             class="uni-swipe_button " @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'}">{{ item.text }}</text></view>
         </view>
         <view ref='selector-content-hock' class="uni-swipe_move-box selector-query-hock">
            <view class="uni-swipe_box">
               <slot />
            </view>
         </view>
      </view>
      <!-- #endif -->
      <!-- 在非 app 端、非微信小程序、支付宝小程序、h5端使用 js -->
      <!-- #ifndef APP-PLUS || MP-WEIXIN || MP-ALIPAY || H5 -->
      <view class="uni-swipe_content">
         <view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock">
            <view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{
          backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',
          fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'
        }"
             class="uni-swipe_button button-hock" @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view>
         </view>
         <view ref='selector-content-hock' class="selector-query-hock" @touchstart="touchstart" @touchmove="touchmove"
          @touchend="touchend" :class="{'ani':uniShow}" :style="{transform:moveLeft}">
            <view class="uni-swipe_move-box"  >
               <view class="uni-swipe_box">
                  <slot />
               </view>
            </view>
         </view>
      </view>
      <!-- #endif -->
      <!-- #ifdef MP-ALIPAY -->
      <view class="uni-swipe-box" @touchstart="touchstart" @touchmove="touchmove" @touchend="touchend">
         <view class="viewWidth-hook">
            <movable-area v-if="viewWidth !== 0" class="movable-area" :style="{width:(viewWidth-buttonWidth)+'px'}">
               <movable-view class="movable-view" direction="horizontal" :animation="!transition" :style="{width:viewWidth+'px'}"
                :class="[transition?'transition':'']" :x="x" :disabled="disabledView" @change="onChange">
                  <view class="movable-view-box">
                     <slot></slot>
                  </view>
               </movable-view>
            </movable-area>
         </view>
         <view ref="selector-button-hock" class="uni-swipe_button-group viewWidth-hook">
            <view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{
              backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',
              fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'
            }"
             class="uni-swipe_button button-hock" @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view>
         </view>
      </view>
      <!-- #endif -->
   </view>
</template>
<script src="./index.wxs" module="swipe" lang="wxs"></script>
<script>
   // #ifdef APP-VUE|| MP-WEIXIN || H5
   import mpwxs from './mpwxs'
   // #endif
   // #ifdef APP-NVUE
   import bindingx from './bindingx.js'
   // #endif
   // #ifndef APP-PLUS|| MP-WEIXIN || MP-ALIPAY ||  H5
   import mixins from './mpother'
   // #endif
   // #ifdef MP-ALIPAY
   import mpalipay from './mpalipay'
   // #endif
               <!-- 使用 touchend 解决 ios 13 不触发按钮事件的问题-->
               <view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{
                backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',
                fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'
              }"
                class="uni-swipe_button button-hock" @touchend="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view>
            </view>
         </view>
      </view>
      <!-- #endif -->
      <!--  app nvue端 使用 bindingx -->
      <!-- #ifdef APP-NVUE -->
      <view ref="selector-box-hock" class="uni-swipe_content" @horizontalpan="touchstart" @touchend="touchend">
         <view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock" :style="{width:right+'px'}">
            <view ref="button-hock" v-for="(item,index) in options" :key="index" :style="{
        backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',left: right+'px'}"
             class="uni-swipe_button " @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'}">{{ item.text }}</text></view>
         </view>
         <view ref='selector-content-hock' class="uni-swipe_move-box selector-query-hock">
            <view class="uni-swipe_box">
               <slot />
            </view>
         </view>
      </view>
      <!-- #endif -->
      <!-- 在非 app 端、非微信小程序、支付宝小程序、h5端使用 js -->
      <!-- #ifndef APP-PLUS || MP-WEIXIN || MP-ALIPAY || H5 -->
      <view class="uni-swipe_content">
         <view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock">
            <view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{
          backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',
          fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'
        }"
             class="uni-swipe_button button-hock" @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view>
         </view>
         <view ref='selector-content-hock' class="selector-query-hock" @touchstart="touchstart" @touchmove="touchmove"
          @touchend="touchend" :class="{'ani':uniShow}" :style="{transform:moveLeft}">
            <view class="uni-swipe_move-box"  >
               <view class="uni-swipe_box">
                  <slot />
               </view>
            </view>
         </view>
      </view>
      <!-- #endif -->
      <!-- #ifdef MP-ALIPAY -->
      <view class="uni-swipe-box" @touchstart="touchstart" @touchmove="touchmove" @touchend="touchend">
         <view class="viewWidth-hook">
            <movable-area v-if="viewWidth !== 0" class="movable-area" :style="{width:(viewWidth-buttonWidth)+'px'}">
               <movable-view class="movable-view" direction="horizontal" :animation="!transition" :style="{width:viewWidth+'px'}"
                :class="[transition?'transition':'']" :x="x" :disabled="disabledView" @change="onChange">
                  <view class="movable-view-box">
                     <slot></slot>
                  </view>
               </movable-view>
            </movable-area>
         </view>
         <view ref="selector-button-hock" class="uni-swipe_button-group viewWidth-hook">
            <view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{
              backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',
              fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'
            }"
             class="uni-swipe_button button-hock" @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view>
         </view>
      </view>
      <!-- #endif -->
   </view>
</template>
<script src="./index.wxs" module="swipe" lang="wxs"></script>
<script>
   // #ifdef APP-VUE|| MP-WEIXIN || H5
   import mpwxs from './mpwxs'
   // #endif
   // #ifdef APP-NVUE
   import bindingx from './bindingx.js'
   // #endif
   // #ifndef APP-PLUS|| MP-WEIXIN || MP-ALIPAY ||  H5
   import mixins from './mpother'
   // #endif
   // #ifdef MP-ALIPAY
   import mpalipay from './mpalipay'
   // #endif
   /**
    * SwipeActionItem 滑动操作子组件
@@ -108,163 +108,163 @@
    * @event {Function} click 点击选项按钮时触发事件,e = {content,index} ,content(点击内容)、index(下标)
    * @event {Function} change 组件打开或关闭时触发,true:开启状态;false:关闭状态
    */
   export default {
      // #ifdef APP-VUE|| MP-WEIXIN||H5
      mixins: [mpwxs],
   export default {
      // #ifdef APP-VUE|| MP-WEIXIN||H5
      mixins: [mpwxs],
      // #endif
      // #ifdef APP-NVUE
      mixins: [bindingx],
      // #ifdef APP-NVUE
      mixins: [bindingx],
      // #endif
      // #ifndef APP-PLUS|| MP-WEIXIN || MP-ALIPAY ||  H5
      mixins: [mixins],
      // #ifndef APP-PLUS|| MP-WEIXIN || MP-ALIPAY ||  H5
      mixins: [mixins],
      // #endif
      // #ifdef MP-ALIPAY
      mixins: [mpalipay],
      // #ifdef MP-ALIPAY
      mixins: [mpalipay],
      // #endif
      props: {
         /**
          * 按钮内容
          */
         options: {
            type: Array,
            default () {
               return []
            }
         },
         /**
          * 禁用
          */
         disabled: {
            type: Boolean,
            default: false
         },
         /**
          * 变量控制开关
          */
         show: {
            type: Boolean,
            default: false
         },
         /**
          * 是否自动关闭
          */
         autoClose: {
            type: Boolean,
            default: true
         }
      },
      inject: ['swipeaction']
   }
</script>
<style lang="scss" scoped>
   .uni-swipe {
      overflow: hidden;
   }
   .uni-swipe-box {
      position: relative;
      width: 100%;
   }
   .uni-swipe_content {
      flex: 1;
      position: relative;
   }
   .uni-swipe_move-box {
      /* #ifndef APP-NVUE */
      display: flex;
      /* #endif */
      position: relative;
      flex-direction: row;
   }
   .uni-swipe_box {
      /* #ifndef APP-NVUE */
      display: flex;
      flex-direction: row;
      width: 100%;
      flex-shrink: 0;
      /* #endif */
      /* #ifdef APP-NVUE */
      flex: 1;
      /* #endif */
      font-size: 14px;
      background-color: #fff;
   }
   .uni-swipe_button-group {
      /* #ifndef APP-VUE|| MP-WEIXIN||H5 */
      position: absolute;
      top: 0;
      right: 0;
      bottom: 0;
      z-index: 0;
      /* #endif */
      /* #ifndef APP-NVUE */
      display: flex;
      flex-shrink: 0;
      /* #endif */
      flex-direction: row;
   }
   .uni-swipe_button {
      /* #ifdef APP-NVUE */
      position: absolute;
      left: 0;
      top: 0;
      bottom: 0;
      /* #endif */
      /* #ifndef APP-NVUE */
      display: flex;
      /* #endif */
      flex-direction: row;
      justify-content: center;
      align-items: center;
      padding: 0 20px;
   }
   .uni-swipe_button-text {
      /* #ifndef APP-NVUE */
      flex-shrink: 0;
      /* #endif */
      font-size: 14px;
   }
   .ani {
      transition-property: transform;
      transition-duration: 0.3s;
      transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1);
      props: {
         /**
          * 按钮内容
          */
         options: {
            type: Array,
            default () {
               return []
            }
         },
         /**
          * 禁用
          */
         disabled: {
            type: Boolean,
            default: false
         },
         /**
          * 变量控制开关
          */
         show: {
            type: Boolean,
            default: false
         },
         /**
          * 是否自动关闭
          */
         autoClose: {
            type: Boolean,
            default: true
         }
      },
      inject: ['swipeaction']
   }
   /* #ifdef MP-ALIPAY */
   .movable-area {
      width: 300px;
      height: 100%;
      height: 45px;
   }
   .movable-view {
      position: relative;
      width: 160%;
      height: 45px;
      z-index: 2;
   }
</script>
<style lang="scss" scoped>
   .uni-swipe {
      overflow: hidden;
   }
   .uni-swipe-box {
      position: relative;
      width: 100%;
   }
   .uni-swipe_content {
      flex: 1;
      position: relative;
   }
   .uni-swipe_move-box {
      /* #ifndef APP-NVUE */
      display: flex;
      /* #endif */
      position: relative;
      flex-direction: row;
   }
   .uni-swipe_box {
      /* #ifndef APP-NVUE */
      display: flex;
      flex-direction: row;
      width: 100%;
      flex-shrink: 0;
      /* #endif */
      /* #ifdef APP-NVUE */
      flex: 1;
      /* #endif */
      font-size: 14px;
      background-color: #fff;
   }
   .uni-swipe_button-group {
      /* #ifndef APP-VUE|| MP-WEIXIN||H5 */
      position: absolute;
      top: 0;
      right: 0;
      bottom: 0;
      z-index: 0;
      /* #endif */
      /* #ifndef APP-NVUE */
      display: flex;
      flex-shrink: 0;
      /* #endif */
      flex-direction: row;
   }
   .uni-swipe_button {
      /* #ifdef APP-NVUE */
      position: absolute;
      left: 0;
      top: 0;
      bottom: 0;
      /* #endif */
      /* #ifndef APP-NVUE */
      display: flex;
      /* #endif */
      flex-direction: row;
      justify-content: center;
      align-items: center;
      padding: 0 20px;
   }
   .uni-swipe_button-text {
      /* #ifndef APP-NVUE */
      flex-shrink: 0;
      /* #endif */
      font-size: 14px;
   }
   .ani {
      transition-property: transform;
      transition-duration: 0.3s;
      transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1);
   }
   /* #ifdef MP-ALIPAY */
   .movable-area {
      width: 300px;
      height: 100%;
      height: 45px;
   }
   .movable-view {
      position: relative;
      width: 160%;
      height: 45px;
      z-index: 2;
   }
   .transition {
      transition: all 0.3s;
   }
   .movable-view-box {
      width: 100%;
      height: 100%;
      background-color: #fff;
   .movable-view-box {
      width: 100%;
      height: 100%;
      background-color: #fff;
   }
   /* #endif */
   /* #endif */
</style>