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