c-button.vue 2.1 KB
<template>
	<view class="u-button" :style="vuex_theme">
		<u-button :text="text" :color="reversedColor" :plain="false" :hairline="false" :disabled="disabled"
			:throttleTime="1500" type="default" shape="circle" :open-type="openType" @getphonenumber="getPhoneNumber"
			:custom-style="getCustomStyle" @click="click">
		</u-button>
	</view>
</template>

<script>
	export default {
		name: 'u-button',
		props: {
			text: {
				type: String,
				default: ''
			},
			type: {
				type: String,
				default: 'confirm'
			},
			openType: {
				type: String,
				default: ''
			},
			disabled: {
				type: Boolean,
				default: false
			},
			customStyle: {
				type: Object,
				default () {
					return {}
				}
			},
			color: {
				type: String,
				default: ''
			},


		},
		data() {
			return {}
		},

		computed: {
			getCustomStyle() {

				const {
					type = ''
				} = this;

				let style = {};

				switch (type) {
					case 'confirm':
						return Object.assign({}, {
							border: 'none',
							color: '#FFFFFF',
						}, this.customStyle);
						break;

					case 'cancel':
						return Object.assign({}, {
							border: 'none',
							color: 'rgba(0, 0, 0, 0.4500)',
						}, this.customStyle);
						break;
				}
			},

			reversedColor() {

				let color = 'var(--primary-color)';

				switch (this.type) {
					case 'confirm':
						color = "var(--primary-color)";
						break;

					case 'cancel':
						color = "rgba(0, 0, 0, 0.0600)";
						break;
				}

				return color;
			}
		},

		// watch: {
		// 	buttonType: function(newVal, oldVal) {
		// 		switch (this.type) {
		// 			case 'confirm':
		// 				this.color = "var(--primary-color)";
		// 				break;

		// 			case 'cancel':
		// 				this.color = "var(--primary-color)";
		// 				break;
		// 		}
		// 	}
		// },

		methods: {
			// 按钮点击
			click(e) {
				this.$emit('click', e);
			},

			getPhoneNumber(e) {
				this.$emit("getPhoneNumber", e)
			}
		}
	}
</script>

<style lang="scss">
	.u-button /deep/ .u-button {
		border: nones;
		border-radius: 8rpx;
	}
</style>