|
|
@@ -0,0 +1,255 @@
|
|
|
+<template>
|
|
|
+ <div
|
|
|
+ class="single-item"
|
|
|
+ :style="`padding-bottom:${props.problemData.isReplied === REPLYSTATUS.replied ? '16px' : '38px'}`"
|
|
|
+ >
|
|
|
+ <div style="display: flex; font-size: 12px">
|
|
|
+ <div style="color: #00000073">评论人:{{ props.problemData.userName }}-{{ props.problemData.staffNo }} </div>
|
|
|
+ <div style="margin-left: 20px; color: #00000073">日期:{{ props.problemData.createdAt }}</div>
|
|
|
+ <!-- <img src="@/assets/icons/phone.png" alt="" /> -->
|
|
|
+ <div class="single-contact">联系方式:{{ props.problemData.mobile }}</div>
|
|
|
+ </div>
|
|
|
+ <div class="buttonBar">
|
|
|
+ <el-button
|
|
|
+ v-show="props.problemData.status === COMMENTSTATUS.passed"
|
|
|
+ type="primary"
|
|
|
+ style="width: 74px; margin-left: auto; margin-right: 0"
|
|
|
+ @click="hideComment"
|
|
|
+ >隐藏</el-button
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ v-show="props.problemData.status === COMMENTSTATUS.rejected"
|
|
|
+ type="primary"
|
|
|
+ style="width: 74px; margin-left: auto; margin-right: 0"
|
|
|
+ @click="displayComment"
|
|
|
+ >显示</el-button
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ v-show="
|
|
|
+ props.problemData.isReplied === REPLYSTATUS.unReplied && props.problemData.status === COMMENTSTATUS.passed
|
|
|
+ "
|
|
|
+ style="width: 74px"
|
|
|
+ type="primary"
|
|
|
+ @click="openReply = true"
|
|
|
+ >回复</el-button
|
|
|
+ >
|
|
|
+ <el-button v-show="props.problemData.isReplied === REPLYSTATUS.replied" style="width: 74px" disabled
|
|
|
+ >已回复</el-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <el-divider />
|
|
|
+ <!-- <div class="problem-type">
|
|
|
+ <div>问题类型:</div>
|
|
|
+ <div class="type-content">{{ problemTypeName[props.problemData.problemType] }}</div>
|
|
|
+ </div> -->
|
|
|
+ <div class="problem-describe">
|
|
|
+ <div>评论内容:</div>
|
|
|
+ <div class="problem-content">{{ props.problemData.comment }}</div>
|
|
|
+ <div v-show="props.problemData.isUserDeleted === 1" class="delete-label"></div>
|
|
|
+ </div>
|
|
|
+ <div class="problem-picture">
|
|
|
+ <div class="picture-content" v-for="(item, index) in problemImageUrls" :key="index">
|
|
|
+ <el-image
|
|
|
+ style="width: 80px; height: 80px"
|
|
|
+ :src="item"
|
|
|
+ :zoom-rate="1.2"
|
|
|
+ :max-scale="7"
|
|
|
+ :min-scale="0.2"
|
|
|
+ :preview-src-list="problemImageUrls"
|
|
|
+ :initial-index="index"
|
|
|
+ fit="cover"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div v-if="openReply === true" style="position: relative">
|
|
|
+ <el-input placeholder="请输入回复(不超过30个字符)" type="textarea" v-model="replyContent" rows="4"> </el-input>
|
|
|
+ <span
|
|
|
+ style="
|
|
|
+ position: absolute;
|
|
|
+ left: 10px;
|
|
|
+ padding-bottom: 5px;
|
|
|
+ bottom: 2px;
|
|
|
+ color: grey;
|
|
|
+ background-color: #fff;
|
|
|
+ line-height: 0;
|
|
|
+ font-size: 12px;
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <span style="line-height: normal" :style="replyContent.length > 203 ? 'color:red' : ''">{{
|
|
|
+ replyContent.length - 3
|
|
|
+ }}</span>
|
|
|
+ <span style="line-height: normal">/200</span>
|
|
|
+ </span>
|
|
|
+ <div style="position: absolute; height: 32px; right: 10px; padding-bottom: 5px; bottom: 2px">
|
|
|
+ <el-button style="margin-top: 3px" type="primary" size="small" @click="submitReply">发布</el-button>
|
|
|
+ <el-button style="margin-top: 3px" size="small" @click="openReply = false">取消</el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div v-if="props.problemData.isReplied === REPLYSTATUS.replied" style="position: relative">
|
|
|
+ <el-input type="textarea" v-model="props.problemData.reply" rows="3" disabled> </el-input>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- <el-collapse v-if="props.problemData.problemStatus === STATUS.handled" v-model="activeNames">
|
|
|
+ <el-collapse-item name="1">
|
|
|
+ <template #title>
|
|
|
+ <div class="problem-describe">
|
|
|
+ <div>处理人:</div>
|
|
|
+ <div class="problem-content">{{ props.problemData.processorName }}</div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <div class="problem-describe">
|
|
|
+ <div>处理措施:</div>
|
|
|
+ <div class="problem-content">{{ props.problemData.dealMethod }}</div>
|
|
|
+ </div>
|
|
|
+ </el-collapse-item>
|
|
|
+ </el-collapse> -->
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup lang="ts">
|
|
|
+ import { ref, computed } from 'vue';
|
|
|
+ // import { useRouter } from 'vue-router';
|
|
|
+ import { Records, REPLYSTATUS, COMMENTSTATUS, undateCommentStatus, replyComment } from '@/api/comments/comments';
|
|
|
+ // import useHandleStore from '../useHandleStore';
|
|
|
+ // import { storeToRefs } from 'pinia';
|
|
|
+ // import { problemTypeName } from '../constant';
|
|
|
+
|
|
|
+ // const useSingle = useHandleStore();
|
|
|
+ // const { singleFeedback } = storeToRefs(useSingle);
|
|
|
+
|
|
|
+ // const router = useRouter();
|
|
|
+ const props = defineProps<{
|
|
|
+ problemData: Records;
|
|
|
+ reFreshList: () => unknown;
|
|
|
+ }>();
|
|
|
+
|
|
|
+ // const showComment = ref<boolean>(false);
|
|
|
+ // const replyed = ref<boolean>(false);
|
|
|
+
|
|
|
+ // const activeNames = ref<string>('');
|
|
|
+ const problemImageUrls = computed(() => {
|
|
|
+ const imageUrlString = props.problemData.picUrl;
|
|
|
+ return imageUrlString ? imageUrlString.split(',') : [];
|
|
|
+ });
|
|
|
+
|
|
|
+ // const handleProblem = () => {
|
|
|
+ // singleFeedback.value = props.problemData;
|
|
|
+ // router.push('/system/feedback-handle');
|
|
|
+ // };
|
|
|
+ const hideComment = () => {
|
|
|
+ // showComment.value = false;
|
|
|
+ undateCommentStatus({ id: props.problemData.id, status: COMMENTSTATUS.rejected }).then(() => {
|
|
|
+ props.reFreshList();
|
|
|
+ // console.log('隐藏成功');
|
|
|
+ });
|
|
|
+ // console.log('隐藏');
|
|
|
+ };
|
|
|
+ const displayComment = () => {
|
|
|
+ // showComment.value = true;
|
|
|
+ undateCommentStatus({ id: props.problemData.id, status: COMMENTSTATUS.passed }).then(() => {
|
|
|
+ props.reFreshList();
|
|
|
+ // console.log('显示成功');
|
|
|
+ });
|
|
|
+ // console.log('显示');
|
|
|
+ };
|
|
|
+ const submitReply = () => {
|
|
|
+ // replyed.value = true;
|
|
|
+ replyComment({ id: props.problemData.id, reply: replyContent.value }).then(() => {
|
|
|
+ openReply.value = false;
|
|
|
+ props.reFreshList();
|
|
|
+ // console.log('隐藏成功');
|
|
|
+ });
|
|
|
+ // console.log('回复');
|
|
|
+ };
|
|
|
+
|
|
|
+ const openReply = ref(false);
|
|
|
+
|
|
|
+ const replyContent = ref('回复:');
|
|
|
+ // const testContent = ref(
|
|
|
+ // '回复:3月7日,中共中央政治局委员、外交部长王毅谈中美关系时对美国连发5问,并表示,相互尊重是中美关系的重要前提。',
|
|
|
+ // );
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+ .single-item {
|
|
|
+ background: #ffffff;
|
|
|
+ box-shadow: 0px 1px 8px 0px rgba(0, 0, 0, 0.09);
|
|
|
+ border-radius: 6px;
|
|
|
+ padding: 16px 12px 0px 12px;
|
|
|
+ position: relative;
|
|
|
+ }
|
|
|
+
|
|
|
+ .single-contact {
|
|
|
+ margin-left: 20px;
|
|
|
+ margin-right: 40px;
|
|
|
+ color: #00000073;
|
|
|
+ }
|
|
|
+ .buttonBar {
|
|
|
+ position: absolute;
|
|
|
+ display: flex;
|
|
|
+ width: 200px;
|
|
|
+ top: 11px;
|
|
|
+ right: 12px;
|
|
|
+ }
|
|
|
+ .single-handle {
|
|
|
+ position: relative;
|
|
|
+ top: 11px;
|
|
|
+ right: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-divider--horizontal {
|
|
|
+ margin: 16px 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .problem-type,
|
|
|
+ .problem-describe {
|
|
|
+ font-size: 14px;
|
|
|
+ white-space: nowrap;
|
|
|
+ word-break: break-word;
|
|
|
+ display: flex;
|
|
|
+ margin-bottom: 8px;
|
|
|
+ .delete-label {
|
|
|
+ width: 100px;
|
|
|
+ height: 60px;
|
|
|
+ position: absolute;
|
|
|
+ right: 80px;
|
|
|
+ top: 60px;
|
|
|
+ background-image: url('@/assets/icons/config-fail.png');
|
|
|
+ background-size: 100% 100%;
|
|
|
+ cursor: pointer;
|
|
|
+
|
|
|
+ background-size: 100% 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .type-content,
|
|
|
+ .problem-content {
|
|
|
+ white-space: pre-wrap;
|
|
|
+ word-break: break-word;
|
|
|
+ }
|
|
|
+ .type-content {
|
|
|
+ font-weight: 600;
|
|
|
+ }
|
|
|
+ .problem-picture {
|
|
|
+ display: flex;
|
|
|
+ gap: 20px;
|
|
|
+ }
|
|
|
+
|
|
|
+ :deep(.el-collapse-item__header) {
|
|
|
+ border-bottom: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ :deep(.el-collapse-item__wrap) {
|
|
|
+ border-bottom: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ :deep(.el-collapse-item__content) {
|
|
|
+ padding-bottom: 0px;
|
|
|
+ }
|
|
|
+ :deep(.el-collapse) {
|
|
|
+ border-top: none;
|
|
|
+ }
|
|
|
+</style>
|