From efaaefaa4557443ea1be9224c5affcf4b0133df9 Mon Sep 17 00:00:00 2001 From: devil_gong Date: Wed, 19 Dec 2018 17:20:14 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=AE=E6=92=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Slide.php | 296 +++++------------ .../view/default/goodscategory/index.html | 8 +- .../admin/view/default/slide/index.html | 71 +++-- .../admin/view/default/slide/save_info.html | 59 +++- application/service/LinkService.php | 2 +- application/service/SlideService.php | 299 ++++++++++++++++++ public/static/admin/default/css/slide.css | 7 +- public/static/common/css/common.css | 8 +- public/static/common/js/common.js | 24 +- 9 files changed, 497 insertions(+), 277 deletions(-) diff --git a/application/admin/controller/Slide.php b/application/admin/controller/Slide.php index b16c2954a..2f454c31b 100755 --- a/application/admin/controller/Slide.php +++ b/application/admin/controller/Slide.php @@ -1,6 +1,8 @@ GetIndexWhere(); + $where = SlideService::SlideListWhere($params); + + // 获取总数 + $total = SlideService::SlideTotal($where); // 分页 - $number = MyC('admin_page_number'); - $page_param = array( + $page_params = array( 'number' => $number, - 'total' => $m->where($where)->count(), - 'where' => $param, - 'url' => url('Admin/Slide/Index'), + 'total' => $total, + 'where' => $params, + 'page' => isset($params['page']) ? intval($params['page']) : 1, + 'url' => url('admin/customview/index'), ); - $page = new \base\Page($page_param); + $page = new \base\Page($page_params); + $this->assign('page_html', $page->GetPageHtml()); // 获取列表 - $list = $this->SetDataHandle($m->where($where)->limit($page->GetPageStarNumber(), $number)->order('is_enable desc, sort asc')->select()); - - // 参数 - $this->assign('param', $param); - - // 分页 - $this->assign('page_html', $page->GetPageHtml()); + $data_params = array( + 'limit_start' => $page->GetPageStarNumber(), + 'limit_number' => $number, + 'where' => $where, + 'field' => '*', + ); + $data = SlideService::SlideList($data_params); + $this->assign('data_list', $data['data']); // 是否启用 $this->assign('common_is_enable_list', lang('common_is_enable_list')); - // 数据列表 - $this->assign('list', $list); - $this->display('Index'); - } + // 所属平台 + $this->assign('common_platform_type', lang('common_platform_type')); - /** - * [SetDataHandle 数据处理] - * @author Devil - * @blog http://gong.gg/ - * @version 0.0.1 - * @datetime 2016-12-29T21:27:15+0800 - * @param [array] $data [轮播图片数据] - * @return [array] [处理好的数据] - */ - private function SetDataHandle($data) - { - if(!empty($data)) - { - $common_is_enable_tips = lang('common_is_enable_tips'); - foreach($data as &$v) - { - // 是否启用 - $v['is_enable_text'] = $common_is_enable_tips[$v['is_enable']]['name']; + // 事件类型 + $this->assign('common_app_event_type', lang('common_app_event_type')); - // 图片地址 - $v['images_url'] = empty($v['images_url']) ? '' : config('IMAGE_HOST').$v['images_url']; - - // 添加时间 - $v['add_time_text'] = date('Y-m-d H:i:s', $v['add_time']); - - // 更新时间 - $v['upd_time_text'] = date('Y-m-d H:i:s', $v['upd_time']); - } - } - return $data; - } - - /** - * [GetIndexWhere 列表条件] - * @author Devil - * @blog http://gong.gg/ - * @version 0.0.1 - * @datetime 2016-12-10T22:16:29+0800 - */ - private function GetIndexWhere() - { - $where = array(); - - // 模糊 - if(!empty($_REQUEST['keyword'])) - { - $where['name'] = array('like', '%'.I('keyword').'%'); - } - - // 是否更多条件 - if(I('is_more', 0) == 1) - { - if(I('is_enable', -1) > -1) - { - $where['is_enable'] = intval(I('is_enable', 0)); - } - - // 表达式 - if(!empty($_REQUEST['time_start'])) - { - $where['add_time'][] = array('gt', strtotime(I('time_start'))); - } - if(!empty($_REQUEST['time_end'])) - { - $where['add_time'][] = array('lt', strtotime(I('time_end'))); - } - } - return $where; + // 参数 + $this->assign('params', $params); + return $this->fetch(); } /** @@ -153,14 +96,36 @@ class Slide extends Common */ public function SaveInfo() { - // 轮播图片信息 - $data = empty($_REQUEST['id']) ? array() : db('Slide')->find(I('id')); - $this->assign('data', $data); - // 参数 - $this->assign('param', array_merge($_POST, $_GET)); + $params = input(); - $this->display('SaveInfo'); + // 数据 + if(!empty($params['id'])) + { + // 获取列表 + $data_params = array( + 'limit_start' => 0, + 'limit_number' => 1, + 'where' => ['id'=>intval($params['id'])], + 'field' => '*', + ); + $data = SlideService::SlideList($data_params); + $this->assign('data', empty($data['data'][0]) ? [] : $data['data'][0]); + } + + // 是否启用 + $this->assign('common_is_enable_list', lang('common_is_enable_list')); + + // 所属平台 + $this->assign('common_platform_type', lang('common_platform_type')); + + // 事件类型 + $this->assign('common_app_event_type', lang('common_app_event_type')); + + // 编辑器文件存放地址 + $this->assign('editor_path_type', 'slide'); + + return $this->fetch(); } /** @@ -175,93 +140,13 @@ class Slide extends Common // 是否ajax请求 if(!IS_AJAX) { - $this->error('非法访问'); + return $this->error('非法访问'); } - // 图片 - $this->FileSave('images_url', 'file_images_url', 'slide'); - - // 添加 - if(empty($_POST['id'])) - { - $this->Add(); - - // 编辑 - } else { - $this->Edit(); - } - } - - /** - * [Add 轮播图片添加] - * @author Devil - * @blog http://gong.gg/ - * @version 0.0.1 - * @datetime 2016-12-18T16:20:59+0800 - */ - private function Add() - { - // 轮播图片模型 - $m = D('Slide'); - - // 数据自动校验 - if($m->create($_POST, 1)) - { - // 额外数据处理 - $m->name = I('name'); - $m->jump_url = I('jump_url'); - $m->images_url = I('images_url'); - $m->is_enable = intval(I('is_enable', 0)); - $m->bg_color = I('bg_color'); - $m->sort = intval(I('sort')); - $m->add_time = time(); - - // 数据添加 - if($m->add()) - { - $this->ajaxReturn('新增成功'); - } else { - $this->ajaxReturn('新增失败', -100); - } - } else { - $this->ajaxReturn($m->getError(), -1); - } - } - - /** - * [Edit 轮播图片编辑] - * @author Devil - * @blog http://gong.gg/ - * @version 0.0.1 - * @datetime 2016-12-17T22:13:40+0800 - */ - private function Edit() - { - // 轮播图片模型 - $m = D('Slide'); - - // 数据自动校验 - if($m->create($_POST, 2)) - { - // 额外数据处理 - $m->name = I('name'); - $m->jump_url = I('jump_url'); - $m->images_url = I('images_url'); - $m->is_enable = intval(I('is_enable', 0)); - $m->bg_color = I('bg_color'); - $m->sort = intval(I('sort')); - $m->upd_time = time(); - - // 更新数据库 - if($m->where(array('id'=>I('id')))->save()) - { - $this->ajaxReturn('编辑成功'); - } else { - $this->ajaxReturn('编辑失败或数据未改变', -100); - } - } else { - $this->ajaxReturn($m->getError(), -1); - } + // 开始处理 + $params = input(); + $ret = SlideService::SlideSave($params); + return json($ret); } /** @@ -276,39 +161,13 @@ class Slide extends Common // 是否ajax请求 if(!IS_AJAX) { - $this->error('非法访问'); + return $this->error('非法访问'); } - // 参数处理 - $id = I('id'); - - // 删除数据 - if(!empty($id)) - { - // 模型 - $m = db('Slide'); - - // 是否存在 - $data = $m->find($id); - if(empty($data)) - { - $this->ajaxReturn('资源不存在或已被删除', -2); - } - if($data['is_enable'] == 1) - { - $this->ajaxReturn(lang('common_already_is_enable_error'), -3); - } - - // 删除 - if($m->where(array('id'=>$id))->delete() !== false) - { - $this->ajaxReturn('删除成功'); - } else { - $this->ajaxReturn('删除失败或资源不存在', -100); - } - } else { - $this->ajaxReturn('参数错误', -1); - } + // 开始处理 + $params = input(); + $ret = SlideService::SlideDelete($params); + return json($ret); } /** @@ -320,19 +179,16 @@ class Slide extends Common */ public function StatusUpdate() { - // 参数 - if(empty($_POST['id']) || !isset($_POST['state'])) + // 是否ajax请求 + if(!IS_AJAX) { - $this->ajaxReturn('参数错误', -1); + return $this->error('非法访问'); } - // 数据更新 - if(db('Slide')->where(array('id'=>I('id')))->save(array('is_enable'=>I('state')))) - { - $this->ajaxReturn('编辑成功'); - } else { - $this->ajaxReturn('编辑失败或数据未改变', -100); - } + // 开始处理 + $params = input(); + $ret = SlideService::SlideStatusUpdate($params); + return json($ret); } } ?> \ No newline at end of file diff --git a/application/admin/view/default/goodscategory/index.html b/application/admin/view/default/goodscategory/index.html index 7c238faf7..6891c644b 100755 --- a/application/admin/view/default/goodscategory/index.html +++ b/application/admin/view/default/goodscategory/index.html @@ -24,7 +24,8 @@
+上传图片
@@ -34,7 +35,8 @@
+上传图片
@@ -86,7 +88,7 @@ -
+

