YingXingAI/components/LeaveMessage.vue

185 lines
3.8 KiB
Vue
Raw Permalink 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.

<template>
<!-- 留言 -->
<u-popup
v-model="showPopup"
mode="bottom"
@close="closePopup"
close-icon-color="#333"
close-icon-pos="top-right"
borderRadius="16"
closeable
>
<view class="leave-message-container">
<view class="leave-message-title">留言</view>
<view class="leave-message-content">
<textarea
class="message-input"
v-model="messageContent"
placeholder="请输入留言100字以内"
maxlength="100"
placeholder-style="color: #999999;"
:disabled="loading"
></textarea>
</view>
<view class="message-buttons">
<u-button
class="submit-btn"
type="primary"
@click="handleSubmit"
:disabled="loading"
>
{{ loading ? "提交中..." : "提交" }}
</u-button>
<u-button
class="cancel-btn"
type="default"
@click="closePopup"
:disabled="loading"
>
取消
</u-button>
</view>
</view>
</u-popup>
</template>
<script>
export default {
name: "LeaveMessage",
props: {
show: {
type: Boolean,
default: false,
},
teacher: {
type: Object,
default: () => null,
},
},
data() {
return {
showPopup: false,
messageContent: "",
loading: false,
};
},
watch: {
show: {
handler(newVal) {
this.showPopup = newVal;
},
immediate: true,
},
showPopup(val) {
if (val !== this.show) {
this.$emit("update:show", val);
}
},
},
methods: {
closePopup() {
if (this.loading) return; // 如果正在提交,阻止关闭
this.messageContent = "";
this.showPopup = false;
this.$emit("update:show", false);
},
handleSubmit() {
if (this.loading) return; // 如果正在提交,阻止重复提交
if (!this.messageContent.trim()) {
uni.showToast({
title: "请输入留言内容",
icon: "none",
});
return;
}
// 模拟接口调用
this.loading = true;
uni.showLoading({
title: "提交中...",
});
// 模拟网络请求延迟
setTimeout(() => {
// 模拟接口调用成功
uni.hideLoading();
this.loading = false;
// 发送留言内容和教师信息给父组件
this.$emit("submit", {
content: this.messageContent,
teacher: this.teacher,
success: true,
});
// 成功提示
uni.showToast({
title: "留言成功",
icon: "success",
});
// 清空留言内容
this.messageContent = "";
// 关闭弹窗
this.showPopup = false;
this.$emit("update:show", false);
}, 1500); // 模拟1.5秒的网络延迟
},
},
};
</script>
<style lang="scss" scoped>
.leave-message-container {
padding: 40rpx 0 0;
background-color: #ffffff;
border-radius: 16rpx;
overflow: hidden;
.leave-message-title {
font-size: 32rpx;
color: #333333;
text-align: left;
padding-left: 30rpx;
margin-bottom: 30rpx;
font-weight: 400;
}
.leave-message-content {
padding: 0 30rpx;
.message-input {
width: 100%;
height: 280rpx;
background-color: #f5f5f5;
border-radius: 16rpx;
padding: 24rpx;
font-size: 28rpx;
box-sizing: border-box;
color: #333333;
}
}
.message-buttons {
padding: 30rpx 0;
display: flex;
justify-content: center;
align-items: center;
gap: 50rpx;
.cancel-btn,
.submit-btn {
width: 156rpx;
height: 70rpx;
margin: 0;
border-radius: 16rpx;
}
.submit-btn {
background-color: #477bfb;
}
}
}
</style>