diff --git a/app/Gdoo/Model/Form.php b/app/Gdoo/Model/Form.php index efd68402..f2328487 100644 --- a/app/Gdoo/Model/Form.php +++ b/app/Gdoo/Model/Form.php @@ -2033,7 +2033,7 @@ class Form $value = join(",", $value); break; case 'images': - $value = join("\n", (array)$value); + $value = join(",", (array)$value); break; case 'date': if ($setting['save'] == 'u') { diff --git a/app/Gdoo/Model/Services/FieldService.php b/app/Gdoo/Model/Services/FieldService.php index 7b8649ac..c52ac799 100644 --- a/app/Gdoo/Model/Services/FieldService.php +++ b/app/Gdoo/Model/Services/FieldService.php @@ -1461,7 +1461,7 @@ class FieldService '; } else { - $srcs = explode("\n", $content); + $srcs = explode(",", $content); foreach($srcs as $src) { $items .= '
diff --git a/app/Gdoo/System/Controllers/MediaController.php b/app/Gdoo/System/Controllers/MediaController.php index c9c122df..1a5f193d 100644 --- a/app/Gdoo/System/Controllers/MediaController.php +++ b/app/Gdoo/System/Controllers/MediaController.php @@ -26,7 +26,8 @@ class MediaController extends DefaultController if ($file->isValid() && $v->passes()) { // 获取上传uri第一个目录 $path = 'media/'.date('Y/m'); - $upload_path = upload_path().'/'.$path; + $upload_path = upload_path(); + $file_path = $upload_path.'/'.$path; // 文件后缀名 $extension = $file->getClientOriginalExtension(); @@ -39,7 +40,7 @@ class MediaController extends DefaultController $mimeType = $file->getMimeType(); $filesize = $file->getSize(); - if ($file->move($upload_path, $filename)) { + if ($file->move($file_path, $filename)) { $data = [ 'name' => mb_strtolower($file->getClientOriginalName()), 'path' => $path.'/'.$filename, @@ -49,9 +50,13 @@ class MediaController extends DefaultController ]; if (in_array($mimeType, $fileTypes)) { - $path = pathinfo($path.'/'.$filename); - $thumb = $path['dirname'].'/'. image_thumb($upload_path.'/'.$filename, 750); - $data['thumb'] = $thumb; + // 生成缩略图,图片小于750px就不生成了 + $thumb = $path. '/thumb_' . $filename; + if (image_thumb($file_path.'/'.$filename, $upload_path.'/'.$thumb, 750)) { + $data['thumb'] = $thumb; + } else { + $data['thumb'] = $path.'/'.$filename; + } } $id = Media::insertGetId($data); @@ -85,17 +90,11 @@ class MediaController extends DefaultController $rows = $model->orderBy('id', 'desc')->get()->toArray(); foreach($rows as &$row) { if (in_array($row['type'], ['png', 'jpg', 'jpeg'])) { - $file = $row['path']; - $path = pathinfo($file); - $thumb = $path['dirname'].'/t750_'.$path['basename']; - if (!is_file(upload_path().'/'.$thumb)) { - image_thumb(upload_path().'/'.$file, 750); + if (empty($row['thumb'])) { + $row['thumb'] = $row['path']; } - $row['path'] = $file; - $row['thumb'] = $thumb; } } - return $this->json($rows, true); } return $this->render(); @@ -106,13 +105,19 @@ class MediaController extends DefaultController */ public function folder() { + $gets = Request::all(); if (Request::method() == 'POST') { - $gets = Request::all(); - $gets['folder'] = 1; - Media::insertGetId($gets); + if (empty($gets['name'])) { + return $this->json('名称不能为空。'); + } + $model = Media::findOrNew($gets['id']); + $model->folder = 1; + $model->name = $gets['name']; + $model->save(); return $this->json('操作成功', true); } - return $this->render(); + $folder = Media::where('id', $gets['id'])->first(); + return $this->render(['folder' => $folder]); } /** @@ -134,18 +139,37 @@ class MediaController extends DefaultController public function delete() { $id = (array)Request::get('id'); + $folder = Request::get('folder'); + if (empty($id)) { - return $this->json('删除失败'); + return $this->json('删除失败。'); + } + + // 判断删除的文件夹是否有文件 + if ($folder) { + $count = Media::whereIn('folder_id', $id)->count(); + if ($count) { + return $this->json('文件夹不为空,删除失败。'); + } } $rows = Media::whereIn('id', $id)->get(); foreach ($rows as $row) { + // 删除原文件 $file = upload_path().'/'.$row['path']; if (is_file($file)) { unlink($file); } + // 删除缩略图 + if ($row['thumb']) { + $thumb = upload_path().'/'.$row['thumb']; + if (is_file($thumb)) { + unlink($thumb); + } + } } Media::whereIn('id', $id)->delete(); - return $this->json('删除成功', true); + + return $this->json('删除成功。', true); } -} +} \ No newline at end of file diff --git a/app/Gdoo/System/views/media/dialog.blade.php b/app/Gdoo/System/views/media/dialog.blade.php index 4d1f889e..5d342ef6 100644 --- a/app/Gdoo/System/views/media/dialog.blade.php +++ b/app/Gdoo/System/views/media/dialog.blade.php @@ -123,7 +123,7 @@ @verbatim -
+
@@ -134,7 +134,7 @@ -->
- 添加文件夹 + 添加文件夹
@@ -146,9 +146,7 @@
  • - + {{item.name}} @@ -231,22 +229,27 @@ var vueApp = Vue.createApp({ download: function(id) { return app.url('system/media/download', {id: id}); }, - folder: function() { + folder: function(id) { let me = this; $.dialog({ - title: '文件夹管理', - url: app.url('system/media/folder'), - dialogClass: 'modal-md', + title: '文件夹', + url: app.url('system/media/folder', {id: id}), + dialogClass: 'modal-sm', buttons: [{ - text: '提交', - 'class': 'btn-success', + text: '保存', + 'class': 'btn-info', click: function() { let modal = this; let form = $('#myfolder').serialize(); axios.post(app.url('system/media/folder'), form) .then(function(response) { - me.getMedia(1, 0); - $(modal).dialog('close'); + let res = response.data; + if (res.status) { + me.getMedia(1, 0); + $(modal).dialog('close'); + } else { + toastrError(res.data); + } }).catch(function(error) { console.log(error); }); @@ -282,11 +285,17 @@ var vueApp = Vue.createApp({ if (btn == true) { axios.post(app.url('system/media/delete'), { id: [id], + folder: folder, }).then(function(response) { - if (folder) { - me.folders.splice(index, 1); + let res = response.data; + if (res.status) { + if (folder) { + me.folders.splice(index, 1); + } else { + me.files.splice(index, 1); + } } else { - me.files.splice(index, 1); + toastrError(res.data); } }).catch(function(error) { console.log(error); @@ -313,8 +322,11 @@ var vueApp = Vue.createApp({ }, }).then(function(response) { let res = response.data; - me.files.unshift(res.data); - console.log(res.data); + if (res.status) { + me.files.unshift(res.data); + } else { + toastrError(res.data); + } }) .catch(function(error) { console.log(error); @@ -323,7 +335,7 @@ var vueApp = Vue.createApp({ } } }); -var vm = vueApp.mount('#vue-app'); +var vm = vueApp.mount('#file-browser'); function saveMedia(params) { var files =[]; @@ -341,12 +353,12 @@ function saveMedia(params) { if (params['multi'] == 0) { let file = files[0]; var name = params['name']; - media.append(''); + media.append(''); } else { var name = params['name'] + '[]'; for (var i = 0; i < files.length; i++) { let file = files[i]; - media.append(''); + media.append(''); } } } diff --git a/app/Gdoo/System/views/media/folder.blade.php b/app/Gdoo/System/views/media/folder.blade.php index 04cecfae..0f2f10fd 100644 --- a/app/Gdoo/System/views/media/folder.blade.php +++ b/app/Gdoo/System/views/media/folder.blade.php @@ -1,8 +1,9 @@
    -
    - +
    +
    - + +
    \ No newline at end of file diff --git a/app/Support/helpers.php b/app/Support/helpers.php index 1c4e2f66..ae697c6f 100644 --- a/app/Support/helpers.php +++ b/app/Support/helpers.php @@ -507,12 +507,10 @@ function authorise($action = null, $asset_name = null) /** * 生成缩略图 */ -function image_thumb($file, $width = 750) +function image_thumb($file, $thumb_file, $width = 750) { - $info = pathinfo($file); - $thumb = $info['dirname'] . '/t' . $width . '_' . $info['basename']; - if (is_file($thumb)) { - return 't' . $width . '_' . $info['basename']; + if (is_file($thumb_file)) { + return true; } if (is_file($file)) { @@ -522,7 +520,6 @@ function image_thumb($file, $width = 750) $type = $temp[2]; if ($srcw > $width) { - // 1=gif 2=jpg 3=png switch ($type) { case 1: $image = imagecreatefromgif($file); @@ -555,21 +552,21 @@ function image_thumb($file, $width = 750) switch ($type) { case 1: - imagegif($dest, $thumb); + imagegif($dest, $thumb_file); break; case 2: - imagejpeg($dest, $thumb, 75); + imagejpeg($dest, $thumb_file, 75); break; case 3: - imagepng($dest, $thumb); + imagepng($dest, $thumb_file); break; } if ($image) { imagedestroy($image); } - return 't' . $width . '_' . $info['basename']; + return true; } - return $info['basename']; + return false; } } diff --git a/database/gdoo-2.3.2-2021-05-14.sql b/database/gdoo-2.3.2-2021-05-14.sql new file mode 100644 index 00000000..50515f9e --- /dev/null +++ b/database/gdoo-2.3.2-2021-05-14.sql @@ -0,0 +1 @@ +ALTER TABLE `media` ADD COLUMN `thumb` varchar(255) DEFAULT NULL COMMENT '缩略图路径' AFTER `path`; \ No newline at end of file