天天看點

layui表格及工作流二次開發實踐(一)

學而時習之不亦說乎

layui官網

安裝包下載下傳

進入官網點選立即下載下傳 下載下傳後的檔案如下:

layui表格及工作流二次開發實踐(一)

注:mock.js 是我自己加的,模拟背景接口資料用的

chooseRoleDialog.html清單彈窗頁面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="layui/css/layui.css">
    <script src="layui/layui.js"></script>
    <script src="editor-app/libs/jquery_1.11.0/jquery.min.js"></script>
    <script src="layui/mock.js"></script>
</head>
<style>
.user-dialog{
    width: 900px;
    display: block;
    margin: auto;
}
.user-dialog .tree-area{
    width: 100%;
    display: block;
    float: left
}
.user-dialog .table-area{
    display: block;
    float: left
}
.defined-area{
    padding-left: 80%;
    padding-top: 3%;
}
.layui-form-label{
    width: 95px;
}
</style>
<body>
<div class="user-dialog">
<!--    <div class="tree-area">-->
<!--        <div id="tree_id" class="demo-tree-more"></div>-->
<!--    </div>-->
    <div class="table-area">
        <div class="layui-form-item">
            <div class="layui-inline">
                <label class="layui-form-label">角色分類編碼</label>
                <div class="layui-input-inline">
                    <input type="tel" id="roleSortCode" name="roleSortCode"  autocomplete="off" class="layui-input">
                </div>
            </div>
            <div class="layui-inline">
                <label class="layui-form-label">角色分類名稱</label>
                <div class="layui-input-inline">
                    <input type="text" id="roleSortName" name="roleSortName" autocomplete="off" class="layui-input">
                </div>
            </div>
            <button type="button" class="layui-btn" onclick="queryTable()">查詢</button>
            <button type="button" class="layui-btn" onclick="resetQuery()">重置</button>
        </div>
        <table class="layui-hide" id="user_table" lay-filter="test"></table>
        <div id="page"></div>
<!--        <div class="layui-btn-container defined-area">-->
<!--            <button type="button" class="layui-btn" onclick="canSave()">确定</button>-->
<!--            <button type="button" class="layui-btn" onclick="closeDialog()">取消</button>-->
<!--        </div>-->
    </div>
</div>

