jiuyiUniapp/jiuyi2/pages/news/redPacket.vue

216 lines
4.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>
import {
ref,
reactive,
computed,
} from 'vue';
import {
useStore
} from 'vuex'
//
import api from '@/api/index'
//
import util from '@/common/js/util.js'
import {
onLoad,
} from "@dcloudio/uni-app"
const store = useStore()
//
const form = reactive({
status: 0,
})
// 红包类型列表
const typeList = reactive([{
id: 1,
name: '积分红包',
}, {
id: 2,
name: '余额红包',
}])
// 红包金额
const total = ref('')
// 红包祝福语
const greeting = ref('恭喜发财,大吉大利')
// 群成员数量
const groupNum = ref('')
// 红包类型下标
const typeIndex = ref(0)
// 当前下标
const typeCurrent = computed(() => {
let result = typeList[typeIndex.value]
return result
})
// 格式化总价
const formatTotal = computed(() => {
let result = Number(total.value || 0)
result = result.toFixed(2)
return result
})
// 用户信息
const userinfo = computed(() => {
let result = store.state.userinfo
return result
})
onLoad((option) => {
const type = option.sendType
if (type) {
form.sendType = type
form[{
1: 'sendId',
2: 'roomId',
} [type]] = option.msgId
//
if (type == 2) getGroup()
}
})
// 获取群信息
function getGroup() {
// 验证sdk是否准备完毕
let isReady = uni.$chat.isReady();
if (!isReady && userinfo.value.userId) {
setTimeout(function() {
getGroup()
}, 200);
return
}
uni.$chat.getGroupProfile({
groupID: form.roomId,
}).then(rs => {
if (rs.code == 0) {
const result = rs.data.group
groupNum.value = result.memberCount
}
})
}
// 切换下标
function handleTypeIndex(ev) {
const index = ev.detail.value
if (index === typeIndex.value) return
typeIndex.value = index
}
// 发送数量监听
function onNumBlur() {
if (form.num > groupNum.value) form.num = groupNum.value
}
// 发布红包
function handleSubmit() {
//
const data = {
...form
}
if (data.sendType == 2) {
if (!data.num) {
util.alert('数量不能为空')
return
}
}
if (!total.value) {
util.alert('总金额不能为空')
return
}
// 积分或余额
data[{
1: 'score',
2: 'balance',
} [typeCurrent.value.id]] = total.value
// 红包祝福语
if (!data.name) data.name = greeting.value
// 类型
data.type = typeCurrent.value.id
// 发送人id
data.userId = userinfo.value.userId
console.log('data', data)
//
api.news.sendRedBag({
data,
}).then(rs => {
if (rs.code == 200) {
uni.navigateBack()
return
}
util.alert({
content: rs.msg,
showCancel: false,
})
})
}
</script>
<template>
<view class="app">
<view class="container">
<picker mode="selector" :range="typeList" range-key="name" @change="handleTypeIndex">
<view class="form-group rows mtb30 ptb25 bfff">
<view>红包类型</view>
<view class="f1 tar mr10">{{ typeCurrent.name }}</view>
<uni-icons type="right" />
</view>
</picker>
<view class="form-group rows mtb30 bfff">
<text>总金额</text>
<view class="easyinput f1 tar">
<input class="f34" type="text" v-model="total" placeholder="0.00" />
</view>
</view>
<!-- 群聊才有 -->
<view class="mtb30 " v-if="form.sendType == 2">
<view class="form-group rows bfff">
<text>数量:</text>
<view class="easyinput f1 tar">
<input class="f34" type="text" v-model="form.num" placeholder="填写个数" @blur="onNumBlur" />
</view>
<view class="ml10">个</view>
</view>
<view class="hint mt10 ml20 f24 c999" v-if="groupNum">本群{{groupNum}}共人</view>
</view>
<view class="form-group rows mtb30 bfff">
<text>祝福语:</text>
<view class="f1 tar">
<input class="f34" type="text" v-model="form.name" :placeholder="greeting" />
</view>
</view>
<view class="total df jcc mt30 ptb50">
<text>¥</text>
<text>{{ formatTotal }}</text>
</view>
<view class="btn-primary btn plus mauto" @click="handleSubmit">发送红包</view>
</view>
</view>
</template>
<style lang="scss" scoped>
//
.container {
padding: 0 20rpx;
.form-group {
padding: 30rpx 30rpx;
font-size: 34rpx;
border-radius: 20rpx;
}
.total {
font-size: 72rpx;
font-weight: bold;
}
.btn-primary {
width: 400rpx;
background: #FB5352;
color: #fff;
}
}
</style>