|
@@ -2,65 +2,74 @@
|
|
<div class="hc-order-service">
|
|
<div class="hc-order-service">
|
|
<div class="order-service-content">
|
|
<div class="order-service-content">
|
|
<el-scrollbar ref="scrollbarRef">
|
|
<el-scrollbar ref="scrollbarRef">
|
|
- <div class="content-box" v-loading="dataLoading" element-loading-text="获取数据中...">
|
|
|
|
- <div class="comment-card-box" v-for="(item,index) in orderDataList" :key="item.id">
|
|
|
|
|
|
+ <div v-loading="dataLoading" class="content-box" element-loading-text="获取数据中...">
|
|
|
|
+ <div v-for="(item,index) in orderDataList" :key="item.id" class="comment-card-box">
|
|
<div class="user-avatar-box">
|
|
<div class="user-avatar-box">
|
|
- <el-avatar :size="50" :src="item.avatar || avatarPng" />
|
|
|
|
|
|
+ <el-avatar :size="50" :src="item.avatar || avatarPng"/>
|
|
</div>
|
|
</div>
|
|
<div class="card-content-box">
|
|
<div class="card-content-box">
|
|
<div class="user-info-box">
|
|
<div class="user-info-box">
|
|
- <div class="text-lg">{{item['createUserName']||'用户名异常'}}</div>
|
|
|
|
- <div class="text-gray">{{item['createTime']}}</div>
|
|
|
|
|
|
+ <div class="text-lg">{{ item['createUserName'] || '用户名异常' }}</div>
|
|
|
|
+ <div class="text-gray">{{ item['createTime'] }}</div>
|
|
</div>
|
|
</div>
|
|
<div class="desc_para" v-html="item['opinionContent']"></div>
|
|
<div class="desc_para" v-html="item['opinionContent']"></div>
|
|
- <div class="image_desc" v-if="item['returnFiles']?.length > 0">
|
|
|
|
- <div class="hc-image-box" v-for="(items,indexs) in item['returnFiles']">
|
|
|
|
- <HcImg class="hc-image" :src="items" :srcs="item['returnFiles']" :index="indexs"/>
|
|
|
|
|
|
+ <div v-if="item['returnFiles']?.length > 0" class="image_desc">
|
|
|
|
+ <div v-for="(items,indexs) in item['returnFiles']" class="hc-image-box">
|
|
|
|
+ <HcImg :index="indexs" :src="items" :srcs="item['returnFiles']" class="hc-image"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="foot-tools-box">
|
|
<div class="foot-tools-box">
|
|
- <div class="icon-box" :class="item['commentsNumber'] >= 1 ? 'active' : ''" @click="commentExpanded(item)">
|
|
|
|
- <HcIcon name="question-answer" class="icon" :fill="item['commentsNumber'] >= 1"/>
|
|
|
|
- <span class="badge" v-if="item['commentsNumber'] >= 1">{{item['commentsNumber']}}</span>
|
|
|
|
|
|
+ <div :class="item['commentsNumber'] >= 1 ? 'active' : ''" class="icon-box"
|
|
|
|
+ @click="commentExpanded(item)">
|
|
|
|
+ <HcIcon :fill="item['commentsNumber'] >= 1" class="icon" name="question-answer"/>
|
|
|
|
+ <span v-if="item['commentsNumber'] >= 1"
|
|
|
|
+ class="badge">{{ item['commentsNumber'] }}</span>
|
|
</div>
|
|
</div>
|
|
- <div class="icon-box" :class="item['currentUserGood'] ? 'active' : ''" :data-index="item['expandedName']" @click="likeClick(item)">
|
|
|
|
- <i class="hc-icon-i icon" :class="item['currentUserGood'] ? 'hcicon-praise_fill ': 'hcicon-praise'"></i>
|
|
|
|
- <span class="badge" v-if="item['goodNumber'] >= 1">{{item['goodNumber']}}</span>
|
|
|
|
|
|
+ <div :class="item['currentUserGood'] ? 'active' : ''" :data-index="item['expandedName']"
|
|
|
|
+ class="icon-box" @click="likeClick(item)">
|
|
|
|
+ <i :class="item['currentUserGood'] ? 'hcicon-praise_fill ': 'hcicon-praise'"
|
|
|
|
+ class="hc-icon-i icon"></i>
|
|
|
|
+ <span v-if="item['goodNumber'] >= 1" class="badge">{{ item['goodNumber'] }}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <el-collapse class="hc-collapse-box" v-model="item['expandedName']" accordion>
|
|
|
|
- <el-collapse-item title="" :name="`commentList-${item['id']}`">
|
|
|
|
|
|
+ <el-collapse v-model="item['expandedName']" accordion class="hc-collapse-box">
|
|
|
|
+ <el-collapse-item :name="`commentList-${item['id']}`" title="">
|
|
<div class="collapse-comment-box">
|
|
<div class="collapse-comment-box">
|
|
<div class="comment-reply-content-box">
|
|
<div class="comment-reply-content-box">
|
|
- <el-input autosize type="textarea" v-model="item['replyContent']" placeholder="我也说一句"/>
|
|
|
|
- <el-button type="primary" hc-btn @click="saveCommentClick(item)">评论</el-button>
|
|
|
|
|
|
+ <el-input v-model="item['replyContent']" autosize placeholder="我也说一句"
|
|
|
|
+ type="textarea"/>
|
|
|
|
+ <el-button hc-btn type="primary" @click="saveCommentClick(item)">评论
|
|
|
|
+ </el-button>
|
|
</div>
|
|
</div>
|
|
- <div class="user-comment-info-box" v-for="items in item['expandedCommentList']" :key="items.id">
|
|
|
|
- <el-avatar :size="50" :src="items.avatar || avatarPng" />
|
|
|
|
|
|
+ <div v-for="items in item['expandedCommentList']" :key="items.id"
|
|
|
|
+ class="user-comment-info-box">
|
|
|
|
+ <el-avatar :size="50" :src="items.avatar || avatarPng"/>
|
|
<div class="user-comment-box">
|
|
<div class="user-comment-box">
|
|
<div class="user-info-box">
|
|
<div class="user-info-box">
|
|
- <span class="user-name">{{items['userName']||'用户名异常'}}</span>
|
|
|
|
- <span class="create-time">{{items['createTime']}}</span>
|
|
|
|
|
|
+ <span
|
|
|
|
+ class="user-name">{{ items['userName'] || '用户名异常' }}</span>
|
|
|
|
+ <span class="create-time">{{ items['createTime'] }}</span>
|
|
</div>
|
|
</div>
|
|
- <div class="user-comment-content-box" v-html="items['replyContent']"></div>
|
|
|
|
|
|
+ <div class="user-comment-content-box"
|
|
|
|
+ v-html="items['replyContent']"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</el-collapse-item>
|
|
</el-collapse-item>
|
|
</el-collapse>
|
|
</el-collapse>
|
|
</div>
|
|
</div>
|
|
- <div class="code-status-box" v-if="parseInt(item['isSolve']) === 1">
|
|
|
|
- <img :src="Web515Png" class="widget" alt=""/>
|
|
|
|
|
|
+ <div v-if="parseInt(item['isSolve']) === 1" class="code-status-box">
|
|
|
|
+ <img :src="Web515Png" alt="" class="widget"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</el-scrollbar>
|
|
</el-scrollbar>
|
|
<div class="page-top-btn" @click="scrollToTop">
|
|
<div class="page-top-btn" @click="scrollToTop">
|
|
- <HcIcon name="arrow-up" class="icon"/>
|
|
|
|
|
|
+ <HcIcon class="icon" name="arrow-up"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!--我的工单服务-->
|
|
<!--我的工单服务-->
|
|
- <div class="order-service-data" :style="'width:' + leftWidth + 'px;'">
|
|
|
|
|
|
+ <div :style="'width:' + leftWidth + 'px;'" class="order-service-data">
|
|
<HcCard :scrollbar="false">
|
|
<HcCard :scrollbar="false">
|
|
<template #header>
|
|
<template #header>
|
|
<el-badge :value="2" class="item-badge">
|
|
<el-badge :value="2" class="item-badge">
|
|
@@ -68,45 +77,50 @@
|
|
</el-badge>
|
|
</el-badge>
|
|
</template>
|
|
</template>
|
|
<template #extra>
|
|
<template #extra>
|
|
- <el-tooltip effect="dark" content="发起新工单服务" placement="top">
|
|
|
|
- <el-button type="primary" hc-btn class="hc-add-icon" @click="newOrderServiceClick">
|
|
|
|
|
|
+ <el-tooltip content="发起新工单服务" effect="dark" placement="top">
|
|
|
|
+ <el-button class="hc-add-icon" hc-btn type="primary" @click="newOrderServiceClick">
|
|
<HcIcon name="add" style="margin-right: 0"/>
|
|
<HcIcon name="add" style="margin-right: 0"/>
|
|
</el-button>
|
|
</el-button>
|
|
</el-tooltip>
|
|
</el-tooltip>
|
|
</template>
|
|
</template>
|
|
<div class="mb-5">
|
|
<div class="mb-5">
|
|
- <el-select v-model="nameSelectKey" block placeholder="工单名称" size="large" @change="nameSelectUpdate">
|
|
|
|
- <el-option v-for="item in nameSelectData" :key="item.id" :label="item?.title" :value="item?.id"/>
|
|
|
|
|
|
+ <el-select v-model="nameSelectKey" block placeholder="工单名称" size="large"
|
|
|
|
+ @change="nameSelectUpdate">
|
|
|
|
+ <el-option v-for="item in nameSelectData" :key="item.id" :label="item?.title"
|
|
|
|
+ :value="item?.id"/>
|
|
</el-select>
|
|
</el-select>
|
|
</div>
|
|
</div>
|
|
- <div class="time-line-box" :class="isCurrentBol?'time-height':''">
|
|
|
|
|
|
+ <div :class="isCurrentBol?'time-height':''" class="time-line-box">
|
|
<el-scrollbar>
|
|
<el-scrollbar>
|
|
<el-timeline class="hc-time-line">
|
|
<el-timeline class="hc-time-line">
|
|
<template v-for="(item,index) in orderFlowList" :key="index">
|
|
<template v-for="(item,index) in orderFlowList" :key="index">
|
|
- <el-timeline-item :class="item['currentBol']?'success':item['current']?'primary':''" size="large">
|
|
|
|
|
|
+ <el-timeline-item :class="item['currentBol']?'success':item['current']?'primary':''"
|
|
|
|
+ size="large">
|
|
<div class="timeline-item-icon">
|
|
<div class="timeline-item-icon">
|
|
- <HcIcon name="check" class="check-icon" v-if="item['currentBol']"/>
|
|
|
|
- <span v-else>{{index + 1}}</span>
|
|
|
|
|
|
+ <HcIcon v-if="item['currentBol']" class="check-icon" name="check"/>
|
|
|
|
+ <span v-else>{{ index + 1 }}</span>
|
|
</div>
|
|
</div>
|
|
- <div class="reply-name">{{item['replyName']}}</div>
|
|
|
|
|
|
+ <div class="reply-name">{{ item['replyName'] }}</div>
|
|
<div class="reply-content" v-html="item['replyContent']"></div>
|
|
<div class="reply-content" v-html="item['replyContent']"></div>
|
|
</el-timeline-item>
|
|
</el-timeline-item>
|
|
</template>
|
|
</template>
|
|
</el-timeline>
|
|
</el-timeline>
|
|
</el-scrollbar>
|
|
</el-scrollbar>
|
|
</div>
|
|
</div>
|
|
- <div class="evaluation-box" :class="isCurrentBol?'show':''">
|
|
|
|
|
|
+ <div :class="isCurrentBol?'show':''" class="evaluation-box">
|
|
<div class="text-lg font-bold">评价</div>
|
|
<div class="text-lg font-bold">评价</div>
|
|
- <div class="tip-box">请对工单处理评价,若是未解决问题,可进行投诉,平台核实情况,将对相关客服人员绩效考核,并且重新为您自动发起工单解决问题</div>
|
|
|
|
|
|
+ <div class="tip-box">
|
|
|
|
+ 请对工单处理评价,若是未解决问题,可进行投诉,平台核实情况,将对相关客服人员绩效考核,并且重新为您自动发起工单解决问题
|
|
|
|
+ </div>
|
|
<div class="radio-group-box">
|
|
<div class="radio-group-box">
|
|
- <el-radio-group class="radio-group" v-model="evaluationKey">
|
|
|
|
- <div class="radio-item" v-for="item in evaluationData" :key="item.value">
|
|
|
|
- <el-radio :label="item.value" size="large" class="size-xl">{{ item.label }}</el-radio>
|
|
|
|
|
|
+ <el-radio-group v-model="evaluationKey" class="radio-group">
|
|
|
|
+ <div v-for="item in evaluationData" :key="item.value" class="radio-item">
|
|
|
|
+ <el-radio :label="item.value" class="size-xl" size="large">{{ item.label }}</el-radio>
|
|
</div>
|
|
</div>
|
|
</el-radio-group>
|
|
</el-radio-group>
|
|
</div>
|
|
</div>
|
|
<div class="btn-box">
|
|
<div class="btn-box">
|
|
- <el-button type="primary" hc-btn @click="disposeUserFeedback">
|
|
|
|
|
|
+ <el-button hc-btn type="primary" @click="disposeUserFeedback">
|
|
<HcIcon name="check_circle"/>
|
|
<HcIcon name="check_circle"/>
|
|
<span>提交</span>
|
|
<span>提交</span>
|
|
</el-button>
|
|
</el-button>
|
|
@@ -117,51 +131,59 @@
|
|
<div class="horizontal-drag-line" @mousedown="onmousedown"/>
|
|
<div class="horizontal-drag-line" @mousedown="onmousedown"/>
|
|
</div>
|
|
</div>
|
|
<!--提交工单-->
|
|
<!--提交工单-->
|
|
- <el-dialog v-model="showModal" title="发起新工单服务" width="720px" class="hc-modal-border" :before-close="handleModalClose">
|
|
|
|
|
|
+ <el-dialog v-model="showModal" :before-close="handleModalClose" class="hc-modal-border" title="发起新工单服务"
|
|
|
|
+ width="720px">
|
|
<div class="title">请选择您需要反馈的问题类型</div>
|
|
<div class="title">请选择您需要反馈的问题类型</div>
|
|
<div class="hc-type-tabs my-5">
|
|
<div class="hc-type-tabs my-5">
|
|
<el-radio-group v-model="typeTabKey" size="large" @change="typeTabChange">
|
|
<el-radio-group v-model="typeTabKey" size="large" @change="typeTabChange">
|
|
- <el-radio-button v-for="item in typeTab" :label="item?.dictValue">{{item?.dictValue}}</el-radio-button>
|
|
|
|
|
|
+ <el-radio-button v-for="item in typeTab" :label="item?.dictValue">{{ item?.dictValue }}
|
|
|
|
+ </el-radio-button>
|
|
</el-radio-group>
|
|
</el-radio-group>
|
|
</div>
|
|
</div>
|
|
<div class="modal-checkbox-box">
|
|
<div class="modal-checkbox-box">
|
|
<el-checkbox-group v-model="typeCheckBox[typeTabIndex]">
|
|
<el-checkbox-group v-model="typeCheckBox[typeTabIndex]">
|
|
- <div class="checkbox-item" v-for="item in typeTab[typeTabIndex]?.children" :key="item.id">
|
|
|
|
- <el-checkbox :label="item['dictValue']">{{item['dictValue']}}</el-checkbox>
|
|
|
|
|
|
+ <div v-for="item in typeTab[typeTabIndex]?.children" :key="item.id" class="checkbox-item">
|
|
|
|
+ <el-checkbox :label="item['dictValue']">{{ item['dictValue'] }}</el-checkbox>
|
|
</div>
|
|
</div>
|
|
</el-checkbox-group>
|
|
</el-checkbox-group>
|
|
</div>
|
|
</div>
|
|
<div class="mt-5">
|
|
<div class="mt-5">
|
|
- <el-input v-model="opinionContent" :rows="3" type="textarea" placeholder="请输入你宝贵的建议,我们将会跟踪解决"/>
|
|
|
|
|
|
+ <el-input v-model="opinionContent" :rows="3" placeholder="请输入你宝贵的建议,我们将会跟踪解决"
|
|
|
|
+ type="textarea"/>
|
|
</div>
|
|
</div>
|
|
- <div class="mt-3 upload-img" v-loading="spinShow">
|
|
|
|
|
|
+ <div v-loading="spinShow" class="mt-3 upload-img">
|
|
<div class="w-full">
|
|
<div class="w-full">
|
|
- <HcUploads :fileList="uploadFileList" :accept="uploadAccept" action="put-file" :limit="3" :size="30" :viewer="false"
|
|
|
|
- @change="uploadChange" @progress="uploadsProgress" @del="removeUpload" @preview="handlePreview"/>
|
|
|
|
|
|
+ <HcUploads :accept="uploadAccept" :fileList="uploadFileList" :limit="3" :size="30" :viewer="false"
|
|
|
|
+ action="put-file"
|
|
|
|
+ @change="uploadChange" @del="removeUpload" @preview="handlePreview"
|
|
|
|
+ @progress="uploadsProgress"/>
|
|
</div>
|
|
</div>
|
|
- <el-image-viewer v-if="showViewer" :initial-index="initialIndex" :url-list="previewFileList" @close="previewModalClose"/>
|
|
|
|
|
|
+ <el-image-viewer v-if="showViewer" :initial-index="initialIndex" :url-list="previewFileList"
|
|
|
|
+ @close="previewModalClose"/>
|
|
</div>
|
|
</div>
|
|
<div class="mt-3">
|
|
<div class="mt-3">
|
|
- <el-alert title="请上传JPG、PNG格式的图片文件,最多上传 3 张图片,文件大小不超过30M" type="error" :closable="false"/>
|
|
|
|
|
|
+ <el-alert :closable="false" title="请上传JPG、PNG格式的图片文件,最多上传 3 张图片,文件大小不超过30M"
|
|
|
|
+ type="error"/>
|
|
</div>
|
|
</div>
|
|
<template #footer>
|
|
<template #footer>
|
|
<div class="dialog-footer">
|
|
<div class="dialog-footer">
|
|
<el-button size="large" @click="handleModalClose">取消</el-button>
|
|
<el-button size="large" @click="handleModalClose">取消</el-button>
|
|
- <el-button type="primary" hc-btn :disabled="uploadsLoading" @click="saveClick">提交</el-button>
|
|
|
|
|
|
+ <el-button :disabled="uploadsLoading" hc-btn type="primary" @click="saveClick">提交</el-button>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
|
|
|
<!--提示框-->
|
|
<!--提示框-->
|
|
- <el-dialog v-model="showTipModal" title="感谢" width="600px" class="hc-modal-border" :before-close="handleTipModalClose">
|
|
|
|
|
|
+ <el-dialog v-model="showTipModal" :before-close="handleTipModalClose" class="hc-modal-border" title="感谢"
|
|
|
|
+ width="600px">
|
|
<div class="tip-modal-icon-box">
|
|
<div class="tip-modal-icon-box">
|
|
- <HcIcon name="emotion" fill/>
|
|
|
|
|
|
+ <HcIcon fill name="emotion"/>
|
|
</div>
|
|
</div>
|
|
<div class="tip-modal-text-box">感谢您的仗义直言,大恩不言谢,有事联系我们,我们随时都在</div>
|
|
<div class="tip-modal-text-box">感谢您的仗义直言,大恩不言谢,有事联系我们,我们随时都在</div>
|
|
<template #footer>
|
|
<template #footer>
|
|
<div class="dialog-footer">
|
|
<div class="dialog-footer">
|
|
<el-button size="large" @click="tipModalClick">下次不用感谢了</el-button>
|
|
<el-button size="large" @click="tipModalClick">下次不用感谢了</el-button>
|
|
- <el-button type="primary" hc-btn @click="handleTipModalClose">不客气</el-button>
|
|
|
|
|
|
+ <el-button hc-btn type="primary" @click="handleTipModalClose">不客气</el-button>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
@@ -175,12 +197,11 @@ import orderServe from '~api/other/orderServe';
|
|
import avatarPng from '~src/assets/images/avatar.png';
|
|
import avatarPng from '~src/assets/images/avatar.png';
|
|
import Web515Png from '~src/assets/images/Web515.png';
|
|
import Web515Png from '~src/assets/images/Web515.png';
|
|
import {userConfigSave} from "~api/other";
|
|
import {userConfigSave} from "~api/other";
|
|
-import {isType, base64ToFile, getObjNullValue} from "vue-utils-plus"
|
|
|
|
|
|
+import {base64ToFile, getObjVal, getArrValue, getObjValue} from "js-fast-way"
|
|
import ossApi from "~api/oss";
|
|
import ossApi from "~api/oss";
|
|
|
|
|
|
//初始变量
|
|
//初始变量
|
|
const useAppState = useAppStore()
|
|
const useAppState = useAppStore()
|
|
-const { getArrValue, getObjValue } = isType()
|
|
|
|
const projectId = ref(useAppState.getProjectId);
|
|
const projectId = ref(useAppState.getProjectId);
|
|
const contractId = ref(useAppState.getContractId);
|
|
const contractId = ref(useAppState.getContractId);
|
|
const isScreenShort = ref(useAppState.getScreenShort)
|
|
const isScreenShort = ref(useAppState.getScreenShort)
|
|
@@ -200,7 +221,7 @@ watch(() => [
|
|
useAppState.getScreenShort
|
|
useAppState.getScreenShort
|
|
], ([ScreenShort]) => {
|
|
], ([ScreenShort]) => {
|
|
isScreenShort.value = ScreenShort
|
|
isScreenShort.value = ScreenShort
|
|
- if( ScreenShort ) {
|
|
|
|
|
|
+ if (ScreenShort) {
|
|
let base64 = window.sessionStorage.getItem('screenShort-base64') || '';
|
|
let base64 = window.sessionStorage.getItem('screenShort-base64') || '';
|
|
if (base64) uploadImgFile(base64)
|
|
if (base64) uploadImgFile(base64)
|
|
}
|
|
}
|
|
@@ -208,7 +229,7 @@ watch(() => [
|
|
|
|
|
|
nextTick(() => {
|
|
nextTick(() => {
|
|
//截图数据
|
|
//截图数据
|
|
- if(isScreenShort.value) {
|
|
|
|
|
|
+ if (isScreenShort.value) {
|
|
let base64 = window.sessionStorage.getItem('screenShort-base64') || '';
|
|
let base64 = window.sessionStorage.getItem('screenShort-base64') || '';
|
|
if (base64) uploadImgFile(base64)
|
|
if (base64) uploadImgFile(base64)
|
|
}
|
|
}
|
|
@@ -224,7 +245,7 @@ onMounted(() => {
|
|
const dataLoading = ref(false)
|
|
const dataLoading = ref(false)
|
|
const queryUserOpinionPage = async () => {
|
|
const queryUserOpinionPage = async () => {
|
|
dataLoading.value = true
|
|
dataLoading.value = true
|
|
- const { error, code, data } = await orderServe.queryUserOpinionPage(searchForm.value)
|
|
|
|
|
|
+ const {error, code, data} = await orderServe.queryUserOpinionPage(searchForm.value)
|
|
dataLoading.value = false
|
|
dataLoading.value = false
|
|
if (!error && code === 200) {
|
|
if (!error && code === 200) {
|
|
orderDataList.value = getArrValue(data['records'])
|
|
orderDataList.value = getArrValue(data['records'])
|
|
@@ -235,7 +256,7 @@ const queryUserOpinionPage = async () => {
|
|
|
|
|
|
//获取工单服务下拉列表
|
|
//获取工单服务下拉列表
|
|
const queryCurrentUserOpinionList = async () => {
|
|
const queryCurrentUserOpinionList = async () => {
|
|
- const { error, code, data } = await orderServe.queryCurrentUserOpinionList({
|
|
|
|
|
|
+ const {error, code, data} = await orderServe.queryCurrentUserOpinionList({
|
|
projectId: projectId.value
|
|
projectId: projectId.value
|
|
})
|
|
})
|
|
if (!error && code === 200) {
|
|
if (!error && code === 200) {
|
|
@@ -258,12 +279,12 @@ const isCurrentBol = ref(false)
|
|
const orderFlowList = ref([])
|
|
const orderFlowList = ref([])
|
|
const queryUserFlowOpinion = async () => {
|
|
const queryUserFlowOpinion = async () => {
|
|
let id = nameSelectKey.value || null;
|
|
let id = nameSelectKey.value || null;
|
|
- const { error, code, data } = await orderServe.queryUserFlowOpinion({userOpinionId: id})
|
|
|
|
|
|
+ const {error, code, data} = await orderServe.queryUserFlowOpinion({userOpinionId: id})
|
|
if (!error && code === 200) {
|
|
if (!error && code === 200) {
|
|
const res = getArrValue(data)
|
|
const res = getArrValue(data)
|
|
orderFlowList.value = res
|
|
orderFlowList.value = res
|
|
if (res.length > 0) {
|
|
if (res.length > 0) {
|
|
- const {currentBol, evaluation} = res[res.length-1];
|
|
|
|
|
|
+ const {currentBol, evaluation} = res[res.length - 1];
|
|
isCurrentBol.value = !!(currentBol && parseInt(evaluation) === -1);
|
|
isCurrentBol.value = !!(currentBol && parseInt(evaluation) === -1);
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
@@ -291,7 +312,7 @@ const commentExpanded = (item) => {
|
|
|
|
|
|
//获取评论列表
|
|
//获取评论列表
|
|
const queryCommentsList = async (item) => {
|
|
const queryCommentsList = async (item) => {
|
|
- const { error, code, data } = await orderServe.queryCommentsList({
|
|
|
|
|
|
+ const {error, code, data} = await orderServe.queryCommentsList({
|
|
userOpinionId: item.id
|
|
userOpinionId: item.id
|
|
})
|
|
})
|
|
if (!error && code === 200) {
|
|
if (!error && code === 200) {
|
|
@@ -306,7 +327,7 @@ const saveCommentClick = async (item) => {
|
|
if (!item['replyContent']) {
|
|
if (!item['replyContent']) {
|
|
window.$message?.warning('请先填写评论内容');
|
|
window.$message?.warning('请先填写评论内容');
|
|
} else {
|
|
} else {
|
|
- const { error, code } = await orderServe.saveUserComments({
|
|
|
|
|
|
+ const {error, code} = await orderServe.saveUserComments({
|
|
userOpinionId: item.id,
|
|
userOpinionId: item.id,
|
|
replyContent: item['replyContent'],
|
|
replyContent: item['replyContent'],
|
|
projectId: projectId.value,
|
|
projectId: projectId.value,
|
|
@@ -323,21 +344,21 @@ const saveCommentClick = async (item) => {
|
|
//点赞
|
|
//点赞
|
|
const likeClick = async (item) => {
|
|
const likeClick = async (item) => {
|
|
if (item['currentUserGood']) {
|
|
if (item['currentUserGood']) {
|
|
- const { error, code } = await orderServe.cancelGood({
|
|
|
|
|
|
+ const {error, code} = await orderServe.cancelGood({
|
|
userOpinionId: item.id
|
|
userOpinionId: item.id
|
|
})
|
|
})
|
|
if (!error && code === 200) {
|
|
if (!error && code === 200) {
|
|
item['currentUserGood'] = false
|
|
item['currentUserGood'] = false
|
|
- item['goodNumber'] --
|
|
|
|
|
|
+ item['goodNumber']--
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- const { error, code } = await orderServe.addGoodNumber({
|
|
|
|
|
|
+ const {error, code} = await orderServe.addGoodNumber({
|
|
userOpinionId: item.id,
|
|
userOpinionId: item.id,
|
|
good: 1
|
|
good: 1
|
|
})
|
|
})
|
|
if (!error && code === 200) {
|
|
if (!error && code === 200) {
|
|
item['currentUserGood'] = true
|
|
item['currentUserGood'] = true
|
|
- item['goodNumber'] ++
|
|
|
|
|
|
+ item['goodNumber']++
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -370,7 +391,7 @@ const handleModalClose = () => {
|
|
|
|
|
|
//获取字典信息
|
|
//获取字典信息
|
|
const queryDictBizList = async () => {
|
|
const queryDictBizList = async () => {
|
|
- const { error, code, data } = await orderServe.queryDictBizList()
|
|
|
|
|
|
+ const {error, code, data} = await orderServe.queryDictBizList()
|
|
if (!error && code === 200) {
|
|
if (!error && code === 200) {
|
|
const res = getArrValue(data)
|
|
const res = getArrValue(data)
|
|
typeTab.value = res
|
|
typeTab.value = res
|
|
@@ -391,7 +412,7 @@ const uploadAccept = "image/png,image/jpg,image/jpeg"
|
|
const uploadFileList = ref([])
|
|
const uploadFileList = ref([])
|
|
|
|
|
|
//上传的文件结果
|
|
//上传的文件结果
|
|
-const uploadChange = ({ fileList}) => {
|
|
|
|
|
|
+const uploadChange = ({fileList}) => {
|
|
uploadFileList.value = fileList
|
|
uploadFileList.value = fileList
|
|
}
|
|
}
|
|
|
|
|
|
@@ -405,7 +426,7 @@ const uploadsProgress = (val) => {
|
|
const showViewer = ref(false)
|
|
const showViewer = ref(false)
|
|
const initialIndex = ref(-1)
|
|
const initialIndex = ref(-1)
|
|
const previewFileList = ref([])
|
|
const previewFileList = ref([])
|
|
-const handlePreview = ({ index, fileArr}) => {
|
|
|
|
|
|
+const handlePreview = ({index, fileArr}) => {
|
|
previewFileList.value = fileArr
|
|
previewFileList.value = fileArr
|
|
initialIndex.value = index
|
|
initialIndex.value = index
|
|
showViewer.value = true
|
|
showViewer.value = true
|
|
@@ -421,7 +442,7 @@ const previewModalClose = () => {
|
|
const removeUpload = async ({link}) => {
|
|
const removeUpload = async ({link}) => {
|
|
const arrUrl = link.split(".com//");
|
|
const arrUrl = link.split(".com//");
|
|
if (arrUrl.length > 0) {
|
|
if (arrUrl.length > 0) {
|
|
- await ossApi.removeFile({fileName: arrUrl[1]},false)
|
|
|
|
|
|
+ await ossApi.removeFile({fileName: arrUrl[1]}, false)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -435,7 +456,7 @@ const uploadImgFile = async (base64) => {
|
|
//上传文件
|
|
//上传文件
|
|
spinShow.value = true
|
|
spinShow.value = true
|
|
newOrderServiceClick()
|
|
newOrderServiceClick()
|
|
- const { error, code, data } = await ossApi.putFile(formData, false)
|
|
|
|
|
|
+ const {error, code, data} = await ossApi.putFile(formData, false)
|
|
spinShow.value = false
|
|
spinShow.value = false
|
|
if (!error && code === 200) {
|
|
if (!error && code === 200) {
|
|
let res = getObjValue(data)
|
|
let res = getObjValue(data)
|
|
@@ -460,14 +481,16 @@ const saveClick = async () => {
|
|
//拼接问题类型
|
|
//拼接问题类型
|
|
let problemType = typeTabKey.value, index = typeTabIndex.value, problemVal = '';
|
|
let problemType = typeTabKey.value, index = typeTabIndex.value, problemVal = '';
|
|
const checkBoxVal = typeCheckBox.value[index] || [];
|
|
const checkBoxVal = typeCheckBox.value[index] || [];
|
|
- checkBoxVal.forEach(item => {problemVal += `-${item}`})
|
|
|
|
|
|
+ checkBoxVal.forEach(item => {
|
|
|
|
+ problemVal += `-${item}`
|
|
|
|
+ })
|
|
let filesUrl = getUploadFileUrl()
|
|
let filesUrl = getUploadFileUrl()
|
|
//判断数据
|
|
//判断数据
|
|
if (!problemVal) {
|
|
if (!problemVal) {
|
|
window.$message?.warning('请先选择问题类型');
|
|
window.$message?.warning('请先选择问题类型');
|
|
} else {
|
|
} else {
|
|
//请求接口
|
|
//请求接口
|
|
- const { error, code } = await orderServe.saveUserOpinion({
|
|
|
|
|
|
+ const {error, code} = await orderServe.saveUserOpinion({
|
|
projectId: projectId.value,
|
|
projectId: projectId.value,
|
|
contractId: contractId.value,
|
|
contractId: contractId.value,
|
|
problemType: problemType + problemVal,
|
|
problemType: problemType + problemVal,
|
|
@@ -485,7 +508,7 @@ const saveClick = async () => {
|
|
//更新数据
|
|
//更新数据
|
|
queryUserOpinionPage()
|
|
queryUserOpinionPage()
|
|
queryCurrentUserOpinionList()
|
|
queryCurrentUserOpinionList()
|
|
- window?.location?.reload() //刷新页面
|
|
|
|
|
|
+ window?.location?.reload() //刷新页面
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -494,7 +517,7 @@ const saveClick = async () => {
|
|
const getUploadFileUrl = () => {
|
|
const getUploadFileUrl = () => {
|
|
let fileArr = [], fileList = uploadFileList.value ?? [];
|
|
let fileArr = [], fileList = uploadFileList.value ?? [];
|
|
fileList.forEach(item => {
|
|
fileList.forEach(item => {
|
|
- if (getObjNullValue(item?.response)) {
|
|
|
|
|
|
+ if (getObjVal(item?.response)) {
|
|
fileArr.push(item?.response?.data?.link)
|
|
fileArr.push(item?.response?.data?.link)
|
|
} else {
|
|
} else {
|
|
fileArr.push(item?.url)
|
|
fileArr.push(item?.url)
|
|
@@ -513,7 +536,7 @@ const evaluationData = [
|
|
]
|
|
]
|
|
const disposeUserFeedback = async () => {
|
|
const disposeUserFeedback = async () => {
|
|
let oldEndFlow = orderFlowList.value[3]?.id || ''
|
|
let oldEndFlow = orderFlowList.value[3]?.id || ''
|
|
- const { error, code } = await orderServe.disposeUserFeedback({
|
|
|
|
|
|
+ const {error, code} = await orderServe.disposeUserFeedback({
|
|
oldEndFlow: oldEndFlow,
|
|
oldEndFlow: oldEndFlow,
|
|
type: evaluationKey.value || '',
|
|
type: evaluationKey.value || '',
|
|
userOpinionId: nameSelectKey.value || ''
|
|
userOpinionId: nameSelectKey.value || ''
|