|  | @@ -0,0 +1,2616 @@
 | 
	
		
			
				|  |  | +<template>
 | 
	
		
			
				|  |  | +  <div :class="[{ bg_fff: skeletonLoad }]">
 | 
	
		
			
				|  |  | +    <van-nav-bar :title="detailsTIt" left-arrow @click-left="routerBak">
 | 
	
		
			
				|  |  | +      <div v-if="!isDetails" slot="right" @click="handleClick()" style="color: #fff;">筛选<van-icon name="list-switch" /></div>
 | 
	
		
			
				|  |  | +    </van-nav-bar>
 | 
	
		
			
				|  |  | +    <div v-if="isDisabled && !graded" class="upDownList flex-box flex-d-center">
 | 
	
		
			
				|  |  | +      <div class="uDownBut font-flex-word" style="" v-for="(item, index) in headuDown" :key="index" @click="uDownCli(item)">
 | 
	
		
			
				|  |  | +        <span v-if="!item.id" style="color: #a2a2a2;">已无待办</span>
 | 
	
		
			
				|  |  | +        <span v-else>
 | 
	
		
			
				|  |  | +          <span v-if="item.keys == 1">{{ item.keys2 }}</span>
 | 
	
		
			
				|  |  | +          {{ item.keys1 }}:{{ item.name }}
 | 
	
		
			
				|  |  | +          <span v-if="item.keys == 2">{{ item.keys2 }}</span>
 | 
	
		
			
				|  |  | +        </span>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +    <template v-if="isDetails">
 | 
	
		
			
				|  |  | +        <VanSkeleton :skeLoad="skeletonLoad">
 | 
	
		
			
				|  |  | +          <div class="overall">
 | 
	
		
			
				|  |  | +            <scroller :isNeed="isNeed">
 | 
	
		
			
				|  |  | +              <div :style="isDisabled ? 'padding-bottom: 3rem;' : 'padding-bottom: 2rem;'">
 | 
	
		
			
				|  |  | +                <header>
 | 
	
		
			
				|  |  | +                  <div class="flex-box-ce" style="position: relative;">
 | 
	
		
			
				|  |  | +                    <userImage
 | 
	
		
			
				|  |  | +                      class="about-me__avatar"
 | 
	
		
			
				|  |  | +                      :id="Information.id"
 | 
	
		
			
				|  |  | +                      :img_url="Information.img_url"
 | 
	
		
			
				|  |  | +                      :user_name="Information.name"
 | 
	
		
			
				|  |  | +                      fontSize=".28"
 | 
	
		
			
				|  |  | +                      width=".75rem"
 | 
	
		
			
				|  |  | +                      height=".75rem"
 | 
	
		
			
				|  |  | +                      style="margin-top:.1rem;"
 | 
	
		
			
				|  |  | +                    ></userImage>
 | 
	
		
			
				|  |  | +                    <div style="padding:.1rem 0 0 .25rem; box-sizing: border-box;">
 | 
	
		
			
				|  |  | +                      <span style="font-size:.28rem;color:black;">{{ Information.name }}</span>
 | 
	
		
			
				|  |  | +                      <span v-if="okrs && okrs.length > 0" class="okr-tips" @click="goMyTarget">查看okr</span>
 | 
	
		
			
				|  |  | +                      <br />
 | 
	
		
			
				|  |  | +                      <span class="font-flex-word" style="width: 4.4rem;display:inline-block;" v-if="Information.employee_detail && Information.employee_detail.dept_list.length>0">
 | 
	
		
			
				|  |  | +                        <span class="pdHeadDept" v-for="(arr, att) in Information.employee_detail.dept_list" :key="att">
 | 
	
		
			
				|  |  | +                          {{ arr.dept_name }}
 | 
	
		
			
				|  |  | +                          <span v-if="Information.employee_detail.dept_list.length - att > 1">,</span>
 | 
	
		
			
				|  |  | +                        </span>
 | 
	
		
			
				|  |  | +                      </span>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                    <img v-if="has_finish" class="guidang" src="static/images/guidang.png" />
 | 
	
		
			
				|  |  | +                  </div>
 | 
	
		
			
				|  |  | +                  <div v-if="titList.length > 0" style="border-top:1px solid #e0e0e0; padding: .25rem 0 0rem 0; margin: .25rem 0 0 0;" class="">
 | 
	
		
			
				|  |  | +                    <van-row v-for="(list, arr) in titList" :key="arr" style="font-size:.29rem;padding:.1rem 0;" v-if="list.prop">
 | 
	
		
			
				|  |  | +                      <van-col span="5" style="color:#757575;">{{ list.lab }}:</van-col>
 | 
	
		
			
				|  |  | +                      <van-col span="19">
 | 
	
		
			
				|  |  | +                        <div v-if="typeof list.prop == 'object'">
 | 
	
		
			
				|  |  | +                          <div v-for="(data, sit) in list.prop" :key="sit">{{ data }}</div>
 | 
	
		
			
				|  |  | +                        </div>
 | 
	
		
			
				|  |  | +                        <span v-else v-html="list.prop" class="orange"></span>
 | 
	
		
			
				|  |  | +                      </van-col>
 | 
	
		
			
				|  |  | +                    </van-row>
 | 
	
		
			
				|  |  | +                  </div>
 | 
	
		
			
				|  |  | +                </header>
 | 
	
		
			
				|  |  | +                <div>
 | 
	
		
			
				|  |  | +                  <div class="modTit flex-box flex-d-center">
 | 
	
		
			
				|  |  | +                    <span>绩效流程</span>
 | 
	
		
			
				|  |  | +                    <van-checkbox icon-size=".28rem" v-model="checked" shape="square">查看更多</van-checkbox>
 | 
	
		
			
				|  |  | +                  </div>
 | 
	
		
			
				|  |  | +                  <div class="flexPopover" ref="refarrow">
 | 
	
		
			
				|  |  | +                    <div class="flex_one flex-box flex-d-center" v-if="perfstepFlow[flexIndex - 1]" @click="flexDialog = true">
 | 
	
		
			
				|  |  | +                      <div class="font-flex-word">
 | 
	
		
			
				|  |  | +                        <span>{{ flexIndex }}. {{ perfstepFlow[flexIndex - 1].remark }}</span>
 | 
	
		
			
				|  |  | +                        <span v-if="perfstepFlow[flexIndex - 1].target.length > 0">
 | 
	
		
			
				|  |  | +                          <span v-for="(item, index) in perfstepFlow[flexIndex - 1].target" :key="index">
 | 
	
		
			
				|  |  | +                            {{ item.employee_name }}
 | 
	
		
			
				|  |  | +                            <span v-if="perfstepFlow[flexIndex - 1].target.length - index > 1">,</span>
 | 
	
		
			
				|  |  | +                          </span>
 | 
	
		
			
				|  |  | +                        </span>
 | 
	
		
			
				|  |  | +                      </div>
 | 
	
		
			
				|  |  | +                      <div><van-icon name="arrow-down" /></div>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                  </div>
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                <!-- 执行中 -->
 | 
	
		
			
				|  |  | +                <div v-for="(item, index) in inExecution" :key="index">
 | 
	
		
			
				|  |  | +                  <div class="modTit">{{ item.theDimension }}</div>
 | 
	
		
			
				|  |  | +                  <div class="modCont">
 | 
	
		
			
				|  |  | +                    <div v-if="!item.totalScore" style="padding-bottom: .1rem;" class="flex-box flex-d-center">
 | 
	
		
			
				|  |  | +                      <span style="font-size: .33rem;font-weight: bold;color: #303133;">
 | 
	
		
			
				|  |  | +                        <span>{{ item.name }}</span>
 | 
	
		
			
				|  |  | +                      </span>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                    <div>
 | 
	
		
			
				|  |  | +                      <span v-for="(list, arr) in item.tabList" :key="arr" class="tab-List" v-if="list.prop">{{ list.prop }}</span>
 | 
	
		
			
				|  |  | +                      <div v-if="initData(item.per_remark)" class="stanif">
 | 
	
		
			
				|  |  | +                        <div class="stanTit">考核标准</div>
 | 
	
		
			
				|  |  | +                        <div class="standara"><span class="standarapad line-feed" v-html="item.per_remark"></span></div>
 | 
	
		
			
				|  |  | +                      </div>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                    <!-- 详情信息 -->
 | 
	
		
			
				|  |  | +                    <div>
 | 
	
		
			
				|  |  | +                      <div v-for="(list, arr) in item.details" :key="arr" class="flex-box" style="font-size:.29rem;padding:.1rem 0;" v-if="list.prop && list.prop != '0'">
 | 
	
		
			
				|  |  | +                        <div style="color:#757575;">{{ list.lab }}:</div>
 | 
	
		
			
				|  |  | +                        <div style="padding-left: 0.2rem;" class="flex-1">
 | 
	
		
			
				|  |  | +                          <pre v-if="list.lab == '备注'" class="pre">{{ list.prop }}</pre>
 | 
	
		
			
				|  |  | +                          <div v-else-if="list.lab == '结果值附件'">
 | 
	
		
			
				|  |  | +                              <div class="flex-box-ce" style="margin: 10px 0;" v-if="list.prop.images.length>0">
 | 
	
		
			
				|  |  | +                                <van-image @click="openImg(list.prop.images,imgIndex)" v-for="(e,imgIndex) in list.prop.images" :key="imgIndex" style="border-radius: 3px;margin-right: 10px;" width="70" height="70" :src="e.url"/>
 | 
	
		
			
				|  |  | +                              </div>
 | 
	
		
			
				|  |  | +                              <div class="flex-box-v" v-if="list.prop.append.length>0">
 | 
	
		
			
				|  |  | +                                <div class="color_blue" style="margin-bottom:5px;" @click="downWgt(e.url,e.name)" v-for="(e,imgIndex) in list.prop.append" :key="imgIndex">{{e.name}}</div>
 | 
	
		
			
				|  |  | +                              </div>
 | 
	
		
			
				|  |  | +                          </div>
 | 
	
		
			
				|  |  | +                          <div v-else-if="list.lab == '结果值'" class="orange">{{ list.prop }}</div>
 | 
	
		
			
				|  |  | +                          <div v-else>{{ list.prop }}</div>
 | 
	
		
			
				|  |  | +                        </div>
 | 
	
		
			
				|  |  | +                      </div>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                    <!-- 评分结果 -->
 | 
	
		
			
				|  |  | +                    <div>
 | 
	
		
			
				|  |  | +                      <van-row v-for="(list, arr) in item.scoreList" :key="arr" v-if="list.prop && isShowOneself(list)">
 | 
	
		
			
				|  |  | +                        <van-col span="24" style="color:#757575; font-size:.29rem;padding:.1rem 0;">
 | 
	
		
			
				|  |  | +                          <template v-if="list.pointShow">
 | 
	
		
			
				|  |  | +                            <span>{{ list.lab }}</span>
 | 
	
		
			
				|  |  | +                            <span class="orange">评分:</span>
 | 
	
		
			
				|  |  | +                            <span>{{ list.prop }}</span>
 | 
	
		
			
				|  |  | +                            <span v-if="list.level" style="margin-left: .1rem;color: #26a2ff;">{{ list.level }}</span>
 | 
	
		
			
				|  |  | +                          </template>
 | 
	
		
			
				|  |  | +                        </van-col>
 | 
	
		
			
				|  |  | +                        <van-col span="24">
 | 
	
		
			
				|  |  | +                          <div class="flex-box" style="font-size:.29rem;padding:.1rem 0;" v-if="list.remark && list.textShow">
 | 
	
		
			
				|  |  | +                            <span style="padding-right: 0.2rem;color:#757575;">说明:</span>
 | 
	
		
			
				|  |  | +                            <pre class="pre2 flex-1">{{ list.remark }}</pre>
 | 
	
		
			
				|  |  | +                          </div>
 | 
	
		
			
				|  |  | +                        </van-col>
 | 
	
		
			
				|  |  | +                      </van-row>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    <div class="flex-box-ce">
 | 
	
		
			
				|  |  | +                      <span v-if="item.schedule && item.schedule.length > 0" style="font-size: .28rem;padding-right:.2rem;color:#1d96ff;" @click="openPlanPath(item, 'action')">
 | 
	
		
			
				|  |  | +                        执行计划({{ item.schedule.length }})
 | 
	
		
			
				|  |  | +                      </span>
 | 
	
		
			
				|  |  | +                      <span v-if="item.mamage_record && item.mamage_record.length > 0" style="font-size:.26rem; color:rgb(29, 150, 255);" @click="openPlanPath(item, 'admnin')">
 | 
	
		
			
				|  |  | +                        管理记录({{ item.mamage_record.length }})
 | 
	
		
			
				|  |  | +                      </span>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                    <div v-if="item.update_time" style="border-top: 1px solid #f1f1f1;margin-top: 0.2rem;">
 | 
	
		
			
				|  |  | +                      <div v-if="returnStr(item.update_time).indexOf('今天')>=0" class="orange" style="font-size: 0.28rem;padding-top: 0.2rem;" >{{returnStr(item.update_time)}}</div>
 | 
	
		
			
				|  |  | +                      <div v-else-if="returnStr(item.update_time).indexOf('昨天')>=0" class="color_green" style="font-size: 0.28rem;padding-top: 0.2rem;" >{{returnStr(item.update_time)}}</div>
 | 
	
		
			
				|  |  | +                      <div v-else-if="returnStr(item.update_time).indexOf('前天')>=0" style="font-size: 0.28rem;padding-top: 0.2rem;" >{{returnStr(item.update_time)}}</div>
 | 
	
		
			
				|  |  | +                      <div v-else style="font-size: 0.28rem;padding-top: 0.2rem;" >{{returnStr(item.update_time)}}</div>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    <!-- 评分 -->
 | 
	
		
			
				|  |  | +                    <div style="margin:.2rem 0;" v-if="graded">
 | 
	
		
			
				|  |  | +                      <div  v-if="item.auto_score||item.auto_score===0" class="flex-box-ce" style="font-size: 0.28rem;">
 | 
	
		
			
				|  |  | +                        <div class="flex-1" @click="showE(item)"><span>系统评分</span><van-icon name="question-o" style="position: relative;top: 2px;" />:<span class="color_blue">{{item.auto_score}}</span></div>
 | 
	
		
			
				|  |  | +                        <div class="blue" style="text-decoration:underline" @click="copyPoin(item)">使用系统评分</div>
 | 
	
		
			
				|  |  | +                      </div>
 | 
	
		
			
				|  |  | +                      <div v-if="(ruleScore == 1 && !item.totalScore) || (ruleScore == 2 && item.totalScore)">
 | 
	
		
			
				|  |  | +                        <van-cell-group>
 | 
	
		
			
				|  |  | +                          <van-field
 | 
	
		
			
				|  |  | +                            label="评分"
 | 
	
		
			
				|  |  | +                            v-model="item.resultval"
 | 
	
		
			
				|  |  | +                            type="number"
 | 
	
		
			
				|  |  | +                            placeholder="请输入评分"
 | 
	
		
			
				|  |  | +                            @focus="isShowPoint = false"
 | 
	
		
			
				|  |  | +                            style="border: 1px solid rgb(226 226 226);border-radius: 5px;"
 | 
	
		
			
				|  |  | +                            @blur="watresultval(item.resultval, item.totalScore ? item.totalScore : false)"
 | 
	
		
			
				|  |  | +                            @input="[sgradeInp(item), (item.resultval = item.resultval.match(/\d+(\.\d{0,2})?/) ? item.resultval.match(/\d+(\.\d{0,2})?/)[0] : '')]"
 | 
	
		
			
				|  |  | +                          />
 | 
	
		
			
				|  |  | +                        </van-cell-group>
 | 
	
		
			
				|  |  | +                      </div>
 | 
	
		
			
				|  |  | +                      <div v-if="(ruleScore == 1 && !item.totalScore) || (ruleScore == 2 && item.totalScore)">
 | 
	
		
			
				|  |  | +                        <van-cell-group>
 | 
	
		
			
				|  |  | +                          <van-field
 | 
	
		
			
				|  |  | +                            v-model="item.remarks"
 | 
	
		
			
				|  |  | +                            label="评分说明"
 | 
	
		
			
				|  |  | +                            rows="3"
 | 
	
		
			
				|  |  | +                            type="textarea"
 | 
	
		
			
				|  |  | +                            @focus="isShowPoint = false"
 | 
	
		
			
				|  |  | +                            @blur="isShowPoint = true"
 | 
	
		
			
				|  |  | +                            maxlength="50"
 | 
	
		
			
				|  |  | +                            autosize
 | 
	
		
			
				|  |  | +                            placeholder="请输入"
 | 
	
		
			
				|  |  | +                            show-word-limit
 | 
	
		
			
				|  |  | +                            style="border: 1px solid rgb(226 226 226);border-radius: 5px;"
 | 
	
		
			
				|  |  | +                          />
 | 
	
		
			
				|  |  | +                        </van-cell-group>
 | 
	
		
			
				|  |  | +                      </div>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                  </div>
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                <!-- 记录 -->
 | 
	
		
			
				|  |  | +                <div v-if="recordList.length > 0">
 | 
	
		
			
				|  |  | +                  <div class="modTit">记录</div>
 | 
	
		
			
				|  |  | +                  <div class="modCont" style="">
 | 
	
		
			
				|  |  | +                    <div
 | 
	
		
			
				|  |  | +                      v-for="(item, index) in recordList"
 | 
	
		
			
				|  |  | +                      :key="index"
 | 
	
		
			
				|  |  | +                      :style="index != recordList.length - 1 ? 'min-height: 1rem;' : ''"
 | 
	
		
			
				|  |  | +                      style="position: relative;padding-bottom: .2rem;"
 | 
	
		
			
				|  |  | +                    >
 | 
	
		
			
				|  |  | +                      <van-row gutter="10">
 | 
	
		
			
				|  |  | +                        <van-col span="15">
 | 
	
		
			
				|  |  | +                          <div style="display:flex;">
 | 
	
		
			
				|  |  | +                            <userImage class="about-me__avatar" :id="item.employee_id" :user_name="item.name" fontSize=".24" width="0.5rem" height="0.5rem" font_min></userImage>
 | 
	
		
			
				|  |  | +                            <span style="font-size:.255rem;padding: .06rem 0 0 .07rem;" class="font-flex-word">{{ item.name }}</span>
 | 
	
		
			
				|  |  | +                          </div>
 | 
	
		
			
				|  |  | +                          <div v-if="index != recordList.length - 1" class="bian"></div>
 | 
	
		
			
				|  |  | +                        </van-col>
 | 
	
		
			
				|  |  | +                        <van-col span="9" style="font-size:.24rem;color:#ababab;padding:.06rem 0 0 0;">{{ item.time }}</van-col>
 | 
	
		
			
				|  |  | +                      </van-row>
 | 
	
		
			
				|  |  | +                      <van-row>
 | 
	
		
			
				|  |  | +                        <van-col offset="2" span="" style="font-size:.255rem;padding-top:.06rem;white-space:normal;">
 | 
	
		
			
				|  |  | +                          <div style="color:#3bab62;"># {{ item.remark }} #</div>
 | 
	
		
			
				|  |  | +                          <div style="color:#ababab;width: 100%;word-break:break-all;" v-if="item.content">{{ item.content }}</div>
 | 
	
		
			
				|  |  | +                        </van-col>
 | 
	
		
			
				|  |  | +                      </van-row>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                    <span style="font-size: .26rem;color: #5699ff;" @click="unfold" v-if="recordList.length <= 3 && recordAllList.length > 3">全部记录</span>
 | 
	
		
			
				|  |  | +                    <span style="font-size: .26rem;color: #5699ff;" @click="packUp" v-if="recordList.length > 3">收起</span>
 | 
	
		
			
				|  |  | +                  </div>
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +              <div style="padding-bottom: 1.5rem;"></div>
 | 
	
		
			
				|  |  | +            </scroller>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +        </VanSkeleton>
 | 
	
		
			
				|  |  | +        <template v-if="!has_finish">
 | 
	
		
			
				|  |  | +          <!-- 执行计划 -->
 | 
	
		
			
				|  |  | +          <div class="sidebar flex-box-ce" v-if="actionButShow && !graded" @click="openTrackPath('action')">
 | 
	
		
			
				|  |  | +            <van-icon name="plus" size=".32rem" />
 | 
	
		
			
				|  |  | +            <icon name="delivery_of_program" class="isdeliveryRecord_icon" />
 | 
	
		
			
				|  |  | +            执行计划
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +          <!-- 管理记录 -->
 | 
	
		
			
				|  |  | +          <div class="managementRecord flex-box-ce" v-if="recordsManagement && !graded" @click="openTrackPath('admnin')">
 | 
	
		
			
				|  |  | +            <van-icon name="plus" size=".32rem" />
 | 
	
		
			
				|  |  | +            <icon name="management_record" class="isdeliveryRecord_icon" />
 | 
	
		
			
				|  |  | +            管理记录
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          <div class="footerBut" :class="{ isIos: isIos }">
 | 
	
		
			
				|  |  | +            <div v-if="!graded">
 | 
	
		
			
				|  |  | +              <div class="footweight">指标总权重:{{ weight }}</div>
 | 
	
		
			
				|  |  | +              <div class="footfoot flex-box flex-dv-center" v-if="transferBut || feedbackBut || gradeButShow || examineButShow || resultButShow || targetConfirmed">
 | 
	
		
			
				|  |  | +                <div class="footcol" v-if="revocationShow" @click="openCx">
 | 
	
		
			
				|  |  | +                  <icon name="withdraw" style="width: 0.5rem;height: 0.5rem;"></icon>
 | 
	
		
			
				|  |  | +                  <div style="font-size: .24rem;">撤销</div>
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +                <!-- 结果值编辑 -->
 | 
	
		
			
				|  |  | +                <div class="footcol" v-if="resultButShow2" @click="enteringResult">
 | 
	
		
			
				|  |  | +                  <icon name="withdraw" style="width: 0.5rem;height: 0.5rem;"></icon>
 | 
	
		
			
				|  |  | +                  <div style="font-size: .24rem;">{{resultStr}}</div>
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +                <div class="footcol" v-if="transferBut" @click="openSelectUser">
 | 
	
		
			
				|  |  | +                  <icon name="careOf" style="width: 0.5rem;height: 0.5rem;"></icon>
 | 
	
		
			
				|  |  | +                  <div style="font-size: .24rem;">转交</div>
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +                <div class="footcol" v-if="feedbackBut" @click="communicate">
 | 
	
		
			
				|  |  | +                  <icon name="messagejx" style="width: 0.5rem;height: 0.5rem;"></icon>
 | 
	
		
			
				|  |  | +                  <div style="font-size: .24rem;">沟通</div>
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                <div class="footBut" v-if="gradeButShow || examineButShow || resultButShow || targetConfirmed">
 | 
	
		
			
				|  |  | +                  <!-- 评分 -->
 | 
	
		
			
				|  |  | +                  <button v-if="gradeButShow" class="gradefootcolButok" @click="gradeClick">评分</button>
 | 
	
		
			
				|  |  | +                  <!-- 审批 -->
 | 
	
		
			
				|  |  | +                  <button v-if="examineButShow && isAction" style="" class="footcolButno" @click="gradeTurn">驳回</button>
 | 
	
		
			
				|  |  | +                  <button v-if="examineButShow" :class="isAction ? 'footcolButok' : 'gradefootcolButok'" @click="gradeOk">同意</button>
 | 
	
		
			
				|  |  | +                  <!-- 目标确认 -->
 | 
	
		
			
				|  |  | +                  <template v-if="targetConfirmed">
 | 
	
		
			
				|  |  | +                    <button style="" class="footcolButno" @click="gradeTurn">驳回</button>
 | 
	
		
			
				|  |  | +                    <button class="gradefootcolButok" @click="gradeOk">同意</button>
 | 
	
		
			
				|  |  | +                  </template>
 | 
	
		
			
				|  |  | +                  <!-- 结果值录入 -->
 | 
	
		
			
				|  |  | +                  <button v-if="resultButShow" class="gradefootcolButok" @click="enteringResult">{{resultStr}}</button>
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +            <div v-else>
 | 
	
		
			
				|  |  | +              <template v-if="isShowPoint">
 | 
	
		
			
				|  |  | +                <div class="footweight">我评的总分:{{ gradeval }}</div>
 | 
	
		
			
				|  |  | +                <van-row class="footfoot">
 | 
	
		
			
				|  |  | +                  <van-col span="14" class="footcol" @click="scorerveok(0)">
 | 
	
		
			
				|  |  | +                    <icon name="save" style="width: 0.5rem;height: 0.5rem;"></icon>
 | 
	
		
			
				|  |  | +                    <div style="font-size: .24rem;color:#8a8a8a;">暂存</div>
 | 
	
		
			
				|  |  | +                  </van-col>
 | 
	
		
			
				|  |  | +                  <van-col span="10" class="footBut">
 | 
	
		
			
				|  |  | +                    <button style="" class="footcolButno" @click="scorerveno">取消</button>
 | 
	
		
			
				|  |  | +                    <button class="footcolButok" @click="scorerveok(1)">提交</button>
 | 
	
		
			
				|  |  | +                  </van-col>
 | 
	
		
			
				|  |  | +                </van-row>
 | 
	
		
			
				|  |  | +              </template>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +        </template>
 | 
	
		
			
				|  |  | +    </template>
 | 
	
		
			
				|  |  | +    <resultValueEntryMb v-else ref="result-mb" :peIds="pe_ids" :isUpdate="isUpdate"></resultValueEntryMb>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <van-dialog v-model="isShowE" :show-cancel-button="false">
 | 
	
		
			
				|  |  | +      <div style="padding: 10px;font-size: 0.28rem;">
 | 
	
		
			
				|  |  | +         <div class="flex-box-ce" style="margin-bottom: 10px;">按以下公式和数据自动计算评分
 | 
	
		
			
				|  |  | +         </div>
 | 
	
		
			
				|  |  | +        <div v-html="eData.expressionStr" style="background-color: #f1f1f1;padding: 10px;text-align: left;border-radius: 5px;cursor: pointer;"></div>
 | 
	
		
			
				|  |  | +        <div class="flex-box-ce" style="margin-top: 10px;">
 | 
	
		
			
				|  |  | +          <div class="orange" style="margin-right: 20px;">结果值:{{eData.result}}</div>
 | 
	
		
			
				|  |  | +          <div class="orange">目标值:{{eData.target}}</div>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +       </div>
 | 
	
		
			
				|  |  | +    </van-dialog>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <van-popup
 | 
	
		
			
				|  |  | +      :duration="0.2"
 | 
	
		
			
				|  |  | +      :get-container="getContainer"
 | 
	
		
			
				|  |  | +      :overlay="false"
 | 
	
		
			
				|  |  | +      v-model="communication"
 | 
	
		
			
				|  |  | +      position="bottom"
 | 
	
		
			
				|  |  | +      :style="'height:' + com_height"
 | 
	
		
			
				|  |  | +      class="employee_selector_popup"
 | 
	
		
			
				|  |  | +    >
 | 
	
		
			
				|  |  | +      <van-nav-bar :title="detailsTIt" left-text="" left-arrow @click-left="communication = false" />
 | 
	
		
			
				|  |  | +      <div style="height:.2rem;background-color:#f5f7fa;"></div>
 | 
	
		
			
				|  |  | +      <div v-if="popupknowFrom == 1">
 | 
	
		
			
				|  |  | +        <van-cell title="驳回到" is-link :value="rejectval" @click="openBh()" />
 | 
	
		
			
				|  |  | +        <van-cell v-if="rejectProp" title="驳回到指定成员" is-link :value="rejectval1" @click="rejectdlg1 = true" />
 | 
	
		
			
				|  |  | +        <div style="height:.2rem;background-color:#f5f7fa;"></div>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +      <div>
 | 
	
		
			
				|  |  | +        <van-field
 | 
	
		
			
				|  |  | +          v-model="commFeedback"
 | 
	
		
			
				|  |  | +          rows="6"
 | 
	
		
			
				|  |  | +          autosize
 | 
	
		
			
				|  |  | +          type="textarea"
 | 
	
		
			
				|  |  | +          :placeholder="
 | 
	
		
			
				|  |  | +            popupknowFrom == 0
 | 
	
		
			
				|  |  | +              ? '请输入沟通反馈(必填)'
 | 
	
		
			
				|  |  | +              : popupknowFrom == 1
 | 
	
		
			
				|  |  | +              ? '请输入驳回内容(必填)'
 | 
	
		
			
				|  |  | +              : popupknowFrom == 2
 | 
	
		
			
				|  |  | +              ? '请输入审批说明(选填)'
 | 
	
		
			
				|  |  | +              : popupknowFrom == 3
 | 
	
		
			
				|  |  | +              ? '请输入目标确认说明(选填)'
 | 
	
		
			
				|  |  | +              : popupknowFrom == 4
 | 
	
		
			
				|  |  | +              ? '请输入撤销理由(选填)'
 | 
	
		
			
				|  |  | +              : ''
 | 
	
		
			
				|  |  | +          "
 | 
	
		
			
				|  |  | +        />
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +      <div class="commButt">
 | 
	
		
			
				|  |  | +        <div class="aite" v-if="popupknowFrom == 0">
 | 
	
		
			
				|  |  | +          <span @click="selectUser = true" style="color: #4498ef;">@</span>
 | 
	
		
			
				|  |  | +          <span style="font-size: .25rem;text-align:left;">
 | 
	
		
			
				|  |  | +            <span class="font-flex-word" style="max-width: 5.8rem;display:inline-block;">
 | 
	
		
			
				|  |  | +              <span v-for="(item, index) in emtags" :key="index">
 | 
	
		
			
				|  |  | +                {{ item.name }}
 | 
	
		
			
				|  |  | +                <span v-if="emtags.length - index > 1">,</span>
 | 
	
		
			
				|  |  | +              </span>
 | 
	
		
			
				|  |  | +            </span>
 | 
	
		
			
				|  |  | +            <span v-if="emtags.length > 3">等{{ emtags.length }}人</span>
 | 
	
		
			
				|  |  | +          </span>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +        <button class="commButtno" @click="commcliButon">取消</button>
 | 
	
		
			
				|  |  | +        <button class="commButtok" @click="commcliButok">确定</button>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    </van-popup>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <van-dialog v-model="rejectdlg" title="" width="300" :show-confirm-button="false" closeOnClickOverlay>
 | 
	
		
			
				|  |  | +      <van-radio-group v-model="selectpradio">
 | 
	
		
			
				|  |  | +        <div v-for="(item, index) in rejectList" :key="index">
 | 
	
		
			
				|  |  | +          <van-radio :name="index" @click="clickreject(item)" style="margin:.3rem 0 .3rem .4rem;font-size:.26rem" icon-size="16px">
 | 
	
		
			
				|  |  | +            <span>{{ index + 1 }} .</span>
 | 
	
		
			
				|  |  | +            <span>{{ item.name }}</span>
 | 
	
		
			
				|  |  | +          </van-radio>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +      </van-radio-group>
 | 
	
		
			
				|  |  | +    </van-dialog>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <van-dialog v-model="rejectdlg1" title="" width="300" :show-confirm-button="false" closeOnClickOverlay>
 | 
	
		
			
				|  |  | +      <van-radio-group v-model="selectpradio1">
 | 
	
		
			
				|  |  | +        <div v-for="(item, index) in rejectList1" :key="index">
 | 
	
		
			
				|  |  | +          <van-radio :name="index" @click="clickreject1(item)" style="margin:.3rem 0 .3rem .4rem;font-size:.26rem" icon-size="16px">
 | 
	
		
			
				|  |  | +            <span style="margin-left: .25rem">{{ item.employee_name }}</span>
 | 
	
		
			
				|  |  | +          </van-radio>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +      </van-radio-group>
 | 
	
		
			
				|  |  | +    </van-dialog>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <van-dialog v-model="selectZj" title="" width="300" :show-confirm-button="false" closeOnClickOverlay>
 | 
	
		
			
				|  |  | +      <div style="text-align: center;font-size: 0.24rem;padding: 0.2rem 0;">请选择被转交人员</div>
 | 
	
		
			
				|  |  | +      <van-radio-group v-model="zjId">
 | 
	
		
			
				|  |  | +        <div v-for="(item, index) in careOfPeopleId" :key="index">
 | 
	
		
			
				|  |  | +          <van-radio :name="item.employee_id" :label="item.employee_id" style="margin:.3rem 0 .3rem .4rem;font-size:.26rem" icon-size="16px">
 | 
	
		
			
				|  |  | +            <span style="margin-left: .25rem">{{ item.employee_name }}</span>
 | 
	
		
			
				|  |  | +          </van-radio>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +      </van-radio-group>
 | 
	
		
			
				|  |  | +    </van-dialog>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <van-dialog v-model="flexDialog" title="" width="350" :show-confirm-button="false" closeOnClickOverlay>
 | 
	
		
			
				|  |  | +      <div class="flexDiaWb">
 | 
	
		
			
				|  |  | +        <div v-for="(item, index) in perfstepFlow" :key="index" class="flexDiaLL flex-box" :style="perfstepFlow.length - 1 == index ? 'padding: 0;' : ''">
 | 
	
		
			
				|  |  | +          <span class="fdz">
 | 
	
		
			
				|  |  | +            <div class="fdYuan fdYuan1" v-if="item.status == 2"><van-icon name="success" /></div>
 | 
	
		
			
				|  |  | +            <div class="fdYuan fdYuan2" v-else-if="item.status == 1"><van-icon name="play" size=".38rem" /></div>
 | 
	
		
			
				|  |  | +            <div class="fdYuan fdYuan3" v-else></div>
 | 
	
		
			
				|  |  | +            <div class="fdShu" :class="{ fdShu1: item.status == 2 }" v-if="!(perfstepFlow.length - 1 == index)"></div>
 | 
	
		
			
				|  |  | +          </span>
 | 
	
		
			
				|  |  | +          <span class="fdy" :class="{ fdyBlue: item.status == 1 }" style="position: relative;top:2px">
 | 
	
		
			
				|  |  | +            <span style="height: 100%;padding-right:.15rem;">{{ index + 1 }}.</span>
 | 
	
		
			
				|  |  | +            <div>
 | 
	
		
			
				|  |  | +              {{ item.remark }}
 | 
	
		
			
				|  |  | +              <span v-if="item.target.length > 0">
 | 
	
		
			
				|  |  | +                <span v-for="(item2, index2) in item.target" :key="index2">
 | 
	
		
			
				|  |  | +                  {{ item2.employee_name }}
 | 
	
		
			
				|  |  | +                  <span v-if="item.target.length - index2 > 1">,</span>
 | 
	
		
			
				|  |  | +                </span>
 | 
	
		
			
				|  |  | +              </span>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +          </span>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    </van-dialog>
 | 
	
		
			
				|  |  | +    <!-- 沟通反馈 -->
 | 
	
		
			
				|  |  | +    <EmployeeSelector
 | 
	
		
			
				|  |  | +      title="选择@人员"
 | 
	
		
			
				|  |  | +      :visible.sync="selectUser"
 | 
	
		
			
				|  |  | +      @confirm="confirmCreator"
 | 
	
		
			
				|  |  | +      :can_select_dept="false"
 | 
	
		
			
				|  |  | +      :dept_multi="false"
 | 
	
		
			
				|  |  | +      :append_body="true"
 | 
	
		
			
				|  |  | +      :isShowDepts="false"
 | 
	
		
			
				|  |  | +    />
 | 
	
		
			
				|  |  | +    <!-- 转交 -->
 | 
	
		
			
				|  |  | +    <EmployeeSelector
 | 
	
		
			
				|  |  | +      :title="'选择转交人员'"
 | 
	
		
			
				|  |  | +      :multi="false"
 | 
	
		
			
				|  |  | +      ref="selector"
 | 
	
		
			
				|  |  | +      :can_select_dept="false"
 | 
	
		
			
				|  |  | +      :dept_multi="false"
 | 
	
		
			
				|  |  | +      @confirm="confirm"
 | 
	
		
			
				|  |  | +      :visible.sync="show_dept_selector"
 | 
	
		
			
				|  |  | +      :append_body="true"
 | 
	
		
			
				|  |  | +      :isShowDepts="false"
 | 
	
		
			
				|  |  | +    ></EmployeeSelector>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <van-popup v-model="isPoint" :close-on-click-overlay="false" style="border-radius: 0.15rem; background: #fff0;">
 | 
	
		
			
				|  |  | +      <div class="buyPopupBody" style="width: 90vw;">
 | 
	
		
			
				|  |  | +        <div class="buyPopupContent" style="position: relative;background: white;padding: 0 5vw 5vw 5vw;border-radius: 0.15rem;">
 | 
	
		
			
				|  |  | +          <div
 | 
	
		
			
				|  |  | +            class="buyPopupTitle"
 | 
	
		
			
				|  |  | +            style="background: #1a89fa;
 | 
	
		
			
				|  |  | +            text-align: center;
 | 
	
		
			
				|  |  | +            border-radius: 0.1rem;
 | 
	
		
			
				|  |  | +            font-weight: normal;
 | 
	
		
			
				|  |  | +            font-size: 0.36rem;
 | 
	
		
			
				|  |  | +            height: 0.8rem;
 | 
	
		
			
				|  |  | +            line-height: 0.8rem;
 | 
	
		
			
				|  |  | +            color: #fff;"
 | 
	
		
			
				|  |  | +          >
 | 
	
		
			
				|  |  | +            请确认您的评分
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +          <div style="max-height: 500px;overflow-y: auto;font-size: 0.32rem;margin: 0.28rem 0;border: 1px solid #e4e4e4;border-bottom: none;">
 | 
	
		
			
				|  |  | +            <div class="flex-box-ce" style="background:#ECF5FF;border-bottom: 1px solid #e4e4e4;">
 | 
	
		
			
				|  |  | +              <div class="flex-4" style="border-right: 1px solid #e4e4e4;padding: 10px 5px;">
 | 
	
		
			
				|  |  | +                指标(<span style="color:#ff9600;">每项指标评分</span>)
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +              <div class="flex-1" style="padding: 10px 5px;">评分</div>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +            <div v-for="(item, index) in pointList" :key="index" class="flex-box-ce" style="border-bottom: 1px solid #e4e4e4;">
 | 
	
		
			
				|  |  | +              <div class="flex-4" style="border-right: 1px solid #e4e4e4;padding: 10px 5px;">{{ item.name }}</div>
 | 
	
		
			
				|  |  | +              <div class="flex-1" style="padding: 10px 5px;">{{ item.score }}</div>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +          <van-row gutter="20">
 | 
	
		
			
				|  |  | +            <van-col span="12"><van-button block @click="isPoint = false">返回修改</van-button></van-col>
 | 
	
		
			
				|  |  | +            <van-col span="12"><van-button block type="info" @click="score">确认提交</van-button></van-col>
 | 
	
		
			
				|  |  | +          </van-row>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    </van-popup>
 | 
	
		
			
				|  |  | +    <!-- 展示 执行 管理 记录 -->
 | 
	
		
			
				|  |  | +    <van-action-sheet v-model="isShowText" :closeable="false" duration=".35">
 | 
	
		
			
				|  |  | +      <div class="vassheet">
 | 
	
		
			
				|  |  | +        <div class="vasHead">
 | 
	
		
			
				|  |  | +          <van-icon name="cross" size=".3rem" @click.stop="isShowText = false" />
 | 
	
		
			
				|  |  | +          <span>{{ logText }}</span>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +        <div style="padding:0.15rem 0.15rem 0 0.15rem;font-size:.32rem;background-color: rgb(245, 245, 245);">{{ apDetails.name }}</div>
 | 
	
		
			
				|  |  | +        <div v-for="(item, index) in logList" :key="index" class="apdList flex-box" :class="{ apdListMarTop: index == 0 }">
 | 
	
		
			
				|  |  | +          <div style="margin: .24rem 0 0 .2rem;position: relative;">
 | 
	
		
			
				|  |  | +            <div class="apdDian"></div>
 | 
	
		
			
				|  |  | +            <div class="apdHeadBoeder" :class="{ apdborderNO: index == logList.length - 1 || logList.length <= 1 }"></div>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +          <div class="apdData" :class="{ apdborderNO: logList.length == index + 1 }">
 | 
	
		
			
				|  |  | +            <div>
 | 
	
		
			
				|  |  | +              <b class="line-feed" style="font-size:.3rem;color:block;">{{ item.title }}</b>
 | 
	
		
			
				|  |  | +              <br />
 | 
	
		
			
				|  |  | +              <span style="font-size:.24rem;color:#b7b7b7;">
 | 
	
		
			
				|  |  | +                {{ item.date }}
 | 
	
		
			
				|  |  | +                <span v-if="logText == '管理记录' && $getEmployeeMapItem(item.employee_id)">  记录人:{{ $getEmployeeMapItem(item.employee_id).name }}</span>
 | 
	
		
			
				|  |  | +              </span>
 | 
	
		
			
				|  |  | +              <br />
 | 
	
		
			
				|  |  | +              <span class="line-feed" style="font-size:.25rem;color:#505050;" v-html="item.remark"></span>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +            <template v-if="item.images">
 | 
	
		
			
				|  |  | +              <div class="flex-box-ce" style="margin: 10px 0;" v-if="item.images.length > 0">
 | 
	
		
			
				|  |  | +                <van-image @click="openImg(item.images, index2)" v-for="(e, index2) in item.images" :key="index2" style="border-radius: 3px;margin-right: 10px;"  width="100"  height="100" :src="e.url" />
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +            </template>
 | 
	
		
			
				|  |  | +            <template v-if="item.append_name">
 | 
	
		
			
				|  |  | +              <div class="color_blue" style="margin: 10px 0;font-size: 0.28rem;" @click="downWgt(item.append,item.append_name)">{{item.append_name}}</div>
 | 
	
		
			
				|  |  | +            </template>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    </van-action-sheet>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  </div>
 | 
	
		
			
				|  |  | +</template>
 | 
	
		
			
				|  |  | +<script>
 | 
	
		
			
				|  |  | +import Vue from 'vue';
 | 
	
		
			
				|  |  | +import moment from 'moment';
 | 
	
		
			
				|  |  | +import { Checkbox, CheckboxGroup, ActionSheet, ImagePreview } from 'vant';
 | 
	
		
			
				|  |  | +Vue.use(Checkbox)
 | 
	
		
			
				|  |  | +  .use(CheckboxGroup)
 | 
	
		
			
				|  |  | +  .use(ActionSheet)
 | 
	
		
			
				|  |  | +  .use(ImagePreview);
 | 
	
		
			
				|  |  | +import VanSkeleton from '@/performance/components/public/VanSkeleton';
 | 
	
		
			
				|  |  | +import resultValueEntryMb from '@/performance/components/actionplan/resultValueEntryMb';
 | 
	
		
			
				|  |  | +import EmployeeSelector from '@/components/EmployeeSelector';
 | 
	
		
			
				|  |  | +import {getExpressionStr} from '@/performance/utils/auth'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export default {
 | 
	
		
			
				|  |  | +  data() {
 | 
	
		
			
				|  |  | +    return {
 | 
	
		
			
				|  |  | +      isShowE:false,
 | 
	
		
			
				|  |  | +      eData:{
 | 
	
		
			
				|  |  | +        expressionStr:'',
 | 
	
		
			
				|  |  | +        result:'',
 | 
	
		
			
				|  |  | +        target:''
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      isDetails:true,
 | 
	
		
			
				|  |  | +      pe_ids:'',
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      day: moment().format('YYYY-MM-DD'),
 | 
	
		
			
				|  |  | +      isNeed: !this.$getCache('isAndroid'),
 | 
	
		
			
				|  |  | +      detailsTIt: '', // 顶部title
 | 
	
		
			
				|  |  | +      skeletonLoad: true, // 骨架屏
 | 
	
		
			
				|  |  | +      employeeID: this.$route.query.id, // 绩效记录ID
 | 
	
		
			
				|  |  | +      assID: this.$route.query.assId, // 考核包ID
 | 
	
		
			
				|  |  | +      staffID: this.$route.query.staffId, // 员工ID
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      perfstepFlow: [], // 步骤
 | 
	
		
			
				|  |  | +      smdsinsFlow: 0, // 当前绩效流程所在位置
 | 
	
		
			
				|  |  | +      flowNow: {}, // 当前节点
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      thecurrentFlow: '', // 当前节点
 | 
	
		
			
				|  |  | +      ruleScore: 1, // 1-指标均要评分 2-评分总结
 | 
	
		
			
				|  |  | +      mandatoryScore: false, // 指标说明是否必填
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      weight: '',
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      userInfo: this.$userInfo(), // 当前角色
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      apList: [], // 执行计划数据
 | 
	
		
			
				|  |  | +      planIndex: [], // 执行计划的下标,当点击表格查看时用到
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // 按钮显示隐藏
 | 
	
		
			
				|  |  | +      targetConfirmed: false, // 目标确认
 | 
	
		
			
				|  |  | +      gradeButShow: false, // 评分
 | 
	
		
			
				|  |  | +      examineButShow: false, // 审批
 | 
	
		
			
				|  |  | +      isAction: false, // 审批驳回
 | 
	
		
			
				|  |  | +      resultButShow: false, // 结果值录入
 | 
	
		
			
				|  |  | +      resultButShow2:false,// 结果值编辑
 | 
	
		
			
				|  |  | +      actionButShow: false, // 执行计划
 | 
	
		
			
				|  |  | +      recordsManagement: false, // 管理记录
 | 
	
		
			
				|  |  | +      feedbackBut: false, // 沟通反馈按钮
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      transferBut: false, // 转交按钮
 | 
	
		
			
				|  |  | +      careOfPeopleId: [], // 转交的 -- 转出ID
 | 
	
		
			
				|  |  | +      selectZj: false,
 | 
	
		
			
				|  |  | +      zjId: 0, // 转交用户ID
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      revocationShow: false, //是否可以撤销
 | 
	
		
			
				|  |  | +      revocationNodeId: 1, //撤销节点ID
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      recordList: [], // 记录列表
 | 
	
		
			
				|  |  | +      recordAllList: [], // 记录列表
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      selectUser: false, // 沟通反馈@
 | 
	
		
			
				|  |  | +      emtags: [], // 沟通反馈@选中人员
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      selectpradio: '',
 | 
	
		
			
				|  |  | +      selectpradio1: '',
 | 
	
		
			
				|  |  | +      rejectList: [],
 | 
	
		
			
				|  |  | +      rejectList1: [],
 | 
	
		
			
				|  |  | +      rejectdlg: false, // 驳回选项弹窗
 | 
	
		
			
				|  |  | +      rejectval: '', // 驳回选中内容
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      rejectData: {}, // 驳回数据
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      rejectProp: false, // 驳回--选人
 | 
	
		
			
				|  |  | +      rejectdlg1: false, // 驳回选人选项弹窗
 | 
	
		
			
				|  |  | +      rejectval1: '', // 驳回选人选中内容
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      popupknowFrom: 0, // 0:沟通反馈,1:驳回,2审批,3目标确认,4.撤销
 | 
	
		
			
				|  |  | +      gradeval: 0, // 评分总分
 | 
	
		
			
				|  |  | +      graded: false, // 评分模块开关
 | 
	
		
			
				|  |  | +      commFeedback: '', // 沟通弹窗反馈
 | 
	
		
			
				|  |  | +      communication: false, // 沟通弹窗
 | 
	
		
			
				|  |  | +      show_dept_selector: false, // 转交选人
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      isIos: this.$getCache('iPhone'),
 | 
	
		
			
				|  |  | +      Information: {
 | 
	
		
			
				|  |  | +        // 顶部员工信息
 | 
	
		
			
				|  |  | +        name: '',
 | 
	
		
			
				|  |  | +        employee_detail:{dept_list:[]},
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // 执行中
 | 
	
		
			
				|  |  | +      inExecution: [],
 | 
	
		
			
				|  |  | +      scoreInfo: [], // 各个节点的人评的总分
 | 
	
		
			
				|  |  | +      titList: [],
 | 
	
		
			
				|  |  | +      bootBool: false, // 防止多次请求
 | 
	
		
			
				|  |  | +      isCs: false, // 是否抄送人进入(抄送人能看到全部评分内容)
 | 
	
		
			
				|  |  | +      com_height: '100%',
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      isDisabled: false, //是否显示上下一条
 | 
	
		
			
				|  |  | +      headuDown: [],
 | 
	
		
			
				|  |  | +      pendingList: [],
 | 
	
		
			
				|  |  | +      page: 1,
 | 
	
		
			
				|  |  | +      isJz: true,
 | 
	
		
			
				|  |  | +      activeName: '', //待办带进来的节点类型
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      checked: false, //只看自己评分
 | 
	
		
			
				|  |  | +      recordMemberIds: [],
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      flexDialog: false,
 | 
	
		
			
				|  |  | +      flexIndex: 0,
 | 
	
		
			
				|  |  | +      has_finish: 0, //是否归档 0否 1是
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // 评分确认列表
 | 
	
		
			
				|  |  | +      pointList: [],
 | 
	
		
			
				|  |  | +      pointData: {},
 | 
	
		
			
				|  |  | +      isPoint: false,
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      isShowPoint: true,
 | 
	
		
			
				|  |  | +      publicity: 0,
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      isShowText: false,
 | 
	
		
			
				|  |  | +      isUpdate:false,
 | 
	
		
			
				|  |  | +      logText: '执行计划',
 | 
	
		
			
				|  |  | +      logList: [],
 | 
	
		
			
				|  |  | +      apDetails: {},
 | 
	
		
			
				|  |  | +      resultStr:'录入结果值',
 | 
	
		
			
				|  |  | +      okrs: [], // 已关联的OKR
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  computed: {
 | 
	
		
			
				|  |  | +    isShowOneself() {
 | 
	
		
			
				|  |  | +      return function(value) {
 | 
	
		
			
				|  |  | +        if(this.titList.length > 0){
 | 
	
		
			
				|  |  | +          return true;
 | 
	
		
			
				|  |  | +        }else if (!this.checked) {
 | 
	
		
			
				|  |  | +          if (value.employee_id == this.userInfo.id) {
 | 
	
		
			
				|  |  | +            return true;
 | 
	
		
			
				|  |  | +          } else {
 | 
	
		
			
				|  |  | +            return false;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          return true;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  components: { EmployeeSelector, VanSkeleton,resultValueEntryMb },
 | 
	
		
			
				|  |  | +  watch: {
 | 
	
		
			
				|  |  | +    zjId(val) {
 | 
	
		
			
				|  |  | +      if (val) {
 | 
	
		
			
				|  |  | +        this.selectZj = false;
 | 
	
		
			
				|  |  | +        this.show_dept_selector = true;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  methods: {
 | 
	
		
			
				|  |  | +    handleClick() {
 | 
	
		
			
				|  |  | +      this.$refs["result-mb"].isFilterShow = true;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    goMyTarget() {
 | 
	
		
			
				|  |  | +      this.$router.push({name: 'myTarget', query: {ids: JSON.stringify(this.okrs)}});
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    copyPoin(item){
 | 
	
		
			
				|  |  | +      if(item.auto_score<0||item.auto_score===0){
 | 
	
		
			
				|  |  | +        item.resultval='0';
 | 
	
		
			
				|  |  | +      }else{
 | 
	
		
			
				|  |  | +        item.resultval=item.auto_score
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    showE(item){
 | 
	
		
			
				|  |  | +      this.eData={
 | 
	
		
			
				|  |  | +        expressionStr:item.expressionStr,
 | 
	
		
			
				|  |  | +        result:item.result,
 | 
	
		
			
				|  |  | +        target:item.target
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +      this.isShowE=true;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    downWgt (url,name) {
 | 
	
		
			
				|  |  | +      let self = this
 | 
	
		
			
				|  |  | +      if(!window.plus){
 | 
	
		
			
				|  |  | +          window.open(url, '_blank');
 | 
	
		
			
				|  |  | +          return false
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      let dtask=plus.downloader.createDownload(encodeURI(url),{filename:'_doc/update/'},
 | 
	
		
			
				|  |  | +        function (d, status) {
 | 
	
		
			
				|  |  | +          if (status == 200) {
 | 
	
		
			
				|  |  | +            plus.runtime.openFile(d.filename,{},(err)=>{
 | 
	
		
			
				|  |  | +              // console.log(JSON.stringify(err))
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +          } else {
 | 
	
		
			
				|  |  | +            self.$toast.clear()
 | 
	
		
			
				|  |  | +            Notify({ type: 'danger', message: '下载失败,请稍后重试', duration: 1000 })
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      )
 | 
	
		
			
				|  |  | +      dtask.start();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    returnStr(time){
 | 
	
		
			
				|  |  | +      let date=`${time}000`
 | 
	
		
			
				|  |  | +      let res = moment(Number(date)).format('YYYY/MM/DD HH:mm');
 | 
	
		
			
				|  |  | +      return this.fnTime(res);
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    fnTime( time ){
 | 
	
		
			
				|  |  | +        let staer=time.slice(0,11);
 | 
	
		
			
				|  |  | +        let ptime = new Date(time).getTime()
 | 
	
		
			
				|  |  | +        const twentyFourHours = 24 * 60 * 60 * 1000;
 | 
	
		
			
				|  |  | +        const fortyEightHours = 24 * 60 * 60 * 1000 * 2;
 | 
	
		
			
				|  |  | +        const today = moment().format('YYYY/MM/DD');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        const todayTime = new Date(today).getTime();
 | 
	
		
			
				|  |  | +        const yesterdayTime = new Date(todayTime - twentyFourHours).getTime();
 | 
	
		
			
				|  |  | +        const lastYesterdayTime = new Date(todayTime - fortyEightHours).getTime();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if( ptime >= todayTime ){
 | 
	
		
			
				|  |  | +            return '今天 '+time.split(' ')[1]+' 更新了执行计划';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        else if( ptime < todayTime && yesterdayTime <= ptime ){
 | 
	
		
			
				|  |  | +            return '昨天 '+time.split(' ')[1]+' 更新了执行计划';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        else if( ptime < yesterdayTime && lastYesterdayTime <= ptime ){
 | 
	
		
			
				|  |  | +            return '前天 '+time.split(' ')[1]+' 更新了执行计划';
 | 
	
		
			
				|  |  | +        }else if(this.dateSum(this.day,staer)>30){
 | 
	
		
			
				|  |  | +            return '近30天无计划更新';
 | 
	
		
			
				|  |  | +        } else{
 | 
	
		
			
				|  |  | +            return time+' 更新了执行计划';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    dateSum(sDate1, sDate2){   //sDate1和sDate2是2008-12-13格式
 | 
	
		
			
				|  |  | +        var aDate, oDate1, oDate2, iDays
 | 
	
		
			
				|  |  | +        aDate = sDate1.split("-")
 | 
	
		
			
				|  |  | +        oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])   //转换为12-13-2008格式
 | 
	
		
			
				|  |  | +        aDate = sDate2.split("-")
 | 
	
		
			
				|  |  | +        oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])
 | 
	
		
			
				|  |  | +        iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 /24)   //把相差的毫秒数转换为天数
 | 
	
		
			
				|  |  | +        return iDays
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    openImg(imgs, index) {
 | 
	
		
			
				|  |  | +      let imgArr = imgs.map(item => {
 | 
	
		
			
				|  |  | +        return item.url;
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      ImagePreview({
 | 
	
		
			
				|  |  | +        images: imgArr,
 | 
	
		
			
				|  |  | +        startPosition: index
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 获取待办数据
 | 
	
		
			
				|  |  | +    getAgency() {
 | 
	
		
			
				|  |  | +      if (!this.isJz) {
 | 
	
		
			
				|  |  | +        return false;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      this.page = this.page + 1;
 | 
	
		
			
				|  |  | +      this.$axiosUser('get', '/api/pro/per/package/msg/agency', { node_type: this.activeName, status: 0, page: this.page, page_size: 10 },'v2').then(res => {
 | 
	
		
			
				|  |  | +        let list = res.data.data.list;
 | 
	
		
			
				|  |  | +        let pendingList = [];
 | 
	
		
			
				|  |  | +        list.forEach(item => {
 | 
	
		
			
				|  |  | +          if(item.node_type==4){
 | 
	
		
			
				|  |  | +            let userInfo = this.$getEmployeeMapItem(item.first_employee_id);
 | 
	
		
			
				|  |  | +            item.userInfo = userInfo;
 | 
	
		
			
				|  |  | +            let name=item.content.split(',')[0]
 | 
	
		
			
				|  |  | +            pendingList.push({ name: userInfo.name, employeeID: '结果', package_name: name,package_id:item.package_id,pe_ids:item.pe_ids, });
 | 
	
		
			
				|  |  | +            return false
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if (item.remark.employee_id) {
 | 
	
		
			
				|  |  | +            //被考核人
 | 
	
		
			
				|  |  | +            let userInfo = this.$getEmployeeMapItem(item.remark.employee_id);
 | 
	
		
			
				|  |  | +            item.userInfo = userInfo;
 | 
	
		
			
				|  |  | +            pendingList.push({ name: userInfo.name, img_url: userInfo.img_url, employeeID: item.remark.packageEmployee_id, package_name: item.remark.package_name });
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        if (list.length < 10) {
 | 
	
		
			
				|  |  | +          this.isJz = false;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        this.pendingList.push(...pendingList);
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    openBh() {
 | 
	
		
			
				|  |  | +      if (this.rejectList.length == 0) {
 | 
	
		
			
				|  |  | +        this.$toast.fail('没有可驳回节点');
 | 
	
		
			
				|  |  | +        return false;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      this.rejectdlg = true;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    openSelectUser() {
 | 
	
		
			
				|  |  | +      if (this.careOfPeopleId.length == 1) {
 | 
	
		
			
				|  |  | +        this.show_dept_selector = true;
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        this.selectZj = true;
 | 
	
		
			
				|  |  | +        this.zjId = 0;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    getContainer() {
 | 
	
		
			
				|  |  | +      return document.body;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 返回上一页
 | 
	
		
			
				|  |  | +    routerBak() {
 | 
	
		
			
				|  |  | +      this.$route_back();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    employeeDet() {
 | 
	
		
			
				|  |  | +      let params = {};
 | 
	
		
			
				|  |  | +      if (this.$route.query.id) {
 | 
	
		
			
				|  |  | +        params.id = this.employeeID;
 | 
	
		
			
				|  |  | +      } else if (this.$route.query.assId && this.$route.query.staffId) {
 | 
	
		
			
				|  |  | +        params.package_id = this.$route.query.assId;
 | 
	
		
			
				|  |  | +        params.employee_id = this.$route.query.staffId;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      this.skeletonLoad = true;
 | 
	
		
			
				|  |  | +      this.$axiosUser('get', '/api/pro/per/package/employee/info', params).then(res => {
 | 
	
		
			
				|  |  | +        if (res.data.code == 1) {
 | 
	
		
			
				|  |  | +          let data = res.data.data;
 | 
	
		
			
				|  |  | +          this.okrs = data.okrs || [];
 | 
	
		
			
				|  |  | +          this.has_finish = data.has_finish;
 | 
	
		
			
				|  |  | +          if (this.pendingList.length > 0) {
 | 
	
		
			
				|  |  | +            this.setUpD();
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          this.recordMemberIds = data.record_member_ids || [];
 | 
	
		
			
				|  |  | +          this.empDetList = data;
 | 
	
		
			
				|  |  | +          this.employeeID = data.id; // 考核记录id
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          this.Information =this.$getEmployeeMapItem(data.employee_id); // 考核人员信息
 | 
	
		
			
				|  |  | +          console.log(this.Information)
 | 
	
		
			
				|  |  | +          this.perfstepFlow = data.flow; // 流程
 | 
	
		
			
				|  |  | +          this.apList = JSON.stringify(data.dimension);
 | 
	
		
			
				|  |  | +          this.scoreInfo = data.score_info; // 各个节点的人评的总分
 | 
	
		
			
				|  |  | +          this.feedbackBut = data.config.assessment.feedback == '1'; // 沟通反馈是否启用
 | 
	
		
			
				|  |  | +          this.resultButShow = false; // 录入结果值
 | 
	
		
			
				|  |  | +          this.resultButShow2 = false; // 录入结果值
 | 
	
		
			
				|  |  | +          this.gradeButShow = false; // 评分按钮
 | 
	
		
			
				|  |  | +          this.examineButShow = false; // 审批按钮
 | 
	
		
			
				|  |  | +          this.transferBut = false; // 转交按钮
 | 
	
		
			
				|  |  | +          this.targetConfirmed = false; // 目标确认
 | 
	
		
			
				|  |  | +          this.publicity = data.publicity;
 | 
	
		
			
				|  |  | +          this.actionButShow = false; // 执行计划按钮
 | 
	
		
			
				|  |  | +          this.recordsManagement = false; // 管理记录按钮
 | 
	
		
			
				|  |  | +          this.revocationShow = false;
 | 
	
		
			
				|  |  | +          this.buttonIf2(); //判断管理记录/执行计划按钮是否显示
 | 
	
		
			
				|  |  | +          this.smdsinsFlow = 0;
 | 
	
		
			
				|  |  | +          this.flexIndex = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          let executor = {}; // 与当前登录账号相同的执行人
 | 
	
		
			
				|  |  | +          let review = {}; // 与当前登录账号相同的审批人
 | 
	
		
			
				|  |  | +          let isReview=false;//判断账号是否审批人中一位
 | 
	
		
			
				|  |  | +          let targetUserList=[];//结果值录入人 ,用来显示结果值录入人
 | 
	
		
			
				|  |  | +          data.flow.forEach((item, index) => {
 | 
	
		
			
				|  |  | +            if (item.code == 'execution') {
 | 
	
		
			
				|  |  | +              // 查找 已开始或已结束的执行节点中有无当前账号
 | 
	
		
			
				|  |  | +              if (item.status != 0) {
 | 
	
		
			
				|  |  | +                item.target.forEach(tar => {
 | 
	
		
			
				|  |  | +                  if (tar.employee_id == this.userInfo.id) {
 | 
	
		
			
				|  |  | +                    executor = tar; // 存入与当前登录账号相同的执行人
 | 
	
		
			
				|  |  | +                    executor.newCode = 'employee'; // 保存执行人节点code
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (item.code == 'review') {
 | 
	
		
			
				|  |  | +              // 查找 已开始或已结束的审批节点中有无当前账号
 | 
	
		
			
				|  |  | +              if (item.status != 0) {
 | 
	
		
			
				|  |  | +                item.target.forEach(tar => {
 | 
	
		
			
				|  |  | +                  if (tar.employee_id == this.userInfo.id) {
 | 
	
		
			
				|  |  | +                    isReview=true;
 | 
	
		
			
				|  |  | +                    review = tar; // 存入与当前登录账号相同的审批人
 | 
	
		
			
				|  |  | +                    review.newCode = 'reviewer'; // 保存审批人节点code
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (item.code=='result_value'){//获取结果值录入人集合
 | 
	
		
			
				|  |  | +               targetUserList=item.target
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            this.buttonIf(item);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (item.status == 1) {
 | 
	
		
			
				|  |  | +              if (item.code != 'cc') {
 | 
	
		
			
				|  |  | +                this.isRevocation(item, data.flow[index - 1]);
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +              data.flow.push({ id: data.flow.length + 1, remark: '结束', status: 0, target: [] });
 | 
	
		
			
				|  |  | +              this.flowNow = item;
 | 
	
		
			
				|  |  | +              this.smdsinsFlow = item.id;
 | 
	
		
			
				|  |  | +              this.flexIndex = index + 1;
 | 
	
		
			
				|  |  | +              //结果值录入按钮
 | 
	
		
			
				|  |  | +              if(item.code=='result_value'||item.code=='score_supervisor'||item.code=='special_scorer'){
 | 
	
		
			
				|  |  | +                this.isresultBtn(item)
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +          if (this.flexIndex == 0) {
 | 
	
		
			
				|  |  | +            data.flow.push({ id: data.flow.length + 1, remark: '结束', status: 2, target: [] });
 | 
	
		
			
				|  |  | +            this.flexIndex = data.flow.length;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if (this.smdsinsFlow == 0) {
 | 
	
		
			
				|  |  | +            // 如果当前节点id为0,代表此考核详情已完毕,把最后一个节点作为当前节点
 | 
	
		
			
				|  |  | +            this.smdsinsFlow =data.flow[data.flow.length - 1].remark=='结束'?  data.flow[data.flow.length - 2].id:data.flow[data.flow.length - 1].id;
 | 
	
		
			
				|  |  | +            let cs =data.flow[data.flow.length - 1].remark=='结束'? data.flow[data.flow.length - 2]:data.flow[data.flow.length - 1];
 | 
	
		
			
				|  |  | +            cs.target.some(item => {
 | 
	
		
			
				|  |  | +              if (item.employee_id == this.userInfo.id) {
 | 
	
		
			
				|  |  | +                this.isCs = true;
 | 
	
		
			
				|  |  | +                return true;
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          // 整合表格格式
 | 
	
		
			
				|  |  | +          let dimension = data.dimension;
 | 
	
		
			
				|  |  | +          let dimeTab = [];
 | 
	
		
			
				|  |  | +          let weight = 0; // 权重统计
 | 
	
		
			
				|  |  | +          // poiSco    评分权限
 | 
	
		
			
				|  |  | +          // poicom    说明权限
 | 
	
		
			
				|  |  | +          let poiSco = data.config.assessment.point_scope; // 评分可见权限
 | 
	
		
			
				|  |  | +          let poicom = data.config.assessment.point_comment; // 说明可见权限
 | 
	
		
			
				|  |  | +          dimension.forEach((item, keys) => {
 | 
	
		
			
				|  |  | +            item.index.forEach((arr, index) => {
 | 
	
		
			
				|  |  | +              weight += Number(arr.weight);
 | 
	
		
			
				|  |  | +              arr.theDimension = item.name + '(' + Number(index + 1) + ')';
 | 
	
		
			
				|  |  | +              arr.dimension_weight = item.dimension_weight; // 维度权重
 | 
	
		
			
				|  |  | +              arr.score_infos = [];
 | 
	
		
			
				|  |  | +              arr.planIndex = [keys, index]; // 当打开执行计划时的下标
 | 
	
		
			
				|  |  | +              arr.tabList = [
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                  lab: '指标类型',
 | 
	
		
			
				|  |  | +                  prop: this.indexType(this.initData(arr.type))
 | 
	
		
			
				|  |  | +                },
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                  lab: '指标权重(%)',
 | 
	
		
			
				|  |  | +                  prop: this.initData(arr.weight) ? '指标权重:' + this.initData(arr.weight) + '%' : null
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +              ];
 | 
	
		
			
				|  |  | +              let isFile=true;
 | 
	
		
			
				|  |  | +              if(arr.result_file.append.length==0&&arr.result_file.images.length==0){
 | 
	
		
			
				|  |  | +                isFile=false;
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +              // 写入每个指标的结果值录入人
 | 
	
		
			
				|  |  | +              let resultUserName=''
 | 
	
		
			
				|  |  | +              targetUserList.forEach(target=>{
 | 
	
		
			
				|  |  | +                target.list.forEach(target2=>{
 | 
	
		
			
				|  |  | +                  if(target2.index_id==arr.id){
 | 
	
		
			
				|  |  | +                      resultUserName = target.employee_name; //结果值
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                })
 | 
	
		
			
				|  |  | +              })
 | 
	
		
			
				|  |  | +              let tar ='';
 | 
	
		
			
				|  |  | +              if(arr.result!==null&&arr.result!==''&&arr.result!=0){
 | 
	
		
			
				|  |  | +                tar=arr.result + arr.unit+`(${resultUserName})`
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +              // if(arr.type==1){
 | 
	
		
			
				|  |  | +              arr.details = [
 | 
	
		
			
				|  |  | +                { lab: '目标值', prop: arr.target+''+arr.unit},
 | 
	
		
			
				|  |  | +                { lab: '结果值', prop: tar },
 | 
	
		
			
				|  |  | +                { lab: '结果值附件', prop:isFile?arr.result_file:''},
 | 
	
		
			
				|  |  | +                { lab: '加扣分上限', prop: this.initData(arr.point_limit) },
 | 
	
		
			
				|  |  | +                { lab: '备注', prop: this.initData(arr.remark) }
 | 
	
		
			
				|  |  | +              ];
 | 
	
		
			
				|  |  | +              // }else{
 | 
	
		
			
				|  |  | +              //   arr.details = [
 | 
	
		
			
				|  |  | +              //     { lab: '目标值', prop: arr.target+''+arr.unit},
 | 
	
		
			
				|  |  | +              //     { lab: '结果值附件', prop:isFile?arr.result_file:''},
 | 
	
		
			
				|  |  | +              //     { lab: '加扣分上限', prop: this.initData(arr.point_limit) },
 | 
	
		
			
				|  |  | +              //     { lab: '备注', prop: this.initData(arr.remark) }
 | 
	
		
			
				|  |  | +              //   ];
 | 
	
		
			
				|  |  | +              // }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              // 权限区分
 | 
	
		
			
				|  |  | +              arr.scoreList = [];
 | 
	
		
			
				|  |  | +              arr.score_info.forEach((list, auto) => {
 | 
	
		
			
				|  |  | +                if (list.id <= this.smdsinsFlow) {
 | 
	
		
			
				|  |  | +                  // smdsinsFlow为当前节点id。。数据-id <= 当前节点id .   :筛选出当前节点及之前的评分节点的数据
 | 
	
		
			
				|  |  | +                  list.employees.forEach(emplo => {
 | 
	
		
			
				|  |  | +                    if (emplo.employee_id == this.userInfo.id && list.id == this.smdsinsFlow) {
 | 
	
		
			
				|  |  | +                      arr.resultval = emplo.point;
 | 
	
		
			
				|  |  | +                      arr.remarks = emplo.remark;
 | 
	
		
			
				|  |  | +                      arr.employee_id = emplo.employee_id;
 | 
	
		
			
				|  |  | +                      arr.flowId = list.id;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    // 获取code
 | 
	
		
			
				|  |  | +                    data.flow.forEach(codes => {
 | 
	
		
			
				|  |  | +                      if (codes.id == list.id) {
 | 
	
		
			
				|  |  | +                        if (codes.code == 'review') {
 | 
	
		
			
				|  |  | +                          // 审批
 | 
	
		
			
				|  |  | +                          emplo.newCode = 'reviewer';
 | 
	
		
			
				|  |  | +                        } else if (codes.code == 'execution') {
 | 
	
		
			
				|  |  | +                          // 执行中
 | 
	
		
			
				|  |  | +                          emplo.newCode = 'employee';
 | 
	
		
			
				|  |  | +                        } else if (codes.code == 'score_supervisor') {
 | 
	
		
			
				|  |  | +                          // 指定上级
 | 
	
		
			
				|  |  | +                          emplo.newCode = 'manager';
 | 
	
		
			
				|  |  | +                        } else if (codes.code == 'special_scorer') {
 | 
	
		
			
				|  |  | +                          // 特定上级
 | 
	
		
			
				|  |  | +                          emplo.newCode = 'special';
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        codes.target.some(tar => {
 | 
	
		
			
				|  |  | +                          //找到每个评分人获取评分状态
 | 
	
		
			
				|  |  | +                          if (tar.employee_id == emplo.employee_id) {
 | 
	
		
			
				|  |  | +                            emplo.status = tar.status;
 | 
	
		
			
				|  |  | +                            return true;
 | 
	
		
			
				|  |  | +                          }
 | 
	
		
			
				|  |  | +                        });
 | 
	
		
			
				|  |  | +                      }
 | 
	
		
			
				|  |  | +                    });
 | 
	
		
			
				|  |  | +                    // item为评分数据,数据内只有两个节点:指定(score_supervisor,权限名:manager)  特定上级(special_scorer,权限名:special)
 | 
	
		
			
				|  |  | +                    // executor  执行人中的当前登陆账号
 | 
	
		
			
				|  |  | +                    // review    审批人中的当前登陆账号
 | 
	
		
			
				|  |  | +                    if (executor.employee_id) {
 | 
	
		
			
				|  |  | +                      // 若有数据,那么当前登录账号必定在执行人中并且执行节点正在执行或已结束(哪怕正在执行也无所谓,前方已经过滤评分数据,会得到[])
 | 
	
		
			
				|  |  | +                      if (poiSco[executor.newCode] == '2') {
 | 
	
		
			
				|  |  | +                        // 已有数据并且为2 ‘查看所有的’ ,那就可以将所有的评分权限都改为 ‘2’
 | 
	
		
			
				|  |  | +                        for (let i in poiSco) {
 | 
	
		
			
				|  |  | +                          poiSco[i] = '2';
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                      }
 | 
	
		
			
				|  |  | +                      if (poicom[executor.newCode] == '2') {
 | 
	
		
			
				|  |  | +                        // 说明同上
 | 
	
		
			
				|  |  | +                        for (let i in poicom) {
 | 
	
		
			
				|  |  | +                          poicom[i] = '2';
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                      }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    if (review.employee_id) {
 | 
	
		
			
				|  |  | +                      // 审批节点--同上  (审批节点默认为2,可以直接全部变成2)
 | 
	
		
			
				|  |  | +                      if (poiSco[review.newCode] == '2') {
 | 
	
		
			
				|  |  | +                        for (let i in poiSco) {
 | 
	
		
			
				|  |  | +                          poiSco[i] = '2';
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                      }
 | 
	
		
			
				|  |  | +                      if (poicom[review.newCode] == '2') {
 | 
	
		
			
				|  |  | +                        // 说明同上
 | 
	
		
			
				|  |  | +                        for (let i in poicom) {
 | 
	
		
			
				|  |  | +                          poicom[i] = '2';
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                      }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    if (item.employee_id == executor.employee_id) {
 | 
	
		
			
				|  |  | +                      // 判断当前评分数据是否 与 执行节点的当前帐号一致
 | 
	
		
			
				|  |  | +                      if (poiSco[executor.newCode] == '2') {
 | 
	
		
			
				|  |  | +                        // 如果一致并且执行节点为‘2’即查看所有,那么就修改当前 评分数据 的权限也为‘2’
 | 
	
		
			
				|  |  | +                        poiSco[item.newCode] = '2';
 | 
	
		
			
				|  |  | +                      }
 | 
	
		
			
				|  |  | +                      if (poicom[executor.newCode] == '2') {
 | 
	
		
			
				|  |  | +                        // 执行中的 -- 说明权限-同上
 | 
	
		
			
				|  |  | +                        poicom[item.newCode] = '2';
 | 
	
		
			
				|  |  | +                      }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    if (item.employee_id == review.employee_id) {
 | 
	
		
			
				|  |  | +                      // 判断当前评分数据是否 与 审批节点的当前帐号一致
 | 
	
		
			
				|  |  | +                      if (poiSco[review.newCode] == '2') {
 | 
	
		
			
				|  |  | +                        poiSco[item.newCode] = '2';
 | 
	
		
			
				|  |  | +                      }
 | 
	
		
			
				|  |  | +                      if (poicom[review.newCode] == '2') {
 | 
	
		
			
				|  |  | +                        // 审批的 -- 说明权限-同上
 | 
	
		
			
				|  |  | +                        poicom[item.newCode] = '2';
 | 
	
		
			
				|  |  | +                      }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    let scoredata = {
 | 
	
		
			
				|  |  | +                      // 评分&&说明
 | 
	
		
			
				|  |  | +                      lab: emplo.title,
 | 
	
		
			
				|  |  | +                      prop: emplo.point,
 | 
	
		
			
				|  |  | +                      newCode: emplo.newCode,
 | 
	
		
			
				|  |  | +                      employee_id: emplo.employee_id,
 | 
	
		
			
				|  |  | +                      level: emplo.level,
 | 
	
		
			
				|  |  | +                      remark: emplo.remark,
 | 
	
		
			
				|  |  | +                      knowFrom: 0,
 | 
	
		
			
				|  |  | +                      status: emplo.status
 | 
	
		
			
				|  |  | +                    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    arr.scoreList.push(scoredata);
 | 
	
		
			
				|  |  | +                    // 单项总分显示
 | 
	
		
			
				|  |  | +                    if (this.retrunFs(list.id, emplo).length > 0&&!emplo.point) {  //单项指标评分不显示总分,只评总分显示,要去掉,请把!emplo.point判断去掉
 | 
	
		
			
				|  |  | +                      arr.scoreList.push(...this.retrunFs(list.id, emplo));
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                  });
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +              });
 | 
	
		
			
				|  |  | +              dimeTab.push(arr);
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +          this.weight = weight + '%';
 | 
	
		
			
				|  |  | +          let poiSOk = false; // 评分--为true时所有评分可看
 | 
	
		
			
				|  |  | +          let poiCOk = false; // 说明--为true时所有说明可看
 | 
	
		
			
				|  |  | +          dimeTab.forEach(arr => {
 | 
	
		
			
				|  |  | +            arr.scoreList.forEach(item => {
 | 
	
		
			
				|  |  | +              // 判断评分
 | 
	
		
			
				|  |  | +              if (poiSco[item.newCode] == '1' && item.employee_id == this.userInfo.id) {
 | 
	
		
			
				|  |  | +                item.pointShow = true; //是否显示评分
 | 
	
		
			
				|  |  | +              } else if (poiSco[item.newCode] == '2') {
 | 
	
		
			
				|  |  | +                // 当前 评分 数据权限等于2时并且(当前数据id为登陆账号  或  执行中权限等于2(代表当前登陆账号为执行中的一员) 或  审批权限等于2(代表当前登陆账号为审批中的一员)) 时,所有评分都可见
 | 
	
		
			
				|  |  | +                if (item.employee_id == this.userInfo.id || poiSco[executor.newCode] == '2' || poiSco[review.newCode] == '2') {
 | 
	
		
			
				|  |  | +                  poiSOk = true;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +              // 判断说明
 | 
	
		
			
				|  |  | +              if (poicom[item.newCode] == '1' && item.employee_id == this.userInfo.id) {
 | 
	
		
			
				|  |  | +                item.textShow = true; //是否显示说明
 | 
	
		
			
				|  |  | +              } else if (poicom[item.newCode] == '2') {
 | 
	
		
			
				|  |  | +                if (item.employee_id == this.userInfo.id || poicom[executor.newCode] == '2' || poicom[review.newCode] == '2') {
 | 
	
		
			
				|  |  | +                  poiCOk = true;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +          dimeTab.forEach(arr => {
 | 
	
		
			
				|  |  | +            let points = []; //最终显示评分
 | 
	
		
			
				|  |  | +            arr.scoreList.forEach(item => {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              if (poiSOk || this.$getRole(1) || this.isCs) {
 | 
	
		
			
				|  |  | +                item.pointShow = true;
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +              if (poiCOk || this.$getRole(1) || this.isCs) {
 | 
	
		
			
				|  |  | +                item.textShow = true;
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +              if (item.status != 2 && item.id != this.smdsinsFlow) {
 | 
	
		
			
				|  |  | +                // delete duplicat[index]
 | 
	
		
			
				|  |  | +              } else {
 | 
	
		
			
				|  |  | +                points.push(item);
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +            arr.scoreList = points;
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +          this.inExecution = dimeTab;
 | 
	
		
			
				|  |  | +          this.pdLc(); //流程结束后的判断
 | 
	
		
			
				|  |  | +          let titDatas = [];
 | 
	
		
			
				|  |  | +          if (!this.flowNow.code || this.flowNow.code == 'review') { //是审批节点或者流程结束,(流程结束flowNow为空)
 | 
	
		
			
				|  |  | +            if(data.publicity == 1||this.$getRole(1)||isReview){//结果是否公示,是否主次管理员,是否是审批人
 | 
	
		
			
				|  |  | +              if (this.initData(data.final_point)) {
 | 
	
		
			
				|  |  | +                titDatas.push({ lab: '考核结果', prop: data.final_point });
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +              if (this.initData(data.final_level)) {
 | 
	
		
			
				|  |  | +                titDatas.push({ lab: '绩效等级', prop: data.final_level });
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          this.titList = titDatas; // 顶部数据
 | 
	
		
			
				|  |  | +          this.recordList = [];
 | 
	
		
			
				|  |  | +          // 记录
 | 
	
		
			
				|  |  | +          let record = res.data.data.record;
 | 
	
		
			
				|  |  | +          record.forEach((item, index) => {
 | 
	
		
			
				|  |  | +            item.name = this.$getEmployeeMapItem(item.employee_id).name;
 | 
	
		
			
				|  |  | +            if (index < 3) {
 | 
	
		
			
				|  |  | +              this.recordList.push(item);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +          this.recordAllList = record;
 | 
	
		
			
				|  |  | +          this.skeletonLoad = false;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    openCx() {
 | 
	
		
			
				|  |  | +      this.popupknowFrom = 4;
 | 
	
		
			
				|  |  | +      this.commFeedback = '';
 | 
	
		
			
				|  |  | +      this.communication = true;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 判断是否显示撤销按钮
 | 
	
		
			
				|  |  | +    isRevocation(dqItem, upItem) {
 | 
	
		
			
				|  |  | +      // 当前只需要评分节点需要撤回
 | 
	
		
			
				|  |  | +      //当前节点包含自己并且其他任意一人未完成的显示按钮
 | 
	
		
			
				|  |  | +      if (dqItem.code == 'score_supervisor' || dqItem.code == 'special_scorer') {
 | 
	
		
			
				|  |  | +        dqItem.target.some((item, index) => {
 | 
	
		
			
				|  |  | +          if (item.employee_id == this.userInfo.id && item.status == 2) {
 | 
	
		
			
				|  |  | +            dqItem.target.some((item2, index2) => {
 | 
	
		
			
				|  |  | +              if (item2.status == 1) {
 | 
	
		
			
				|  |  | +                this.revocationNodeId = dqItem.id;
 | 
	
		
			
				|  |  | +                this.revocationShow = true;
 | 
	
		
			
				|  |  | +                return true;
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      let is = true; //判断当前节点人员是否有完成的
 | 
	
		
			
				|  |  | +      //上一节点中包含登录者并且是完成的状态显示按钮
 | 
	
		
			
				|  |  | +      if (upItem) {
 | 
	
		
			
				|  |  | +        dqItem.target.some((item, index) => {
 | 
	
		
			
				|  |  | +          if (item.status == 2) {
 | 
	
		
			
				|  |  | +            is = false;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        if (upItem.code == 'score_supervisor' || upItem.code == 'special_scorer') {
 | 
	
		
			
				|  |  | +          upItem.target.some((item, index) => {
 | 
	
		
			
				|  |  | +            if (item.employee_id == this.userInfo.id && item.status == 2 && is) {
 | 
	
		
			
				|  |  | +              this.revocationNodeId = upItem.id;
 | 
	
		
			
				|  |  | +              this.revocationShow = true;
 | 
	
		
			
				|  |  | +              return true;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    pdLc() {
 | 
	
		
			
				|  |  | +      let flow = JSON.parse(JSON.stringify(this.perfstepFlow)).reverse(); //反转流程,找第一个评分节点
 | 
	
		
			
				|  |  | +      //流程结束,但是最后一个“评分”节点里有自己显示撤销
 | 
	
		
			
				|  |  | +      if (this.publicity == 1) {
 | 
	
		
			
				|  |  | +        flow.some(item => {
 | 
	
		
			
				|  |  | +          if (item.code == 'review' || item.code == 'cc') {
 | 
	
		
			
				|  |  | +            return true;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if (item.code == 'score_supervisor' || item.code == 'special_scorer') {
 | 
	
		
			
				|  |  | +            item.target.some(e => {
 | 
	
		
			
				|  |  | +              if (e.employee_id == this.userInfo.id && e.status == 2) {
 | 
	
		
			
				|  |  | +                this.revocationNodeId = item.id;
 | 
	
		
			
				|  |  | +                this.revocationShow = true;
 | 
	
		
			
				|  |  | +                return true;
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +            return true;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    //获取指定人员上级列表
 | 
	
		
			
				|  |  | +    getSuperiors(employee_id){
 | 
	
		
			
				|  |  | +      return this.$axiosUser('get', 'api/pro/employee/superior', {employee_id:employee_id,platform:'3'}).then(res=>{
 | 
	
		
			
				|  |  | +        return res.data.data.list
 | 
	
		
			
				|  |  | +      })
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    async buttonIf2() {
 | 
	
		
			
				|  |  | +      if (this.Information.id == this.$userInfo().id) {
 | 
	
		
			
				|  |  | +        this.actionButShow = true;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      // 指定管理记录人是否包含自己
 | 
	
		
			
				|  |  | +      this.recordMemberIds.some(item => {
 | 
	
		
			
				|  |  | +        if (item == this.$userInfo().id) {
 | 
	
		
			
				|  |  | +          this.recordsManagement = true;
 | 
	
		
			
				|  |  | +          return true;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      let superior_list=await this.getSuperiors(this.Information.id);
 | 
	
		
			
				|  |  | +      superior_list.some(item => {
 | 
	
		
			
				|  |  | +        // 判断被考核人的上级是否包含登录者
 | 
	
		
			
				|  |  | +        if (item.id == this.$userInfo().id) {
 | 
	
		
			
				|  |  | +          this.recordsManagement = true;
 | 
	
		
			
				|  |  | +          return true;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      if (this.$getPermis(3)) {
 | 
	
		
			
				|  |  | +        // 如果是子管理员并且管理范围权限为“全公司”
 | 
	
		
			
				|  |  | +        this.recordsManagement = true;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    //判断是否显示结果值
 | 
	
		
			
				|  |  | +    isresultBtn(item){
 | 
	
		
			
				|  |  | +      //结果值录入按钮
 | 
	
		
			
				|  |  | +      let flow=this.perfstepFlow;
 | 
	
		
			
				|  |  | +      if (item.code == 'result_value') {
 | 
	
		
			
				|  |  | +        item.target.forEach(tar => {
 | 
	
		
			
				|  |  | +          if (tar.employee_id == this.userInfo.id) {
 | 
	
		
			
				|  |  | +            this.resultButShow = true;
 | 
	
		
			
				|  |  | +            this.resultStr=tar.status==2? '调整结果值':'录入结果值'
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        return true;
 | 
	
		
			
				|  |  | +      }else{
 | 
	
		
			
				|  |  | +        let is=false
 | 
	
		
			
				|  |  | +        flow.some(obj=>{
 | 
	
		
			
				|  |  | +          if (obj.code == 'result_value') {
 | 
	
		
			
				|  |  | +            obj.target.forEach(tar => {
 | 
	
		
			
				|  |  | +              if (tar.employee_id == this.userInfo.id) {
 | 
	
		
			
				|  |  | +                is = true;
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if(obj.code=='score_supervisor'||obj.code=='special_scorer'){
 | 
	
		
			
				|  |  | +            let isUpdate=true;
 | 
	
		
			
				|  |  | +            if(obj.target.length>0){
 | 
	
		
			
				|  |  | +              obj.target.forEach(e=>{
 | 
	
		
			
				|  |  | +                if(e.status==2){
 | 
	
		
			
				|  |  | +                  isUpdate=false
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +              })
 | 
	
		
			
				|  |  | +              if(isUpdate&&is){
 | 
	
		
			
				|  |  | +                this.resultButShow2 = true;
 | 
	
		
			
				|  |  | +                this.resultStr='调整结果值';
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            return true
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    buttonIf(item) {
 | 
	
		
			
				|  |  | +      // 按钮控制
 | 
	
		
			
				|  |  | +      if (item.status == 1) {
 | 
	
		
			
				|  |  | +        // 目标确认
 | 
	
		
			
				|  |  | +        if (item.code == 'confirm') {
 | 
	
		
			
				|  |  | +          item.target.forEach(tar => {
 | 
	
		
			
				|  |  | +            if (tar.employee_id == this.userInfo.id && tar.status == 1) {
 | 
	
		
			
				|  |  | +              this.targetConfirmed = true;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        // 评分按钮
 | 
	
		
			
				|  |  | +        if (item.code == 'score_self' || item.code == 'score_mutual' || item.code == 'score_supervisor' || item.code == 'special_scorer') {
 | 
	
		
			
				|  |  | +          item.target.forEach(tar => {
 | 
	
		
			
				|  |  | +            if (tar.employee_id == this.userInfo.id && tar.status == 1) {
 | 
	
		
			
				|  |  | +              this.gradeButShow = true;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        // 结果值录入按钮
 | 
	
		
			
				|  |  | +        if (item.code == 'result_value') {
 | 
	
		
			
				|  |  | +          item.target.forEach(tar => {
 | 
	
		
			
				|  |  | +            if (tar.employee_id == this.userInfo.id) {
 | 
	
		
			
				|  |  | +              this.resultButShow = true;
 | 
	
		
			
				|  |  | +              this.resultStr=tar.status==2? '调整结果值':'录入结果值'
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        // 审批按钮
 | 
	
		
			
				|  |  | +        if (item.code == 'review') {
 | 
	
		
			
				|  |  | +          let reviewif = false;
 | 
	
		
			
				|  |  | +          item.target.forEach(tar => {
 | 
	
		
			
				|  |  | +            if (tar.employee_id == this.userInfo.id && tar.status == 1) {
 | 
	
		
			
				|  |  | +              reviewif = true;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +          this.examineButShow = !!reviewif;
 | 
	
		
			
				|  |  | +          this.isAction = item.action.indexOf('refuse') >= 0;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        this.careOfPeopleId = [];
 | 
	
		
			
				|  |  | +        // 当是结果值录入,上级评分,指定人评分,审批时显示转交按钮
 | 
	
		
			
				|  |  | +        if (
 | 
	
		
			
				|  |  | +          item.code == 'target' ||
 | 
	
		
			
				|  |  | +          item.code == 'score_supervisor' ||
 | 
	
		
			
				|  |  | +          item.code == 'special_scorer' ||
 | 
	
		
			
				|  |  | +          item.code == 'result_value' ||
 | 
	
		
			
				|  |  | +          item.code == 'review' ||
 | 
	
		
			
				|  |  | +          item.code == 'confirm'
 | 
	
		
			
				|  |  | +        ) {
 | 
	
		
			
				|  |  | +          item.target.forEach(add => {
 | 
	
		
			
				|  |  | +            if ((add.employee_id == this.userInfo.id || this.$getRole(1)) && add.status == 1) {
 | 
	
		
			
				|  |  | +              if (item.code == 'review' || item.code == 'confirm') {
 | 
	
		
			
				|  |  | +                if (item.action.indexOf('transfer') >= 0 || this.$getRole(1)) {
 | 
	
		
			
				|  |  | +                  this.careOfPeopleId.push(add);
 | 
	
		
			
				|  |  | +                  this.transferBut = true;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +              } else if (item.code == 'score_supervisor') {
 | 
	
		
			
				|  |  | +                if (item.transfer || this.$getRole(1)) {
 | 
	
		
			
				|  |  | +                  this.careOfPeopleId.push(add);
 | 
	
		
			
				|  |  | +                  this.transferBut = true;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +              } else {
 | 
	
		
			
				|  |  | +                this.careOfPeopleId.push(add);
 | 
	
		
			
				|  |  | +                this.transferBut = true;
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 返回节点评分是只评总分的
 | 
	
		
			
				|  |  | +    retrunFs(eid, e) {
 | 
	
		
			
				|  |  | +      let arr = [];
 | 
	
		
			
				|  |  | +      this.scoreInfo.forEach(item => {
 | 
	
		
			
				|  |  | +        if (item.id == eid) {
 | 
	
		
			
				|  |  | +          item.employees.forEach(u => {
 | 
	
		
			
				|  |  | +            if (u.point && u.employee_id == e.employee_id) {
 | 
	
		
			
				|  |  | +              let scoredata = {
 | 
	
		
			
				|  |  | +                // 评分
 | 
	
		
			
				|  |  | +                lab: e.title,
 | 
	
		
			
				|  |  | +                prop: u.point + '(总分)',
 | 
	
		
			
				|  |  | +                newCode: e.newCode,
 | 
	
		
			
				|  |  | +                knowFrom: 0,
 | 
	
		
			
				|  |  | +                employee_id: e.employee_id,
 | 
	
		
			
				|  |  | +                level: '',
 | 
	
		
			
				|  |  | +                remark: u.comment,
 | 
	
		
			
				|  |  | +                status: 2
 | 
	
		
			
				|  |  | +              };
 | 
	
		
			
				|  |  | +              arr.push(scoredata);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      return arr;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 数据初始化,没有值或者空数组的显示-
 | 
	
		
			
				|  |  | +    initData(str) {
 | 
	
		
			
				|  |  | +      if (str == null) {
 | 
	
		
			
				|  |  | +        return str || null;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      if (typeof str === 'object') {
 | 
	
		
			
				|  |  | +        return str.length > 0 ? str : null;
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        return str || null;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    indexType(item) {
 | 
	
		
			
				|  |  | +      return item == 1 ? '量化指标' : item == 2 ? '非量化指标' : item == 3 ? '额外加分项' : item == 4 ? '额外扣分项' : '';
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 评分-文本框失去焦点时触发
 | 
	
		
			
				|  |  | +    watresultval(val, totalScore) {
 | 
	
		
			
				|  |  | +      if (totalScore) {
 | 
	
		
			
				|  |  | +        this.gradeval = this.fomatFloat(val, 2);
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        let tPoints = [];
 | 
	
		
			
				|  |  | +        this.inExecution.forEach(item => {
 | 
	
		
			
				|  |  | +          if (item.resultval) {
 | 
	
		
			
				|  |  | +            tPoints.push({
 | 
	
		
			
				|  |  | +              score: item.resultval, // 分值
 | 
	
		
			
				|  |  | +              d_weight: item.dimension_weight, // 维度权重
 | 
	
		
			
				|  |  | +              weight: item.weight, // 指标权重
 | 
	
		
			
				|  |  | +              type: item.type // 所属指标种类 1-量化指标 2-行为价值观指标 3-额外加分项 4-额外扣分项
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        this.gradeval = this.fomatFloat(this.totalPointsCount(tPoints), 2);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      this.isShowPoint = true;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 计算总分
 | 
	
		
			
				|  |  | +    totalPointsCount(data) {
 | 
	
		
			
				|  |  | +      let ct = this.empDetList.calc_type; // 1-加和计算 2-加权计算
 | 
	
		
			
				|  |  | +      let cd = this.empDetList.calc_dimension; // 是否维度权重参与计算 1-是 0-否
 | 
	
		
			
				|  |  | +      let num = 0;
 | 
	
		
			
				|  |  | +      data.forEach(item => {
 | 
	
		
			
				|  |  | +        if (item.score) {
 | 
	
		
			
				|  |  | +          if (item.type == 3) {
 | 
	
		
			
				|  |  | +            // 3-额外加分项
 | 
	
		
			
				|  |  | +            num += Number(item.score);
 | 
	
		
			
				|  |  | +          } else if (item.type == 4) {
 | 
	
		
			
				|  |  | +            // 4-额外扣分项    不计算
 | 
	
		
			
				|  |  | +            num -= Number(item.score);
 | 
	
		
			
				|  |  | +          } else {
 | 
	
		
			
				|  |  | +            if (ct == 1 && cd == 0) {
 | 
	
		
			
				|  |  | +              // 加和
 | 
	
		
			
				|  |  | +              num += Number(item.score);
 | 
	
		
			
				|  |  | +            } else if (ct == 1 && cd == 1) {
 | 
	
		
			
				|  |  | +              // 加和--维度权重参与计算
 | 
	
		
			
				|  |  | +              num += Number(item.score) * Number(item.d_weight / 100);
 | 
	
		
			
				|  |  | +            } else if (ct == 2 && cd == 0) {
 | 
	
		
			
				|  |  | +              // 加权
 | 
	
		
			
				|  |  | +              num += Number(item.score) * Number(item.weight / 100);
 | 
	
		
			
				|  |  | +            } else if (ct == 2 && cd == 1) {
 | 
	
		
			
				|  |  | +              // 加权--维度权重参与计算
 | 
	
		
			
				|  |  | +              num += Number(item.score) * Number(item.d_weight / 100) * Number(item.weight / 100);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      return num;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    fomatFloat(src, pos) {
 | 
	
		
			
				|  |  | +      return Math.round(src * Math.pow(10, pos)) / Math.pow(10, pos);
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // e当前行 ,item用于判断当前输入是否超过评分上限
 | 
	
		
			
				|  |  | +    sgradeInp(item) {
 | 
	
		
			
				|  |  | +      if (item) {
 | 
	
		
			
				|  |  | +        if (item.type == 3 || item.type == 4) {
 | 
	
		
			
				|  |  | +          if (item.point_limit) {
 | 
	
		
			
				|  |  | +            if (item.resultval > Number(item.point_limit)) {
 | 
	
		
			
				|  |  | +              this.$toast.fail('评分超过上限');
 | 
	
		
			
				|  |  | +              item.resultval = '';
 | 
	
		
			
				|  |  | +              return false;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    gradeClick() {
 | 
	
		
			
				|  |  | +      // 评分
 | 
	
		
			
				|  |  | +      this.graded = true;
 | 
	
		
			
				|  |  | +      let dnsion = [];
 | 
	
		
			
				|  |  | +      this.inExecution.forEach(item => {
 | 
	
		
			
				|  |  | +        if (item.employee_id == this.userInfo.id && item.flowId == this.smdsinsFlow) {
 | 
	
		
			
				|  |  | +          dnsion.push(item);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      let totalScore = {
 | 
	
		
			
				|  |  | +        theDimension: '总分',
 | 
	
		
			
				|  |  | +        wdLeg: 0,
 | 
	
		
			
				|  |  | +        totalScore: true
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +      this.perfstepFlow.forEach(item => {
 | 
	
		
			
				|  |  | +        if (item.code == 'score_supervisor' && item.status == 1) {
 | 
	
		
			
				|  |  | +          this.ruleScore = item.rule == 2 ? 2 : 1; // 1-指标均要评分 2-评分总结
 | 
	
		
			
				|  |  | +          this.thecurrentFlow = 'score_supervisor';
 | 
	
		
			
				|  |  | +          totalScore.codeId = item.id;
 | 
	
		
			
				|  |  | +        } else if (item.code == 'special_scorer' && item.status == 1) {
 | 
	
		
			
				|  |  | +          this.ruleScore = 1;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if ((item.code == 'score_supervisor' && item.status == 1) || (item.code == 'special_scorer' && item.status == 1)) {
 | 
	
		
			
				|  |  | +          // 上级评分,特定评分     评分人必填项
 | 
	
		
			
				|  |  | +          item.action.forEach(arr => {
 | 
	
		
			
				|  |  | +            this.mandatoryScore = arr == 'comment'; // 指标说明是否必填
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      // 总分
 | 
	
		
			
				|  |  | +      this.scoreInfo.forEach(item => {
 | 
	
		
			
				|  |  | +        item.employees.forEach(arr => {
 | 
	
		
			
				|  |  | +          if (arr.employee_id == this.userInfo.id) {
 | 
	
		
			
				|  |  | +            this.gradeval = arr.point ? arr.point : 0;
 | 
	
		
			
				|  |  | +            if (item.id == totalScore.codeId && this.ruleScore == 2) {
 | 
	
		
			
				|  |  | +              totalScore.resultval = arr.point;
 | 
	
		
			
				|  |  | +              totalScore.remarks = arr.comment ? arr.comment : '';
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      let dimenList = [];
 | 
	
		
			
				|  |  | +      let users = []; // 当前节点的自己的信息
 | 
	
		
			
				|  |  | +      this.perfstepFlow.forEach(item => {
 | 
	
		
			
				|  |  | +        // 根据流程当前节点,找节点的人员中的登陆者
 | 
	
		
			
				|  |  | +        if (item.status == 1) {
 | 
	
		
			
				|  |  | +          item.target.some(arr => {
 | 
	
		
			
				|  |  | +            if (arr.employee_id == this.userInfo.id) {
 | 
	
		
			
				|  |  | +              arr.flowStatusId = item.id; // 当前节点的ID
 | 
	
		
			
				|  |  | +              users = arr;
 | 
	
		
			
				|  |  | +              return true;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      users.list.forEach(att => {
 | 
	
		
			
				|  |  | +        // 获取当前节点审批人员中的登陆者
 | 
	
		
			
				|  |  | +        dnsion.forEach(add => {
 | 
	
		
			
				|  |  | +          if (att.index_id == add.id && att.dimension_key == add.planIndex[0] && att.index_key == add.planIndex[1]) {
 | 
	
		
			
				|  |  | +            add.dimension_key = att.dimension_key; // 维度索引
 | 
	
		
			
				|  |  | +            add.index_key = att.index_key; // 指标索引
 | 
	
		
			
				|  |  | +            if(add.type==1){
 | 
	
		
			
				|  |  | +              add.expressionStr=getExpressionStr(add.expression)
 | 
	
		
			
				|  |  | +            }else{
 | 
	
		
			
				|  |  | +              add.expressionStr=''
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            add.score_infos.forEach(user => {
 | 
	
		
			
				|  |  | +              // 显示的文案,找到当前登录人
 | 
	
		
			
				|  |  | +              if (user.id == users.flowStatusId) {
 | 
	
		
			
				|  |  | +                if (user.employee_id == this.userInfo.id) {
 | 
	
		
			
				|  |  | +                  this.scoreTab.title = user.title;
 | 
	
		
			
				|  |  | +                  this.scoreTab.explain = user.title.split(':')[0] + '说明';
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +            dimenList.push(add);
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      this.scoreInfo.forEach(item => {
 | 
	
		
			
				|  |  | +        item.employees.forEach(arr => {
 | 
	
		
			
				|  |  | +          if (arr.employee_id == this.userInfo.id) {
 | 
	
		
			
				|  |  | +            this.gradeval = arr.point ? arr.point : 0;
 | 
	
		
			
				|  |  | +            if (item.id == totalScore.codeId && this.ruleScore == 2) {
 | 
	
		
			
				|  |  | +              totalScore.resultval = arr.point;
 | 
	
		
			
				|  |  | +              totalScore.remarks = arr.comment ? arr.comment : '';
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      this.perfstepFlow.forEach(item => {
 | 
	
		
			
				|  |  | +        if (item.code == 'score_supervisor' && item.status == 1 && this.ruleScore == 2) {
 | 
	
		
			
				|  |  | +          dimenList.push(totalScore);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      this.$nextTick(() => {
 | 
	
		
			
				|  |  | +        this.inExecution = dimenList;
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    scoreClone() {
 | 
	
		
			
				|  |  | +      this.graded = false;
 | 
	
		
			
				|  |  | +      this.skeletonLoad = true;
 | 
	
		
			
				|  |  | +      this.employeeDet();
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 评分取消
 | 
	
		
			
				|  |  | +    scorerveno() {
 | 
	
		
			
				|  |  | +      this.$dialog
 | 
	
		
			
				|  |  | +        .confirm({
 | 
	
		
			
				|  |  | +          title: '暂存',
 | 
	
		
			
				|  |  | +          message: '是否暂存当前页面内容?'
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        .then(() => {
 | 
	
		
			
				|  |  | +          this.scorerveok(0);
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        .catch(() => {
 | 
	
		
			
				|  |  | +          this.scoreClone();
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    scorerveok(num) {
 | 
	
		
			
				|  |  | +      let data = {
 | 
	
		
			
				|  |  | +        id: this.employeeID, // 个人考核包ID
 | 
	
		
			
				|  |  | +        is_submit: num, // 是否提交 0否(暂存) 1 是
 | 
	
		
			
				|  |  | +        node_id: this.smdsinsFlow // 当前节点
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +      let point_info = []; // 各项评分数据
 | 
	
		
			
				|  |  | +      let sumData = {
 | 
	
		
			
				|  |  | +        // 总分数据
 | 
	
		
			
				|  |  | +        total_score: '',
 | 
	
		
			
				|  |  | +        total_score_comment: ''
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +      this.inExecution.forEach(item => {
 | 
	
		
			
				|  |  | +        let resultInfo = {};
 | 
	
		
			
				|  |  | +        if (this.ruleScore == 1 && !item.totalScore) {
 | 
	
		
			
				|  |  | +          // 各项评分
 | 
	
		
			
				|  |  | +          resultInfo = {
 | 
	
		
			
				|  |  | +            // 评分信息--只评总分不需要
 | 
	
		
			
				|  |  | +            score: item.resultval ? item.resultval : '', // 单项目结果值
 | 
	
		
			
				|  |  | +            score_remark: item.remarks,
 | 
	
		
			
				|  |  | +            dimension_key: item.dimension_key, // 维度索引
 | 
	
		
			
				|  |  | +            index_key: item.index_key, // 指标索引
 | 
	
		
			
				|  |  | +            index_id: item.id, // 指标ID
 | 
	
		
			
				|  |  | +            name: item.name,
 | 
	
		
			
				|  |  | +            // 用于计算分数
 | 
	
		
			
				|  |  | +            d_weight: item.dimension_weight, // 维度权重
 | 
	
		
			
				|  |  | +            weight: item.weight, // 指标权重
 | 
	
		
			
				|  |  | +            type: item.type // 所属指标种类 1-量化指标 2-行为价值观指标 3-额外加分项 4-额外扣分项
 | 
	
		
			
				|  |  | +          };
 | 
	
		
			
				|  |  | +          point_info.push(resultInfo);
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          // 等于2:只评总分
 | 
	
		
			
				|  |  | +          if (item.totalScore) {
 | 
	
		
			
				|  |  | +            sumData = {
 | 
	
		
			
				|  |  | +              total_score: item.resultval ? item.resultval : '',
 | 
	
		
			
				|  |  | +              total_score_comment: item.remarks
 | 
	
		
			
				|  |  | +            };
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      let isMust = true,
 | 
	
		
			
				|  |  | +        isExplain = true; // isMust验证评分,isExplain验证说明
 | 
	
		
			
				|  |  | +      if (num == 1) {
 | 
	
		
			
				|  |  | +        // 提交验证必填
 | 
	
		
			
				|  |  | +        if (this.ruleScore == 1) {
 | 
	
		
			
				|  |  | +          // 各项评分
 | 
	
		
			
				|  |  | +          point_info.forEach(item => {
 | 
	
		
			
				|  |  | +            if (this.mandatoryScore) {
 | 
	
		
			
				|  |  | +              // 评分说明必填
 | 
	
		
			
				|  |  | +              if (!item.score_remark) {
 | 
	
		
			
				|  |  | +                isExplain = false;
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (item.score===null||item.score===undefined||item.score==='') {
 | 
	
		
			
				|  |  | +              isMust = false;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +          if (!isMust) {
 | 
	
		
			
				|  |  | +            this.$toast('请输入所有评分');
 | 
	
		
			
				|  |  | +            return false;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if (!isExplain) {
 | 
	
		
			
				|  |  | +            this.$toast('请输入所有评分说明');
 | 
	
		
			
				|  |  | +            return false;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          // 总分
 | 
	
		
			
				|  |  | +          if (!sumData.total_score) {
 | 
	
		
			
				|  |  | +            this.$toast('请输入评分总分');
 | 
	
		
			
				|  |  | +            return false;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if (this.mandatoryScore) {
 | 
	
		
			
				|  |  | +            if (!sumData.total_score_comment) {
 | 
	
		
			
				|  |  | +              this.$toast('请输入总分说明');
 | 
	
		
			
				|  |  | +              return false;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      if (this.ruleScore == 1) {
 | 
	
		
			
				|  |  | +        data.total_score = this.fomatFloat(this.totalPointsCount(point_info), 2); // 计算的个人评出的总分(保留小数后两位)
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        data.total_score = this.fomatFloat(sumData.total_score, 2); // 计算的个人评出的总分(保留小数后两位)
 | 
	
		
			
				|  |  | +        data.total_score_comment = sumData.total_score_comment;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      data.point_info = JSON.stringify(point_info); // 评分信息 --  填所有评分时必须的字段(传入某指标的分数、说明、维度索引、制表索引、指标ID)
 | 
	
		
			
				|  |  | +      if (this.bootBool) {
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      let pointList = JSON.parse(JSON.stringify(point_info));
 | 
	
		
			
				|  |  | +      pointList.push({
 | 
	
		
			
				|  |  | +        name: '总分',
 | 
	
		
			
				|  |  | +        score: data.total_score,
 | 
	
		
			
				|  |  | +        score_remark: data.total_score_comment
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      this.pointList = pointList;
 | 
	
		
			
				|  |  | +      this.pointData = data;
 | 
	
		
			
				|  |  | +      if (this.ruleScore == 1) {
 | 
	
		
			
				|  |  | +        //只评总分不需要弹窗
 | 
	
		
			
				|  |  | +        this.isPoint = true;
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        this.score();
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    score() {
 | 
	
		
			
				|  |  | +      this.$axiosUser('post', '/api/pro/per/package/submit_score', this.pointData).then(res => {
 | 
	
		
			
				|  |  | +        this.$toast.success('提交成功');
 | 
	
		
			
				|  |  | +        this.bootBool = false;
 | 
	
		
			
				|  |  | +        this.isPoint = false;
 | 
	
		
			
				|  |  | +        this.graded = false;
 | 
	
		
			
				|  |  | +        this.employeeDet();
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    gradeTurn() {
 | 
	
		
			
				|  |  | +      this.rejectval = '';
 | 
	
		
			
				|  |  | +      this.rejectval1 = '';
 | 
	
		
			
				|  |  | +      this.selectpradio = '';
 | 
	
		
			
				|  |  | +      this.selectpradio1 = '';
 | 
	
		
			
				|  |  | +      this.rejectProp = false;
 | 
	
		
			
				|  |  | +      this.rejectData = {};
 | 
	
		
			
				|  |  | +      let list = [];
 | 
	
		
			
				|  |  | +      this.perfstepFlow.forEach((item, index) => {
 | 
	
		
			
				|  |  | +        if (item.status == 2 && item.code != 'execution' && item.code != 'cc' && item.target.length != 0) {
 | 
	
		
			
				|  |  | +          let arr = {};
 | 
	
		
			
				|  |  | +          arr.id = item.id;
 | 
	
		
			
				|  |  | +          arr.name = item.remark;
 | 
	
		
			
				|  |  | +          item.target.forEach((att, aoo) => {
 | 
	
		
			
				|  |  | +            arr.name += att.employee_name;
 | 
	
		
			
				|  |  | +            arr.name += item.target.length - aoo > 1 ? ',' : '';
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +          arr.staff = item.target;
 | 
	
		
			
				|  |  | +          list.push(arr);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      this.rejectList = list;
 | 
	
		
			
				|  |  | +      this.popupknowFrom = 1;
 | 
	
		
			
				|  |  | +      this.commFeedback = '';
 | 
	
		
			
				|  |  | +      this.communication = true;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 审批同意
 | 
	
		
			
				|  |  | +    gradeOk() {
 | 
	
		
			
				|  |  | +      if (this.flowNow.code == 'confirm') {
 | 
	
		
			
				|  |  | +        // 驳回
 | 
	
		
			
				|  |  | +        this.popupknowFrom = 3;
 | 
	
		
			
				|  |  | +      } else if (this.flowNow.code == 'review') {
 | 
	
		
			
				|  |  | +        // 审批
 | 
	
		
			
				|  |  | +        this.popupknowFrom = 2;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      this.commFeedback = '';
 | 
	
		
			
				|  |  | +      this.communication = true;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 选人
 | 
	
		
			
				|  |  | +    confirm(data) {
 | 
	
		
			
				|  |  | +      let item = data.employee[0];
 | 
	
		
			
				|  |  | +      let employeeId = this.careOfPeopleId.length == 1 ? this.careOfPeopleId[0].employee_id : this.zjId;
 | 
	
		
			
				|  |  | +      this.$dialog.confirm({ title: '转交', message: '确认转交:' + item.name + '?' }).then(() => {
 | 
	
		
			
				|  |  | +        let data = {
 | 
	
		
			
				|  |  | +          id: this.employeeID, // 个人考核记录ID
 | 
	
		
			
				|  |  | +          node_id: this.flowNow.id, // 节点ID
 | 
	
		
			
				|  |  | +          to_employee_id: item.id, // 接收用户ID
 | 
	
		
			
				|  |  | +          from_employee_id: employeeId // 转出用户ID
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +        this.$axiosUser('post', '/api/pro/per/package/transfer', data).then(res => {
 | 
	
		
			
				|  |  | +          if (res.data.code == 1) {
 | 
	
		
			
				|  |  | +            this.$toast.success('转交成功');
 | 
	
		
			
				|  |  | +            this.employeeDet();
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 打开执行计划
 | 
	
		
			
				|  |  | +    openPlan(index) {
 | 
	
		
			
				|  |  | +      this.planIndex = index;
 | 
	
		
			
				|  |  | +      this.openTrackPath('action');
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 打开管理记录
 | 
	
		
			
				|  |  | +    openTrack(index) {
 | 
	
		
			
				|  |  | +      this.planIndex = index;
 | 
	
		
			
				|  |  | +      this.openTrackPath('admnin');
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 管理记录||执行计划
 | 
	
		
			
				|  |  | +    openTrackPath(add) {
 | 
	
		
			
				|  |  | +      let data = {
 | 
	
		
			
				|  |  | +        know: add,
 | 
	
		
			
				|  |  | +        apList: this.apList,
 | 
	
		
			
				|  |  | +        packId: this.employeeID,
 | 
	
		
			
				|  |  | +        assessID: this.Information.id,
 | 
	
		
			
				|  |  | +        planIndex: this.planIndex,
 | 
	
		
			
				|  |  | +        recordMemberIds: this.recordMemberIds
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +      this.$setCache('actionplanList', data);
 | 
	
		
			
				|  |  | +      this.$router.push({ name: 'actionplanList' });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 指标详情
 | 
	
		
			
				|  |  | +    openPlanPath(apList, add) {
 | 
	
		
			
				|  |  | +      this.logList = add == 'action' ? apList.schedule : apList.mamage_record;
 | 
	
		
			
				|  |  | +      this.logText = add == 'action' ? '执行计划' : '管理记录';
 | 
	
		
			
				|  |  | +      this.apDetails = apList;
 | 
	
		
			
				|  |  | +      this.isShowText = true;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    unfold() {
 | 
	
		
			
				|  |  | +      // 展开记录
 | 
	
		
			
				|  |  | +      this.recordList = this.recordAllList;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    packUp() {
 | 
	
		
			
				|  |  | +      // 收起记录
 | 
	
		
			
				|  |  | +      let listtre = [];
 | 
	
		
			
				|  |  | +      this.recordAllList.forEach((item, index) => {
 | 
	
		
			
				|  |  | +        if (index < 3) {
 | 
	
		
			
				|  |  | +          listtre.push(item);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      this.recordList = listtre;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    communicate() {
 | 
	
		
			
				|  |  | +      this.popupknowFrom = 0;
 | 
	
		
			
				|  |  | +      this.commFeedback = '';
 | 
	
		
			
				|  |  | +      this.communication = true;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    turndown() {
 | 
	
		
			
				|  |  | +      // 驳回
 | 
	
		
			
				|  |  | +      this.popupknowFrom = 1;
 | 
	
		
			
				|  |  | +      this.commFeedback = '';
 | 
	
		
			
				|  |  | +      this.communication = true;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    enteringResult() {
 | 
	
		
			
				|  |  | +      // 录入结果值
 | 
	
		
			
				|  |  | +      this.$router.push({
 | 
	
		
			
				|  |  | +        name: 'resultValueEntry',
 | 
	
		
			
				|  |  | +        query: { id: this.employeeID, packageName: this.detailsTIt,resultStr:this.resultStr }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    commcliButon() {
 | 
	
		
			
				|  |  | +      // 沟通弹窗取消按钮
 | 
	
		
			
				|  |  | +      this.communication = false;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    commcliButok() {
 | 
	
		
			
				|  |  | +      // 沟通弹窗确定按钮
 | 
	
		
			
				|  |  | +      if (this.popupknowFrom == 0) {
 | 
	
		
			
				|  |  | +        // 沟通
 | 
	
		
			
				|  |  | +        if (!this.commFeedback) {
 | 
	
		
			
				|  |  | +          this.$toast('请输入沟通内容');
 | 
	
		
			
				|  |  | +          return false;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        let target_id = this.emtags.map(item => {
 | 
	
		
			
				|  |  | +          return item.id;
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        this.$axiosUser('post', '/api/pro/per/package/negotiation', {
 | 
	
		
			
				|  |  | +          id: this.employeeID,
 | 
	
		
			
				|  |  | +          content: this.commFeedback,
 | 
	
		
			
				|  |  | +          target_id: JSON.stringify(target_id)
 | 
	
		
			
				|  |  | +        }).then(res => {
 | 
	
		
			
				|  |  | +          this.$toast.success('已沟通');
 | 
	
		
			
				|  |  | +          this.employeeDet();
 | 
	
		
			
				|  |  | +          this.communication = false;
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +      } else if (this.popupknowFrom == 1) {
 | 
	
		
			
				|  |  | +        // 驳回
 | 
	
		
			
				|  |  | +        this.agree0Prop(0); // 审批驳回、目标确认驳回
 | 
	
		
			
				|  |  | +      } else if (this.popupknowFrom == 2 || this.popupknowFrom == 3) {
 | 
	
		
			
				|  |  | +        this.agree0Prop(1); // 审批同意、目标确认同意
 | 
	
		
			
				|  |  | +      } else if (this.popupknowFrom == 4) {
 | 
	
		
			
				|  |  | +        this.revocation();
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    // 撤销
 | 
	
		
			
				|  |  | +    revocation() {
 | 
	
		
			
				|  |  | +      let params = {
 | 
	
		
			
				|  |  | +        id: this.employeeID,
 | 
	
		
			
				|  |  | +        node_id: this.revocationNodeId,
 | 
	
		
			
				|  |  | +        comment: this.commFeedback
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +      this.$axiosUser('post', '/api/pro/per/package/revoke', params)
 | 
	
		
			
				|  |  | +        .then(res => {
 | 
	
		
			
				|  |  | +          if (res.data.code == 1) {
 | 
	
		
			
				|  |  | +            this.$toast.success('撤销成功');
 | 
	
		
			
				|  |  | +            this.employeeDet();
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        .finally(() => {
 | 
	
		
			
				|  |  | +          this.communication = false;
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    agree0Prop(num) {
 | 
	
		
			
				|  |  | +      let data = {
 | 
	
		
			
				|  |  | +        id: this.employeeID, // 个人考核包ID
 | 
	
		
			
				|  |  | +        agree: num, // 同意1    驳回0
 | 
	
		
			
				|  |  | +        c_node_id: this.flowNow.id // 当前节点ID
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +      if (num == 0) {
 | 
	
		
			
				|  |  | +        if (!this.commFeedback) {
 | 
	
		
			
				|  |  | +          this.$toast('请输入驳回内容');
 | 
	
		
			
				|  |  | +          return false;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (!this.rejectData.node_id) {
 | 
	
		
			
				|  |  | +          this.$toast('请选择驳回节点!');
 | 
	
		
			
				|  |  | +          return false;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (!this.rejectData.employee_id) {
 | 
	
		
			
				|  |  | +          this.$toast('至少选择一名重置人员!');
 | 
	
		
			
				|  |  | +          return false;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        data.employee_id = JSON.stringify(this.rejectData.employee_id);
 | 
	
		
			
				|  |  | +        data.node_id = this.rejectData.node_id;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      if (this.commFeedback) {
 | 
	
		
			
				|  |  | +        data.comment = this.commFeedback; // 审核意见
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      this.$axiosUser('post', '/api/pro/per/package/review', data).then(res => {
 | 
	
		
			
				|  |  | +        this.$toast.success('提交成功');
 | 
	
		
			
				|  |  | +        this.employeeDet();
 | 
	
		
			
				|  |  | +        this.communication = false;
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    confirmCreator(data) {
 | 
	
		
			
				|  |  | +      this.emtags = data.employee;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    clickreject(item) {
 | 
	
		
			
				|  |  | +      this.rejectList1 = [];
 | 
	
		
			
				|  |  | +      this.rejectData = {};
 | 
	
		
			
				|  |  | +      this.rejectval = item.name;
 | 
	
		
			
				|  |  | +      if (item.staff.length > 1) {
 | 
	
		
			
				|  |  | +        this.rejectList1.push({ employee_id: 0, employee_name: '全部人员' });
 | 
	
		
			
				|  |  | +        item.staff.forEach(item => {
 | 
	
		
			
				|  |  | +          if (item.status == 2) {
 | 
	
		
			
				|  |  | +            this.rejectList1.push(item);
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        this.rejectProp = true;
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        this.rejectData.employee_id = [item.staff[0].employee_id];
 | 
	
		
			
				|  |  | +        this.rejectProp = false;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      this.rejectData.node_id = item.id;
 | 
	
		
			
				|  |  | +      this.rejectdlg = false;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    clickreject1(item) {
 | 
	
		
			
				|  |  | +      this.rejectval1 = item.employee_name;
 | 
	
		
			
				|  |  | +      if (item.employee_id == 0) {
 | 
	
		
			
				|  |  | +        let arr = [];
 | 
	
		
			
				|  |  | +        this.rejectList1.forEach(aoo => {
 | 
	
		
			
				|  |  | +          if (aoo.employee_id && aoo.employee_id != 0) {
 | 
	
		
			
				|  |  | +            arr.push(aoo.employee_id);
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        this.rejectData.employee_id = arr;
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        this.rejectData.employee_id = [item.employee_id];
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      this.rejectdlg1 = false;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    setUpD() {
 | 
	
		
			
				|  |  | +      this.headuDown[0] = {};
 | 
	
		
			
				|  |  | +      this.headuDown[1] = {};
 | 
	
		
			
				|  |  | +      let pendingList = this.pendingList;
 | 
	
		
			
				|  |  | +      pendingList.some((item, index) => {
 | 
	
		
			
				|  |  | +        if (this.employeeID == item.employeeID) {
 | 
	
		
			
				|  |  | +          this.detailsTIt = item.package_name;
 | 
	
		
			
				|  |  | +          this.$route.query.id = item.employeeID;
 | 
	
		
			
				|  |  | +          if (pendingList[index - 1]) {
 | 
	
		
			
				|  |  | +            this.headuDown[0] = {
 | 
	
		
			
				|  |  | +              keys: 1,
 | 
	
		
			
				|  |  | +              keys1: '上一个',
 | 
	
		
			
				|  |  | +              keys2: '<',
 | 
	
		
			
				|  |  | +              name: pendingList[index - 1].name,
 | 
	
		
			
				|  |  | +              id: pendingList[index - 1].employeeID,
 | 
	
		
			
				|  |  | +              package_id:pendingList[index - 1].package_id,
 | 
	
		
			
				|  |  | +            };
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if (pendingList[index + 1]) {
 | 
	
		
			
				|  |  | +            this.headuDown[1] = {
 | 
	
		
			
				|  |  | +              keys: 2,
 | 
	
		
			
				|  |  | +              keys1: '下一个',
 | 
	
		
			
				|  |  | +              keys2: '>',
 | 
	
		
			
				|  |  | +              name: pendingList[index + 1].name,
 | 
	
		
			
				|  |  | +              id: pendingList[index + 1].employeeID,
 | 
	
		
			
				|  |  | +              package_id:pendingList[index + 1].package_id,
 | 
	
		
			
				|  |  | +            };
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          if (index == pendingList.length - 2 && pendingList.length >= 10) {//如果当点击到待办人员的倒数第二个,加载剩余的
 | 
	
		
			
				|  |  | +            this.getAgency();
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          return true;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    uDownCli(data) {
 | 
	
		
			
				|  |  | +      if (data.id=='结果') {
 | 
	
		
			
				|  |  | +          this.isDetails=false;
 | 
	
		
			
				|  |  | +          this.headuDown[0] = {};
 | 
	
		
			
				|  |  | +          this.headuDown[1] = {};
 | 
	
		
			
				|  |  | +          let pendingList = this.pendingList;
 | 
	
		
			
				|  |  | +          pendingList.some((item, index) => {
 | 
	
		
			
				|  |  | +            if (item.package_id&&item.package_id ==data.package_id) {
 | 
	
		
			
				|  |  | +              this.pe_ids=JSON.stringify(item.pe_ids);
 | 
	
		
			
				|  |  | +              this.detailsTIt = item.package_name;
 | 
	
		
			
				|  |  | +              if (pendingList[index - 1]) {
 | 
	
		
			
				|  |  | +                this.headuDown[0] = {
 | 
	
		
			
				|  |  | +                  keys: 1,
 | 
	
		
			
				|  |  | +                  keys1: '上一个',
 | 
	
		
			
				|  |  | +                  keys2: '<',
 | 
	
		
			
				|  |  | +                  name: pendingList[index - 1].name,
 | 
	
		
			
				|  |  | +                  id: pendingList[index - 1].employeeID,
 | 
	
		
			
				|  |  | +                  package_id:pendingList[index - 1].package_id,
 | 
	
		
			
				|  |  | +                };
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +              if (pendingList[index + 1]) {
 | 
	
		
			
				|  |  | +                this.headuDown[1] = {
 | 
	
		
			
				|  |  | +                  keys: 2,
 | 
	
		
			
				|  |  | +                  keys1: '下一个',
 | 
	
		
			
				|  |  | +                  keys2: '>',
 | 
	
		
			
				|  |  | +                  name: pendingList[index + 1].name,
 | 
	
		
			
				|  |  | +                  id: pendingList[index + 1].employeeID,
 | 
	
		
			
				|  |  | +                  package_id:pendingList[index + 1].package_id,
 | 
	
		
			
				|  |  | +                };
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +              if (index == pendingList.length - 2 && pendingList.length >= 10) {//如果当点击到待办人员的倒数第二个,加载剩余的
 | 
	
		
			
				|  |  | +                this.getAgency();
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +              return true;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +      }else{
 | 
	
		
			
				|  |  | +        if(data.id){
 | 
	
		
			
				|  |  | +          this.$route.query.id = data.id;
 | 
	
		
			
				|  |  | +          this.isDetails=true;
 | 
	
		
			
				|  |  | +          this.employeeID = data.id;
 | 
	
		
			
				|  |  | +          this.skeletonLoad = true;
 | 
	
		
			
				|  |  | +          this.employeeDet();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  created() {
 | 
	
		
			
				|  |  | +    // 沟通,跳转
 | 
	
		
			
				|  |  | +    if (document.documentElement.style.height) {
 | 
	
		
			
				|  |  | +      this.com_height = document.documentElement.style.height;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  activated() {
 | 
	
		
			
				|  |  | +    // 是否显示上下人
 | 
	
		
			
				|  |  | +    if (this.$route.query.pendingList && this.$route.query.pendingList.length != 0) {
 | 
	
		
			
				|  |  | +      this.pendingList = JSON.parse(this.$route.query.pendingList);
 | 
	
		
			
				|  |  | +      this.isDisabled = true;
 | 
	
		
			
				|  |  | +      this.activeName = this.$route.query.activeName;
 | 
	
		
			
				|  |  | +      this.page = this.$route.query.page || 1;
 | 
	
		
			
				|  |  | +    } else {
 | 
	
		
			
				|  |  | +      this.isDisabled = false;
 | 
	
		
			
				|  |  | +      this.activeName = '';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    this.skeletonLoad = true;
 | 
	
		
			
				|  |  | +    this.$nextTick(() => {
 | 
	
		
			
				|  |  | +      this.detailsTIt = this.$route.query.Tit;
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    if(this.$route.query.pe_ids){//结果值点击进来
 | 
	
		
			
				|  |  | +       this.isDetails=false;
 | 
	
		
			
				|  |  | +       this.headuDown[0] = {};
 | 
	
		
			
				|  |  | +       this.headuDown[1] = {};
 | 
	
		
			
				|  |  | +       let pendingList = JSON.parse(this.$route.query.pendingList);
 | 
	
		
			
				|  |  | +       pendingList.some((item, index) => {
 | 
	
		
			
				|  |  | +         if (item.package_id&&item.package_id ==this.$route.query.package_id) {
 | 
	
		
			
				|  |  | +           this.pe_ids=this.$route.query.pe_ids;
 | 
	
		
			
				|  |  | +           this.isUpdate=this.$route.query.isUpdate? true:false;
 | 
	
		
			
				|  |  | +           if (pendingList[index - 1]) {
 | 
	
		
			
				|  |  | +             this.headuDown[0] = {
 | 
	
		
			
				|  |  | +               keys: 1,
 | 
	
		
			
				|  |  | +               keys1: '上一个',
 | 
	
		
			
				|  |  | +               keys2: '<',
 | 
	
		
			
				|  |  | +               name: pendingList[index - 1].name,
 | 
	
		
			
				|  |  | +               id: pendingList[index - 1].employeeID,
 | 
	
		
			
				|  |  | +               package_id:pendingList[index - 1].package_id,
 | 
	
		
			
				|  |  | +             };
 | 
	
		
			
				|  |  | +           }
 | 
	
		
			
				|  |  | +           if (pendingList[index + 1]) {
 | 
	
		
			
				|  |  | +             this.headuDown[1] = {
 | 
	
		
			
				|  |  | +               keys: 2,
 | 
	
		
			
				|  |  | +               keys1: '下一个',
 | 
	
		
			
				|  |  | +               keys2: '>',
 | 
	
		
			
				|  |  | +               name: pendingList[index + 1].name,
 | 
	
		
			
				|  |  | +               id: pendingList[index + 1].employeeID,
 | 
	
		
			
				|  |  | +               package_id:pendingList[index + 1].package_id,
 | 
	
		
			
				|  |  | +             };
 | 
	
		
			
				|  |  | +           }
 | 
	
		
			
				|  |  | +           if (index == pendingList.length - 2 && pendingList.length >= 10) {//如果当点击到待办人员的倒数第二个,加载剩余的
 | 
	
		
			
				|  |  | +             this.getAgency();
 | 
	
		
			
				|  |  | +           }
 | 
	
		
			
				|  |  | +           return true;
 | 
	
		
			
				|  |  | +         }
 | 
	
		
			
				|  |  | +       });
 | 
	
		
			
				|  |  | +    }else{
 | 
	
		
			
				|  |  | +        this.employeeDet();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if (this.$route.query.paths && this.$route.query.data) {
 | 
	
		
			
				|  |  | +      let data = JSON.parse(this.$route.query.data);
 | 
	
		
			
				|  |  | +      this.$axiosUser('post', '/api/pro/per/package/msg/cc', data).then(res => {});
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +</script>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<style scoped lang="less">
 | 
	
		
			
				|  |  | +  .okr-tips {
 | 
	
		
			
				|  |  | +    position: absolute;
 | 
	
		
			
				|  |  | +    top: 0;
 | 
	
		
			
				|  |  | +    right: 0;
 | 
	
		
			
				|  |  | +    height: 0.38rem;
 | 
	
		
			
				|  |  | +    font-size: 0.27rem;
 | 
	
		
			
				|  |  | +    padding: 0.1rem 0.25rem;
 | 
	
		
			
				|  |  | +    border-top-left-radius: 0.05rem;
 | 
	
		
			
				|  |  | +    border-bottom-left-radius: 0.05rem;
 | 
	
		
			
				|  |  | +    display: -webkit-box;
 | 
	
		
			
				|  |  | +    display: -ms-flexbox;
 | 
	
		
			
				|  |  | +    display: flex;
 | 
	
		
			
				|  |  | +    color: #26a2ff;
 | 
	
		
			
				|  |  | +    background-color: #ecf5ff;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.apdList {
 | 
	
		
			
				|  |  | +  background-color: #fff;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.apdData {
 | 
	
		
			
				|  |  | +  width: 88%;
 | 
	
		
			
				|  |  | +  padding: 0.1rem 0;
 | 
	
		
			
				|  |  | +  margin: 0 0.3rem 0 0.2rem;
 | 
	
		
			
				|  |  | +  border-bottom: 1px solid rgb(240, 240, 240);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.apdDian {
 | 
	
		
			
				|  |  | +  position: relative;
 | 
	
		
			
				|  |  | +  width: 0.25rem;
 | 
	
		
			
				|  |  | +  height: 0.25rem;
 | 
	
		
			
				|  |  | +  border-radius: 50%;
 | 
	
		
			
				|  |  | +  background-color: #d4d4d4;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.apdHeadBoeder {
 | 
	
		
			
				|  |  | +  position: absolute;
 | 
	
		
			
				|  |  | +  left: 0.11rem;
 | 
	
		
			
				|  |  | +  height: 100%;
 | 
	
		
			
				|  |  | +  width: 0.02rem;
 | 
	
		
			
				|  |  | +  border-left: 0.02rem solid #d4d4d4;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.apdborderNO {
 | 
	
		
			
				|  |  | +  border: 0 !important;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.apdListMarTop {
 | 
	
		
			
				|  |  | +  margin: 0.15rem 0 0rem 0;
 | 
	
		
			
				|  |  | +  background-color: #fff;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.vassheet {
 | 
	
		
			
				|  |  | +  margin-bottom: 1rem;
 | 
	
		
			
				|  |  | +  min-height: 6rem;
 | 
	
		
			
				|  |  | +  .vasHead {
 | 
	
		
			
				|  |  | +    background-color: #fff;
 | 
	
		
			
				|  |  | +    text-align: center;
 | 
	
		
			
				|  |  | +    padding: 0.2rem;
 | 
	
		
			
				|  |  | +    i {
 | 
	
		
			
				|  |  | +      right: 0.3rem;
 | 
	
		
			
				|  |  | +      top: 0.32rem;
 | 
	
		
			
				|  |  | +      position: absolute;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    i ::active{
 | 
	
		
			
				|  |  | +      content:"";
 | 
	
		
			
				|  |  | +      position:absolute;
 | 
	
		
			
				|  |  | +      top:-10px;
 | 
	
		
			
				|  |  | +      right:-10px;
 | 
	
		
			
				|  |  | +      bottom:-10px;
 | 
	
		
			
				|  |  | +      left:-10px;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    span {
 | 
	
		
			
				|  |  | +      font-size: 0.32rem;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .pullUpdel {
 | 
	
		
			
				|  |  | +    margin: 0.15rem 0 6rem 0;
 | 
	
		
			
				|  |  | +    padding: 0.25rem;
 | 
	
		
			
				|  |  | +    background-color: #ffffff;
 | 
	
		
			
				|  |  | +    .intro {
 | 
	
		
			
				|  |  | +      span {
 | 
	
		
			
				|  |  | +        display: inline-block;
 | 
	
		
			
				|  |  | +        padding: 0.05rem 0;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      .introcol {
 | 
	
		
			
				|  |  | +        color: rgb(171, 171, 171);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      .intropad {
 | 
	
		
			
				|  |  | +        padding: 0.1rem 0;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.guidang {
 | 
	
		
			
				|  |  | +  width: 60px;
 | 
	
		
			
				|  |  | +  animation: example 1s;
 | 
	
		
			
				|  |  | +  height: 35px;
 | 
	
		
			
				|  |  | +  margin-left: 10px;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +@keyframes example {
 | 
	
		
			
				|  |  | +  from {
 | 
	
		
			
				|  |  | +    transform: scale(1.4);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  to {
 | 
	
		
			
				|  |  | +    transform: scale(1);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/deep/ .upDownList {
 | 
	
		
			
				|  |  | +  z-index: 1;
 | 
	
		
			
				|  |  | +  padding: 0.2rem 0;
 | 
	
		
			
				|  |  | +  box-shadow: 0 0.05rem 0.15rem 0.01rem #efefef;
 | 
	
		
			
				|  |  | +  position: relative;
 | 
	
		
			
				|  |  | +  background-color: #fff;
 | 
	
		
			
				|  |  | +  .uDownBut {
 | 
	
		
			
				|  |  | +    border: 0.02rem solid #e4e4e4;
 | 
	
		
			
				|  |  | +    font-size: 0.26rem;
 | 
	
		
			
				|  |  | +    width: 2.3rem;
 | 
	
		
			
				|  |  | +    padding: 0.1rem 0.1rem;
 | 
	
		
			
				|  |  | +    margin: 0 0.3rem;
 | 
	
		
			
				|  |  | +    color: #378df9e8;
 | 
	
		
			
				|  |  | +    text-align: center;
 | 
	
		
			
				|  |  | +    border-radius: 0.05rem;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.pre {
 | 
	
		
			
				|  |  | +  margin: 0 !important;
 | 
	
		
			
				|  |  | +  font-family: 微软雅黑;
 | 
	
		
			
				|  |  | +  white-space: pre-wrap; /*css-3*/
 | 
	
		
			
				|  |  | +  white-space: -moz-pre-wrap; /*Mozilla,since1999*/
 | 
	
		
			
				|  |  | +  white-space: -pre-wrap; /*Opera4-6*/
 | 
	
		
			
				|  |  | +  white-space: -o-pre-wrap; /*Opera7*/
 | 
	
		
			
				|  |  | +  word-wrap: break-word; /*InternetExplorer5.5+*/
 | 
	
		
			
				|  |  | +  background-color: #f6f6f6;
 | 
	
		
			
				|  |  | +  padding: 0.1rem 0.2rem;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.pre2 {
 | 
	
		
			
				|  |  | +  margin: 0 !important;
 | 
	
		
			
				|  |  | +  font-family: 微软雅黑;
 | 
	
		
			
				|  |  | +  white-space: pre-wrap; /*css-3*/
 | 
	
		
			
				|  |  | +  white-space: -moz-pre-wrap; /*Mozilla,since1999*/
 | 
	
		
			
				|  |  | +  white-space: -pre-wrap; /*Opera4-6*/
 | 
	
		
			
				|  |  | +  white-space: -o-pre-wrap; /*Opera7*/
 | 
	
		
			
				|  |  | +  word-wrap: break-word; /*InternetExplorer5.5+*/
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.bian::after {
 | 
	
		
			
				|  |  | +  content: '';
 | 
	
		
			
				|  |  | +  position: absolute;
 | 
	
		
			
				|  |  | +  width: 1px;
 | 
	
		
			
				|  |  | +  top: 0.5rem;
 | 
	
		
			
				|  |  | +  left: 0.21rem;
 | 
	
		
			
				|  |  | +  bottom: 0;
 | 
	
		
			
				|  |  | +  border-right: 1px dashed #ccc;
 | 
	
		
			
				|  |  | +  height: 100%;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.isIos {
 | 
	
		
			
				|  |  | +  padding-bottom: 0.4rem !important;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/deep/ .overall {
 | 
	
		
			
				|  |  | +  // width: 100%;
 | 
	
		
			
				|  |  | +  // width: 7.49rem;
 | 
	
		
			
				|  |  | +  height: calc(100% - 1.92rem) !important;
 | 
	
		
			
				|  |  | +  position: relative;
 | 
	
		
			
				|  |  | +  overflow-y: scroll;
 | 
	
		
			
				|  |  | +  // overflow-y: auto;
 | 
	
		
			
				|  |  | +  // overflow-x: hidden;
 | 
	
		
			
				|  |  | +  // display: inline-block;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +header {
 | 
	
		
			
				|  |  | +  font-size: 0.31rem;
 | 
	
		
			
				|  |  | +  background-color: #fff;
 | 
	
		
			
				|  |  | +  padding: 0.3rem 0 0.3rem 0.3rem;
 | 
	
		
			
				|  |  | +  font-size: 0.3rem;
 | 
	
		
			
				|  |  | +  z-index: 1;
 | 
	
		
			
				|  |  | +  box-sizing: border-box;
 | 
	
		
			
				|  |  | +  .pdHeadDept {
 | 
	
		
			
				|  |  | +    color: rgb(117, 117, 117);
 | 
	
		
			
				|  |  | +    padding-top: 0.03rem;
 | 
	
		
			
				|  |  | +    font-size: 0.25rem;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.backlog_list_tit {
 | 
	
		
			
				|  |  | +  background-color: #f5f7fa;
 | 
	
		
			
				|  |  | +  padding: 0.2rem 0 0.2rem 0.2rem;
 | 
	
		
			
				|  |  | +  font-size: 0.28rem;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.backlog_list {
 | 
	
		
			
				|  |  | +  padding: 0.32rem 0.45rem;
 | 
	
		
			
				|  |  | +  span {
 | 
	
		
			
				|  |  | +    padding-left: 0.25rem;
 | 
	
		
			
				|  |  | +    font-size: 0.29rem;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.arrow::-webkit-scrollbar,
 | 
	
		
			
				|  |  | +.overall::-webkit-scrollbar {
 | 
	
		
			
				|  |  | +  //隐藏滚动条
 | 
	
		
			
				|  |  | +  width: 0px;
 | 
	
		
			
				|  |  | +  height: 0px;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.arrow {
 | 
	
		
			
				|  |  | +  position: relative;
 | 
	
		
			
				|  |  | +  width: 7.17rem;
 | 
	
		
			
				|  |  | +  overflow-x: auto;
 | 
	
		
			
				|  |  | +  white-space: nowrap;
 | 
	
		
			
				|  |  | +  padding-right: 1rem;
 | 
	
		
			
				|  |  | +  div {
 | 
	
		
			
				|  |  | +    position: relative;
 | 
	
		
			
				|  |  | +    display: inline-block;
 | 
	
		
			
				|  |  | +    margin-right: 0.12rem;
 | 
	
		
			
				|  |  | +    box-shadow: 0 0.06rem 0.1rem -0.07rem #828282;
 | 
	
		
			
				|  |  | +    .diamondo {
 | 
	
		
			
				|  |  | +      background-color: #e8e8e8;
 | 
	
		
			
				|  |  | +      max-height: 0.42rem;
 | 
	
		
			
				|  |  | +      font-size: 0.26rem;
 | 
	
		
			
				|  |  | +      border-top-left-radius: 0.04rem;
 | 
	
		
			
				|  |  | +      border-bottom-left-radius: 0.04rem;
 | 
	
		
			
				|  |  | +      padding: 0.13rem 0.2rem 0.1rem 0.5rem;
 | 
	
		
			
				|  |  | +      display: inline-block;
 | 
	
		
			
				|  |  | +      i {
 | 
	
		
			
				|  |  | +        color: rgb(43, 117, 255);
 | 
	
		
			
				|  |  | +        // position: absolute;
 | 
	
		
			
				|  |  | +        margin-left: 0.12rem;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      .arrowdetails {
 | 
	
		
			
				|  |  | +        max-width: 4.5rem;
 | 
	
		
			
				|  |  | +        overflow: hidden;
 | 
	
		
			
				|  |  | +        text-overflow: ellipsis;
 | 
	
		
			
				|  |  | +        white-space: nowrap;
 | 
	
		
			
				|  |  | +        display: inline-block;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      .arrowdetails1 {
 | 
	
		
			
				|  |  | +        padding-left: 0.25rem;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      .flowPadd {
 | 
	
		
			
				|  |  | +        padding-right: 0.2rem;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .diamondo1 {
 | 
	
		
			
				|  |  | +      padding: 0.13rem 0.2rem 0.1rem 0.3rem;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    .diamondTzj,
 | 
	
		
			
				|  |  | +    .diamondTyj {
 | 
	
		
			
				|  |  | +      border-width: 0.33rem;
 | 
	
		
			
				|  |  | +      border-style: solid;
 | 
	
		
			
				|  |  | +      border-color: transparent transparent transparent #ffffff;
 | 
	
		
			
				|  |  | +      display: inline-block;
 | 
	
		
			
				|  |  | +      position: absolute;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .diamondTyj {
 | 
	
		
			
				|  |  | +      border-color: transparent transparent transparent #e8e8e8;
 | 
	
		
			
				|  |  | +      z-index: 1;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .active {
 | 
	
		
			
				|  |  | +    .diamondo {
 | 
	
		
			
				|  |  | +      background-color: #ccdffb;
 | 
	
		
			
				|  |  | +      color: #1d96ff;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .diamondTzj {
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .diamondTyj {
 | 
	
		
			
				|  |  | +      border-color: transparent transparent transparent#ccdffb;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.managementRecord,
 | 
	
		
			
				|  |  | +.sidebar {
 | 
	
		
			
				|  |  | +  height: 0.38rem;
 | 
	
		
			
				|  |  | +  position: fixed;
 | 
	
		
			
				|  |  | +  right: 0px;
 | 
	
		
			
				|  |  | +  font-size: 0.27rem;
 | 
	
		
			
				|  |  | +  padding: 0.1rem 0.25rem;
 | 
	
		
			
				|  |  | +  border-top-left-radius: 0.05rem;
 | 
	
		
			
				|  |  | +  border-bottom-left-radius: 0.05rem;
 | 
	
		
			
				|  |  | +  display: flex;
 | 
	
		
			
				|  |  | +  color: #26a2ff;
 | 
	
		
			
				|  |  | +  background-color: #ecf5ff;
 | 
	
		
			
				|  |  | +  i {
 | 
	
		
			
				|  |  | +    // margin: 0.05rem 0.15rem 0 0;
 | 
	
		
			
				|  |  | +    margin-right: 0.15rem;
 | 
	
		
			
				|  |  | +    color: #26a2ff;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.managementRecord {
 | 
	
		
			
				|  |  | +  top: 66%;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.sidebar {
 | 
	
		
			
				|  |  | +  top: 71%;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.isdeliveryRecord_icon {
 | 
	
		
			
				|  |  | +  width: 0.28rem;
 | 
	
		
			
				|  |  | +  padding-right: 0.15rem;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/deep/ .footerBut {
 | 
	
		
			
				|  |  | +  position: fixed;
 | 
	
		
			
				|  |  | +  left: 0px;
 | 
	
		
			
				|  |  | +  bottom: 0px;
 | 
	
		
			
				|  |  | +  width: 100%;
 | 
	
		
			
				|  |  | +  background-color: #ffffff;
 | 
	
		
			
				|  |  | +  z-index: 999;
 | 
	
		
			
				|  |  | +  .footweight {
 | 
	
		
			
				|  |  | +    padding: 0.15rem 0 0.15rem 0.3rem;
 | 
	
		
			
				|  |  | +    background-color: #deeeff;
 | 
	
		
			
				|  |  | +    font-size: 0.27rem;
 | 
	
		
			
				|  |  | +    color: #1d96ff;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .footfoot {
 | 
	
		
			
				|  |  | +    padding: 0.1rem;
 | 
	
		
			
				|  |  | +    .footcol {
 | 
	
		
			
				|  |  | +      text-align: center;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .footcolBut {
 | 
	
		
			
				|  |  | +      border: 0;
 | 
	
		
			
				|  |  | +      width: 2rem;
 | 
	
		
			
				|  |  | +      height: 0.8rem;
 | 
	
		
			
				|  |  | +      font-size: 0.28rem;
 | 
	
		
			
				|  |  | +      color: #fff;
 | 
	
		
			
				|  |  | +      background-color: #42a8ff;
 | 
	
		
			
				|  |  | +      border-radius: 3px;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    .footBut {
 | 
	
		
			
				|  |  | +      display: flex;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .gradefootcolButok {
 | 
	
		
			
				|  |  | +      width: 2.8rem;
 | 
	
		
			
				|  |  | +      height: 0.8rem;
 | 
	
		
			
				|  |  | +      font-size: 0.28rem;
 | 
	
		
			
				|  |  | +      border: 0;
 | 
	
		
			
				|  |  | +      color: #fff;
 | 
	
		
			
				|  |  | +      background-color: #42a8ff;
 | 
	
		
			
				|  |  | +      border-radius: 3px;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .footcolButno,
 | 
	
		
			
				|  |  | +    .footcolButok {
 | 
	
		
			
				|  |  | +      width: 1.4rem;
 | 
	
		
			
				|  |  | +      height: 0.8rem;
 | 
	
		
			
				|  |  | +      font-size: 0.28rem;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .footcolButno {
 | 
	
		
			
				|  |  | +      border: 1px solid #42a8ff;
 | 
	
		
			
				|  |  | +      color: #2f9eff;
 | 
	
		
			
				|  |  | +      background-color: #ffffff;
 | 
	
		
			
				|  |  | +      border-top-left-radius: 3px;
 | 
	
		
			
				|  |  | +      border-bottom-left-radius: 3px;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .footcolButok {
 | 
	
		
			
				|  |  | +      border: 0;
 | 
	
		
			
				|  |  | +      color: #fff;
 | 
	
		
			
				|  |  | +      background-color: #42a8ff;
 | 
	
		
			
				|  |  | +      border-top-right-radius: 3px;
 | 
	
		
			
				|  |  | +      border-bottom-right-radius: 3px;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.commButt {
 | 
	
		
			
				|  |  | +  position: fixed;
 | 
	
		
			
				|  |  | +  left: 0px;
 | 
	
		
			
				|  |  | +  bottom: 0px;
 | 
	
		
			
				|  |  | +  width: 100%;
 | 
	
		
			
				|  |  | +  background-color: #ffffff;
 | 
	
		
			
				|  |  | +  z-index: 999;
 | 
	
		
			
				|  |  | +  text-align: center;
 | 
	
		
			
				|  |  | +  border-top: 1px solid #dedede;
 | 
	
		
			
				|  |  | +  .commButtno {
 | 
	
		
			
				|  |  | +    border-radius: 0.1rem;
 | 
	
		
			
				|  |  | +    width: 3.2rem;
 | 
	
		
			
				|  |  | +    height: 0.9rem;
 | 
	
		
			
				|  |  | +    border: 0;
 | 
	
		
			
				|  |  | +    font-size: 0.3rem;
 | 
	
		
			
				|  |  | +    color: #464646;
 | 
	
		
			
				|  |  | +    background-color: #f3f3f3;
 | 
	
		
			
				|  |  | +    text-align: center;
 | 
	
		
			
				|  |  | +    margin: 0.2rem 0.07rem;
 | 
	
		
			
				|  |  | +    line-height: 0.9rem;
 | 
	
		
			
				|  |  | +    border: 1px solid #d6d6d6;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .commButtok {
 | 
	
		
			
				|  |  | +    border-radius: 0.1rem;
 | 
	
		
			
				|  |  | +    width: 3.2rem;
 | 
	
		
			
				|  |  | +    height: 0.9rem;
 | 
	
		
			
				|  |  | +    border: 0;
 | 
	
		
			
				|  |  | +    font-size: 0.3rem;
 | 
	
		
			
				|  |  | +    color: #fff;
 | 
	
		
			
				|  |  | +    background-color: #4498ef;
 | 
	
		
			
				|  |  | +    text-align: center;
 | 
	
		
			
				|  |  | +    margin: 0.2rem 0.07rem;
 | 
	
		
			
				|  |  | +    line-height: 0.9rem;
 | 
	
		
			
				|  |  | +    border: 1px solid #36a2ff;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.modTit {
 | 
	
		
			
				|  |  | +  background-color: #efefef;
 | 
	
		
			
				|  |  | +  padding: 0.27rem 0.3rem 0.15rem;
 | 
	
		
			
				|  |  | +  font-size: 0.28rem;
 | 
	
		
			
				|  |  | +  color: #8a8a8a;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.modCont {
 | 
	
		
			
				|  |  | +  padding: 0.3rem;
 | 
	
		
			
				|  |  | +  background-color: #fff;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.stanif {
 | 
	
		
			
				|  |  | +  .stanTit {
 | 
	
		
			
				|  |  | +    font-size: 0.26rem;
 | 
	
		
			
				|  |  | +    color: #222;
 | 
	
		
			
				|  |  | +    margin: 0.2rem 0 0.08rem 0;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .standara {
 | 
	
		
			
				|  |  | +    border: 1px solid #efefef;
 | 
	
		
			
				|  |  | +    border-radius: 5px;
 | 
	
		
			
				|  |  | +    .standarapad {
 | 
	
		
			
				|  |  | +      display: inline-block;
 | 
	
		
			
				|  |  | +      padding: 0.2rem;
 | 
	
		
			
				|  |  | +      font-size: 0.27rem;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.tab-List {
 | 
	
		
			
				|  |  | +  display: inline-block;
 | 
	
		
			
				|  |  | +  padding: 0.05rem 0.15rem;
 | 
	
		
			
				|  |  | +  background-color: #fdf6ec;
 | 
	
		
			
				|  |  | +  color: #ff9600;
 | 
	
		
			
				|  |  | +  font-size: 0.25rem;
 | 
	
		
			
				|  |  | +  margin-right: 0.1rem;
 | 
	
		
			
				|  |  | +  border-radius: 0.01rem;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.flexPopover {
 | 
	
		
			
				|  |  | +  padding: 0.25rem;
 | 
	
		
			
				|  |  | +  background-color: #fff;
 | 
	
		
			
				|  |  | +  .flex_one {
 | 
	
		
			
				|  |  | +    width: 100%;
 | 
	
		
			
				|  |  | +    height: 0.8rem;
 | 
	
		
			
				|  |  | +    font-size: 0.3rem;
 | 
	
		
			
				|  |  | +    border-radius: 1px;
 | 
	
		
			
				|  |  | +    background-color: #26a2ff;
 | 
	
		
			
				|  |  | +    color: #fff;
 | 
	
		
			
				|  |  | +    align-items: center;
 | 
	
		
			
				|  |  | +    div:nth-child(1) {
 | 
	
		
			
				|  |  | +      max-width: 80%;
 | 
	
		
			
				|  |  | +      padding: 0 0 0 0.2rem;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    div:nth-child(2) {
 | 
	
		
			
				|  |  | +      padding: 0 0.2rem 0 0;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.aite {
 | 
	
		
			
				|  |  | +  padding: 0.2rem;
 | 
	
		
			
				|  |  | +  font-size: 0.36rem;
 | 
	
		
			
				|  |  | +  cursor: pointer;
 | 
	
		
			
				|  |  | +  position: absolute;
 | 
	
		
			
				|  |  | +  top: -0.8rem;
 | 
	
		
			
				|  |  | +  //   width: 40px;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.employee_selector_popup {
 | 
	
		
			
				|  |  | +  height: 100%;
 | 
	
		
			
				|  |  | +  width: 100%;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.flexDiaWb {
 | 
	
		
			
				|  |  | +  max-height: 7rem;
 | 
	
		
			
				|  |  | +  overflow-y: auto;
 | 
	
		
			
				|  |  | +  overflow-x: hidden;
 | 
	
		
			
				|  |  | +  margin: 0.4rem 0;
 | 
	
		
			
				|  |  | +  padding: 0 0.2rem 0 0.3rem;
 | 
	
		
			
				|  |  | +  .flexDiaLL {
 | 
	
		
			
				|  |  | +    padding: 0 0 0.5rem 0;
 | 
	
		
			
				|  |  | +    position: relative;
 | 
	
		
			
				|  |  | +    .fdz {
 | 
	
		
			
				|  |  | +      display: flex;
 | 
	
		
			
				|  |  | +      .fdYuan {
 | 
	
		
			
				|  |  | +        width: 0.45rem;
 | 
	
		
			
				|  |  | +        height: 0.45rem;
 | 
	
		
			
				|  |  | +        border-radius: 50%;
 | 
	
		
			
				|  |  | +        z-index: 1;
 | 
	
		
			
				|  |  | +        display: flex;
 | 
	
		
			
				|  |  | +        justify-content: center;
 | 
	
		
			
				|  |  | +        align-items: center;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      .fdYuan1 {
 | 
	
		
			
				|  |  | +        background-color: rgb(80, 168, 255);
 | 
	
		
			
				|  |  | +        color: #fff;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      .fdYuan2 {
 | 
	
		
			
				|  |  | +        background-color: rgb(80, 168, 255);
 | 
	
		
			
				|  |  | +        color: #fff;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      .fdYuan3 {
 | 
	
		
			
				|  |  | +        background-color: #ccc;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      .fdShu {
 | 
	
		
			
				|  |  | +        width: 0.02rem;
 | 
	
		
			
				|  |  | +        height: 100%;
 | 
	
		
			
				|  |  | +        background-color: #ccc;
 | 
	
		
			
				|  |  | +        /* text-align: center; */
 | 
	
		
			
				|  |  | +        position: absolute;
 | 
	
		
			
				|  |  | +        top: 0;
 | 
	
		
			
				|  |  | +        left: 0.22rem;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      /deep/ .fdShu1 {
 | 
	
		
			
				|  |  | +        background-color: rgb(80, 168, 255);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .fdy {
 | 
	
		
			
				|  |  | +      display: flex;
 | 
	
		
			
				|  |  | +      // flex-wrap: wrap;
 | 
	
		
			
				|  |  | +      padding-left: 0.2rem;
 | 
	
		
			
				|  |  | +      font-size: 0.3rem;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    .fdyBlue {
 | 
	
		
			
				|  |  | +      color: #0099ff;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +</style>
 |