Browse Source

12345功能优化

master
huxiaolei 1 year ago
parent
commit
be48cfacd7
  1. 3
      src/api/index.js
  2. 17
      src/api/service.js
  3. 6
      src/views/Hotline/index.vue
  4. 353
      src/views/HotlineDetail/index.vue

3
src/api/index.js

@ -19,7 +19,8 @@ const api = {
agencyGridDepttree:'/gov/org/customeragency/agencyGridDepttree',
process:'/governance/icEvent/process',
reply:'/governance/icEvent/reply',
refund:'/governance/icEvent/reply',
agencyRootDepttree:'/gov/org/customeragency/rootAgencyGridDepttree',
}

17
src/api/service.js

@ -121,4 +121,21 @@ export function getSearchResis(params) {
params
})
}
//退件
export function refund(data) {
return request({
url: api.refund,
method: 'post',
data
})
}
//客户下的组织树
export function agencyRootDepttree(data) {
return request({
url: api.agencyRootDepttree,
method: 'post',
data
})
}

6
src/views/Hotline/index.vue

@ -31,7 +31,7 @@
</div>
<div class="container">
<div class=" card m-top12" v-for="(item, index) in tableData" :key="index" @click="onHandle(item)">
<div class=" card m-top12" style="box-shadow: none; " v-for="(item, index) in tableData" :key="index" @click="onHandle(item)">
<div class="flex flex-certer1 flex-center2 flex-end ">
<div class="workorder">
工单号{{ item.workOrderNum }}
@ -46,10 +46,10 @@
</div>
</div>
<div class="flex flex-certer1 flex-center2 flex-end ">
<div class="phonenName">
<div class="phonenName" style="font-size:14px; line-height: 26px;">
来电人{{item.name}} {{item.mobile}}
</div>
<div>
<div style="display: none;">
<van-button v-if=" item.operationType!=='11'&&item.operationType!=='12'" class="handle" round
type="info" @click="onHandle(item)">办理</van-button>
</div>

353
src/views/HotlineDetail/index.vue

