提交 3159115c 编写于 作者: G gongfuxiang

插件管理新增分类

上级 fc5d99a9
......@@ -17,6 +17,7 @@ use app\service\PluginsAdminService;
use app\service\ResourcesService;
use app\service\PluginsService;
use app\service\PluginsUpgradeService;
use app\service\PluginsCategoryService;
/**
* 应用管理
......@@ -74,6 +75,10 @@ class Pluginsadmin extends Base
// 插件更新信息
$upgrade = PluginsService::PluginsUpgradeInfo($ret['data']);
$assign['upgrade_info'] = $upgrade['data'];
// 插件分类
$categosy = PluginsCategoryService::PluginsCategoryList();
$assign['plugins_categosy_list'] = $categosy['data'];
}
// 数据赋值
......@@ -239,16 +244,16 @@ class Pluginsadmin extends Base
}
/**
* 排序保存
* 设置保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2021-01-05
* @desc description
*/
public function SortSave()
public function SetupSave()
{
return ApiService::ApiDataReturn(PluginsAdminService::SortSave($this->data_request));
return ApiService::ApiDataReturn(PluginsAdminService::SetupSave($this->data_request));
}
/**
......
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2099 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( https://opensource.org/licenses/mit-license.php )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\admin\controller;
use app\admin\controller\Base;
use app\service\ApiService;
use app\service\PluginsCategoryService;
/**
* 应用分类管理
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class PluginsCategory extends Base
{
/**
* 列表
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-06T21:31:53+0800
*/
public function Index()
{
return MyView();
}
/**
* 获取节点子列表
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-25T15:19:45+0800
*/
public function GetNodeSon()
{
return ApiService::ApiDataReturn(PluginsCategoryService::PluginsCategoryNodeSon($this->data_request));
}
/**
* 保存
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-25T22:36:12+0800
*/
public function Save()
{
return ApiService::ApiDataReturn(PluginsCategoryService::PluginsCategorySave($this->data_request));
}
/**
* 删除
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-25T22:36:12+0800
*/
public function Delete()
{
$params = $this->data_request;
$params['admin'] = $this->admin;
return ApiService::ApiDataReturn(PluginsCategoryService::PluginsCategoryDelete($params));
}
}
?>
\ No newline at end of file
......@@ -1024,7 +1024,7 @@ return [
'base_search_input_placeholder' => '請輸入名稱/描述',
'base_top_tips_one' => '清單排序方式[自定義排序->最早安裝]',
'base_top_tips_two' => '可點擊拖動圖標按鈕調整挿件調用和展示順序',
'base_open_sort_title' => '開啟排序',
'base_open_setup_title' => '開啟設定',
'data_list_author_title' => '作者',
'data_list_author_url_title' => '主頁',
'data_list_version_title' => '版本',
......@@ -1040,6 +1040,13 @@ return [
'cancel_delete_plugins_button_name' => '再考慮一下',
'more_plugins_store_to_text' => '去應用商店挑選更多挿件豐富網站>>',
'no_data_store_to_text' => '到應用商店挑選挿件豐富網站>>',
'plugins_category_title' => '應用分類',
'plugins_category_admin_title' => '分類管理',
],
// 插件分类
'pluginscategory' => [
'base_nav_title' => '挿件分類',
],
// 安装页面
......
......@@ -1039,7 +1039,7 @@ return [
'base_search_input_placeholder' => 'Please enter a name/description',
'base_top_tips_one' => 'List sorting method [custom sorting ->earliest installation]',
'base_top_tips_two' => 'Click and drag icon button to adjust plug-in call and display order',
'base_open_sort_title' => 'Enable sorting',
'base_open_setup_title' => 'Enable Settings',
'data_list_author_title' => 'Author',
'data_list_author_url_title' => 'HomePage',
'data_list_version_title' => 'Version',
......@@ -1055,6 +1055,13 @@ return [
'cancel_delete_plugins_button_name' => 'Think again',
'more_plugins_store_to_text' => 'Go to the app store to select more plugins to enrich the site >>',
'no_data_store_to_text' => 'Go to the app store to select plug-in rich sites >>',
'plugins_category_title' => 'Application Category',
'plugins_category_admin_title' => 'Category Management',
],
// 插件分类
'pluginscategory' => [
'base_nav_title' => 'PluginsCategory',
],
// 安装页面
......
......@@ -1024,7 +1024,7 @@ return [
'base_search_input_placeholder' => 'Introduzca el nombre / descripción',
'base_top_tips_one' => 'Método de clasificación de lista [clasificación personalizada - > instalación más temprana]',
'base_top_tips_two' => 'Se puede hacer clic en el botón arrastrar icono para ajustar el orden de llamada y visualización del plug - IN.',
'base_open_sort_title' => 'Abrir clasificación',
'base_open_setup_title' => 'Activar configuración',
'data_list_author_title' => 'Autor',
'data_list_author_url_title' => 'Página principal',
'data_list_version_title' => 'Versión',
......@@ -1040,6 +1040,13 @@ return [
'cancel_delete_plugins_button_name' => 'Piénsalo de nuevo.',
'more_plugins_store_to_text' => 'Ir a la tienda de aplicaciones para seleccionar más plug - ins para enriquecer el sitio > > 1',
'no_data_store_to_text' => 'Ir a la tienda de aplicaciones para seleccionar los sitios ricos en plug - ins > >',
'plugins_category_title' => 'Clasificación de aplicaciones',
'plugins_category_admin_title' => 'Gestión clasificada',
],
// 插件分类
'pluginscategory' => [
'base_nav_title' => 'Clasificación plugins',
],
// 安装页面
......
......@@ -1024,7 +1024,7 @@ return [
'base_search_input_placeholder' => '请输入名称/描述',
'base_top_tips_one' => '列表排序方式[ 自定义排序 -> 最早安装 ]',
'base_top_tips_two' => '可点击拖动图标按钮调整插件调用和展示顺序',
'base_open_sort_title' => '开启排序',
'base_open_setup_title' => '开启设置',
'data_list_author_title' => '作者',
'data_list_author_url_title' => '主页',
'data_list_version_title' => '版本',
......@@ -1040,6 +1040,13 @@ return [
'cancel_delete_plugins_button_name' => '再考虑一下',
'more_plugins_store_to_text' => '去应用商店挑选更多插件丰富站点 >>',
'no_data_store_to_text' => '到应用商店挑选插件丰富站点 >>',
'plugins_category_title' => '应用分类',
'plugins_category_admin_title' => '分类管理',
],
// 插件分类
'pluginscategory' => [
'base_nav_title' => '插件分类',
],
// 安装页面
......
......@@ -29,9 +29,9 @@
<p>{{:MyLang('pluginsadmin.base_top_tips_one')}}</p>
<p>
<span>{{:MyLang('pluginsadmin.base_top_tips_two')}}</span>
<button type="button" class="am-btn am-btn-success am-radius am-btn-xs am-margin-left-xs am-icon-sort-numeric-asc submit-move-sort-open"> {{:MyLang('pluginsadmin.base_open_sort_title')}}</button>
<button type="button" class="am-btn am-btn-secondary am-radius am-btn-xs am-margin-left-xs am-icon-check submit-move-sort-save am-hide"> {{:MyLang('save_title')}}</button>
<button type="button" class="am-btn am-btn-danger am-radius am-btn-xs am-margin-left-xs am-icon-close submit-move-sort-cancel am-hide"> {{:MyLang('cancel_title')}}</button>
<button type="button" class="am-btn am-btn-success am-radius am-btn-xs am-margin-left-xs am-icon-cog submit-move-setup-open"> {{:MyLang('pluginsadmin.base_open_setup_title')}}</button>
<button type="button" class="am-btn am-btn-secondary am-radius am-btn-xs am-margin-left-xs am-icon-check submit-move-setup-save am-hide"> {{:MyLang('save_title')}}</button>
<button type="button" class="am-btn am-btn-danger am-radius am-btn-xs am-margin-left-xs am-icon-close submit-move-setup-cancel am-hide"> {{:MyLang('cancel_title')}}</button>
</p>
{{if empty($site_store_info) or empty($site_store_info['user'])}}
<p>
......@@ -41,17 +41,24 @@
{{/if}}
</div>
<!-- 搜索无数据展示 -->
<div class="not-data-tips none">
{{include file="public/not_data" /}}
</div>
{{if !empty($data_list['db_data'])}}
<!-- 插件分类 -->
<div class="plugins-category-nav am-padding-vertical-xs">
<strong>{{:MyLang('pluginsadmin.plugins_category_title')}}</strong>
<button type="button" class="am-btn am-btn-secondary am-radius am-margin-left-sm">{{:MyLang('all_title')}}</button>
{{if !empty($plugins_categosy_list)}}
{{foreach $plugins_categosy_list as $cv}}
<button type="button" class="am-btn am-btn-default am-radius am-margin-left-sm" data-value="{{$cv.id}}">{{$cv.name}}</button>
{{/foreach}}
{{/if}}
<a href="javascript:;" class="am-fr am-margin-top-xs am-icon-edit submit-popup" data-url="{{:MyUrl('admin/pluginscategory/index')}}" data-full="1" data-full-max="1" data-class="plugins-category-save-popup"> {{:MyLang('pluginsadmin.plugins_category_admin_title')}}</a>
</div>
<!-- 已安装 -->
<ul class="already-install am-nbfc" data-sort-save-url="{{:MyUrl('admin/pluginsadmin/sortsave')}}">
<ul class="already-install am-nbfc" data-setup-save-url="{{:MyUrl('admin/pluginsadmin/setupsave')}}">
{{foreach $data_list['db_data'] as $v}}
{{if isset($v['is_install']) and $v['is_install'] eq 1}}
<li data-id="{{$v.id}}" data-plugins="{{$v.plugins}}">
<li class="plugins-category-{{$v.plugins_category_id}}" data-id="{{$v.id}}" data-plugins="{{$v.plugins}}">
<div class="item {{if $v['is_enable'] eq 0}}am-active{{/if}}" id="data-list-{{$v.plugins}}">
<img src="{{$v.logo}}" class="icon" />
<div class="base">
......@@ -85,11 +92,26 @@
<button class="am-btn am-btn-danger am-btn-xs am-radius am-icon-refresh package-upgrade-event" title="{{:MyLang('update_title')}}" data-type="plugins" data-name="{{$v.name}}" data-value="{{$v.plugins}}" data-json="{{:urlencode(json_encode($upgrade_info[$v['plugins']]))}}"></button>
{{/if}}
</div>
{{if !empty($plugins_categosy_list)}}
<div class="plugins-category-item am-hide">
<select class="am-radius chosen-select" data-placeholder="{{:MyLang('please_select_tips')}}">
<option value="0">{{:MyLang('please_select_tips')}}</option>
{{foreach $plugins_categosy_list as $cv}}
<option value="{{$cv.id}}" {{if isset($v['plugins_category_id']) and $cv['id'] eq $v['plugins_category_id']}}selected{{/if}}>{{$cv.name}}</option>
{{/foreach}}
</select>
</div>
{{/if}}
</div>
</li>
{{/if}}
{{/foreach}}
</ul>
<!-- 搜索无数据展示 -->
<div class="not-data-tips am-hide">
{{include file="public/not_data" /}}
</div>
{{/if}}
{{if !empty($data_list['dir_data'])}}
......@@ -102,7 +124,7 @@
</strong>
<hr data-am-widget="divider" class="am-divider am-divider-dashed am-margin-top-0" />
</div>
<ul class="am-nbfc" data-sort-save-url="{{:MyUrl('admin/pluginsadmin/sortsave')}}">
<ul class="am-nbfc" data-setup-save-url="{{:MyUrl('admin/pluginsadmin/sortsave')}}">
{{foreach $data_list['dir_data'] as $v}}
{{if !isset($v['is_install']) or $v['is_install'] eq 0}}
<li data-id="{{$v.id}}" data-plugins="{{$v.plugins}}">
......
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<!-- operation start -->
<div class="am-g">
<button class="am-btn am-btn-secondary am-radius am-btn-xs am-icon-plus tree-submit-add" data-am-modal="{target: '#data-save-win'}"> {{:MyLang('add_title')}}</button>
</div>
<!-- operation end -->
<!-- save win start -->
<div class="am-popup am-radius" id="data-save-win">
<div class="am-popup-inner">
<div class="am-popup-hd">
<h4 class="am-popup-title" data-add-title="{{:MyLang('pluginscategory.base_nav_title')}}{{:MyLang('add_title')}}" data-edit-title="{{:MyLang('pluginscategory.base_nav_title')}}{{:MyLang('edit_title')}}">{{:MyLang('pluginscategory.base_nav_title')}}{{:MyLang('add_title')}}</h4>
<span data-am-modal-close class="am-close">&times;</span>
</div>
<div class="am-popup-bd">
<!-- form start -->
<form class="am-form form-validation am-form-popup-fixed" action="{{:MyUrl('admin/pluginscategory/save')}}" method="POST" request-type="ajax-fun" request-value="TreeFormSaveBack">
<div class="am-form-group">
<label>{{:MyLang('common_service.pluginscategory.form_item_name')}}<span class="am-form-group-label-tips-must">*</span></label>
<input type="text" placeholder="{{:MyLang('common_service.pluginscategory.form_item_name_message')}}" name="name" minlength="1" maxlength="60" data-validation-message="{{:MyLang('common_service.pluginscategory.form_item_name_message')}}" class="am-radius" required />
</div>
{{include file="lib/sort" /}}
{{include file="lib/is_enable" /}}
<div class="am-form-popup-submit">
<input type="hidden" name="id" />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'{{:MyLang('processing_tips')}}'}">{{:MyLang('save_title')}}</button>
</div>
</form>
<!-- form end -->
</div>
</div>
</div>
<!-- save win end -->
<!-- list start -->
<div id="tree" class="am-margin-top-sm" data-node-url="{{:MyUrl('admin/pluginscategory/getnodeson')}}" data-del-url="{{:MyUrl('admin/pluginscategory/delete')}}" data-popup-tag="#data-save-win">
{{include file="public/loading" /}}
</div>
<!-- list end -->
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->
<script type="text/javascript">
// 初始化
Tree(0, $('#tree').data('node-url'), 0);
// 回调处理
function TreeFormSaveBack(e)
{
TreeFormSaveBackHandle(e);
}
</script>
\ No newline at end of file
......@@ -1899,6 +1899,12 @@ return [
'pay_request_log_insert_fail_tips' => '支付請求日誌添加失敗',
'pay_request_log_update_fail_tips' => '支付請求日誌更新失敗',
],
// 插件分类
'pluginscategory' => [
// 表单
'form_item_name' => '名稱',
'form_item_name_message' => '名稱長度1~60個字元',
],
// 插件管理
'pluginsadmin' => [
// 表单
......@@ -1966,8 +1972,8 @@ return [
'plugins_new_config_error_tips' => '新設定檔有誤',
'plugins_new_config_update_fail_tips' => '新應用設定檔更新失敗',
'app_update_no_exist_tips' => '應用不存在[{:plugins}]、請先安裝',
'sort_save_data_empty_tips' => '沒有可保存的挿件數據',
'sort_save_data_error_tips' => '挿件排序數據有誤',
'setup_save_data_empty_tips' => '沒有可保存的挿件數據',
'setup_save_data_error_tips' => '挿件設定數據有誤',
],
// 插件服务
'plugins' => [
......
......@@ -1962,8 +1962,14 @@ return [
'plugins_new_config_error_tips' => 'The new configuration file is incorrect',
'plugins_new_config_update_fail_tips' => 'Failed to update the new app profile',
'app_update_no_exist_tips' => 'The application does not exist [{:plugins}]. Please install it first',
'sort_save_data_empty_tips' => 'No plug-in data to save',
'sort_save_data_error_tips' => 'The plug-in sorting data is incorrect',
'setup_save_data_empty_tips' => 'No plug-in data to save',
'setup_save_data_error_tips' => 'Incorrect plugin setting data',
],
// 插件分类
'pluginscategory' => [
// 表单
'form_item_name' => 'Name',
'form_item_name_message' => 'The name is 1~60 characters long',
],
// 插件服务
'plugins' => [
......
......@@ -1966,8 +1966,14 @@ return [
'plugins_new_config_error_tips' => 'El nuevo perfil es incorrecto',
'plugins_new_config_update_fail_tips' => 'Falló la actualización del perfil de la nueva aplicación',
'app_update_no_exist_tips' => 'La aplicación no existe ({:plugins}), por favor instale primero',
'sort_save_data_empty_tips' => 'No hay datos de plug - in guardables',
'sort_save_data_error_tips' => 'Los datos de clasificación del plug - in son incorrectos',
'setup_save_data_empty_tips' => 'No hay datos de plug - in guardables',
'setup_save_data_error_tips' => 'Los datos de configuración del plug - in son incorrectos',
],
// 插件分类
'pluginscategory' => [
// 表单
'form_item_name' => 'Nombre',
'form_item_name_message' => 'La longitud del nombre es de 1 a 60 caracteres.',
],
// 插件服务
'plugins' => [
......
......@@ -1966,8 +1966,14 @@ return [
'plugins_new_config_error_tips' => '新配置文件有误',
'plugins_new_config_update_fail_tips' => '新应用配置文件更新失败',
'app_update_no_exist_tips' => '应用不存在[{:plugins}]、请先安装',
'sort_save_data_empty_tips' => '没有可保存的插件数据',
'sort_save_data_error_tips' => '插件排序数据有误',
'setup_save_data_empty_tips' => '没有可保存的插件数据',
'setup_save_data_error_tips' => '插件设置数据有误',
],
// 插件分类
'pluginscategory' => [
// 表单
'form_item_name' => '名称',
'form_item_name_message' => '名称长度1~60个字符',
],
// 插件服务
'plugins' => [
......
......@@ -103,19 +103,22 @@ class BrandCategoryService
if(empty($params['id']))
{
$data['add_time'] = time();
if(Db::name('BrandCategory')->insertGetId($data) > 0)
$data['id'] = Db::name('BrandCategory')->insertGetId($data);
if($data['id'] <= 0)
{
return DataReturn(MyLang('insert_success'), 0);
return DataReturn(MyLang('insert_fail'), -100);
}
return DataReturn(MyLang('insert_fail'), -100);
} else {
$data['upd_time'] = time();
if(Db::name('BrandCategory')->where(['id'=>intval($params['id'])])->update($data))
if(Db::name('BrandCategory')->where(['id'=>intval($params['id'])])->update($data) === false)
{
return DataReturn(MyLang('edit_success'), 0);
return DataReturn(MyLang('edit_fail'), -100);
} else {
$data['id'] = $params['id'];
}
return DataReturn(MyLang('edit_fail'), -100);
}
return DataReturn(MyLang('operate_success'), 0, $data);
}
/**
......
......@@ -100,22 +100,23 @@ class PluginsAdminService
// 数据组装
$db_config = array_key_exists($base['plugins'], $temp_data) ? $temp_data[$base['plugins']] : [];
$dir_data[$base['plugins']] = [
'id' => empty($db_config['id']) ? 0 : $db_config['id'],
'plugins' => $base['plugins'],
'is_enable' => isset($db_config['is_enable']) ? $db_config['is_enable'] : 0,
'is_install' => empty($db_config) ? 0 : 1,
'logo_old' => $base['logo'],
'logo' => ResourcesService::AttachmentPathViewHandle($base['logo']),
'is_home' => isset($base['is_home']) ? $base['is_home'] : false,
'name' => isset($base['name']) ? $base['name'] : '',
'author' => isset($base['author']) ? $base['author'] : '',
'author_url' => isset($base['author_url']) ? $base['author_url'] : '',
'version' => isset($base['version']) ? $base['version'] : '',
'desc' => isset($base['desc']) ? $base['desc'] : '',
'apply_version' => isset($base['apply_version']) ? $base['apply_version'] : [],
'apply_terminal'=> isset($base['apply_terminal']) ? $base['apply_terminal'] : [],
'add_time_time' => isset($db_config['add_time']) ? date('Y-m-d H:i:s', $db_config['add_time']) : '',
'add_time_date' => isset($db_config['add_time']) ? date('Y-m-d', $db_config['add_time']) : '',
'id' => empty($db_config['id']) ? 0 : $db_config['id'],
'plugins' => $base['plugins'],
'plugins_category_id' => isset($db_config['plugins_category_id']) ? $db_config['plugins_category_id'] : 0,
'is_enable' => isset($db_config['is_enable']) ? $db_config['is_enable'] : 0,
'is_install' => empty($db_config) ? 0 : 1,
'logo_old' => $base['logo'],
'logo' => ResourcesService::AttachmentPathViewHandle($base['logo']),
'is_home' => isset($base['is_home']) ? $base['is_home'] : false,
'name' => isset($base['name']) ? $base['name'] : '',
'author' => isset($base['author']) ? $base['author'] : '',
'author_url' => isset($base['author_url']) ? $base['author_url'] : '',
'version' => isset($base['version']) ? $base['version'] : '',
'desc' => isset($base['desc']) ? $base['desc'] : '',
'apply_version' => isset($base['apply_version']) ? $base['apply_version'] : [],
'apply_terminal' => isset($base['apply_terminal']) ? $base['apply_terminal'] : [],
'add_time_time' => isset($db_config['add_time']) ? date('Y-m-d H:i:s', $db_config['add_time']) : '',
'add_time_date' => isset($db_config['add_time']) ? date('Y-m-d', $db_config['add_time']) : '',
];
}
}
......@@ -1523,7 +1524,7 @@ php;
}
/**
* 排序保存
* 设置保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
......@@ -1531,14 +1532,14 @@ php;
* @desc description
* @param [array] $params [输入参数]
*/
public static function SortSave($params = [])
public static function SetupSave($params = [])
{
// 请求类型
$p = [
[
'checked_type' => 'empty',
'key_name' => 'data',
'error_msg' => MyLang('common_service.pluginsadmin.sort_save_data_empty_tips'),
'error_msg' => MyLang('common_service.pluginsadmin.setup_save_data_empty_tips'),
]
];
$ret = ParamsChecked($params, $p);
......@@ -1556,15 +1557,19 @@ php;
// 捕获异常
try {
foreach($data as $k=>$v)
foreach($data as $v)
{
$upd_data = [
'sort' => intval($k),
'add_time' => time(),
];
if(Db::name('Plugins')->where(['id'=>intval($v)])->update($upd_data) === false)
if(!empty($v['id']))
{
throw new \Exception(MyLang('operate_fail'));
$upd_data = [
'sort' => empty($v['sort']) ? 0 : intval($v['sort']),
'plugins_category_id' => empty($v['cid']) ? 0 : intval($v['cid']),
'add_time' => time(),
];
if(Db::name('Plugins')->where(['id'=>intval($v['id'])])->update($upd_data) === false)
{
throw new \Exception(MyLang('operate_fail'));
}
}
}
......@@ -1583,7 +1588,7 @@ php;
return DataReturn($e->getMessage(), -1);
}
}
return DataReturn(MyLang('common_service.pluginsadmin.sort_save_data_error_tips'), -1);
return DataReturn(MyLang('common_service.pluginsadmin.setup_save_data_error_tips'), -1);
}
}
?>
\ No newline at end of file
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2099 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( https://opensource.org/licenses/mit-license.php )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\service;
use think\facade\Db;
/**
* 应用分类服务层
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class PluginsCategoryService
{
/**
* 应用分类
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-08-29
* @desc description
* @param [array] $params [输入参数]
*/
public static function PluginsCategoryList($params = [])
{
$field = empty($params['field']) ? '*' : $params['field'];
$order_by = empty($params['order_by']) ? 'sort asc' : trim($params['order_by']);
$data = Db::name('PluginsCategory')->where(['is_enable'=>1])->field($field)->order($order_by)->select()->toArray();
return DataReturn(MyLang('handle_success'), 0, $data);
}
/**
* 获取应用分类节点数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2018-12-16T23:54:46+0800
* @param [array] $params [输入参数]
*/
public static function PluginsCategoryNodeSon($params = [])
{
// 获取数据
$field = '*';
$data = Db::name('PluginsCategory')->field($field)->order('sort asc')->select()->toArray();
if(!empty($data))
{
foreach($data as &$v)
{
$v['is_son'] = 'no';
$v['ajax_url'] = MyUrl('admin/pluginscategory/getnodeson', array('id'=>$v['id']));
$v['delete_url'] = MyUrl('admin/pluginscategory/delete');
$v['json'] = json_encode($v);
}
return DataReturn(MyLang('operate_success'), 0, $data);
}
return DataReturn(MyLang('no_data'), -100);
}
/**
* 应用分类保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2018-12-17T01:04:03+0800
* @param [array] $params [输入参数]
*/
public static function PluginsCategorySave($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'length',
'key_name' => 'name',
'checked_data' => '1,60',
'error_msg' => MyLang('common_service.pluginscategory.form_item_name_message'),
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 数据
$data = [
'name' => $params['name'],
'sort' => isset($params['sort']) ? intval($params['sort']) : 0,
'is_enable' => isset($params['is_enable']) ? intval($params['is_enable']) : 0,
];
// 添加
if(empty($params['id']))
{
$data['add_time'] = time();
$data['id'] = Db::name('PluginsCategory')->insertGetId($data);
if($data['id'] <= 0)
{
return DataReturn(MyLang('insert_fail'), -100);
}
} else {
$data['upd_time'] = time();
if(Db::name('PluginsCategory')->where(['id'=>intval($params['id'])])->update($data) === false)
{
return DataReturn(MyLang('edit_fail'), -100);
} else {
$data['id'] = $params['id'];
}
}
return DataReturn(MyLang('operate_success'), 0, $data);
}
/**
* 应用分类删除
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2018-12-17T02:40:29+0800
* @param [array] $params [输入参数]
*/
public static function PluginsCategoryDelete($params = [])
{
// 请求参数
$p = [
[
'checked_type' => 'empty',
'key_name' => 'id',
'error_msg' => MyLang('data_id_error_tips'),
],
[
'checked_type' => 'empty',
'key_name' => 'admin',
'error_msg' => MyLang('user_info_incorrect_tips'),
],
];
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 开始删除
if(Db::name('PluginsCategory')->where(['id'=>intval($params['id'])])->delete())
{
return DataReturn(MyLang('delete_success'), 0);
}
return DataReturn(MyLang('delete_fail'), -100);
}
}
?>
\ No newline at end of file
......@@ -4,66 +4,66 @@
.plugins-data-list {
position: relative;
}
.plugins-data-list ul {
.plugins-data-list > ul {
padding: 0px;
width: calc(100% + 20px);
margin-left: -10px;
}
.plugins-data-list ul li {
.plugins-data-list > ul > li {
float: left;
padding: 10px;
}
.plugins-data-list ul li .item {
.plugins-data-list > ul > li .item {
height: 208px;
padding: 10px;
}
.plugins-data-list ul li .icon {
.plugins-data-list > ul > li .icon {
width: 80px;
height: 80px;
border-radius: 10px;
box-shadow: 0px 3px 6px 0px rgba(0,0,0,.4);
}
.plugins-data-list ul .item {
.plugins-data-list > ul .item {
box-shadow: none;
border: 1px solid #d4d4d4;
border: 1px solid #f0f0f0;
border-radius: 2px;
}
.plugins-data-list ul .item.am-active {
border: 1px solid #ff8a8a !important;
background: #fff2f2;
.plugins-data-list > ul .item.am-active {
border: 1px solid #ffd3d3 !important;
background: #fff8f8;
}
.plugins-data-list ul .item:hover {
border: 1px solid #999;
box-shadow: 0px 12px 12px -10px rgba(0,0,0,.4);
.plugins-data-list > ul .item:hover {
border: 1px solid #ddd;
box-shadow: 0px 12px 12px -10px rgba(0,0,0,.3);
}
.plugins-data-list ul li {
.plugins-data-list > ul > li {
position: relative;
}
.plugins-data-list ul li .base {
.plugins-data-list > ul > li .base {
position: absolute;
top: 20px;
left: 110px;
width: calc(100% - 130px);
}
.plugins-data-list ul li .base h3 {
.plugins-data-list > ul > li .base h3 {
font-weight: 700;
color: #333;
margin: 2px 0px 3px 0px;
}
.plugins-data-list ul li .base p {
.plugins-data-list > ul > li .base p {
line-height: 18px;
margin: 0;
font-size: 12px;
font-weight: 300;
color: #999;
}
.plugins-data-list ul li .base h3, .plugins-data-list ul li .base p {
.plugins-data-list > ul > li .base h3, .plugins-data-list > ul > li .base p {
word-wrap: normal;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.plugins-data-list ul .desc {
.plugins-data-list > ul .desc {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
......@@ -73,30 +73,30 @@
height: 36px;
line-height: 18px;
}
.plugins-data-list ul li .operation {
border-top: 1px dashed #eee;
.plugins-data-list > ul > li .operation {
border-top: 1px dashed #f6f6f6;
padding: 10px 0 5px 0;
}
.plugins-data-list ul li .am-btn, .plugins-data-list ul li .am-icon-btn {
.plugins-data-list > ul > li .am-btn, .plugins-data-list > ul > li .am-icon-btn {
width: 35px;
}
.plugins-data-list ul li .submit-state {
.plugins-data-list > ul > li .submit-state {
height: 30px;
border-radius: 2px;
font-size: 12px;
line-height: 14px;
}
.plugins-data-list ul li .submit-state.am-success {
.plugins-data-list > ul > li .submit-state.am-success {
border: 1px solid #4caf50;
background-color: #4caf50;
color: #fff;
}
.plugins-data-list ul li .submit-move {
.plugins-data-list > ul > li .submit-move {
cursor: move !important;
}
.plugins-data-list ul.already-install .item.am-active {
border: 1px solid #f8815d !important;
background: #fffbf5;
.plugins-data-list > ul.already-install .item.am-active {
border: 1px solid #ffe0d7 !important;
background: #fffefb;
}
.content .middle-divider {
height: 50px;
......@@ -121,21 +121,21 @@
border-top: 1px dashed #2196F3;
}
@media only screen and (max-width: 641px) {
.plugins-data-list ul li .item {
.plugins-data-list > ul > li .item {
height: 187px;
}
.plugins-data-list ul li .icon {
.plugins-data-list > ul > li .icon {
width: 65px;
height: 65px;
}
.plugins-data-list ul li .base {
.plugins-data-list > ul > li .base {
left: 95px;
width: calc(100% - 115px);
}
.plugins-data-list ul li .base h3 {
.plugins-data-list > ul > li .base h3 {
margin: 0px;
}
.plugins-data-list ul li .base p {
.plugins-data-list > ul > li .base p {
line-height: 16px;
}
}
......@@ -147,7 +147,7 @@
box-shadow: rgb(85 85 85 / 60%) 0px 0px 30px;
}
@media only screen and (min-width: 641px) {
.plugins-data-list ul li {
.plugins-data-list > ul > li {
width: 50%;
}
#plugins-delete-modal .am-modal-bd button.submit-ajax {
......@@ -155,12 +155,12 @@
}
}
@media only screen and (min-width: 1025px) {
.plugins-data-list ul li {
.plugins-data-list > ul > li {
width: 33.33%;
}
}
@media only screen and (max-width: 641px) {
.plugins-data-list ul li {
.plugins-data-list > ul > li {
width: 100%;
}
#plugins-delete-modal .am-modal-bd .am-btn {
......@@ -188,4 +188,14 @@
top: auto;
right: auto;
}
}
/**
* 分类选择
*/
.plugins-data-list .plugins-category-item {
position: absolute;
top: 20px;
right: 20px;
width: 120px;
}
\ No newline at end of file
......@@ -8,31 +8,43 @@
*/
function PluginsSearch()
{
// 分类筛选
var $list = $('.plugins-data-list ul.already-install');
var cid = parseInt($('.plugins-category-nav button.am-btn-secondary').data('value') || 0);
if(cid == 0)
{
$list.find('>li').removeClass('am-hide');
} else {
$list.find('>li').addClass('am-hide');
$list.find('>li.plugins-category-'+cid).removeClass('am-hide');
}
// 关键字筛选
var keywords = $('.plugins-search input').val().trim() || null;
if(keywords != null)
{
var count = 0;
$('.plugins-data-list ul li').each(function(k, v)
$list.find('>li').each(function(k, v)
{
var name = $(this).find('.base .name').text();
var desc = $(this).find('.desc').text();
if(name.indexOf(keywords) != -1 || desc.indexOf(keywords) != -1)
if(!$(this).hasClass('am-hide'))
{
$(this).show();
count++;
} else {
$(this).hide();
var name = $(this).find('.base .name').text();
var desc = $(this).find('.desc').text();
if(name.indexOf(keywords) != -1 || desc.indexOf(keywords) != -1)
{
$(this).removeClass('am-hide');
} else {
$(this).addClass('am-hide');
}
}
});
if(count == 0)
{
$('.not-data-tips').removeClass('none');
} else {
$('.not-data-tips').addClass('none');
}
}
// 空则显示提示
if($list.find('>li:not(.am-hide)').length > 0)
{
$('.not-data-tips').addClass('am-hide');
} else {
$('.plugins-data-list ul li').show();
$('.not-data-tips').addClass('none');
$('.not-data-tips').removeClass('am-hide');
}
}
......@@ -61,29 +73,35 @@ $(function()
$('.plugins-data-list ul').dragsort({ dragSelector: 'button.submit-move', placeHolderTemplate: '<li><div class="item drag-sort-dotted"></div></li>'});
// 排序开启/取消/保存
$('.submit-move-sort-open').on('click', function()
$('.submit-move-setup-open').on('click', function()
{
$('.submit-move-sort-open').addClass('am-hide');
$('.submit-move-sort-save').removeClass('am-hide');
$('.submit-move-sort-cancel').removeClass('am-hide');
$('.plugins-data-list ul li .submit-move').removeClass('am-hide');
$('.submit-move-setup-open').addClass('am-hide');
$('.submit-move-setup-save').removeClass('am-hide');
$('.submit-move-setup-cancel').removeClass('am-hide');
$('.plugins-data-list > ul > li .submit-move').removeClass('am-hide');
$('.plugins-data-list > ul > li .plugins-category-item').removeClass('am-hide');
});
$('.submit-move-sort-cancel').on('click', function()
$('.submit-move-setup-cancel').on('click', function()
{
$('.submit-move-sort-open').removeClass('am-hide');
$('.submit-move-sort-save').addClass('am-hide');
$('.submit-move-sort-cancel').addClass('am-hide');
$('.plugins-data-list ul li .submit-move').addClass('am-hide');
$('.submit-move-setup-open').removeClass('am-hide');
$('.submit-move-setup-save').addClass('am-hide');
$('.submit-move-setup-cancel').addClass('am-hide');
$('.plugins-data-list > ul > li .submit-move').addClass('am-hide');
$('.plugins-data-list > ul > li .plugins-category-item').addClass('am-hide');
});
$('.submit-move-sort-save').on('click', function()
$('.submit-move-setup-save').on('click', function()
{
var json = {};
$('.plugins-data-list ul li').each(function(k, v)
$('.plugins-data-list > ul > li').each(function(k, v)
{
var id = parseInt($(this).data('id')) || 0;
if(id > 0)
{
json[k] = id;
json[k] = {
sort: k,
id: id,
cid: $(this).find('.plugins-category-item select').val() || 0
};
}
});
var len = 0;
......@@ -100,7 +118,7 @@ $(function()
// ajax请求
$.AMUI.progress.start();
$.ajax({
url: RequestUrlHandle($('.plugins-data-list ul').data('sort-save-url')),
url: RequestUrlHandle($('.plugins-data-list ul').data('setup-save-url')),
type: 'POST',
dataType: 'json',
timeout: 10000,
......@@ -110,11 +128,16 @@ $(function()
$.AMUI.progress.done();
if(result.code == 0)
{
$('.submit-move-sort-open').removeClass('am-hide');
$('.submit-move-sort-save').addClass('am-hide');
$('.submit-move-sort-cancel').addClass('am-hide');
$('.plugins-data-list ul li .submit-move').addClass('am-hide');
$('.submit-move-setup-open').removeClass('am-hide');
$('.submit-move-setup-save').addClass('am-hide');
$('.submit-move-setup-cancel').addClass('am-hide');
$('.plugins-data-list > ul > li .submit-move').addClass('am-hide');
$('.plugins-data-list > ul > li .plugins-category-item').addClass('am-hide');
Prompt(result.msg, 'success');
setTimeout(function()
{
window.location.reload();
}, 1500);
} else {
Prompt(result.msg);
}
......@@ -141,4 +164,15 @@ $(function()
e.preventDefault();
}
});
// 分类筛选
$('.plugins-category-nav button').on('click', function()
{
// 分类样式
$('.plugins-category-nav button').removeClass('am-btn-secondary').addClass('am-btn-default');
$(this).addClass('am-btn-secondary');
// 搜索
PluginsSearch();
});
});
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册