|
|
|
|
<template>
|
|
|
|
|
<div>
|
|
|
|
|
<topSidebar :title="flowPathTopSidebar" :pitchOn="flowPathTopVal" @getSidebarVal="getFlowPathTopSidebar">
|
|
|
|
|
</topSidebar>
|
|
|
|
|
<!-- 团队效率 -->
|
|
|
|
|
<div v-if="flowPathTopVal==='1'" class="mgt20 bgw shadow radius10 list-box">
|
|
|
|
|
<div class="mglr20 ">
|
|
|
|
|
<div class="df-between pdt20 date">
|
|
|
|
|
<div class="flex-align-center">
|
|
|
|
|
<p class="fz-16 mgr10 font-blue not-zoom">审批时间</p>
|
|
|
|
|
<el-select @focus="setMinWidth" v-model="parameter.createFixedTime" placeholder="请选择" clearable @change="efficiencyChart">
|
|
|
|
|
<el-option :style="{ 'min-width': minWidth + 2 + 'px' }" v-for="item in searchDays" :key="item.value" :label="item.label" :value="item.value">
|
|
|
|
|
</el-option>
|
|
|
|
|
</el-select>
|
|
|
|
|
<el-date-picker
|
|
|
|
|
class="ht40 mgl10"
|
|
|
|
|
v-model="flowDatesSelect"
|
|
|
|
|
@change="getDates($event,parameter.startTime,parameter.endTime,'flowTeam')"
|
|
|
|
|
type="daterange"
|
|
|
|
|
range-separator="至"
|
|
|
|
|
start-placeholder="开始日期"
|
|
|
|
|
end-placeholder="结束日期"
|
|
|
|
|
format="yyyy-MM-dd"
|
|
|
|
|
value-format="timestamp"
|
|
|
|
|
>
|
|
|
|
|
</el-date-picker>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="flex-align-center mgr30">
|
|
|
|
|
<p class="fz-16 mgl20 mgr10 font-blue not-zoom">部门</p>
|
|
|
|
|
<el-select @focus="setMinWidth" v-model="parameter.departmentId" placeholder="请选择部门" clearable @change="efficiencyChart">
|
|
|
|
|
<el-option :style="{ 'min-width': minWidth + 2 + 'px' }" v-for="item in depData" :key="item.value" :label="item.name" :value="item.id">
|
|
|
|
|
</el-option>
|
|
|
|
|
</el-select>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- <el-date-picker class="mgl10" v-model="value" type="date" placeholder="选择日期"> </el-date-picker> -->
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="flex-center mgt20">
|
|
|
|
|
<p class="font-blue fz-16 mgr10 not-zoom">流程状态</p>
|
|
|
|
|
<!-- 流程状态旁边的字,写定死的值,根据返回的数组某个id,进行show以及切换显示 -->
|
|
|
|
|
<el-radio-group class="flow" v-model="parameter.flowStatus" @change="efficiencyChart">
|
|
|
|
|
<!-- span再根据某数据变更即可 -->
|
|
|
|
|
<!--
|
|
|
|
|
2021-5-28 去掉括号内容
|
|
|
|
|
<span >{{'('+teamStatus[0]?teamStatus[0]:0+')'}}</span>
|
|
|
|
|
<span >{{'('+teamStatus[1]?teamStatus[1]:0+')'}}</span>
|
|
|
|
|
<span >{{'('+teamStatus[2]?teamStatus[2]:0+')'}}</span>
|
|
|
|
|
<span >{{'('+teamStatus[3]?teamStatus[3]:0+')'}}</span>
|
|
|
|
|
-->
|
|
|
|
|
<el-radio-button label="">不限</el-radio-button>
|
|
|
|
|
<el-radio-button :label="0">已撤销</el-radio-button>
|
|
|
|
|
<el-radio-button :label="1">进行中</el-radio-button>
|
|
|
|
|
<el-radio-button :label="2">已完成</el-radio-button>
|
|
|
|
|
<el-radio-button :label="3">已否决</el-radio-button>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div>
|
|
|
|
|
<div v-for="(item,index) in chartsName" :key="index">
|
|
|
|
|
<GuaranteeChart :title="item" :data="chartsData[index]"></GuaranteeChart>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="!chartsName||chartsName.length===0" class="blank">
|
|
|
|
|
<h2>暂无数据</h2>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- 个人效率 -->
|
|
|
|
|
<div v-if="flowPathTopVal==='2'" class="mgt20 bgw shadow radius10 list-box mgb10">
|
|
|
|
|
<div class="mglr20 ">
|
|
|
|
|
<div class="flex-align-center pdt20 date">
|
|
|
|
|
<p class="fz-16 mgr10 font-blue not-zoom">申请时间</p>
|
|
|
|
|
<!-- 非抄送的查询时间 -->
|
|
|
|
|
<el-select v-if="listParameter.operatingStatus!==3" @focus="setMinWidth" v-model="listParameter.createFixedTime" placeholder="请选择" @change="personalEfficiencyList">
|
|
|
|
|
<el-option :style="{ 'min-width': minWidth + 2 + 'px' }" v-for="item in searchDays" :key="item.value" :label="item.label" :value="item.value">
|
|
|
|
|
</el-option>
|
|
|
|
|
</el-select>
|
|
|
|
|
<!-- 抄送的查询时间 -->
|
|
|
|
|
<el-select v-if="listParameter.operatingStatus===3" @focus="setMinWidth" v-model="copyParam.createFixedTime" placeholder="请选择" @change="queryCopyForMe('search')">
|
|
|
|
|
<el-option :style="{ 'min-width': minWidth + 2 + 'px' }" v-for="item in searchDays" :key="item.value" :label="item.label" :value="item.value">
|
|
|
|
|
</el-option>
|
|
|
|
|
</el-select>
|
|
|
|
|
<el-date-picker
|
|
|
|
|
class="ht40 mgl10"
|
|
|
|
|
v-model="flowDatesSelect"
|
|
|
|
|
@change="getDates($event,thisval,thisval1,'man')"
|
|
|
|
|
type="daterange"
|
|
|
|
|
range-separator="至"
|
|
|
|
|
start-placeholder="开始日期"
|
|
|
|
|
end-placeholder="结束日期"
|
|
|
|
|
format="yyyy-MM-dd"
|
|
|
|
|
value-format="timestamp"
|
|
|
|
|
>
|
|
|
|
|
</el-date-picker>
|
|
|
|
|
<!-- <el-date-picker class="mgl10" v-model="value" type="date" placeholder="选择日期"> </el-date-picker> -->
|
|
|
|
|
</div>
|
|
|
|
|
<div class="flex-center mgt20">
|
|
|
|
|
<p class="font-blue fz-16 mgr10 not-zoom">流程状态</p>
|
|
|
|
|
<!-- 流程状态旁边的字,写定死的值,根据返回的数组某个id,进行show以及切换显示 -->
|
|
|
|
|
<el-radio-group class="flow" v-model="listParameter.operatingStatus" @change="personalEfficiencyList">
|
|
|
|
|
<el-radio-button label="">不限</el-radio-button>
|
|
|
|
|
<el-radio-button :label="0">我发起 <span >({{initiateNum}})</span></el-radio-button>
|
|
|
|
|
<el-radio-button :label="1">待处理 <span >({{pendingNum}})</span></el-radio-button>
|
|
|
|
|
<el-radio-button :label="2">已处理 <span >({{processedNum}})</span></el-radio-button>
|
|
|
|
|
<el-radio-button :label="3">抄送我 <span >({{copySendNum}})</span></el-radio-button>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="listParameter.operatingStatus!==3" class="mglr10 df-between">
|
|
|
|
|
<el-button round class="white-btn ht40 btn-pdt mgt20 mgb20 box-sizing" @click="ExportFile">
|
|
|
|
|
<svg class="text-icon font-blue" aria-hidden="true">
|
|
|
|
|
<use xlink:href="#icon-tubiao05"></use>
|
|
|
|
|
</svg>
|
|
|
|
|
<p class="font-blue dib mgl10">导出</p>
|
|
|
|
|
</el-button>
|
|
|
|
|
<div class="flex-align-center wd40 mgt20 mgb20">
|
|
|
|
|
<p class="fz-16 mglr10 font-blue not-zoom">通用查询</p>
|
|
|
|
|
<el-input class="ht40" v-model="search" @keyup.enter.native="personageSearch" placeholder="提单人/客户名称" clearable ></el-input>
|
|
|
|
|
<el-button class="ht40 btn-pdt mgl10" @click="personageSearch" type="primary" round>查询</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- 抄送的查询导出 -->
|
|
|
|
|
<div v-if="listParameter.operatingStatus===3" class="mglr10 df-between">
|
|
|
|
|
<el-button round class="white-btn ht40 btn-pdt mgt20 mgb20 box-sizing" @click="ExportFileCopy">
|
|
|
|
|
<svg class="text-icon font-blue" aria-hidden="true">
|
|
|
|
|
<use xlink:href="#icon-tubiao05"></use>
|
|
|
|
|
</svg>
|
|
|
|
|
<p class="font-blue dib mgl10">抄送导出</p>
|
|
|
|
|
</el-button>
|
|
|
|
|
<div class="flex-align-center wd40 mgt20 mgb20">
|
|
|
|
|
<p class="fz-16 mglr10 font-blue not-zoom">通用查询</p>
|
|
|
|
|
<el-input class="ht40" @keyup.enter.native="queryCopyForMe('search')" v-model="copyParam.clientName" placeholder="提单人/客户名称" clearable ></el-input>
|
|
|
|
|
<el-button @click="queryCopyForMe('search')" class="ht40 btn-pdt mgl10" type="primary" round>查询</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- 非抄送的其他状态列表-需要进行处理和查看处理 -->
|
|
|
|
|
<!--这是手动搜索,预防后续又要。
|
|
|
|
|
.filter(data =>
|
|
|
|
|
!search|| data.clientName.toLowerCase().includes(search.toLowerCase()) || data.applicant.toLowerCase().includes(search.toLowerCase())) -->
|
|
|
|
|
<el-table v-if="listParameter.operatingStatus!==3" :data="tableView"
|
|
|
|
|
v-loading="Loading" stripe tooltip-effect="dark" style="width: 100%" class="pdlr10"
|
|
|
|
|
>
|
|
|
|
|
<el-table-column label="序号" width="36" type="index"></el-table-column>
|
|
|
|
|
<el-table-column prop="applicant" label="提单人" min-width="100"></el-table-column>
|
|
|
|
|
<el-table-column prop="clientName" label="客户名称" min-width="80" show-overflow-tooltip></el-table-column>
|
|
|
|
|
<el-table-column prop="applicationDate" label="申请日期" min-width="70"></el-table-column>
|
|
|
|
|
<el-table-column prop="timeConsuming" label="累计耗时" min-width="80"></el-table-column>
|
|
|
|
|
<el-table-column prop="taskNode" label="任务节点" min-width="80"></el-table-column>
|
|
|
|
|
<el-table-column prop="completeTime" label="完成时间" min-width="80"></el-table-column>
|
|
|
|
|
<el-table-column prop="approveStatus" label="审批状态" min-width="80">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
<p v-show="scope.row.approveStatus == 0" class="c-refuse">待指派</p>
|
|
|
|
|
<p v-show="scope.row.approveStatus == 1" class="c-refuse">审核中</p>
|
|
|
|
|
<p v-show="scope.row.approveStatus == 2" class="c-green">已审核</p>
|
|
|
|
|
<p v-show="scope.row.approveStatus == 3" class="c-refuse">已拒绝</p>
|
|
|
|
|
<p v-show="scope.row.approveStatus == 4" class="c-refuse">已驳回</p>
|
|
|
|
|
<p v-show="scope.row.approveStatus == 5" class="c-refuse">已撤销</p>
|
|
|
|
|
<p v-show="scope.row.approveStatus == 6" class="c-refuse">草稿</p>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="businessStatus" label="业务状态" min-width="80">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
<p v-show="scope.row.businessStatus == 0" class="c-refuse">已撤销</p>
|
|
|
|
|
<p v-show="scope.row.businessStatus == 1" class="c-refuse">进行中</p>
|
|
|
|
|
<p v-show="scope.row.businessStatus == 2" class="c-green">已完成</p>
|
|
|
|
|
<p v-show="scope.row.businessStatus == 3" class="c-refuse">已否决</p>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="operatingStatus" label="操作状态" min-width="80">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
<p v-show="scope.row.operatingStatus == 0" class="c-green">已发起</p>
|
|
|
|
|
<p v-show="scope.row.operatingStatus == 1" class="c-refuse">待处理</p>
|
|
|
|
|
<p v-show="scope.row.operatingStatus == 2" class="c-green">已处理</p>
|
|
|
|
|
<p v-show="scope.row.operatingStatus == 3" class="c-refuse">待提交</p>
|
|
|
|
|
<p v-show="scope.row.operatingStatus == 4" class="c-refuse">未定义</p>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="name" label="操作" width="130">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
<el-button
|
|
|
|
|
v-if="scope.row.operatingStatus===1&&scope.row.businessStatus !== 3"
|
|
|
|
|
type="text"
|
|
|
|
|
class="mgl0"
|
|
|
|
|
@click="decide(scope.row)"
|
|
|
|
|
>{{scope.row.btn}}</el-button
|
|
|
|
|
>
|
|
|
|
|
<!-- 这里的查看和抄送的查看差不多,需要微调部分数据+重新写部分接口 -->
|
|
|
|
|
<el-button
|
|
|
|
|
v-if="scope.row.operatingStatus!==1||scope.row.businessStatus === 3"
|
|
|
|
|
type="text"
|
|
|
|
|
class="mgl0"
|
|
|
|
|
@click="seeDetail(scope.row,'查看')"
|
|
|
|
|
>查看</el-button
|
|
|
|
|
>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
</el-table>
|
|
|
|
|
<!-- 抄送的列表-单独接口不一样 -->
|
|
|
|
|
<el-table v-if="listParameter.operatingStatus===3" :data="copyData" v-loading="Loading" stripe tooltip-effect="dark" style="width: 100%" class="pdlr10">
|
|
|
|
|
<el-table-column label="序号" width="36" type="index"></el-table-column>
|
|
|
|
|
<el-table-column prop="applicant" label="提单人" min-width="100"></el-table-column>
|
|
|
|
|
<el-table-column prop="clientName" label="客户名称" min-width="80" show-overflow-tooltip></el-table-column>
|
|
|
|
|
<el-table-column prop="applicationDate" label="申请日期" min-width="70"></el-table-column>
|
|
|
|
|
<el-table-column prop="taskNode" label="任务节点" min-width="80"></el-table-column>
|
|
|
|
|
<el-table-column prop="approveDate" label="完成时间" min-width="80"></el-table-column>
|
|
|
|
|
<el-table-column prop="businessStatus" label="业务状态" min-width="80">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
<p v-show="scope.row.businessStatus == 0" class="c-refuse">已撤销</p>
|
|
|
|
|
<p v-show="scope.row.businessStatus == 1" class="c-refuse">进行中</p>
|
|
|
|
|
<p v-show="scope.row.businessStatus == 2" class="c-green">已完成</p>
|
|
|
|
|
<p v-show="scope.row.businessStatus == 3" class="c-refuse">已否决</p>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="name" label="操作" width="230">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
<el-button
|
|
|
|
|
type="text"
|
|
|
|
|
class="mgl0"
|
|
|
|
|
@click="seeDetail(scope.row)"
|
|
|
|
|
>查看</el-button
|
|
|
|
|
>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
</el-table>
|
|
|
|
|
<div class="fj-end df mgr20 mgt20" v-if="listParameter.operatingStatus!=3">
|
|
|
|
|
<el-pagination
|
|
|
|
|
:hide-on-single-page="tableView.length===0"
|
|
|
|
|
class="fj-end"
|
|
|
|
|
layout="prev, pager, next"
|
|
|
|
|
:total="TotalPage"
|
|
|
|
|
:current-page="flowPage"
|
|
|
|
|
@current-change="handleCurrentChange"
|
|
|
|
|
>
|
|
|
|
|
</el-pagination>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- 抄送的分页器 -->
|
|
|
|
|
<div class="fj-end df mgr20 mgt20" v-if="listParameter.operatingStatus===3">
|
|
|
|
|
<el-pagination
|
|
|
|
|
:hide-on-single-page="copyData.length===0"
|
|
|
|
|
class="fj-end"
|
|
|
|
|
layout="prev, pager, next"
|
|
|
|
|
:total="copyTotalPage"
|
|
|
|
|
:current-page="copyPage"
|
|
|
|
|
@current-change="handleCurrentCopy"
|
|
|
|
|
>
|
|
|
|
|
</el-pagination>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<el-dialog :visible.sync="showPreviewImg" width="95%" style="margin-top:-7vh">
|
|
|
|
|
<div class=" tx-center">
|
|
|
|
|
<img :src="previewImg" class="el-image-viewer__img" style="transform: scale(1) rotate(0deg);margin-top: -1px; max-height: 100%; max-width: 100%;">
|
|
|
|
|
</div>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
<script>
|
|
|
|
|
import topSidebar from '../common/top_sidebar';
|
|
|
|
|
import list from '../common/background-list';
|
|
|
|
|
import {efficiencyChart,listDepartment,businessCount,personalEfficiencyList,personalEfficiencyListExport, queryCopyForMe , exportCopyForMe } from '../../utils/api'
|
|
|
|
|
import axios from 'axios';
|
|
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
components: {
|
|
|
|
|
list,
|
|
|
|
|
topSidebar,
|
|
|
|
|
},
|
|
|
|
|
props: {},
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
exportCopyForMe:exportCopyForMe,//抄送导出
|
|
|
|
|
personalEfficiencyListExport:personalEfficiencyListExport,//个人导出
|
|
|
|
|
// 流程效率顶部选项栏
|
|
|
|
|
flowPathTopSidebar: [
|
|
|
|
|
{ name: '团队效率', index: '1' },
|
|
|
|
|
{ name: '个人效率', index: '2' }
|
|
|
|
|
],
|
|
|
|
|
flowPathTopVal: '1', //业务统计顶部栏的值
|
|
|
|
|
minWidth: '', //解决select下拉框宽度问题
|
|
|
|
|
selectValue:'',
|
|
|
|
|
|
|
|
|
|
value:'',
|
|
|
|
|
// 查询时间
|
|
|
|
|
searchDays:[
|
|
|
|
|
{ value: '', label: '不限' },
|
|
|
|
|
{ value: 0, label: '今天' },
|
|
|
|
|
{ value: 1, label: '昨天' },
|
|
|
|
|
{ value: 2, label: '本周' },
|
|
|
|
|
{ value: 3, label: '本月' },
|
|
|
|
|
{ value: 4, label: '本年' },
|
|
|
|
|
],
|
|
|
|
|
flowPage:1,
|
|
|
|
|
copyPage:1,
|
|
|
|
|
flowDatesSelect:[],
|
|
|
|
|
btnVal:'',
|
|
|
|
|
input: '', //绑定搜索框,待删除
|
|
|
|
|
tableData:[],
|
|
|
|
|
Loading:false,
|
|
|
|
|
NowPage:1,
|
|
|
|
|
TotalPage:1,
|
|
|
|
|
TotalCount:10,
|
|
|
|
|
copyTotalPage:1,// 抄送页码
|
|
|
|
|
listParameter:{
|
|
|
|
|
createFixedTime:'',
|
|
|
|
|
operatingStatus :'',
|
|
|
|
|
// startTime:'',
|
|
|
|
|
// endTime:''
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 担保部
|
|
|
|
|
guaranteeData: [{name: '1天4小时0分钟 (20)',value:1.16},{name: '2天8小时0分钟',value:2.32},{},{},{},{},{},{},{name: '3天4小时0分钟',value:3.16},{name: '1天4小时0分钟',value:1.16}],
|
|
|
|
|
// 资产部
|
|
|
|
|
propertyData: [{name: '1天4小时0分钟',value:1.16},{name: '2天8小时0分钟',value:2.32},{},{name: '3天4小时0分钟',value:3.16},{name: '1天4小时0分钟',value:1.16},{name: '1天4小时0分钟',value:1.16},{name: '1天4小时0分钟',value:1.16},{name: '1天4小时0分钟',value:1.16},{name: '1天4小时0分钟',value:1.16},{name: '1天4小时0分钟',value:1.16}],
|
|
|
|
|
// 信息部
|
|
|
|
|
messageData: [{},{name: '2天8小时0分钟',value:2.32},{name: '5天4小时0分钟',value:5.16},{name: '3天4小时0分钟',value:3.16},{},{},{name: '1天4小时0分钟',value:1.16},{name: '1天4小时0分钟',value:1.16},{name: '1天4小时0分钟',value:1.16},{name: '1天4小时0分钟',value:1.16}],
|
|
|
|
|
// 法规部
|
|
|
|
|
complianceData: [{name: '1天4小时0分钟',value:1.16},{name: '2天8小时0分钟',value:2.32},{name: '5天4小时0分钟',value:5.16},{name: '3天4小时0分钟',value:3.16},{name: '1天4小时0分钟',value:1.16},{name: '1天4小时0分钟',value:1.16},{name: '1天4小时0分钟',value:1.16},{name: '1天4小时0分钟',value:1.16},{name: '1天4小时0分钟',value:1.16},{name: '1天4小时0分钟',value:1.16}],
|
|
|
|
|
// 财务部
|
|
|
|
|
financeData: [{},{},{name: '5天4小时0分钟',value:5.16},{name: '3天4小时0分钟',value:3.16},{name: '1天4小时0分钟',value:1.16},{},{},{name: '1天4小时0分钟',value:1.16},{name: '1天4小时0分钟',value:1.16},{name: '1天4小时0分钟',value:1.16}],
|
|
|
|
|
thisval:'',
|
|
|
|
|
thisval1:'',
|
|
|
|
|
parameter:{
|
|
|
|
|
createFixedTime:'',
|
|
|
|
|
departmentId:'',
|
|
|
|
|
startTime:'',
|
|
|
|
|
endTime:'',
|
|
|
|
|
flowStatus:''
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
chartsData:[],//循环出待处理的表的数据
|
|
|
|
|
chartsName:[],//表的名称对应的id
|
|
|
|
|
depMatching:{},// 匹配部门名称数据
|
|
|
|
|
depData:[],// 部门选择数据
|
|
|
|
|
teamStatus:[],//状态栏
|
|
|
|
|
search:'',
|
|
|
|
|
|
|
|
|
|
startTime:'',
|
|
|
|
|
endTime:'',
|
|
|
|
|
toDay:'',
|
|
|
|
|
tableView:[],
|
|
|
|
|
|
|
|
|
|
initiateNum:1,// 发起数目
|
|
|
|
|
pendingNum:1,// 待处理
|
|
|
|
|
processedNum:1,// 已处理数目
|
|
|
|
|
copySendNum:1,//抄送我的值
|
|
|
|
|
|
|
|
|
|
// 抄送后端查不了客户,判断条件进行分页+查询
|
|
|
|
|
copyClient:[],// 查询客户保存
|
|
|
|
|
searchClient:false,// 判断查询客户否
|
|
|
|
|
|
|
|
|
|
copyData:[],// 抄送的列表
|
|
|
|
|
copyParam:{// 抄送列表传值
|
|
|
|
|
clientName:'',
|
|
|
|
|
createFixedTime:"",
|
|
|
|
|
endTime :"",
|
|
|
|
|
startTime :"",
|
|
|
|
|
userId :"",
|
|
|
|
|
page:1,
|
|
|
|
|
size:10
|
|
|
|
|
},
|
|
|
|
|
showPreviewImg:false,//查看图片弹框
|
|
|
|
|
previewImg:'',//url
|
|
|
|
|
dispose:'',// 处理绑定值
|
|
|
|
|
|
|
|
|
|
cloneTable:'',// 搜索用的深拷贝备份
|
|
|
|
|
cloneTotal:'',// 拷贝页数
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
watch:{
|
|
|
|
|
flowPathTopVal:function(val){
|
|
|
|
|
if(val==='1'){
|
|
|
|
|
this.efficiencyChart()
|
|
|
|
|
}else{
|
|
|
|
|
this.personalEfficiencyList()
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"listParameter.operatingStatus":function(now){
|
|
|
|
|
if(now===3){// 抄送接口
|
|
|
|
|
this.$set(this.listParameter,'createFixedTime','')
|
|
|
|
|
this.queryCopyForMe()
|
|
|
|
|
}else{
|
|
|
|
|
this.$set(this.copyParam,'createFixedTime','')
|
|
|
|
|
// this.personalEfficiencyList()
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
tableView:function(val){
|
|
|
|
|
if(val.length===0){
|
|
|
|
|
this.TotalPage = 0
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
async created(){
|
|
|
|
|
// 读取角色,判断是否有权限查看团队流程---仅经理级别以上
|
|
|
|
|
if(!['58','61','62','64','65','67','68','70','73','1'].find(item=>sessionStorage.getItem("now-roleBtn").split(',').includes(item))){
|
|
|
|
|
this.flowPathTopSidebar = [{ name: '个人效率', index: '2' }]
|
|
|
|
|
this.flowPathTopVal = '2'
|
|
|
|
|
}
|
|
|
|
|
// 读取待办事项的快捷跳转
|
|
|
|
|
if(sessionStorage.getItem('homeJump')){
|
|
|
|
|
this.flowPathTopVal = '2'
|
|
|
|
|
switch (sessionStorage.getItem('homeJump')) {
|
|
|
|
|
case '0'://'我发起的'
|
|
|
|
|
this.$set(this.listParameter,'operatingStatus',0)
|
|
|
|
|
break;
|
|
|
|
|
case '1'://'待审核'
|
|
|
|
|
this.$set(this.listParameter,'operatingStatus',1)
|
|
|
|
|
break;
|
|
|
|
|
case '2'://'已处理'
|
|
|
|
|
this.$set(this.listParameter,'operatingStatus',2)
|
|
|
|
|
break;
|
|
|
|
|
case '3'://'抄送我的'
|
|
|
|
|
this.$set(this.listParameter,'operatingStatus',3)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
sessionStorage.removeItem('homeJump')
|
|
|
|
|
}
|
|
|
|
|
// await this.businessCount()
|
|
|
|
|
await this.listDepartment()
|
|
|
|
|
if(this.flowPathTopSidebar.length!==1){
|
|
|
|
|
await this.efficiencyChart()
|
|
|
|
|
}
|
|
|
|
|
// 读取流程效率的顶部状态
|
|
|
|
|
if (sessionStorage.getItem('flowPath-topsidebar')) {
|
|
|
|
|
this.flowPathTopVal = sessionStorage.getItem('flowPath-topsidebar');
|
|
|
|
|
if(this.flowPathTopVal==='1'){
|
|
|
|
|
this.efficiencyChart()
|
|
|
|
|
}else{
|
|
|
|
|
this.personalEfficiencyList()
|
|
|
|
|
}
|
|
|
|
|
// sessionStorage.removeItem('flowPath-topsidebar')
|
|
|
|
|
}
|
|
|
|
|
var twoSum = function(nums, target) {
|
|
|
|
|
let len = nums.length;
|
|
|
|
|
// 创建 MAP
|
|
|
|
|
const MAP = new Map();
|
|
|
|
|
// 由于第一个元素在它之前一定没有元素与之匹配,所以先存入哈希表
|
|
|
|
|
MAP.set(nums[0], 0);
|
|
|
|
|
for (let i = 1; i < len; i++) {
|
|
|
|
|
// 提取共用
|
|
|
|
|
let other = target - nums[i];
|
|
|
|
|
// 判断是否符合条件,返回对应的下标
|
|
|
|
|
if (MAP.get(other) !== undefined) return [MAP.get(other), i];
|
|
|
|
|
// 不符合的存入hash表
|
|
|
|
|
MAP.set(nums[i], i)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
function ListNode(val, next) {
|
|
|
|
|
this.val = (val===undefined ? 0 : val)
|
|
|
|
|
this.next = (next===undefined ? null : next)
|
|
|
|
|
}
|
|
|
|
|
let listNode = new ListNode('0')
|
|
|
|
|
let sum = new ListNode('0')
|
|
|
|
|
listNode.next = new ListNode('next')
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
personageSearch(){
|
|
|
|
|
// 如果为空,还原
|
|
|
|
|
if(!this.search){
|
|
|
|
|
this.tableData = this.cloneTable
|
|
|
|
|
this.TotalPage = this.tableData.length
|
|
|
|
|
this.handleCurrentChange(1)
|
|
|
|
|
}else{
|
|
|
|
|
// 在当前的table基础上进行查询
|
|
|
|
|
// 每次查询都还原当前状态
|
|
|
|
|
this.tableData = JSON.parse(JSON.stringify(this.cloneTable))
|
|
|
|
|
console.log(this.tableData,'当前列表总值',this.search,'搜索值');
|
|
|
|
|
this.tableData = this.tableData.filter(data=>{
|
|
|
|
|
return data.clientName.toLowerCase().includes(this.search.toLowerCase()) || data.applicant.toLowerCase().includes(this.search.toLowerCase())
|
|
|
|
|
})
|
|
|
|
|
this.TotalPage = this.tableData.length
|
|
|
|
|
this.handleCurrentChange(1)
|
|
|
|
|
// this.$forceUpdate();
|
|
|
|
|
console.log(this.tableData,'筛选后的值');
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 判断函数,判断节点,判断操作状态,进行跳转处理
|
|
|
|
|
// 区分我发起,待处理,已处理--在不限状态下的判断
|
|
|
|
|
decide(item){
|
|
|
|
|
if(item.operatingStatus===1){// 二次验证是否为处理
|
|
|
|
|
sessionStorage.setItem('decideJump',JSON.stringify(item))
|
|
|
|
|
this.jumpToFrom(item.taskNode)
|
|
|
|
|
// switch (item.taskNode) {
|
|
|
|
|
// // 拥有十套不同的按钮判断逻辑,按钮根据取得的状态进行判断操作
|
|
|
|
|
// case '业务申请':
|
|
|
|
|
// this.jumpToFrom(item.taskNode)
|
|
|
|
|
// break;
|
|
|
|
|
// case '担保部调查':
|
|
|
|
|
// this.jumpToFrom(item.taskNode)
|
|
|
|
|
// break;
|
|
|
|
|
// case '资产部调查':
|
|
|
|
|
// this.jumpToFrom(item.taskNode)
|
|
|
|
|
// break;
|
|
|
|
|
// case '信息部调查':
|
|
|
|
|
// this.jumpToFrom(item.taskNode)
|
|
|
|
|
// break;
|
|
|
|
|
// case '合规调查':
|
|
|
|
|
// this.jumpToFrom(item.taskNode)
|
|
|
|
|
// break;
|
|
|
|
|
// case '工作会':
|
|
|
|
|
// this.jumpToFrom(item.taskNode)
|
|
|
|
|
// break;
|
|
|
|
|
// case '贷审会':
|
|
|
|
|
// this.jumpToFrom(item.taskNode)
|
|
|
|
|
// break;
|
|
|
|
|
// case '担保函':
|
|
|
|
|
// this.jumpToFrom(item.taskNode)
|
|
|
|
|
// break;
|
|
|
|
|
// case '财务确认':
|
|
|
|
|
// this.jumpToFrom(item.taskNode)
|
|
|
|
|
// break;
|
|
|
|
|
// case '放款通知':
|
|
|
|
|
// this.jumpToFrom(item.taskNode)
|
|
|
|
|
// break;
|
|
|
|
|
// }
|
|
|
|
|
// 当处于指派的时候,取消其他判断,仅做跳转和弹出指派弹框
|
|
|
|
|
// if(item.approveStatus == 0){
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 审批状态 approveStatus
|
|
|
|
|
// 业务状态 businessStatus
|
|
|
|
|
// 操作状态 operatingStatus
|
|
|
|
|
// 处理,仅有一个操作,仅需判断出一个操作即可,比如业务员仅修改,经理是审核,指派,一个操作处理
|
|
|
|
|
// 业务申请的按钮展示判断
|
|
|
|
|
|
|
|
|
|
// 别问,问就是不按规范来
|
|
|
|
|
// 按钮的名字业务申请
|
|
|
|
|
btn1(data){
|
|
|
|
|
// 两个操作,需要进行两个操作的判定,多个操作,则需要多个判断
|
|
|
|
|
let survey = 0,
|
|
|
|
|
audit = 0
|
|
|
|
|
// 判断调查员
|
|
|
|
|
if(data.approveStatus===4||data.approveStatus===5||data.approveStatus == 6&&data.operatingStatus == 3&&data.businessStatus !== 2){
|
|
|
|
|
survey+1
|
|
|
|
|
}
|
|
|
|
|
if([57].includes(data.roleId)&&data.businessStatus !== 3){
|
|
|
|
|
survey+1 // 判定为调查员,就return出去,无其他操作
|
|
|
|
|
if(survey==2) return '修改'
|
|
|
|
|
}
|
|
|
|
|
// 判断审核
|
|
|
|
|
if(data.approveStatus===1){
|
|
|
|
|
audit++
|
|
|
|
|
}
|
|
|
|
|
if([58].includes(data.roleId)&&data.businessStatus !== 3){
|
|
|
|
|
audit++
|
|
|
|
|
if(audit==2)return '审核'
|
|
|
|
|
}
|
|
|
|
|
// if(survey!==2&&audit!==2){
|
|
|
|
|
// return '查看'
|
|
|
|
|
// }
|
|
|
|
|
},
|
|
|
|
|
// 担保部调查
|
|
|
|
|
btn2(data){
|
|
|
|
|
let survey = 0,
|
|
|
|
|
audit = 0
|
|
|
|
|
// 先判断指派
|
|
|
|
|
if(data.approveStatus == 0) return '指派'
|
|
|
|
|
// 判断调查
|
|
|
|
|
if(data.approveStatus===1&&data.operatingStatus == 1||data.approveStatus===4&&data.operatingStatus == 1){
|
|
|
|
|
survey++
|
|
|
|
|
}
|
|
|
|
|
if([59,60].includes(data.roleId)&&data.businessStatus !== 3){
|
|
|
|
|
survey++
|
|
|
|
|
if(survey==2)return '调查'
|
|
|
|
|
}
|
|
|
|
|
// 判断审核
|
|
|
|
|
if([58,61].includes(data.roleId)&&data.businessStatus !== 3){
|
|
|
|
|
audit++
|
|
|
|
|
}
|
|
|
|
|
if(data.approveStatus===1&&data.operatingStatus == 1||data.approveStatus===4&&data.operatingStatus == 1){
|
|
|
|
|
audit++
|
|
|
|
|
if(audit==2)return '审核'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
// 资产部调查
|
|
|
|
|
btn3(data){
|
|
|
|
|
let survey = 0,
|
|
|
|
|
audit = 0
|
|
|
|
|
// 先判断指派
|
|
|
|
|
if(data.approveStatus == 0) return '指派'
|
|
|
|
|
// 判断调查
|
|
|
|
|
if([63].includes(data.roleId)&&data.businessStatus !== 3){
|
|
|
|
|
survey++
|
|
|
|
|
}
|
|
|
|
|
if((data.approveStatus===1&&data.operatingStatus == 1)||(data.approveStatus===4&&data.operatingStatus == 1)){
|
|
|
|
|
survey++
|
|
|
|
|
if(survey==2)return '调查'
|
|
|
|
|
}
|
|
|
|
|
// 判断审核
|
|
|
|
|
if([62,64].includes(data.roleId)&&data.businessStatus !== 3){
|
|
|
|
|
audit++
|
|
|
|
|
}
|
|
|
|
|
if((data.approveStatus===1&&data.operatingStatus == 1)||(data.approveStatus===4&&data.operatingStatus == 1)){
|
|
|
|
|
audit++
|
|
|
|
|
if(audit==2)return '审核'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
// 信息部调查
|
|
|
|
|
btn4(data){
|
|
|
|
|
let survey = 0,
|
|
|
|
|
audit = 0
|
|
|
|
|
// 先判断指派
|
|
|
|
|
if(data.approveStatus == 0) return '指派'
|
|
|
|
|
// 判断调查
|
|
|
|
|
if(data.approveStatus===1&&data.operatingStatus == 1||data.approveStatus===4&&data.operatingStatus == 1){
|
|
|
|
|
survey++
|
|
|
|
|
}
|
|
|
|
|
if([66].includes(data.roleId)&&data.businessStatus !== 3){
|
|
|
|
|
survey++
|
|
|
|
|
if(survey==2)return '调查'
|
|
|
|
|
}
|
|
|
|
|
// 判断审核
|
|
|
|
|
if(data.approveStatus===1&&data.operatingStatus == 1||data.approveStatus===4&&data.operatingStatus == 1){
|
|
|
|
|
audit++
|
|
|
|
|
}
|
|
|
|
|
if([65,67].includes(data.roleId)&&data.businessStatus !== 3){
|
|
|
|
|
audit++
|
|
|
|
|
if(audit==2)return '审核'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 合规部调查
|
|
|
|
|
btn5(data){
|
|
|
|
|
let survey = 0,
|
|
|
|
|
audit = 0
|
|
|
|
|
// 先判断指派
|
|
|
|
|
if(data.approveStatus == 0) return '指派'
|
|
|
|
|
// 判断调查
|
|
|
|
|
if([69].includes(data.roleId)&&data.businessStatus !== 3){
|
|
|
|
|
survey++
|
|
|
|
|
}
|
|
|
|
|
if(data.approveStatus===1&&data.operatingStatus == 1||data.approveStatus===4&&data.operatingStatus == 1){
|
|
|
|
|
survey++
|
|
|
|
|
if(survey==2)return '调查'
|
|
|
|
|
}
|
|
|
|
|
// 判断审核
|
|
|
|
|
if([68,70].includes(data.roleId)&&data.businessStatus !== 3){
|
|
|
|
|
audit++
|
|
|
|
|
}
|
|
|
|
|
if(data.approveStatus===1&&data.operatingStatus == 1||data.approveStatus===4&&data.operatingStatus == 1){
|
|
|
|
|
audit++
|
|
|
|
|
if(audit==2)return '审核'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 工作调查
|
|
|
|
|
btn6(data){
|
|
|
|
|
let deliberation = 0,// 审议
|
|
|
|
|
extract = 0// 抽取评委
|
|
|
|
|
// 判断审议
|
|
|
|
|
if([71].includes(data.roleId)&&data.businessStatus !== 3){
|
|
|
|
|
deliberation++
|
|
|
|
|
}
|
|
|
|
|
if(data.approveStatus===1&&data.operatingStatus == 1||data.approveStatus===4&&data.operatingStatus == 1){
|
|
|
|
|
deliberation++
|
|
|
|
|
if(deliberation==2)return '审议'
|
|
|
|
|
}
|
|
|
|
|
// 判断抽取评委
|
|
|
|
|
if([71].includes(data.roleId)&&data.businessStatus !== 3){
|
|
|
|
|
extract++
|
|
|
|
|
}
|
|
|
|
|
if(data.approveStatus===2&&data.operatingStatus == 1){
|
|
|
|
|
extract++
|
|
|
|
|
if(extract==2)return '抽取评委'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 贷审会
|
|
|
|
|
btn7(data){
|
|
|
|
|
let deliberation = 0// 审议
|
|
|
|
|
// 判断审议
|
|
|
|
|
if(data.approveStatus===1&&data.operatingStatus == 1||data.approveStatus===4&&data.operatingStatus == 1){
|
|
|
|
|
deliberation++
|
|
|
|
|
}
|
|
|
|
|
if([72,59,60].includes(data.roleId)&&data.businessStatus !== 3){
|
|
|
|
|
deliberation++
|
|
|
|
|
if(deliberation==2)return '审议'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 担保函调查
|
|
|
|
|
btn8(data){
|
|
|
|
|
// 判断审议
|
|
|
|
|
if(data.isFgJl == 1 && data.operatingStatus !== 2&&data.businessStatus !== 3){
|
|
|
|
|
return '担保函'
|
|
|
|
|
}
|
|
|
|
|
if(data.isFgJl != 1 && data.operatingStatus !== 2&&data.businessStatus !== 3){
|
|
|
|
|
return '确认'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 财务确认
|
|
|
|
|
btn9(data){
|
|
|
|
|
return '确认'
|
|
|
|
|
},
|
|
|
|
|
// 放款通知
|
|
|
|
|
btn10(data){
|
|
|
|
|
return '确认'
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 读取流程效率顶部栏
|
|
|
|
|
getFlowPathTopSidebar(index) {
|
|
|
|
|
if(this.flowPathTopSidebar.length===1){
|
|
|
|
|
this.flowPathTopVal = '2';
|
|
|
|
|
}else if (index) {
|
|
|
|
|
this.flowPathTopVal = index;
|
|
|
|
|
}
|
|
|
|
|
// 状态保存
|
|
|
|
|
sessionStorage.setItem('flowPath-topsidebar',this.flowPathTopVal);
|
|
|
|
|
},
|
|
|
|
|
//select选择宽度匹配
|
|
|
|
|
setMinWidth(val) {
|
|
|
|
|
this.minWidth = val.srcElement.clientWidth;
|
|
|
|
|
},
|
|
|
|
|
// 按钮组切换
|
|
|
|
|
itemRadio(val){
|
|
|
|
|
},
|
|
|
|
|
// 开始时间和结束时间的处理--同一天+1
|
|
|
|
|
getDates(date,val,val1,str){
|
|
|
|
|
// val,开始时间,val1,结束时间
|
|
|
|
|
let num = 3600*24*1000
|
|
|
|
|
if(date!==null){
|
|
|
|
|
// if(date[0]===date[1]){
|
|
|
|
|
// val = this.formatDayTime(date[0])
|
|
|
|
|
// val1 = this.formatDayTime(date[1]+num)
|
|
|
|
|
// }else{
|
|
|
|
|
val = this.formatDayTime(date[0])
|
|
|
|
|
val1 = this.formatDayTime(date[1])
|
|
|
|
|
// }
|
|
|
|
|
}else{
|
|
|
|
|
val = null
|
|
|
|
|
val1 = null
|
|
|
|
|
}
|
|
|
|
|
if(str==='flowTeam'){// 团队查询
|
|
|
|
|
this.parameter.startTime = val
|
|
|
|
|
this.parameter.endTime = val1
|
|
|
|
|
this.efficiencyChart()
|
|
|
|
|
}else{// 个人查询
|
|
|
|
|
if(this.listParameter.operatingStatus===3){// 查询抄送
|
|
|
|
|
this.copyParam.startTime = val
|
|
|
|
|
this.copyParam.endTime = val1
|
|
|
|
|
this.queryCopyForMe()
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
this.personalEfficiencyList()
|
|
|
|
|
this.listParameter.startTime = val
|
|
|
|
|
this.listParameter.endTime = val1
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 转时间戳格式
|
|
|
|
|
formatDayTime(val) {
|
|
|
|
|
if(val) {
|
|
|
|
|
let date = new Date(val)
|
|
|
|
|
let Y = date.getFullYear();
|
|
|
|
|
let M = date.getMonth() + 1;
|
|
|
|
|
let D = date.getDate();
|
|
|
|
|
if(M < 10) {
|
|
|
|
|
M = '0' + M;
|
|
|
|
|
}
|
|
|
|
|
if(D < 10) {
|
|
|
|
|
D = '0' + D;
|
|
|
|
|
}
|
|
|
|
|
return Y + '-' + M + '-' + D ;
|
|
|
|
|
} else {
|
|
|
|
|
return '';
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 读取子组件列表的勾选框----统一,等删除
|
|
|
|
|
getCheck(val) {
|
|
|
|
|
},
|
|
|
|
|
// 部门数据
|
|
|
|
|
async listDepartment(){
|
|
|
|
|
let res= await listDepartment()
|
|
|
|
|
this.depData = res.data
|
|
|
|
|
this.depData.map(e=>{
|
|
|
|
|
this.depMatching[e.id] = e.name
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
// 树状图结构
|
|
|
|
|
async efficiencyChart(){
|
|
|
|
|
this.businessCount()// 每次调接口,调一次状态栏
|
|
|
|
|
this.chartsData = []
|
|
|
|
|
this.chartsName = []
|
|
|
|
|
let res = await efficiencyChart(this.parameter)
|
|
|
|
|
if(res.success){
|
|
|
|
|
for(let i in res.data){
|
|
|
|
|
if(res.data.length===0) return
|
|
|
|
|
let arr = []
|
|
|
|
|
for(let i=0;i<10;i++){
|
|
|
|
|
arr.push({})
|
|
|
|
|
}
|
|
|
|
|
// 分离出来第几个数组有数据
|
|
|
|
|
// 循环子级,分离数据
|
|
|
|
|
for(let e in res.data[i]){
|
|
|
|
|
// 时间的处理
|
|
|
|
|
arr[e-1].name = this.getDuration(res.data[i][e].slice(0,res.data[i][e].indexOf(','))) + "(" + res.data[i][e].slice(res.data[i][e].indexOf(',')+1,res.data[i][e].length) + ")"
|
|
|
|
|
arr[e-1].value = this.getTimeNum(res.data[i][e].slice(0,res.data[i][e].indexOf(',')))
|
|
|
|
|
}
|
|
|
|
|
this.chartsData.push(arr)
|
|
|
|
|
if(i==0) this.chartsName.push('未知部门')
|
|
|
|
|
else this.chartsName.push(this.depMatching[+i])
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
getDuration(my_time) {
|
|
|
|
|
let days = my_time / 1000 / 60 / 60 / 24;
|
|
|
|
|
let daysRound = Math.floor(days);
|
|
|
|
|
let hours = my_time / 1000 / 60 / 60 - (24 * daysRound);
|
|
|
|
|
let hoursRound = Math.floor(hours);
|
|
|
|
|
let minutes = my_time / 1000 / 60 - (24 * 60 * daysRound) - (60 * hoursRound);
|
|
|
|
|
let minutesRound = Math.floor(minutes);
|
|
|
|
|
let seconds = my_time / 1000 - (24 * 60 * 60 * daysRound) - (60 * 60 * hoursRound) - (60 * minutesRound);
|
|
|
|
|
let timeStr = daysRound + '天'+ hoursRound + '时'+ minutesRound + '分'
|
|
|
|
|
// let time = hoursRound + ':' + minutesRound + ':' + seconds // 生成 标准时间格式
|
|
|
|
|
return timeStr;
|
|
|
|
|
},
|
|
|
|
|
getTimeNum(my_time){
|
|
|
|
|
let days = my_time / 1000 / 60 / 60 / 24;
|
|
|
|
|
let daysRound = Math.floor(days);
|
|
|
|
|
let hours = my_time / 1000 / 60 / 60 - (24 * daysRound);
|
|
|
|
|
let hoursRound = Math.floor(hours);
|
|
|
|
|
let minutes = my_time / 1000 / 60 - (24 * 60 * daysRound) - (60 * hoursRound);
|
|
|
|
|
let minutesRound = Math.floor(minutes);
|
|
|
|
|
let time = daysRound+(hoursRound / 24)+(minutesRound/60/24)
|
|
|
|
|
time.toFixed(2)
|
|
|
|
|
// if(time === 0) time = 0.1
|
|
|
|
|
return time
|
|
|
|
|
},
|
|
|
|
|
async businessCount(){// 团队状态栏
|
|
|
|
|
let res = await businessCount()
|
|
|
|
|
this.teamStatus = []
|
|
|
|
|
if(res.data&&res.data.length!==0){
|
|
|
|
|
this.teamStatus = res.data
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
// 个人列表
|
|
|
|
|
async personalEfficiencyList(){
|
|
|
|
|
try{
|
|
|
|
|
this.tableData = []
|
|
|
|
|
this.tableView = []
|
|
|
|
|
this.Loading = true
|
|
|
|
|
let res = await personalEfficiencyList(this.listParameter)
|
|
|
|
|
if(res.success){
|
|
|
|
|
this.Loading = false
|
|
|
|
|
if(res.data.responseList&&res.data.responseList.length!==0){
|
|
|
|
|
let data = JSON.parse(JSON.stringify(res.data.responseList))
|
|
|
|
|
data.map(e=>{
|
|
|
|
|
// e.btn = '查看'
|
|
|
|
|
if(e.operatingStatus===1){
|
|
|
|
|
switch (e.taskNode) {
|
|
|
|
|
// 拥有十套不同的按钮判断逻辑,按钮根据取得的状态进行判断操作
|
|
|
|
|
case '业务申请':
|
|
|
|
|
e.btn = this.btn1(e)
|
|
|
|
|
break;
|
|
|
|
|
case '担保部调查':
|
|
|
|
|
e.btn = this.btn2(e)
|
|
|
|
|
break;
|
|
|
|
|
case '资产部调查':
|
|
|
|
|
e.btn = this.btn3(e)
|
|
|
|
|
break;
|
|
|
|
|
case '信息部调查':
|
|
|
|
|
e.btn = this.btn4(e)
|
|
|
|
|
break;
|
|
|
|
|
case '合规调查':
|
|
|
|
|
e.btn = this.btn5(e)
|
|
|
|
|
break;
|
|
|
|
|
case '工作会':
|
|
|
|
|
e.btn = this.btn6(e)
|
|
|
|
|
break;
|
|
|
|
|
case '贷审会':
|
|
|
|
|
e.btn = this.btn7(e)
|
|
|
|
|
break;
|
|
|
|
|
case '担保函':
|
|
|
|
|
e.btn = this.btn8(e)
|
|
|
|
|
break;
|
|
|
|
|
case '财务确认':
|
|
|
|
|
e.btn = this.btn9(e)
|
|
|
|
|
break;
|
|
|
|
|
case '放款通知':
|
|
|
|
|
e.btn = this.btn10(e)
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
this.tableData = data
|
|
|
|
|
this.cloneTable = JSON.parse(JSON.stringify(data))
|
|
|
|
|
this.tableView = this.tableData.slice(0, 10)
|
|
|
|
|
this.TotalPage = res.data.responseList.length
|
|
|
|
|
}
|
|
|
|
|
this.initiateNum = res.data.statistics.initiateNum
|
|
|
|
|
this.pendingNum = res.data.statistics.pendingNum
|
|
|
|
|
this.processedNum = res.data.statistics.processedNum
|
|
|
|
|
this.copySendNum = res.data.statistics.copySendNum
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}catch(err){
|
|
|
|
|
this.Loading = false
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
ExportFile() {
|
|
|
|
|
let that = this
|
|
|
|
|
axios({
|
|
|
|
|
method: 'get',
|
|
|
|
|
url: personalEfficiencyListExport,
|
|
|
|
|
headers: {
|
|
|
|
|
token: sessionStorage.getItem('token')||localStorage.getItem('token'),
|
|
|
|
|
},
|
|
|
|
|
responseType: "blob",
|
|
|
|
|
})
|
|
|
|
|
.then(res=>{})
|
|
|
|
|
.catch(err=>{
|
|
|
|
|
// if(!err.success){
|
|
|
|
|
// return that.$message.error('导出失败!请稍后重试!')
|
|
|
|
|
// }
|
|
|
|
|
this.downloadFile(err.data,'个人效率导出')
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
ExportFileCopy() {
|
|
|
|
|
let that = this
|
|
|
|
|
axios({
|
|
|
|
|
method: 'get',
|
|
|
|
|
url: exportCopyForMe,
|
|
|
|
|
headers: {
|
|
|
|
|
token: sessionStorage.getItem('token')||localStorage.getItem('token'),
|
|
|
|
|
},
|
|
|
|
|
responseType: "blob",
|
|
|
|
|
})
|
|
|
|
|
.then(res=>{})
|
|
|
|
|
.catch(err=>{
|
|
|
|
|
this.downloadFile(err.data,'我的抄送列表')
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
downloadFile (file, filename = '') {
|
|
|
|
|
let blob = new Blob(
|
|
|
|
|
[file],
|
|
|
|
|
{
|
|
|
|
|
// type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
|
|
|
|
|
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
let downloadElement = document.createElement('a');
|
|
|
|
|
let href = window.URL.createObjectURL(blob); //创建下载的链接
|
|
|
|
|
downloadElement.href = href;
|
|
|
|
|
downloadElement.download = filename; //下载后文件名
|
|
|
|
|
document.body.appendChild(downloadElement);
|
|
|
|
|
downloadElement.click(); //点击下载
|
|
|
|
|
document.body.removeChild(downloadElement); //下载完成移除元素
|
|
|
|
|
window.URL.revokeObjectURL(href); //释放掉blob对象
|
|
|
|
|
},
|
|
|
|
|
handleCurrentChange(val){ // 前端分页
|
|
|
|
|
this.flowPage = val
|
|
|
|
|
if (val != 1) val =(val-1) * 10 // 需要size改这里
|
|
|
|
|
// let number = this.tableData.length
|
|
|
|
|
this.tableView = this.tableData.slice(val-1, val+9)// 修改size,10也改
|
|
|
|
|
},
|
|
|
|
|
copymeCurrentChange(val){ // 抄送-前端分页
|
|
|
|
|
this.copyPage = val
|
|
|
|
|
console.log(this.copyPage,val,'当前val',);
|
|
|
|
|
if (val != 1) val =(val-1) * 10 // 需要size改这里
|
|
|
|
|
this.copyData = this.copyClient.slice(val-1, val+9)// 修改size,10也改
|
|
|
|
|
},
|
|
|
|
|
// 抄送分页
|
|
|
|
|
handleCurrentCopy(val){
|
|
|
|
|
console.log(val,'抄送分页器',this.copyPage,'copyPage');
|
|
|
|
|
// 需要判断是否查询客户,进行前端分页处理--后端查询不了
|
|
|
|
|
if(this.searchClient){
|
|
|
|
|
console.log('前端分页');
|
|
|
|
|
// 前端查询
|
|
|
|
|
this.copymeCurrentChange(val)
|
|
|
|
|
}else{
|
|
|
|
|
// 正常后端查询
|
|
|
|
|
console.log('后端分页');
|
|
|
|
|
this.copyParam.page = val
|
|
|
|
|
this.queryCopyForMe()
|
|
|
|
|
this.copyPage = val
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 抄送列表
|
|
|
|
|
queryCopyForMe(val){
|
|
|
|
|
if(val === "search"){
|
|
|
|
|
this.copyParam.page = 1
|
|
|
|
|
this.copyParam.size = 10
|
|
|
|
|
this.copyPage = 1
|
|
|
|
|
}
|
|
|
|
|
if(this.copyParam.clientName==='客户'){
|
|
|
|
|
this.searchClient = true
|
|
|
|
|
console.log('查询客户');
|
|
|
|
|
let obj = JSON.parse(JSON.stringify(this.copyParam))
|
|
|
|
|
obj.size = 99999
|
|
|
|
|
obj.page = 1
|
|
|
|
|
obj.clientName = ''
|
|
|
|
|
queryCopyForMe(obj).then(res=>{
|
|
|
|
|
if(res.data.copyForMeList){
|
|
|
|
|
// 记录筛选的数据
|
|
|
|
|
this.copyClient = res.data.copyForMeList.filter(e=>{
|
|
|
|
|
return e.applicant === '客户'
|
|
|
|
|
})
|
|
|
|
|
console.log(this.copyData,'this.copyData');
|
|
|
|
|
this.copyTotalPage = this.copyClient.length
|
|
|
|
|
this.handleCurrentCopy(1)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}else{
|
|
|
|
|
this.searchClient = false
|
|
|
|
|
queryCopyForMe(this.copyParam).then(res=>{
|
|
|
|
|
this.copyTotalPage = res.data.total
|
|
|
|
|
if(res.data.copyForMeList)this.copyData = res.data.copyForMeList
|
|
|
|
|
// this.copyPage = 1
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
seeCopyImg(img){
|
|
|
|
|
this.showPreviewImg = true
|
|
|
|
|
this.previewImg = img
|
|
|
|
|
},
|
|
|
|
|
jumpToFrom(node){
|
|
|
|
|
let nodeCode
|
|
|
|
|
switch (node) {
|
|
|
|
|
case '业务申请':
|
|
|
|
|
nodeCode = 1
|
|
|
|
|
break;
|
|
|
|
|
case '担保部调查':
|
|
|
|
|
nodeCode = 2
|
|
|
|
|
break;
|
|
|
|
|
case '资产部调查':
|
|
|
|
|
nodeCode = 3
|
|
|
|
|
break;
|
|
|
|
|
case '信息部调查':
|
|
|
|
|
nodeCode = 4
|
|
|
|
|
break;
|
|
|
|
|
case '合规调查':
|
|
|
|
|
nodeCode = 5
|
|
|
|
|
break;
|
|
|
|
|
case '工作会':
|
|
|
|
|
nodeCode = 6
|
|
|
|
|
break;
|
|
|
|
|
case '贷审会':
|
|
|
|
|
nodeCode = 7
|
|
|
|
|
break;
|
|
|
|
|
case '担保函':
|
|
|
|
|
nodeCode = 8
|
|
|
|
|
break;
|
|
|
|
|
case '财务确认':
|
|
|
|
|
nodeCode = 9
|
|
|
|
|
// 最后三部都记录对应的消息应用
|
|
|
|
|
break;
|
|
|
|
|
case '放款通知':
|
|
|
|
|
nodeCode = 10
|
|
|
|
|
// 最后三部都记录对应的消息应用
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 跳转方法,在工作台文件做了监听
|
|
|
|
|
this.$store.commit('messageData',{messageData:{modelId:nodeCode}})
|
|
|
|
|
},
|
|
|
|
|
// 处理抄送到对应业务详情
|
|
|
|
|
// val区分抄送列表或者是其他状态列表操作
|
|
|
|
|
seeDetail(data,val){
|
|
|
|
|
// 根据VAL区分查看还是抄送的跳转,流程的最后三个模块的处理方式不同
|
|
|
|
|
// 抄送列表接口 和 其他状态的接口不同,而其他状态的接口只有一个id用于查询业务详情.
|
|
|
|
|
// 抄送列表有最后三个模块的详情,所以携带参数传递即可
|
|
|
|
|
if(val==='查看'){
|
|
|
|
|
// 根据该记录去判断,执行哪个查看详情操作
|
|
|
|
|
sessionStorage.setItem('private','查看')
|
|
|
|
|
}
|
|
|
|
|
let letterValue = {
|
|
|
|
|
businessId: data.businessId,//业务id
|
|
|
|
|
id:data.detailId,//rowID
|
|
|
|
|
}
|
|
|
|
|
this.$store.commit("letterData", { letterValue: letterValue });
|
|
|
|
|
// 记录数据,模块根据数据进行判断是否抄送的跳转
|
|
|
|
|
sessionStorage.setItem('fromCopyTo',JSON.stringify(data))
|
|
|
|
|
this.jumpToFrom(data.taskNode)// 跳转到对应模块
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
<style lang='scss' scoped>
|
|
|
|
|
.blank{
|
|
|
|
|
line-height:500px;
|
|
|
|
|
height: 500px;
|
|
|
|
|
width: 100%;
|
|
|
|
|
text-align: center;
|
|
|
|
|
}
|
|
|
|
|
/deep/.el-table .cell {
|
|
|
|
|
padding: 0;
|
|
|
|
|
}
|
|
|
|
|
/deep/ .el-table-column--selection .cell {
|
|
|
|
|
padding-left: 0;
|
|
|
|
|
padding-right: 0;
|
|
|
|
|
}
|
|
|
|
|
/deep/ .el-checkbox__inner {
|
|
|
|
|
background: transparent;
|
|
|
|
|
border: 0;
|
|
|
|
|
background-image: url('../../assets/img/btn_per_un.png');
|
|
|
|
|
background-size: cover;
|
|
|
|
|
width: 20px;
|
|
|
|
|
height: 20px;
|
|
|
|
|
}
|
|
|
|
|
/deep/ .cell .el-checkbox__input .el-checkbox__inner {
|
|
|
|
|
background-color: transparent;
|
|
|
|
|
background-image: url('../../assets/img/btn_per_un.png');
|
|
|
|
|
background-size: cover;
|
|
|
|
|
width: 20px;
|
|
|
|
|
height: 20px;
|
|
|
|
|
border: 0;
|
|
|
|
|
transition: none;
|
|
|
|
|
}
|
|
|
|
|
/deep/ .el-checkbox {
|
|
|
|
|
width: 20px;
|
|
|
|
|
height: 20px;
|
|
|
|
|
transition: none;
|
|
|
|
|
}
|
|
|
|
|
/deep/ .el-checkbox__input.is-checked + .el-checkbox__label {
|
|
|
|
|
transition: none;
|
|
|
|
|
width: 20px;
|
|
|
|
|
height: 20px;
|
|
|
|
|
}
|
|
|
|
|
/deep/ .el-checkbox__input .el-checkbox__inner::after {
|
|
|
|
|
background: transparent;
|
|
|
|
|
content: '';
|
|
|
|
|
height: 20px;
|
|
|
|
|
width: 20px;
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
transition: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 选中后
|
|
|
|
|
|
|
|
|
|
/deep/ .el-checkbox__input.is-checked .el-checkbox__inner {
|
|
|
|
|
background-color: transparent;
|
|
|
|
|
transition: none;
|
|
|
|
|
width: 20px;
|
|
|
|
|
height: 20px;
|
|
|
|
|
}
|
|
|
|
|
/deep/ .el-checkbox__input.is-checked .el-checkbox__inner::after {
|
|
|
|
|
content: '';
|
|
|
|
|
background: transparent;
|
|
|
|
|
background-image: url('../../assets/img/btn_pre.png');
|
|
|
|
|
|
|
|
|
|
width: 20px;
|
|
|
|
|
border: 0;
|
|
|
|
|
background-size: cover;
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 0;
|
|
|
|
|
left: 0;
|
|
|
|
|
transition: none;
|
|
|
|
|
}
|
|
|
|
|
/deep/ .el-table .cell {
|
|
|
|
|
text-align: center;
|
|
|
|
|
text-overflow: clip;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/deep/ .el-pager li {
|
|
|
|
|
border-radius: 50% !important;
|
|
|
|
|
height: 30px;
|
|
|
|
|
width: 30px;
|
|
|
|
|
min-height: 25px !important;
|
|
|
|
|
min-width: 25px !important;
|
|
|
|
|
background: #f2f2f2;
|
|
|
|
|
line-height: 30px;
|
|
|
|
|
text-align: center;
|
|
|
|
|
padding: 0;
|
|
|
|
|
}
|
|
|
|
|
/deep/ .el-form-item {
|
|
|
|
|
margin-bottom: 0;
|
|
|
|
|
}
|
|
|
|
|
/deep/ .el-pagination.is-background .btn-prev {
|
|
|
|
|
background-color: transparent;
|
|
|
|
|
}
|
|
|
|
|
/deep/ .el-form-item__label {
|
|
|
|
|
color: #00b9ff;
|
|
|
|
|
padding: 0;
|
|
|
|
|
}
|
|
|
|
|
/deep/ .el-input__inner {
|
|
|
|
|
border-radius: 20px;
|
|
|
|
|
// background: #fafafa;
|
|
|
|
|
}
|
|
|
|
|
/deep/ .el-pagination .btn-next .el-icon {
|
|
|
|
|
color: #00b9ff;
|
|
|
|
|
font-size: 20px;
|
|
|
|
|
}
|
|
|
|
|
/deep/ .el-pagination .btn-prev .el-icon {
|
|
|
|
|
color: #00b9ff;
|
|
|
|
|
font-size: 20px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/deep/ .el-table td {
|
|
|
|
|
padding: 0px;
|
|
|
|
|
padding: 8px 0;
|
|
|
|
|
}
|
|
|
|
|
/deep/ .el-table th > .cell {
|
|
|
|
|
padding: 0;
|
|
|
|
|
}
|
|
|
|
|
/deep/ .el-pagination.is-background .btn-next {
|
|
|
|
|
background-color: transparent;
|
|
|
|
|
}
|
|
|
|
|
.sorter /deep/ .el-input__inner{
|
|
|
|
|
padding: 0 5px!important;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
</style>
|