Commit 21ea7596 authored by 华国豪's avatar 华国豪 🙄

新增行政填写意见调查

parent 58dfca4d
.newSummaryLogin .item img {
width: 100%;
}
.login_Div {
background: #fff;
padding: 60px 0 20px 0;
box-sizing: border-box;
height: 100%;
width: 60%;
margin: 0 auto;
}
.newSummaryLogin .error-msg{
color:#cccccc;
font-size:12px;
text-align: left;
width:300px;
margin:0 auto 0;
height:20px;
padding-left: 16px;
}
.newSummaryLogin .error-msg img{
position:relative;
top:3px;
margin:0 10px 0 5px;
}
.login_Div .sumMainTitle{
font-size:28px;
padding-top: 40px;
color:#333;
margin-bottom:40px;
font-weight:bold;
}
.login_Div .littTitle{
font-size:18px;
color:#333333;
}
.login_Div .icon-login-name, .login_Div .icon-login-password{
width:16px;
height:15px;
display:inline-block;
position:absolute;
top:10px;
color: #000000
}
.login_Div .login-commonBotm{
width: 100%;
position:relative;
margin:10px auto 0 0;
}
.login_Div .login-commonBotm img{
float:left;
margin-top:14px;
}
.login_Div input.input{
width: 100%;
height:40px;
outline:none;
padding-left: 30px;
border:none;
border-bottom: 1px solid #CCCCCC;
color: #333333;
caret-color:#E95252;
}
.login_Div input::-webkit-input-placeholder {
color: #999999;
font-size: 12px;
}
.newSummaryLogin .sumPhone{width:100%;text-align:center;color:#333;margin-bottom:10px;}
.login_Div input:-webkit-autofill , .login_Div textarea:-webkit-autofill, .login_Div select:-webkit-autofill {
-webkit-text-fill-color: #ededed !important;
-webkit-box-shadow: 0 0 0px 1000px transparent inset !important;
background-color:transparent;
background-image: none;
transition: background-color 50000s ease-in-out 0s;
}
.login_Div .sLoginBtn{
margin-top:30px;
width: 100%;
height:40px;
background:#EE4454;
border-radius:4px;
outline:none;
border:none;
color:#fff;
transition: all linear 0.5s;
}
.login_Div .sLoginBtn:hover{
opacity:.8;
cursor:pointer;
background-color: #E95252;
color: #FFFFFF
}
.login_Div .validatCode{
color:#333333;
}
.newSummaryLogin .msgTips p{
color:#333333!important;
}
.newSummaryLogin .msgTips p, .newSummaryLogin .msgTips h2{
color:#333333!important;
}
.newSummaryLogin .bindTitle{margin-bottom:10px;}
.newSummaryLogin .changeBtn{
margin-top:10px;
}
.login-box .forgetPw{
/* width:300px; */
height:40px;
text-align: right;
margin:auto;
color:#999999;
font-size:12px;
text-align: right;
line-height: 40px;
}
.forgetPw span{
cursor: pointer;
}
.newSummaryLogin .login-box .forgetPw span:hover{
color: #E95252;
}
.newSummaryLogin .login-way{
width:300px;
height:40px;
margin:25px auto;
font-size:12px;
color:#CCCCCC;
display: none;
line-height:40px;
}
.newSummaryLogin .wayLeft{
float:left;
}
.newSummaryLogin .icon-login-qqicon{
width:16px;
height:15px;
display:inline-block;
position:relative;
top:3px;
background:url(../img/qqIco.png) no-repeat;
}
.newSummaryLogin .icon-login-wechaticon{
width:19px;
height:15px;
display:inline-block;
position:relative;
top:3px;
background:url(../img/wechatIco.png) no-repeat;
}
.newSummaryLogin .wayRight{
float:right;
}
.newSummaryLogin .validatCode{
position: absolute;
right:0;
top:13px;
padding-left:10px;
color:#333;
font-size:12px;
letter-spacing: 2px;
border-left:1px solid #cccccc;
}
.newSummaryLogin .validatCode span:first-child{cursor: pointer;}
.newSummaryLogin .btValidate{
margin-top:30px;
}
.newSummaryLogin .login_elephant{
position: absolute;
left:-15px;
top:-80px;
}
.newSummaryLogin .homepage-hero-module,
.video-container {
position: relative;
height: 100vh;
overflow: hidden;
}
.newSummaryLogin .name_bline_left{position: absolute;right: 50%;bottom: 0;width: 0;height: 2px;background-color: #E95252;transition: all linear 0.5s;}
.newSummaryLogin .name_bline_right{position: absolute;left: 50%;bottom: 0;width: 0;height: 2px;background-color: #E95252;transition: all linear 0.5s;}
.newSummaryLogin .pwd_bline_left{position: absolute;right: 50%;bottom: 0;width: 0;height: 2px;background-color: #E95252;transition: all linear 0.5s;}
.newSummaryLogin .pwd_bline_right{position: absolute;left: 50%;bottom: 0;width: 0;height: 2px;background-color: #E95252;transition: all linear 0.5s;}
.newSummaryLogin .login-Div input:-webkit-autofill , .login-Div textarea:-webkit-autofill, .login-Div select:-webkit-autofill {
-webkit-text-fill-color: #ededed !important;
-webkit-box-shadow: 0 0 0px 1000px transparent inset !important;
background-color:transparent;
background-image: none;
transition: background-color 50000s ease-in-out 0s;
}
.newSummaryLogin ._bline_w{width: 50%;}
This diff is collapsed.
<style>
.investigationList td button{
width: 30px;
height: 30px;
display: inline-block;
color: white !important;
border-radius: 50%;
text-align: center;
line-height: 30px;
margin-right: 10px;
cursor: pointer;
outline: none;
padding: 0;
}
.investigationList .el-button.is-circle{
padding: 0;
}
</style>
<template>
<div class="investigationList">
<table class="singeRowTable" border="0" cellspacing="0" cellpadding="0" v-loading="loading">
<tr>
<th>订单号</th>
<th>客人名称</th>
<th>销售名称</th>
<th>客户名称</th>
<th>分数</th>
<th>操作</th>
</tr>
<tr v-for="item in dataList">
<td>{{OrderId}}</td>
<td>{{item.GuestName}}</td>
<td>{{item.EnterName}}</td>
<td>{{item.CustomerName}}</td>
<td>{{item.ScoreNum}}</td>
<td>
<el-tooltip class="item" effect="dark" content="填写" placement="top">
<el-button
v-if="item.ID==0"
type="primary"
icon="iconfont icon-Edit"
circle
@click="chaKan(item)"
></el-button>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="详情" placement="top">
<el-button
v-if="item.ID!==0"
type="primary"
icon="iconfont icon-sousuo"
circle
@click="openPage(item)"
></el-button>
</el-tooltip>
</td>
</tr>
</table>
<div class="noDataNotice" v-if="dataList.length<1">
<i class="iconfont icon-kong"></i>
<p>{{$t("active.ld_noData")}}</p>
</div>
<a href="" id="blankLink" target="_blank" style="display:none">1</a>
</div>
</template>
<script>
export default {
data(){
return{
loading: false,
dataList: [],
DiaoChaShow: false,
YouJiShow: false,
showID: 0,
dialogTitle: '',
OrderId: '',
TCIDL: ''
}
},mounted() {
let TCID = this.$route.query.TCID,
OrderID = this.$route.query.OrderId;
this.OrderId = OrderID
this.TCID = TCID
this.getList(TCID, OrderID);
},methods: {
openPage: function (obj){
console.log(obj)
let dom = document.querySelector("#blankLink");
dom.href = "http://activity.oytour.com/html/invesDetails2.html" + '?ID=' + obj.ID + '&name=' + encodeURI(obj.GuestName) + '&MobilePhone=' + obj.CustomerPhone
dom.click();
},
chaKan(item){
let obj = JSON.stringify(item)
this.$router.push({ name:'NewSurveyList',query:{"TCID": this.TCID, "OrderId": this.OrderId, obj: obj, blank: 'y'} })
},
getList: function (TCID, OrderID) {
this.apipost('survey_post_GetTotalListAPP', {TCID: TCID, OrderID: OrderID}, res=>{
if (res.data.resultCode === 1) {
this.dataList = res.data.data.objAll;
}
}, null)
}
}
}
</script>
<style>
.NewSurveyList.main{
padding: 1.5rem;
}
.NewSurveyList .tit{
font-size: 2rem;
text-align: center;
margin-bottom: .5rem;
}
.NewSurveyList .sub_tit{
font-size: 1.4rem;
margin-bottom: .4rem;
}
.NewSurveyList .indet_2{
text-indent: 2.4rem;
}
.NewSurveyList .tit_det{
text-indent: 2.4rem;
font-size: 1rem;
}
.NewSurveyList table { border-collapse:collapse; border-spacing:0; }
.NewSurveyList table{
margin-top: 1rem;
width: 100%;
}
.NewSurveyList tr td{
padding: .5rem;
border: 1px solid #5b5653;
font-size: 1rem;
}
.NewSurveyList .qianming{
margin-top: 2.5rem;
}
.NewSurveyList .qianming label{
margin-right: .2rem;
}
.NewSurveyList.main{
width: 720px;
margin: 0 auto;
}
.NewSurveyList #table td,.NewSurveyList .qianming span{
color: #111;
}
.NewSurveyList #table td._name,.NewSurveyList .qianming label{
color: #5d5d5d;
}
</style>
<template>
<div class="main NewSurveyList">
<!-- <p class="tit">印象旅游服务意见表</p>
<div class="message-box">
<p class="sub_tit">亲爱的旅客:</p>
<div class="tit_det">
<p>感谢与您同行,让我们的旅行更加圆满!</p>
<p>我们十分珍视倾听您的声音。它将是我们改善服务的重要基础。</p>
<p>最后,需要您花一点点时间填写此表。诚挚地感谢您!</p>
</div>
</div> -->
<div class="qianming">
<label class="_name">旅客签名:<span id="name">{{obj.GuestName}}</span></label>
<!-- <label class="_name">手机:<span id="phone"></span></label>
<label class="_name">日期:<span id="day"></span></label> -->
</div>
<div class="">
<table id="table">
<!-- <tr>
<td class="_name">线路:</td>
<td id="LineName"></td>
<td class="_name">出发时间:</td>
<td id="StartDateStr"></td>
<td class="_name">领队:</td>
<td width="80" id="LeaderName"></td>
</tr>
<tr>
<td class="_name">您的报名公司:</td>
<td id="BranchName"></td>
<td class="_name">报名接待员:</td>
<td id="ContactName"></td>
<td class="_name">专业度及服务评价:</td>
<td></td>
</tr> -->
<tr>
<td class="_name">旅客意见</td>
<td class="_name">非常满意</td>
<td class="_name">满意</td>
<td class="_name">基本合格</td>
<td class="_name">不满意</td>
<!-- <td class="_name">评价</td> -->
</tr>
<tr v-for="(item, index) in dataList">
<td class="_name">{{index+1}}{{item.Title}}</td>
<template v-if="item.SurveyType === 1">
<td colspan="4">
<el-rate
v-model="item.ScoreNum"
show-text
:texts="texts">
</el-rate>
</td>
</template>
<template v-if="item.SurveyType === 2">
<td colspan="4">
<el-radio-group v-model="item.ScoreNum">
<el-radio v-for="(radio, rIndex) in item.SurveyOptionsList" :label="radio.ID" :key="rIndex">{{radio.OptionsName}}</el-radio>
</el-radio-group>
</td>
</template>
<template v-if="item.SurveyType === 3">
<td colspan="4">
<el-checkbox-group v-model="item.SurveyOptionsList">
<el-checkbox v-for="(radio, rIndex) in item.SurveyOptionsList" :label="radio.ID" :key="rIndex">{{radio.OptionsName}}</el-checkbox>
</el-checkbox-group>
</td>
</template>
<template v-if="item.SurveyType === 4">
<td colspan="4">
<el-input
type="textarea"
:rows="2"
placeholder="请输入内容"
v-model="item.TextContent">
</el-input>
</td>
</template>
</tr>
</table>
</div>
<div style="margin: 20px 0; text-align: right;">
<button class="normalBtn" @click="saveMessage">{{$t('fnc.tijiao')}}</button>
</div>
</div>
</template>
<script>
export default {
components:{
},
data(){
return{
leaderData: {},
loading: false,
dataList: [],
TCID: '',
OrderID: '',
GuestId: '',
obj: {},
texts: [
'非常不满意',
'不满意',
'感觉一般',
'满意',
'非常满意'
]
}
},mounted() {
this.TCID = this.$route.query.TCID;
this.OrderID = this.$route.query.OrderId;
this.obj = JSON.parse(this.$route.query.obj)
this.GuestId = this.obj.GuestId
this.GetSurveyShowList();
},methods: {
saveMessage: function(){
let data = JSON.parse(JSON.stringify(this.dataList))
data.forEach(x=>{
x.TCID = this.TCID;
x.OrderID = this.OrderID;
x.GuestId = this.GuestId;
if (x.SurveyType === 2 || x.SurveyType === 3) {
x.SurveyOptionsList.forEach(y=>{
y.IsCheck = x.ScoreNum == y.ID ? '1' : '0'
})
x.ScoreNum = 0
}
})
this.apipost('survey_post_SetGuestSurvey', data, res=>{
if (res.data.resultCode === 1) {
this.$message.success('提交成功!')
setTimeout(()=>{
window.close()
}, 1000)
} else {
this.$message.error(res.data.message)
}
})
},
GetSurveyShowList: function () {
let data = {
IsShow: 1,
SurveyType: -1
}
this.apipost('survey_post_GetSurveyShowList', data, res=>{
if (res.data.resultCode === 1) {
let data = res.data.data
data.map(item => {
if (item.SurveyType === 2) {
item.SurveyOptionsList.map((cItem, cIndex) => {
cItem.IsCheckS = false
})
}
if (item.SurveyType === 3) {
item.SurveyOptionsList.map((cItem, cIndex) => {
cItem.IsCheckS = false
})
}
if (item.SurveyType === 1) {
item.ScoreNum = 5;
}
})
this.dataList = data;
}
}, null)
}
}
}
</script>
<template>
<div class="Feedback">
<div class="query-box">
<ul>
<li>
<span>
<em>订单号</em>
<el-input v-model="msg.OrderId"></el-input>
</span>
</li>
<li>
<span>
<em>线路</em>
</span>
<el-select filterable v-model="obj.LineID" value-key="LineID" @change="getLineTeamList">
<el-option label="不限" :value='{LineName:"不限",LineID:0}'></el-option>
<el-option v-for="item in LineList" :label='item.LineName' :value='item' :key='item.LineID'></el-option>
</el-select>
</li>
<li>
<span>
<em>系列</em>
</span>
<el-select filterable v-model="obj.LineteamId" value-key="LtID" @change="getLineLtID">
<el-option label="不限" :value='{LtName:"不限",LtID:0}'></el-option>
<el-option v-for="item in LineTeamList" :label='item.LtName' :value='item' :key='item.LtID'>
</el-option>
</el-select>
</li>
<!-- <li>
<span>
<em>只看有评分</em>
</span>
<el-select filterable class='multiple_input' v-model='msg.isScore' :placeholder="$t('pub.pleaseSel')">
<el-option label="不限" :value="0"></el-option>
<el-option label="是" :value="1"></el-option>
<el-option label="否" :value="-1"></el-option>
</el-select>
</li> -->
<li>
<span>
<em>发团时间</em>
</span>
<el-date-picker
value-format="yyyy-MM-dd"
:picker-options="pickerDisabled"
size="small"
v-model="dateList"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</li>
<li>
<input
type="button"
class="hollowFixedBtn"
value="查询"
@click="resetPageIndex(),getList()"
>
</li>
</ul>
</div>
<table class="singeRowTable" border="0" cellspacing="0" cellpadding="0" v-loading="loading">
<tr>
<th>发团日期</th>
<th>订单号</th>
<th>团号</th>
<th>整体评分</th>
<th v-for="(item,i) in fields" :key="i">{{item}}</th>
<th>操作</th>
</tr>
<tr v-for="(item,i) in dataList" :key="i">
<td>{{item.start}}</td>
<td>{{item.orderId}}</td>
<td>{{item.tCNUM}}</td>
<td>
<span v-if="fields.length>0">
<span v-if="item.sumScore/fields.length>3.5">{{(item.sumScore/fields.length).toFixed(1)}}</span>
<span v-else style="color:red">{{(item.sumScore/fields.length).toFixed(1)}}</span>
</span>
<span v-else>
<span v-if="item.sumScore>3.5">{{item.sumScore}}</span>
<span v-else style="color:red">{{item.sumScore}}</span>
</span>
</td>
<td v-for="(c,childIndex) in fields" :key="childIndex">
<span v-if="item[c]&&item[c]>3.5">{{item[c]?item[c]:0}}</span>
<span v-else style="color:red">{{item[c]?item[c]:0}}</span>
</td>
<td>
<span style="cursor:pointer" @click="chaKan(item)">明细</span>
</td>
</tr>
<tr v-if="dataList.length==0">
<td colspan="12" align="center">暂无数据</td>
</tr>
</table>
<el-pagination
background
@current-change="handleCurrentChange"
:current-page.sync="currentPage"
layout="total,prev, pager, next, jumper"
:page-size="msg.pageSize"
:total="total"
></el-pagination>
</div>
</template>
<script>
import moment from "moment"
export default {
name: 'Feedback',
data (){
return{
obj:{},
dataList:[],
loading:false,
msg:{
pageSize:10,
pageIndex:1,
lineID:0,
LineteamId:0,
reStartDate:'',
reEndDate:'',
OrderId: '',
isScore:0,
lineName:"不限",
LineteamName:"不限",
},
total:0,
currentPage:1,
dateList:[],
LineList:[],
LineTeamList:[],
fields:[],
pickerDisabled: { //验证时间范围
disabledDate:(time)=>{
let _now = Date.now();
return time.getTime() > _now ;
}
}
}
},
created(){
this.dateList[0]=moment().subtract(6, "month").format("YYYY-MM-DD");
this.dateList[1]=moment().format("YYYY-MM-DD");
// console.log("this.dateList",this.dateList)
this.getTitle();
},
mounted(){
this.getLineList();
this.getList();
},
methods:{
chaKan(item){
this.$router.push({ name:'NewSurvey',query:{"TCID":item.tcid, "OrderId": item.orderId,blank: 'y'} })
},
goUrl(){
this.$router.push({ name:'FeedbackChart',query:{"msg":JSON.stringify(this.msg),blank: 'y'} })
},
getLineList() {
this.apipost("line_post_GetAllList_V2", {LineDirection: 0}, res => {
if (res.data.resultCode == 1) {
this.LineList = res.data.data;
}
});
},
getLineLtID(val){
this.msg.LineteamId=val.LtID;
this.msg.LineteamName=val.LtName;
},
//获取系列列表
getLineTeamList(val) {
let lineId=val.LineID;
this.msg.lineID=val.LineID;
this.msg.lineName=val.LineName;
this.LineTeamList = []
this.apipost("team_post_GetList", {
lineID: lineId,
isTOOP: 1
}, res => {
if (res.data.resultCode == 1) {
this.LineTeamList = res.data.data;
}
});
},
getTitle() {
this.apiJavaPost(
"/api/erp/survey/getSurveyTitleList",
{},
res => {
if (res.data.resultCode === 1) {
res.data.data.forEach(item=>{
this.fields.push(item.title)
})
} else {
this.Error(res.data.message);
}
},
null
);
},
getList(){
if(this.dateList && this.dateList.length>0){
this.msg.reStartDate=this.dateList[0];
this.msg.reEndDate=this.dateList[1];
//计算相差多少天 day可以是second minute
let m1=moment(this.msg.reStartDate)
let m2=moment(this.msg.reEndDate)
let year = m2.diff(m1, 'year');
if(year>0){
this.Error("最多查询一年的数据!")
return;
}
}else{
this.msg.reStartDate="";
this.msg.reEndDate="";
}
this.loading=true;
this.apiJavaPost("/api/erp/survey/getOrderSurveyList", this.msg, res => {
this.loading = false;
if (res.data.resultCode === 1) {
let arrays=[];
// console.log("res.data.data.pageData",res.data.data)
res.data.data.pageData.forEach(x => {
let isHave=false
if(x.tCID!=0 || x.tCID || x.tCID!=''){
// if(this.fields.indexOf(x.title)==-1&&x.title!=''){
// this.fields.push(x.title)
// console.log("fields",this.fields)
// }
if(arrays.length>0){
arrays.forEach(y=>{
if(y.orderId==x.orderId){
y[x.title]=x.scoreNum
y.sumScore+=x.scoreNum
isHave=true
return false
}
})
}
if(!isHave){
let obj={
tcid:x.tCID,
orderId:x.orderId,
start:"",
sumScore:x.scoreNum,
tCNUM:x.tCNUM
}
if(x.startDate){
obj.start=x.startDate.split('T')[0]
}
obj[x.title]=x.scoreNum
arrays.push(obj)
}
}
});
this.dataList=arrays;
// console.log("this.dataList",this.dataList)
this.total=res.data.data.count;
} else {
this.Error(res.data.message)
}
}, null);
},
handleCurrentChange(val) {
this.msg.pageIndex = val;
this.getList();
},
resetPageIndex() {
this.msg.pageIndex = 1;
this.currentPage = 1;
},
}
}
</script>
<style scoped>
.Feedback ul>li{
display: inline-block;
font-size: 12px;
color: #666;
margin: 20px 30px 0px 0;
}
.Feedback .singeRowTable{
margin-top: 20px;
}
</style>
import login from '../components/Login'
// import login from '../components/Login2019'
import index from '../components/index'
import clientConfirm from '../components/clientConfirm'
import SignName from '../components/SignName'
......@@ -424,6 +425,30 @@ export default {
title: '岗位管理'
},
},
{
path: '/Survey', //意见调查
name: 'Survey',
component: resolve => require(['@/components/administrative/Survey'], resolve),
meta: {
title: '意见调查'
},
},
{
path: '/NewSurvey', //意见调查 订单列表
name: 'NewSurvey',
component: resolve => require(['@/components/administrative/NewSurvey'], resolve),
meta: {
title: '意见调查'
},
},
{
path: '/NewSurveyList', //意见调查填写
name: 'NewSurveyList',
component: resolve => require(['@/components/administrative/NewSurveyList'], resolve),
meta: {
title: '意见调查填写'
},
},
{
path: '/Announcement', //公告管理
name: 'Announcement',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment