順序審批流的簡單程式碼實現

Roy155發表於2020-12-31

透過白碼低程式碼開發平臺簡單實現根據使用者表設定的稽核人進行順序審批的審批流功能。

準備工作:

1、在使用者表中新增若干個審批人欄位,關聯使用者表。(我這裡只設定4級審批)

2、根據需要建立“申請單”資料表記錄申請資訊。

必須欄位:狀態(字元)、當前稽核人(關聯-使用者)、稽核歷史(集合-稽核單)

3、根據需要建立“稽核單”資料表記錄稽核人的稽核資訊。

必須欄位:稽核狀態(字元)、申請單(關聯-申請單)

實現步驟: 

  • 實現建立申請單的功能

1、在快速開發中建立“資料集”型別的“申請單”選單。

2、快速建立“新建”申請單功能

3、單擊新建的功能,進入流程設計頁,點選“新建申請單”步驟的設定。

將“申請人”設為當前使用者,

將“狀態”設為“1級審批”,

將“當前稽核人”設為當前使用者的1級審批,其餘根據需求設定。

4、將功能儲存釋出。

效果:

  • 實現當前審批人審批功能

1、步驟1:建立“選擇申請單”的功能,步驟1:選擇“狀態”不為“透過”且不為“駁回”,“當前稽核人”為當前使用者的“申請單”。

2、步驟2:新建一條“稽核單”,將“稽核狀態”設為必填下拉選項(透過、駁回),將“申請單”設為“選擇申請單”。

  • 實現流轉到下一審批人功能

1、新增“關聯獲取”步驟獲取申請人資訊,注意將所有欄位隱藏。

2、新增程式設計步驟,新增“選擇申請單”、“申請人”、“稽核資訊”三個引數,同時在程式碼區引用。

引用程式碼:

 let apply = await $params.apply;//申請單 
    let createUser = await $params.createUser;//建立人
    let approval = await $params.approval;//稽核記錄

3、新增狀態變數,引用申請單中的“狀態”欄位。

   //申請單當前狀態(本次稽核前)
    let status = apply["5feaf06febabb14ea012579b"];

欄位id獲取方式:

4、新增可以根據當前status來指定查詢使用者表的審批人的map

 
    //下一審批人查詢id
    let nextUserIdByStatusMap = {
        "1級審批": "5feaf1f908f77e4ea7fb6e04",//申請人的二級審批
        "2級審批": "5feaf20608f77e4ea7fb6e05",//申請人的三級審批
        "3級審批": "5feaf2309cff054eaf91ac69",//申請人的四級審批
        "4級審批": " "//當前狀態已經是4級審批則無下一級審批
    }

5、新增可以根據當前status指定下一狀態的map

 //下一狀態
    let nextStatusMap = {
        "1級審批": "2級審批",
        "2級審批": "3級審批",
        "3級審批": "4級審批"
    }

6、獲取下一稽核人

 //獲取下一稽核人
    let userEntity = "5ee84e626646265863211238";
    let nextUserId = createUser[nextUserIdByStatusMap[status]];
    let nextUser = await $plugin.data.getData(userEntity, nextUserId);

資料表entity獲取方法:

7、下一稽核人的判斷邏輯 

 //當前稽核狀態
let approvalStatus=approval["5feaf1219cff054eaf91ac5c"];
    //申請單entity
    let applyEntity="5feaefdaebabb14ea0125792";
    if(approvalStatus=="透過"&&nextUser._id){
        //稽核透過,且還有下一稽核人
    }else{
        //稽核駁回或無下一稽核人
    }


8、需要下一稽核人稽核時,更新申請單的 狀態 及 當前稽核人 欄位

 //更新申請單的 狀態 及 當前稽核人
        await $plugin.data.updateData(applyEntity, apply._id, {
            "5feaf06febabb14ea012579b": nextStatusMap[status],//狀態
            "5feaf0829664af4ea1062b4e": nextUser._id,//當前稽核人
        });

9、不存在下一稽核人或本次稽核駁回,更新申請單的 狀態 及 當前稽核人 欄位

   //更新申請單的 狀態 及 當前稽核人
        await $plugin.data.updateData(applyEntity, apply._id, {
            "5feaf06febabb14ea012579b": approvalStatus,//狀態
            "5feaf0829664af4ea1062b4e": "",//清空當前稽核人
        });

10、至此,功能已實現完畢,此時可儲存併發布功能。

程式設計完整程式碼:

async function runProcess($model = model, $plugin = plugin, $papplyams) {
    let apply = await $params.apply;//申請單 
    let createUser = await $params.createUser;//申請人
    let approval = await $params.approval;//稽核記錄
 
    //申請單當前狀態(本次稽核前)
let status = apply["5feaf06febabb14ea012579b"];
 
    //下一審批人查詢id
    let nextUserIdByStatusMap = {
        "1級審批": "5feaf1f908f77e4ea7fb6e04",//申請人的二級審批
        "2級審批": "5feaf20608f77e4ea7fb6e05",//申請人的三級審批
        "3級審批": "5feaf2309cff054eaf91ac69",//申請人的四級審批
        "4級審批": " "//當前狀態已經是4級審批則無下一級審批
}
 
    //下一狀態
    let nextStatusMap = {
        "1級審批": "2級審批",
        "2級審批": "3級審批",
        "3級審批": "4級審批"
}
 
    //獲取下一稽核人
    let userEntity = "5ee84e626646265863211238";
    let nextUserId = createUser[nextUserIdByStatusMap[status]];
let nextUser = await $plugin.data.getData(userEntity, nextUserId);
 
    //當前稽核狀態
    let approvalStatus = approval["5feaf1219cff054eaf91ac5c"];
    //申請單entity
    let applyEntity = "5feaefdaebabb14ea0125792";
    if (approvalStatus == "透過" && nextUser._id) {
        //稽核透過,且還有下一稽核人
        //更新申請單的 狀態 及 當前稽核人
        await $plugin.data.updateData(applyEntity, apply._id, {
            "5feaf06febabb14ea012579b": nextStatusMap[status],//狀態
            "5feaf0829664af4ea1062b4e": nextUser._id,//當前稽核人
        });
 
    } else {
        //稽核駁回或無下一稽核人
        //更新申請單的 狀態 及 當前稽核人
        await $plugin.data.updateData(applyEntity, apply._id, {
            "5feaf06febabb14ea012579b": approvalStatus,//狀態
            "5feaf0829664af4ea1062b4e": "",//清空當前稽核人
        });
    }
}

最終效果:

為方便測試,這裡設定4級稽核人都是我自己。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69981626/viewspace-2746955/,如需轉載,請註明出處,否則將追究法律責任。

相關文章