• 使用同一个模态框进行新增和修改


    表单开发时一般会有一个新增的模态框,和一个修改的模态框,大多数情况下这两个框是一模一样的,

    分析其不同点有如下几个:

    1、新增与修改的模态框标题不同;

    2、在修改时需要回填数据,新增时不需要;

    3、新增时提交调用新增接口,修改时提交调用修改接口;

    需要使用同一个模态框完成需求,就需要解决如上3个问题。

    前端代码如下:

    <!-- 新增按钮触发模态框 -->
    <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal" onclick="addData()">新增项目</button>
    <div>
        <!-- 新增和修改共用一个模态框(Modal) -->
        <form id="add-project-form" class="form-horizontal" role="form">
            <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
                 aria-hidden="true">
                <div class="modal-dialog">
                    <div class="modal-content">
                        <div class="modal-header">
                            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">
                                &times;
                            </button>
                            <h4 class="modal-title" id="myModalLabel">
                                新增项目
                            </h4>
                        </div>
                        {# 模态框body #}
                        <div class="modal-body" style="height: 100%;">
                            <div class="form-group">
                                <label for="firstname" class="col-sm-3 control-label">项目名称</label>
                                <div class="col-sm-7">
                                    <input type="text" class="form-control" id="project_name" name="project_name" required
                                           placeholder="请输入项目名">
                                    <input type="hidden" class="form-control" id="project_id">
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label for="firstname" class="col-sm-3 control-label">负责人</label>
                                <div class="col-sm-7">
                                    <input type="text" class="form-control" id="project_manager" name="project_manager"
                                           required
                                           placeholder="请输入负责人">
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label for="firstname" class="col-sm-3 control-label">业务部门</label>
                                <div class="col-sm-7">
                                    <input type="text" class="form-control" id="project_line" name="project_line"
                                           placeholder="请输入业务部门">
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label for="firstname" class="col-sm-3 control-label">项目描述</label>
                                <div class="col-sm-7">
                                    <textarea type="text" class="form-control" id="desc" name="desc" maxlength="50"
                                              width="318.83"
                                              placeholder="请输入项目描述">
                                    </textarea>
                                </div>
                            </div>
                        </div>
                        {# 模态框底部 #}
                        <div class="modal-footer">
                            <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
                            <input type="button" onclick="add_or_update_project()" class="btn btn-primary" value="提交"/>
                        </div>
                    </div><!-- /.modal-content -->
                </div><!-- /.modal -->
            </div>
        </form>
    </div>
    // getData方法获取全部页面数据后,将data转为json对象,使用index当前行号作为下标获取对应数据
        function EditViewById(row, index) {
    
            let project_info_data = $("#mytab").bootstrapTable('getData')[index]; //获取该行数据
            if (project_info_data.id !== null)
                {# 修改modal框的标题 #}
                $('.modal-title').text('修改项目')
            $('#myModal').modal('show')
    
    
            $("#project_name").val(project_info_data.project_name);
            $("#project_id").val(project_info_data.id);
            $("#project_manager").val(project_info_data.project_manager);
            $("#project_line").val(project_info_data.project_line);
            $("#desc").val(project_info_data.desc);
    
            {# 同样弹出模态框 #}
            $('#myModal').modal('show')
        };
    
        // 新增时重置表单并修改模态框标题
        function addData() {
            $('.modal-title').text("新增项目")
            $('#add-project-form')[0].reset()  //重置表单
        }
    
        {# 新增或者修改后提交 #}
        function add_or_update_project() {
            let project_id = $('#project_id').val();
            console.log("project_id的值为:" + project_id)
            {# 如果不存在project_id就是新增 #}
            if (!project_id) {
                $.ajax({
                    type: "POST",
                    url: "projects",
                    dataType: "json",
                    data: $('#add-project-form').serialize(),
                    success: function (res_data) {
                        console.log(res_data)
                        {#关闭模态框并清除框内数据,否则下次打开还是上次的数据#}
                        $("#add-project-form")[0].reset();
                        $('#myModal').modal('hide');
                        $("#mytab").bootstrapTable('refresh');
                    }
                })
            }
            {# 如果project_id存在就是修改 #}
            else {
                $.ajax({
                    type: "PUT",
                    dataType: "json",
                    url: "update_projects/" + project_id, // 待后端提供PUT修改接口
                    data: $('#add-project-form').serialize(),
    
                    success: function (data) {
                        console.log(data);
                        if (data.code == 200) {
                            toastr.success("修改成功");
                            $("#add-project-form")[0].reset();
                            $('#project_id').val("")
                            $('#myModal').modal('hide');
                            $("#mytab").bootstrapTable('refresh');
                        }
                        else {
                            toastr.warning('请填写所有数据');
                        }
                    },
                    error: function () {
                        toastr.warning("修改失败");
                    }
                })
            }
        }

    首先增加一个隐藏的input框,type=“hidden”,前端不可见,

    当单击新增按钮时,打开模态框,因为可能在修改后该模态框标题会修改,且input有内容,

    所以先修改模态框标题,并清空input内容

     // 新增时重置表单并修改模态框标题
        function addData() {
            $('.modal-title').text("新增项目")
            $('#add-project-form')[0].reset()  //重置表单
        }

    如果是单击修改按钮,调用EditViewById方法,获取要修改的数据,并修改modal-title为“修改项目”,然后回填数据

        // getData方法获取全部页面数据后,将data转为json对象,使用index当前行号作为下标获取对应数据
        function EditViewById(row, index) {
    
            let project_info_data = $("#mytab").bootstrapTable('getData')[index]; //获取该行数据
            if (project_info_data.id !== null) {
                {# 修改modal框的标题 #}
                $('.modal-title').text('修改项目')
            }
            $('#myModal').modal('show')
            // 回填数据,记得回填隐藏的input框的value值为要修改的数据的id主键值
            $("#project_name").val(project_info_data.project_name);
            $("#project_id").val(project_info_data.id);
            $("#project_manager").val(project_info_data.project_manager);
            $("#project_line").val(project_info_data.project_line);
            $("#desc").val(project_info_data.desc);
        };

    关键的是提交(调用add_or_update_project()方法),根据project_id是否存在值判断调哪个接口,

    如果不存在,则说明是新增数据,则调用新增接口,

    如果存在,则说明是修改数据,调用修改接口

  • 相关阅读:
    看看大对象是如何爆你的内存
    Web Api 多项目文档生成之SwaggerUI
    react-native执行 npm install cl.exe找不到 的问题
    在SourceTree中使用Git submodule
    [ElasticSearch] 如何使用中文分詞ik與繁簡轉換stconvert插件
    [Activator-HelloAkka] Create our Actors
    [Activator-HelloAkka] Define our Actors
    [Activator- HelloAkka] Define our Messages
    [Scala] Currying
    [Scala] Pattern Matching(模式匹配)
  • 原文地址:https://www.cnblogs.com/gcgc/p/14172447.html
Copyright © 2020-2023  润新知