`

内容拖拽排序与保存

    博客分类:
  • RUBY
 
阅读更多
class Inquiry::MsdsController < Admin::BaseController
  before_action :set_inquiry

  def index
    @msds = Msds.new(@inquiry)
    @msds_details = @inquiry.msds_details
    if @msds_details.present?
      @msds_name = @msds_details.where(title:"")
      @msds_details = @msds_details.order(:index_id)
      @index = @msds_details.size.times.to_a
      @ids = @msds_details.ids
      @title = @msds_details.pluck(:title)
      @message = @msds_details.pluck(:message)
    else
      @msds_details = @msds.request_modify_msds
      @index = *(0..15)
      @ids = ("0"*16).split("")
      @title = ["name","Hazards identification","First aid measures","Accidental release measures","Purity","Accidental release measures","Handling and storage","Exposure Controls / PPE","Physical and chemical properties","Stability and reactivity","Toxicological information","Ecological information","Disposal consideration","Transportation information","Regulatory information","Other information"]
      @message = @msds_details
    end
  end

  def save_msds
    @ids = params[:ids]
    @indexs = @ids.size.times.to_a
    @msds_ids = @inquiry.msds_details.ids.join(",").split(",")
    @titles = params[:title]
    @messages = params[:message]
    MsdsDetail.transaction do
      @indexs.each do |index|
        id = @ids[index]
        if id.to_i == 0
          msds_detail = MsdsDetail.new
        else
          msds_detail = MsdsDetail.find id
        end
        msds_detail.title = @titles[index]
        msds_detail.message = @messages[index]
        msds_detail.index_id = index
        msds_detail.inquiry_id = @inquiry.id
        msds_detail.save
      end
      (@msds_ids - @ids).each do |delete_id|
        msds_detail = MsdsDetail.find delete_id
        msds_detail.delete
      end
      @inquiry.save_audits(operator_type: 'User', operator_id: current_user.id, note: "save_msds")
    end
  end
end


  <h2 class="ui dividing header">Msds List</h2>
  <div class="content">
  <%= javascript_include_tag 'jquery-ui-sortable.min.js' %>
  <style>
    .J_sortable .field.placeholder {
        position: relative;
    }
    
    .J_sortable .field.placeholder:before {
        position: absolute;
    }

    .J_sortable,
    .J_sortable2 {
        min-height: 200px;
        border: 1px solid #ddd;
        border-radius: 4px;
    }
    </style>
    <div class="pusher">
        <div class="ui fluid container">
            <div class="ui two column grid">
                <div class="sixteen wide column ">
                    <div class="ui  form" style="margin: 20px;">
                        <div class="ui very relaxed grid ">
                            <div class="eight wide column">
                                <div class="ui grid J_sortable connectedSortable">
                                    <div class="sixteen wide column J_append_relaxed">
                                        <label></label>
                                        <i class="edit icon J_change_label"></i>
                                        <div class="ui mini action input" style='display: none; margin-bottom: 4px;'>
                                            <input type="text">
                                            <button class="ui button J_change_label_btn">Edit</button>
                                        </div>
                                        <%= text_area "0", :message, :rows =>"6", :value=>"",'data-id'=>"0",'data-title'=>"" %>
                                    </div>
                                </div>

                            </div>
                            
                            <div class="ui vertical divider" style='left:50%'>Drag add</div>
                            <div class="eight wide column">
                                <div class="ui grid J_sortable2 connectedSortable" id="messages">
                                  <% @index.each do |index|%>
                                    <div class="sixteen wide column">
                                        <label><%= @title[index] %>:</label>
                                        <%= text_area "#{index}", :message, :rows =>"6", :value=>@message[index],'data-id'=>@ids[index],'data-title'=>@title[index] %>
                                    </div>
                                  <% end %>
                                </div>
                                <div class="actions" style="margin-top: 20px;">
                                    <div class="ui button cancel">cancel</div>
                                    <div class="ui blue button msds_submit">Submit</div>
                               </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    
    <script type="text/javascript">

    $(function() {
        // 保存复制节点html
        var J_append_relaxed_html =  $('.J_append_relaxed').prop('outerHTML');
        // 拖拽
        $(".J_sortable").sortable({
            connectWith: ".connectedSortable",
            // items: "li:not(.ui-state-disabled)",
            dropOnEmpty: false,
            change: function(event, ui) {
                // console.log(this)
            },
            //在移动结束前促发事件
            beforeStop: function(event, ui) {
                var $self = $(this);
                if ($self.find('.J_append_relaxed').length < 1) {
                    //只有当追加节点拖拽之后才创建一个新节点
                    $self.append(J_append_relaxed_html);
                }   

            }
        });

        $(".J_sortable2").sortable({
            connectWith: ".connectedSortable",
            // dropOnEmpty: false
        });

        //修改label
         $(document).on('click', '.J_change_label', function(event) {
            event.preventDefault();
            $(this).parent('.column').find('.action').show();
        });
        // 提交修改
        $(document).on('click', '.J_change_label_btn', function(event) {
            var self = $(this),
                self_parent_action = self.parent('.action'),
                self_parent_column = self_parent_action.parent('.column');

            self_parent_action.hide();
            var self_parent_action_val = self_parent_action.find('input').val();
            if (self_parent_action_val.length > 0) {
                self_parent_column.find('label').html(self_parent_action_val);
                self_parent_column.find('textarea').attr("data-title",self_parent_action_val);
            }
        });

        // 提交msds
        $(".msds_submit").click(function(){
            var ids = []
            var title = []
            var message = []
            JSON.stringify( $("#messages textarea").each(function(){  ids.push($(this).attr("data-id")); title.push($(this).attr("data-title")); message.push($(this).val())  }) )
            $.ajax({
                url : '<%= save_msds_inquiry_msds_path %>?inquiry_id=<%= @inquiry.id %>',
                type : 'post',
                data : {ids: ids,title: title,message: message},
                dataType : "json",
                beforeSend: function(request) {
                  request.setRequestHeader("X-CSRF-Token", $('meta[name="csrf-token"]').attr('content'));
                },
                success: function(result){
                    window.location.reload()
                }
              });
        });

    });

    </script>
</div>
0
0
分享到:
评论

相关推荐

    实现table表格可按行拖拽,按列排序,并可以保存排序后的结果

    "实现table表格可按行拖拽,按列排序,并可以保存排序后的结果"是一个常见的需求,尤其适用于数据展示和管理的场景。这里我们将详细探讨如何利用jQuery、jQuery.tablesorter和jQuery.tablednd_0_5这三个JavaScript库...

    js拖拽排序并保存到数据库

    拖拽排序允许用户通过直观地拖动元素来改变它们的顺序,这种功能在各种Web应用中非常常见,比如任务管理器、图片库等。结合PHP作为后端语言处理数据并保存到数据库,可以实现完整的拖拽排序解决方案。 首先,我们...

    JQ JS javascript 拖拽 排序功能 列表排序 菜单排序 表格排序

    拖拽排序是一种用户交互设计,允许用户通过鼠标拖动来改变元素的顺序。这种功能在列表、菜单和表格中尤为常见,提供了直观和便捷的操作体验。在JavaScript中,我们可以监听鼠标事件来实现这一功能。 二、jQuery实现...

    jQuery实现拖动布局并将排序结果保存到数据库

    总结来说,这个项目通过`jQuery`实现了用户友好的拖动排序功能,利用`idrag.js`插件简化了拖放操作的实现。当用户完成排序后,通过AJAX将新的布局信息发送到服务器,并使用`PHP`更新数据库,确保布局的更改能够持久...

    bootstrap-table.css 表格拖拽排序

    它们可能包含了一些特定于Bootstrap表格的样式和功能增强,例如与Bootstrap框架更好的集成,提供更流畅的动画效果,或者提供了额外的配置选项和API接口,以便开发者可以更灵活地控制拖拽排序的行为。 在实际使用中...

    移动端列表长按上下拖动排序

    "移动端列表长按上下拖动排序"是一种提升用户体验的功能,允许用户通过简单的手势操作来调整列表项的顺序,使得信息管理更加直观和便捷。这个功能主要利用了HTML5的sortTable技术和触摸事件来实现,专门针对移动设备...

    图片拖拽排序.zip

    添加了多个拖拽框进行拖拽,可以同时支持多个拖拽框的排序,这只是一个简单的demo,我后续也做了一些更复杂的功能,比如排序后获取排序顺序、还有打开一个拖拽框其他关闭、保存顺序后页面局部刷新等问题,...

    bootstrap拖拽排序插件.zip

    这行代码会在页面加载完成后,使所有具有`sortable`类的元素变得可拖动排序。 4. **处理排序事件**:插件通常会提供一些事件监听器,允许你在元素拖放时执行某些操作。例如,你可以监听`stop`事件,获取当前的排序...

    jquery拖拽排序插件div自由拖动排序代码

    在给定的标题“jquery拖拽排序插件div自由拖动排序代码”中,我们主要讨论的是如何利用jQuery实现一个功能,让用户能够自由地通过拖放操作来对页面上的div元素进行排序。这种功能在许多应用场景中都非常实用,比如...

    js 拖拽排序

    JavaScript(简称JS)拖拽排序是一种用户交互技术,允许用户通过拖放操作来改变列表或元素的顺序。在本场景中,我们关注的是一个使用jQuery库实现的前端拖拽排序功能,开发者对这个功能进行了自定义封装,形成了一个...

    基于jquery的拖拽交换和拖拽排序组件

    本篇文章将深入探讨基于jQuery的拖拽交换与拖拽排序组件,这是一种提升用户界面交互性的重要技术,尤其适用于构建动态列表和可自定义布局的应用。 拖拽交换和拖拽排序功能在网页应用中非常常见,例如在日程管理、...

    jquery拖拽排序

    console.log("排序保存成功"); } }); } // 更新UI function updateUI() { // 根据保存的顺序重新排列元素 } }); ``` 以上代码是一个基本的拖拽排序实现,实际项目中可能需要根据具体需求进行调整和扩展。 ...

    jquery拖动排序插件制作选项列表拖动排序代码

    本文将深入探讨如何使用jQuery实现一个拖动排序插件,以实现选项列表的动态排序功能。 首先,我们需要理解jQuery的核心概念。jQuery通过提供一系列方便的函数,使得开发者能够快速操作DOM(Document Object Model)...

    移动端和pc端拖动排序

    "移动端和PC端拖动排序"是一项常见的功能,允许用户通过直观的拖放操作来调整列表中的项目顺序。这种功能在各种应用场景中都很常见,比如任务管理、日程安排、文件管理等。在本案例中,实现这一功能主要依赖于`drag-...

    jquery图片拖拽排序

    在提供的"jQuery动画图片拖动排序效果"压缩包中,包含了完整的示例代码。通过学习和实践这个例子,你可以更深入地理解如何在实际项目中应用这些概念和技巧。 总结,利用jQuery实现图片拖拽排序需要处理多个事件,...

    微信小程序仿支付宝应用管理,首页应用图标长按拖动排序,移除

    1. **长按拖动排序** 在微信小程序中,我们可以利用`onLongPress`事件来触发长按操作。当用户对应用图标进行长按时,我们可以显示一个半透明的覆盖层,并在图标上添加一个可拖动的手柄。使用`wx....

    jQuery动画图片拖动排序效果

    在本文中,我们将深入探讨如何使用jQuery库来创建一个动态的、可拖动排序的图片列表,以此实现“jQuery动画图片拖动排序效果”。这个功能是通过jQuery的事件监听、DOM操作以及动画功能来实现的,它使得用户可以通过...

    php接口实现拖拽排序功能

    这一功能的实现需要后端与前端的紧密配合,前端负责捕捉用户的拖拽行为并发送到后端,而后端则根据前端的指令更新数据项的排序并保存结果。整个过程中,对数据库的操作和对数组的操作需要谨慎处理,以确保数据的一致...

    jquery - 1.4.2 图片拖拽排序实例

    在实际应用中,你可能还需要考虑更多的细节,例如边界检测(防止图片拖出容器)、多个目标区域(允许多个分类或列的排序)以及实时保存排序结果等。这些可以通过扩展上述代码,增加更多的逻辑和交互来实现。 总的来...

    炫酷的QQ相册拖拽排序功能

    JavaScript允许我们在用户与网页交互时实时更新页面内容,实现图片的拖放操作。通过监听鼠标的mousedown、mousemove和mouseup事件,我们可以捕捉到用户的拖动行为。当用户按下鼠标并移动时,图片会跟随鼠标移动,这...

Global site tag (gtag.js) - Google Analytics