6 changed files with 242 additions and 11 deletions
-
1.env.development
-
1.env.production
-
BINsrc/assets/img/Feedback/feedbackBtn.png
-
BINsrc/assets/img/Feedback/noFeedback.png
-
247src/views/Feedback.vue
-
4src/views/homePage.vue
Before Width: 52 | Height: 52 | Size: 1.5 KiB After Width: 64 | Height: 76 | Size: 3.4 KiB |
After Width: 310 | Height: 298 | Size: 35 KiB |
@ -1,22 +1,251 @@ |
|||||
<script setup> |
<script setup> |
||||
import feedback from "../assets/img/Feedback/feedback.png"; |
|
||||
import feedbackImg from "../assets/img/Feedback/feedbackImg.png"; |
|
||||
import feedbackSuccess from "../assets/img/Feedback/feedbackSuccess.png"; |
|
||||
|
import { ref, computed, onMounted, watch, nextTick, onUnmounted } from "vue"; |
||||
|
import { useDataStore } from '@/store/dataList.js' |
||||
|
|
||||
|
import feedback from "../assets/img/Feedback/feedback.png"; |
||||
|
import feedbackImg from "../assets/img/Feedback/feedbackImg.png"; |
||||
|
import feedbackSuccess from "../assets/img/Feedback/feedbackSuccess.png"; |
||||
|
import noFeedback from "../assets/img/Feedback/noFeedback.png"; |
||||
|
|
||||
|
const dataStore = useDataStore() |
||||
|
|
||||
|
const feedbackContent = ref(""); |
||||
|
const uploadUrl = import.meta.env.VITE_APP_IMG_API_BASE_URL; |
||||
|
const feedbackFileList = ref([]); |
||||
|
const isHistoryFeedback = ref(false); |
||||
|
|
||||
|
const feedbackSubmit = async () => { |
||||
|
console.log(feedbackContent.value) |
||||
|
} |
||||
|
|
||||
|
const feedbackContentChange = () => { |
||||
|
console.log('内容改变'); |
||||
|
console.log(feedbackContent.value) |
||||
|
|
||||
|
localStorage.setItem('feedbackContent', feedbackContent.value); |
||||
|
} |
||||
|
|
||||
|
const check = function (file, fileList) { |
||||
|
console.log('调用check方法'); |
||||
|
console.log(fileList); |
||||
|
console.log(fileList.length); |
||||
|
} |
||||
|
|
||||
|
const successChange = function (file, fileList) { |
||||
|
console.log('调用successChange方法'); |
||||
|
console.log(fileList); |
||||
|
console.log(fileList.response); |
||||
|
if (fileList.response.code == 200) { |
||||
|
feedbackFileList.value.push(fileList.response.data) |
||||
|
} |
||||
|
console.log(feedbackFileList.value); |
||||
|
localStorage.setItem('feedbackFileList', JSON.stringify(feedbackFileList.value)); |
||||
|
} |
||||
|
|
||||
|
const dialogImageUrl = ref('') |
||||
|
const dialogVisible = ref(false) |
||||
|
|
||||
|
const handleRemove = (uploadFile, uploadFiles) => { |
||||
|
console.log(uploadFile, uploadFiles) |
||||
|
feedbackFileList.value = uploadFiles; |
||||
|
console.log('调用handleRemove方法'); |
||||
|
console.log(feedbackFileList.value); |
||||
|
console.log(feedbackFileList.value.length); |
||||
|
localStorage.setItem('feedbackFileList', JSON.stringify(feedbackFileList.value)); |
||||
|
} |
||||
|
|
||||
|
const handlePictureCardPreview = (uploadFile) => { |
||||
|
dialogImageUrl.value = uploadFile.url |
||||
|
dialogVisible.value = true |
||||
|
} |
||||
|
|
||||
|
const feedbackBack = () => { |
||||
|
dataStore.isFeedback = false; |
||||
|
} |
||||
|
|
||||
|
onMounted(() => { |
||||
|
feedbackContent.value = localStorage.getItem('feedbackContent'); |
||||
|
feedbackFileList.value = JSON.parse(localStorage.getItem('feedbackFileList')); |
||||
|
console.log(uploadUrl) |
||||
|
}) |
||||
|
|
||||
</script> |
</script> |
||||
|
|
||||
<template> |
<template> |
||||
<el-container> |
<el-container> |
||||
<el-header> |
|
||||
头 |
|
||||
</el-header> |
|
||||
<el-main> |
|
||||
身 |
|
||||
</el-main> |
|
||||
|
<div> |
||||
|
<div @click="feedbackBack">返回</div> |
||||
|
</div> |
||||
|
<el-scrollbar> |
||||
|
<el-header> |
||||
|
<div class="feedbackImgClass"> |
||||
|
<img :src="feedback" alt="用户反馈" class="img"> |
||||
|
<img :src="feedbackImg" alt="用户反馈" class="img"> |
||||
|
</div> |
||||
|
</el-header> |
||||
|
<el-main> |
||||
|
<div class="card"> |
||||
|
<div class="feedbackTitle header-item"> |
||||
|
填写反馈内容 |
||||
|
</div> |
||||
|
<div class="header-item"> |
||||
|
<el-input class="feedbackContent" v-model="feedbackContent" :rows="5" type="textarea" |
||||
|
maxlength="2000" show-word-limit placeholder="请描写您想反馈的内容..." |
||||
|
@change="feedbackContentChange" /> |
||||
|
</div> |
||||
|
<div class="feedbackTitle header-item"> |
||||
|
照片上传 |
||||
|
</div> |
||||
|
<div class="header-item"> |
||||
|
<el-upload class="uploadImg" :action="uploadUrl" list-type="picture-card" :auto-upload="true" |
||||
|
:on-success="successChange" accept=".png, .jpg, .jpeg, .ico," :on-change="check" |
||||
|
:file-list="feedbackFileList" :on-preview="handlePictureCardPreview" |
||||
|
:on-remove="handleRemove" :limit="3"> |
||||
|
<el-icon> |
||||
|
<Plus /> |
||||
|
</el-icon> |
||||
|
<template #tip> |
||||
|
<div class="el-upload__tip"> |
||||
|
最多上传三张 |
||||
|
</div> |
||||
|
</template> |
||||
|
</el-upload> |
||||
|
</div> |
||||
|
<div> |
||||
|
<div class="feedbackSubmitBtn" @click="feedbackSubmit">提 交</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="card"> |
||||
|
<div class="feedbackTitle"> |
||||
|
历史反馈内容 |
||||
|
</div> |
||||
|
<div v-if="isHistoryFeedback"> |
||||
|
有内容 |
||||
|
</div> |
||||
|
<div v-else> |
||||
|
<div class="noFeedback"> |
||||
|
<img class="noFeedbackImg" :src="noFeedback" alt="暂无历史提交"> |
||||
|
暂无记录 |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</el-main> |
||||
|
</el-scrollbar> |
||||
</el-container> |
</el-container> |
||||
|
|
||||
|
<el-dialog v-model="dialogVisible"> |
||||
|
<img w-full :src="dialogImageUrl" alt="Preview Image" /> |
||||
|
</el-dialog> |
||||
|
|
||||
</template> |
</template> |
||||
|
|
||||
<style scoped> |
<style scoped> |
||||
|
.el-container { |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
overflow: auto; |
||||
|
} |
||||
|
|
||||
|
.el-header { |
||||
|
height: auto; |
||||
|
padding: 0; |
||||
|
} |
||||
|
|
||||
|
.el-main { |
||||
|
height: auto; |
||||
|
padding: 0; |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
gap: 20px; |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
|
||||
|
.card { |
||||
|
background-color: white; |
||||
|
padding: 20px; |
||||
|
height: auto; |
||||
|
border-radius: 15px; |
||||
|
} |
||||
|
|
||||
|
.header-item { |
||||
|
margin: 10px 0; |
||||
|
} |
||||
|
|
||||
|
.feedbackImgClass { |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
align-items: center; |
||||
|
margin: 0 20px; |
||||
|
} |
||||
|
|
||||
|
.img { |
||||
|
max-width: 50%; |
||||
|
height: auto; |
||||
|
object-fit: contain; |
||||
|
} |
||||
|
|
||||
|
.feedbackSubmitBtn { |
||||
|
width: 60%; |
||||
|
height: 50px; |
||||
|
text-align: center; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
margin: 0 auto; |
||||
|
background: linear-gradient(90deg, #cac4fe, #b9d0fc, #a7dbfc); |
||||
|
border-radius: 60px; |
||||
|
|
||||
|
color: #4423FF; |
||||
|
font-weight: bold; |
||||
|
font-size: 25px; |
||||
|
|
||||
|
cursor: pointer; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
.feedbackTitle { |
||||
|
font-size: 25px; |
||||
|
font-weight: bold; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
.feedbackContent { |
||||
|
font-size: 20px; |
||||
|
} |
||||
|
|
||||
|
@media (max-width: 768px) { |
||||
|
.feedbackTitle { |
||||
|
font-size: 20px; |
||||
|
} |
||||
|
|
||||
|
.feedbackContent { |
||||
|
font-size: 15px; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.noFeedback { |
||||
|
margin: 20px 0; |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
} |
||||
|
|
||||
|
.noFeedbackImg { |
||||
|
width: 200px; |
||||
|
height: 200px; |
||||
|
} |
||||
|
</style> |
||||
|
<style> |
||||
|
.uploadImg .el-upload { |
||||
|
width: 150px; |
||||
|
height: 150px; |
||||
|
} |
||||
|
|
||||
|
@media (max-width: 768px) { |
||||
|
.uploadImg .el-upload { |
||||
|
width: 100px; |
||||
|
height: 100px; |
||||
|
} |
||||
|
} |
||||
</style> |
</style> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue