数据权限

功能目标

  • 集团负责人可以查看所有的数据信息
  • 大区负责人可以查看大区内所有门店的异常数据信息
  • 门店负责人只能看到自己门店内发生的异常数据信息
  • "员工状态"类事项不做权限控制,全平台都可以查看

图 1

权限过滤知识点

列表界面查询前事件-(自定义过滤条件-简单条件查询)

viewModel.on('beforeSearch',function(args){
    args.isExtend = true;
    var commonVOs = args.params.condition.commonVOs;  //通用检查查询条件
    commonVOs.push({
        itemName:'id',
        op:'eq',
        value1:''
    });
    commonVOs.push({
        itemName:'id',
        op:'in',
        value1:['1'.'2']
    });
})
条件 说明
itemName 查询区字段控件编码
op 比较符号,具体支持请查看查询区字段控件【比较符】属性,不同控制支持比较符不同
value1 传值

列表界面查询前事件-(自定义过滤条件-复杂条件查询)


viewModel.on('beforeSearch',function(args){
    args.isExtend = true;
    var conditions = args.params.condition;
    conditions.simpleVOs=
        [{
            "logicOp": "and",
            "conditions": [{
                "logicOp": "or",
                "conditions": [{
                    "field": "matter_type_m",
                    "op": "eq",
                    "value1": '3'
                    },
                    {
                    "field": "StaffNew",
                    "op": "in",
                    "value1": permissions
                }]
            }]
        }];
})
条件 说明
logicOp and/or
conditions 条件存储key
field 查询区字段控件编码
op 比较符号,具体支持请查看查询区字段控件【比较符】属性,不同控制支持比较符不同
value1 传值

同步函数

function(event){
    //自己的代码逻辑比如请求后台等相关比较耗时的操作,需要页面渲染和请求是同步执行而不是异步操作的情况
    var promise = new cb.promise(); //--第一步声明需要同步
    cb.rest.invokeFunction("2abae82cef154bd194d7069135011395", {},
      function(err, res) {
        promise.resolve();  //--第二步:执行完自己的逻辑后,释放同步
      });
}
函数 说明
promise 同步函数
invokeFunction 请求API函数方法

按钮显示控制

//TODO:button11qi  -----按钮编码
viewModel.get("button11qi").setVisible(false);  //设置按钮不显示
viewModel.get("button11qi").setVisible(true);  //设置按钮显示

后端API函数获取当前登录用户员工信息


let AbstractAPIHandler = require('AbstractAPIHandler');
  class MyAPIHandler extends AbstractAPIHandler {
   execute(request){
     //获取当前用户的身份信息-----------
     var currentUser = JSON.parse(AppContext()).currentUser;  //通过上下文获取当前的用户信息
     var sysId="diwork";
     var tenantId = currentUser.tenantId;
     var userids = [currentUser.id];
     var result = listOrgAndDeptByUserIds(sysId,tenantId,userids); //获取当前用户的组织和部门信息
     var resultJSON = JSON.parse(result);
     var userid;
     if("1"==resultJSON.status&&resultJSON.data!=null){
       //根据当前用户信息去查询员工表
       var userData = resultJSON.data;
       //业务系统员工id
       userid = userData[currentUser.id].id; //员工id
     }else{
       throw new Error("获取员工信息异常");
     }
   return {res:userid};
 }
}
exports({"entryPoint":MyAPIHandler});

【异常记录列表】权限过滤 功能实现

后端API函数----权限过滤

图 2

权限过滤后端函数


let AbstractAPIHandler = require('AbstractAPIHandler');
  class MyAPIHandler extends AbstractAPIHandler {
   execute(request){
     //获取当前用户的身份信息-----------
     var currentUser = JSON.parse(AppContext()).currentUser;
     var sysId="diwork";
     var tenantId = currentUser.tenantId;
     var userids = [currentUser.id];
     var result = listOrgAndDeptByUserIds(sysId,tenantId,userids);
     var resultJSON = JSON.parse(result);
     var userid;
     var allData;
     if("1"==resultJSON.status&&resultJSON.data!=null){
       //根据当前用户信息去查询员工表
       var userData = resultJSON.data;
       //业务系统员工id
       userid = userData[currentUser.id].id;
     }else{
       throw new Error("获取员工信息异常");
     }
     //先判断是否是集团的人员
     var orgsql = "select StaffNew from GT10261AT179.GT10261AT179.org1 where StaffNew='"+userid+"'";
     var orgres = ObjectStore.queryByYonQL(orgsql);
     if(orgres.length>0){
       allData="all";
     }else{
       //判断是否为管理人员 -----一个大区的区长默认为是有下属门店的,根据门店来获取区长信息 
     var managerSql = "select StaffNew, id, area.StaffNew as areapsn,area.id as areaid from GT10261AT179.GT10261AT179.stores1 where "
     +" StaffNew='"+userid+"' or area.StaffNew ='"+userid+"'";
     var res = ObjectStore.queryByYonQL(managerSql);
     //权限范围内的异常创建人,根据人来筛选
     var result = [];
     if(res.length>0){
       //说明是管理人员   --默认身份互斥
       res.forEach((data)=>{
         if(userid==data.areapsn){
           //说明是区长
           result.push(data.StaffNew);
         }
       })
       //加入自身
       result.push(userid);
     }
     }
   return {res:result,allData:allData};
 }
}
exports({"entryPoint":MyAPIHandler});

