| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412 | <template>  <el-container>    <LoadingAll :isType="3">      <el-container>        <el-aside>          <div style="padding: 20px;padding-left: 20px;font-weight: 600;border-bottom: 1px solid #f1f1f1;font-size: 16px;">绩效系统</div>          <el-menu :default-active="activeIndex" class="el-menu-vertical-demo" ref="elMenu" :router="true" @select="activeRouter" :unique-opened="true">            <template v-for="(item, index) in routers">              <div v-if="item.children.length != 0" :key="index">                <el-menu-item :index="returnIndex(index, 0)" :route="item.children[0].path" :ref="item.children[0].path"  v-if="item.label=='工作台' || item.label=='我的绩效'">                  <div class="flex-box-ce">                    <svg-icon :icon-class="item.icon" class="svgIcon"></svg-icon>                    <span slot="title" style="margin-left: 5px;">{{ item.children[0].label }}</span>                  </div>                </el-menu-item>                <el-submenu :index="index.toString()" :key="index" v-else>                  <template slot="title">                    <div class="flex-box-ce">                      <svg-icon :icon-class="item.icon" class="svgIcon"></svg-icon>                      <span style="margin-left: 5px;">{{ item.label }}</span>                    </div>                  </template>                  <template v-for="(item2, index2) in item.children">                    <el-menu-item :index="returnIndex(index, index2)" :ref="item2.path" :route="item2.path" :key="index2" class="font-flex-word">                      <span slot="title" style="margin-left: 10px;width:120px">                        {{ item2.label }}                        <span :class="item2.label=='考核明细'? 'tio2':'tio'" v-if="getRole && (item2.label=='考核明细' || item2.label=='考核表设置')">                          {{item2.label=='考核明细' ? '再发起' : '先配置'}}                        </span>                      </span>                    </el-menu-item>                  </template>                </el-submenu>              </div>            </template>          </el-menu>        </el-aside>        <el-main>          <keep-alive :include="keepAliveView"><router-view/></keep-alive>        </el-main>      </el-container>    </LoadingAll>    <el-dialog :visible.sync="usingTheStrategy" width="680px" :before-close="navDialog" :close-on-click-modal="false">      <div>        <img style="width: 100%;" :src="'static/images/' + navList[navNew].image + '.png'" alt="" />        <div class="flex-box flex-d-center">          <el-button @click="navPath(navList[navNew].paths)" type="primary" plain>{{ navList[navNew].name }}</el-button>          <div>            <el-button v-if="navNew > 0" @click="navNew--">上一页</el-button>            <el-button v-if="navNew < 3" @click="navNew++" type="primary">下一页</el-button>            <el-button v-if="navNew == 3" type="primary" @click="usingTheStrategy = false">开始使用</el-button>          </div>        </div>      </div>    </el-dialog>  </el-container></template><script>import {mapGetters} from 'vuex';import LoadingAll from '@/components/LoadingAll';export default {  components:{LoadingAll},  data() {    return {      usingTheStrategy: false,      tutorialsvisible: false,      navList: [        { name: '去"新建考核模板"', image: 'nav_jx_1', paths: 'evaluate' },        { name: '去"发起考核"', image: 'nav_jx_2', paths: 'sponsorAssess' },        { name: '看"考核管理"', image: 'nav_jx_3', paths: 'assessManagement' },        { name: '看"绩效报表"', image: 'nav_jx_4', paths: 'statement' }      ],      navNew: 0,      activeIndex: '0-0',      routers: [],      url: '',      profile: this.$store.getters.user_info,      getRole: this.$getRole(1),      keepAliveView:['job','management','score','assessManagement','assessDetails','statement','set'],  //需要缓存的组件名称列表,用逗号分隔      keepAliveView2:['job','management','score','assessManagement','assessDetails','statement','set'],  //需要缓存的组件名称列表,用逗号分隔      userInfo: this.$userInfo(), //绩效接口人员信息    };  },  watch: {    $route(to,form) {      // console.log(to.name,form.name)       // 缓存页面,达到缓存页面条件的效果      if(to.name=='job'&&form.name=='assessManagement'){//首页        this.returnArr('job')      }else if(to.name=='management'&&form.name=='job'){//我管理的-更多        this.returnArr('management')      }else if(to.name=='score'&&form.name=='job'){//我评分的-更多        this.returnArr('score')      }else if(to.name=='assessManagement'&&form.name=='myPerformance'){//考核管理        this.returnArr('assessManagement')      }else if(to.name=='assessDetails'&&form.name=='assessManagement'){//考核管理2        this.returnArr('assessDetails')      }else if(to.name=='assessDetails'&&form.name=='sponsorAssess'){//发起考核进入-考核管理        this.returnArr('assessDetails')      }else if(to.name=='assessDetails'&&form.name=='analyse'){//结果分析-考核管理         this.returnArr('assessDetails')      }else if(to.name=='statement'&&form.name=='myPerformance'){//绩效报表        this.returnArr('statement')      }else if(to.name=='set'&&form.name=='statement'){//设置        this.returnArr('set')      }else if(to.name=='set'&&form.name=='job'){//设置        this.returnArr('set')      }else{        this.keepAliveView=JSON.parse(JSON.stringify(this.keepAliveView2));      }      var str = to.path;      this.routers.map((item, index) => {        if (item.path == str) {          this.activeIndex = index + '-' + index;          this.$setCache('performance_path', index + '-' + index);        }        item.children.map((item2, index2) => {          if (item2.path == str) {            this.activeIndex = index + '-' + index2;            this.$setCache('performance_path', index + '-' + index2);          }        });      });    }  },  computed: {    ...mapGetters(['site_info'])  },  created() {    this.setRouters();  },  mounted() {    this.getRole=this.$getRole(1);    // this.$nextTick(() => {    //   if (!this.$getCache('newNav') && this.getRole) {    //     this.usingTheStrategy = true;    //     this.$setCache('newNav', true);    //   }    // });  },  methods: {    returnArr(str){      this.keepAliveView=this.keepAliveView.filter(item=>{        return item!=str;      })      setTimeout(()=>{        this.keepAliveView=JSON.parse(JSON.stringify(this.keepAliveView2));      },1000)    },    returnIndex(str, str2) {      return str + '-' + str2;    },    //当刷新页面是控制左边导航栏的选中    activeRouter(index, indexPath) {      this.$setCache('setUrlName', null); //清空set页面的保存展示页面      this.$setCache('performance_path', indexPath[1] ? indexPath[1] : indexPath[0]);    },    navPath(paths) {      this.usingTheStrategy = false;      this.$router.push({ name: paths });    },    strategys() {      this.usingTheStrategy = true;      this.tutorialsvisible = false;    },    navDialog(done) {      done();      this.tutorialsvisible = true;    },    openHome() {      this.$router.push({ path: '/job' });    },    returnRoutersArr(str,routers) {      var routersArr = [];      routers.forEach(item => {        if (item.meta.groupCode == str) {          //获取对应模块的路由          routersArr.push(item);        }      });      return routersArr;    },    setRouters() {      // 刚进入来清除一些缓存      this.$removeCache(['isVariationJx', 'assessDetails', 'cache_s_m', 'indexSet', 'staffAssDet']);      let main = this.userInfo.per_permission.main;      let per_role = this.userInfo.per_permission.per_role; //用户的身份      let childrenRouter = [];      let routers=[];      this.$router.options.routes[0].children.some((item, i) => {        if (item.name == 'performanceIndex') {          childrenRouter = item.children.filter(e => {            if (e.meta) {              return e;            }          });          return true;        }      });      if (per_role == 'manager') {        if (main == 1) {//主管理员          this.setRole('masterAdministrator');          routers=childrenRouter        } else {//子管理员          this.setRole('childAdministrator');          routers = this.getChildRouter(childrenRouter, 'childAdministrator');        }      } else {        //员工||部门管理员        if (this.userInfo.employee_detail.manage_dept_ids.length > 0) {          this.setRole('deptManager');          routers = this.getChildRouter(childrenRouter, 'deptManager');        } else {          this.setRole('employee');          routers = this.getChildRouter(childrenRouter, 'employee');        }      }      let routersArr = [         { label: '工作台', children: this.returnRoutersArr('job',routers), icon: '#icon-gongzuotai1'},         { label: '绩效管理', children: this.returnRoutersArr('assessManagement',routers), icon: '#icon-tongxunlu_tianjiabumen'},         { label: '绩效报表', children: this.returnRoutersArr('statement',routers), icon: '#icon-shezhi_jiaose'},         { label: '我的绩效', children: this.returnRoutersArr('myPerformance',routers), icon: '#icon-yonghu'},         { label: '设置', children: this.returnRoutersArr('set',routers), icon: '#icon-shezhi_jichushezhi'},      ];      this.$setCache('performance_routers',routersArr);      this.routers=routersArr      let performance_path=this.$getCache('performance_path');      if (performance_path) {        this.activeIndex =performance_path;        if(performance_path=='0-0'){          this.$router.push({ path:'/job'});        }      }      let performanceIndex=this.$getCache('performanceIndex');      if (performanceIndex) {        this.$router.push({ path:performanceIndex});        this.$removeCache('performanceIndex')      }    },    setRole(str) {      this.$setCache('role', str);    },    //获取路由    getChildRouter(routerChildren, str) {      let permission = this.userInfo.per_permission.permission; //用户的权限      let routers = {}; //过滤后的路由,顺便去重      routerChildren.forEach(item => {        let role = item.meta.role;        let jurisdiction = item.meta.jurisdiction;        if (item.meta) {          //当没设置meta时不显示在导航栏上          if (role.indexOf(str) >= 0) {            if (str == 'employee' || str == 'deptManager') {              //当是员工||创始人||部门主管时,不需要验证权限              routers[item.name] = item;              return;            }            //当登录人是7.0部门管理者时写死显示绩效报表            if (item.name == 'statement' && this.$userInfo().employee_detail.manage_dept_ids.length > 0) {              routers[item.name] = item;              return;            }            permission.forEach(roleItem => {              if (jurisdiction) {                if (jurisdiction.indexOf(roleItem.id) >= 0) {                  routers[item.name] = item;                }              }            });          }        }      });      let routersArr = [];      for (let s in routers) {        routersArr.push(routers[s]);      }      return routersArr;    },  }};</script><style scoped="scoped" lang="scss">.tio{  font-size: 12px;  background-color: #FFF2CC;  border-radius: 5px;  color: #98683C;  padding: 0 2px;}.tio2{  font-size: 12px;  background-color: #D4E4FF;  border-radius: 5px;  color: #409EFF;  padding: 0 2px;}.appImg {  width: 200px;  height: 200px;}.data-all {  margin-bottom: 10%;  color: #595959;  text-align: center;} ::v-deep .el-dialog__header {      border-bottom: none;}.svgIcon {  font-size: 20px;  color: #99a9bf;}.el-menu-vertical-demo:not(.el-menu--collapse) {  width: 180px;}.el-header {  background-color: #fff;  padding: 0 !important;  border-bottom: 1px solid #f1f1f1;  position: relative;  box-sizing: border-box;  height: 60px;}.el-menu-vertical-demo:not(.el-menu--collapse) {  width: 180px;}.el-menu {  overflow: hidden;  border: none;}.el-aside {  transition: width 0.28s;  width: 180px !important;  background-color: #fff;  height: calc(100vh - 80px);  border-radius: 5px;}.el-aside::-webkit-scrollbar {  width: 0px;  background-color: #fff;}.el-aside::-webkit-scrollbar-thumb {  background-color: #ccc;}.container-all {  background-color: #f4f6f9;  height: 100%;  overflow: hidden;}.el-main {  height: calc(100vh - 80px);  overflow-y: scroll;  padding: 0 10px;  min-width: 1100px;}.logo-box {  max-width: 400px;  min-width: 180px;}.logo-box .logo {  width: 30px;  height: 30px;  margin-right: 5px;  border-radius: 6px;}.logo-box div {  font-size: 16px;  font-weight: 600;}.wn {  height: 26px;  width: 26px;  margin-right: 12px;  cursor: pointer;}.hea-right {  padding: 0 20px;}.upgrade {  margin-left: 10px;  margin-right: 10px;}.PCtutorials {  width: 100px;  color: #409EFF;  cursor: pointer;  border-radius: 3px;  text-align: center;  box-shadow: 1px 1px 0px 0px #ccc;  height: 35px;  line-height: 35px;  font-weight: 500;  text-align: center;  border: 2px solid #409EFF;  // background-image: linear-gradient(117deg, #00c6fb 0%, #005bea 100%);}// .PCtutorials:hover {//   background-color: #0055ff;// }</style>
 |