FileManage/web/src/views/appmanage/interaction.vue

280 lines
8.4 KiB
Vue
Raw Normal View History

2025-01-10 14:16:18 +08:00
<script lang="ts">
export default {
name: 'interaction' // 互动管理
};
</script>
<script setup lang="ts">
import { onMounted, ref } from "vue";
import Page from '@/components/Pagination/page.vue';
import {queryAppQuestionAnswerPage,updateAppQuestionAnswer} from '@/api/appmanage'
import { ElMessage} from "element-plus";
import { useUserStore } from '@/store/modules/user';
const userStore = useUserStore();
const queryInfo :any = ref({
current:1,
size:10,
total:0
})
const searchval = ref('')
const dialogVisible = ref(false)
const chooseinfo:any = ref({})
const textarea = ref('')
const contentdata:any = ref([])
const contentdatas:any = ref([])
const isSwitch = ref(false)
onMounted(() => {
getData();
getunData()
});
//搜索
function getData(){
const params:any = {
current: queryInfo.value.current,
size:queryInfo.value.size,
status:'02',
name:searchval.value
}
if(userStore.institutionId !=null&&userStore.institutionId !=''){
params.institutionId = userStore.institutionId
}
queryAppQuestionAnswerPage(params).then((res:any) => {
contentdata.value = res.data.records
queryInfo.value.total = res.data.total
})
}
function getunData(){
const params:any = {
current: queryInfo.value.current,
size:9999,
status:'01',
}
if(userStore.institutionId !=null&&userStore.institutionId !=''){
params.institutionId = userStore.institutionId
}
queryAppQuestionAnswerPage(params).then((res:any) => {
contentdatas.value = res.data.records
queryInfo.value.total = res.data.total
})
}
//点击回答按钮
function answerclick(val:any){
isSwitch.value = false
chooseinfo.value = val
dialogVisible.value = true
}
function handleClose(){
dialogVisible.value = false
}
//确认按钮
function answersubmit(){
if(isSwitch.value == true){
return
}
isSwitch.value = true
const params = chooseinfo.value
params.answer = textarea.value
params.questionStatus = '02'
updateAppQuestionAnswer(params).then((res:any) => {
ElMessage({
message: "回答成功",
type: "success",
});
getData()
getunData()
dialogVisible.value = false
isSwitch.value = false
})
}
function dateFormat(row: any) { // 时间方法
const daterc = row;
if (daterc != null) {
var date = new Date(daterc);
var year = date.getFullYear();
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;
date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
// 拼接
return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
}
}
</script>
<template>
<div class="interaction-box">
<div class="interaction-box-left">
<div class="box-left-top">
<el-input v-model="searchval" placeholder="请输入关键字" style="width:240px" clearable />
<el-button type="primary" class="ml-[10px]" @click="getData">搜索</el-button>
</div>
<div class="box-left-bottom">
<div class="problem-box" v-for="(item,index) in contentdata" :key="index">
<div class="problem-text">{{ item.question }}</div>
<div class="answer-text">{{ item.answer }}</div>
<div class="flex">
<div class="tel-text">{{ item.mobile }}</div>
<div class="time-text">{{ dateFormat(item.answer_time) }}</div>
</div>
</div>
</div>
<Page class="mt-[20px]" :total="queryInfo.total" v-model:size="queryInfo.size" v-model:current="queryInfo.current"
@pagination="getData" />
</div>
<div class="interaction-box-right">
<div class="box-right-top">
<div class="unproblem-title">未解决问题</div>
<div class="unproblem-line"></div>
</div>
<div class="box-right-bottom">
<div class="problem-box mt-[18px]" v-for="(items,indexs) in contentdatas" :key="indexs">
<div class="problem-text">{{ items.question }}</div>
<div class="flex mt-[5px] items-center justify-between">
<div class="flex">
<div class="tel-text">{{ items.mobile }}</div>
<div class="time-text">{{ dateFormat(items.question_time) }}</div>
</div>
<div>
<div class="answer-button" @click="answerclick(items)">回答</div>
</div>
</div>
</div>
</div>
</div>
</div>
<el-dialog v-model="dialogVisible" :close-on-click-modal="false" title="回答" :before-close="handleClose" width="40%" draggable append-to-body>
<div>
<div class="dialog-title">{{chooseinfo.question}}</div>
<el-input v-model="textarea" :autosize="{ minRows: 18 }" type="textarea" class="mb-[20px]"/>
</div>
<span class="dialog-footer flex justify-end">
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="answersubmit">确定</el-button>
</span>
</el-dialog>
</template>
<style scoped lang="scss">
.interaction-box{
width: 100%;
display: flex;
height: calc(100vh - 130px);
.interaction-box-left{
width: 70%;
height: 100%;
background: #fff;
border-radius: 5px;
box-shadow: 0px 0px 10px rgba(219, 225, 236, 0.498039215686275);
padding: 20px;
.box-left-top{
height: 50px;
}
.box-left-bottom{
height: calc(100vh - 270px);
overflow: auto;
}
}
.interaction-box-right{
width: 30%;
height: 100%;
margin-left: 15px;
background: #fff;
border-radius: 5px;
box-shadow: 0px 0px 10px rgba(219, 225, 236, 0.498039215686275);
padding: 20px;
.box-right-top{
border-bottom: 1px solid #ececec;
position: relative;
.unproblem-title{
font-weight: 700;
font-style: normal;
font-size: 16px;
color: #1B1B1B;
padding-bottom: 13px;
}
.unproblem-line{
height: 3px;
width: 84px;
background: #4099ff;
position: absolute;
bottom:-2px;
}
}
.box-right-bottom{
height: calc(100vh - 205px);
overflow: auto;
}
}
}
.problem-text{
font-weight: 700;
font-style: normal;
font-size: 16px;
color: #363636;
line-height: 24px;
padding-bottom: 10px;
background: url('../../assets/appmanage/Q.png') no-repeat;
padding-left: 30px;
background-position: 2px 4px;
min-height: 20px;
}
.answer-text{
font-style: normal;
font-size: 14px;
color: #363636;
line-height: 24px;
padding-bottom: 10px;
background: url('../../assets/appmanage/A.png') no-repeat;
padding-left: 30px;
background-position: 2px 2px;
min-height: 30px;
}
.tel-text{
font-weight: 400;
font-style: normal;
font-size: 14px;
color: #949494;
background: url('../../assets/appmanage/tel.png') no-repeat;
padding-left: 25px;
background-position: 2px 3px;
}
.time-text{
font-weight: 400;
font-style: normal;
font-size: 14px;
color: #949494;
background: url('../../assets/appmanage/time.png') no-repeat;
padding-left: 25px;
background-position: 2px 3px;
margin-left: 35px;
}
.problem-box{
padding-bottom: 15px;
border-bottom: 1px solid #ececec;
margin-bottom: 20px;
}
.answer-button{
width: 50px;
height: 30px;
line-height: 30px;
background: inherit;
background-color: rgba(255, 153, 0, 1);
color: #fff;
border-radius: 5px;
font-size: 12px;
text-align: center;
cursor: pointer;
}
.dialog-title{
font-weight: 700;
font-style: normal;
font-size: 18px;
color: #363636;
line-height: 24px;
background: url('../../assets/appmanage/Q.png') no-repeat;
padding-left: 30px;
background-position: 2px 4px;
margin-bottom: 30px;
}
</style>