Files
uniapp-im-shop/TUIKit/components/TUIChat/message-input-toolbar/red-envelope/index.vue
2026-01-07 17:49:17 +08:00

131 lines
3.3 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<script setup lang="ts">
import { computed, reactive, ref } from '../../../../adapter-vue'
import ToolbarItemContainer from '../toolbar-item-container/index.vue'
import custom from '../../../../assets/icon/red-packet.svg'
import { isUniFrameWork } from '../../../../utils/env'
const placeholderStyle = `font-family: PingFang SC, PingFang SC; font-weight: 500; color: #666666; font-size: 32rpx; font-style: normal; text-transform: none;`
const evaluateIcon = custom
/** 提示框 */
const message = ref()
const container = ref()
const formData = reactive({
// 积分
integral: '',
// 红包标题
title: ''
})
/** 监听积分输入值 */
const monitorPoints = computed(() => {
const data = {
valid: false,
message: ''
}
if (!formData.integral) {
data.valid = true
data.message = '请输入积分'
message.value.open()
return data
}
if (Number(formData.integral) > 2000) {
data.valid = true
data.message = '积分不能大于2000'
message.value.open()
return data
}
return data
})
const onDialogShow = () => {
console.log('弹出窗口')
formData.integral = ''
formData.title = ''
}
const onDialogClose = () => {
console.log('关闭窗口')
}
const closeDialog = () => {
container?.value?.toggleDialogDisplay(false)
}
const onSubmit = () => {
if (!formData.integral) return
console.log('确认')
}
</script>
<template>
<ToolbarItemContainer
ref="container"
needBottomPopup
:iconFile="evaluateIcon"
:iconWidth="isUniFrameWork ? '26px' : '20px'"
:iconHeight="isUniFrameWork ? '26px' : '20px'"
title="红包"
@onDialogShow="onDialogShow"
@onDialogClose="onDialogClose"
>
<view class="red-envelope">
<view class="top-title">
<text class="title">发红包</text>
<uni-icons
type="closeempty"
color="#333333"
size="24"
@click.stop="closeDialog"
></uni-icons>
</view>
<!-- 输入框 -->
<view
:class="{ 'on-reminder': monitorPoints.valid }"
class="input-box"
>
<text>积分</text>
<input
v-model="formData.integral"
:placeholder-style="placeholderStyle"
confirm-type="done"
type="number"
placeholder="0.00"
@confirm="onSubmit"
/>
</view>
<view class="input-box title-box">
<input
v-model="formData.title"
:placeholder-style="placeholderStyle"
placeholder="恭喜发财,大吉大利"
/>
</view>
<!-- 底部显示 -->
<view class="bottom-box">
<view class="text-box">
<text>积分</text>
<text v-if="formData.integral">{{ formData.integral }}</text>
<text v-else>0.00</text>
</view>
<button class="btn" @click.stop="onSubmit">塞进红包</button>
</view>
</view>
<!-- 提示框 -->
<uni-popup ref="message" type="message">
<uni-popup-message
type="error"
:message="monitorPoints.message"
:duration="2000"
></uni-popup-message>
</uni-popup>
</ToolbarItemContainer>
</template>
<style scoped lang="scss" src="./style/index.scss"></style>