处理中...

diff --git a/application/admin/view/default/slide/index.html b/application/admin/view/default/slide/index.html index 715d8edb5..2aa55c4e0 100755 --- a/application/admin/view/default/slide/index.html +++ b/application/admin/view/default/slide/index.html @@ -4,27 +4,39 @@
-
+
- value="{{$param.keyword}}"{{/if}} /> + -
+
-
+ + +
+ ~ - +
@@ -32,28 +44,30 @@ -
新增 + - + - + - {{if !empty($list)}} - - + {{if !empty($data_list)}} + {{foreach $data_list as $v}} + + - - - + + {{/foreach}} @@ -86,8 +103,8 @@ - {{if !empty($list)}} - {{$page_html}} + {{if !empty($data_list)}} + {{$page_html|raw}} {{/if}} diff --git a/application/admin/view/default/slide/save_info.html b/application/admin/view/default/slide/save_info.html index 8f08e0782..2b3585b4e 100755 --- a/application/admin/view/default/slide/save_info.html +++ b/application/admin/view/default/slide/save_info.html @@ -4,41 +4,66 @@
- + - {{if empty($data['id'])}} 轮播添加 {{else /}} 轮播编辑 {{/if}} - 返回 + 返回
- value="{{$data.name}}"{{/if}} required /> + +
+ +
+ + +
+ +
+ +
- - value="{{$data.jump_url}}"{{/if}} /> +
+ +

