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>
分享到:
相关推荐
"实现table表格可按行拖拽,按列排序,并可以保存排序后的结果"是一个常见的需求,尤其适用于数据展示和管理的场景。这里我们将详细探讨如何利用jQuery、jQuery.tablesorter和jQuery.tablednd_0_5这三个JavaScript库...
拖拽排序允许用户通过直观地拖动元素来改变它们的顺序,这种功能在各种Web应用中非常常见,比如任务管理器、图片库等。结合PHP作为后端语言处理数据并保存到数据库,可以实现完整的拖拽排序解决方案。 首先,我们...
拖拽排序是一种用户交互设计,允许用户通过鼠标拖动来改变元素的顺序。这种功能在列表、菜单和表格中尤为常见,提供了直观和便捷的操作体验。在JavaScript中,我们可以监听鼠标事件来实现这一功能。 二、jQuery实现...
总结来说,这个项目通过`jQuery`实现了用户友好的拖动排序功能,利用`idrag.js`插件简化了拖放操作的实现。当用户完成排序后,通过AJAX将新的布局信息发送到服务器,并使用`PHP`更新数据库,确保布局的更改能够持久...
它们可能包含了一些特定于Bootstrap表格的样式和功能增强,例如与Bootstrap框架更好的集成,提供更流畅的动画效果,或者提供了额外的配置选项和API接口,以便开发者可以更灵活地控制拖拽排序的行为。 在实际使用中...
"移动端列表长按上下拖动排序"是一种提升用户体验的功能,允许用户通过简单的手势操作来调整列表项的顺序,使得信息管理更加直观和便捷。这个功能主要利用了HTML5的sortTable技术和触摸事件来实现,专门针对移动设备...
添加了多个拖拽框进行拖拽,可以同时支持多个拖拽框的排序,这只是一个简单的demo,我后续也做了一些更复杂的功能,比如排序后获取排序顺序、还有打开一个拖拽框其他关闭、保存顺序后页面局部刷新等问题,...
这行代码会在页面加载完成后,使所有具有`sortable`类的元素变得可拖动排序。 4. **处理排序事件**:插件通常会提供一些事件监听器,允许你在元素拖放时执行某些操作。例如,你可以监听`stop`事件,获取当前的排序...
在给定的标题“jquery拖拽排序插件div自由拖动排序代码”中,我们主要讨论的是如何利用jQuery实现一个功能,让用户能够自由地通过拖放操作来对页面上的div元素进行排序。这种功能在许多应用场景中都非常实用,比如...
JavaScript(简称JS)拖拽排序是一种用户交互技术,允许用户通过拖放操作来改变列表或元素的顺序。在本场景中,我们关注的是一个使用jQuery库实现的前端拖拽排序功能,开发者对这个功能进行了自定义封装,形成了一个...
本篇文章将深入探讨基于jQuery的拖拽交换与拖拽排序组件,这是一种提升用户界面交互性的重要技术,尤其适用于构建动态列表和可自定义布局的应用。 拖拽交换和拖拽排序功能在网页应用中非常常见,例如在日程管理、...
console.log("排序保存成功"); } }); } // 更新UI function updateUI() { // 根据保存的顺序重新排列元素 } }); ``` 以上代码是一个基本的拖拽排序实现,实际项目中可能需要根据具体需求进行调整和扩展。 ...
本文将深入探讨如何使用jQuery实现一个拖动排序插件,以实现选项列表的动态排序功能。 首先,我们需要理解jQuery的核心概念。jQuery通过提供一系列方便的函数,使得开发者能够快速操作DOM(Document Object Model)...
"移动端和PC端拖动排序"是一项常见的功能,允许用户通过直观的拖放操作来调整列表中的项目顺序。这种功能在各种应用场景中都很常见,比如任务管理、日程安排、文件管理等。在本案例中,实现这一功能主要依赖于`drag-...
在提供的"jQuery动画图片拖动排序效果"压缩包中,包含了完整的示例代码。通过学习和实践这个例子,你可以更深入地理解如何在实际项目中应用这些概念和技巧。 总结,利用jQuery实现图片拖拽排序需要处理多个事件,...
1. **长按拖动排序** 在微信小程序中,我们可以利用`onLongPress`事件来触发长按操作。当用户对应用图标进行长按时,我们可以显示一个半透明的覆盖层,并在图标上添加一个可拖动的手柄。使用`wx....
在本文中,我们将深入探讨如何使用jQuery库来创建一个动态的、可拖动排序的图片列表,以此实现“jQuery动画图片拖动排序效果”。这个功能是通过jQuery的事件监听、DOM操作以及动画功能来实现的,它使得用户可以通过...
这一功能的实现需要后端与前端的紧密配合,前端负责捕捉用户的拖拽行为并发送到后端,而后端则根据前端的指令更新数据项的排序并保存结果。整个过程中,对数据库的操作和对数组的操作需要谨慎处理,以确保数据的一致...
在实际应用中,你可能还需要考虑更多的细节,例如边界检测(防止图片拖出容器)、多个目标区域(允许多个分类或列的排序)以及实时保存排序结果等。这些可以通过扩展上述代码,增加更多的逻辑和交互来实现。 总的来...
JavaScript允许我们在用户与网页交互时实时更新页面内容,实现图片的拖放操作。通过监听鼠标的mousedown、mousemove和mouseup事件,我们可以捕捉到用户的拖动行为。当用户按下鼠标并移动时,图片会跟随鼠标移动,这...