Merge pull request '2' (#2) from branch_yzx into main

main
peks4xqf3 10 months ago
commit b4b360a7ce

@ -0,0 +1 @@
DIMS

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/classes" />
</component>
</project>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="ad70301c-110e-4622-91a4-38f22109b92e" name="Changes" comment="" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="ProjectColorInfo"><![CDATA[{
"associatedIndex": 5
}]]></component>
<component name="ProjectId" id="2qLclGrjwMAeMdrCFIhGeHUE8bg" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"git-widget-placeholder": "main",
"kotlin-language-version-configured": "true",
"last_opened_file_path": "D:/新建文件夹 (2)",
"nodejs_package_manager_path": "npm",
"vue.rearranger.settings.migration": "true"
}
}]]></component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="ad70301c-110e-4622-91a4-38f22109b92e" name="Changes" comment="" />
<created>1734445444322</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1734445444322</updated>
<workItem from="1734445445449" duration="35000" />
</task>
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
</project>

@ -5,39 +5,51 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- 设置IE浏览器使用最新的渲染引擎如果已安装Google Chrome Frame则使用它 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<!-- 设置文档的字符编码为UTF-8 -->
<meta charset="utf-8" />
<!-- 页面标题,显示在浏览器标签上 -->
<title>个人信息页面 - 医院药品库存管理系统</title>
<!-- 页面描述有助于SEO -->
<meta name="description" content="个人信息页面 - 医院药品库存管理系统" />
<!-- 视口设置,确保页面在不同设备上正确缩放和显示 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<!-- bootstrap & fontawesome -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" />
<!-- page specific plugin styles -->
<link rel="stylesheet" href="../assets/css/jquery-ui.custom.min.css" />
<link rel="stylesheet" href="../assets/css/jquery.gritter.min.css" />
<link rel="stylesheet" href="../assets/css/select2.min.css" />
<link rel="stylesheet" href="../assets/css/bootstrap-datepicker3.min.css" />
<link rel="stylesheet" href="../assets/css/bootstrap-editable.min.css" />
<!-- text fonts -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" />
<!-- ace styles -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" />
<!-- 引入Bootstrap和FontAwesome的CSS样式 -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" /> <!-- Bootstrap框架样式 -->
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" /> <!-- FontAwesome图标库样式 -->
<!-- 引入页面特定插件的CSS样式 -->
<link rel="stylesheet" href="../assets/css/jquery-ui.custom.min.css" /> <!-- jQuery UI自定义样式 -->
<link rel="stylesheet" href="../assets/css/jquery.gritter.min.css" /> <!-- Gritter通知插件样式 -->
<link rel="stylesheet" href="../assets/css/select2.min.css" /> <!-- Select2选择框插件样式 -->
<link rel="stylesheet" href="../assets/css/bootstrap-datepicker3.min.css" /> <!-- Bootstrap日期选择器插件样式 -->
<link rel="stylesheet" href="../assets/css/bootstrap-editable.min.css" /> <!-- Bootstrap可编辑插件样式 -->
<!-- 引入文本字体样式 -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" /> <!-- Google字体样式 -->
<!-- 引入Ace框架的CSS样式 -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" /> <!-- Ace框架的主要样式 -->
<!-- 针对IE9及以下版本的Ace框架样式 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-part2.min.css" class="ace-main-stylesheet" />
<%-- <!-- Ace框架针对IE9及以下版本的额外样式 -->--%>
<![endif]-->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" />
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" />
<!-- 引入Ace框架的皮肤样式 -->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" /> <!-- Ace框架皮肤样式 -->
<!-- 引入Ace框架的RTL从右到左支持样式 -->
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" /> <!-- Ace框架RTL支持样式 -->
<!-- 针对IE9及以下版本的Ace框架样式 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-ie.min.css" />
<%-- <!-- Ace框架针对IE9及以下版本的样式 -->--%>
<![endif]-->
<!-- inline styles related to this page -->
<!-- ace settings handler -->
<script src="../assets/js/ace-extra.min.js"></script>
<!-- HTML5shiv and Respond.js for IE8 to support HTML5 elements and media queries -->
<!-- 与本页相关的内联样式(此处未列出) -->
<!-- 引入Ace框架的设置处理器脚本 -->
<script src="../assets/js/ace-extra.min.js"></script> <!-- Ace框架的额外功能脚本 -->
<!-- 引入HTML5shiv和Respond.js库用于IE8支持HTML5元素和媒体查询 -->
<!--[if lte IE 8]>
<script src="../assets/js/html5shiv.min.js"></script>
<script src="../assets/js/respond.min.js"></script>
<%-- <!-- HTML5shiv库使IE8支持HTML5元素 -->--%>
<script src="../assets/js/respond.min.js"></script> <!-- Respond.js库使IE8支持媒体查询 -->
<![endif]-->
</head>
<body class="no-skin">
@ -504,150 +516,170 @@
'width': 140
},
success: function(response, newValue) {
// 如果当前值与新值相同,则直接返回,不做任何操作
if(currentValue == newValue) return;
// 更新当前值为新值
currentValue = newValue;
// 根据新值获取对应的城市列表,如果新值为空或未定义,则默认为空数组
var new_source = (!newValue || newValue == "") ? [] : cities[newValue];
//the destroy method is causing errors in x-editable v1.4.6+
//it worked fine in v1.4.5
/**
$('#city').editable('destroy').editable({
type: 'select2',
source: new_source
}).editable('setValue', null);
*/
//so we remove it altogether and create a new element
var city = $('#city').removeAttr('id').get(0);
// 注释掉的代码在x-editable v1.4.6+版本中destroy方法会引发错误而在v1.4.5中工作正常
// 尝试销毁并重新初始化#city的editable组件但由于错误这部分代码被注释掉
// 我们改为移除#city元素并创建一个新的元素
var city = $('#city').removeAttr('id').get(0); // 移除#city的id属性并获取DOM元素
// 克隆这个元素设置新的id为'city',设置初始文本为'Select City'并重新初始化为editable组件
$(city).clone().attr('id', 'city').text('Select City').editable({
type: 'select2',
value : null,
//onblur:'ignore',
source: new_source,
type: 'select2', // 使用select2作为下拉选择框
value : null, // 初始值设为null
//onblur:'ignore', // 忽略失去焦点事件(被注释掉)
source: new_source, // 数据源为新获取的城市列表
select2: {
'width': 140
'width': 140 // 设置select2的宽度
}
}).insertAfter(city);//insert it after previous instance
$(city).remove();//remove previous instance
}).insertAfter(city); // 将新创建的元素插入到原来的元素之后
$(city).remove(); // 移除原来的元素
}
});
// 初始化#city为editable组件使用select2作为下拉选择框初始值为'Amsterdam'
$('#city').editable({
type: 'select2',
value : 'Amsterdam',
//onblur:'ignore',
source: cities[currentValue],
//onblur:'ignore', // 忽略失去焦点事件(被注释掉)
source: cities[currentValue], // 数据源为当前值对应的城市列表
select2: {
'width': 140
'width': 140 // 设置select2的宽度
}
});
//custom date editable
// 自定义日期editable组件
$('#signup').editable({
type: 'adate',
type: 'adate', // 使用日期选择器
date: {
//datepicker plugin options
format: 'yyyy/mm/dd',
viewformat: 'yyyy/mm/dd',
weekStart: 1
//,nativeUI: true//if true and browser support input[type=date], native browser control will be used
// datepicker插件的配置项
format: 'yyyy/mm/dd', // 日期格式
viewformat: 'yyyy/mm/dd', // 显示格式
weekStart: 1 // 一周的第一天为周一
//,nativeUI: true // 如果为true且浏览器支持input[type=date],则使用原生的日期选择器(被注释掉)
//,format: 'yyyy-mm-dd',
//viewformat: 'yyyy-mm-dd'
}
})
});
// 年龄editable组件使用微调器spinner
$('#age').editable({
type: 'spinner',
name : 'age',
spinner : {
min : 16,
max : 99,
step: 1,
on_sides: true
//,nativeUI: true//if true and browser support input[type=number], native browser control will be used
min : 16, // 最小值
max : 99, // 最大值
step: 1, // 步长
on_sides: true // 在两侧显示按钮被注释掉的nativeUI配置表示如果为true且浏览器支持input[type=number],则使用原生的微调器)
}
});
// 登录editable组件使用滑块slider
$('#login').editable({
type: 'slider',
name : 'login',
slider : {
min : 1,
max: 50,
width: 100
//,nativeUI: true//if true and browser support input[type=range], native browser control will be used
min : 1, // 最小值
max: 50, // 最大值
width: 100 // 宽度
//,nativeUI: true // 如果为true且浏览器支持input[type=range],则使用原生的滑块(被注释掉)
},
success: function(response, newValue) {
// 根据新值更新显示的文本如果新值为1则显示“1 hour ago”否则显示“X hours ago”
if(parseInt(newValue) == 1)
$(this).html(newValue + " hour ago");
else $(this).html(newValue + " hours ago");
}
});
// 关于editable组件使用富文本编辑器wysiwyg
$('#about').editable({
mode: 'inline',
type: 'wysiwyg',
mode: 'inline', // 内联模式
type: 'wysiwyg', // 富文本编辑器
name : 'about',
wysiwyg : {
//css : {'max-width':'300px'}
//css : {'max-width':'300px'} // 可选的CSS样式被注释掉
},
success: function(response, newValue) {
// 成功回调函数(当前为空)
}
});
// *** editable avatar *** //
try {//ie8 throws some harmless exceptions, so let's catch'em
//first let's add a fake appendChild method for Image element for browsers that have a problem with this
//because editable plugin calls appendChild, and it causes errors on IE at unpredicted points
try { // 尝试捕获IE8可能抛出的无害异常
// 尝试为Image元素添加一个假的appendChild方法以解决某些浏览器中的错误
// 因为editable插件会调用appendChild而在某些情况下如IE会引发错误
try {
document.createElement('IMG').appendChild(document.createElement('B'));
document.createElement('IMG').appendChild(document.createElement('B')); // 尝试执行可能会抛出错误的操作
} catch(e) {
Image.prototype.appendChild = function(el){}
Image.prototype.appendChild = function(el){} // 如果抛出错误则为Image原型添加一个空的appendChild方法
}
var last_gritter
}
var last_gritter; // 声明一个全局变量用于存储最近的gritter通知ID
// 初始化#avatar元素为可编辑状态类型为图片
$('#avatar').editable({
type: 'image',
name: 'avatar',
value: null,
//onblur: 'ignore', //don't reset or hide editable onblur?!
type: 'image', // 设置可编辑类型为图片
name: 'avatar', // 设置字段名称
value: null, // 初始值设为null
// image选项用于配置图片相关的参数
image: {
//specify ace file input plugin's options here
btn_choose: 'Change Avatar',
droppable: true,
maxSize: 110000,//~100Kb
//and a few extra ones here
name: 'avatar',//put the field name here as well, will be used inside the custom plugin
on_error : function(error_type) {//on_error function will be called when the selected file has a problem
// 配置ace文件输入插件的选项
btn_choose: 'Change Avatar', // 选择文件的按钮文本
droppable: true, // 允许拖放文件
maxSize: 110000, // 最大文件大小约为100Kb
name: 'avatar', // 字段名称与上面的name相同用于自定义插件内部
// 当选择的文件有问题时调用on_error函数
on_error : function(error_type) {
// 如果存在上一个gritter通知则移除它
if(last_gritter) $.gritter.remove(last_gritter);
if(error_type == 1) {//file format error
// 根据错误类型显示不同的gritter通知
if(error_type == 1) { // 文件格式错误
last_gritter = $.gritter.add({
title: 'File is not an image!',
text: 'Please choose a jpg|gif|png image!',
class_name: 'gritter-error gritter-center'
});
} else if(error_type == 2) {//file size rror
} else if(error_type == 2) { // 文件大小错误
last_gritter = $.gritter.add({
title: 'File too big!',
text: 'Image size should not exceed 100Kb!',
class_name: 'gritter-error gritter-center'
});
}
else {//other error
}
// 其他错误类型不处理
},
// 当文件上传成功时调用on_success函数
on_success : function() {
// 移除所有gritter通知
$.gritter.removeAll();
}
},
// 配置上传的URL此处为示例实际使用时需要替换为真实的上传处理逻辑
url: function(params) {
// ***UPDATE AVATAR HERE*** //
//for a working upload example you can replace the contents of this function with
//examples/profile-avatar-update.js
var deferred = new $.Deferred
var value = $('#avatar').next().find('input[type=hidden]:eq(0)').val();
// *** 更新头像的逻辑开始 *** //
var deferred = new $.Deferred(); // 创建一个延迟对象
var value = $('#avatar').next().find('input[type=hidden]:eq(0)').val(); // 获取隐藏输入框的值
// 如果没有选择文件则直接解析延迟对象并返回其promise
if(!value || value.length == 0) {
deferred.resolve();
return deferred.promise();
}
//dummy upload
// 模拟上传过程(实际应用中需要替换为真实的上传逻辑)
setTimeout(function(){
// 如果浏览器支持FileReader则尝试获取并显示缩略图
if("FileReader" in window) {
//for browsers that have a thumbnail of selected image
var thumb = $('#avatar').next().find('img').data('thumb');
if(thumb) $('#avatar').get(0).src = thumb;
}
// 解析延迟对象,表示上传成功,并显示成功通知
deferred.resolve({'status':'OK'});
if(last_gritter) $.gritter.remove(last_gritter);
last_gritter = $.gritter.add({
@ -655,13 +687,20 @@
text: 'Uploading to server can be easily implemented. A working example is included with the template.',
class_name: 'gritter-info gritter-center'
});
} , parseInt(Math.random() * 800 + 800))
}, parseInt(Math.random() * 800 + 800)); // 随机延迟一段时间(模拟上传过程)
// 返回延迟对象的promise供外部使用
return deferred.promise();
// ***END OF UPDATE AVATAR HERE*** //
// *** 更新头像的逻辑结束 *** //
},
// 成功回调(此处未实现具体逻辑)
success: function(response, newValue) {
}
})
// 捕获并忽略可能出现的异常(虽然此处在代码中没有直接作用,但可能是为了安全起见而添加的)
}catch(e) {}
/**
//let's display edit mode by default?
@ -766,7 +805,7 @@
});
///////////////////////////////////////////
//right & left position
//show the user info on right or left depending on its position
//当鼠标进入或触摸开始时,显示用户信息在右侧或左侧,取决于其位置
$('#user-profile-2 .memberdiv').on('mouseenter touchstart', function(){
var $this = $(this);
var $parent = $this.closest('.tab-pane');
@ -775,12 +814,15 @@
var off2 = $this.offset();
var w2 = $this.width();
var place = 'left';
//判断用户信息框应该显示在左侧还是右侧
if( parseInt(off2.left) < parseInt(off1.left) + parseInt(w1 / 2) ) place = 'right';
$this.find('.popover').removeClass('right left').addClass(place);
}).on('click', function(e) {
e.preventDefault();
//阻止默认点击事件
});
///////////////////////////////////////////
//初始化用户头像上传组件
$('#user-profile-3')
.find('input[type=file]').ace_file_input({
style:'well',
@ -793,30 +835,37 @@
allowMime: ['image/jpg', 'image/jpeg', 'image/png', 'image/gif']
})
.end().find('button[type=reset]').on(ace.click_event, function(){
//重置文件输入框
$('#user-profile-3 input[type=file]').ace_file_input('reset_input');
})
.end().find('.date-picker').datepicker().next().on(ace.click_event, function(){
//触发日期选择框的焦点
$(this).prev().focus();
})
//为电话号码输入框应用掩码格式
$('.input-mask-phone').mask('(999) 999-9999');
//显示当前头像在文件列表中
$('#user-profile-3').find('input[type=file]').ace_file_input('show_file_list', [{type: 'image', name: $('#avatar').attr('src')}]);
////////////////////
//change profile
//切换用户信息页面
$('[data-toggle="buttons"] .btn').on('click', function(e){
var target = $(this).find('input[type=radio]');
var which = parseInt(target.val());
//隐藏所有用户信息页面,显示被选中的页面
$('.user-profile').parent().addClass('hide');
$('#user-profile-'+which).parent().removeClass('hide');
});
/////////////////////////////////////
//在AJAX加载开始前清理页面元素
$(document).one('ajaxloadstart.page', function(e) {
//in ajax mode, remove remaining elements before leaving page
try {
//销毁可编辑元素
$('.editable').editable('destroy');
} catch(e) {}
//移除所有select2元素
$('[class*=select2]').remove();
});
});
</script>
</body>
</html>

@ -5,31 +5,40 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- 设定IE浏览器使用最新的渲染引擎 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<!-- 设置网页编码为UTF-8 -->
<meta charset="utf-8" />
<!-- 页面标题 -->
<title>查看药品库存列表 - 医院药品库存管理系统</title>
<!-- 页面描述有助于SEO -->
<meta name="description" content="查看药品库存列表 - 医院药品库存管理系统" />
<!-- 视口设置,确保页面在不同设备上正确显示 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<!-- bootstrap & fontawesome -->
<!-- 引入Bootstrap和FontAwesome样式 -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" />
<!-- page specific plugin styles -->
<!-- text fonts -->
<!-- 页面特定插件的样式 -->
<!-- 引入文本字体样式 -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" />
<!-- ace styles -->
<!-- 引入Ace框架的样式 -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" />
<!-- 针对IE9及以下版本的样式 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-part2.min.css" class="ace-main-stylesheet" />
<![endif]-->
<!-- 引入Ace框架的皮肤样式 -->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" />
<!-- 引入Ace框架的RTL从右到左支持样式 -->
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" />
<!-- 针对IE9及以下版本的样式 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-ie.min.css" />
<![endif]-->
<!-- inline styles related to this page -->
<!-- ace settings handler -->
<!-- 与本页相关的内联样式 -->
<!-- 引入Ace框架的设置处理器脚本 -->
<script src="../assets/js/ace-extra.min.js"></script>
<!-- HTML5shiv and Respond.js for IE8 to support HTML5 elements and media queries -->
<!-- 引入HTML5shiv和Respond.js库用于IE8支持HTML5元素和媒体查询 -->
<!--[if lte IE 8]>
<script src="../assets/js/html5shiv.min.js"></script>
<script src="../assets/js/respond.min.js"></script>
@ -408,36 +417,42 @@
<script src="../assets/js/jquery-1.11.3.min.js"></script>
<![endif]-->
<script type="text/javascript">
// 检查浏览器是否支持触摸事件如果是则动态加载移动端的jQuery库
if('ontouchstart' in document.documentElement) document.write("<script src='../assets/js/jquery.mobile.custom.min.js'>"+"<"+"/script>");
</script>
<!-- 引入Bootstrap的JavaScript库 -->
<script src="../assets/js/bootstrap.min.js"></script>
<!-- page specific plugin scripts -->
<script src="../assets/js/jquery.dataTables.min.js"></script>
<script src="../assets/js/jquery.dataTables.bootstrap.min.js"></script>
<script src="../assets/js/dataTables.buttons.min.js"></script>
<script src="../assets/js/buttons.flash.min.js"></script>
<script src="../assets/js/buttons.html5.min.js"></script>
<script src="../assets/js/buttons.print.min.js"></script>
<script src="../assets/js/buttons.colVis.min.js"></script>
<script src="../assets/js/dataTables.select.min.js"></script>
<!-- ace scripts -->
<script src="../assets/js/ace-elements.min.js"></script>
<script src="../assets/js/ace.min.js"></script>
<!-- inline scripts related to this page -->
<!-- 页面特定的插件脚本 -->
<script src="../assets/js/jquery.dataTables.min.js"></script> <!-- 引入DataTables插件 -->
<script src="../assets/js/jquery.dataTables.bootstrap.min.js"></script> <!-- DataTables的Bootstrap样式集成 -->
<script src="../assets/js/dataTables.buttons.min.js"></script> <!-- DataTables的按钮扩展 -->
<script src="../assets/js/buttons.flash.min.js"></script> <!-- 按钮扩展的Flash导出功能 -->
<script src="../assets/js/buttons.html5.min.js"></script> <!-- 按钮扩展的HTML5导出功能 -->
<script src="../assets/js/buttons.print.min.js"></script> <!-- 按钮扩展的打印功能 -->
<script src="../assets/js/buttons.colVis.min.js"></script> <!-- 按钮扩展的列可见性控制 -->
<script src="../assets/js/dataTables.select.min.js"></script> <!-- DataTables的选择功能 -->
<!-- Ace框架的脚本 -->
<script src="../assets/js/ace-elements.min.js"></script> <!-- Ace框架的元素脚本 -->
<script src="../assets/js/ace.min.js"></script> <!-- Ace框架的核心脚本 -->
<!-- 与本页面相关的内联脚本 -->
<script type="text/javascript">
jQuery(function($) {
//initiate dataTables plugin
// 初始化DataTables插件
var myTable =
$('#dynamic-table')
//.wrap("<div class='dataTables_borderWrap' />") //if you are applying horizontal scrolling (sScrollX)
//.wrap("<div class='dataTables_borderWrap' />") // 如果应用水平滚动sScrollX可以取消注释这行代码
.DataTable( {
bAutoWidth: false,
"aoColumns": [
bAutoWidth: false, // 关闭自动宽度调整
"aoColumns": [ // 定义各列的排序属性
{ "bSortable": false }, null,null, null, null, { "bSortable": false }
],
"aaSorting": [],
"iDisplayLength": 5,
"aLengthMenu": [
"aaSorting": [], // 初始化时不排序
"iDisplayLength": 5, // 默认每页显示5条记录
"aLengthMenu": [ // 定义每页显示记录数的选项
[5, 10, 15, 20, 25, 30, 35, 40, 45, 50, -1],
["5 条", "10 条", "15 条", "20 条", "25 条", "30 条", "35 条", "40 条", "45 条", "50 条", "全部"]
],
@ -448,29 +463,28 @@
"sInfoEmpty": "没有数据",
"sInfoFiltered": "(从 _MAX_ 条数据中检索) ",
"sSearch": "检索",
"oPaginate": {
"oPaginate": { // 分页按钮的文本
"sFirst": "首页",
"sPrevious": "前一页",
"sNext": "后一页",
"sLast": "尾页"
}
},
// 以下选项被注释,表示未启用
// "bProcessing": true,
// "bServerSide": true,
// "sAjaxSource": "http://127.0.0.1/table.php",
//,
// "sScrollY": "200px",
// "bPaginate": false,
// "sScrollX": "100%",
// "sScrollXInner": "120%",
// "bScrollCollapse": true,
//Note: if you are applying horizontal scrolling (sScrollX) on a ".table-bordered"
//you may want to wrap the table inside a "div.dataTables_borderWrap" element
//"iDisplayLength": 50
select: {
style: 'multi'
select: { // 选择功能的配置
style: 'multi' // 多选模式
}
} );
});
</script>
$.fn.dataTable.Buttons.defaults.dom.container.className = 'dt-buttons btn-overlap btn-group btn-overlap';
new $.fn.dataTable.Buttons( myTable, {
buttons: [
@ -510,100 +524,140 @@
]
} );
myTable.buttons().container().appendTo( $('.tableTools-container') );
// 将DataTables的按钮容器附加到.tableTools-container元素中
//style the message box
var defaultCopyAction = myTable.button(1).action();
// 获取复制按钮的默认操作
myTable.button(1).action(function (e, dt, button, config) {
defaultCopyAction(e, dt, button, config);
// 执行复制按钮的默认操作
$('.dt-button-info').addClass('gritter-item-wrapper gritter-info gritter-center white');
// 为消息框添加样式
});
var defaultColvisAction = myTable.button(0).action();
// 获取列显示/隐藏按钮的默认操作
myTable.button(0).action(function (e, dt, button, config) {
defaultColvisAction(e, dt, button, config);
// 执行列显示/隐藏按钮的默认操作
if($('.dt-button-collection > .dropdown-menu').length == 0) {
// 如果下拉菜单不存在
$('.dt-button-collection')
.wrapInner('<ul class="dropdown-menu dropdown-light dropdown-caret dropdown-caret" />')
.find('a').attr('href', '#').wrap("<li />")
// 将按钮集合包装成下拉菜单样式
}
$('.dt-button-collection').appendTo('.tableTools-container .dt-buttons')
// 将下拉菜单附加到.tableTools-container的.dt-buttons中
});
////
setTimeout(function() {
// 设置一个延时确保DOM元素已经渲染完成
$($('.tableTools-container')).find('a.dt-button').each(function() {
var div = $(this).find(' > div').first();
// 为每个按钮找到它的第一个直接子div
if(div.length == 1) div.tooltip({container: 'body', title: div.parent().text()});
// 如果找到div为这个div添加tooltip
else $(this).tooltip({container: 'body', title: $(this).text()});
// 否则为按钮本身添加tooltip
});
}, 500);
// 设置延时500毫秒后执行上述代码
myTable.on( 'select', function ( e, dt, type, index ) {
// 监听行选择事件
if ( type === 'row' ) {
$( myTable.row( index ).node() ).find('input:checkbox').prop('checked', true);
// 如果选择了行将该行的checkbox设置为选中状态
}
} );
myTable.on( 'deselect', function ( e, dt, type, index ) {
// 监听行取消选择事件
if ( type === 'row' ) {
$( myTable.row( index ).node() ).find('input:checkbox').prop('checked', false);
// 如果取消了行的选择将该行的checkbox设置为未选中状态
}
} );
/////////////////////////////////
//table checkboxes
$('th input[type=checkbox], td input[type=checkbox]').prop('checked', false);
// 将表头和表体中的所有checkbox设置为未选中状态
//select/deselect all rows according to table header checkbox
$('#dynamic-table > thead > tr > th input[type=checkbox], #dynamic-table_wrapper input[type=checkbox]').eq(0).on('click', function(){
var th_checked = this.checked;//checkbox inside "TH" table header
// 获取表头checkbox的选中状态
$('#dynamic-table').find('tbody > tr').each(function(){
var row = this;
if(th_checked) myTable.row(row).select();
else myTable.row(row).deselect();
// 根据表头checkbox的状态选择或取消选择每一行
});
});
//select/deselect a row when the checkbox is checked/unchecked
// 监听表头checkbox的点击事件根据点击状态选择或取消选择所有行
// 当复选框被选中或取消选中时,选择或取消选择对应的行
$('#dynamic-table').on('click', 'td input[type=checkbox]' , function(){
var row = $(this).closest('tr').get(0);
if(this.checked) myTable.row(row).deselect();
else myTable.row(row).select();
var row = $(this).closest('tr').get(0); // 获取当前复选框所在的行
// 注意这里的逻辑可能有问题:通常当复选框被选中时应该选择行,被取消选中时应该取消选择行
// 但这里的代码是在复选框被选中时调用 deselect 方法,在取消选中时调用 select 方法
// 这可能是个错误,或者是特定上下文中的特殊逻辑
if(this.checked) myTable.row(row).deselect(); // 如果复选框被选中,则取消选择该行
else myTable.row(row).select(); // 如果复选框被取消选中,则选择该行
});
// 阻止 #dynamic-table 中 .dropdown-toggle 的点击事件冒泡和默认行为
$(document).on('click', '#dynamic-table .dropdown-toggle', function(e) {
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
e.stopImmediatePropagation(); // 立即停止事件冒泡
e.stopPropagation(); // 停止事件冒泡
e.preventDefault(); // 阻止默认行为
});
//And for the first simple table, which doesn't have TableTools or dataTables
//select/deselect all rows according to table header checkbox
var active_class = 'active';
// 对于没有 TableTools 或 dataTables 的简单表格
// 根据表头复选框选中状态选择或取消选择所有行
var active_class = 'active'; // 定义活动行的类名
$('#simple-table > thead > tr > th input[type=checkbox]').eq(0).on('click', function(){
var th_checked = this.checked;//checkbox inside "TH" table header
$(this).closest('table').find('tbody > tr').each(function(){
var row = this;
if(th_checked) $(row).addClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', true);
else $(row).removeClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', false);
var th_checked = this.checked; // 获取表头复选框的选中状态
$(this).closest('table').find('tbody > tr').each(function(){ // 遍历表格中的所有行
var row = this; // 当前行
if(th_checked) { // 如果表头复选框被选中
$(row).addClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', true); // 为当前行添加活动类名,并选中复选框
} else { // 如果表头复选框被取消选中
$(row).removeClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', false); // 移除当前行的活动类名,并取消选中复选框
}
});
});
//select/deselect a row when the checkbox is checked/unchecked
// 当简单表格中的复选框被选中或取消选中时,选择或取消选择对应的行(并添加或移除活动类名)
$('#simple-table').on('click', 'td input[type=checkbox]' , function(){
var $row = $(this).closest('tr');
if($row.is('.detail-row ')) return;
if(this.checked) $row.addClass(active_class);
else $row.removeClass(active_class);
var $row = $(this).closest('tr'); // 获取当前复选框所在的行
if($row.is('.detail-row ')) return; // 如果当前行是详情行,则直接返回,不做任何操作
if(this.checked) $row.addClass(active_class); // 如果复选框被选中,则为当前行添加活动类名
else $row.removeClass(active_class); // 如果复选框被取消选中,则移除当前行的活动类名
});
/********************************/
//add tooltip for small view action buttons in dropdown menu
$('[data-rel="tooltip"]').tooltip({placement: tooltip_placement});
//tooltip placement on right or left
// 为小视图操作按钮添加工具提示
$('[data-rel="tooltip"]').tooltip({placement: tooltip_placement}); // 使用自定义的 tooltip_placement 函数来确定工具提示的位置
// 工具提示位置在右侧或左侧的判断函数
function tooltip_placement(context, source) {
var $source = $(source);
var $parent = $source.closest('table')
var off1 = $parent.offset();
var w1 = $parent.width();
var off2 = $source.offset();
//var w2 = $source.width();
var $source = $(source); // 获取触发工具提示的元素
var $parent = $source.closest('table'); // 获取最近的表格父元素
var off1 = $parent.offset(); // 获取表格的偏移量
var w1 = $parent.width(); // 获取表格的宽度
var off2 = $source.offset(); // 获取触发元素的偏移量
// 这里的 w2 没有被使用,可能是原始代码中的遗留部分
// if( parseInt(off2.left) < parseInt(off1.left) + parseInt(w1 / 2) ) return 'right'; // 这行代码原本用于判断位置,但由于 w2 未使用,可能不是最终逻辑
// 简化后的逻辑:如果触发元素的左偏移量小于表格左偏移量加上表格宽度的一半,则工具提示显示在右侧,否则显示在左侧
if( parseInt(off2.left) < parseInt(off1.left) + parseInt(w1 / 2) ) return 'right';
return 'left';
}
/***************/
// 点击显示详情按钮时,切换详情行的显示状态,并切换按钮图标
$('.show-details-btn').on('click', function(e) {
e.preventDefault();
$(this).closest('tr').next().toggleClass('open');
$(this).find(ace.vars['.icon']).toggleClass('fa-angle-double-down').toggleClass('fa-angle-double-up');
e.preventDefault(); // 阻止默认行为
$(this).closest('tr').next().toggleClass('open'); // 切换下一行的 'open' 类名,用于显示或隐藏详情行
$(this).find(ace.vars['.icon']).toggleClass('fa-angle-double-down').toggleClass('fa-angle-double-up'); // 切换按钮图标
});
/***************/
/**

@ -5,34 +5,46 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- 设置IE浏览器使用最新的渲染引擎并尝试使用Chrome Frame -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<!-- 定义文档的字符编码为UTF-8 -->
<meta charset="utf-8" />
<!-- 页面标题,显示在浏览器标签上 -->
<title>查看已处理处方列表 - 医院药品库存管理系统</title>
<!-- 页面描述有助于SEO搜索引擎优化 -->
<meta name="description" content="查看已处理处方列表 - 医院药品库存管理系统" />
<!-- 视口设置,确保页面在不同设备上正确缩放和显示 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<!-- bootstrap & fontawesome -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" />
<!-- page specific plugin styles -->
<!-- text fonts -->
<!-- 引入Bootstrap和FontAwesome的CSS样式 -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" /> <!-- Bootstrap框架样式 -->
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" /> <!-- FontAwesome图标库样式 -->
<!-- 页面特定插件的样式(此处未具体列出) -->
<!-- 引入文本字体样式 -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" />
<!-- ace styles -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" />
<!-- 引入Ace框架的CSS样式 -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" /> <!-- Ace框架的主要样式 -->
<!-- 针对IE9及以下版本的样式 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-part2.min.css" class="ace-main-stylesheet" />
<%-- <!-- Ace框架针对IE9及以下版本的额外样式 -->--%>
<![endif]-->
<!-- 引入Ace框架的皮肤样式 -->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" />
<!-- 引入Ace框架的RTL从右到左支持样式 -->
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" />
<!-- 针对IE9及以下版本的样式 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-ie.min.css" />
<%-- <!-- Ace框架针对IE9及以下版本的样式 -->--%>
<![endif]-->
<!-- inline styles related to this page -->
<!-- ace settings handler -->
<script src="../assets/js/ace-extra.min.js"></script>
<!-- HTML5shiv and Respond.js for IE8 to support HTML5 elements and media queries -->
<!-- 与本页相关的内联样式(此处未具体列出) -->
<!-- 引入Ace框架的设置处理器脚本 -->
<script src="../assets/js/ace-extra.min.js"></script> <!-- Ace框架的额外功能脚本 -->
<!-- 引入HTML5shiv和Respond.js库用于IE8支持HTML5元素和媒体查询 -->
<!--[if lte IE 8]>
<script src="../assets/js/html5shiv.min.js"></script>
<script src="../assets/js/respond.min.js"></script>
<%-- <!-- HTML5shiv库使IE8支持HTML5元素 -->--%>
<script src="../assets/js/respond.min.js"></script> <!-- Respond.js库使IE8支持媒体查询 -->
<![endif]-->
</head>
<body class="no-skin">
@ -563,100 +575,131 @@
]
} );
myTable.buttons().container().appendTo( $('.tableTools-container') );
// 将DataTables的按钮容器附加到指定的.tableTools-container元素中
//style the message box
var defaultCopyAction = myTable.button(1).action();
// 获取第二个按钮索引从0开始的默认行为复制操作
myTable.button(1).action(function (e, dt, button, config) {
defaultCopyAction(e, dt, button, config);
// 执行默认的复制操作
$('.dt-button-info').addClass('gritter-item-wrapper gritter-info gritter-center white');
// 为消息框添加样式
});
var defaultColvisAction = myTable.button(0).action();
// 获取第一个按钮(列显示/隐藏按钮)的默认行为
myTable.button(0).action(function (e, dt, button, config) {
defaultColvisAction(e, dt, button, config);
// 执行默认的列显示/隐藏操作
if($('.dt-button-collection > .dropdown-menu').length == 0) {
// 如果列显示/隐藏按钮的下拉菜单不存在
$('.dt-button-collection')
.wrapInner('<ul class="dropdown-menu dropdown-light dropdown-caret dropdown-caret" />')
.find('a').attr('href', '#').wrap("<li />")
// 为下拉菜单添加ul元素并将链接包裹在li元素中
}
$('.dt-button-collection').appendTo('.tableTools-container .dt-buttons')
// 将列显示/隐藏按钮的下拉菜单附加到指定的容器中
});
////
setTimeout(function() {
// 使用setTimeout延迟执行确保DOM元素已经渲染完成
$($('.tableTools-container')).find('a.dt-button').each(function() {
var div = $(this).find(' > div').first();
// 为每个按钮找到其直接子div元素
if(div.length == 1) div.tooltip({container: 'body', title: div.parent().text()});
// 如果找到div则为其添加tooltip提示内容为父元素的文本
else $(this).tooltip({container: 'body', title: $(this).text()});
// 否则为按钮本身添加tooltip提示内容为按钮的文本
});
}, 500);
// 监听行选择事件
myTable.on( 'select', function ( e, dt, type, index ) {
if ( type === 'row' ) {
// 如果是行选择
$( myTable.row( index ).node() ).find('input:checkbox').prop('checked', true);
// 将对应行的checkbox设置为选中状态
}
} );
// 监听行取消选择事件
myTable.on( 'deselect', function ( e, dt, type, index ) {
if ( type === 'row' ) {
// 如果是行取消选择
$( myTable.row( index ).node() ).find('input:checkbox').prop('checked', false);
// 将对应行的checkbox设置为未选中状态
}
} );
/////////////////////////////////
//table checkboxes
// 将表格头部和单元格中的复选框的选中状态设置为false
$('th input[type=checkbox], td input[type=checkbox]').prop('checked', false);
//select/deselect all rows according to table header checkbox
// 根据表头复选框的状态选择/取消选择所有行
$('#dynamic-table > thead > tr > th input[type=checkbox], #dynamic-table_wrapper input[type=checkbox]').eq(0).on('click', function(){
var th_checked = this.checked;//checkbox inside "TH" table header
var th_checked = this.checked; // 表头复选框的选中状态
$('#dynamic-table').find('tbody > tr').each(function(){
var row = this;
if(th_checked) myTable.row(row).select();
else myTable.row(row).deselect();
if(th_checked) myTable.row(row).select(); // 选中行
else myTable.row(row).deselect(); // 取消选中行
});
});
//select/deselect a row when the checkbox is checked/unchecked
// 当复选框被选中/取消选中时,选择/取消选择对应行
$('#dynamic-table').on('click', 'td input[type=checkbox]' , function(){
var row = $(this).closest('tr').get(0);
if(this.checked) myTable.row(row).deselect();
else myTable.row(row).select();
var row = $(this).closest('tr').get(0); // 获取当前行
if(this.checked) myTable.row(row).deselect(); // 如果选中,则取消选择(此处逻辑可能需要根据实际情况调整)
else myTable.row(row).select(); // 如果取消选中,则选择(此处逻辑可能需要根据实际情况调整)
});
// 阻止下拉菜单触发事件冒泡
$(document).on('click', '#dynamic-table .dropdown-toggle', function(e) {
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
e.stopImmediatePropagation(); // 立即停止事件冒泡
e.stopPropagation(); // 停止事件冒泡
e.preventDefault(); // 阻止默认行为
});
//And for the first simple table, which doesn't have TableTools or dataTables
//select/deselect all rows according to table header checkbox
var active_class = 'active';
// 对于没有使用TableTools或dataTables的简单表格根据表头复选框选择/取消选择所有行
var active_class = 'active'; // 激活状态的类名
$('#simple-table > thead > tr > th input[type=checkbox]').eq(0).on('click', function(){
var th_checked = this.checked;//checkbox inside "TH" table header
var th_checked = this.checked; // 表头复选框的选中状态
$(this).closest('table').find('tbody > tr').each(function(){
var row = this;
if(th_checked) $(row).addClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', true);
else $(row).removeClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', false);
if(th_checked) $(row).addClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', true); // 选中行并设置复选框为选中状态
else $(row).removeClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', false); // 取消选中行并设置复选框为未选中状态
});
});
//select/deselect a row when the checkbox is checked/unchecked
// 当简单表格中的复选框被选中/取消选中时,添加/移除激活状态的类
$('#simple-table').on('click', 'td input[type=checkbox]' , function(){
var $row = $(this).closest('tr');
if($row.is('.detail-row ')) return;
if(this.checked) $row.addClass(active_class);
else $row.removeClass(active_class);
var $row = $(this).closest('tr'); // 获取当前行
if($row.is('.detail-row ')) return; // 如果是详情行,则直接返回
if(this.checked) $row.addClass(active_class); // 如果选中,则添加激活状态的类
else $row.removeClass(active_class); // 如果取消选中,则移除激活状态的类
});
/********************************/
//add tooltip for small view action buttons in dropdown menu
// 为小视图中的下拉菜单动作按钮添加提示工具
$('[data-rel="tooltip"]').tooltip({placement: tooltip_placement});
//tooltip placement on right or left
// 提示工具的位置(右侧或左侧)
function tooltip_placement(context, source) {
var $source = $(source);
var $parent = $source.closest('table')
var off1 = $parent.offset();
var w1 = $parent.width();
var off2 = $source.offset();
//var w2 = $source.width();
if( parseInt(off2.left) < parseInt(off1.left) + parseInt(w1 / 2) ) return 'right';
return 'left';
var $source = $(source); // 提示工具的源元素
var $parent = $source.closest('table'); // 源元素的最近表格父元素
var off1 = $parent.offset(); // 表格的偏移量
var w1 = $parent.width(); // 表格的宽度
var off2 = $source.offset(); // 源元素的偏移量
//var w2 = $source.width(); // 源元素的宽度(未使用)
if( parseInt(off2.left) < parseInt(off1.left) + parseInt(w1 / 2) ) return 'right'; // 如果源元素在表格左半部分,则提示工具显示在右侧
return 'left'; // 否则,提示工具显示在左侧
}
/***************/
// 点击显示详情按钮时,切换详情行的显示状态并更改图标的方向
$('.show-details-btn').on('click', function(e) {
e.preventDefault();
$(this).closest('tr').next().toggleClass('open');
$(this).find(ace.vars['.icon']).toggleClass('fa-angle-double-down').toggleClass('fa-angle-double-up');
e.preventDefault(); // 阻止默认行为
$(this).closest('tr').next().toggleClass('open'); // 切换下一行(详情行)的显示状态
$(this).find(ace.vars['.icon']).toggleClass('fa-angle-double-down').toggleClass('fa-angle-double-up'); // 切换图标方向
});
/***************/
/**

@ -5,34 +5,46 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- 设置IE浏览器使用最新的渲染引擎如果已安装Google Chrome Frame则使用它 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<!-- 设置文档的字符编码为UTF-8 -->
<meta charset="utf-8" />
<!-- 页面标题,显示在浏览器标签上 -->
<title>查看未处理处方列表 - 医院药品库存管理系统</title>
<!-- 页面描述有助于SEO -->
<meta name="description" content="查看未处理处方列表 - 医院药品库存管理系统" />
<!-- 视口设置,确保页面在不同设备上正确缩放和显示 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<!-- bootstrap & fontawesome -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" />
<!-- page specific plugin styles -->
<!-- text fonts -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" />
<!-- ace styles -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" />
<!-- 引入Bootstrap和FontAwesome的CSS样式 -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" /> <!-- Bootstrap框架样式 -->
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" /> <!-- FontAwesome图标库样式 -->
<!-- 页面特定插件的CSS样式此处未列出具体样式文件但注释说明其存在 -->
<!-- 引入文本字体样式 -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" /> <!-- Google字体样式或其他字体样式 -->
<!-- 引入Ace框架的CSS样式 -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" /> <!-- Ace框架的主要样式 -->
<!-- 针对IE9及以下版本的Ace框架样式 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-part2.min.css" class="ace-main-stylesheet" />
<%-- <!-- Ace框架针对IE9及以下版本的额外样式 -->--%>
<![endif]-->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" />
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" />
<!-- 引入Ace框架的皮肤样式 -->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" /> <!-- Ace框架皮肤样式 -->
<!-- 引入Ace框架的RTL从右到左支持样式 -->
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" /> <!-- Ace框架RTL支持样式 -->
<!-- 针对IE9及以下版本的Ace框架样式 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-ie.min.css" />
<%-- <!-- Ace框架针对IE9及以下版本的样式 -->--%>
<![endif]-->
<!-- inline styles related to this page -->
<!-- ace settings handler -->
<script src="../assets/js/ace-extra.min.js"></script>
<!-- HTML5shiv and Respond.js for IE8 to support HTML5 elements and media queries -->
<!-- 与本页相关的内联样式(此处未列出具体样式,但注释说明其可能存在) -->
<!-- 引入Ace框架的设置处理器脚本 -->
<script src="../assets/js/ace-extra.min.js"></script> <!-- Ace框架的额外功能脚本 -->
<!-- 引入HTML5shiv和Respond.js库用于IE8支持HTML5元素和媒体查询 -->
<!--[if lte IE 8]>
<script src="../assets/js/html5shiv.min.js"></script>
<script src="../assets/js/respond.min.js"></script>
<%-- <!-- HTML5shiv库使IE8支持HTML5元素 -->--%>
<script src="../assets/js/respond.min.js"></script> <!-- Respond.js库使IE8支持媒体查询 -->
<![endif]-->
</head>
<body class="no-skin">
@ -557,100 +569,131 @@
]
} );
myTable.buttons().container().appendTo( $('.tableTools-container') );
//style the message box
// 将DataTables按钮的容器移动到指定的.tableTools-container元素中
// 为消息框添加样式
var defaultCopyAction = myTable.button(1).action();
// 获取myTable中第二个按钮索引从0开始的默认行为通常是复制操作
myTable.button(1).action(function (e, dt, button, config) {
defaultCopyAction(e, dt, button, config);
// 执行默认的复制操作
$('.dt-button-info').addClass('gritter-item-wrapper gritter-info gritter-center white');
// 为.dt-button-info元素添加一些CSS类以改变其样式
});
var defaultColvisAction = myTable.button(0).action();
// 获取myTable中第一个按钮通常是列可见性切换按钮的默认行为
myTable.button(0).action(function (e, dt, button, config) {
defaultColvisAction(e, dt, button, config);
// 执行默认的列可见性切换操作
if($('.dt-button-collection > .dropdown-menu').length == 0) {
// 如果.dt-button-collection下没有.dropdown-menu元素
$('.dt-button-collection')
.wrapInner('<ul class="dropdown-menu dropdown-light dropdown-caret dropdown-caret" />')
.find('a').attr('href', '#').wrap("<li />")
.find('a').attr('href', '#').wrap("<li />");
// 则为其添加ul元素作为下拉菜单并将所有链接包裹在li元素中
}
$('.dt-button-collection').appendTo('.tableTools-container .dt-buttons')
$('.dt-button-collection').appendTo('.tableTools-container .dt-buttons');
// 将.dt-button-collection元素移动到.tableTools-container下的.dt-buttons元素中
});
////
// 延迟执行以下代码确保DOM元素已经渲染完成
setTimeout(function() {
$($('.tableTools-container')).find('a.dt-button').each(function() {
var div = $(this).find(' > div').first();
// 获取当前按钮下的第一个直接子div元素
if(div.length == 1) div.tooltip({container: 'body', title: div.parent().text()});
// 如果找到了div则为其添加tooltip提示提示内容为div的父元素的文本
else $(this).tooltip({container: 'body', title: $(this).text()});
// 否则为当前按钮添加tooltip提示提示内容为按钮的文本
});
}, 500);
// 监听行选择事件
myTable.on( 'select', function ( e, dt, type, index ) {
if ( type === 'row' ) {
// 如果是行选择事件
$( myTable.row( index ).node() ).find('input:checkbox').prop('checked', true);
// 将选中行的checkbox设置为选中状态
}
});
// 监听行取消选择事件
myTable.on( 'deselect', function ( e, dt, type, index ) {
if ( type === 'row' ) {
// 如果是行取消选择事件
$( myTable.row( index ).node() ).find('input:checkbox').prop('checked', false);
// 将取消选中行的checkbox设置为未选中状态
}
});
/////////////////////////////////
//table checkboxes
// 将表格头部和单元格内的复选框全部取消选中
$('th input[type=checkbox], td input[type=checkbox]').prop('checked', false);
//select/deselect all rows according to table header checkbox
// 根据表头复选框的选择状态,全选或全不选表格行
$('#dynamic-table > thead > tr > th input[type=checkbox], #dynamic-table_wrapper input[type=checkbox]').eq(0).on('click', function(){
var th_checked = this.checked;//checkbox inside "TH" table header
var th_checked = this.checked; // 表头复选框的选中状态
$('#dynamic-table').find('tbody > tr').each(function(){
var row = this;
if(th_checked) myTable.row(row).select();
else myTable.row(row).deselect();
if(th_checked) myTable.row(row).select(); // 如果表头复选框被选中,则选中对应行
else myTable.row(row).deselect(); // 否则,取消选中对应行
});
});
//select/deselect a row when the checkbox is checked/unchecked
// 当单元格内的复选框被选中或取消选中时,选择或取消选择对应行
$('#dynamic-table').on('click', 'td input[type=checkbox]' , function(){
var row = $(this).closest('tr').get(0);
if(this.checked) myTable.row(row).deselect();
else myTable.row(row).select();
var row = $(this).closest('tr').get(0); // 获取当前行
if(this.checked) myTable.row(row).deselect(); // 如果复选框被选中,则取消选择对应行(此处逻辑可能有误,通常应选中)
else myTable.row(row).select(); // 否则,选择对应行
});
// 阻止表格中的下拉按钮触发冒泡事件
$(document).on('click', '#dynamic-table .dropdown-toggle', function(e) {
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
e.stopImmediatePropagation(); // 立即停止事件在DOM树中的传播
e.stopPropagation(); // 阻止事件冒泡
e.preventDefault(); // 阻止事件的默认行为
});
//And for the first simple table, which doesn't have TableTools or dataTables
//select/deselect all rows according to table header checkbox
// 对于没有TableTools或dataTables的简单表格实现全选或全不选功能
var active_class = 'active';
$('#simple-table > thead > tr > th input[type=checkbox]').eq(0).on('click', function(){
var th_checked = this.checked;//checkbox inside "TH" table header
var th_checked = this.checked; // 表头复选框的选中状态
$(this).closest('table').find('tbody > tr').each(function(){
var row = this;
if(th_checked) $(row).addClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', true);
else $(row).removeClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', false);
if(th_checked) $(row).addClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', true); // 全选
else $(row).removeClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', false); // 全不选
});
});
//select/deselect a row when the checkbox is checked/unchecked
// 当简单表格中的单元格复选框被选中或取消选中时添加或移除active类
$('#simple-table').on('click', 'td input[type=checkbox]' , function(){
var $row = $(this).closest('tr');
if($row.is('.detail-row ')) return;
if(this.checked) $row.addClass(active_class);
else $row.removeClass(active_class);
var $row = $(this).closest('tr'); // 获取当前行
if($row.is('.detail-row ')) return; // 如果是详情行,则不执行后续操作
if(this.checked) $row.addClass(active_class); // 如果复选框被选中则添加active类
else $row.removeClass(active_class); // 否则移除active类
});
/********************************/
//add tooltip for small view action buttons in dropdown menu
// 为小视图中的下拉菜单动作按钮添加提示工具
$('[data-rel="tooltip"]').tooltip({placement: tooltip_placement});
//tooltip placement on right or left
// 根据上下文确定提示工具的显示位置(右侧或左侧)
function tooltip_placement(context, source) {
var $source = $(source);
var $parent = $source.closest('table')
var $parent = $source.closest('table');
var off1 = $parent.offset();
var w1 = $parent.width();
var off2 = $source.offset();
//var w2 = $source.width();
if( parseInt(off2.left) < parseInt(off1.left) + parseInt(w1 / 2) ) return 'right';
return 'left';
if( parseInt(off2.left) < parseInt(off1.left) + parseInt(w1 / 2) ) return 'right'; // 如果元素在表格左侧,则提示显示在右侧
return 'left'; // 否则,提示显示在左侧
}
/***************/
// 点击显示详情按钮时,切换详情行的显示状态,并切换图标
$('.show-details-btn').on('click', function(e) {
e.preventDefault();
$(this).closest('tr').next().toggleClass('open');
$(this).find(ace.vars['.icon']).toggleClass('fa-angle-double-down').toggleClass('fa-angle-double-up');
e.preventDefault(); // 阻止默认行为
$(this).closest('tr').next().toggleClass('open'); // 切换下一行的open类以显示或隐藏详情行
$(this).find(ace.vars['.icon']).toggleClass('fa-angle-double-down').toggleClass('fa-angle-double-up'); // 切换图标
});
/***************/
/**

@ -5,34 +5,62 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- 设置IE浏览器使用最新的渲染引擎如果已安装Google Chrome Frame则使用它 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<!-- 设置文档的字符编码为UTF-8 -->
<meta charset="utf-8" />
<!-- 页面标题 -->
<title>欢迎 - 医院药品库存管理系统</title>
<!-- 页面描述有助于SEO -->
<meta name="description" content="欢迎 - 医院药品库存管理系统" />
<!-- 视口设置,确保页面在不同设备上正确缩放和显示 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<!-- bootstrap & fontawesome -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" />
<!-- page specific plugin styles -->
<!-- text fonts -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" />
<!-- ace styles -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" />
<!-- 引入Bootstrap和FontAwesome的CSS样式 -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" /> <!-- Bootstrap框架样式 -->
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" /> <!-- FontAwesome图标库样式 -->
<!-- 页面特定插件的CSS样式此处未列出具体样式文件但注释说明其存在 -->
<!-- 引入文本字体样式 -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" /> <!-- Google字体或其他字体样式 -->
<!-- 引入Ace框架的CSS样式 -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" /> <!-- Ace框架的主要样式 -->
<!-- 针对IE9及以下版本的Ace框架样式 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-part2.min.css" class="ace-main-stylesheet" />
<%-- <!-- Ace框架针对IE9及以下版本的额外样式 -->--%>
<![endif]-->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" />
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" />
<!-- 引入Ace框架的皮肤样式 -->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" /> <!-- Ace框架皮肤样式 -->
<!-- 引入Ace框架的RTL从右到左支持样式 -->
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" /> <!-- Ace框架RTL支持样式 -->
<!-- 针对IE9及以下版本的Ace框架样式 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-ie.min.css" />
<%-- <!-- Ace框架针对IE9及以下版本的样式 -->--%>
<![endif]-->
<!-- inline styles related to this page -->
<!-- ace settings handler -->
<script src="../assets/js/ace-extra.min.js"></script>
<!-- HTML5shiv and Respond.js for IE8 to support HTML5 elements and media queries -->
<!-- 与本页相关的内联样式(此处未列出具体样式,但注释说明其可能存在) -->
<!-- 引入Ace框架的设置处理器脚本 -->
<script src="../assets/js/ace-extra.min.js"></script> <!-- Ace框架的额外功能脚本 -->
<!-- 引入HTML5shiv和Respond.js库用于IE8支持HTML5元素和媒体查询 -->
<!--[if lte IE 8]>
<script src="../assets/js/html5shiv.min.js"></script>
<%-- <!-- HTML5shiv库使IE8支持HTML5元素 -->--%>
<script src="../assets/js/respond.min.js"></script>
<%--<!-- Respond.js库使IE8支持媒体查询 -->--%>
<![endif]-->
</head>
<body class="no-skin">
@ -449,166 +477,205 @@
chartRangeMin:$(this).data('min') || 0
});
});
//flot chart resize plugin, somehow manipulates default browser resize event to optimize it!
//but sometimes it brings up errors with normal resize event handlers
// flot chart resize plugin 注释:
// 该插件用于优化浏览器的默认调整大小事件,但有时会与正常的调整大小事件处理程序产生冲突。
// 因此,下面这行代码禁用了该插件对窗口调整大小的节流处理。
$.resize.throttleWindow = false;
// 初始化饼状图占位符,并设置其宽度和最小高度。
var placeholder = $('#piechart-placeholder').css({'width':'90%' , 'min-height':'150px'});
// 定义饼状图的数据集。
var data = [
// 每个对象代表一个数据点,包含标签、数据和颜色。
{ label: "social networks", data: 38.7, color: "#68BC31"},
{ label: "search engines", data: 24.5, color: "#2091CF"},
{ label: "ad campaigns", data: 8.2, color: "#AF4E96"},
{ label: "direct traffic", data: 18.6, color: "#DA5430"},
{ label: "other", data: 10, color: "#FEE074"}
]
];
// 定义绘制饼状图的函数。
function drawPieChart(placeholder, data, position) {
// 使用flot插件绘制饼状图。
$.plot(placeholder, data, {
series: {
pie: {
// 启用饼状图。
show: true,
// 倾斜度。
tilt:0.8,
// 高亮效果。
highlight: {
opacity: 0.25
},
// 描边设置。
stroke: {
color: '#fff',
width: 2
},
// 起始角度。
startAngle: 2
}
},
legend: {
// 显示图例。
show: true,
// 图例位置。
position: position || "ne",
// 图例边框颜色。
labelBoxBorderColor: null,
// 图例边距。
margin:[-30,15]
}
,
},
grid: {
// 启用悬停和点击事件。
hoverable: true,
clickable: true
}
})
});
}
// 调用绘制饼状图的函数。
drawPieChart(placeholder, data);
/**
we saved the drawing function and the data to redraw with different position later when switching to RTL mode dynamically
so that's not needed actually.
*/
// 保存绘制函数和数据以便日后在切换到RTL模式时以不同位置重新绘制。
// 但实际上此处的保存可能并非必需。
placeholder.data('chart', data);
placeholder.data('draw', drawPieChart);
//pie chart tooltip example
// 饼状图提示框示例。
var $tooltip = $("<div class='tooltip top in'><div class='tooltip-inner'></div></div>").hide().appendTo('body');
var previousPoint = null;
// 为占位符绑定悬停事件。
placeholder.on('plothover', function (event, pos, item) {
if(item) {
// 如果鼠标悬停在新的数据点上,则更新提示框内容并显示。
if (previousPoint != item.seriesIndex) {
previousPoint = item.seriesIndex;
var tip = item.series['label'] + " : " + item.series['percent']+'%';
$tooltip.show().children(0).text(tip);
}
// 更新提示框位置。
$tooltip.css({top:pos.pageY + 10, left:pos.pageX + 10});
} else {
// 如果鼠标不在任何数据点上,则隐藏提示框。
$tooltip.hide();
previousPoint = null;
}
});
/////////////////////////////////////
// 在页面开始加载ajax内容时移除提示框。
$(document).one('ajaxloadstart.page', function(e) {
$tooltip.remove();
});
var d1 = [];
// 准备三个数据集用于绘制折线图。
var d1 = [], d2 = [], d3 = [];
for (var i = 0; i < Math.PI * 2; i += 0.5) {
d1.push([i, Math.sin(i)]);
}
var d2 = [];
for (var i = 0; i < Math.PI * 2; i += 0.5) {
d2.push([i, Math.cos(i)]);
}
var d3 = [];
for (var i = 0; i < Math.PI * 2; i += 0.2) {
d3.push([i, Math.tan(i)]);
}
// 初始化折线图占位符,并设置其宽度和高度。
var sales_charts = $('#sales-charts').css({'width':'100%' , 'height':'220px'});
// 使用flot插件绘制折线图。
$.plot("#sales-charts", [
{ label: "Domains", data: d1 },
{ label: "Hosting", data: d2 },
{ label: "Services", data: d3 }
], {
// 启用悬停事件。
hoverable: true,
// 阴影大小设置为0。
shadowSize: 0,
series: {
// 显示线条和点。
lines: { show: true },
points: { show: true }
},
xaxis: {
// 刻度长度设置为0。
tickLength: 0
},
yaxis: {
// y轴刻度设置。
ticks: 10,
min: -2,
max: 2,
tickDecimals: 3
},
grid: {
// 网格背景色和边框设置。
backgroundColor: { colors: [ "#fff", "#fff" ] },
borderWidth: 1,
borderColor:'#555'
}
});
// 为具有data-rel="tooltip"属性的元素初始化Bootstrap提示框。
$('#recent-box [data-rel="tooltip"]').tooltip({placement: tooltip_placement});
// 定义提示框位置的函数。
function tooltip_placement(context, source) {
var $source = $(source);
var $parent = $source.closest('.tab-content')
var $parent = $source.closest('.tab-content');
var off1 = $parent.offset();
var w1 = $parent.width();
var off2 = $source.offset();
//var w2 = $source.width();
//var w2 = $source.width(); // 未使用的变量
// 根据元素位置确定提示框的显示方向。
if( parseInt(off2.left) < parseInt(off1.left) + parseInt(w1 / 2) ) return 'right';
return 'left';
}
// 为.dialogs和.comments元素启用ace滚动条插件。
$('.dialogs,.comments').ace_scroll({
size: 300
});
//Android's default browser somehow is confused when tapping on label which will lead to dragging the task
//so disable dragging when clicking on label
var agent = navigator.userAgent.toLowerCase();
if(ace.vars['touch'] && ace.vars['android']) {
$('#tasks').on('touchstart', function(e){
var li = $(e.target).closest('#tasks li');
if(li.length == 0)return;
var label = li.find('label.inline').get(0);
if(label == e.target || $.contains(label, e.target)) e.stopImmediatePropagation() ;
//Android的默认浏览器在点击label时会混淆导致拖动任务
//因此在点击label时禁用拖动
var agent = navigator.userAgent.toLowerCase(); // 获取用户代理字符串并转换为小写
if(ace.vars['touch'] && ace.vars['android']) { // 检查是否为触摸设备和Android系统
$('#tasks').on('touchstart', function(e){ // 绑定touchstart事件到#tasks元素
var li = $(e.target).closest('#tasks li'); // 获取点击事件最近的li元素
if(li.length == 0)return; // 如果没有找到li元素则直接返回
var label = li.find('label.inline').get(0); // 在li元素内查找class为inline的label元素
if(label == e.target || $.contains(label, e.target)) e.stopImmediatePropagation() ; // 如果点击的是label或其子元素则阻止事件继续传播
});
}
$('#tasks').sortable({
opacity:0.8,
revert:true,
forceHelperSize:true,
placeholder: 'draggable-placeholder',
forcePlaceholderSize:true,
tolerance:'pointer',
stop: function( event, ui ) {
//just for Chrome!!!! so that dropdowns on items don't appear below other items after being moved
$('#tasks').sortable({ // 使#tasks元素可排序
opacity:0.8, // 拖动时的透明度
revert:true, // 拖动后是否返回原位
forceHelperSize:true, // 强制帮助器大小
placeholder: 'draggable-placeholder', // 占位符的class
forcePlaceholderSize:true, // 强制占位符大小
tolerance:'pointer', // 触发排序的容差
stop: function( event, ui ) { // 排序停止时的事件
//仅为Chrome浏览器设置以确保项目移动后下拉菜单不会出现在其他项目下方
$(ui.item).css('z-index', 'auto');
}
}
);
$('#tasks').disableSelection();
$('#tasks input:checkbox').removeAttr('checked').on('click', function(){
if(this.checked) $(this).closest('li').addClass('selected');
else $(this).closest('li').removeClass('selected');
$('#tasks').disableSelection(); // 禁用#tasks元素内的文本选择
$('#tasks input:checkbox').removeAttr('checked').on('click', function(){ // 为#tasks内的checkbox元素移除checked属性并绑定点击事件
if(this.checked) $(this).closest('li').addClass('selected'); // 如果checkbox被选中则为其最近的li元素添加selected类
else $(this).closest('li').removeClass('selected'); // 如果checkbox未选中则移除其最近的li元素的selected类
});
//show the dropdowns on top or bottom depending on window height and menu position
$('#task-tab .dropdown-hover').on('mouseenter', function(e) {
var offset = $(this).offset();
//根据窗口高度和菜单位置显示下拉菜单在顶部或底部
$('#task-tab .dropdown-hover').on('mouseenter', function(e) { // 为#task-tab内的.dropdown-hover元素绑定mouseenter事件
var offset = $(this).offset(); // 获取元素的偏移量
var $w = $(window)
if (offset.top > $w.scrollTop() + $w.innerHeight() - 100)
$(this).addClass('dropup');
else $(this).removeClass('dropup');
var $w = $(window) // 获取窗口对象
if (offset.top > $w.scrollTop() + $w.innerHeight() - 100) // 如果元素顶部距离大于窗口滚动距离加窗口内高度减去100
$(this).addClass('dropup'); // 则添加dropup类表示下拉菜单应显示在上方
else $(this).removeClass('dropup'); // 否则移除dropup类
});
})
</script>

@ -5,39 +5,66 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- 设置IE浏览器使用最新的渲染引擎如果已安装Google Chrome Frame则使用它 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<!-- 设置文档的字符编码为UTF-8 -->
<meta charset="utf-8" />
<!-- 页面标题 -->
<title>个人信息页面 - 医院药品库存管理系统</title>
<!-- 页面描述有助于SEO -->
<meta name="description" content="个人信息页面 - 医院药品库存管理系统" />
<!-- 视口设置,确保页面在不同设备上正确缩放和显示 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<!-- bootstrap & fontawesome -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" />
<!-- page specific plugin styles -->
<link rel="stylesheet" href="../assets/css/jquery-ui.custom.min.css" />
<link rel="stylesheet" href="../assets/css/jquery.gritter.min.css" />
<link rel="stylesheet" href="../assets/css/select2.min.css" />
<link rel="stylesheet" href="../assets/css/bootstrap-datepicker3.min.css" />
<link rel="stylesheet" href="../assets/css/bootstrap-editable.min.css" />
<!-- text fonts -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" />
<!-- ace styles -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" />
<!-- 引入Bootstrap和FontAwesome的CSS样式 -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" /> <!-- Bootstrap框架样式 -->
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" /> <!-- FontAwesome图标库样式 -->
<!-- 页面特定插件的CSS样式 -->
<link rel="stylesheet" href="../assets/css/jquery-ui.custom.min.css" /> <!-- jQuery UI自定义样式 -->
<link rel="stylesheet" href="../assets/css/jquery.gritter.min.css" /> <!-- Gritter通知插件样式 -->
<link rel="stylesheet" href="../assets/css/select2.min.css" /> <!-- Select2选择框插件样式 -->
<link rel="stylesheet" href="../assets/css/bootstrap-datepicker3.min.css" /> <!-- Bootstrap日期选择器插件样式 -->
<link rel="stylesheet" href="../assets/css/bootstrap-editable.min.css" /> <!-- Bootstrap可编辑插件样式 -->
<!-- 引入文本字体样式 -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" /> <!-- Google字体或其他字体样式 -->
<!-- 引入Ace框架的CSS样式 -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" /> <!-- Ace框架的主要样式 -->
<!-- 针对IE9及以下版本的Ace框架样式 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-part2.min.css" class="ace-main-stylesheet" />
<%-- <!-- Ace框架针对IE9及以下版本的额外样式 -->--%>
<![endif]-->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" />
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" />
<!-- 引入Ace框架的皮肤样式 -->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" /> <!-- Ace框架皮肤样式 -->
<!-- 引入Ace框架的RTL从右到左支持样式 -->
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" /> <!-- Ace框架RTL支持样式 -->
<!-- 针对IE9及以下版本的Ace框架样式 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-ie.min.css" />
<%-- <!-- Ace框架针对IE9及以下版本的样式 -->--%>
<![endif]-->
<!-- inline styles related to this page -->
<!-- ace settings handler -->
<script src="../assets/js/ace-extra.min.js"></script>
<!-- HTML5shiv and Respond.js for IE8 to support HTML5 elements and media queries -->
<!-- 与本页相关的内联样式(此处未列出具体样式,但注释说明其可能存在) -->
<!-- 引入Ace框架的设置处理器脚本 -->
<script src="../assets/js/ace-extra.min.js"></script> <!-- Ace框架的额外功能脚本 -->
<!-- 引入HTML5shiv和Respond.js库用于IE8支持HTML5元素和媒体查询 -->
<!--[if lte IE 8]>
<script src="../assets/js/html5shiv.min.js"></script>
<script src="../assets/js/respond.min.js"></script>
<%-- <!-- HTML5shiv库使IE8支持HTML5元素 -->--%>
<script src="../assets/js/respond.min.js"></script> <!-- Respond.js库使IE8支持媒体查询 -->
<![endif]-->
</head>
<body class="no-skin">
@ -744,77 +771,91 @@
});
});
//////////////////////////////
// 初始化ace_scroll插件用于设置指定元素的滚动行为
$('#profile-feed-1').ace_scroll({
height: '250px',
mouseWheelLock: true,
alwaysVisible : true
height: '250px', // 设置滚动容器的高度
mouseWheelLock: true, // 锁定鼠标滚轮,使其只能在滚动容器内滚动
alwaysVisible : true // 滚动条始终可见
});
// 初始化tooltip插件为所有包含data-original-title属性的<a>标签添加提示框
$('a[ data-original-title]').tooltip();
// 遍历所有class为easy-pie-chart且包含data-color属性的元素初始化easyPieChart插件
$('.easy-pie-chart.percentage').each(function(){
var barColor = $(this).data('color') || '#555';
var trackColor = '#E2E2E2';
var size = parseInt($(this).data('size')) || 72;
var barColor = $(this).data('color') || '#555'; // 获取自定义的条颜色,如果没有则使用#555
var trackColor = '#E2E2E2'; // 设置轨道颜色
var size = parseInt($(this).data('size')) || 72; // 获取自定义的大小如果没有则使用72
$(this).easyPieChart({
barColor: barColor,
trackColor: trackColor,
scaleColor: false,
lineCap: 'butt',
lineWidth: parseInt(size/10),
animate:false,
size: size
}).css('color', barColor);
barColor: barColor, // 设置条颜色
trackColor: trackColor, // 设置轨道颜色
scaleColor: false, // 不显示比例尺颜色
lineCap: 'butt', // 设置线条末端样式
lineWidth: parseInt(size/10), // 设置线条宽度
animate:false, // 不使用动画效果
size: size // 设置图表大小
}).css('color', barColor); // 设置元素的颜色与条颜色一致
});
///////////////////////////////////////////
//right & left position
//show the user info on right or left depending on its position
// 当鼠标进入或触摸#user-profile-2下的.memberdiv元素时根据元素位置显示用户信息
$('#user-profile-2 .memberdiv').on('mouseenter touchstart', function(){
var $this = $(this);
var $parent = $this.closest('.tab-pane');
var off1 = $parent.offset();
var w1 = $parent.width();
var off2 = $this.offset();
var w2 = $this.width();
var place = 'left';
var $this = $(this); // 当前元素
var $parent = $this.closest('.tab-pane'); // 当前元素的最近父级.tab-pane元素
var off1 = $parent.offset(); // 获取父级元素的偏移量
var w1 = $parent.width(); // 获取父级元素的宽度
var off2 = $this.offset(); // 获取当前元素的偏移量
var w2 = $this.width(); // 获取当前元素的宽度
var place = 'left'; // 默认显示位置为左侧
// 如果当前元素的左偏移量小于父级元素左偏移量加上父级元素宽度的一半,则显示位置为右侧
if( parseInt(off2.left) < parseInt(off1.left) + parseInt(w1 / 2) ) place = 'right';
$this.find('.popover').removeClass('right left').addClass(place);
$this.find('.popover').removeClass('right left').addClass(place); // 根据计算结果设置显示位置
}).on('click', function(e) {
e.preventDefault();
e.preventDefault(); // 阻止默认点击事件
});
///////////////////////////////////////////
// 初始化ace_file_input插件用于文件上传
$('#user-profile-3')
.find('input[type=file]').ace_file_input({
style:'well',
btn_choose:'Change avatar',
btn_change:null,
no_icon:'ace-icon fa fa-picture-o',
thumbnail:'large',
droppable:true,
allowExt: ['jpg', 'jpeg', 'png', 'gif'],
allowMime: ['image/jpg', 'image/jpeg', 'image/png', 'image/gif']
style:'well', // 设置样式
btn_choose:'Change avatar', // 设置选择按钮的文本
btn_change:null, // 不显示更改按钮
no_icon:'ace-icon fa fa-picture-o', // 没有文件时显示的图标
thumbnail:'large', // 设置缩略图大小
droppable:true, // 允许拖放文件
allowExt: ['jpg', 'jpeg', 'png', 'gif'], // 允许的文件扩展名
allowMime: ['image/jpg', 'image/jpeg', 'image/png', 'image/gif'] // 允许的文件MIME类型
})
.end().find('button[type=reset]').on(ace.click_event, function(){
// 重置文件输入
$('#user-profile-3 input[type=file]').ace_file_input('reset_input');
})
.end().find('.date-picker').datepicker().next().on(ace.click_event, function(){
// 点击日期选择器的图标时,聚焦到输入框
$(this).prev().focus();
})
// 初始化input的mask插件用于格式化电话号码输入
$('.input-mask-phone').mask('(999) 999-9999');
// 显示初始文件列表(这里假设#avatar是图片元素的id
$('#user-profile-3').find('input[type=file]').ace_file_input('show_file_list', [{type: 'image', name: $('#avatar').attr('src')}]);
////////////////////
//change profile
// 切换用户信息页面的显示
$('[data-toggle="buttons"] .btn').on('click', function(e){
var target = $(this).find('input[type=radio]');
var which = parseInt(target.val());
$('.user-profile').parent().addClass('hide');
$('#user-profile-'+which).parent().removeClass('hide');
var target = $(this).find('input[type=radio]'); // 获取按钮内的单选按钮
var which = parseInt(target.val()); // 获取单选按钮的值
$('.user-profile').parent().addClass('hide'); // 隐藏所有用户信息页面
$('#user-profile-'+which).parent().removeClass('hide'); // 显示选中的用户信息页面
});
/////////////////////////////////////
// 在页面即将通过Ajax加载新内容时销毁editable插件和移除select2元素
$(document).one('ajaxloadstart.page', function(e) {
//in ajax mode, remove remaining elements before leaving page
try {
$('.editable').editable('destroy');
$('.editable').editable('destroy'); // 销毁editable插件
} catch(e) {}
$('[class*=select2]').remove();
$('[class*=select2]').remove(); // 移除select2元素
});
});
</script>

