【Layui】------ layui实现table表格拖拽行、列位置的示例代码

news2024/11/20 9:20:46

 一、完整的示例代码:(请使用layui v2.8.3的版本)看懂就能用、不要照搬、照搬会出错误、拷贝重要代码改改符合你自己的需求。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>附件列表</title>
    <link rel="stylesheet" href="/libs/bootstrap/css/bootstrap.css">
    <link rel="stylesheet" href="/libs/layui/v2.8.3/css/layui2.css">
    <link rel="stylesheet" href="/libs/layui/soulTable.css">
    <!--<link rel="stylesheet" href="/libs/layui/plugins/formSelects/formSelects-v4.css">-->
    <link rel="stylesheet" href="/jruntime/views/layui/css/base.css">
    <link rel="stylesheet" href="/libs/font-awesome-4.7.0/css/font-awesome.min.css">
    <link rel="stylesheet" href="/libs/layui/v2.8.3/css/modules/layer.css">
    <!--<link rel="stylesheet" href="/libs/jstree_dark/dist/themes/default/style.min.css"/>-->
    <style>
        *::-webkit-scrollbar {
            /*滚动条整体样式*/
            width :10px;  /*高宽分别对应横竖滚动条的尺寸*/
            height: 10px;
        }
        .imxCheckbox{
            cursor: default;
        }
        .layui-form-item .layui-inline {
            margin-bottom: -2px;
        }
        .v_date {
            cursor: pointer;
            width: 100%;
            height: 30px;
        }
        .layui-bg-gray {
            background-color: #efefef!important;
            color: #666!important;
        }

        .div-file-search{
            position: absolute;
            top:20px;
            right: 30px;
        }
        .div-file-search button{
            background: linear-gradient(to right, #0984e3 0%,#3aaaff 100%);
        }

    </style>
</head>
<body>

<div id='frm-imp' style = "display : none ;height:150px"  >
    <div class="layui-card-body" >
        <div class="layui-row">
            <div class="layui-col-xs12 layui-col-sm12 layui-col-md12">
                <button type="button" class="layui-btn" id="btn-imp-template-download" ><a href="/dcs/fileGL_V2/download/文件数据导入模板.xls">下载模板</a></button>
                <button type="button" class="layui-btn" id="btn-imp-data-check" onclick="javasctip:window.fn_chk_data();">检查数据</button>
                <button type="button" class="layui-btn" id="btn-imp-data" onclick="javasctip:window.fn_imp_data();">导入数据</button>
            </div>
        </div>
        <div class="layui-row">
            <div class="layui-form-item layui-form-text">
            </div>
        </div>
        <div class="layui-row">
            <div class="layui-col-xs12 layui-col-sm12 layui-col-md12">
                <div class="layui-form-item layui-form-text">
                    <label class="layui-form-label">导入描述</label>
                    <div class="layui-input-block">
                                    <textarea placeholder="" class="layui-textarea" style="height: 300px" name="desc">
导入说明:
    1.使用【下载模板】功能下载模板。
    2.在模板中整理数据,一定不要改标题名称,列顺序可以更改。
    3.执行【导入数据】功能将将整理后的数据导入。

注意事项:
    1.数据要顶格放,顶部不要留空行,第一行放标题,第二行开始放数据
    2.数据列顺序可以不一致,但标题必须一致!
    3.导入数据缺少数据完整性验证,导入的单据必须重新审核一遍!

                                    </textarea>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<!--查询区块-->
<div class="layui-bg-gray">
    <div class="" style="background-color: #fff;">
        <div class="layui-col-md12">
            <div class="layui-panel">
                <form id="formWhereData" class="layui-form" lay-filter="layForm">
                    <div style="height: 20px;"></div>
                    <div class="layui-row">
                        <div class="layui-col-xs3 layui-col-sm3 layui-col-md3" style="display: none;">
                            <div class="layui-form-item">
                                <label class="layui-form-label" style="width: 100px;">全文内容:</label>
                                <div class="layui-input-block">
                                    <input type="text"  id="txt_Context"  autocomplete="off" placeholder="请输入关键字"  class="layui-input">
                                </div>
                            </div>
                        </div>
                        <div class="layui-col-xs3 layui-col-sm3 layui-col-md3">
                                <div class="layui-form-item">
                                    <label class="layui-form-label" style="width: 110px;">查询字段</label>
                                    <div class="layui-input-block">
                                        <select id="txt_Key" lay-filter="select_key">
                                            <option value="">--请选择--</option>
                                        </select>
                                    </div>
                                </div>
                            </div>

                        <div class="layui-col-xs1 layui-col-sm1 layui-col-md1">
                                <div class="layui-form-item">
                                    <!--<label class="layui-form-label">风险名称</label>-->
                                    <div class="layui-input-block" style="margin-left: 20px;">
                                        <select id="txtFuHao">
                                            <option value="包含">包含</option>
                                            <option value="等于">等于</option>
                                            <option value="范围">范围</option>
                                            <option value="大于">大于</option>
                                            <option value="小于">小于</option>
                                            <option value="大于等于">大于等于</option>
                                            <option value="小于等于">小于等于</option>
                                            <option value="不等于">不等于</option>
                                            <option value="不包含">不包含</option>
                                            <option value="字符开始">字符开始</option>
                                            <option value="字符结束">字符结束</option>
                                        </select>
                                    </div>
                                </div>
                            </div>
                        <div class="layui-col-xs2 layui-col-sm2 layui-col-md2">
                                <div class="layui-form-item">
                                    <div class="layui-input-block" style="margin-left: 20px;">
                                        <input type="text"  id="txt_Value"  autocomplete="off"  class="layui-input">
                                        <input type="text"  id="txt_Value_Time"  autocomplete="off"  class="layui-input" style="display: none;">
                                    </div>
                                </div>
                            </div>
                        <div class="layui-col-xs1 layui-col-sm1 layui-col-md1" style="max-width: 30px;">
                                <div class="layui-form-item" style="margin-left: 0px;">
                                    <div class="layui-input-block" style="margin-left: 0px;">
                                        <button type="button" class="btn dropdown-toggle edb-nav-btn" id="txtKeyList"
                                                data-toggle="dropdown" style="height: 38px;">
                                            <span class="caret"></span>
                                        </button>
                                        <ul class="dropdown-menu pull-right" style="max-height:400px; max-width:800px;  overflow:auto">
                                            <li id="Li2"><a href="#">无</a></li>
                                        </ul>
                                    </div>
                                </div>
                            </div>
                        <div class="layui-col-xs2 layui-col-sm2 layui-col-md2">
                                <div class="layui-form-item" style="margin-left: 20px;">
                                    <button type="button" class="layui-btn" id="btn-query">查询</button>
                                    <button type="button" class="layui-btn layui-btn-primary" id="btn-reset">重置</button>
                                </div>
                            </div>
                    </div>
                    <div style="height: 16px;"></div>
                </form>
                <div class="div-file-search">
                    <button type="button" class="layui-btn layui-btn-normal layui-btn-radius" id="btn-all-recall"><i class="fa fa-clipboard"></i> 全文检索</button>
                </div>
            </div>
        </div>
    </div>
</div>

<!--文件区块-->
<div class="layui-bg-gray">
        <div class="layui-row layui-col-space15" style="margin-top: 15px">
            <div class="layui-col-md12">
                <div class="layui-card">
                    <div class="layui-card-header">
                        <i class="fa fa-table"></i> 数据列表
                    </div>
                    <div class="layui-card-body imxList" style="padding: 3px 15px;">
                        <div class="edb-toolbar-2017">
                            <span id="btntable-add" class="edb-nav-btn">
                                <i class="fa fa-plus-square"></i>
                                <span>新增</span>
                            </span>
                            <span id="btntable-edit" class="edb-nav-btn">
                                <i class="fa fa-edit"></i>
                                <span>编辑</span>
                            </span>
                            <span id="btntable-del" class="edb-nav-btn">
                                <i class="fa fa-remove"></i>
                                <span>删除</span>
                            </span>
                            <span id="btntable-refresh" class="edb-nav-btn">
                                <i class="fa fa-refresh"></i>
                                <span>刷新</span>
                            </span>
                            <span id="btntable-move" class="edb-nav-btn">
                                <i class="fa fa-paper-plane"></i>
                                <span>批量迁移</span>
                            </span>
                            <span id="btntable-upload" class="edb-nav-btn">
                                <i class="fa fa-upload"></i>
                                <span>上传</span>
                            </span>
                            <span id="btntable-import" class="edb-nav-btn">
                                <i class="fa fa-upload"></i>
                                <span>导入数据</span>
                            </span>
                            <span id="btntable-export" class="edb-nav-btn">
                                <i class="fa fa-download"></i>
                                <span>导出数据</span>
                            </span>
                            <!--<span id="btntable-mult-time" class="edb-nav-btn">-->
                                <!--<i class="fa fa-check-square-o"></i>-->
                                <!--<span>批量修改有效时间</span>-->
                                <!--<div class="layui-mult-time" style="display: none;"></div>-->
                            <!--</span>-->
                            <span id="btntable-history" class="edb-nav-btn">
                                <i class="fa fa-history"></i>
                                <span>历史文件</span>
                            </span>
                            <span id="btntable-modify" class="edb-nav-btn">
                                <i class="fa fa-pencil"></i>
                                <span>修改文件</span>
                            </span>
                        </div>
                        <div style="margin-top:-5px;padding: 2px;">
                            <table id="tablemodel" lay-filter="tablemodelTable"></table>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

<!--批量迁移-->
<div id='frm-modify-move' style = "display : none ;height:500px"  scrolling=no>
    <table height="100%" width="100%">
        <tr><td height="100%">
            <iframe  frameborder=0  height="100%" style="padding: 10px;"  width="100%" scrolling=no ></iframe>
        </td></tr>
    </table>
</div>

<script src="/libs/jquery/jquery-3.2.1.min.js"></script>
<script src="/libs/bootstrap/js/bootstrap.js"></script>
<script src="/libs/layui/v2.8.3/layui.js"></script>
<script src="/libs/layer3.1.1/layer.js"></script>
<script src="/jruntime/views/core/core.js"></script>
<script src="/libs/split/split.min.js"></script>
<script src="/pub/comuse/comuse.js"></script>
<script src="/pub/comuse/module_common_method.js"></script>
<script src="/mpv/libs/mpvLyComon.js"></script>
<script type="text/html" id="ahtmltp">
    <a class="layui-table-link" TITLE="{{d.CNAME?d.CNAME:''}}" lay-event="view">{{d.CNAME?d.CNAME:''}}</a>
</script>

<script type="text/html" id="bars">
    <a class="layui-btn layui-btn-xs layui-btn-normal" lay-event="edit">修改</a>
    <a class="layui-btn layui-btn-xs" lay-event="preview">预览</a>
    <a class="layui-btn layui-btn-xs layui-btn-warm" lay-event="view">下载</a>
    <a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a>
</script>
<script type="text/html" id="bars_view">
    <a class="layui-btn layui-btn-xs" lay-event="preview">预览</a>
    <a class="layui-btn layui-btn-xs layui-btn-warm" lay-event="view">下载</a>
</script>

<script>

    var imx_bt=pub.Convert.fn_ConvertToString(jYd.form.getQueryString("bt"));
    var imx_ID=pub.Convert.fn_ConvertToString(jYd.form.getQueryString("id"));
    var imx_action=pub.Convert.fn_ConvertToString(jYd.form.getQueryString("action"));
    var imx_name=pub.Convert.fn_ConvertToString(jYd.form.getQueryString("name"));
    var _formMode="";

    if(imx_action=="view"){
        $("#btntable-upload" +
            ",#btntable-del" +
            ",#btntable-add" +
            ",#btntable-edit" +
            ",#btntable-move" +
            ",#btntable-import" +
            ",#btntable-export" +
            ",#btntable-history" +
            ",#btntable-modify" +
            ",#btntable-mult-time" +
            "").hide();
        _formMode=jYd.form.Mode.View;
    }else{
        _formMode=jYd.form.Mode.Modify;
    }

    if(imx_ID){
        $("#btntable-config").show();
    }

    window.fn_预览文件_VIEW=function(fileType,id){
        var v_url="/dcs/fileViewV2/file_prew.html?type={0}&id={1}".format(fileType,id);
        jYd.fnOpenWindow(v_url,
            '预览文件',
            {width: '100%', height: '100%'}
            ,function () {
            }
        );
    };

    $(document).ready(function () {


        /***重新渲染序号***/
        window.fn_重新渲染序号=function(){
            var jparams =[];
            jparams.push(imx_bt);
            var _api="com.dcs.bapi.TrainPlanManager.BAPI_Check_法规制度_数据";
            jYd.fnAjax(jparams,_api,function (ret) {
            });
        };
       // window.fn_重新渲染序号();

        var _full="full-200";
        var _col=[[
            {type: "checkbox", fixed: "left", width: 50},
            {field: 'ID', title: 'ID',hide: true},
            {type: "numbers",title:'序号', width: 50},
            {field: 'CNAME', title: '名称', minWidth: 600, align: 'left',sort:true},
            {field: 'PNAME', title: '目录', minWidth: 100, align: 'left',sort:true},
            {field: 'DOC_TYPE_NAME', title: '主题分类', minWidth: 130, align: 'left',sort:true},
            {field: 'DOC_PUBLISH_DPT_NAME', title: '发布部门', minWidth: 150, align: 'center',sort:true},
            {field: 'DOC_LSSUED_NUMBER', title: '发文字号', minWidth: 120, align: 'center',sort:true},
            {field: 'DOC_PUBLISH_TIME', title: '发布日期', minWidth: 120, align: 'center',templet:function (d) {
                     if(d.DOC_PUBLISH_TIME){
                         return d.DOC_PUBLISH_TIME.substring(0,10);
                     }else{
                         return "";
                     }
                },sort:true},
            {field: 'DOC_STATUS_NAME', title: '状态', minWidth: 100, align: 'center',sort:true},
            {field: 'DOC_CORP_SUIT', title: '公司适用', minWidth: 100, align: 'center',sort:true},
            {field: 'DOC_SUIT_TERM', title: '适用条例', minWidth: 100, align: 'center',sort:true},
            {field: 'DOC_SUIT_DPT_NAME', title: '适用部门', minWidth: 100, align: 'center',sort:true},
            // {field: 'IORDER', title: '文件序号', minWidth: 100, align: 'left'}
        ]];

        if(imx_action=="view"){
            _col[0].push({title: '操作', width:150, align:'center',fixed:'right', toolbar: '#bars_view'});
        }else{
            _col[0].push({ title: '操作', width:220, align:'center',fixed:'right', toolbar: '#bars'});
        }

        //查询条件
        window.fn_wherejson=function(action) {
            var _queryList=[];

            fn_wheresql(_queryList);

            var _op=$("#txtFuHao").val();
            var _name=$("#txt_Key").val();
            var _value="";
            if($("#txt_Value").css("display")=="none"){
                _value=$("#txt_Value_Time").val();
            }else{
                _value=$("#txt_Value").val();
            }
            _queryList.push({type:iMx.fn_fix_type_未知(_name),op:_op,name:_name,value:_value});


            if($("#txt_Context").val()!=""){
                _queryList.push({type:"全文检索",op:"等于",name:"全文检索",value:$("#txt_Context").val()});
            }

            var _array=[];
            if(window.parent._childIDs){
                var _childIDs=window.parent._childIDs;
                for(var i=0;i<_childIDs.length;i++){
                    _array.push({type:"string",name:"PID",op:'等于',value:_childIDs[i]} );
                }
                _queryList.push({type:'block',op:'or',value:_array});
            }
            _queryList.push({type:"未知",op:"不等于",name:"NODE_TYPE",value:"目录"});
            return pub.JSONEx.fn_ToString(_queryList);
        };

        //查询条件
        function fn_wheresql(_queryList){
            _queryList.push({type:"string",name:"TYPE",value:imx_bt});
        }

        // 自定义模块,这里只需要开放soulTable即可
        // 自定义模块,这里只需要开放soulTable即可
        layui.config({
            base: '/libs/layui/',   // 第三方模块所在目录
            version: 'v1.8.0' // 插件版本号
        }).extend({
            soulTable: 'soulTable/soulTable',
            tableChild: 'soulTable/tableChild',
            tableMerge: 'soulTable/tableMerge',
            tableFilter: 'soulTable/tableFilter',
            excel: 'soulTable/excel'
        }).use(['form', 'table','soulTable'], function () {
            var table = layui.table,
                form = layui.form,
                soulTable = layui.soulTable;


                /***文件表格初始化**/
                window.fn_load_table_data=function()
                {
                    //-------初始化
                    var v_filter=window.fn_wherejson("");
                    var v_order=' CODEPATH ASC, IORDER DESC ';

                    var __params=[];
                    __params.push(v_filter);
                    __params.push(v_order);

                    var __where = {};
                    __where.token = pub.State.Ticket;
                    __where.data=pub.JSONEx.fn_ToString(__params);
                    __where.api="com.dcs.bapi.AQMaterManager.BAPI_查询_安全资料_附件";
                    window.table_data=__where.data;
                    table.render({
                        elem: '#tablemodel',
                        url: '/imx/sys/layui_table_bapi',
                        method: 'POST',
                        height:_full,
                        cols:_col ,
                        page: true,
                        limit:25,
                        limits: [25 , 50, 100, 500, 1000,5000],
                        even: true,
                        id: "tablemodelTable",
                        where: __where,
                        request: {
                            pageName: 'pageIndex', //page
                            limitName: 'pageSize' //limit
                        },
                        rowDrag: {trigger: 'row', done: function(obj) {
                            // 完成时(松开时)触发
                            // 如果拖动前和拖动后无变化,则不会触发此方法
                            // console.log(obj.row) // 当前行数据
                            // console.log(obj.cache) // 改动后全表数据
                            // console.log(obj.oldIndex) // 原来的数据索引
                            // console.log(obj.newIndex) // 改动后数据索引
                            //全表数据
                            var objList=obj.cache;
                            //当前拖拽row
                            var oldRow=obj.row;
                            var dataObject={};
                            dataObject["ID"]=oldRow["ID"];
                            if(obj.newIndex==0){
                                dataObject["IORDER"] = Number(objList[obj.newIndex+1]["IORDER"])-1;//新序号
                            }else if(obj.newIndex==objList.length){
                                dataObject["IORDER"] = Number(objList[obj.newIndex-1]["IORDER"])+1;//新序
                            }else if(obj.newIndex>obj.oldIndex){
                                dataObject["IORDER"] = Number(objList[obj.newIndex-1]["IORDER"])+1;//新序号
                            }else{
                                dataObject["IORDER"] = Number(objList[obj.newIndex+1]["IORDER"])-1;//新序号
                            }
                           // console.log(JSON.stringify(dataObject));
                            fnOneRowDoIDCU("PUB_FILES","Modify",JSON.stringify(dataObject),function(){
                                window.fn_重新渲染序号();
                            });
                        }},
                        done: function(res, curr, count){
                            table.resize("tablemodelTable"); //重置表格尺寸
                            //开启列拖拽
                            if(imx_action!="view"){
                                soulTable.render(this);
                                soulTable.suspend('tablemodelTable', 'drag', false);//true 关闭列拖拽! false  开启列拖拽!
                                soulTable.suspend('tablemodelTable', 'rowDrag', false);//true 关闭行拖拽! false  开启行拖拽!
                                fn_click_date_time();
                            }

                        }
                    });
                };

                /***监听工具条***/
                table.on('tool(tablemodelTable)', function(obj){
                    var data = obj.data;
                    if(obj.event =='edit'){

                        var url="";
                        url = "/dcs/fileGL_V2/fileGl_file_card.html?action={0}&id={1}&bt={2}";
                        url = url.format(jYd.form.Mode.Modify,data["ID"],imx_bt);
                        jYd.fnOpenWindow(url,
                            '编辑',
                            {width: '60%', height: '85%'}
                            ,function () {
                                window.fn_load_table_data();
                            }
                        );


                    } else if(obj.event =='del'){
                        fn_批量删除(data["ID"],1);
                    } else if(obj.event == 'view'){
                        var _id=obj.data["ID"];
                        var url="/download?file={0}&token={1}".format(_id,encodeURIComponent(sessionStorage.getItem("_pub_token")));
                        window.open(decodeURI(url));
                    }else  if(obj.event=="preview"){
                        var file=data["FILE_TYPE"];
                        if(file=="pdf" || file=="PDF"){
                            window.fn_预览文件_VIEW(data["FILE_TYPE"],data["ID"])
                        }else{
                            iMx.fn_attachment_priview(data["FILE_TYPE"],data["ID"]);
                        }
                    }
                });

                /***双击row***/
                table.on('rowDouble(tablemodelTable)', function (obj) {
                    if(obj.data["FILE_TYPE"]=="pdf" || obj.data["FILE_TYPE"]=="PDF"){
                        window.fn_预览文件_VIEW(obj.data["FILE_TYPE"],obj.data["ID"])
                    }else{
                        iMx.fn_attachment_priview(obj.data["FILE_TYPE"],obj.data["ID"]);
                    }
                });

                /***编辑***/
                $("#btntable-edit").off("click").on("click",function () {
                    var checkStatus = table.checkStatus('tablemodelTable');
                    var selecteds = checkStatus.data;
                    if(selecteds.length==1){
                        var url="";
                        url = "/dcs/fileGL_V2/fileGl_file_card.html?action={0}&id={1}&bt={2}";
                        url = url.format(jYd.form.Mode.Modify,selecteds[0].ID,imx_bt);
                        jYd.fnOpenWindow(url,
                            '编辑',
                            {width: '60%', height: '85%'}
                            ,function () {
                                window.fn_load_table_data();
                            }
                        );
                    }
                    else{
                        layer.alert("请选择一条记录");
                    }
                });

                //region  查询key
                form.render();
                fn_setField_select();
                //使用列信息给查询字段赋值
                function fn_setField_select(){
                    $("#txt_Key").empty();
                    var col=_col[0];
                    for (var i = 0; i <= col.length - 1; i++) {
                        var __field = pub.Convert.fn_ConvertToString(col[i].field);
                        var __title = pub.Convert.fn_ConvertToString(col[i].title);

                        if (__field == "")
                            continue;

                        if (__field == "ID")
                            continue;

                        if (__title == "操作")
                            continue;

                        $("#txt_Key").append(" <option value='" + __field + "'>" + __title+ "</option>");
                        layui.form.render("select");
                    }
                    fnUpdateKeyList();
                    window.fn_load_table_data();
                }
                //查询keyList
                function fnUpdateKeyList() {
                    var __value =$("#txt_Key").val();
                    $("#txtKeyList").parent(".layui-input-block").find(".dropdown-menu").empty();

                    if (__value == "")
                        return;

                    iMx.fn_set_select_fuhao_default_value(__value);
                    var jparams =[];
                    jparams.push(__value);
                    jparams.push(window.fn_wherejson());
                    var _api="com.dcs.bapi.AQMaterManager.BAPI_查询_安全资料_KeyList";
                    jYd.fnAjax(jparams,_api,function (ret) {
                        var __dtKeyList=ret.json;
                        //-----------------
                        $("#txtKeyList").parent(".layui-input-block").find(".dropdown-menu").empty();
                        for (var i = 0; i <= __dtKeyList.length - 1; i++) {
                            var __value1 = pub.Convert.fn_ConvertToString(__dtKeyList[i].CNAME);
                            $("#txtKeyList").parent(".layui-input-block").find(".dropdown-menu").append(" <li ><a href='#' fieldname='" + __value1 + "'>" + __value1 + "</a></li>");
                        }
                        //-----------------
                        $("#txtKeyList").parent(".layui-input-block").find(".dropdown-menu").find("li").off("click").on("click", function (e) {
                            var __keyListCur = pub.Convert.fn_ConvertToString($(this).find("a").attr("fieldname"));

                            pub.DOM.fn_SetValueByID("#txt_Value", __keyListCur);
                            pub.DOM.fn_SetValueByID("#txt_Value_Time", __keyListCur);
                            pub.DOM.fn_SetTextByID("#txt_Value", __keyListCur);

                            e.stopPropagation();
                            e.preventDefault();
                            $("#txtKeyList").click();
                        })
                    });
                }

                form.on('select(select_key)', function(data){
                    fnUpdateKeyList();
                });
                //endregion 查询 key

        });

        /***新增***/
        $("#btntable-add").off("click").on("click",function () {
            var url="";
            url = "/dcs/fileGL_V2/fileGl_file_card.html?action={0}&id={1}&pname={2}&pid={3}&bt={4}";
            url = url.format(jYd.form.Mode.Add,"",imx_name,imx_ID,imx_bt);
            jYd.fnOpenWindow(url,
                '新增',
                {width: '60%', height: '85%'}
                ,function () {
                    window.fn_重新渲染序号();
                    window.fn_load_table_data();
                }
            );
        });


        /***上传文件***/
        $("#btntable-upload").on("click",function () {
            var url="";
            url = "/dcs/upload/aqzl_file.html?type={0}&id={1}&bt={2}";
            var bt=imx_ID+";"+imx_name+";文件";
            url = url.format(encodeURIComponent(imx_bt),imx_ID,bt);
            jYd.fnOpenWindow(url,
                '上传附件',
                {width: '60%', height: '70%'}
                ,function () {
                    window.fn_重新渲染序号();
                    window.fn_load_table_data();
                }
            );
        });





        /***查询***/
        $("#btn-query").on("click", function (e) {
            window.fn_load_table_data();
        });

        /***刷新****/
        $("#btntable-refresh").on("click", function (e) {
            window.fn_load_table_data();
        });

        /***重置***/
        $("#btn-reset").on("click", function (e) {
            $("#formWhereData")[0].reset();
        });

        /***批量删除***/
        $("#btntable-del").on("click",function (e) {

            var checkstatus = layui.table.checkStatus('tablemodelTable');
            if (checkstatus==null||checkstatus==undefined ||checkstatus.data.length<=0)
            {
                layer.msg("请先选择要删除的行!");
                return;
            }
            window._curNode=checkstatus.data[0];

            var __ids="";
            for(var i=0;i<checkstatus.data.length;i++) {

                if (__ids == "") {
                    __ids = checkstatus.data[i]["ID"];

                } else {
                    __ids = __ids + "," + checkstatus.data[i]["ID"];

                }
            }
            fn_批量删除(__ids,checkstatus.data.length);

        });

        function fn_批量删除(__ids,v_num) {
            top.layer.confirm('确认要删除选择的'+v_num+'个附件吗?',{zIndex:top.layer.zIndex}, function(index){
                top.layer.close(index);
                var jparams =[];
                jparams.push(__ids);

                var _api="com.dcs.bapi.AQMaterManager.BAPI_删除_安全资料";
                jYd.fnAjax(jparams,_api,function (ret) {
                    layer.msg(ret.message);
                    window.fn_重新渲染序号();
                    window.fn_load_table_data("refresh");
                });
            });
        }

        //region  历史文件
        /***历史文件***/
        $("#btntable-history").on("click",function () {
            var _rows=McoM.fn_get_select_row_layuiTable();//选择行

            if(_rows.length<=0){
                iMx.fn_show_layer_tip("请选择需要操作的文件");
                return;
            }

            var _fieldId=_rows[0]["ID"];
            var  url = "/pub/attachment/history_file_list.html?action={0}&masterId={1}";
            url = url.format(_formMode,_fieldId);
            jYd.fnOpenWindow(url,
                '历史文件列表',
                {width: '70%', height: '85%'}
                ,function () {
                    //关闭layer页面回调
                    McoM.fn_close_layer_page_fnCallBack(function () {
                        window.fn_load_table_data("query");
                    });
                });
        });

        /***修改文件***/
        $("#btntable-modify").on("click",function () {
            var _rows=McoM.fn_get_select_row_layuiTable();//选择行

            if(_rows.length<=0){
                iMx.fn_show_layer_tip("请选择需要修改文件的行");
                return;
            }
            var _data=_rows[0];
            McoM.fn_upload_update_attachment(_data,function () {
                window.fn_load_table_data("query");
                McoM.fn_insert_data_to_history_table(); //向历史表中插入数据

            });//修改上传文件
        });

        /***批量迁移***/
        $("#btntable-move").on("click",function (e) {

            var checkstatus = layui.table.checkStatus('tablemodelTable');
            if (checkstatus==null||checkstatus==undefined ||checkstatus.data.length<=0)
            {
                layer.msg("请先选择要迁移文件!");
                return;
            }
            var v_url="/dcs/aqzl_fjv2/selector_aqzlfile_orgright.html?allow_leaf_only=0&bt={0}";
                v_url=v_url.format(imx_bt);
            $("#frm-modify-move").find("iframe").attr("src",v_url);

            var __ids="";
            for(var i=0;i<checkstatus.data.length;i++) {

                if (__ids == "") {
                    __ids = checkstatus.data[i]["ID"];

                } else {
                    __ids = __ids + "," + checkstatus.data[i]["ID"];
                }
            }
            var __modifyfxdlayIndex=
                layer.open({
                    type: 1,
                    title: '批量迁移',
                    area: ['60%', '85%'],
                    btn: ['确认', '取消'],
                    btnAlign: 'c',   // 按钮居中
                    content: $('#frm-modify-move').html(),
                    success: function(layero, index){
                    },
                    yes: function(index, layero){
                        var __frame=$(layero).find("iframe")[0];
                        if(__frame.contentWindow.fn_get_selected_id().length==0){
                            layer.msg("没有目录,不能迁移!");
                            return;
                        }
                        var jparams =[];
                        jparams.push(__ids);
                        jparams.push(__frame.contentWindow.fn_get_selected_id());
                        jparams.push(__frame.contentWindow.fn_get_selected_name());
                        var _api="com.dcs.bapi.FileDataManager.BAPI_文件迁移新的目录_ACTION";
                        jYd.fnAjax(jparams,_api,function (ret) {
                            layer.msg("迁移成功!");
                            window.fn_重新渲染序号();
                            window.fn_load_table_data();
                            layer.close(__modifyfxdlayIndex);
                        });

                    }
                });
        });

        //endregion 时间组件 ,操作方法函数

        /***选择时间***/
        var fn_click_date_time=function () {
            $(".v_date").off("click").on("click",function (e) {
                var id=$(this).data("id");
                var field=$(this).data("field");
                var v_this=this;
                fn_click_laydate_time(v_this,id,field,e);
            });
        };

        /***选择时间范围***/
        var fn_click_laydate_time=function(v_this,id,field,e){
            layui.laydate.render({
                elem: v_this
                ,range: false
                ,show: true //直接显示
                ,format: 'yyyy-MM-dd'
                ,type:"date"
                ,done: function(value, date){ //监听日期被切换
                    var dataObject={};
                    dataObject["ID"]=id;
                    dataObject[field] = value;
                    fnOneRowDoIDCU("PUB_FILES","Modify",JSON.stringify(dataObject));
                }
            });
            e.stopPropagation();
            e.preventDefault();
        };

        /***操作方法***/
        function fnOneRowDoIDCU(table,action,strData,fnok,fnerror) {
            var api = "com.kongzhitech.bapi.TreeMgr.BAPI_TreeDo";
            var jparams =[];
            jparams.push(table);
            jparams.push(action);
            jparams.push(strData);
            jparams.push("CNAME");
            jYd.fnAjax(jparams,api,function (ret) {
                if (ret.success == 1) {
                    if(fnok){
                        fnok(ret);
                    }
                }
                else {
                    if(fnerror){
                        fnerror(ret);
                    }
                }
            },function (ret) {
                if(fnerror){
                    fnerror(ret);
                }
            });
        }

        /***批量修改有效时间***/
        $("#btntable-mult-time").on("click",function (e) {

            var checkstatus = layui.table.checkStatus('tablemodelTable');
            if (checkstatus==null||checkstatus==undefined ||checkstatus.data.length<=0)
            {
                layer.msg("请先选择数据!");
                return;
            }
            window._curNode=checkstatus.data[0];
            layui.laydate.render({
                elem: ".layui-mult-time"
                ,range: false
                ,show: true //直接显示
                ,format: 'yyyy-MM-dd'
                ,type:"date"
                ,done: function(value, date){ //监听日期被切换
                    for(var i=0;i<checkstatus.data.length;i++) {
                        var __ids= checkstatus.data[i]["ID"];
                        var dataObject={};
                        dataObject["ID"]=__ids;
                        dataObject["EXPIRATION_TIME"] = value;
                        fnOneRowDoIDCU("PUB_FILES","Modify",JSON.stringify(dataObject));
                    }
                    layer.msg("批量修改成功");
                    window.fn_load_table_data("query");
                }
            });
            $(".layui-laydate").css({"left": "10%","top": "20%"});
            e.stopPropagation();
            e.preventDefault();

        });

        /***全文检索***/
        $("#btn-all-recall").on("click",function () {
            var url="";
            url = "/dcs/file_search/file_search.html?bt={0}";
            url = url.format(encodeURIComponent(imx_bt));
            jYd.fnOpenWindow(url,
                '全文检索',
                {width: '100%', height: '100%'}
                ,function () {
                }
            );
        });


        /***上传文件***/
        window.fn_imp_data=function()
        {
            var url="";
            url = "/dcs/upload/work_fileV2.html?vtype={0}&vid={1}&voption={2}";
            url = url.format(encodeURIComponent("导入文件数据"),"",imx_bt);
            jYd.fnOpenWindow(url,
                '导入数据',
                {width: '60%', height: '70%'}
                ,function () {
                    window.fn_重新渲染序号();
                    window.fn_load_table_data("init");
                }
            );
        };

        window.fn_chk_data=function()
        {
            var url="";
            url = "/dcs/upload/work_fileV2.html?vtype={0}&vid={1}&voption={2}&check=1";
            url = url.format(encodeURIComponent("导入文件数据"),"",imx_bt);
            jYd.fnOpenWindow(url,
                '检查数据',
                {width: '60%', height: '70%'}
                ,function () {
                    window.fn_load_table_data("init");
                }
            );
        };

        $("#btntable-import").on("click",function (e) {

            //导入导出DIV
            var __impIndex=
                layer.open({
                    type: 1,
                    title: '导入数据',
                    area: ['600px', '500px'],
                    btn: ['关闭'],
                    btnAlign: 'c',   // 按钮居中
                    content: $('#frm-imp').html(),
                    success: function(layero, index){
                    },
                    btn1: function(index, layero){
                        layer.close(__impIndex);
                    }
                });
        });

        //导出数据
        $("#btntable-export").on("click",function (e) {
            var  mc_cols=[[
                {field: 'IORDER', title: '序号'},
                {field: 'CNAME', title: '名称'},
                {field: 'PNAME', title: '目录'},
                {field: 'DOC_TYPE_NAME', title: '主题分类'},
                {field: 'DOC_PUBLISH_DPT_NAME', title: '发布部门'},
                {field: 'DOC_LSSUED_NUMBER', title: '发文字号'},
                {field: 'DOC_PUBLISH_TIME', title: '发布日期'},
                {field: 'DOC_REVISE_TIME', title: '修订日期'},
                {field: 'DOC_ENABLE_TIME', title: '启用日期'},
                {field: 'DOC_STATUS_NAME', title: '状态'},
                {field: 'DOC_CORP_SUIT', title: '公司适用'},
                {field: 'DOC_SUIT_TERM', title: '适用条例'},
                {field: 'DOC_AREA', title: '生效区域'},
                {field: 'DOC_INDUSTRY_NAME', title: '行业'},
                {field: 'DOC_TYPE_NAME', title: '主题'},
                {field: 'DOC_SUIT_DPT_NAME', title: '适用部门'},
                {field: 'ID', title: 'ID'}
            ]];
            var jparams =[];
            jparams.push(pub.JSONEx.fn_ToString(mc_cols));
            jparams.push(window.fn_wherejson());
            var _api="com.dcs.bapi.FileDataManager.BAPI_导出文件数据";
            jYd.fnAjax(jparams,_api,function (obj) {
                var _id=obj.data;
                var url="/downloadtmpfile?file={0}&token={1}".format(encodeURIComponent(_id),encodeURIComponent(sessionStorage.getItem("_pub_token")));
                window.open(url);

            });
        });
    });
</script>
</body>
</html>

二、引用的重要的文件: 

 1. css文件:

  <link rel="stylesheet" href="/libs/layui/v2.8.3/css/layui2.css">
  <link rel="stylesheet" href="/libs/layui/soulTable.css">

 2. js文件:

<script src="/libs/jquery/jquery-3.2.1.min.js"></script>
<script src="/libs/layui/v2.8.3/layui.js"></script>

 

二、重要部分的代码:

1.主要代码:

  // 自定义模块,这里只需要开放soulTable即可
        // 自定义模块,这里只需要开放soulTable即可
        layui.config({
            base: '/libs/layui/',   // 第三方模块所在目录
            version: 'v1.8.0' // 插件版本号
        }).extend({
            soulTable: 'soulTable/soulTable',
            tableChild: 'soulTable/tableChild',
            tableMerge: 'soulTable/tableMerge',
            tableFilter: 'soulTable/tableFilter',
            excel: 'soulTable/excel'
        }).use(['form', 'table','soulTable'], function () {
            var table = layui.table,
                form = layui.form,
                soulTable = layui.soulTable;


                /***文件表格初始化**/
                window.fn_load_table_data=function()
                {
                    //-------初始化
                    var v_filter=window.fn_wherejson("");
                    var v_order=' CODEPATH ASC, IORDER DESC ';

                    var __params=[];
                    __params.push(v_filter);
                    __params.push(v_order);

                    var __where = {};
                    __where.token = pub.State.Ticket;
                    __where.data=pub.JSONEx.fn_ToString(__params);
                    __where.api="com.dcs.bapi.AQMaterManager.BAPI_查询_安全资料_附件";
                    window.table_data=__where.data;
                    table.render({
                        elem: '#tablemodel',
                        url: '/imx/sys/layui_table_bapi',
                        method: 'POST',
                        height:_full,
                        cols:_col ,
                        page: true,
                        limit:25,
                        limits: [25 , 50, 100, 500, 1000,5000],
                        even: true,
                        id: "tablemodelTable",
                        where: __where,
                        request: {
                            pageName: 'pageIndex', //page
                            limitName: 'pageSize' //limit
                        },
                        rowDrag: {trigger: 'row', done: function(obj) {
                            // 完成时(松开时)触发
                            // 如果拖动前和拖动后无变化,则不会触发此方法
                            // console.log(obj.row) // 当前行数据
                            // console.log(obj.cache) // 改动后全表数据
                            // console.log(obj.oldIndex) // 原来的数据索引
                            // console.log(obj.newIndex) // 改动后数据索引
                            //全表数据
                            var objList=obj.cache;
                            //当前拖拽row
                            var oldRow=obj.row;
                            var dataObject={};
                            dataObject["ID"]=oldRow["ID"];
                            if(obj.newIndex==0){
                                dataObject["IORDER"] = Number(objList[obj.newIndex+1]["IORDER"])-1;//新序号
                            }else if(obj.newIndex==objList.length){
                                dataObject["IORDER"] = Number(objList[obj.newIndex-1]["IORDER"])+1;//新序
                            }else if(obj.newIndex>obj.oldIndex){
                                dataObject["IORDER"] = Number(objList[obj.newIndex-1]["IORDER"])+1;//新序号
                            }else{
                                dataObject["IORDER"] = Number(objList[obj.newIndex+1]["IORDER"])-1;//新序号
                            }
                           // console.log(JSON.stringify(dataObject));
                            fnOneRowDoIDCU("PUB_FILES","Modify",JSON.stringify(dataObject),function(){
                                window.fn_重新渲染序号();
                            });
                        }},
                        done: function(res, curr, count){
                            table.resize("tablemodelTable"); //重置表格尺寸
                            //开启列拖拽
                            if(imx_action!="view"){
                                soulTable.render(this);
                                soulTable.suspend('tablemodelTable', 'drag', false);//true 关闭列拖拽! false  开启列拖拽!
                                soulTable.suspend('tablemodelTable', 'rowDrag', false);//true 关闭行拖拽! false  开启行拖拽!
                                fn_click_date_time();
                            }

                        }
                    });
                };

2. 开启拖拽的代码:

 soulTable.render(this);
 soulTable.suspend('tablemodelTable', 'drag', false);//true 关闭列拖拽! false  开启列拖拽!
 soulTable.suspend('tablemodelTable', 'rowDrag', false);//true 关闭行拖拽! false  开启行拖拽!

3.行拖拽触发事件:

 rowDrag: {trigger: 'row', done: function(obj) {
                            // 完成时(松开时)触发
                            // 如果拖动前和拖动后无变化,则不会触发此方法
                            // console.log(obj.row) // 当前行数据
                            // console.log(obj.cache) // 改动后全表数据
                            // console.log(obj.oldIndex) // 原来的数据索引
                            // console.log(obj.newIndex) // 改动后数据索引
                            //全表数据
                            var objList=obj.cache;
                            //当前拖拽row
                            var oldRow=obj.row;
                            var dataObject={};
                            dataObject["ID"]=oldRow["ID"];
                            if(obj.newIndex==0){
                                dataObject["IORDER"] = Number(objList[obj.newIndex+1]["IORDER"])-1;//新序号
                            }else if(obj.newIndex==objList.length){
                                dataObject["IORDER"] = Number(objList[obj.newIndex-1]["IORDER"])+1;//新序
                            }else if(obj.newIndex>obj.oldIndex){
                                dataObject["IORDER"] = Number(objList[obj.newIndex-1]["IORDER"])+1;//新序号
                            }else{
                                dataObject["IORDER"] = Number(objList[obj.newIndex+1]["IORDER"])-1;//新序号
                            }
                           // console.log(JSON.stringify(dataObject));
                            fnOneRowDoIDCU("PUB_FILES","Modify",JSON.stringify(dataObject),function(){
                                window.fn_重新渲染序号();
                            });
                        }},

四、效果图:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1566850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【图论】知识点集合

边的类型 neighbors(邻居)&#xff1a;两个顶点有一条共同边 loop&#xff1a;链接自身 link&#xff1a;两个顶点有一条边 parallel edges&#xff1a;两个顶点有两条及以上条边 无向图 必要条件&#xff1a;删掉顶点数一定大于等于剩下的顶点数 设无向图G<V,E>是…

scRNA+bulk+MR:动脉粥样硬化五个GEO数据集+GWAS,工作量十分到位

今天给大家分享一篇JCR一区&#xff0c;单细胞bulkMR的文章&#xff1a;An integrative analysis of single-cell and bulk transcriptome and bidirectional mendelian randomization analysis identified C1Q as a novel stimulated risk gene for Atherosclerosis 标题&…

基于ZooKeeper的Kafka分布式集群搭建与集群启动停止Shell脚本

下载Kafka压缩包 下方是Kafka官网下载地址&#xff0c;本文使用Kafka 3.0.0在虚拟机环境中搭建分布式集群。 Apache Kafka Downloads link 虽然在Kafka 2.8.0之后可以使用KRaft模式搭建高可用的集群以提高数据处理效率&#xff0c;但是目前还有许多企业依然使用ZooKeeper搭建K…

C++中的List容器用法详解

文章目录 C中的List容器用法详解List 的特点List 的重要接口用法介绍1.创建和初始化Listlist 2.插入元素push_backpush_forntinsert 删除元素pop_backpop_fontclearerase 遍历List迭代器遍历范围for遍历 排序Listsort 反转Listreverse 转移Listsplice 去重unique 合并merge 总结…

wordpress课程项目主题电脑版+手机版自适应

这款主题适合做资源、课程、素材等&#xff0c;演示站&#xff1a;点击查看

​网络socket编程(二)——面向流的TCP编程及测试(SocketTool)、Wireshark软件使用

目录 一、书接上回&#xff08;select()函数使用注意事项&#xff09; 二、面向流(TCP)的socket编程 2.1 TCP服务端编程和测试 2.1.1 TCP服务器原理流程图 2.1.2 TCP服务端编程实战 2.1.3 测试 2.2 TCP客户端编程和测试 三、Wireshark抓包软件的使用 3.1 Wireshark是什…

fastlio2 给 interactive-slam 保存每帧的点云和每帧的里程计为单独的文件做后端回环优化和手动回环优化

为了给 interactive-slam 提供数据做后端回环优化和手动回环优化,需要保存每帧的点云和每帧的里程计为单独的文件,并且需要保存的名字为ros时间戳。 效果很好,比我自己写的手动回环模块好用 // This is an advanced implementation of the algorithm described in the // fo…

Jmeter各组件超详细介绍

1、JMeter和Loadrunner的区别&#xff1f; 2、JMeter如何开发脚本的&#xff1f;强化脚本的技术&#xff1f; 代理服务器录制脚本&#xff0c;Fiddler录制脚本&#xff0c;Badboy录制脚本&#xff0c;根据API&#xff0c;手写脚本&#xff0c;根据抓包&#xff0c;手写脚本。 …

Twitter Api查询用户粉丝列表

如果大家为了获取实现方式代码的话可能要让大家失望了&#xff0c;这边文章主要是为了节省大家开发时间&#xff0c;少点坑。https://api.twitter.com/2/users/:id/followers &#xff0c;这个接口很熟悉吧&#xff0c;他是推特提供的获取用户关注者&#xff08;粉丝&#xff0…

目标跟踪——行人车辆数据集

一、重要性及意义 首先&#xff0c;目标跟踪对于个人和组织的目标实现至关重要。无论是个人职业发展、企业业务增长还是政府的社会发展&#xff0c;目标跟踪都能够帮助我们明确目标&#xff0c;并将其分解为可行的步骤和时间表。这有助于我们保持动力和专注&#xff0c;提高效…

CNAS软件测试公司有什么好处?如何选择靠谱的软件测试公司?

CNAS认可是中国合格评定国家认可委员会的英文缩写&#xff0c;由国家认证认可监督管理委员会批准设立并授权的国家认可机构&#xff0c;统一负责对认证机构、实验室和检验机构等相关机构的认可工作。 在软件测试行业&#xff0c;CNAS认可具有重要意义。它标志着一个软件测试公…

Java并发编程基础面试题详细总结

1. 什么是线程和进程? 1.1 何为进程? 进程是程序的一次执行过程&#xff0c;是系统运行程序的基本单位&#xff0c;因此进程是动态的。系统运行一个程序即是一个进程从创建&#xff0c;运行到消亡的过程。 在 Java 中&#xff0c;当我们启动 main 函数时其实就是启动了一个…

Failed to resolve import “Home/components/HomeNew.vue“. Does the file exist?

错误信息 [plugin:vite:import-analysis] Failed to resolve import "/apis/home.js" from "src/views/Home/components/HomeNew.vue". Does the file exist? 错误原因 路径错误 解决方法

[C#]使用OpencvSharp去除面积较小的连通域

【C介绍】 关于opencv实现有比较好的算法&#xff0c;可以参考这个博客OpenCV去除面积较小的连通域_c#opencv 筛选小面积区域-CSDN博客 但是没有对应opencvsharp实现同类算法&#xff0c;为了照顾懂C#编程同学们&#xff0c;因此将 去除面积较小的连通域算法转成C#代码。 方…

Open CASCADE学习|刚体( TopoDS_Shape)按某种轨迹运动,停在指定位置上

今天实现如下功能&#xff1a;刚体做做螺旋运动&#xff0c;轨迹已知&#xff0c;求刚体在每个位置上的所占据的空间&#xff0c;就是把刚体从初始位置变换到该位置。 这里的刚体是一个砂轮截面&#xff0c;螺旋运动轨迹由B样条曲线拟合&#xff0c;通过Frenet标架确定运动轨迹…

Spring Boot集成AJ-Captcha实现滑动验证码功能

1.AJ-Captcha介绍 行为验证码 采用嵌入式集成方式&#xff0c;接入方便&#xff0c;安全&#xff0c;高效。抛弃了传统字符型验证码展示-填写字符-比对答案的流程&#xff0c;采用验证码展示-采集用户行为-分析用户行为流程&#xff0c;用户只需要产生指定的行为轨迹&#xff0…

WPS二次开发系列:如何获取应用签名SHA256值

在申请WPS SDK授权版时候需要开发者提供应用包名和签名&#xff0c;应用包名好说&#xff0c;那如何生成符合WPS要求的应用签名&#xff08;SHA256)呢&#xff0c;经笔者亲测&#xff0c;有如下两种方式可以实现获取第三方应用签名值&#xff08;SHA256&#xff09; 1. 方法一&…

springboot对接minio的webhook全过程

前言 近日需要将minio的apache2.0版本给用起来&#xff0c;顺便要完善一下原有的文件上传管理系统&#xff0c;其中很重要的一点是&#xff0c;在原有客户端直传的基础上&#xff0c;再添加 minio 的上传回调给服务端做后续处理。 本文重点在于&#xff0c;介绍整个minio与spr…

SpringCloud学习(1)-consul

consul下载安装及使用 1.consul简介 Consul是一种开源的、分布式的服务发现和配置管理工具&#xff0c;能够帮助开发人员构建和管理现代化的分布式系统。它提供了一套完整的功能&#xff0c;包括服务注册与发现、健康检查、KV存储、多数据中心支持等&#xff0c;可以帮助开发人…

Jenkins--任务详解

一、任务类型 Jenkins的主要功能的实现是由执行任务去完成的&#xff0c;常用的任务类型主要有以下三种&#xff1a; 自由风格任务(Free Style Project): 这是Jenkins中最常用的任务类型&#xff0c;允许你自定义各种构建步骤和配置选项&#xff0c;如源码管理、构建触发器、…