@ -4,7 +4,7 @@
<div class=" card">
<div class="flex flex-center2 " style="padding: 15px;">
<img style="left: 0; height: 14px;" src="../../assets/images/block.png" alt="">
<div class="Dispatch">信息</div>
<div class="Dispatch">信息</div>
</div>
<div class="van-hairline--bottom" style=""></div>
<div class="flex flex-center2 " style="padding: 15px;">
@ -124,29 +124,81 @@
<div class="Dispatch-right">{{item.agencyName}}</div>
</div>
<div class="flex flex-center2 " style="padding: 5px;">
<div class="Processhandling-left-left">转办意见:</div>
<div class="Processhandling-left-left">办理情况:</div>
<div class="Dispatch-right">{{item.publicReply}}</div>
</div>
<div v-if="timeLimit" class="flex flex-center2 " style="padding: 5px;">
<div class="Processhandling-left-left">联系当事人时限:</div>
<div class="Dispatch-right">{{formatDate1(new Date(item.timeLimit * 1000))}}</div>
</div>
<div v-if="item.limitTime"lass="flex flex-center2 " style="padding: 5px;">
<div v-if="item.limitTime" class="flex flex-center2 " style="padding: 5px;">
<div class="Processhandling-left-left">(部门)办结时限:</div>
<div class="Dispatch-right">{{item.limitTime}}</div>
</div>
<div v-if="item.respondent" class="flex flex-center2 " style="padding: 5px;">
<div class="Processhandling-left-left">答复人:</div>
<div class="Dispatch-right">{{item.respondent}}</div>
</div>
<div v-if="item.respondentPhone" class="flex flex-center2 " style="padding: 5px;">
<div class="Processhandling-left-left">答复电话:</div>
<div class="Dispatch-right">{{item.respondentPhone}}</div>
</div>
<div v-if="item.irregularity=='0'" class="flex flex-center2 " style="padding: 5px;">
<div class="Processhandling-left-left">填报不合规诉求:</div>
<div class="Dispatch-right"></div>
</div>
<div v-if="item.irregularity=='0'" class="flex flex-center2 " style="padding: 5px;">
<div class="Processhandling-left-left">不合规诉求类型:</div>
<div class="Dispatch-right">{{item.nonComplianceType}}</div>
</div>
<div v-if="item.irregularity=='0'" class="flex flex-center2 " style="padding: 5px;">
<div class="Processhandling-left-left">不合规诉求申请说明:</div>
<div class="Dispatch-right">{{ item.nonComplianceNote }}</div>
</div>
</div>
</div>
</div>
</div>
<div class="container1">
<van-button style="width: 100%;" round type="info" @click="handlelist()">办理</van-button>
<div class="container1" v-if="tableData.operationType !== '11' && tableData.operationType !== '12' && tableData.operationType !== '13' ">
<van-button style="width: 40%; margin-right: 10%; background-color: #999999; color: #ffffff; border: none;" round type="info" @click="handleRefund()">退件</van-button>
<van-button style="width: 40%;" round type="info" @click="handlelist()">办理</van-button>
</div>
<van-popup round v-model="show" close-icon-position="top-left" position="bottom" :style="{ height: '70%' }">
<van-popup round v-model="showAcsheet" close-icon-position="top-left" position="bottom" style=" height: 50%; padding-top:20px ">
<van-cell-group>
<van-field readonly is-link v-model="stutasName" label="办理状态" placeholder="请选择证件类型"
<van-field readonly is-link v-model="isContact" required label="是否已联系当事人" placeholder="请选择"
@click="contactPicker = true" />
<van-action-sheet v-model="contactPicker" :actions="contact" @select="contactSelect" />
<van-field readonly is-link v-model="manageDept" required label="建议处理部门" placeholder="请选择"
@click="deptPicker = true" />
<van-popup v-model:show="deptPicker" round position="bottom">
<van-cascader
active-color="#3974f6"
title=""
v-model="cascaderValue"
:options="depts"
@close="deptPicker = false"
@finish="onFinish"
/>
</van-popup>
<div class="textarea">
<van-field type="textarea" v-model="refundReason" label="退件原因及说明" placeholder="请输入内容" rows="2" autosize
show-word-limit required />
</div>
</van-cell-group>
<div class="flex flex-x flex-mean" style="margin-top: 10px;">
<van-button style="width: 30%;" round type="info" @click="cancel2">取消</van-button>
<van-button style="width: 30%;"
round type="info" @click="onRefund">确定退件</van-button>
</div>
</van-popup>
<van-popup round v-model="show" close-icon-position="top-left" position="bottom" style="height: 70%; padding-top:20px ">
<van-cell-group>
<van-field readonly is-link v-model="stutasName" required label="办理状态" placeholder="请选择"
@click="showPicker = true" />
<van-action-sheet v-if="showPicker" v-model="show" :actions="actions" @select="onSelect" />
<div class="textarea">
@ -170,18 +222,50 @@
/>
</template>
</van-cell>
<van-field v-model="respondent" label="答复人" placeholder="请输入" />
<van-field v-model="respondentPhone" label="答复电话" placeholder="请输入" />
<van-field v-model="contacts" label="联系人" placeholder="请输入" />
<van-field v-model="contactsPhone" label="联系电话" placeholder="请输入" />
<van-field v-model="respondent" :required="respondentRequired" label="答复人" placeholder="请输入" />
<van-field v-model="respondentPhone" :required="respondentPhoneRequired" label="答复电话" placeholder="请输入" />
<van-field v-model="contacts" label="联系人" placeholder="请输入" />
<van-field v-model="contactsPhone" label="联系电话" placeholder="请输入" />
<van-field readonly is-link v-model="irregularityName" label="填报不合规诉求" placeholder="请选择"
@click="showunreasonable = true" />
<van-action-sheet v-if="showunreasonable" v-model="irregularity" :actions="unreasonable"
@select="onirregularity" />
<van-field v-if="showNoncompliance" readonly is-link v-model="noncomplianceTypeName" required label="不合规诉求类型" placeholder="请选择"
@click="showNoncomplianceType = true" />
<van-action-sheet v-if="showNoncomplianceType" v-model="noncomplianceType" :actions="noncomplianceTypeOptions"
@select="onNoncomplianceTypeChange" />
<div class="textarea">
<van-field v-if="showNoncompliance" type="textarea" v-model="noncomplianceNotesText" label="不合规诉求申请说明"
placeholder="请输入" rows="2" autosize show-word-limit required />
</div>
<van-field readonly is-link v-model="irregularityname" label="办理真实度" placeholder="请选择" required
@click="showreal = true" />
<van-action-sheet v-if="showreal" v-model="verified" :actions="realList" @select="onreal" />
<van-field readonly is-link v-if="operationType === '11'" v-model="solveStateName" label="问题解决情况" placeholder="请选择" required
@click="showSolveState = true" />
<van-action-sheet v-if="showSolveState" v-model="solveState" :actions="solveStateOptions" @select="onSolveStateChange" />
<van-field v-if="operationType === '11'" readonly is-link v-model="solveEstimated" label="预计解决时间"
placeholder="请选择" @click="showSolveEstimated = true" />
<van-datetime-picker v-if="showSolveEstimated" type="datetime" :min-date="minDate" :max-date="maxDate"
@confirm="confirmSolveEstimated" @cancel="cancelSolveEstimated" />
<van-field required v-if="operationType=='11'" v-model="returnVisitor" label="回访人" placeholder="请输入" />
<van-field required v-if="operationType === '11'" readonly is-link v-model="returnTime" label="回访时间"
placeholder="请选择" @click="showtime = true" />
<van-datetime-picker v-if="showtime" type="datetime" :min-date="minDate" :max-date="maxDate"
@ -222,14 +306,17 @@
</div>
</template>
<script>
import { getUserInfo } from '@/api/user'
import throttle from 'lodash/debounce'
import { icEventList,agencyGridDepttree,process,reply } from '@/api/service'
import { icEventList,agencyGridDepttree,process,reply,refund,agencyRootDepttree } from '@/api/service'
import { uploadvariedfile } from '@/api/basic'
import { Dialog } from 'vant';
export default {
data() {
return {
agencyId: '',
myagencyId: '',
showsdissatisfyReason:false,
dissatisfyReasonName:"",
showsatisfaction:false,
@ -242,14 +329,16 @@ export default {
loseContactName:"",
showtime:false,
irregularityname:"",
showNoncompliance: false,
showreal:false,
showAcsheet: false,
showdissatisfyReason:false,
irregularityName:"",
showunreasonable:false,
fileList:[],
pictureList:[],
showPicker:false,
stutasName:"办理中",
stutasName:"",
show:false,
icEventId:"",
workOrderNum:"",
@ -260,6 +349,47 @@ export default {
tableData:{},
afterList:[],
minDate:new Date(),
contactPicker: false,
deptPicker: false,
respondentPhoneRequired: true,
respondentRequired: true,
isContact:'',
returnLoseContact:'',
noncomplianceType: '',
showNoncomplianceType: false,
noncomplianceTypeName: '',
noncomplianceTypeOptions: [],
noncomplianceNotesText: '',
solveState:'',
solveStateName:'',
showSolveState: false,
solveEstimated: '',
showSolveEstimated: false,
solveStateOptions:[
{ name: '未解决', value: "0" },
{ name: '基本解决', value: "1" },
{ name: '已解决', value: "2" },
],
contact: [
{ name: '未联系当事人', value: "0" },
{ name: '已联系当事人', value: "1" },
],
manageDept:'',
cascaderValue:'',
returnSuggestDept:'',
returnSuggestDeptName:'',
depts: [],
noncomplianceTypeOptions: [
{ name: '已进入信访程序', value: "0" },
{ name: '已进入诉讼、仲裁、纪检监察、行政复议、 政府信息公开等程序', value: "1" },
{ name: '不符合法律、法规、规章及政策规定', value: "2" },
{ name: '涉及国家秘密、工作秘密、商业秘密、个人隐私', value: "3" },
{ name: '违反社会公序良俗等其他情况', value: "4" },
],
refundReason: '',
actions: [
{ name: '已联系当事人', value: "9" },
{ name: '办理中', value: "10" },
@ -324,18 +454,31 @@ export default {
};
},
created() {
this.getUserInfo()
this.icEventId =this.$route.query.icEventId;
this.icEventList()
this.process()
},
mounted() {
},
activated() {
},
methods: {
async getUserInfo() {
let { data, code, msg } = await getUserInfo()
if (code == 0) {
console.log('+++++++++++++',data.agencyId)
this.myagencyId = data.agencyId;
this.getDepttree()
data.serviceOrgIdentities = data.serviceOrgIdentities.map(item => item.split('-')[0]);
this.$store.commit('setUserInfo', data);
console.log('this.$store.state.userInfo.userInfo',this.$store.state.userInfo.userInfo);
}
},
onshowdissatisfyReason(item){
this.dissatisfyReasonName=item.name
this.dissatisfyReason=item.value
@ -362,11 +505,58 @@ export default {
this.verified=item.value
this.showreal=false
},
onSolveStateChange(item){
this.solveState=item.value
this.solveStateName=item.name
this.showSolveState=false
},
onloseContact(item){
this.loseContact=item.value
this.loseContactName=item.name
this.showloseContact=false
},
onFinish({selectedOptions}) {
this.deptPicker = false;
this.manageDept = selectedOptions.map((option) => option.text).join('/');
this.returnSuggestDept = selectedOptions.slice(-1)[0].value;
this.returnSuggestDeptName = selectedOptions.slice(-1)[0].text;
console.log('--------',selectedOptions.slice(-1)[0].text)
// show.value = false;
// fieldValue.value = selectedOptions.map((option) => option.text).join('/');
},
async onRefund(){
if(this.returnLoseContact==''){
this.$toast.fail("请先选择是否已联系当事人")
return
}
if(this.returnSuggestDept==''){
this.$toast.fail("请先选择建议处理部门")
return
}
if(this.refundReason.trim()==''){
this.$toast.fail("请先填写退件原因及说明")
return
}
await refund({
operationType: "13",
returnReason: this.refundReason.trim(), // 退
returnSuggestDept: this.returnSuggestDept, //
returnSuggestDeptName: this.returnSuggestDeptName, //
returnLoseContact: this.returnLoseContact,// 01
icEventId: this.icEventId// id
}).then(res => {
this.showAcsheet=false
this.$toast.success('退件成功');
this.$router.push('/hotline')
}).catch(err => {
})
},
//
async icEventList() {
await icEventList({
@ -374,9 +564,8 @@ export default {
pageSize: this.pageSize,
icEventId:this.icEventId
}).then(res => {
console.log(res.data.list[0],"skjlfhskdjfh");
this.tableData=res.data.list[0]
console.log(this.tableData,"skjlfhskdjfh");
console.log("派件时间",new Date(this.tableData.latestOperatedTime).getTime());
this.agencyGridDepttree()
}).catch(err => {
@ -394,6 +583,46 @@ export default {
})
},
async getDepttree() {
await agencyRootDepttree({
agencyId: this.myagencyId,
purpose: "query"
}).then(res => {
console.log("===111===",res.data);
let rst = {
text: res.data.agencyName,
value: res.data.agencyId,
children: []
}
let arr = res.data.subAgencyList
for(var i = 0; i < arr.length; i++){
rst.children.push({
text: arr[i].agencyName,
value: arr[i].agencyId,
})
if(arr[i].subAgencyList){
let arr2 = []
let rs = arr[i].subAgencyList
for(var k = 0; k < rs.length; k++){
console.log(rs[k].agencyName)
arr2.push({
text: rs[k].agencyName,
value: rs[k].agencyId
})
}
rst.children[i].children = arr2
}
}
this.depts = [rst];
}).catch(err => {
})
},
async process() {
await process({
icEventId:this.icEventId
@ -418,6 +647,13 @@ export default {
this.returnTime=this.formatDate1(new Date())
this.show=true
},
handleRefund(){
if(new Date().getTime() - new Date(this.tableData.latestOperatedTime).getTime() > 2 * 60 * 60 * 1000){
this.$toast.fail("派件已超两小时不能退件,可联系热线专员改派")
return
}
this.showAcsheet=true
},
showPicker1(){
console.log("sdklfkhsfkl");
this.showPicker=true
@ -427,6 +663,26 @@ export default {
this.stutasName=item.name
this.operationType=item.value
this.showPicker=false
if(item.value=='10'){
this.respondentRequired = false
this.respondentPhoneRequired = false
}else{
this.respondentRequired = true
this.respondentPhoneRequired = true
}
this.irregularity = '';
this.irregularityname = '';
this.irregularityName = '';
this.showunreasonable = false;
this.showNoncompliance = false;
},
contactSelect(item){
console.log(item);
this.isContact=item.name
this.returnLoseContact = item.value
//this.operationType=item.value
this.contactPicker=false
},
ondissatisfyReason(item){
console.log(item);
@ -438,27 +694,81 @@ export default {
this.irregularityName=item.name
this.irregularity=item.value
this.showunreasonable=false
if(item.value=='0'){
this.showNoncompliance = true
}else{
this.showNoncompliance = false
}
},
onNoncomplianceTypeChange(item){
console.log('不合规诉求类型',item);
this.noncomplianceTypeName=item.name
this.noncomplianceType=item.value
this.showNoncomplianceType=false
},
cancel(){
console.log("dslkjksdf");
this.show=false
},
cancel2(){
this.showAcsheet=false
},
async onreply(){
if(this.stutasName.trim()==''){
this.$toast.fail("请选择办理状态")
return
}
if(this.content.trim()==''){
this.$toast.fail("请输入办理情况")
console.log("sdfklsdjfk");
return
}
if(this.operationType=='9' || this.operationType=='11'){
if(this.respondent.trim()==''){
this.$toast.fail("请填写答复人")
return
}
}
if(this.operationType=='9' || this.operationType=='11'){
if(this.respondentPhone.trim()==''){
this.$toast.fail("请填写答复电话")
return
}
}
if(this.verified.trim()==''){
this.$toast.fail("请选择办理真实度")
console.log("sdfklsdjfk");
return
}
if(this.irregularity=='0'){ //
if(this.noncomplianceType==''){
this.$toast.fail("请选择不合规诉求类型")
return
}
if(this.noncomplianceNotesText==''){
this.$toast.fail("请填写不合规诉求申请说明")
return
}
}
if(this.returnVisitor.trim()==''&&this.operationType=='11'){
this.$toast.fail("请填写回访人")
console.log("sdfklsdjfk");
return
}
if(this.solveState==''&&this.operationType=='11'){
this.$toast.fail("请选择问题解决情况")
return
}
// if(this.solveEstimated==''&&this.operationType=='11'){
// this.$toast.fail("")
// return
// }
if(this.returnTime.trim()==''&&this.operationType=='11'){
this.$toast.fail("请选择回访时间")
console.log("sdfklsdjfk");
@ -506,8 +816,11 @@ export default {
contacts: this.contacts,//
contactsPhone: this.contactsPhone,//
irregularity: this.irregularity,// 0 1
//
nonComplianceType: this.noncomplianceType,//
nonComplianceNote: this.noncomplianceNotesText,//
verified: this.verified, // 0 1
solveState: this.solveState, //
solveEstimated: this.solveEstimated, //
returnVisitor: this.returnVisitor,//访
returnTime: this.returnTime,//访
loseContact: this.loseContact,//0 1
@ -575,6 +888,12 @@ export default {
console.log(this.returnTime);
this.showtime = false;
},
confirmSolveEstimated(value) {
this.solveEstimated = this.formatDate1(value);
console.log('this.solveEstimated',this.solveEstimated);
this.showSolveEstimated = false;
},
formatDate1(date) {
console.log("data",date);
const year = date.getFullYear();

Loading…
Cancel
Save