better-staridc-MNBT
1<?php
2/*
3 * 这是远程宝塔文件管理系统
4 * 由小泉独立完成
5 * 未经允许禁止修改
6 * 小泉QQ3108007898
7 * 全套系统由小泉以及梦奈完成
8 * 版权©归梦奈所有
9 */
10mnbt_theme_include('head');
11set_time_limit(0);
12ignore_user_abort();
13ini_set('memory_limit', '-1');
14$siot=$_GET['wj'] ?? '';
15if($conf['hxw']=='amftp' || $conf['hxw']==''){
16 $cert=$DB->get_row_prepare("SELECT * FROM MN_bt WHERE btdh=? limit 1", [$ssbt]);
17 $ftp_server=$cert['btip'];
18 $ftp_user_name=$yhc['user'];
19 $ftp_user_pass=$yhc['pass'];
20 echo "<form style='display:none;' id='form1' name='form1' method='post' action='./amftp/index.php?c=index&a=amftp_login'>
21 <input name='ftp_port' type='text' value='21' />
22 <input name='ftp_pasv' type='text' value='0'/>
23 <input name='ftp_ip' type='text' value='".$ftp_server."'/>
24 <input name='ftp_user' type='text' value='".$ftp_user_name."'/>
25 <input name='ftp_pass' type='text' value='".$ftp_user_pass."'/>
26 <input name='sbpostdl' type='text' id='myform' value='登录'/>
27 </form>
28 <script type='text/javascript'>function load_submit(){document.form1.submit()}load_submit();</script>";
29 exit;
30}
31?>
32<!--对话框-->
33<script type="text/javascript" src="<?=mnbt_asset_url('js/jquery-confirm/jquery-confirm.min.js')?>"></script>
34<script type="text/javascript" src="<?=mnbt_asset_url('js/bootstrap-table/bootstrap-table.min.js')?>"></script>
35<script type="text/javascript" src="<?=mnbt_asset_url('js/bootstrap-table/locale/bootstrap-table-zh-CN.min.js')?>"></script>
36<!--代码编辑插件-->
37<link href="<?=mnbt_asset_url('codemirror/lib/codemirror.css')?>" rel="stylesheet" type="text/css">
38<link id="thme-filecod" href="<?=mnbt_asset_url('codemirror/theme/3024-night.css')?>" rel="stylesheet" type="text/css">
39<link href="<?=mnbt_asset_url('codemirror/addon/display/fullscreen.css')?>" rel="stylesheet" type="text/css">
40<link href="<?=mnbt_asset_url('codemirror/addon/dialog/dialog.css')?>" rel="stylesheet" type="text/css"> <!--文件内容搜索框美化-->
41<link rel="stylesheet" href="<?=mnbt_asset_url('codemirror/addon/hint/show-hint.css')?>"><!--代码提示-->
42
43<div class="container-fluid p-t-15">
44
45 <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModal" aria-hidden="true">
46 <div class="modal-dialog" role="document">
47 <div class="modal-content">
48 <div class="modal-header">
49 <h6 class="modal-title" id="exampleModalChangeTitle">上传文件</h6>
50 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button>
51 </div>
52 <div class="card-body">
53 <p>支持断点续传!</p>
54 <p>当上传的文件存在时将覆盖!</p>
55 <p>如果上传的文件与现有的文件名称一样则将覆盖现有的文件!</p>
56 <div class="custom-file">
57 <input type="file" name="myfile" id="myfile" class="custom-file-input" required>
58 <label class="custom-file-label" for="validatedCustomFile">选择文件...</label>
59 </div><br/>
60 <div class="modal-footer">
61 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
62 <button type="submit" class="btn btn-primary" onclick="zxwjsc(paths)">确认上传</button>
63 </div>
64 </div>
65 </div>
66 </div>
67 </div>
68
69 <div class="modal fade" id="xjwj" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel">
70 <div class="modal-dialog" role="document">
71 <div class="modal-content">
72 <div class="modal-header">
73 <h6 class="modal-title" id="exampleModalChangeTitle">新建文件</h6>
74 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button>
75 </div>
76 <div class="modal-body">
77 <form>
78 <p>文件名不能包含各种特殊符号比如:空格 {}:“|《》?【】;’、,。{}:"|<>?[];',!@#$%^&*()_-+=等;</p>
79 <div class="form-group">
80 <label for="message-text" class="control-label">存放路径</label>
81 <input type="text" name="xjlja" id="xjlja" class="form-control" placeholder="新建的文件的存放路径" readonly="true"/>
82 </div>
83 <br/>
84 <div class="form-group">
85 <label for="message-text" class="control-label">文件名称</label>
86 <input type="text" name="namea" id="namea" class="form-control" placeholder="请在此输入文件的名称" />
87 </div>
88 <br/>
89 </form>
90 <div class="modal-footer">
91 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
92 <button type="submit" class="btn btn-primary" onclick="wjwjcg()">确认新建</button>
93 </div>
94 </div>
95 </div>
96 </div>
97 </div>
98
99 <div class="modal fade" id="xjwjj" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel">
100 <div class="modal-dialog" role="document">
101 <div class="modal-content">
102 <div class="modal-header">
103 <h6 class="modal-title" id="exampleModalChangeTitle">新建文件夹</h6>
104 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button>
105 </div>
106 <div class="card-body">
107 <p>文件夹名不能包含各种特殊符号比如:空格 {}:“|《》?【】;’、,。{}:"|<>?[];',!@#$%^&*()_-+=等;</p>
108 <div class="form-group"> <span for="message-text" class="control-label">存放路径</span>
109 <input type="text" name="xjljb" id="xjljb" class="form-control" placeholder="新建的文件夹的存放路径" readonly="true"/>
110 </div>
111 <br/>
112 <div class="form-group"> <span for="message-text" class="control-label">文件夹名称</span>
113 <input type="text" name="namec" id="namec" class="form-control" placeholder="请在此输入文件夹的名称" />
114 </div>
115 <br/>
116 <div class="modal-footer">
117 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
118 <button type="submit" class="btn btn-primary" onclick="wjwjjg()">确认新建</button>
119 </div>
120 </div>
121 </div>
122 </div>
123 </div>
124
125 <div class="modal fade" id="setwj" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel">
126 <div class="modal-dialog" role="document">
127 <div class="modal-content">
128 <div class="modal-header">
129 <h6 class="modal-title" id="setfiletitle">修改文件内容</h6>
130 <div class="col-md-2 mb-3">
131 <select id="setfilezt" class="custom-select form-control-sm">
132 <option value="dqs">切换编辑器主题[当前3024-night]</option><option>default</option><option>3024-day</option><option>3024-night</option><option>abbott</option><option>abcdef</option><option>ambiance</option><option>ayu-dark</option><option>ayu-mirage</option><option>base16-dark</option><option>base16-light</option><option>bespin</option><option>blackboard</option><option>cobalt</option><option>colorforth</option><option>darcula</option><option>dracula</option><option>duotone-dark</option><option>duotone-light</option><option>eclipse</option><option>elegant</option><option>erlang-dark</option><option>gruvbox-dark</option><option>hopscotch</option><option>icecoder</option><option>idea</option><option>isotope</option><option>juejin</option><option>lesser-dark</option><option>liquibyte</option><option>lucario</option><option>material</option><option>material-darker</option><option>material-palenight</option><option>material-ocean</option><option>mbo</option><option>mdn-like</option><option>midnight</option><option>monokai</option><option>moxer</option><option>neat</option><option>neo</option><option>night</option><option>nord</option><option>oceanic-next</option><option>panda-syntax</option><option>paraiso-dark</option><option>paraiso-light</option><option>pastel-on-dark</option><option>railscasts</option><option>rubyblue</option><option>seti</option><option>shadowfox</option><option>solarized dark</option><option>solarized light</option><option>the-matrix</option><option>tomorrow-night-bright</option><option>tomorrow-night-eighties</option><option>ttcn</option><option>twilight</option><option>vibrant-ink</option><option>xq-dark</option><option>xq-light</option><option>yeti</option><option>yonce</option><option>zenburn</option>
133 </select>
134 </div>
135 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button>
136 <button type="button" class="modal-fullscreen-btn"><i class="mdi"></i></button>
137 </div>
138 <div class="card-body">
139 <div class="form-group">
140 <textarea type="text" name="wjnr" id="wjnr" cols="30" rows="10"></textarea>
141 </div><br/>
142 <div class="modal-footer">
143 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
144 <button type="submit" class="btn btn-primary" onclick="setwj()">确认保存</button>
145 </div>
146 </div>
147 </div>
148 </div>
149 </div>
150
151
152 <div class="modal fade" id="zipjys" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel">
153 <div class="modal-dialog" role="document">
154 <div class="modal-content">
155 <div class="modal-header">
156 <h6 class="modal-title" id="exampleModalChangeTitle">解压文件</h6>
157 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button>
158 </div>
159 <div class="card-body">
160 <p>目前仅支持解压zip格式的压缩包!</p>
161 <p>如果解压完成后没有文件请稍等3秒左右后手动刷新,如果还没有文件就是压缩包出问题了!</p>
162 <div class="form-group">
163 <span for="message-text" class="control-label">需解压的文件及路径</span>
164 <input type="text" name="jywjyd" id="jywjyd" class="form-control" placeholder="需要解压的文件以及它的路径" readonly="true"/>
165 </div><br/>
166 <div class="form-group">
167 <span for="message-text" class="control-label">解压到</span>
168 <input type="text" name="jyd" id="jyd" class="form-control" placeholder="请在此输入解压到的路径" />
169 </div><br/>
170 <div class="form-group">
171 <span for="message-text" class="control-label">解压密码</span>
172 <input type="text" name="jymm" id="jymm" class="form-control" placeholder="如果没有密码请留空" />
173 </div><br/>
174 <div class="form-group">
175 <span for="message-text" class="control-label">编码</span>
176 <select class="form-control" id="bm" name="bm" size="1">
177 <option value="UTF-8">UTF-8</option>
178 <option value="GBK">GBK</option>
179 </select>
180 </div><br/>
181 <div class="modal-footer">
182 <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
183 <button type="button" class="btn btn-primary" onclick="jysfile();">确认解压</button>
184 </div>
185 </div>
186 </div>
187 </div>
188 </div>
189
190 <div class="modal fade" id="imageyul" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel">
191 <div class="modal-dialog" role="document">
192 <div class="modal-content">
193 <div class="modal-header">
194 <h6 class="modal-title" id="tupyltitle">图片预览</h6>
195 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button>
196 </div>
197 <div class="card-body">
198 <div class="scrollspy-example-2 border border-info" id="imgsh">
199 <img src="" id="imgsrc"/>
200 </div>
201 <div class="modal-footer">
202 <button type="button" class="btn btn-info" id="yulantext" onclick="yulanset(this);">全图预览</button>
203 <button type="button" class="btn btn-primary" data-dismiss="modal">关闭</button>
204 </div>
205 </div>
206 </div>
207 </div>
208 </div>
209
210 <div class="row">
211 <div class="col-lg-12">
212 <div class="card">
213 <header class="card-header">
214 <div class="card-title">主机文件列表</div>
215 </header>
216 <div class="card-body">
217 <div class="callout callout-info">
218 <p class="small"><b>操作图标详解</b></p>
219 <div class="ftp-icon-legend">
220 <div class="wqbr"><a href="#!" class="btn btn-xs btn-default" title="下载文件" data-toggle="tooltip"><i class="mdi mdi-cloud-download-outline"></i></a>:下载文件</div>
221 <div class="wqbr"><a href="#!" class="btn btn-xs btn-default" title="编辑文件内容" data-toggle="tooltip"><i class="mdi mdi-pencil"></i></a>:编辑文件内容</div>
222 <div class="wqbr"><a href="#!" class="btn btn-xs btn-default" title="重命名文件" data-toggle="tooltip"><i class="mdi mdi-format-italic"></i></a>:重命名文件</div>
223 <div class="wqbr"><a href="#!" class="btn btn-xs btn-default" title="解压文件" data-toggle="tooltip"><i class="mdi mdi-arrow-up-bold-box"></i></a>:解压文件</div>
224 <div class="wqbr"><a href="#!" class="btn btn-xs btn-default" title="复制文件" data-toggle="tooltip"><i class="mdi mdi-content-copy"></i></a>:复制文件</div>
225 <div class="wqbr"><a href="#!" class="btn btn-xs btn-default" title="剪切文件" data-toggle="tooltip"><i class="mdi mdi-content-cut"></i></a>:剪切文件</div>
226 <div class="wqbr"><a href="#!" class="btn btn-xs btn-default" title="删除" data-toggle="tooltip"><i class="mdi mdi-window-close"></i></a>:删除文件</div>
227 <div class="wqbr"><a href="#!" class="btn btn-xs btn-default" title="导入SQL文件" data-toggle="tooltip"><i class="mdi mdi-import mdi-rotate-90"></i></a>:导入到数据库</div>
228 <div class="wqbr"><a href="#!" class="btn btn-xs btn-default" title="导入SQL文件" data-toggle="tooltip"><i class="mdi mdi-image-search-outline"></i></a>:图片预览</div>
229 </div>
230 <small><b>注意:只有部分文件类型才会显示特定按钮</b></small>
231 </div>
232 <div id="toolbar" class="toolbar-btn-action">
233 <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 文件操作 <span class="caret"></span> </button>
234 <ul class="dropdown-menu">
235 <li><a href="#!" class="dropdown-item" data-target="#xjwj" data-whatever="@mdo" data-toggle="modal" onclick="document.getElementById('xjlja').value=paths"><i class="mdi mdi-file-plus-outline"></i>新建文件</a></li>
236 <li><a href="#!" class="dropdown-item" data-target="#xjwjj" data-whatever="@mdo" data-toggle="modal" onclick="document.getElementById('xjljb').value=paths"><i class="mdi mdi-folder-plus-outline"></i>新建文件夹</a></li>
237 </ul>
238 <button data-toggle="modal" data-target="#exampleModal" data-whatever="@mdo" type="button" class="btn btn-primary m-r-5"> <span class="mdi mdi-cloud-upload" aria-hidden="true"></span>上传文件 </button>
239 <div class="btn-group show">
240 <button type="button" id="btn_gengduoset" style="display:none;" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 更多操作 <span class="caret"></span> </button>
241 <div id="gengduoset">
242 <ul class="dropdown-menu">
243 <li><a href="#!" class="dropdown-item" onclick="copyfile(false,2);"><i class="mdi mdi-content-copy"></i>复制选中文件</a></li>
244 <li><a href="#!" class="dropdown-item" onclick="copyfile(false,2,2);"><i class="mdi mdi-content-cut"></i>剪切选中文件</a></li>
245 <li><a href="#!" class="dropdown-item" onclick="ysfile();"><i class="mdi mdi-zip-box-outline"></i>压缩选中文件</a></li>
246 <li><a href="#!" class="dropdown-item" onclick="xzdelfile();"><i class="mdi mdi-window-close"></i>删除选中文件</a></li>
247 </ul>
248 </div>
249 </div>
250 <button style="display:none;" id="btn_filepst" type="button" class="btn btn btn-success" onclick="pastefile();"> <span class="mdi mdi-content-paste" aria-hidden="true"></span>粘贴文件 </button>
251
252 <div class="table-responsive" id="mus"> /<a href="#!" class="text-success" onclick="mulus('/',2)">根目录</a> </div>
253 </div>
254 <table id="tb_departments">
255 </table>
256 </div>
257 </div>
258 </div>
259 </div>
260</div>
261<!-- 引入CodeMirror核心文件 -->
262<script type="text/javascript" src="<?=mnbt_asset_url('codemirror/lib/codemirror.js')?>"></script>
263<script src="<?=mnbt_asset_url('codemirror/mode/clike/clike.js')?>"></script>
264<!-- CodeMirror支持不同语言,根据需要引入JS文件 -->
265<!-- 因为HTML混合语言依赖Javascript、XML、CSS语言支持,所以都要引入 -->
266<script type="text/javascript" src="<?=mnbt_asset_url('codemirror/mode/javascript/javascript.js')?>"></script>
267<script type="text/javascript" src="<?=mnbt_asset_url('codemirror/mode/xml/xml.js')?>"></script>
268<script type="text/javascript" src="<?=mnbt_asset_url('codemirror/mode/css/css.js')?>"></script>
269<script type="text/javascript" src="<?=mnbt_asset_url('codemirror/mode/htmlmixed/htmlmixed.js')?>"></script>
270<script type="text/javascript" src="<?=mnbt_asset_url('codemirror/mode/sql/sql.js')?>"></script>
271<script type="text/javascript" src="<?=mnbt_asset_url('codemirror/mode/php/php.js')?>"></script>
272
273<!-- 下面分别为显示行数、括号匹配和全屏插件和自动刷新 -->
274<script type="text/javascript" src="<?=mnbt_asset_url('codemirror/addon/selection/active-line.js')?>"></script>
275<script type="text/javascript" src="<?=mnbt_asset_url('codemirror/addon/edit/matchbrackets.js')?>"></script>
276<script type="text/javascript" src="<?=mnbt_asset_url('codemirror/addon/display/fullscreen.js')?>"></script>
277<script type="text/javascript" src="<?=mnbt_asset_url('codemirror/addon/display/autorefresh.js')?>"></script>
278<script type="text/javascript" src="<?=mnbt_asset_url('codemirror/addon/edit/closebrackets.js')?>"></script><!--自动闭合括号-->
279<script type="text/javascript" src="<?=mnbt_asset_url('codemirror/addon/search/search.js')?>"></script> <!--搜索内容-->
280<script type="text/javascript" src="<?=mnbt_asset_url('codemirror/addon/search/searchcursor.js')?>"></script> <!--查找上一个-->
281<script type="text/javascript" src="<?=mnbt_asset_url('codemirror/addon/search/jump-to-line.js')?>"></script> <!--查找下一个-->
282<script type="text/javascript" src="<?=mnbt_asset_url('codemirror/addon/dialog/dialog.js')?>"></script> <!--搜索框美化-->
283<!--自动提示-->
284<script src="<?=mnbt_asset_url('codemirror/addon/hint/show-hint.js')?>"></script>
285<script src="<?=mnbt_asset_url('codemirror/addon/hint/sql-hint.js')?>"></script>
286<script src="<?=mnbt_asset_url('codemirror/addon/hint/xml-hint.js')?>"></script>
287<script src="<?=mnbt_asset_url('codemirror/addon/hint/html-hint.js')?>"></script>
288<script src="<?=mnbt_asset_url('codemirror/addon/hint/javascript-hint.js')?>"></script>
289
290<script type="text/javascript">
291 paths='/';
292 file_copy=false;
293
294 //读取缓存获取设置的编辑器主题
295 if(localStorage.getItem("themes")==null){
296 var thmers="3024-night"; //默认的编辑器主题
297 }else{
298 var thmers=localStorage.getItem("themes");
299 if(thmers!='default'){
300 document.getElementById("thme-filecod").href="<?=mnbt_asset_url('codemirror/theme/')?>"+thmers+".css";
301 }
302 $("option[value='dqs']").html('编辑器主题[当前'+thmers+']');
303 }
304
305 //配置代码编辑器
306 var myTextarea = document.getElementById('wjnr');
307 var CodeMirrorEditor = CodeMirror.fromTextArea(myTextarea, {
308 lineNumbers: true, // 显示行号
309 tabSize:4, //制表符
310 indentUnit: 1, // 缩进单位为2
311 styleActiveLine: true, // 当前行背景高亮
312 matchBrackets: true, // 括号匹配
313 mode: "application/x-httpd-php", // php混合html
314 lineWrapping: true, // 自动换行
315 foldGutter:true,
316 theme: thmers, // 编辑器主题
317 lineWiseCopyCut:false, //关闭未选择时使用剪切或者复制则选中当前行
318 autofocus:true, //自动获取焦点
319 dragDrop: false, //是否使用拖拽
320 flattenSpans:false, //取消相邻相同类组合为span
321 spellcheck:true, //拼写检查
322 autoRefresh:true, //打开自动刷新
323 autoCloseBrackets: true, //自动闭合括号
324 specialChars: /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff\ufff9-\ufffc\s]/g, //空格显示为灰色小点
325 specialCharPlaceholder: function (ch) { //设置为小点
326 let token = document.createElement("span");
327 let content = "\u002e";
328 token.className = "cm-invalidchar";
329 if (typeof content == "string") {
330 token.appendChild(document.createTextNode(content));
331 }
332 return token
333 },
334 hintOptions: { // 自定义提示选项
335 completeSingle: false, // 当匹配只有一项的时候是否自动补全
336 },
337 extraKeys: {
338 "Tab": (cm) => {
339 if (cm.somethingSelected()) { // 存在文本选择
340 cm.indentSelection('add'); // 正向缩进文本
341 } else { // 无文本选择
342 cm.replaceSelection(Array(cm.getOption("indentUnit") + 1).join(" "), "end", "+input"); // 光标处插入 indentUnit 个空格
343 }
344 },
345 "Ctrl-S": function(cm) {
346 setwj(false); //保存文件并且不关闭编辑弹窗
347 },
348 "Ctrl-H": "replace", //替换功能
349 },
350 });
351 CodeMirrorEditor.setSize('100%','750px');
352
353 CodeMirrorEditor.on("keyup", function (cm, event) {
354 //所有的字母和'$','{','.'在键按下之后都将触发自动完成
355 if (!cm.state.completionActive &&
356 ((event.keyCode >= 65 && event.keyCode <= 90 ) || event.keyCode == 52 || event.keyCode == 219 || event.keyCode == 190)) {
357 CodeMirror.commands.autocomplete(cm, null, {completeSingle: false});
358 }
359 });
360
361
362 //监听编辑器主题切换
363 $("#setfilezt").on("change",function(){
364 var thmers=this.options[this.selectedIndex].textContent;
365 if(this.options[this.selectedIndex].value!='dqs'){
366 if(thmers!='default'){
367 document.getElementById("thme-filecod").href="<?=mnbt_asset_url('codemirror/theme/')?>"+thmers+".css";
368 }
369 CodeMirrorEditor.setOption("theme", thmers);
370 //将选择的主题缓存到本地
371 localStorage.setItem("themes", thmers);
372 $("option[value='dqs']").html('编辑器主题[当前'+thmers+']');
373 $(this).find("option").eq(0).prop("selected",true); //永久显示第一个选项
374 console.log(this);
375 }
376 });
377
378
379 function hqxzh(msg=true) { //获取选中行
380 var selRows = $("#tb_departments").bootstrapTable("getSelections");
381 if(selRows.length == 0){
382 if(msg==true){
383 msalert(3,"请至少选择一行",4000);
384 }
385 return false;
386 }
387
388 var arr = new Array();
389 $.each(selRows,function(i) {
390 arr.push(this.name);
391 });
392 return arr;
393 }
394
395 $('#tb_departments').on('uncheck.bs.table check.bs.table check-all.bs.table uncheck-all.bs.table load-success.bs.table', function (e, row) { //监听选中与取消选中
396 var xzh=hqxzh(false);
397 if(xzh!=false){ //有选中行
398 document.getElementById("btn_gengduoset").style.display="inline-block";
399 $("#btn_gengduoset").removeClass('animated zoomOut');
400 $("#btn_gengduoset").addClass('animated zoomIn');
401 document.getElementById("gengduoset").style.display="inline-block";
402 }else{ //无选中行
403 $("#btn_gengduoset").removeClass('animated zoomIn');
404 $("#btn_gengduoset").addClass('animated zoomOut');
405 document.getElementById("gengduoset").style.display="none";
406 setTimeout(function() {document.getElementById("btn_gengduoset").style.display="none";},500);
407 }
408 });
409
410 function yulanset(data){
411 if(data.innerHTML=='全图预览'){
412 $('#imgsh').removeClass('scrollspy-example-2');
413 data.innerHTML='滑动预览';
414 }else{
415 $('#imgsh').addClass('scrollspy-example-2');
416 data.innerHTML='全图预览';
417 }
418 }
419
420 $('#tb_departments').bootstrapTable({
421 classes: 'table table-bordered table-hover table-striped',
422 url: './ajax.php',
423 method: 'post',
424 contentType : "application/x-www-form-urlencoded", //请求格式
425 dataType : 'json', // 返回数据格式
426 uniqueId: 'id',
427 idField: 'id', // 每行的唯一标识字段
428 toolbar: '#toolbar', // 工具按钮容器
429 //clickToSelect: true, // 是否启用点击选中行
430 showColumns: true, // 是否显示所有的列
431 showRefresh: true, // 是否显示刷新按钮
432
433 showToggle: true, // 是否显示详细视图和列表视图的切换按钮(clickToSelect同时设置为true时点击会报错)
434
435 pagination: true, // 是否显示分页
436 sortOrder: "asc", // 排序方式
437 sortName: "type", //默认排序字段
438 queryParams: function(params) {
439 var temp = {
440 gn: 'listfile', // 请求功能
441 path: paths, // 目录
442 limit: params.limit, // 每页数据量
443 offset: params.offset, // sql语句起始索引
444 page: (params.offset / params.limit) + 1,
445 sort: params.sort, // 排序的列名
446 sortOrder: params.order // 排序方式'asc' 'desc'
447 };
448 return temp;
449 }, // 传递参数
450 sidePagination: "server", // 分页方式:client客户端分页,server服务端分页
451 pageNumber: 1, // 初始化加载第一页,默认第一页
452 pageSize: 100, // 每页的记录行数
453 pageList: [25,50,100,200,500,1000], // 可供选择的每页的行数
454 //search: true, // 是否显示表格搜索,此搜索是客户端搜索
455
456 showExport: false, // 是否显示导出按钮, 导出功能需要导出插件支持(tableexport.min.js)
457 exportDataType: "basic", // 导出数据类型, 'basic':当前页, 'all':所有数据, 'selected':选中的数据
458 responseHandler: function (res) { //当前所在目录与返回数据目录误差纠正
459 var fanhpath=res.path;
460 if(fanhpath!=paths){
461 mulus('/',2);
462 }
463 return res;
464 },
465
466 columns: [{
467 field: 'example',
468 checkbox: true // 是否显示复选框
469 }, {
470 field: 'name',
471 title: '文件名称',
472 sortable: true, // 是否排序
473 formatter:function(value,row){
474 if(row.type=='dir'){ //文件夹
475 return '<div style="width:100px;">'+
476 '<a class="text-success" style="font-size:15px;" href="#!" onclick="mulus(this.childNodes[1].innerHTML,1);">'+
477 '<i class="mdi mdi-24px mdi-folder-open" style="vertical-align:middle;"></i><span>'+value+'</span></a></div>';
478 }else{ //文件
479 return '<a class="text-default">'+
480 '<i class="mdi mdi-18px '+fileico(value)+'" style="vertical-align:middle;"></i>'+value+'</a>';
481 }
482 }
483 }, {
484 field: 'size',
485 title: '文件大小',
486 sortable: true, // 是否排序
487 formatter:function(value,row){
488 if(row.type=='dir'){
489 return '<a class="text-success" href="#!" onclick="filesize(this,'+"'"+row.name+"'"+');">计算</a>';
490 }else{
491 var values=value/1024;
492 if(values>1024){
493 var values=values/1024;
494 num = values.toFixed(2)+'MB';
495 }else{
496 num = values.toFixed(2)+'KB';
497 }
498 return num;
499 }
500 }
501 }, {
502 field: 'mtime',
503 title: '修改时间',
504 sortable: true, // 是否排序
505 formatter:function(value,row){
506 var date=getTimes(value);
507 return date;
508 }
509 }, {
510 field: 'operate',
511 title: '文件操作',
512 formatter: btnGroup, // 自定义方法
513 events: {
514 'click .edit-btn': function (event, value, row, index) {
515 editfile(row);
516 },
517 'click .del-btn': function (event, value, row, index) {
518 delfile(row);
519 },
520 'click .fd-name': function (event, value, row, index) {
521 setname(row);
522 },
523 'click .file-jys': function (event, value, row, index) {
524 if(row.name==null){msalert(3,'需解压文件不存在!',4000); return;}
525 msloading('正在加载中...'); // 加载显示
526 document.getElementById("jywjyd").value = paths+row.name;
527 document.getElementById("jyd").value = paths;
528 document.getElementById("jymm").value = '';
529 msloadingde(); // 隐藏
530 $('#zipjys').modal(); //弹出弹窗
531 },
532 'click .file-dr': function (event, value, row, index) {
533 drsqlfile(row);
534 },
535 'click .cp-file': function (event, value, row, index) {
536 copyfile(row,1);
537 },
538 'click .jq-file': function (event, value, row, index) {
539 copyfile(row,1,2);
540 },
541 'click .file-down': function (event, value, row, index) {
542
543 get_file_download_id(row,(url)=>{
544 window.open(url, '_blank');
545 })
546
547 },
548 'click .file-img': function (event, value, row, index) {
549 //使用模态框显示图片
550 get_file_download_id(row,(url)=>{
551 $('#imgsrc').attr('src',url);
552 $('#tupyltitle').html('图片预览['+row.name+']');
553 $('#imageyul').modal(); //弹出弹窗
554 })
555
556 $('#imageyul').on('hidden.bs.modal', function (e) { //监听模态框关闭事件
557 $('#imgsrc').attr('src','');
558 $("#imgsh").addClass('scrollspy-example-2');
559 $('#yulantext').html('全图预览');
560 });
561 }
562 }
563 }],
564 onLoadSuccess: function(data){
565 $("[data-toggle='tooltip']").tooltip();
566 }
567 });
568
569 function get_file_download_id(row,fun){
570 msloading('正在获取文件下载链接...'); // 加载显示
571 $.post("./wjxz.php?dowtype=dowbtfile&filepath="+paths+"&filename="+row.name, {}, function (date) {
572 let json= JSON.parse(date);
573 fun(json.url)
574 msloadingde(); // 隐藏
575 })
576
577 }
578
579 // 操作按钮
580 function btnGroup (value,row)
581 {
582 if(row.type=='dir'){
583 //文件夹操作
584 var html =
585 '<a href="#!" class="btn btn-xs btn-default fd-name" title="重命名文件夹" data-toggle="tooltip"><i class="mdi mdi-format-italic"></i></a>' +
586 '<a href="#!" class="btn btn-xs btn-default cp-file" title="复制文件夹" data-toggle="tooltip"><i class="mdi mdi-content-copy"></i></a>' +
587 '<a href="#!" class="btn btn-xs btn-default jq-file" title="剪切文件夹" data-toggle="tooltip"><i class="mdi mdi-content-cut"></i></a>' +
588 '<a href="#!" class="btn btn-xs btn-default del-btn" title="删除" data-toggle="tooltip"><i class="mdi mdi-window-close"></i></a>';
589 }else{
590 //文件操作
591 var eduset='';
592 var ann_msg=filebtn(row.name);
593 if(ann_msg[1]){
594 eduset='<a href="#!" class="btn btn-xs btn-default edit-btn" title="编辑" data-toggle="tooltip"><i class="mdi mdi-pencil"></i></a>'
595 }
596 var html =
597 eduset+
598 '<a href="#!" class="btn btn-xs btn-default file-down" title="下载文件" data-toggle="tooltip"><i class="mdi mdi-cloud-download-outline"></i></a>' +
599 '<a href="#!" class="btn btn-xs btn-default fd-name" title="重命名文件" data-toggle="tooltip"><i class="mdi mdi-format-italic"></i></a>' +
600 '<a href="#!" class="btn btn-xs btn-default cp-file" title="复制文件" data-toggle="tooltip"><i class="mdi mdi-content-copy"></i></a>' +
601 '<a href="#!" class="btn btn-xs btn-default jq-file" title="剪切文件" data-toggle="tooltip"><i class="mdi mdi-content-cut"></i></a>' +
602 ann_msg[0]+
603 '<a href="#!" class="btn btn-xs btn-default del-btn" title="删除" data-toggle="tooltip"><i class="mdi mdi-window-close"></i></a>';
604 }
605 return html;
606 }
607 function ysfile(){
608 filenames=paths+'yuanma'+Math.floor(Math.random()*2000)+'.';
609 $.confirm({
610 title: '压缩选中文件',
611 content: '<div class="form-group p-1 mb-0">' +
612 ' <label class="control-label">压缩类型</label>' +
613 ' <select id="input-type" class="custom-select" onchange="document.getElementById('+"'input-path'"+').value=filenames+this.options[this.options.selectedIndex].value">' +
614 ' <option value="zip">zip(通用格式)</option><option value="tar.gz">tar.gz(推荐)</option><option value="rar">rar(WinRAR对中文兼容较好)</option><option value="7z">7z(压缩率极高的压缩格式)</option></select>' +
615 ' <label class="control-label">压缩包存放路径</label>' +
616 ' <input type="text" id="input-path" placeholder="请输入此的新名称" class="form-control" value="'+filenames+'zip">' +
617 '</div>',
618 buttons: {
619 sayMyName: {
620 text: '确认压缩',
621 btnClass: 'btn-info',
622 action: function() {
623 var typel = this.$content.find('select#input-type');
624 var pathl = this.$content.find('input#input-path');
625 if (!$.trim(pathl.val())) {
626 $.alert({
627 title: "提示",
628 content: "压缩包存放路径字段不能为空!",
629 type: 'red'
630 });
631 return false;
632 } else {
633 msloading('正在压缩文件...'); // 加载显示
634 let data = {};
635 data["gn"]="fileys";
636 data["file"]=hqxzh();
637 data["dpath"]=pathl.val();
638 data["type"]=typel.val();
639 data["path"]=paths;
640 $.post('./ajax.php', data, function (date) {
641 var jsoe= JSON.parse(date);
642 var qk= jsoe.code
643
644 msalert(jsoe.qk,jsoe.code,2000);
645 $("#tb_departments").bootstrapTable('refreshOptions',{pageNumber:1}); //刷新表格
646 msloadingde(); // 隐藏
647 })
648 }
649 }
650 },
651 '取消': function() {}
652 }
653 });
654 }
655
656 //复制/剪切文件
657 function pastefile(){
658 if(file_copy==false){msalert(3,'未选择要复制的文件!',2000);return;}
659 if(file_copy[0]==paths){msalert(3,'复制目录与粘贴目录禁止相同!',2000);return;}
660 var file_zclj=[false]; //文件粘贴主从逻辑判断变量
661 $.each(file_copy[1],function(i) {
662 var psr=paths.slice(0,(file_copy[0]+this+'/').length);
663 if(psr==file_copy[0]+this+'/'){
664 file_zclj=[true,psr];
665 }
666 });
667 if(file_zclj[0]){msalert(3,'主从逻辑错误!目录'+file_zclj[1]+'粘贴到'+paths+'有包含关系,存在无限循环复制风险!',4000);return;}
668 var selRows = $("#tb_departments").bootstrapTable("getData",{useCurrentPage:true});
669 var arrs = '';
670 $.each(selRows,function(i) {
671 var sfcz=file_copy[1].includes(this.name);
672 if(sfcz==true){
673 if(this.type=='dir'){var filetype='文件夹';}else{var filetype='文件';}
674 var values=this.size/1024;
675 if(values>1024){
676 values=values/1024;
677 num = values.toFixed(2)+'MB';
678 }else{
679 num = values.toFixed(2)+'KB';
680 }
681 arrs+='<tr><th scope="row">'+filetype+'</th><td>'+this.name+'</td><td>'+num+'</td><td>'+getTimes(this.mtime)+'</td></tr>';
682 }
683 });
684
685 if(arrs!=''){
686 $.confirm({
687 title: '即将覆盖以下文件',
688 content: '该目录以下文件与即将粘贴文件的文件名相同!<br/>是否确认覆盖以下文件?<table class="table table-striped table-dark"><thead><tr><th>文件类型</th><th>文件名称</th><th>文件大小</th><th>最后一次修改时间</th></tr></thead><tbody>'+arrs+'</tbody></table><br/>',
689 icon: 'mdi mdi-comment-question',
690 animation: 'scale',
691 closeAnimation: 'scale',
692 opacity: 0.5,
693 type:'orange',
694 buttons: {
695 'confirm': {
696 text: '确认覆盖',
697 btnClass: 'btn-blue',
698 action: function() {
699 msloading('正在粘贴文件中,请稍后...');
700 let data = {};
701 data["gn"]="filecp";
702 data["yfile"]=file_copy[1];
703 data["ypath"]=file_copy[0];
704 data["xpath"]=paths;
705 data["type"]=file_copy[2]; //1为复制,2为剪切
706 $.post('./ajax.php', data, function (date) {
707 var jsoe= JSON.parse(date);
708
709 file_copy=false;
710 document.getElementById("btn_filepst").style.display="none";
711 msalert(jsoe.qk,jsoe.code,4000);
712 $("#tb_departments").bootstrapTable('refreshOptions',{pageNumber:1}); //刷新表格
713 msloadingde(); // 隐藏
714 })
715 }
716 },
717 '取消': function() {}
718 }
719 });
720 }else{
721 msloading('正在粘贴文件中,请稍后...');
722 let data = {};
723 data["gn"]="filecp";
724 data["yfile"]=file_copy[1];
725 data["ypath"]=file_copy[0];
726 data["xpath"]=paths;
727 data["type"]=file_copy[2]; //1为复制,2为剪切
728 $.post('./ajax.php', data, function (date) {
729 var jsoe= JSON.parse(date);
730
731 file_copy=false;
732 document.getElementById("btn_filepst").style.display="none";
733 msalert(jsoe.qk,jsoe.code,4000);
734 $("#tb_departments").bootstrapTable('refreshOptions',{pageNumber:1}); //刷新表格
735 msloadingde(); // 隐藏
736 })
737 }
738 }
739
740 function copyfile(row,vs=1,tp=1){ //row为文件名称,vs为单/多文件,tp为复制/剪切
741 if(vs==1){
742 file_copy=[paths,[row.name],tp];
743 }else{
744 var xzdata=hqxzh();
745 if(xzdata==false){return;}
746 file_copy=[paths,xzdata,tp];
747 }
748 console.log(file_copy);
749 document.getElementById("btn_filepst").style.display="inline-block";
750 if(tp==1){
751 msalert(2,'复制完成!请到其他目录下点击顶部粘贴按钮进行粘贴!',4000);
752 }else{
753 msalert(2,'剪切完成!请到其他目录下点击顶部粘贴按钮进行粘贴!',4000);
754 }
755 }
756
757 //导入SQL文件到数据库中
758 function drsqlfile(row) {
759 if(row.name==null){
760 msalert(3,'导入文件不存在!',2000);
761 }
762 else
763 {
764 $.confirm({
765 title: '注意',
766 content: '你确定要导入数据库文件吗?导入的数据如有相同则将会在导入后覆盖原数据库内数据!导入后数据不可恢复!!!',
767 icon: 'mdi mdi-comment-question',
768 animation: 'scale',
769 closeAnimation: 'scale',
770 opacity: 0.5,
771 buttons: {
772 'confirm': {
773 text: '确认导入',
774 btnClass: 'btn-blue',
775 action: function() {
776 msloading('正在导入中,请稍后...'); // 加载显示
777 let data = {};
778 data["gn"]="sqldr";
779 data["path"]=paths;
780 data["filename"]=row.name;
781 $.post('./ajax.php', data, function (date) {
782 var jsoe= JSON.parse(date);
783 var qk= jsoe.code
784
785 if(qk=='导入数据库成功!'){
786 msalert(1,qk, 4000);
787 msloadingde(); // 隐藏
788 }else{
789 msalert(4,qk, 4000);
790 msloadingde(); // 隐藏
791 }
792 })
793 }
794 },
795 '取消': function() {}
796 }
797 });
798 }
799 }
800
801 //解压缩文件
802 function jysfile(){
803 var xjy=jywjyd.value;
804 var xjl=jyd.value;
805 var xjm=jymm.value;
806 var jbm=bm.value;
807 if(xjy==null || xjl==null || jbm==null){
808 msalert(3,'除密码外其余表单请填写或选择完整!',3000);
809 }
810 else
811 {
812 msloading('正在解压中,请稍后...'); // 加载显示
813 let data = {};
814 data["gn"]="ftpjy";
815 data["jywj"]=xjy;
816 data["jyd"]=xjl;
817 data["jymm"]=xjm;
818 data["wjbm"]=jbm;
819 $.post('./ajax.php', data, function (date) {
820 var jsoe= JSON.parse(date);
821 var qk= jsoe.code
822
823 if(qk=='解压成功'){
824 msalert(2,'解压请求已提交!正在解压中~~~',2000,'#zipjys');
825 var t = 2; //停留在页面的时间
826 setTimeout(function() {
827 $("#tb_departments").bootstrapTable('refreshOptions',{pageNumber:1}); //刷新表格
828 msalert(1,'解压成功!',2000);
829 $('#zipjys').modal('hide'); //关闭弹窗
830 msloadingde(); // 隐藏
831 },
832 t*1000);
833 }else{
834 msalert(4,'解压失败!',2500,'#zipjys');
835 msloadingde(); // 隐藏
836 }
837 })
838 }
839 }
840
841
842 function setname(row){
843 if(row.type=='dir'){
844 var dirfile_name_dhk='文件夹';
845 var dirfile_name_title='重命名文件夹-'+row.name;
846 }else{
847 var dirfile_name_dhk='文件';
848 var dirfile_name_title='重命名文件-'+row.name;
849 }
850 $.confirm({
851 title: dirfile_name_title,
852 content: '<div class="form-group p-1 mb-0">' +
853 ' <label class="control-label">此'+dirfile_name_dhk+'的新名称</label>' +
854 ' <input autofocus="" type="text" id="input-name" placeholder="请输入此'+dirfile_name_dhk+'的新名称" class="form-control" value="'+row.name+'">' +
855 '</div>'+
856 '<script>var inputvals=$("#input-name").val();$("#input-name").val("").focus().val(inputvals);//定位光标到末尾',
857 buttons: {
858 sayMyName: {
859 text: '确定',
860 btnClass: 'btn-info',
861 action: function() {
862 var input = this.$content.find('input#input-name');
863 if (!$.trim(input.val())) {
864 $.alert({
865 title: "提示",
866 content: "名称字段不能为空!",
867 type: 'red'
868 });
869 return false;
870 } else {
871 msloading('正在修改文件名称...'); // 加载显示
872 let data = {};
873 data["gn"]="setname";
874 data["lj"]=paths;
875 data["wjjm"]=row.name;
876 data["wjmc"]=input.val();
877 $.post('./ajax.php', data, function (date) {
878 var jsoe= JSON.parse(date);
879 var qk= jsoe.code
880 if(qk=='重命名成功!'){
881 msalert(1,qk,2000);
882 $("#tb_departments").bootstrapTable('refreshOptions',{pageNumber:1}); //刷新表格
883 msloadingde(); // 隐藏
884 }else{
885 msalert(4,qk,4000);
886 msloadingde(); // 隐藏
887 }
888 })
889 }
890 }
891 },
892 '取消': function() {}
893 }
894 });
895 }
896
897 function xzdelfile() {
898 var arr=hqxzh();
899 if(arr==false){msloadingde();return;}
900 $.confirm({
901 title: '删除选中的文件',
902 content: '你确定要删除该您选中的文件吗?',
903 autoClose: 'cancelAction|10000',
904 escapeKey: 'cancelAction',
905 icon: 'mdi mdi-alert',
906 type: 'dark',
907 buttons: {
908 confirm: {
909 btnClass: 'btn-red',
910 text: '确定删除',
911 action: function() {
912 msloading('正在删除中,请稍后...'); // 加载显示
913 let data = {};
914 data["gn"]="ftpscxz";
915 data["idsz"]=arr;
916 data["path"]=paths;
917 $.post('./ajax.php', data, function (date) {
918 var jsoe= JSON.parse(date);
919 var qk= jsoe.code;
920
921 if(qk=='删除成功'){
922 msalert(1,'删除成功!',2000);
923 $("#tb_departments").bootstrapTable('refreshOptions',{pageNumber:1}); //刷新表格
924 msloadingde(); // 隐藏
925 }else{
926 msloadingde(); // 隐藏
927 msalert(4,qk,4000);
928 }
929 })
930 }
931 },
932 cancelAction: {
933 text: '取消',
934 action: function() {
935 }
936 }
937 }
938 });
939 }
940
941 function delfile(row){
942 if(row.name==null){
943 msalert(3,'未选择要删除的文件!',2000);
944 return;
945 }
946 if(row.type=='dir'){
947 var dirfile_name_dhk='文件夹';
948 }else{
949 var dirfile_name_dhk='文件';
950 }
951
952 $.confirm({
953 title: '删除'+dirfile_name_dhk+row.name,
954 content: '你确定要删除该'+dirfile_name_dhk+'['+paths+row.name+']吗?',
955 autoClose: 'cancelAction|10000',
956 escapeKey: 'cancelAction',
957 icon: 'mdi mdi-alert',
958 type: 'dark',
959 buttons: {
960 confirm: {
961 btnClass: 'btn-red',
962 text: '确定删除',
963 action: function() {
964 msloading('正在删除中,请稍后...'); // 加载显示
965 let data = {};
966 data["gn"]="ftpsc";
967 data["lx"]=row.type;
968 data["path"]=paths;
969 data["name"]=row.name;
970 $.post('./ajax.php', data, function (date) {
971 var jsoe= JSON.parse(date);
972 var qk= jsoe.code
973
974 if(qk=='删除成功'){
975 msalert(1,'删除成功!',2000);
976 $("#tb_departments").bootstrapTable('refreshOptions',{pageNumber:1}); //刷新表格
977 msloadingde(); // 隐藏
978 }else{
979 msalert(4,qk,4000);
980 msloadingde(); // 隐藏
981 }
982 })
983 }
984 },
985 cancelAction: {
986 text: '取消',
987 action: function() {
988 }
989 }
990 }
991 });
992 }
993
994 function setwj(modalfi=true){
995 var nr=wjnr.value;
996 if(path_bj_name==""){
997 msalert(3,'被编辑文件以及所在目录不能为空!请刷新页面重试',4000);
998 }
999 else
1000 {
1001 msloading('正在修改中,请稍后...'); // 加载显示
1002 let data = {};
1003 data["gn"]="setwj";
1004 data["wj"]=path_bj_name;
1005 data["nr"]=CodeMirrorEditor.getValue();
1006 $.post('./ajax.php', data, function (date) {
1007 var jsoe= JSON.parse(date);
1008 var qk= jsoe.code
1009
1010 if(modalfi){
1011 msalert(1,qk,2000);
1012 $('#setwj').modal('hide'); //关闭弹窗
1013 }else{
1014 msalert(1,qk,1000,'#setwj');
1015 }
1016 msloadingde(); // 隐藏
1017
1018 })
1019 }}
1020
1021 // 操作方法 - 编辑
1022 function editfile(row)
1023 {
1024 msloading('正在获取文件内容,请稍后...'); // 加载显示
1025 document.getElementById("wjnr").value = '';
1026 let data = {};
1027 data["gn"]="hqwj";
1028 data["wj"]=paths+row.name;
1029 $.post('./ajax.php', data, function (date) {
1030
1031 document.getElementById("setfiletitle").innerHTML="修改文件内容["+row.name+"]";
1032 $('#setwj').modal(); //弹出弹窗
1033 $('.modal-fullscreen-btn').closest('.modal').toggleClass('modal-fullscreen',true); //最大化模态框
1034 msalert(2,'文件内容获取成功!',1000,'#setwj');
1035 CodeMirrorEditor.setValue(date);
1036 CodeMirrorEditor.setOption("mode", filecomode(row.name)); //切换渲染的文件类型
1037 setTimeout(() => {
1038 CodeMirrorEditor.refresh();
1039 },200);
1040 path_bj_name=paths+row.name;
1041
1042 msloadingde(); // 隐藏
1043 })
1044
1045 $('#setwj').on('hidden.bs.modal', function (e) { //监听模态框关闭事件
1046 path_bj_name='';
1047 CodeMirrorEditor.setValue('');
1048 CodeMirrorEditor.refresh();
1049 });
1050 }
1051
1052 function wjwjcg(){
1053 var ml=xjlja.value;
1054 var nameb=namea.value;
1055 if(nameb==""){
1056 msalert(3,'文件名不能为空',2000,'#xjwj');
1057 }
1058 else
1059 {
1060 msloading('正常新建中...'); // 加载显示
1061 let data = {};
1062 data["gn"]="xjwj";
1063 data["ml"]=ml;
1064 data["wjname"]=nameb;
1065 $.post('./ajax.php', data, function (date) {
1066 var jsoe= JSON.parse(date);
1067 var qk= jsoe.code
1068
1069 if(qk=='文件创建成功!'){
1070 msalert(1,qk,2000);
1071 $("#tb_departments").bootstrapTable('refreshOptions',{pageNumber:1}); //刷新表格
1072 document.getElementById("namea").value='';
1073 $('#xjwj').modal('hide'); //关闭弹窗
1074 }else{
1075 msalert(3,qk,2000,'#xjwj');
1076 }
1077 msloadingde(); // 隐藏
1078
1079 })
1080 }}
1081
1082 function wjwjjg(){
1083 var ml=xjljb.value;
1084 var nameb=namec.value;
1085 if(nameb==""){
1086 msalert(3,'文件夹名不能为空',2000,'#xjwjj');
1087 }
1088 else
1089 {
1090 msloading('正常新建中...'); // 加载显示
1091 let data = {};
1092 data["gn"]="xjwjj";
1093 data["ml"]=ml;
1094 data["wjname"]=nameb;
1095 $.post('./ajax.php', data, function (date) {
1096 var jsoe= JSON.parse(date);
1097 var qk= jsoe.code
1098
1099 if(qk=='目录创建成功!'){
1100 msalert(1,qk,2000);
1101 $("#tb_departments").bootstrapTable('refreshOptions',{pageNumber:1}); //刷新表格
1102 document.getElementById("namec").value='';
1103 $('#xjwjj').modal('hide'); //关闭弹窗
1104 }else{
1105 msalert(3,qk,2000,'#xjwjj');
1106 }
1107 msloadingde(); // 隐藏
1108 })
1109 }}
1110
1111
1112
1113
1114 function filesize(val,name){
1115 msloading('计算中,请稍后...'); // 加载显示
1116 let data = {};
1117 data["gn"]="hqdx";
1118 data["dw"]=paths+name;
1119 $.post('./ajax.php', data, function (date) {
1120 var jsoe= JSON.parse(date);
1121 var qk= jsoe.code/1024
1122
1123 if(qk>1024){
1124 var jg=qk/1024;
1125 num = jg.toFixed(2)+'MB';
1126 }else{
1127 num = qk.toFixed(2)+'KB';
1128 }
1129 msalert(1,'计算成功',500);
1130 val.innerHTML=num;
1131 msloadingde(); // 隐藏
1132 })
1133 }
1134
1135 //切换目录
1136 function mulus(data,vs){
1137 if(vs==1){
1138 paths+=data+'/';
1139 mldh();
1140 }else{
1141 paths=data;
1142 mldh();
1143 }
1144 $("#tb_departments").bootstrapTable('refreshOptions',{pageNumber:1}); //刷新表格
1145 }
1146
1147 //更新目录导航
1148 function mldh(){
1149 var arr=paths.split('/');
1150 var ksr='';
1151 document.getElementById("mus").innerHTML='';
1152 var tmp = document.createElement("span");
1153 tmp.innerHTML= '/<a class="text-success" onclick="mulus('+"'"+'/'+"'"+',2);" href="#!">根目录</a>';
1154 document.getElementById("mus").appendChild(tmp);
1155 for (x in arr) {
1156 if(arr[x]!=''){
1157 ksr+=arr[x]+'/';
1158 var tmp = document.createElement("span");
1159 tmp.innerHTML= '/<a class="text-success" onclick="mulus('+"'"+'/'+ksr+"'"+',2);" href="#!">'+arr[x]+'</a>';
1160 document.getElementById("mus").appendChild(tmp);
1161 }
1162 }
1163 }
1164
1165 //文件类型后缀对应图标
1166 function fileico(data){
1167 var arr=[];
1168 arr['zip']='mdi mdi-zip-box';
1169 arr['rar']='mdi mdi-zip-box';
1170 arr['7z']='mdi mdi-zip-box';
1171 arr['gz']='mdi mdi-zip-box';
1172 arr['js']='mdi-language-javascript';
1173 arr['php']='mdi mdi-language-php';
1174 arr['sql']='mdi mdi-database';
1175 arr['png']='mdi mdi-image';
1176 arr['jpg']='mdi mdi-image';
1177 arr['svg']='mdi mdi-image';
1178 arr['jpeg']='mdi mdi-image';
1179 arr['ico']='mdi mdi-image';
1180 arr['gif']='mdi-gif';
1181 arr['mp4']='mdi-file-video';
1182 arr['avi']='mdi-file-video';
1183 arr['wmv']='mdi-file-video';
1184 arr['mpg']='mdi-file-video';
1185 arr['mpeg']='mdi-file-video';
1186 arr['mov']='mdi-file-video';
1187 arr['mp3']='mdi-file-music';
1188 arr['wma']='mdi-file-music';
1189 arr['aac']='mdi-file-music';
1190 arr['mpc']='mdi-file-music';
1191 arr['css']='mdi mdi-language-css3';
1192 arr['htm']='mdi mdi-web';
1193 arr['xml']='mdi mdi-xml';
1194 arr['html']='mdi mdi-web';
1195 arr['py']='mdi-language-python';
1196 arr['go']='mdi-language-go';
1197 arr['java']='mdi-language-java';
1198 arr['docx']='mdi-file-word';
1199 arr['xls']='mdi-file-excel';
1200
1201 var val=data.substr(data.lastIndexOf('.')+1).toLowerCase();
1202 var ds=arr[val];
1203 if(ds!=null){
1204 return ds;
1205 }else{
1206 return 'mdi-file-document';
1207 }
1208 }
1209
1210 //部分类型文件显示指定按钮
1211 function filebtn(data){
1212 var arr=[]; //0为按钮,1为是否显示编辑按钮
1213 arr['zip']=['<a href="#!" class="btn btn-xs btn-default file-jys" title="解压缩文件" data-toggle="tooltip"><i class="mdi mdi-arrow-up-bold-box"></i></a>',false];
1214 arr['rar']=['<a href="#!" class="btn btn-xs btn-default file-jys" title="解压缩文件" data-toggle="tooltip"><i class="mdi mdi-arrow-up-bold-box"></i></a>',false];
1215 arr['7z']=['<a href="#!" class="btn btn-xs btn-default file-jys" title="解压缩文件" data-toggle="tooltip"><i class="mdi mdi-arrow-up-bold-box"></i></a>',false];
1216 arr['gz']=['<a href="#!" class="btn btn-xs btn-default file-jys" title="解压缩文件" data-toggle="tooltip"><i class="mdi mdi-arrow-up-bold-box"></i></a>',false];
1217 arr['sql']=['<a href="#!" class="btn btn-xs btn-default file-dr" title="导入SQL文件到数据库" data-toggle="tooltip"><i class="mdi mdi-import mdi-rotate-90"></i></a>',true];
1218 arr['png']=['<a href="#!" class="btn btn-xs btn-default file-img" title="预览图片" data-toggle="tooltip"><i class="mdi mdi-image-search-outline"></i></a>',false]; //图片类文件显示预览按钮
1219 arr['jpg']=['<a href="#!" class="btn btn-xs btn-default file-img" title="预览图片" data-toggle="tooltip"><i class="mdi mdi-image-search-outline"></i></a>',false];
1220 arr['svg']=['<a href="#!" class="btn btn-xs btn-default file-img" title="预览图片" data-toggle="tooltip"><i class="mdi mdi-image-search-outline"></i></a>',false];
1221 arr['jpeg']=['<a href="#!" class="btn btn-xs btn-default file-img" title="预览图片" data-toggle="tooltip"><i class="mdi mdi-image-search-outline"></i></a>',false];
1222 arr['gif']=['<a href="#!" class="btn btn-xs btn-default file-img" title="预览图片" data-toggle="tooltip"><i class="mdi mdi-image-search-outline"></i></a>',false];
1223 arr['ico']=['<a href="#!" class="btn btn-xs btn-default file-img" title="预览图片" data-toggle="tooltip"><i class="mdi mdi-image-search-outline"></i></a>',false];
1224 arr['mp4']=['',false];
1225 arr['avi']=['',false];
1226 arr['wmv']=['',false];
1227 arr['mpg']=['',false];
1228 arr['mpeg']=['',false];
1229 arr['mov']=['',false];
1230 arr['mp3']=['',false];
1231 arr['wma']=['',false];
1232 arr['aac']=['',false];
1233 arr['mpc']=['',false];
1234
1235 var val=data.substr(data.lastIndexOf('.')+1).toLowerCase();
1236 var ds=arr[val];
1237 if(ds!=null){
1238 return ds;
1239 }else{
1240 return ['',true]; //无匹配记录时显示的
1241 }
1242 }
1243
1244 //文件类型后缀对应编辑器使用的语言渲染类型
1245 function filecomode(data){
1246 var arr=[];
1247 arr['js']='javascript';
1248 arr['php']='application/x-httpd-php';
1249 arr['sql']='text/x-mysql';
1250 arr['css']='text/css';
1251 arr['htm']='text/html';
1252 arr['html']='text/html';
1253 arr['xml']='application/xml';
1254
1255 var val=data.substr(data.lastIndexOf('.')+1).toLowerCase();
1256 var ds=arr[val];
1257 if(ds!=null){
1258 return ds;
1259 }else{
1260 return 'application/x-httpd-php'; //未知的文件类型使用PHP语言模式渲染
1261 }
1262 }
1263
1264 function getTimes(timestamp) {
1265 var date = new Date(timestamp*1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
1266 let Y = date.getFullYear(),
1267 M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1),
1268 D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()),
1269 h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()),
1270 m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()),
1271 s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds());
1272 return Y + '-' + M + '-' + D + ' ' + h + ':' + m + ':' + s
1273 }
1274
1275 //文件选择监听
1276 $(".custom-file-input").on("change",function(){
1277 if(this.files[0]==null){
1278 $(".custom-file-label").html('选择文件...');
1279 }else{
1280 $(".custom-file-label").html(this.files[0].name);
1281 }
1282 });
1283</script>
1284<!--文件上传-->
1285<script type="text/javascript" src="<?=mnbt_asset_url('js/upload.js')?>?1"></script>
1286</body>
1287</html>