You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

171 lines
4.3 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="tm-actionSheetMenu">
<tm-poup @change="toogle" ref="pop" :black="false" v-model="showpop" height="auto" bg-color="none">
<view class="ma-32">
<view class=" round-8 overflow ">
<tm-button
:fllowTheme="false"
:black="black_tmeme"
font-size="22"
font-color="grey"
:theme="black_tmeme ? 'grey-darken-4' : 'white'"
block
flat
>
{{ title }}
</tm-button>
<slot>
<tm-button
:fllowTheme="false"
:black="black_tmeme"
@click="onclick(index, item)"
v-for="(item, index) in actions"
:key="index"
:item-class="'text-' + color_tmeme"
:theme="black_tmeme ? 'grey-darken-4' : 'white'"
block
flat
>
{{ item[rangKey] ? item[rangKey] : item }}
</tm-button>
</slot>
</view>
<view style="height: 96upx " class="pb-24 pt-16">
<tm-button :round="8" :fllowTheme="false" :item-class="' text-weight-b'" :black="black_tmeme" @click="close" :theme="black ? 'grey-darken-4' : 'white'" block>
取消
</tm-button>
</view>
<!-- #ifdef H5 -->
<view style="height: var(--window-bottom);"></view>
<!-- #endif -->
</view>
</tm-poup>
</view>
</template>
<script>
/**
* 动作面板
* @description 动作面板,从底部弹出的操作菜单。
* @property {Boolean} black = [true|false] 默认null暗黑模式
* @property {Boolean} value = [true|false] 默认false显示菜单推荐使用v-model,使用value.sync达到双向绑定。
* @property {String} title = [] 默认:'请操作',弹出层的标题。
* @property {Array} actions = [] 默认:[],可以是对象数组,也可是字符串数组。
* @property {String} rang-key = [title] 默认title,actions对象数组时需要提供自定义标题键。
* @property {Boolean} click-close = [true|false] 默认true,点击项目时,是否自动关闭弹层。
* @property {Boolean} font-color = [] 默认primary,文字颜色。可以是主题颜色也可以是颜色格式rgb,rgba,#ff0000格式
* @property {Function} change 点击项目时触发,返回:{index:项目索引,data:actions的对象数据}
* @property {Function} input 弹层显示和隐藏时,将会触发。
* @example <tm-actionSheetMenu :value="true" :actions="['说明文档','说明文档']"></tm-actionSheetMenu>
*/
import tmPoup from '@/tm-vuetify/components/tm-poup/tm-poup.vue';
import tmButton from '@/tm-vuetify/components/tm-button/tm-button.vue';
export default {
components: { tmButton, tmPoup },
name: 'tm-actionSheetMenu',
model: {
prop: 'value',
event: 'input'
},
props: {
value: {
type: Boolean,
default: false
},
black: {
type: Boolean,
default: null
},
title: {
type: String,
default: '请操作'
},
fontColor: {
type: String,
default: 'black'
},
actions: {
type: Array,
default: () => {
return [];
}
},
// 自定义标题键key.
rangKey: {
type: String,
default: 'title'
},
// 点击项目时,是否关闭弹层
clickClose: {
type: Boolean,
default: true
},
// 跟随主题色的改变而改变。
fllowTheme: {
type: Boolean | String,
default: true
}
},
data() {
return {
showpop: false
};
},
mounted() {
this.showpop = this.value;
},
computed: {
color_tmeme: function() {
if (this.$tm.vx.state().tmVuetify.color !== null && this.$tm.vx.state().tmVuetify.color && this.fllowTheme) {
return this.$tm.vx.state().tmVuetify.color;
}
return this.fontColor;
},
black_tmeme: function() {
if (this.black !== null) return this.black;
return this.$tm.vx.state().tmVuetify.black;
}
},
watch: {
value: function(val) {
this.showpop = val;
}
},
methods: {
close() {
this.$refs.pop.close();
},
toogle(e) {
let t = this;
if (e) {
this.$nextTick(function() {
if (this.dataValue != this.defaultValue) {
this.dataValue = this.defaultValue;
}
});
}
this.$emit('input', e);
this.$emit('update:value', e);
},
onclick(index, item) {
this.$emit('change', { index: index, data: item });
if (this.clickClose === true) {
this.$refs.pop.close();
}
}
}
};
</script>
<style lang="scss" scoped>
.tm-actionSheetMenu-title {
.tm-actionSheetMenu-close {
top: 32upx;
right: 32upx;
width: 50upx;
height: 50upx;
}
}
</style>