新增前端扩展函数----列表查询过滤

图 3

图 4

获取API函数id

图 5

列表查询过滤前端函数


function(event){
    let gridModel = viewModel.getGridModel();
    var commonVOs,reqCondition,permissions,alldata;
    viewModel.on('beforeSearch',function(args){
      //需要获取当前人的身份信息,确定默认的查询条件
      var promise = new cb.promise();
      setTimeout(function() {
        //TODO: API函数id
        cb.rest.invokeFunction("a85ffbc6110146fc8fc5af7c546bbec5", {},
      function(err, res) {
        if(err!=null){
          cb.utils.alert('查询数据异常');
          permissions = [];
          return false;
        }else{
          permissions = res.res;
          alldata = res.allData;
          //如果是员工不允许新增单据
          if(undefined==permissions||permissions.length==0){
            //将新增按钮隐藏btnAdd为按钮编码
            viewModel.get("btnAdd").setVisible(false);
          }
          args.isExtend = true;
          //请求数据的条件,获取统计信息的时候需要用到
          reqCondition= args.params.condition;
          commonVOs = args.params.condition.commonVOs;
          if(undefined==permissions){
            //设置一个不可能查询出数据的条件
            cb.utils.alert('查询数据异常--获取人员失败');
              commonVOs.push({
                itemName:'id',
                op:'eq',
                value1:''
              });
          }else{
            if(undefined==alldata){
              if(permissions.length>0){
                var conditions = args.params.condition;
                conditions.simpleVOs=
                  [{
                    "logicOp": "and",
                    "conditions": [{
                        "logicOp": "or",
                        "conditions": [{
                          "field": "matter_type_m",   //设置事项类型为员工状态
                          "op": "eq",
                          "value1": '3'
                          },
                          {
                          "field": "StaffNew",    //人员权限信息
                          "op": "in",
                          "value1": permissions
                        }]
                  }]
                }];
            }else{
              commonVOs.push({
                itemName:'matter_type_m',  //设置事项类型为员工状态
                op:'eq',
                value1:'3'
              });
            }
          }
        }
        promise.resolve();
        }
      })
      }, 10);
      return promise;
  })
}

【异常记录】卡片设置默认创建人 功能实现

调整【异常记录】卡片布局样式

图 6

图 7

图 8

图 9

设置创建人不可编辑

图 10

后端API函数----获取当前用户的员工id

图 11

API函数:获取当前用户的员工信息

let AbstractAPIHandler = require('AbstractAPIHandler');
  class MyAPIHandler extends AbstractAPIHandler {
   execute(request){
     var currentUser = JSON.parse(AppContext()).currentUser;
     var sysId="diwork";
     var tenantId = currentUser.tenantId;
     var userids = [currentUser.id];
     var result = listOrgAndDeptByUserIds(sysId,tenantId,userids);
     var resultJSON = JSON.parse(result);
     var userid;
     var username;
     if("1"==resultJSON.status&&resultJSON.data!=null){
       //根据当前用户信息去查询员工表
       var userData = resultJSON.data;
       //业务系统员工id
       userid = userData[currentUser.id].id;
       username = userData[currentUser.id].name;
     }else{
       throw new Error("获取员工信息异常");
     }
   return {userid:userid,username:username};
 }
}
exports({"entryPoint":MyAPIHandler});

新增前端扩展函数

设置创建人不可编辑

图 12

图 13

图 14

设置创建人默认值为当前用户

function (event) {
  var viewModel = this;
  //获取当前页面的单据状态
  var currentState = viewModel.getParams().mode;
  if("add"==currentState){    //add:新增态,edit:编辑态, browse:浏览态
    //需要请求后台设置当前创建者的默认值
    //TODO: api函数id
    cb.rest.invokeFunction("7e0dbb242a98483181c2ef91e041c2d8", {},
    function(err, res) {
      if(err!=null){
        cb.utils.alert('设置默认创建者异常');
      }else{
        //设置默认值
        viewModel.get("StaffNew_name").setValue(res.username);
        viewModel.get("StaffNew").setValue(res.userid);
      }
    })
  }
}

验证

填充数据

范围 二级范围 异常标题
大区一 大区一异常
门店一 门店一异常
大区二 大区二异常
集团 员工状态类异常

效果展示

集团页面预览效果

图 15

大区一预览效果

图 16

大区二预览效果

图 17

门店一预览效果

图 18

Copyright © 用友客户成功部 2020 all right reserved,powered by Gitbook修订时间: 2020-12-22 11:24:03

results matching ""

    No results matching ""