<script>
    layui.config({
        version: '1591161919724' //為了更新 js 緩存,可忽略
    });
    var userStr = "";
    var selectUser = [];
    var selectUserId = [];
    var requestUrl = "http://xx.xx.xx.xx:8890/upms/roleSort/pageRoleSort";
    var getTableData;
    var requestParams = {pageNum:1,pageSize:10,roleSortCode:"",roleSortName:""}
    var response = {};
    var tree,layer,util,laypage,table;
    layui.use(['tree', 'util','laypage', 'layer', 'table','element', 'slider'], function() {
        tree = layui.tree
        layer = layui.layer
        util = layui.util
        laypage = layui.laypage //分頁
        table = layui.table //表格

        //頁面第一次請求 預設 1頁 10條
        getTableData = function getTableDatas(params,response) {
            $.ajax({
                url: requestUrl+'?pageNum='+params.pageNum+'&pageSize='+params.pageSize
                    +'&roleCode='+params.roleSortCode+'&roleName='+params.roleSortName,
                type:'GET',
                async: false,
                dataType:'json',
                success:function(res){
                    response = res.data;
                    rendTable(response);
                    page(response);
                    // 表格監聽
                    table.on('checkbox(test)', function(obj){
                        if(obj.checked && obj.type=='all'){// 全選
                            for(var i in response.records){
                                var rowData = response.records[i];
                                if(selectUserId.indexOf(parseInt(rowData.id)) == -1){
                                    selectUser.push(rowData);
                                }
                            }
                        }else if(!obj.checked && obj.type=='all'){// 全不選
                            for(var i = 0;i< selectUser.length;i++){
                                for(var j = 0;j< response.records.length;j++){
                                    var rowData = response.records[j];
                                    if(parseInt(selectUser[i].id) == parseInt(rowData.id)){
                                       selectUser.splice(i,1);
                                    }
                                }
                            }
                        }else if (obj.checked){//單個選
                             selectUser.push(obj.data);
                        }else if (!obj.checked){//單個取消選擇
                            for(var i in selectUser){
                                if(selectUser[i].id == obj.data.id){
                                    selectUser.splice(i,1);
                                }
                            }
                        }
                        selectUserId = [];
                        for(var i in selectUser){
                            selectUserId.push(selectUser[i].id);
                        }
                    });
                },
                error:function(status){
                    response = {};
                }
            });
        }

        // 重構資料 增加選中屬性
        function rebuildTableData(response){
            var role_ids= window.parent.document.getElementById("roles_id").value;
            if(role_ids){
                var select_list = role_ids.split(";");
                // 資料回顯選中  這部分邏輯可以放到背景實作
                for(var r in select_list){
                    var id = select_list[r].substring(0,select_list[r].indexOf(","));
                    var roleSortName = select_list[r].substring(select_list[r].indexOf(",")+1,select_list[r].lastIndexOf(","));
                    var roleSortCode = select_list[r].substring(select_list[r].lastIndexOf(",")+1,select_list[r].length);
                    var map = {};
                    map.id = id;
                    map.roleSortName = roleSortName;
                    map.roleSortCode = roleSortCode;
                    if(id){
                        selectUser.push(map);
                        selectUserId.push(parseInt(id));
                    }
                }
                for(var i in response.records){
                    var rowData = response.records[i];
                    if(selectUserId.indexOf(rowData.id)!=-1){
                        rowData.LAY_CHECKED = true;
                    } else {
                        rowData.LAY_CHECKED = false;
                    }
                }
            }
            console.log(response.records);
        }

        // 表格渲染
        function rendTable(response) {
            rebuildTableData(response);
            table.render({
                elem: '#user_table',
                cols:  [[ //表頭
                    {type: 'checkbox', fixed: 'left'}
                    ,{field: 'id', title: 'id', hide:true}
                    ,{field: 'roleSortCode', title: '角色分類編碼', width:'30%'}
                    ,{field: 'roleSortName', title: '角色分類名稱', width: '30%', sort: true, totalRow: true}
                    ,{field: 'remark', title: '備注', width:'40%', sort: true}
                ]],
                data: response.records, // 資料
                limit: response.total, // 顯示的條數
                //page: true, // 開啟分頁
                done: function(res, curr, count){

                }
            });
        }
        // 分頁
        function page(response) {
            laypage.render({
                elem: 'page',
                count: response.total,
		curr: response.current,
                limit: requestParams.pageSize,
                limits: [10, 20, 30, 40, 50],
                layout: ['count', 'prev', 'page', 'next', 'limit', 'skip'],
                jump: function (obj, first) {
                    //首次不執行
                    if (!first) {
                        requestParams.pageNum = obj.curr;
                        requestParams.pageSize = obj.limit;
                        getTableData(requestParams,response)
                    }
                },
                yes:function(index, layero){
                    layer.close(index);//需手動關閉 彈出層
                }
            });
        }
        //getTableData(requestParams, response);
	queryTable();
    });

    // 查詢
    function queryTable(){
        requestParams.roleSortName = $("#roleSortName").val()==""?'':$("#roleSortName").val().trim();
        requestParams.roleSortCode = $("#roleSortCode").val()==""?'':$("#roleSortCode").val().trim();
        getTableData(requestParams, response);
    }

    // 重置
    function resetQuery(){
        $("#roleSortCode").val("");
        $("#roleSortName").val("");
        requestParams = {pageNum:1,pageSize:10,roleSortCode:"",roleSortName:""};
        getTableData(requestParams, response);
    }

    // 确定
    function canSave(){
        userStr = '';
        for(var i in selectUser){
            if(i == selectUser.length-1){
                userStr += selectUser[i].id+","+selectUser[i].roleSortName+","+selectUser[i].roleSortCode;
            }else{
                userStr += selectUser[i].id+","+selectUser[i].roleSortName+","+selectUser[i].roleSortCode+";";
            }
        }
        console.log(userStr);
        return userStr;
    }

    //function closeDialog(){
    //    var index = parent.layer.getFrameIndex(window.name); //先得到目前iframe層的索引
    //    parent.layer.close(index);
    //}
    // --樹形結構
    // tree.render({
    //     elem: '#tree_id'
    //     ,data: data1
    //     ,showLine: true,
    //     click: function(obj){
    //         layer.msg(JSON.stringify(obj.data));
    //         var currTreeId = obj.data.id;
    //         //上一次點選的樹節點id
    //         var beforeTreeId =  $('#tree_id').val();
    //         if (currTreeId !== beforeTreeId){
    //             $('div [data-id="'+beforeTreeId+'"] div .layui-tree-txt').first().css('color','');
    //             $('div [data-id="'+currTreeId+'"] div .layui-tree-txt').first().css('color','#009688');
    //             $('#tree_id').val(obj.data.id);
    //         }
    //     }
    // });
</script>
</body>
</html>
           

說明

至此layui關于表格的查詢展示及勾選資料的回顯都已全部處理完畢;目前做這個功能是activity工作流的二次開發,本頁面實作的功能是工作流節點增加一個角色,點選彈出此頁面選擇角色。然後下次點選上次選中的資料需要被回顯即被勾選上了!

坑點:layui的表格複選框不支援jquery模拟點選事件,且如果用樣式控制選中下次點選時複選框會異常!關于選中與否,使用表格字段屬性

LAY_CHECKED

控制!

關于工作流繪制的二次開發"com-activity-demo"詳見本人gitee位址.下載下傳項目後需要在對應的庫生成對應的25張表。

注意:此項目工作流前端用的是angular.js,需要遵循其模闆文法;此處layui這個表格彈窗,我采用的是iframe标簽引入到對應的模闆頁面中的,是以涉及到iframe 标簽及其父子頁面傳值調用的方法,參考部落格:iframe父子頁面通信

此外,接口若有跨域需要在服務端添加允許跨域配置,且改寫了前端代碼後浏覽器會有本地緩存,crtl+f5重新整理後浏覽或直接采用無痕浏覽模式檢視!

小結

後面繼續寫寫activity之類的實踐篇,及補上springboot的學習總結篇!

餘路那麼長,還是得帶着虔誠上路...

繼續閱讀