From 42af89269d965340e8cc5fc0941620668854780d Mon Sep 17 00:00:00 2001 From: queenwuli <942534046@qq.com> Date: Mon, 04 Jan 2021 17:08:55 +0800 Subject: [PATCH] gx --- hive-app/components/uni-collapse-item/uni-collapse-item.vue | 212 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 212 insertions(+), 0 deletions(-) diff --git a/hive-app/components/uni-collapse-item/uni-collapse-item.vue b/hive-app/components/uni-collapse-item/uni-collapse-item.vue new file mode 100644 index 0000000..ffdd070 --- /dev/null +++ b/hive-app/components/uni-collapse-item/uni-collapse-item.vue @@ -0,0 +1,212 @@ +<template> + <view :class="{ 'uni-collapse-cell--disabled': disabled,'uni-collapse-cell--notdisabled': !disabled, 'uni-collapse-cell--open': isOpen,'uni-collapse-cell--hide':!isOpen }" + class="uni-collapse-cell"> + <view class="uni-collapse-cell__title" @click="onClick"> + <image v-if="thumb" :src="thumb" class="uni-collapse-cell__title-img" /> + <text class="uni-collapse-cell__title-text">{{ title }}</text> + <!-- #ifdef MP-ALIPAY --> + <view :class="{ 'uni-collapse-cell__title-arrow-active': isOpen, 'uni-collapse-cell--animation': showAnimation === true }" + class="uni-collapse-cell__title-arrow"> + <uni-icons color="#bbb" size="20" type="arrowdown" /> + </view> + <!-- #endif --> + <!-- #ifndef MP-ALIPAY --> + <uni-icons :class="{ 'uni-collapse-cell__title-arrow-active': isOpen, 'uni-collapse-cell--animation': showAnimation === true }" + class="uni-collapse-cell__title-arrow" color="#bbb" size="20" type="arrowdown" /> + <!-- #endif --> + </view> + <view :class="{'uni-collapse-cell__content--hide':!isOpen}" class="uni-collapse-cell__content"> + <view :class="{ 'uni-collapse-cell--animation': showAnimation === true }" class="uni-collapse-cell__wrapper" :style="{'transform':isOpen?'translateY(0)':'translateY(-50%)','-webkit-transform':isOpen?'translateY(0)':'translateY(-50%)'}"> + <slot /> + </view> + </view> + </view> +</template> + +<script> + import uniIcons from '../uni-icons/uni-icons.vue' + export default { + name: 'UniCollapseItem', + components: { + uniIcons + }, + props: { + title: { + // 列表标题 + type: String, + default: '' + }, + name: { + // 唯一标识符 + type: [Number, String], + default: 0 + }, + disabled: { + // 是否禁用 + type: Boolean, + default: false + }, + showAnimation: { + // 是否显示动画 + type: Boolean, + default: false + }, + open: { + // 是否展开 + type: Boolean, + default: false + }, + thumb: { + // 缩略图 + type: String, + default: '' + } + }, + data() { + return { + isOpen: false + } + }, + watch: { + open(val) { + this.isOpen = val + } + }, + inject: ['collapse'], + created() { + this.isOpen = this.open + this.nameSync = this.name ? this.name : this.collapse.childrens.length + this.collapse.childrens.push(this) + if (String(this.collapse.accordion) === 'true') { + if (this.isOpen) { + let lastEl = this.collapse.childrens[this.collapse.childrens.length - 2] + if (lastEl) { + this.collapse.childrens[this.collapse.childrens.length - 2].isOpen = false + } + } + } + }, + methods: { + onClick() { + if (this.disabled) { + return + } + if (String(this.collapse.accordion) === 'true') { + this.collapse.childrens.forEach(vm => { + if (vm === this) { + return + } + vm.isOpen = false + }) + } + this.isOpen = !this.isOpen + this.collapse.onChange && this.collapse.onChange() + this.$forceUpdate() + } + } + } +</script> + +<style lang="scss" scoped> + @import '@/uni.scss'; + + .uni-collapse-cell { + flex-direction: column; + border-color: $uni-border-color; + border-bottom-width: 1px; + border-bottom-style: solid; + } + + + .uni-collapse-cell--hover { + background-color: $uni-bg-color-hover; + } + + .uni-collapse-cell--open { + background-color: $uni-bg-color-hover; + } + + .uni-collapse-cell--disabled { + background-color: $uni-bg-color-hover; + // opacity: 0.3; + } + + + .uni-collapse-cell--hide { + height: 44px; + } + + .uni-collapse-cell--animation { + // transition: transform 0.3s ease; + transition-property: transform; + transition-duration: 0.3s; + transition-timing-function: ease; + } + + .uni-collapse-cell__title { + padding: 12px 0; + position: relative; + /* #ifndef APP-NVUE */ + display: flex; + width: 100%; + box-sizing: border-box; + /* #endif */ + height: 44px; + line-height: 24px; + flex-direction: row; + justify-content: space-between; + align-items: center; + } + + .uni-collapse-cell__title:active { + background-color: $uni-bg-color-hover; + } + + .uni-collapse-cell__title-img { + height: $uni-img-size-base; + width: $uni-img-size-base; + margin-right: 10px; + } + + .uni-collapse-cell__title-arrow { + width: 20px; + height: 20px; + transform: rotate(0deg); + transform-origin: center center; + + } + + .uni-collapse-cell__title-arrow-active { + transform: rotate(180deg); + } + + .uni-collapse-cell__title-text { + flex: 1; + font-size: $uni-font-size-base; + /* #ifndef APP-NVUE */ + white-space: nowrap; + color: inherit; + /* #endif */ + /* #ifdef APP-NVUE */ + lines: 1; + /* #endif */ + overflow: hidden; + text-overflow: ellipsis; + } + + .uni-collapse-cell__content { + overflow: hidden; + } + + .uni-collapse-cell__wrapper { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + } + + .uni-collapse-cell__content--hide { + height: 0px; + line-height: 0px; + } +</style> -- Gitblit v1.9.1