Files
im/pages/user/vip/m-popup.vue
T
cansnow f49f1f1ad1 17
2025-12-23 00:18:46 +08:00

153 lines
3.4 KiB
Vue

<template>
<view>
<u-popup ref="popup" :closeOnClickOverlay="closeOnClickOverlay" mode="center" bgColor="none">
<view :class="['n-ps-all-' + padding, 'n-bg-inverse', 'n-radius-base']" :style="customStyle">
<view class="n-flex-column n-align-center">
<text class="n-weight-7 n-color-text" :style="{fontSize:'34rpx'}">{{title}}</text>
<text class="n-size-ss n-ms-top-s n-color-third" v-if="label">{{label}}</text>
</view>
<view class="n-flex-column n-align-center n-ms-bottom-ll" v-if="content">
<text class="n-size-base n-ms-top-ll n-color-second">{{content}}</text>
</view>
<u-form class="n-ms-top-l" v-else labelWidth="40rpx" labelPosition="left">
<u-form-item :class="['n-radius-' + inputRadius, 'n-bg-page', 'n-ps-base', 'n-ms-bottom-base']">
<u-input v-model="input" :type="inputType" :focus="true" :maxlength="maxlength" :placeholder="place" border="none" clearable>
<template v-slot:suffix>
<text class="n-size-ss n-color-error" v-if="captcha" @click="sendSms">{{code_text}}</text>
</template>
</u-input>
</u-form-item>
</u-form>
<u-button class="n-ms-top-base" @click="submit" :text="buttonText" :color="buttonColor" type="error" shape="circle" throttleTime="1000"></u-button>
</view>
</u-popup>
<!-- 验证码 -->
<u-code ref="code" @change="changeCode" :seconds="seconds" :uniqueKey="captchaType" endText="获取验证码"></u-code>
</view>
</template>
<script>
export default {
name:"m-popup",
props: {
label: {
type: String,
default: ''
},
title: {
type: String,
default: '提示'
},
place: {
type: String,
default: '请输入内容'
},
content: {
type: String,
default: ''
},
captcha: {
type: Boolean,
default: false
},
padding: {
type: String,
default: 'base'
},
redirect: {
type: String,
default: ''
},
maxlength: {
type: [String, Number],
default: 10
},
inputType: {
type: String,
default: 'text'
},
buttonText: {
type: String,
default: '立即提交'
},
captchaType: {
type: String,
default: 'notice'
},
inputRadius: {
type: String,
default: 'll'
},
buttonColor: {
type: String,
default: '#fc3463'
},
customStyle: {
type: Object,
default(){
return {width:'600rpx',marginBottom:'200rpx'}
}
},
closeOnClickOverlay: {
type: Boolean,
default: true
}
},
data() {
return {
input: '',
seconds: 60,
code_text: '获取验证码'
};
},
methods: {
// 展示弹窗
open() {
// 发送验证码
if(this.captcha){
this.sendSms()
}
this.$refs['popup'].open()
},
// 关闭弹窗
close() {
uni.hideKeyboard()
this.$refs['popup'].close()
},
// 提交数据
submit() {
// 跳转链接
if(this.redirect) {
return uni.navigateTo({
url:this.redirect
})
}
// 输入提示
if(!this.input) return showToast(this.place)
this.$emit('submit', this.input)
this.close()
this.input = ''
},
// 获取验证码
sendSms() {
if(this.$refs['code'].canGetCode){
let userinfo = getApp().globalData.userinfo
sendSms({type:this.captchaType, mobile:userinfo.mobile}).then(res=>{
this.$refs['code'].start()
})
}
},
// 验证码变化
changeCode(evt) {
this.code_text = evt
}
}
}
</script>
<style>
</style>