WEB页面
   1.以http或https开头
   2.并在小程序后台加入白名单

内部页面(小程序/APP内部地址)
   1.小程序或APP内部地址
   2.小程序以/pages开始
   3.例如:/pages/user/user
   4.支持带参数 ?x=xx

跳转原生地图查看指定位置
   1.以 | 竖线分割,分别顺序 名称|地址|经度|纬度
   2.例如:ShopXO|上海浦东新区张江高科技园区XXX号|121.626444|31.20843

+
+ +
- - value="{{$data.images_url}}"{{/if}}" data-validation-message="请选择需要上传的图片" readonly="readonly" value="{{$data.images_url}}"{{/if}} required /> - -
+
    +
  • + + +
  • +
+
+上传图片
- {{$data.bg_color}}{{/if}}" /> -
@@ -49,10 +74,10 @@
- +
- value="{{$data.id}}"{{/if}} /> +
diff --git a/application/service/LinkService.php b/application/service/LinkService.php index 0932c51b2..fd4d0e5cc 100644 --- a/application/service/LinkService.php +++ b/application/service/LinkService.php @@ -55,7 +55,7 @@ class LinkService [ 'checked_type' => 'length', 'key_name' => 'sort', - 'checked_data' => '4', + 'checked_data' => '3', 'error_msg' => '顺序 0~255 之间的数值', ], [ diff --git a/application/service/SlideService.php b/application/service/SlideService.php index c4f1cd0ed..9738932e9 100644 --- a/application/service/SlideService.php +++ b/application/service/SlideService.php @@ -10,6 +10,305 @@ namespace app\service; */ class SlideService { + /** + * 数据列表 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2018-08-29 + * @desc description + * @param [array] $params [输入参数] + */ + public static function SlideList($params = []) + { + $where = empty($params['where']) ? [] : $params['where']; + $field = empty($params['field']) ? '*' : $params['field']; + $m = isset($params['m']) ? intval($params['m']) : 0; + $n = isset($params['n']) ? intval($params['n']) : 10; + $data = db('Slide')->field($field)->where($where)->order('sort asc')->limit($m, $n)->select(); + if(!empty($data)) + { + $common_platform_type = lang('common_platform_type'); + $common_is_enable_tips = lang('common_is_enable_tips'); + $common_app_event_type = lang('common_app_event_type'); + $image_host = config('IMAGE_HOST'); + foreach($data as &$v) + { + // 是否启用 + if(isset($v['is_enable'])) + { + $v['is_enable_text'] = $common_is_enable_tips[$v['is_enable']]['name']; + } + + // 平台类型 + if(isset($v['platform'])) + { + $v['platform_text'] = $common_platform_type[$v['platform']]['name']; + } + + // 事件类型 + if(isset($v['event_type']) && $v['event_type'] != -1) + { + $v['event_type_text'] = $common_app_event_type[$v['event_type']]['name']; + } + + // 图片地址 + if(isset($v['images_url'])) + { + $v['images_url'] = empty($v['images_url']) ? '' : $image_host.$v['images_url']; + } + + // 时间 + if(isset($v['add_time'])) + { + $v['add_time_time'] = date('Y-m-d H:i:s', $v['add_time']); + $v['add_time_date'] = date('Y-m-d', $v['add_time']); + } + if(isset($v['upd_time'])) + { + $v['upd_time_time'] = date('Y-m-d H:i:s', $v['upd_time']); + $v['upd_time_date'] = date('Y-m-d', $v['upd_time']); + } + } + } + return DataReturn('处理成功', 0, $data); + } + + /** + * 总数 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2018-09-29 + * @desc description + * @param [array] $where [条件] + */ + public static function SlideTotal($where = []) + { + return (int) db('Slide')->where($where)->count(); + } + + /** + * 列表条件 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2018-09-29 + * @desc description + * @param [array] $params [输入参数] + */ + public static function SlideListWhere($params = []) + { + $where = []; + + if(!empty($params['keywords'])) + { + $where[] = ['name', 'like', '%'.$params['keywords'].'%']; + } + + // 是否更多条件 + if(isset($params['is_more']) && $params['is_more'] == 1) + { + // 等值 + if(isset($params['is_enable']) && $params['is_enable'] > -1) + { + $where[] = ['is_enable', '=', intval($params['is_enable'])]; + } + if(isset($params['event_type']) && $params['event_type'] > -1) + { + $where[] = ['event_type', '=', intval($params['event_type'])]; + } + if(!empty($params['platform'])) + { + $where[] = ['platform', '=', $params['platform']]; + } + + if(!empty($params['time_start'])) + { + $where[] = ['add_time', '>', strtotime($params['time_start'])]; + } + if(!empty($params['time_end'])) + { + $where[] = ['add_time', '<', strtotime($params['time_end'])]; + } + } + + return $where; + } + + /** + * 数据保存 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2018-12-19 + * @desc description + * @param [array] $params [输入参数] + */ + public static function SlideSave($params = []) + { + // 是否启用值处理 + if(!isset($params['is_enable'])) + { + $params['is_enable'] = 0; + } + + // 请求类型 + $p = [ + [ + 'checked_type' => 'length', + 'key_name' => 'name', + 'checked_data' => '2,60', + 'error_msg' => '名称长度 2~60 个字符', + ], + [ + 'checked_type' => 'in', + 'key_name' => 'platform', + 'checked_data' => array_column(lang('common_platform_type'), 'value'), + 'error_msg' => '平台类型有误', + ], + [ + 'checked_type' => 'in', + 'key_name' => 'event_type', + 'checked_data' => array_column(lang('common_app_event_type'), 'value'), + 'error_msg' => '事件值类型有误', + ], + [ + 'checked_type' => 'length', + 'key_name' => 'event_value', + 'checked_data' => '255', + 'error_msg' => '事件值最多 255 个字符', + ], + [ + 'checked_type' => 'empty', + 'key_name' => 'images_url', + 'checked_data' => '255', + 'error_msg' => '请上传图片', + ], + [ + 'checked_type' => 'length', + 'key_name' => 'sort', + 'checked_data' => '3', + 'error_msg' => '顺序 0~255 之间的数值', + ], + [ + 'checked_type' => 'in', + 'key_name' => 'is_enable', + 'checked_data' => [0,1], + 'error_msg' => '是否显示范围值有误', + ], + ]; + $ret = params_checked($params, $p); + if($ret !== true) + { + return DataReturn($ret, -1); + } + + // 附件 + $data_fields = ['images_url']; + $attachment = ResourcesService::AttachmentParams($params, $data_fields); + + // 数据 + $data = [ + 'name' => $params['name'], + 'platform' => $params['platform'], + 'event_type' => intval($params['event_type']), + 'event_value' => $params['event_value'], + 'images_url' => $attachment['data']['images_url'], + 'bg_color' => isset($params['bg_color']) ? $params['bg_color'] : '', + 'sort' => intval($params['sort']), + 'is_enable' => intval($params['is_enable']), + ]; + + if(empty($params['id'])) + { + $data['add_time'] = time(); + if(db('Slide')->insertGetId($data) > 0) + { + return DataReturn('添加成功', 0); + } + return DataReturn('添加失败', -100); + } else { + $data['upd_time'] = time(); + if(db('Slide')->where(['id'=>intval($params['id'])])->update($data)) + { + return DataReturn('编辑成功', 0); + } + return DataReturn('编辑失败', -100); + } + } + + /** + * 删除 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2018-12-18 + * @desc description + * @param [array] $params [输入参数] + */ + public static function SlideDelete($params = []) + { + // 请求参数 + $p = [ + [ + 'checked_type' => 'empty', + 'key_name' => 'id', + 'error_msg' => '操作id有误', + ], + ]; + $ret = params_checked($params, $p); + if($ret !== true) + { + return DataReturn($ret, -1); + } + + // 删除操作 + if(db('Slide')->where(['id'=>$params['id']])->delete()) + { + return DataReturn('删除成功'); + } + + return DataReturn('删除失败或资源不存在', -100); + } + + /** + * 状态更新 + * @author Devil + * @blog http://gong.gg/ + * @version 0.0.1 + * @datetime 2016-12-06T21:31:53+0800 + * @param [array] $params [输入参数] + */ + public static function SlideStatusUpdate($params = []) + { + // 请求参数 + $p = [ + [ + 'checked_type' => 'empty', + 'key_name' => 'id', + 'error_msg' => '操作id有误', + ], + [ + 'checked_type' => 'in', + 'key_name' => 'state', + 'checked_data' => [0,1], + 'error_msg' => '状态有误', + ], + ]; + $ret = params_checked($params, $p); + if($ret !== true) + { + return DataReturn($ret, -1); + } + + // 数据更新 + if(db('Slide')->where(['id'=>intval($params['id'])])->update(['is_enable'=>intval($params['state'])])) + { + return DataReturn('编辑成功'); + } + return DataReturn('编辑失败或数据未改变', -100); + } } ?> \ No newline at end of file diff --git a/public/static/admin/default/css/slide.css b/public/static/admin/default/css/slide.css index 150222433..4bfab80e4 100755 --- a/public/static/admin/default/css/slide.css +++ b/public/static/admin/default/css/slide.css @@ -15,4 +15,9 @@ } @media only screen and (max-width: 321px) { .view-operation button { margin: 2px 0px; } -} \ No newline at end of file +} + +/** + * 覆盖插件样式 + */ +ul.plug-file-upload-view li { width: 300px; height: 130px; } \ No newline at end of file diff --git a/public/static/common/css/common.css b/public/static/common/css/common.css index 393b701d9..c1d7555b5 100755 --- a/public/static/common/css/common.css +++ b/public/static/common/css/common.css @@ -171,9 +171,13 @@ ul.plug-file-upload-view li { border: 1px dashed #c2c2c2; position: relative; } +ul.plug-file-upload-view li input { + position: absolute; + margin-left: -1000000px; +} ul.plug-file-upload-view li img, ul.plug-file-upload-view-video li video { - width: 100%; - height: 100%; + max-width: 100%; + max-height: 100%; } ul.plug-file-upload-view li i { font-style: normal; diff --git a/public/static/common/js/common.js b/public/static/common/js/common.js index 0b9d60f71..06b13dc05 100755 --- a/public/static/common/js/common.js +++ b/public/static/common/js/common.js @@ -1504,6 +1504,7 @@ $(function() { var $tag = $($('body').attr('view-tag')); var max_number = $tag.data('max-number') || 0; + var is_delete = ($tag.data('delete') == undefined) ? 1 : $tag.data('delete'); // 只限制一条 if(max_number <= 1) @@ -1521,9 +1522,12 @@ $(function() } var html = '
  • '; - html += ''; + html += ''; html += ''; - html += '×'; + if(is_delete == 1) + { + html += '×'; + } html += '
  • '; $tag.append(html); } @@ -1537,6 +1541,7 @@ $(function() { var $tag = $($('body').attr('view-tag')); var max_number = $tag.data('max-number') || 0; + var is_delete = ($tag.data('delete') == undefined) ? 1 : $tag.data('delete'); // 只限制一条 if(max_number <= 1) @@ -1555,9 +1560,12 @@ $(function() var $tag = $($('body').attr('view-tag')); var html = '
  • '; - html += ''; + html += ''; html += ''; - html += '×'; + if(is_delete == 1) + { + html += '×'; + } html += '
  • '; $tag.append(html); } @@ -1578,6 +1586,7 @@ $(function() { var $tag = $($('body').attr('view-tag')); var max_number = $tag.data('max-number') || 0; + var is_delete = ($tag.data('delete') == undefined) ? 1 : $tag.data('delete'); // 只限制一条 if(max_number <= 1) @@ -1596,9 +1605,12 @@ $(function() var $tag = $($('body').attr('view-tag')); var html = '
  • '; - html += ''; + html += ''; html += ''+result[i].src+''; - html += '×'; + if(is_delete == 1) + { + html += '×'; + } html += '
  • '; $tag.append(html); }
    名称所属平台 轮播图片跳转地址事件值 是否启用 创建时间 操作
    {{$v.name}}{{$v.platform_text}} {{if !empty($v['images_url'])}} @@ -63,18 +77,21 @@ 暂无图片 {{/if}} {{$v.jump_url}} - {{$v.event_type_text}} + {{/if}} {{$v.add_time_text}} + + {{$v.add_time_time}} - + - {{if $v['is_enable'] eq 0)}} - - {{/if}} +