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.

175 lines
3.6 KiB
Vue

<template>
<view class="push-message-page">
<div class="top-div">
<div></div>
<tn-button width="80px" height="32px" :plain="true" text-color="#0099ff" @click="backToIndex">
<uni-icons type="arrow-left" size="18" color="#0099ff" style="margin-right: 5px;"></uni-icons>
</tn-button>
</div>
<view class="page-content">
<!-- 推送目标选择 -->
<view class="section">
<view class="section-title">推送目标</view>
<tn-radio-group v-model="pushForm.targetType">
<tn-radio label="all" value="all">全部</tn-radio>
<tn-radio label="ios" value="ios">呼号端</tn-radio>
<tn-radio label="android" value="android">自助机</tn-radio>
<tn-radio label="specific" value="specific">综合屏</tn-radio>
</tn-radio-group>
<!-- 指定设备输入 -->
<view class="specific-device">
<tn-input v-model="pushForm.deviceId" placeholder="请输入设备ID" border></tn-input>
</view>
</view>
<!-- 消息内容编辑 -->
<view class="section">
<view class="section-title">推送内容</view>
<TnInput v-model="pushForm.title" placeholder="请输入推送标题" border class="input-field"></TnInput>
<TnInput v-model="pushForm.content" placeholder="请输入推送内容" border
class="textarea-field"></TnInput>
</view>
<!-- 推送按钮 -->
<view class="button-section">
<tn-button @click="handlePush" :loading="loading" class="push-button">
{{ loading ? '...' : '' }}
</tn-button>
</view>
</view>
</view>
</template>
<script setup>
import {
ref,
reactive
} from 'vue'
import TnInput from '@/uni_modules/tuniaoui-vue3/components/input/src/input.vue'
// 表单数据
const pushForm = reactive({
targetType: 'all',
deviceId: '',
title: '',
content: ''
})
const loading = ref(false)
// 处理推送
const handlePush = () => {
// 表单验证
if (!pushForm.title.trim()) {
uni.showToast({
title: '请输入推送标题',
icon: 'none'
})
return
}
if (!pushForm.content.trim()) {
uni.showToast({
title: '请输入推送内容',
icon: 'none'
})
return
}
if (pushForm.targetType === 'specific' && !pushForm.deviceId.trim()) {
uni.showToast({
title: '请输入设备ID',
icon: 'none'
})
return
}
// 确认推送
uni.showModal({
title: '确认推送',
content: '确定要发送这条推送消息吗?',
success: (res) => {
if (res.confirm) {
sendPushMessage()
}
}
})
}
// 发送推送消息
const sendPushMessage = () => {
console.log('pushing...')
}
const backToIndex = () => {
uni.navigateTo({
url: '/pages/index/index'
})
}
</script>
<style lang="scss" scoped>
.push-message-page {
min-height: 100vh;
background-color: #fff;
.top-div {
display: flex;
justify-content: space-between;
padding: 6vh 20px 1vh 20px;
}
.page-content {
padding: 10px;
}
.section {
background-color: #fff;
border-radius: 3px;
padding: 10px;
margin-bottom: 10px;
// box-shadow: 10px;
.section-title {
font-size: 36rpx;
font-weight: bold;
color: #dddddd;
margin-bottom: 10px;
border-left: 8rpx solid 10px;
padding-left: 10px;
}
}
.specific-device {
margin-top: 10px;
}
.input-field {
margin-bottom: 10px;
}
.textarea-field {
margin-top: 10px;
}
.button-section {
margin-top: 20px;
text-align: center;
.push-button {
width: 80%;
height: 40px;
font-weight: 600;
}
}
}
/* 响应式设计 */
@media (min-width: 768px) {
.push-message-page {
.page-content {
max-width: 600px;
margin: 0 auto;
}
}
}
</style>