@ -5,34 +5,61 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- 设置IE浏览器使用最新的渲染引擎如果已安装Google Chrome Frame则优先使用 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<!-- 设置网页内容的字符编码为UTF-8 -->
<meta charset="utf-8" />
<!-- 定义网页的标题 -->
<title>查看药品库存列表 - 医院药品库存管理系统</title>
<!-- 网页的描述信息有助于SEO搜索引擎优化 -->
<meta name="description" content="查看药品库存列表 - 医院药品库存管理系统" />
<!-- 设置视口,确保网页在不同设备上正确缩放 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<!-- bootstrap & fontawesome -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" />
<!-- page specific plugin styles -->
<!-- text fonts -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" />
<!-- ace styles -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" />
<!-- 引入Bootstrap和FontAwesome的CSS样式 -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" /> <!-- Bootstrap框架样式 -->
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" /> <!-- FontAwesome图标库样式 -->
<!-- 页面特定插件的CSS样式此处未列出但注释说明其可能存在 -->
<!-- 引入文本字体样式 -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" /> <!-- Google字体或其他字体样式 -->
<!-- 引入Ace框架的CSS样式 -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" /> <!-- Ace框架的主要样式 -->
<!-- 针对IE9及以下版本的Ace框架样式 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-part2.min.css" class="ace-main-stylesheet" />
<%-- <!-- Ace框架针对IE9及以下版本的额外样式 -->--%>
<![endif]-->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" />
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" />
<!-- 引入Ace框架的皮肤样式 -->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" /> <!-- Ace框架皮肤样式 -->
<!-- 引入Ace框架的RTL从右到左支持样式 -->
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" /> <!-- Ace框架RTL支持样式 -->
<!-- 针对IE9及以下版本的Ace框架样式 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-ie.min.css" />
<%-- <!-- Ace框架针对IE9及以下版本的样式 -->--%>
<![endif]-->
<!-- inline styles related to this page -->
<!-- ace settings handler -->
<script src="../assets/js/ace-extra.min.js"></script>
<!-- HTML5shiv and Respond.js for IE8 to support HTML5 elements and media queries -->
<!-- 与本页相关的内联样式(此处未列出具体样式,但注释说明其可能存在) -->
<!-- 引入Ace框架的设置处理器脚本 -->
<script src="../assets/js/ace-extra.min.js"></script> <!-- Ace框架的额外功能脚本 -->
<!-- 引入HTML5shiv和Respond.js库用于IE8支持HTML5元素和媒体查询 -->
<!--[if lte IE 8]>
<script src="../assets/js/html5shiv.min.js"></script>
<script src="../assets/js/respond.min.js"></script>
<%-- <!-- HTML5shiv库使IE8支持HTML5元素 -->--%>
<script src="../assets/js/respond.min.js"></script> <!-- Respond.js库使IE8支持媒体查询 -->
<![endif]-->
</head>
<body class="no-skin">
@ -494,76 +521,105 @@
]
} );
myTable.buttons().container().appendTo( $('.tableTools-container') );
// 将DataTables的按钮容器附加到.tableTools-container元素内
//style the message box
var defaultCopyAction = myTable.button(1).action();
// 获取第二个按钮索引从0开始的默认复制操作
myTable.button(1).action(function (e, dt, button, config) {
defaultCopyAction(e, dt, button, config);
// 执行默认的复制操作
$('.dt-button-info').addClass('gritter-item-wrapper gritter-info gritter-center white');
// 给消息框添加样式
});
var defaultColvisAction = myTable.button(0).action();
// 获取第一个按钮的默认列可见性操作
myTable.button(0).action(function (e, dt, button, config) {
defaultColvisAction(e, dt, button, config);
// 执行默认的列可见性操作
if($('.dt-button-collection > .dropdown-menu').length == 0) {
// 如果没有找到dropdown-menu则包装按钮集合
$('.dt-button-collection')
.wrapInner('<ul class="dropdown-menu dropdown-light dropdown-caret dropdown-caret" />')
.find('a').attr('href', '#').wrap("<li />")
}
$('.dt-button-collection').appendTo('.tableTools-container .dt-buttons')
// 将按钮集合移动到.tableTools-container内的.dt-buttons
});
////
setTimeout(function() {
// 延迟执行确保DOM已渲染
$($('.tableTools-container')).find('a.dt-button').each(function() {
var div = $(this).find(' > div').first();
// 为每个按钮设置tooltip如果内部有div则使用div的父级文本作为tooltip否则使用按钮的文本
if(div.length == 1) div.tooltip({container: 'body', title: div.parent().text()});
else $(this).tooltip({container: 'body', title: $(this).text()});
});
}, 500);
myTable.on( 'select', function ( e, dt, type, index ) {
// 当选中一行时将对应的checkbox设为选中
if ( type === 'row' ) {
$( myTable.row( index ).node() ).find('input:checkbox').prop('checked', true);
}
} );
myTable.on( 'deselect', function ( e, dt, type, index ) {
// 当取消选中一行时将对应的checkbox设为未选中
if ( type === 'row' ) {
$( myTable.row( index ).node() ).find('input:checkbox').prop('checked', false);
}
} );
/////////////////////////////////
//table checkboxes
$('th input[type=checkbox], td input[type=checkbox]').prop('checked', false);
// 初始化所有checkbox为未选中状态
//select/deselect all rows according to table header checkbox
$('#dynamic-table > thead > tr > th input[type=checkbox], #dynamic-table_wrapper input[type=checkbox]').eq(0).on('click', function(){
var th_checked = this.checked;//checkbox inside "TH" table header
// 根据表头checkbox的状态选择或取消选择所有行
var th_checked = this.checked;
$('#dynamic-table').find('tbody > tr').each(function(){
var row = this;
if(th_checked) myTable.row(row).select();
else myTable.row(row).deselect();
});
});
//select/deselect a row when the checkbox is checked/unchecked
$('#dynamic-table').on('click', 'td input[type=checkbox]' , function(){
// 根据checkbox的状态选择或取消选择行逻辑可能有误通常选中checkbox应该选择行但这里却是在取消选中时选择行
var row = $(this).closest('tr').get(0);
if(this.checked) myTable.row(row).deselect();
else myTable.row(row).select();
});
$(document).on('click', '#dynamic-table .dropdown-toggle', function(e) {
// 阻止dropdown toggle的默认行为和冒泡
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
});
//And for the first simple table, which doesn't have TableTools or dataTables
//select/deselect all rows according to table header checkbox
var active_class = 'active';
$('#simple-table > thead > tr > th input[type=checkbox]').eq(0).on('click', function(){
var th_checked = this.checked;//checkbox inside "TH" table header
// 根据表头checkbox的状态为简单表格的所有行添加或移除active类
var th_checked = this.checked;
$(this).closest('table').find('tbody > tr').each(function(){
var row = this;
if(th_checked) $(row).addClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', true);
else $(row).removeClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', false);
});
});
//select/deselect a row when the checkbox is checked/unchecked
$('#simple-table').on('click', 'td input[type=checkbox]' , function(){
// 根据checkbox的状态为简单表格的行添加或移除active类
var $row = $(this).closest('tr');
if($row.is('.detail-row ')) return;
if(this.checked) $row.addClass(active_class);
@ -572,19 +628,21 @@
/********************************/
//add tooltip for small view action buttons in dropdown menu
$('[data-rel="tooltip"]').tooltip({placement: tooltip_placement});
// 为具有data-rel="tooltip"属性的元素添加tooltip并自定义位置
//tooltip placement on right or left
function tooltip_placement(context, source) {
var $source = $(source);
var $parent = $source.closest('table')
var $parent = $source.closest('table');
var off1 = $parent.offset();
var w1 = $parent.width();
var off2 = $source.offset();
//var w2 = $source.width();
// 根据源元素和父元素的位置关系决定tooltip显示在左侧还是右侧
if( parseInt(off2.left) < parseInt(off1.left) + parseInt(w1 / 2) ) return 'right';
return 'left';
}
/***************/
$('.show-details-btn').on('click', function(e) {
// 切换详情行的显示状态,并更改按钮图标
e.preventDefault();
$(this).closest('tr').next().toggleClass('open');
$(this).find(ace.vars['.icon']).toggleClass('fa-angle-double-down').toggleClass('fa-angle-double-up');

@ -5,31 +5,50 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- 设置IE浏览器使用最新的渲染引擎如果IE安装了Google Chrome Frame插件则使用Chrome的渲染引擎 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<!-- 设置网页编码为UTF-8 -->
<meta charset="utf-8" />
<!-- 设置网页标题 -->
<title>查看具体批次明细 - 医院药品库存管理系统</title>
<!-- 设置网页描述有助于SEO -->
<meta name="description" content="查看具体批次明细 - 医院药品库存管理系统" />
<!-- 设置视口,使页面在移动设备上能正确显示 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<!-- bootstrap & fontawesome -->
<!-- 引入Bootstrap和FontAwesome的样式表 -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" />
<!-- page specific plugin styles -->
<!-- text fonts -->
<!-- 页面特定插件的样式表 -->
<!-- 引入文本字体样式表 -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" />
<!-- ace styles -->
<!-- 引入Ace框架的主样式表 -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" />
<!-- 如果浏览器版本为IE9及以下则引入Ace框架的补充样式表 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-part2.min.css" class="ace-main-stylesheet" />
<![endif]-->
<!-- 引入Ace框架的皮肤样式表 -->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" />
<!-- 引入Ace框架的RTL从右到左的语言如阿拉伯语支持样式表 -->
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" />
<!-- 如果浏览器版本为IE9及以下则引入Ace框架的IE专用样式表 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-ie.min.css" />
<![endif]-->
<!-- inline styles related to this page -->
<!-- ace settings handler -->
<!-- 与当前页面相关的内联样式(此处无具体内容) -->
<!-- 引入Ace框架的设置处理器脚本 -->
<script src="../assets/js/ace-extra.min.js"></script>
<!-- HTML5shiv and Respond.js for IE8 to support HTML5 elements and media queries -->
<!-- 引入HTML5shiv和Respond.js脚本以支持IE8及以下版本的浏览器对HTML5元素和媒体查询的识别 -->
<!--[if lte IE 8]>
<script src="../assets/js/html5shiv.min.js"></script>
<script src="../assets/js/respond.min.js"></script>
@ -574,40 +593,56 @@
</div>
</div>
<a href="#" id="btn-scroll-up" class="btn-scroll-up btn btn-sm btn-inverse">
<!-- 这是一个返回顶部的按钮,带有特定的样式类 -->
<i class="ace-icon fa fa-angle-double-up icon-only bigger-110"></i>
<!-- 这是一个图标用于表示向上箭头属于FontAwesome图标库同时被放大了 -->
</a>
</div><!-- /.main-container -->
<!-- basic scripts -->
<!-- 基本脚本 -->
<!--[if !IE]> -->
<script src="../assets/js/jquery-2.1.4.min.js"></script>
<!-- 如果不是IE浏览器则加载jQuery 2.1.4版本 -->
<!-- <![endif]-->
<!--[if IE]>
<script src="../assets/js/jquery-1.11.3.min.js"></script>
<%--<!-- 如果是IE浏览器则加载jQuery 1.11.3版本 -->--%>
<![endif]-->
<script type="text/javascript">
// 如果设备支持触摸事件如移动设备则加载jQuery Mobile的自定义版本
if('ontouchstart' in document.documentElement) document.write("<script src='../assets/js/jquery.mobile.custom.min.js'>"+"<"+"/script>");
</script>
<script src="../assets/js/bootstrap.min.js"></script>
<!-- page specific plugin scripts -->
<!-- 加载Bootstrap框架的JavaScript文件 -->
<!-- 页面特定的插件脚本 -->
<script src="../assets/js/jquery.dataTables.min.js"></script>
<!-- 加载DataTables插件用于表格的增强功能 -->
<script src="../assets/js/jquery.dataTables.bootstrap.min.js"></script>
<!-- DataTables的Bootstrap风格集成 -->
<script src="../assets/js/dataTables.buttons.min.js"></script>
<!-- DataTables的按钮扩展 -->
<script src="../assets/js/buttons.flash.min.js"></script>
<!-- Flash按钮的样式 -->
<script src="../assets/js/buttons.html5.min.js"></script>
<!-- HTML5按钮的样式 -->
<script src="../assets/js/buttons.print.min.js"></script>
<!-- 打印按钮的样式 -->
<script src="../assets/js/buttons.colVis.min.js"></script>
<!-- 列可视化的按钮 -->
<script src="../assets/js/dataTables.select.min.js"></script>
<!-- ace scripts -->
<!-- 表格行的选择功能 -->
<!-- ACE脚本 -->
<script src="../assets/js/ace-elements.min.js"></script>
<!-- ACE框架的元素脚本 -->
<script src="../assets/js/ace.min.js"></script>
<!-- inline scripts related to this page -->
<!-- ACE框架的主脚本 -->
<!-- 与本页相关的内联脚本 -->
<script type="text/javascript">
jQuery(function($) {
//And for the first simple table, which doesn't have TableTools or dataTables
//select/deselect all rows according to table header checkbox
// 对于第一个简单的表格它没有TableTools或dataTables的select/deselect功能
// 根据表头复选框选中或取消选中所有行
var active_class = 'active';
$('#simple-table > thead > tr > th input[type=checkbox]').eq(0).on('click', function(){
var th_checked = this.checked;//checkbox inside "TH" table header
var th_checked = this.checked;// 获取表头中的复选框选中状态
$(this).closest('table').find('tbody > tr').each(function(){
var row = this;
@ -615,7 +650,7 @@
else $(row).removeClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', false);
});
});
//select/deselect a row when the checkbox is checked/unchecked
// 当复选框被选中或取消选中时,选择或取消选择行
$('#simple-table').on('click', 'td input[type=checkbox]' , function(){
var $row = $(this).closest('tr');
if($row.is('.detail-row ')) return;
@ -623,12 +658,12 @@
else $row.removeClass(active_class);
});
/********************************/
//add tooltip for small view action buttons in dropdown menu
// 为下拉菜单中的小视图操作按钮添加工具提示
$('[data-rel="tooltip"]').tooltip({placement: tooltip_placement});
//tooltip placement on right or left
// 工具提示的放置位置(右侧或左侧)
function tooltip_placement(context, source) {
var $source = $(source);
var $parent = $source.closest('table')
var $parent = $source.closest('table');
var off1 = $parent.offset();
var w1 = $parent.width();
var off2 = $source.offset();
@ -637,11 +672,14 @@
return 'left';
}
/***************/
// 点击显示详细信息的按钮时的事件处理
$('.show-details-btn').on('click', function(e) {
e.preventDefault();
$(this).closest('tr').next().toggleClass('open');
$(this).find(ace.vars['.icon']).toggleClass('fa-angle-double-down').toggleClass('fa-angle-double-up');
});
});
</script>
/***************/
/**
//add horizontal scrollbars to a simple table

@ -5,38 +5,58 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- 设置IE浏览器以最新的渲染引擎模式运行如果安装了Google Chrome Frame则使用Chrome的渲染引擎 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<!-- 设置网页的字符编码为UTF-8 -->
<meta charset="utf-8" />
<!-- 设置网页的标题 -->
<title>查看具体处方明细 - 医院药品库存管理系统</title>
<!-- 设置网页的描述信息有助于SEO -->
<meta name="description" content="查看具体处方明细 - 医院药品库存管理系统" />
<!-- 设置视口确保页面在移动设备上正确显示宽度与设备宽度一致初始缩放比例为1最大缩放比例也为1 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<!-- bootstrap & fontawesome -->
<!-- 引入Bootstrap和FontAwesome的样式表 -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" />
<!-- page specific plugin styles -->
<link rel="stylesheet" href="../assets/css/jquery-ui.custom.min.css" />
<link rel="stylesheet" href="../assets/css/chosen.min.css" />
<link rel="stylesheet" href="../assets/css/bootstrap-datepicker3.min.css" />
<link rel="stylesheet" href="../assets/css/bootstrap-timepicker.min.css" />
<link rel="stylesheet" href="../assets/css/daterangepicker.min.css" />
<link rel="stylesheet" href="../assets/css/bootstrap-datetimepicker.min.css" />
<link rel="stylesheet" href="../assets/css/bootstrap-colorpicker.min.css" />
<!-- text fonts -->
<!-- 引入当前页面特定的插件样式表 -->
<link rel="stylesheet" href="../assets/css/jquery-ui.custom.min.css" /> <!-- jQuery UI自定义样式 -->
<link rel="stylesheet" href="../assets/css/chosen.min.css" /> <!-- Chosen下拉框样式 -->
<link rel="stylesheet" href="../assets/css/bootstrap-datepicker3.min.css" /> <!-- Bootstrap日期选择器样式 -->
<link rel="stylesheet" href="../assets/css/bootstrap-timepicker.min.css" /> <!-- Bootstrap时间选择器样式 -->
<link rel="stylesheet" href="../assets/css/daterangepicker.min.css" /> <!-- 日期范围选择器样式 -->
<link rel="stylesheet" href="../assets/css/bootstrap-datetimepicker.min.css" /> <!-- Bootstrap日期时间选择器样式 -->
<link rel="stylesheet" href="../assets/css/bootstrap-colorpicker.min.css" /> <!-- Bootstrap颜色选择器样式 -->
<!-- 引入文本字体样式表 -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" />
<!-- ace styles -->
<!-- 引入Ace框架的主样式表 -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" />
<!-- 如果浏览器版本为IE9及以下则引入Ace框架的补充样式表 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-part2.min.css" class="ace-main-stylesheet" />
<![endif]-->
<!-- 引入Ace框架的皮肤样式表 -->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" />
<!-- 引入Ace框架的RTL从右到左的语言如阿拉伯语支持样式表 -->
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" />
<!-- 如果浏览器版本为IE9及以下则引入Ace框架的IE专用样式表 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-ie.min.css" />
<![endif]-->
<!-- inline styles related to this page -->
<!-- ace settings handler -->
<!-- 与当前页面相关的内联样式(此处无具体内容) -->
<!-- 引入Ace框架的设置处理器脚本 -->
<script src="../assets/js/ace-extra.min.js"></script>
<!-- HTML5shiv and Respond.js for IE8 to support HTML5 elements and media queries -->
<!-- 引入HTML5shiv和Respond.js脚本以支持IE8及以下版本的浏览器对HTML5元素和媒体查询的识别 -->
<!--[if lte IE 8]>
<script src="../assets/js/html5shiv.min.js"></script>
<script src="../assets/js/respond.min.js"></script>
@ -1101,141 +1121,167 @@
});
*/
});
// 初始化第一个数值调节器,设置初始值、最小值、最大值、步长、上下按钮的样式
$('#spinner1').ace_spinner({value:0,min:0,max:200,step:10, btn_up_class:'btn-info' , btn_down_class:'btn-info'})
// 获取最近的父级元素.ace-spinner并为其绑定值改变事件
.closest('.ace-spinner')
.on('changed.fu.spinbox', function(){
//console.log($('#spinner1').val())
//console.log($('#spinner1').val()) // 打印当前值(此行代码被注释)
});
// 初始化第二个数值调节器,设置初始值、最小值、最大值、步长、启用触摸滑动、上下按钮的图标
$('#spinner2').ace_spinner({value:0,min:0,max:10000,step:100, touch_spinner: true, icon_up:'ace-icon fa fa-caret-up bigger-110', icon_down:'ace-icon fa fa-caret-down bigger-110'});
// 初始化第三个数值调节器,设置初始值、最小值、最大值、步长、在输入框两侧显示按钮、上下按钮的图标和样式
$('#spinner3').ace_spinner({value:0,min:-100,max:100,step:10, on_sides: true, icon_up:'ace-icon fa fa-plus bigger-110', icon_down:'ace-icon fa fa-minus bigger-110', btn_up_class:'btn-success' , btn_down_class:'btn-danger'});
// 初始化第四个数值调节器,设置初始值、最小值、最大值、步长、在输入框两侧显示按钮、上下按钮的图标和统一按钮样式
$('#spinner4').ace_spinner({value:0,min:-100,max:100,step:10, on_sides: true, icon_up:'ace-icon fa fa-plus', icon_down:'ace-icon fa fa-minus', btn_up_class:'btn-purple' , btn_down_class:'btn-purple'});
// 以下几行为注释掉的代码,展示了如何禁用、启用或改变数值调节器的值
//$('#spinner1').ace_spinner('disable').ace_spinner('value', 11);
//or
//$('#spinner1').closest('.ace-spinner').spinner('disable').spinner('enable').spinner('value', 11);//disable, enable or change value
//$('#spinner1').closest('.ace-spinner').spinner('value', 0);//reset to 0
//datepicker plugin
//link
// 初始化日期选择器插件
$('.date-picker').datepicker({
autoclose: true,
todayHighlight: true
autoclose: true, // 选择日期后自动关闭
todayHighlight: true // 高亮显示今天
})
//show datepicker when clicking on the icon
// 点击图标时显示日期选择器
.next().on(ace.click_event, function(){
$(this).prev().focus();
});
//or change it into a date range picker
// 初始化日期范围选择器
$('.input-daterange').datepicker({autoclose:true});
//to translate the daterange picker, please copy the "examples/daterange-fr.js" contents here before initialization
// 初始化日期范围选择器,并设置本地化选项
$('input[name=date-range-picker]').daterangepicker({
'applyClass' : 'btn-sm btn-success',
'cancelClass' : 'btn-sm btn-default',
'applyClass' : 'btn-sm btn-success', // 应用按钮样式
'cancelClass' : 'btn-sm btn-default', // 取消按钮样式
locale: {
applyLabel: 'Apply',
cancelLabel: 'Cancel',
applyLabel: 'Apply', // 应用标签
cancelLabel: 'Cancel', // 取消标签
}
})
.prev().on(ace.click_event, function(){
$(this).next().focus();
});
// 初始化时间选择器
$('#timepicker1').timepicker({
minuteStep: 1,
showSeconds: true,
showMeridian: false,
disableFocus: true,
minuteStep: 1, // 分钟步长
showSeconds: true, // 显示秒
showMeridian: false, // 不显示上午/下午
disableFocus: true, // 禁用聚焦时自动显示
icons: {
up: 'fa fa-chevron-up',
down: 'fa fa-chevron-down'
up: 'fa fa-chevron-up', // 向上图标
down: 'fa fa-chevron-down' // 向下图标
}
}).on('focus', function() {
$('#timepicker1').timepicker('showWidget');
$('#timepicker1').timepicker('showWidget'); // 聚焦时显示时间选择器
}).next().on(ace.click_event, function(){
$(this).prev().focus();
});
// 初始化日期时间选择器在非旧版IE浏览器中
if(!ace.vars['old_ie']) $('#date-timepicker1').datetimepicker({
format: 'MM/DD/YYYY h:mm:ss A',//use this option to display seconds
format: 'MM/DD/YYYY h:mm:ss A', // 日期时间格式(包含秒)
icons: {
time: 'fa fa-clock-o',
date: 'fa fa-calendar',
up: 'fa fa-chevron-up',
down: 'fa fa-chevron-down',
previous: 'fa fa-chevron-left',
next: 'fa fa-chevron-right',
today: 'fa fa-arrows ',
clear: 'fa fa-trash',
close: 'fa fa-times'
time: 'fa fa-clock-o', // 时间图标
date: 'fa fa-calendar', // 日期图标
up: 'fa fa-chevron-up', // 向上图标
down: 'fa fa-chevron-down', // 向下图标
previous: 'fa fa-chevron-left', // 上一个图标
next: 'fa fa-chevron-right', // 下一个图标
today: 'fa fa-arrows ', // 今天图标
clear: 'fa fa-trash', // 清除图标
close: 'fa fa-times' // 关闭图标
}
}).next().on(ace.click_event, function(){
$(this).prev().focus();
});
// 初始化颜色选择器
$('#colorpicker1').colorpicker();
//$('.colorpicker').last().css('z-index', 2000);//if colorpicker is inside a modal, its z-index should be higher than modal'safe
// 如果颜色选择器在模态框内需要设置更高的z-index此行代码被注释
//$('.colorpicker').last().css('z-index', 2000);
// 初始化简单颜色选择器
$('#simple-colorpicker-1').ace_colorpicker();
//$('#simple-colorpicker-1').ace_colorpicker('pick', 2);//select 2nd color
//$('#simple-colorpicker-1').ace_colorpicker('pick', '#fbe983');//select #fbe983 color
// 以下几行为注释掉的代码,展示了如何使用简单颜色选择器选择颜色
//$('#simple-colorpicker-1').ace_colorpicker('pick', 2); // 选择第二种颜色
//$('#simple-colorpicker-1').ace_colorpicker('pick', '#fbe983'); // 选择#fbe983颜色
//var picker = $('#simple-colorpicker-1').data('ace_colorpicker')
//picker.pick('red', true);//insert the color if it doesn't exist
$(".knob").knob();
var tag_input = $('#form-field-tags');
//picker.pick('red', true); // 如果颜色不存在则插入红色
$(".knob").knob(); // 初始化所有的.knob元素为knob插件的实例
var tag_input = $('#form-field-tags'); // 获取id为form-field-tags的元素
try{
tag_input.tag(
tag_input.tag( // 调用tag插件初始化
{
placeholder:tag_input.attr('placeholder'),
//enable typeahead by specifying the source array
source: ace.vars['US_STATES'],//defined in ace.js >> ace.enable_search_ahead
placeholder:tag_input.attr('placeholder'), // 设置placeholder属性为input元素的placeholder属性值
// 通过指定source数组启用typeahead
source: ace.vars['US_STATES'], // 使用ace.js中定义的US_STATES数组作为typeahead的数据源
/**
//or fetch data from database, fetch those that match "query"
// 或者从数据库中获取匹配"query"的数据
source: function(query, process) {
$.ajax({url: 'remote_source.php?q='+encodeURIComponent(query)})
$.ajax({url: 'remote_source.php?q='+encodeURIComponent(query)}) // 发送ajax请求到remote_source.php携带查询参数q
.done(function(result_items){
process(result_items);
process(result_items); // 处理返回的结果
});
}
*/
}
)
//programmatically add/remove a tag
var $tag_obj = $('#form-field-tags').data('tag');
$tag_obj.add('Programmatically Added');
var index = $tag_obj.inValues('some tag');
$tag_obj.remove(index);
// 程序化地添加/移除一个tag
var $tag_obj = $('#form-field-tags').data('tag'); // 获取tag插件的实例
$tag_obj.add('Programmatically Added'); // 添加一个名为"Programmatically Added"的tag
var index = $tag_obj.inValues('some tag'); // 查找名为"some tag"的tag的索引
$tag_obj.remove(index); // 移除找到的tag
}
catch(e) {
//display a textarea for old IE, because it doesn't support this plugin or another one I tried!
tag_input.after('<textarea id="'+tag_input.attr('id')+'" name="'+tag_input.attr('name')+'" rows="3">'+tag_input.val()+'</textarea>').remove();
//autosize($('#form-field-tags'));
// 对于不支持此插件的旧版IE显示一个textarea
tag_input.after('<textarea id="'+tag_input.attr('id')+'" name="'+tag_input.attr('name')+'" rows="3">'+tag_input.val()+'</textarea>').remove(); // 在tag_input后插入一个textarea并移除tag_input
//autosize($('#form-field-tags')); // 注释掉的代码可能是用于自动调整textarea大小的代码
}
/////////
$('#modal-form input[type=file]').ace_file_input({
style:'well',
btn_choose:'Drop files here or click to choose',
btn_change:null,
no_icon:'ace-icon fa fa-cloud-upload',
droppable:true,
thumbnail:'large'
$('#modal-form input[type=file]').ace_file_input({ // 为模态表单中的文件输入元素初始化ace_file_input插件
style:'well', // 设置样式为well
btn_choose:'Drop files here or click to choose', // 设置选择文件的按钮文本
btn_change:null, // 不显示更改按钮
no_icon:'ace-icon fa fa-cloud-upload', // 不显示图标使用ace-icon fa fa-cloud-upload作为class
droppable:true, // 允许拖放文件
thumbnail:'large' // 设置缩略图大小为large
})
//chosen plugin inside a modal will have a zero width because the select element is originally hidden
//and its width cannot be determined.
//so we set the width after modal is show
// chosen插件在模态框内会有零宽度因为原始的select元素是隐藏的无法确定其宽度
// 所以我们在模态框显示后设置宽度
$('#modal-form').on('shown.bs.modal', function () {
if(!ace.vars['touch']) {
$(this).find('.chosen-container').each(function(){
$(this).find('a:first-child').css('width' , '210px');
$(this).find('.chosen-drop').css('width' , '210px');
$(this).find('.chosen-search input').css('width' , '200px');
if(!ace.vars['touch']) { // 如果不是触摸设备
$(this).find('.chosen-container').each(function(){ // 对每个chosen容器
$(this).find('a:first-child').css('width' , '210px'); // 设置第一个a标签的宽度为210px
$(this).find('.chosen-drop').css('width' , '210px'); // 设置下拉菜单的宽度为210px
$(this).find('.chosen-search input').css('width' , '200px'); // 设置搜索框的宽度为200px
});
}
})
/**
//or you can activate the chosen plugin after modal is shown
//this way select element becomes visible with dimensions and chosen works as expected
// 或者你可以在模态框显示后激活chosen插件
// 这样select元素就会显示尺寸chosen插件也能正常工作
$('#modal-form').on('shown', function () {
$(this).find('.modal-chosen').chosen();
$(this).find('.modal-chosen').chosen(); // 初始化chosen插件
})
*/
$(document).one('ajaxloadstart.page', function(e) {
autosize.destroy('textarea[class*=autosize]')
$('.limiterBox,.autosizejs').remove();
$('.daterangepicker.dropdown-menu,.colorpicker.dropdown-menu,.bootstrap-datetimepicker-widget.dropdown-menu').remove();
$(document).one('ajaxloadstart.page', function(e) { // 在页面开始加载ajax内容时执行一次
autosize.destroy('textarea[class*=autosize]') // 销毁所有class包含autosize的textarea的autosize实例
$('.limiterBox,.autosizejs').remove(); // 移除所有limiterBox和autosizejs的class的元素
$('.daterangepicker.dropdown-menu,.colorpicker.dropdown-menu,.bootstrap-datetimepicker-widget.dropdown-menu').remove(); // 移除日期范围选择器、颜色选择器和日期时间选择器的下拉菜单
});
});
</script>

@ -5,34 +5,57 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- 设置IE浏览器使用最新的渲染引擎如果安装了Google Chrome Frame则优先使用Chrome的渲染引擎 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<!-- 设置网页的字符编码为UTF-8支持多语言字符显示 -->
<meta charset="utf-8" />
<!-- 设置网页的标题,显示在浏览器的标签页上 -->
<title>查看已处理处方列表 - 医院药品库存管理系统</title>
<!-- 设置网页的描述信息有助于SEO搜索引擎优化 -->
<meta name="description" content="查看已处理处方列表 - 医院药品库存管理系统" />
<!-- 设置视口确保页面在不同设备上正确显示宽度与设备宽度一致初始缩放比例为1最大缩放比例也为1 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<!-- bootstrap & fontawesome -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" />
<!-- 引入Bootstrap框架和FontAwesome图标的样式表 -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" /> <!-- Bootstrap样式表用于网页布局和样式 -->
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" /> <!-- FontAwesome图标样式表提供丰富的图标 -->
<!-- 页面特定的插件样式表(此处未列出具体样式文件,仅作为注释说明) -->
<!-- page specific plugin styles -->
<!-- text fonts -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" />
<!-- ace styles -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" />
<!-- 引入文本字体样式表,通常用于自定义字体 -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" /> <!-- 字体样式表可能从Google Fonts等服务引入 -->
<!-- 引入Ace框架的主样式表Ace是一个基于Bootstrap的后台管理界面框架 -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" /> <!-- Ace框架的主样式用于整体布局和样式 -->
<!-- 如果浏览器版本为IE9及以下则引入Ace框架的补充样式表 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-part2.min.css" class="ace-main-stylesheet" />
<%-- <!-- Ace框架的补充样式用于IE9及以下版本的兼容性 -->--%>
<![endif]-->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" />
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" />
<!-- 引入Ace框架的皮肤样式表用于定制界面外观 -->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" /> <!-- Ace框架的皮肤样式提供多种界面外观选择 -->
<!-- 引入Ace框架的RTL从右到左的语言如阿拉伯语支持样式表 -->
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" /> <!-- RTL支持样式用于从右到左的语言布局 -->
<!-- 如果浏览器版本为IE9及以下则引入Ace框架的IE专用样式表 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-ie.min.css" />
<%-- <!-- Ace框架的IE专用样式用于IE9及以下版本的兼容性 -->--%>
<![endif]-->
<!-- 与当前页面相关的内联样式(此处未列出具体样式,仅作为注释说明) -->
<!-- inline styles related to this page -->
<!-- ace settings handler -->
<script src="../assets/js/ace-extra.min.js"></script>
<!-- HTML5shiv and Respond.js for IE8 to support HTML5 elements and media queries -->
<!-- 引入Ace框架的设置处理器脚本用于动态加载和配置Ace框架 -->
<script src="../assets/js/ace-extra.min.js"></script> <!-- Ace框架的设置处理器脚本 -->
<!-- 引入HTML5shiv和Respond.js脚本以支持IE8及以下版本的浏览器对HTML5元素和媒体查询的识别 -->
<!--[if lte IE 8]>
<script src="../assets/js/html5shiv.min.js"></script>
<%-- <!-- HTML5shiv脚本使IE8及以下版本支持HTML5元素 -->--%>
<script src="../assets/js/respond.min.js"></script>
<%-- <!-- Respond.js脚本使IE8及以下版本支持媒体查询 -->--%>
<![endif]-->
</head>
<body class="no-skin">
@ -502,43 +525,63 @@
]
} );
myTable.buttons().container().appendTo( $('.tableTools-container') );
// 将DataTables的按钮容器附加到指定的.tableTools-container元素中
//style the message box
var defaultCopyAction = myTable.button(1).action();
// 获取“复制”按钮的默认行为
myTable.button(1).action(function (e, dt, button, config) {
defaultCopyAction(e, dt, button, config);
// 执行默认的复制行为
$('.dt-button-info').addClass('gritter-item-wrapper gritter-info gritter-center white');
// 为消息框添加样式
});
var defaultColvisAction = myTable.button(0).action();
// 获取“列显示/隐藏”按钮的默认行为
myTable.button(0).action(function (e, dt, button, config) {
defaultColvisAction(e, dt, button, config);
// 执行默认的列显示/隐藏行为
if($('.dt-button-collection > .dropdown-menu').length == 0) {
$('.dt-button-collection')
.wrapInner('<ul class="dropdown-menu dropdown-light dropdown-caret dropdown-caret" />')
.find('a').attr('href', '#').wrap("<li />")
}
// 如果.dt-button-collection下没有.dropdown-menu则为其添加并包装链接
$('.dt-button-collection').appendTo('.tableTools-container .dt-buttons')
// 将.dt-button-collection附加到.tableTools-container的.dt-buttons中
});
////
setTimeout(function() {
$($('.tableTools-container')).find('a.dt-button').each(function() {
var div = $(this).find(' > div').first();
if(div.length == 1) div.tooltip({container: 'body', title: div.parent().text()});
else $(this).tooltip({container: 'body', title: $(this).text()});
// 为.tableTools-container中的a.dt-button添加tooltip根据内容设置标题
});
}, 500);
// 在500毫秒后执行为.tableTools-container中的按钮添加tooltip
myTable.on( 'select', function ( e, dt, type, index ) {
if ( type === 'row' ) {
$( myTable.row( index ).node() ).find('input:checkbox').prop('checked', true);
// 当选中行时将该行的checkbox设为选中
}
} );
myTable.on( 'deselect', function ( e, dt, type, index ) {
if ( type === 'row' ) {
$( myTable.row( index ).node() ).find('input:checkbox').prop('checked', false);
// 当取消选中行时将该行的checkbox设为未选中
}
} );
/////////////////////////////////
//table checkboxes
$('th input[type=checkbox], td input[type=checkbox]').prop('checked', false);
// 将所有表头和表格单元格中的checkbox设置为未选中
//select/deselect all rows according to table header checkbox
$('#dynamic-table > thead > tr > th input[type=checkbox], #dynamic-table_wrapper input[type=checkbox]').eq(0).on('click', function(){
var th_checked = this.checked;//checkbox inside "TH" table header
@ -546,19 +589,25 @@
var row = this;
if(th_checked) myTable.row(row).select();
else myTable.row(row).deselect();
// 根据表头checkbox的状态选中或取消选中所有行
});
});
//select/deselect a row when the checkbox is checked/unchecked
$('#dynamic-table').on('click', 'td input[type=checkbox]' , function(){
var row = $(this).closest('tr').get(0);
if(this.checked) myTable.row(row).deselect();
else myTable.row(row).select();
if(this.checked) myTable.row(row).deselect(); // 这里逻辑可能有误通常选中checkbox应该选中行
else myTable.row(row).select(); // 这里逻辑可能有误通常取消选中checkbox应该取消选中行
// 根据checkbox的状态选中或取消选中行但这里的逻辑与常规相反可能需要根据实际需求调整
});
$(document).on('click', '#dynamic-table .dropdown-toggle', function(e) {
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
// 阻止.dropdown-toggle的点击事件冒泡和默认行为
});
//And for the first simple table, which doesn't have TableTools or dataTables
//select/deselect all rows according to table header checkbox
var active_class = 'active';
@ -568,18 +617,24 @@
var row = this;
if(th_checked) $(row).addClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', true);
else $(row).removeClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', false);
// 根据表头checkbox的状态为所有行添加或移除active类并设置checkbox的选中状态
});
});
//select/deselect a row when the checkbox is checked/unchecked
$('#simple-table').on('click', 'td input[type=checkbox]' , function(){
var $row = $(this).closest('tr');
if($row.is('.detail-row ')) return;
if(this.checked) $row.addClass(active_class);
else $row.removeClass(active_class);
// 根据checkbox的状态为行添加或移除active类忽略.detail-row
});
/********************************/
//add tooltip for small view action buttons in dropdown menu
$('[data-rel="tooltip"]').tooltip({placement: tooltip_placement});
// 为具有data-rel="tooltip"属性的元素添加tooltip并指定位置函数
//tooltip placement on right or left
function tooltip_placement(context, source) {
var $source = $(source);
@ -587,15 +642,17 @@
var off1 = $parent.offset();
var w1 = $parent.width();
var off2 = $source.offset();
//var w2 = $source.width();
// 根据父元素和源元素的位置确定tooltip应该显示在左侧还是右侧
if( parseInt(off2.left) < parseInt(off1.left) + parseInt(w1 / 2) ) return 'right';
return 'left';
}
/***************/
$('.show-details-btn').on('click', function(e) {
e.preventDefault();
$(this).closest('tr').next().toggleClass('open');
$(this).find(ace.vars['.icon']).toggleClass('fa-angle-double-down').toggleClass('fa-angle-double-up');
// 点击.show-details-btn时切换下一行的'open'类,并切换图标的类
});
/***************/
/**

@ -5,34 +5,50 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- 设置IE浏览器使用最新的渲染引擎如果安装了Google Chrome Frame则优先使用Chrome的渲染引擎 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<!-- 设置网页的字符编码为UTF-8支持国际化字符显示 -->
<meta charset="utf-8" />
<!-- 设置网页的标题,用于浏览器标签页的显示 -->
<title>查看未处理处方列表 - 医院药品库存管理系统</title>
<!-- 设置网页的描述信息有助于SEO搜索引擎优化 -->
<meta name="description" content="查看未处理处方列表 - 医院药品库存管理系统" />
<!-- 设置视口确保页面在不同设备上正确显示宽度与设备宽度一致初始缩放比例为1最大缩放比例也为1 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<!-- bootstrap & fontawesome -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" />
<!-- 引入Bootstrap框架和FontAwesome图标的样式表 -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" /> <!-- Bootstrap样式表用于网页布局和样式 -->
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" /> <!-- FontAwesome图标样式表提供丰富的图标 -->
<!-- 页面特定的插件样式表(此处未列出具体样式文件,仅作为占位符) -->
<!-- page specific plugin styles -->
<!-- text fonts -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" />
<!-- ace styles -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" />
<!-- 引入文本字体样式表,通常用于自定义字体 -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" /> <!-- 字体样式表可能从Google Fonts等服务引入 -->
<!-- 引入Ace框架的主样式表Ace是一个基于Bootstrap的后台管理界面框架 -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" /> <!-- Ace框架的主样式用于整体布局和样式 -->
<!-- 如果浏览器版本为IE9及以下则引入Ace框架的补充样式表 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-part2.min.css" class="ace-main-stylesheet" />
<%-- <!-- Ace框架的补充样式用于IE9及以下版本的兼容性 -->--%>
<![endif]-->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" />
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" />
<!-- 引入Ace框架的皮肤样式表用于定制界面外观 -->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" /> <!-- Ace框架的皮肤样式提供多种界面外观选择 -->
<!-- 引入Ace框架的RTL从右到左的语言如阿拉伯语支持样式表 -->
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" /> <!-- RTL支持样式用于从右到左的语言布局 -->
<!-- 如果浏览器版本为IE9及以下则引入Ace框架的IE专用样式表 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-ie.min.css" />
<%-- <!-- Ace框架的IE专用样式用于IE9及以下版本的兼容性 -->--%>
<![endif]-->
<!-- 与当前页面相关的内联样式(此处未列出具体样式,仅作为占位符) -->
<!-- inline styles related to this page -->
<!-- ace settings handler -->
<script src="../assets/js/ace-extra.min.js"></script>
<!-- HTML5shiv and Respond.js for IE8 to support HTML5 elements and media queries -->
<!-- 引入Ace框架的设置处理器脚本用于动态加载和配置Ace框架 -->
<script src="../assets/js/ace-extra.min.js"></script> <!-- Ace框架的设置处理器脚本 -->
<!-- 引入HTML5shiv和Respond.js脚本以支持IE8及以下版本的浏览器对HTML5元素和媒体查询的识别 -->
<!--[if lte IE 8]>
<script src="../assets/js/html5shiv.min.js"></script>
<%-- <!-- HTML5shiv脚本使IE8及以下版本支持HTML5元素 -->--%>
<script src="../assets/js/respond.min.js"></script>
<%--<!-- Respond.js脚本使IE8及以下版本支持媒体查询 -->--%>
<![endif]-->
</head>
<body class="no-skin">
@ -495,101 +511,127 @@
}
]
} );
// 将DataTables的按钮容器附加到指定的jQuery对象.tableTools-container
myTable.buttons().container().appendTo( $('.tableTools-container') );
//style the message box
// 样式化消息框
// 获取myTable中第二个按钮索引从0开始的默认行为
var defaultCopyAction = myTable.button(1).action();
// 重写myTable中第二个按钮的行为在调用默认行为后添加样式
myTable.button(1).action(function (e, dt, button, config) {
defaultCopyAction(e, dt, button, config);
$('.dt-button-info').addClass('gritter-item-wrapper gritter-info gritter-center white');
});
// 获取myTable中第一个按钮的默认行为
var defaultColvisAction = myTable.button(0).action();
// 重写myTable中第一个按钮的行为在调用默认行为后进行DOM操作
myTable.button(0).action(function (e, dt, button, config) {
defaultColvisAction(e, dt, button, config);
// 如果.dt-button-collection下没有.dropdown-menu则添加
if($('.dt-button-collection > .dropdown-menu').length == 0) {
$('.dt-button-collection')
.wrapInner('<ul class="dropdown-menu dropdown-light dropdown-caret dropdown-caret" />')
.find('a').attr('href', '#').wrap("<li />")
}
// 将.dt-button-collection移动到.tableTools-container .dt-buttons下
$('.dt-button-collection').appendTo('.tableTools-container .dt-buttons')
});
////
// 延迟500毫秒后执行为每个.tableTools-container下的a.dt-button添加tooltip
setTimeout(function() {
$($('.tableTools-container')).find('a.dt-button').each(function() {
var div = $(this).find(' > div').first();
// 如果div存在则为它的父元素添加tooltip
if(div.length == 1) div.tooltip({container: 'body', title: div.parent().text()});
// 否则为该a元素添加tooltip
else $(this).tooltip({container: 'body', title: $(this).text()});
});
}, 500);
// 当表格行被选中时将该行的checkbox设为选中状态
myTable.on( 'select', function ( e, dt, type, index ) {
if ( type === 'row' ) {
$( myTable.row( index ).node() ).find('input:checkbox').prop('checked', true);
}
} );
// 当表格行被取消选中时将该行的checkbox设为未选中状态
myTable.on( 'deselect', function ( e, dt, type, index ) {
if ( type === 'row' ) {
$( myTable.row( index ).node() ).find('input:checkbox').prop('checked', false);
}
} );
/////////////////////////////////
//table checkboxes
// 初始化表格中的所有checkbox为未选中状态
$('th input[type=checkbox], td input[type=checkbox]').prop('checked', false);
//select/deselect all rows according to table header checkbox
// 根据表头checkbox的状态选择/取消选择所有行
$('#dynamic-table > thead > tr > th input[type=checkbox], #dynamic-table_wrapper input[type=checkbox]').eq(0).on('click', function(){
var th_checked = this.checked;//checkbox inside "TH" table header
var th_checked = this.checked; // 表头checkbox的状态
$('#dynamic-table').find('tbody > tr').each(function(){
var row = this;
if(th_checked) myTable.row(row).select();
else myTable.row(row).deselect();
if(th_checked) myTable.row(row).select(); // 选中行
else myTable.row(row).deselect(); // 取消选中行
});
});
//select/deselect a row when the checkbox is checked/unchecked
// 当checkbox被选中/取消选中时,选择/取消选择对应的行
$('#dynamic-table').on('click', 'td input[type=checkbox]' , function(){
var row = $(this).closest('tr').get(0);
if(this.checked) myTable.row(row).deselect();
else myTable.row(row).select();
var row = $(this).closest('tr').get(0); // 获取当前行的DOM对象
// 注意这里的逻辑可能是有问题的通常应该是选中checkbox时选中行取消选中时取消选中行
// 但这里的代码是反的,可能是特定业务逻辑的需求
if(this.checked) myTable.row(row).deselect(); // 取消选中行(这里可能是个错误)
else myTable.row(row).select(); // 选中行(这里可能是个错误)
});
// 阻止#dynamic-table中的.dropdown-toggle的点击事件冒泡
$(document).on('click', '#dynamic-table .dropdown-toggle', function(e) {
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
e.stopImmediatePropagation(); // 立即停止事件传播
e.stopPropagation(); // 停止事件传播
e.preventDefault(); // 阻止默认行为
});
//And for the first simple table, which doesn't have TableTools or dataTables
//select/deselect all rows according to table header checkbox
var active_class = 'active';
// 对于没有TableTools或dataTables的简单表格
// 根据表头checkbox的状态选择/取消选择所有行
var active_class = 'active'; // 定义选中行的class
$('#simple-table > thead > tr > th input[type=checkbox]').eq(0).on('click', function(){
var th_checked = this.checked;//checkbox inside "TH" table header
var th_checked = this.checked; // 表头checkbox的状态
$(this).closest('table').find('tbody > tr').each(function(){
var row = this;
if(th_checked) $(row).addClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', true);
else $(row).removeClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', false);
if(th_checked) $(row).addClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', true); // 选中行并选中checkbox
else $(row).removeClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', false); // 取消选中行并取消选中checkbox
});
});
//select/deselect a row when the checkbox is checked/unchecked
// 当checkbox被选中/取消选中时,添加/移除行的active class
$('#simple-table').on('click', 'td input[type=checkbox]' , function(){
var $row = $(this).closest('tr');
if($row.is('.detail-row ')) return;
if(this.checked) $row.addClass(active_class);
else $row.removeClass(active_class);
var $row = $(this).closest('tr'); // 获取当前行的jQuery对象
if($row.is('.detail-row ')) return; // 如果是详情行,则不处理
if(this.checked) $row.addClass(active_class); // 选中时添加active class
else $row.removeClass(active_class); // 取消选中时移除active class
});
/********************************/
//add tooltip for small view action buttons in dropdown menu
// 为小视图操作按钮添加tooltip
$('[data-rel="tooltip"]').tooltip({placement: tooltip_placement});
//tooltip placement on right or left
// 定义tooltip的位置右侧或左侧
function tooltip_placement(context, source) {
var $source = $(source);
var $parent = $source.closest('table')
var off1 = $parent.offset();
var w1 = $parent.width();
var off2 = $source.offset();
//var w2 = $source.width();
if( parseInt(off2.left) < parseInt(off1.left) + parseInt(w1 / 2) ) return 'right';
return 'left';
var $source = $(source); // 获取源元素的jQuery对象
var $parent = $source.closest('table'); // 获取最近的table元素
var off1 = $parent.offset(); // 获取table的偏移量
var w1 = $parent.width(); // 获取table的宽度
var off2 = $source.offset(); // 获取源元素的偏移量
// 根据源元素的相对位置决定tooltip的位置
if( parseInt(off2.left) < parseInt(off1.left) + parseInt(w1 / 2) ) return 'right'; // 如果源元素在table左侧则tooltip显示在右侧
return 'left'; // 否则tooltip显示在左侧
}
/***************/
// 为显示详情的按钮添加点击事件
$('.show-details-btn').on('click', function(e) {
e.preventDefault();
$(this).closest('tr').next().toggleClass('open');
$(this).find(ace.vars['.icon']).toggleClass('fa-angle-double-down').toggleClass('fa-angle-double-up');
e.preventDefault(); // 阻止默认行为
$(this).closest('tr').next().toggleClass('open'); // 切换下一行的open class用于显示/隐藏详情
$(this).find(ace.vars['.icon']).toggleClass('fa-angle-double-down').toggleClass('fa-angle-double-up'); // 切换图标,显示/隐藏时改变方向
});
/***************/
/**

@ -5,34 +5,58 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- 设置IE浏览器使用最新的渲染引擎如果已安装Google Chrome Frame则优先使用Chrome的渲染引擎 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<!-- 设置网页的字符编码为UTF-8支持多语言内容显示 -->
<meta charset="utf-8" />
<!-- 网页的标题,将显示在浏览器的标签页上 -->
<title>欢迎 - 医院药品库存管理系统</title>
<!-- 网页的描述信息有助于SEO搜索引擎优化 -->
<meta name="description" content="欢迎 - 医院药品库存管理系统" />
<!-- 设置视口确保页面在不同设备上正确显示宽度与设备宽度一致初始缩放比例为1最大缩放比例也为1 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<!-- bootstrap & fontawesome -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" />
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" />
<!-- 引入Bootstrap框架和FontAwesome图标的样式表 -->
<link rel="stylesheet" href="../assets/css/bootstrap.min.css" /> <!-- Bootstrap样式表用于网页布局和样式设计 -->
<link rel="stylesheet" href="../assets/font-awesome/4.5.0/css/font-awesome.min.css" /> <!-- FontAwesome图标样式表提供丰富的图标资源 -->
<!-- 页面特定的插件样式表(此处未列出具体样式文件,仅作为占位符) -->
<!-- page specific plugin styles -->
<!-- text fonts -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" />
<!-- ace styles -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" />
<!-- 引入文本字体样式表,通常用于自定义字体 -->
<link rel="stylesheet" href="../assets/css/fonts.googleapis.com.css" /> <!-- 字体样式表可能从Google Fonts等服务引入 -->
<!-- 引入Ace框架的主样式表Ace是一个基于Bootstrap的后台管理界面框架 -->
<link rel="stylesheet" href="../assets/css/ace.min.css" class="ace-main-stylesheet" id="main-ace-style" /> <!-- Ace框架的主样式用于整体布局和样式设计 -->
<!-- 如果浏览器版本为IE9及以下则引入Ace框架的补充样式表 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-part2.min.css" class="ace-main-stylesheet" />
<%-- <!-- Ace框架的补充样式用于IE9及以下版本的兼容性 -->--%>
<![endif]-->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" />
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" />
<!-- 引入Ace框架的皮肤样式表用于定制界面外观 -->
<link rel="stylesheet" href="../assets/css/ace-skins.min.css" /> <!-- Ace框架的皮肤样式提供多种界面外观选择 -->
<!-- 引入Ace框架的RTL从右到左的语言如阿拉伯语支持样式表 -->
<link rel="stylesheet" href="../assets/css/ace-rtl.min.css" /> <!-- RTL支持样式用于从右到左的语言布局 -->
<!-- 如果浏览器版本为IE9及以下则引入Ace框架的IE专用样式表 -->
<!--[if lte IE 9]>
<link rel="stylesheet" href="../assets/css/ace-ie.min.css" />
<%-- <!-- Ace框架的IE专用样式用于IE9及以下版本的兼容性 -->--%>
<![endif]-->
<!-- 与当前页面相关的内联样式(此处未列出具体样式,仅作为占位符) -->
<!-- inline styles related to this page -->
<!-- ace settings handler -->
<script src="../assets/js/ace-extra.min.js"></script>
<!-- HTML5shiv and Respond.js for IE8 to support HTML5 elements and media queries -->
<!-- 引入Ace框架的设置处理器脚本用于动态加载和配置Ace框架 -->
<script src="../assets/js/ace-extra.min.js"></script> <!-- Ace框架的设置处理器脚本 -->
<!-- 引入HTML5shiv和Respond.js脚本以支持IE8及以下版本的浏览器对HTML5元素和媒体查询的识别 -->
<!--[if lte IE 8]>
<script src="../assets/js/html5shiv.min.js"></script>
<%-- <!-- HTML5shiv脚本使IE8及以下版本支持HTML5元素 -->--%>
<script src="../assets/js/respond.min.js"></script>
<%-- <!-- Respond.js脚本使IE8及以下版本支持媒体查询 -->--%>
<![endif]-->
</head>
<body class="no-skin">
@ -515,100 +539,129 @@
});
/////////////////////////////////////
$(document).one('ajaxloadstart.page', function(e) {
// 当页面开始加载AJAX内容时移除tooltip元素
$tooltip.remove();
});
// 初始化一个空数组d1用于存储正弦函数的数据点
var d1 = [];
for (var i = 0; i < Math.PI * 2; i += 0.5) {
// 遍历0到2π每次增加0.5计算i的正弦值并将[i, Math.sin(i)]作为一个元素推入d1数组
d1.push([i, Math.sin(i)]);
}
// 初始化一个空数组d2用于存储余弦函数的数据点
var d2 = [];
for (var i = 0; i < Math.PI * 2; i += 0.5) {
// 遍历0到2π每次增加0.5计算i的余弦值并将[i, Math.cos(i)]作为一个元素推入d2数组
d2.push([i, Math.cos(i)]);
}
// 初始化一个空数组d3用于存储正切函数的数据点
var d3 = [];
for (var i = 0; i < Math.PI * 2; i += 0.2) {
// 遍历0到2π每次增加0.2计算i的正切值并将[i, Math.tan(i)]作为一个元素推入d3数组
d3.push([i, Math.tan(i)]);
}
// 获取id为sales-charts的元素并设置其宽度为100%高度为220px
var sales_charts = $('#sales-charts').css({'width':'100%' , 'height':'220px'});
// 使用jQuery的$.plot方法绘制图表
$.plot("#sales-charts", [
{ label: "Domains", data: d1 },
{ label: "Hosting", data: d2 },
{ label: "Services", data: d3 }
{ label: "Domains", data: d1 }, // 数据集1标签为"Domains"数据为d1
{ label: "Hosting", data: d2 }, // 数据集2标签为"Hosting"数据为d2
{ label: "Services", data: d3 } // 数据集3标签为"Services"数据为d3
], {
hoverable: true,
shadowSize: 0,
hoverable: true, // 允许鼠标悬停事件
shadowSize: 0, // 图表的阴影大小为0
series: {
lines: { show: true },
points: { show: true }
lines: { show: true }, // 显示线条
points: { show: true } // 显示点
},
xaxis: {
tickLength: 0
tickLength: 0 // x轴的刻度长度设置为0
},
yaxis: {
ticks: 10,
min: -2,
max: 2,
tickDecimals: 3
ticks: 10, // y轴的刻度数量
min: -2, // y轴的最小值
max: 2, // y轴的最大值
tickDecimals: 3 // y轴刻度的小数位数
},
grid: {
backgroundColor: { colors: [ "#fff", "#fff" ] },
borderWidth: 1,
borderColor:'#555'
backgroundColor: { colors: [ "#fff", "#fff" ] }, // 背景颜色
borderWidth: 1, // 边框宽度
borderColor:'#555' // 边框颜色
}
});
// 为具有data-rel="tooltip"属性的元素应用tooltip
$('#recent-box [data-rel="tooltip"]').tooltip({placement: tooltip_placement});
// 定义tooltip的放置位置
function tooltip_placement(context, source) {
var $source = $(source);
var $parent = $source.closest('.tab-content')
var off1 = $parent.offset();
var w1 = $parent.width();
var $source = $(source); // 获取触发tooltip的元素
var $parent = $source.closest('.tab-content') // 获取该元素的最近的tab-content父元素
var off1 = $parent.offset(); // 获取父元素的偏移量
var w1 = $parent.width(); // 获取父元素的宽度
var off2 = $source.offset();
//var w2 = $source.width();
var off2 = $source.offset(); // 获取触发元素的偏移量
//var w2 = $source.width(); // 获取触发元素的宽度(此行代码被注释掉了)
// 根据触发元素相对于父元素的位置决定tooltip的显示位置
if( parseInt(off2.left) < parseInt(off1.left) + parseInt(w1 / 2) ) return 'right';
return 'left';
}
// 对.dialogs和.comments类的元素应用ace_scroll插件并设置滚动区域的大小为300
$('.dialogs,.comments').ace_scroll({
size: 300
});
//Android's default browser somehow is confused when tapping on label which will lead to dragging the task
//so disable dragging when clicking on label
// 如果是在Android设备上并且支持触摸操作则禁用对任务列表项的拖动当点击label时
var agent = navigator.userAgent.toLowerCase();
if(ace.vars['touch'] && ace.vars['android']) {
$('#tasks').on('touchstart', function(e){
var li = $(e.target).closest('#tasks li');
if(li.length == 0)return;
var label = li.find('label.inline').get(0);
var li = $(e.target).closest('#tasks li'); // 获取被触摸的最近的li元素
if(li.length == 0)return; // 如果没有找到,则直接返回
var label = li.find('label.inline').get(0); // 获取该li元素内的label.inline元素
// 如果点击的是label或其子元素则阻止事件的进一步传播
if(label == e.target || $.contains(label, e.target)) e.stopImmediatePropagation() ;
});
}
// 使#tasks元素可排序
$('#tasks').sortable({
opacity:0.8,
revert:true,
forceHelperSize:true,
placeholder: 'draggable-placeholder',
forcePlaceholderSize:true,
tolerance:'pointer',
opacity:0.8, // 拖动时的透明度
revert:true, // 拖动后是否回归原位
forceHelperSize:true, // 强制帮助器的大小
placeholder: 'draggable-placeholder', // 占位符的类名
forcePlaceholderSize:true, // 强制占位符的大小
tolerance:'pointer', // 触发排序的灵敏度
stop: function( event, ui ) {
//just for Chrome!!!! so that dropdowns on items don't appear below other items after being moved
// 停止拖动后执行的函数用于修复Chrome上的下拉菜单显示问题
$(ui.item).css('z-index', 'auto');
}
}
);
});
// 禁用#tasks元素上的文本选择
$('#tasks').disableSelection();
// 为#tasks内的checkbox添加点击事件当点击时切换li元素的selected类
$('#tasks input:checkbox').removeAttr('checked').on('click', function(){
if(this.checked) $(this).closest('li').addClass('selected');
else $(this).closest('li').removeClass('selected');
if(this.checked) $(this).closest('li').addClass('selected'); // 如果被选中则添加selected类
else $(this).closest('li').removeClass('selected'); // 如果未被选中则移除selected类
});
//show the dropdowns on top or bottom depending on window height and menu position
// 根据窗口高度和菜单位置,显示下拉菜单在顶部或底部
$('#task-tab .dropdown-hover').on('mouseenter', function(e) {
var offset = $(this).offset();
var offset = $(this).offset(); // 获取下拉菜单的偏移量
var $w = $(window)
var $w = $(window) // 获取窗口对象
// 如果下拉菜单的顶部位置大于窗口的滚动位置加上窗口的内部高度减去100则添加dropup类使其向上显示
if (offset.top > $w.scrollTop() + $w.innerHeight() - 100)
$(this).addClass('dropup');
else $(this).removeClass('dropup');
else $(this).removeClass('dropup'); // 否则移除dropup类使其向下显示
});
})
</script>

Loading…
Cancel
Save