mirror of
https://gitee.com/zongzhige/shopxo.git
synced 2024-11-29 10:29:27 +08:00
v6.1.0
This commit is contained in:
parent
51d6f9d3ce
commit
459469a817
@ -194,29 +194,15 @@ class Common extends BaseController
|
||||
$this->system_type = SystemService::SystemTypeValue();
|
||||
$assign['system_type'] = $this->system_type;
|
||||
|
||||
// 公共参数
|
||||
$assign['params'] = $this->data_request;
|
||||
// 公共参数(去除多余的参数、避免给页面url地址造成污染)
|
||||
$temp_params = $this->data_request;
|
||||
unset($temp_params['s'], $temp_params['pluginsname'], $temp_params['pluginscontrol'], $temp_params['pluginsaction']);
|
||||
$assign['params'] = $temp_params;
|
||||
|
||||
// 主题
|
||||
$this->default_theme = 'default';
|
||||
$assign['default_theme'] = $this->default_theme;
|
||||
|
||||
// 基础表单数据、去除数组和对象列
|
||||
$form_back_params = $this->data_request;
|
||||
if(!empty($form_back_params) && is_array($form_back_params))
|
||||
{
|
||||
foreach($form_back_params as $k=>$v)
|
||||
{
|
||||
if(is_array($v) || is_object($v))
|
||||
{
|
||||
unset($form_back_params[$k]);
|
||||
}
|
||||
}
|
||||
unset($form_back_params['id'], $form_back_params['form_back_control'], $form_back_params['form_back_action']);
|
||||
}
|
||||
$this->form_back_params = $form_back_params;
|
||||
$assign['form_back_params'] = $this->form_back_params;
|
||||
|
||||
// 当前系统操作名称
|
||||
$this->module_name = RequestModule();
|
||||
$this->controller_name = RequestController();
|
||||
@ -237,11 +223,6 @@ class Common extends BaseController
|
||||
$this->plugins_controller_name = '';
|
||||
$this->plugins_action_name = '';
|
||||
|
||||
// 页面表单操作指定返回、方法默认index
|
||||
$this->form_back_control = empty($this->data_request['form_back_control']) ? $this->controller_name : $this->data_request['form_back_control'];
|
||||
$this->form_back_action = empty($this->data_request['form_back_action']) ? 'index' : $this->data_request['form_back_action'];
|
||||
$this->form_back_url = MyUrl($this->module_name.'/'.$this->form_back_control.'/'.$this->form_back_action, $this->form_back_params);
|
||||
|
||||
// 页面唯一标记
|
||||
$this->page_unique_mark = $this->module_name.'-'.$this->controller_name.'-'.$this->action_name;
|
||||
} else {
|
||||
@ -250,36 +231,49 @@ class Common extends BaseController
|
||||
$this->plugins_controller_name = empty($this->data_request['pluginscontrol']) ? 'index' : $this->data_request['pluginscontrol'];
|
||||
$this->plugins_action_name = empty($this->data_request['pluginsaction']) ? 'index' : $this->data_request['pluginsaction'];
|
||||
|
||||
// 页面表单操作指定返回、方法默认index
|
||||
$this->form_back_control = empty($this->data_request['form_back_control']) ? $this->plugins_controller_name : $this->data_request['form_back_control'];
|
||||
$this->form_back_action = empty($this->data_request['form_back_action']) ? 'index' : $this->data_request['form_back_action'];
|
||||
$this->form_back_url = PluginsAdminUrl($this->plugins_module_name, $this->form_back_control, $this->form_back_action, $this->form_back_params);
|
||||
|
||||
// 页面唯一标记
|
||||
$this->page_unique_mark = $this->module_name.'-'.$this->controller_name.'-'.$this->plugins_module_name.'-'.$this->plugins_controller_name.'-'.$this->plugins_action_name;
|
||||
}
|
||||
$this->plugins_mca = $this->plugins_module_name.$this->plugins_controller_name.$this->plugins_action_name;
|
||||
|
||||
// 页面唯一标记
|
||||
$assign['page_unique_mark'] = $this->page_unique_mark;
|
||||
|
||||
// 当前插件操作名称
|
||||
$assign['plugins_module_name'] = $this->plugins_module_name;
|
||||
$assign['plugins_controller_name'] = $this->plugins_controller_name;
|
||||
$assign['plugins_action_name'] = $this->plugins_action_name;
|
||||
$assign['plugins_mca'] = $this->plugins_mca;
|
||||
|
||||
// 页面唯一标记
|
||||
$assign['page_unique_mark'] = $this->page_unique_mark;
|
||||
|
||||
// 基础表单数据、去除数组和对象列
|
||||
$form_back_params = $this->data_request;
|
||||
if(!empty($form_back_params) && is_array($form_back_params))
|
||||
{
|
||||
foreach($form_back_params as $k=>$v)
|
||||
{
|
||||
if(is_array($v) || is_object($v))
|
||||
{
|
||||
unset($form_back_params[$k]);
|
||||
}
|
||||
}
|
||||
unset($form_back_params['s'], $form_back_params['pluginsname'], $form_back_params['pluginscontrol'], $form_back_params['pluginsaction'], $form_back_params['id'], $form_back_params['form_back_control'], $form_back_params['form_back_action']);
|
||||
}
|
||||
$this->form_back_params = $form_back_params;
|
||||
$assign['form_back_params'] = $this->form_back_params;
|
||||
// 页面表单操作指定返回、方法默认index
|
||||
if(empty($this->plugins_module_name))
|
||||
{
|
||||
$this->form_back_control = empty($this->data_request['form_back_control']) ? $this->controller_name : $this->data_request['form_back_control'];
|
||||
$this->form_back_action = empty($this->data_request['form_back_action']) ? 'index' : $this->data_request['form_back_action'];
|
||||
$this->form_back_url = MyUrl($this->module_name.'/'.$this->form_back_control.'/'.$this->form_back_action, $this->form_back_params);
|
||||
} else {
|
||||
$this->form_back_control = empty($this->data_request['form_back_control']) ? $this->plugins_controller_name : $this->data_request['form_back_control'];
|
||||
$this->form_back_action = empty($this->data_request['form_back_action']) ? 'index' : $this->data_request['form_back_action'];
|
||||
$this->form_back_url = PluginsHomeUrl($this->plugins_module_name, $this->form_back_control, $this->form_back_action, $this->form_back_params);
|
||||
}
|
||||
// 基础表单返回url
|
||||
$assign['form_back_url'] = $this->form_back_url;
|
||||
|
||||
// 管理员
|
||||
$assign['admin'] = $this->admin;
|
||||
|
||||
// 权限菜单
|
||||
$assign['left_menu'] = $this->left_menu;
|
||||
// 当前管理员可使用的插件
|
||||
$assign['admin_plugins'] = $this->admin_plugins;
|
||||
|
||||
// 分页信息
|
||||
$this->page = max(1, isset($this->data_request['page']) ? intval($this->data_request['page']) : 1);
|
||||
$this->page_size = min(empty($this->data_request['page_size']) ? MyC('common_page_size', 10, true) : intval($this->data_request['page_size']), 1000);
|
||||
@ -288,6 +282,14 @@ class Common extends BaseController
|
||||
$assign['page_size'] = $this->page_size;
|
||||
$assign['page_start'] = $this->page_start;
|
||||
|
||||
// 管理员
|
||||
$assign['admin'] = $this->admin;
|
||||
|
||||
// 权限菜单
|
||||
$assign['left_menu'] = $this->left_menu;
|
||||
// 当前管理员可使用的插件
|
||||
$assign['admin_plugins'] = $this->admin_plugins;
|
||||
|
||||
// 货币符号
|
||||
$assign['currency_symbol'] = ResourcesService::CurrencyDataSymbol();
|
||||
|
||||
|
@ -126,7 +126,7 @@ class Plugins extends Base
|
||||
public function GetClassVars()
|
||||
{
|
||||
$data = [];
|
||||
$vers = get_class_vars(get_class());
|
||||
$vers = get_class_vars(get_class($this));
|
||||
foreach($vers as $k=>$v)
|
||||
{
|
||||
if(property_exists($this, $k))
|
||||
|
@ -66,23 +66,6 @@ class AppCenterNav
|
||||
'where_type' => 'like',
|
||||
],
|
||||
],
|
||||
[
|
||||
'label' => $lang['platform'],
|
||||
'view_type' => 'field',
|
||||
'view_key' => 'platform',
|
||||
'view_data_key' => 'name',
|
||||
'view_data' => MyConst('common_platform_type'),
|
||||
'is_sort' => 1,
|
||||
'width' => 165,
|
||||
'search_config' => [
|
||||
'form_type' => 'select',
|
||||
'where_type' => 'in',
|
||||
'data' => MyConst('common_platform_type'),
|
||||
'data_key' => 'value',
|
||||
'data_name' => 'name',
|
||||
'is_multiple' => 1,
|
||||
],
|
||||
],
|
||||
[
|
||||
'label' => $lang['images_url'],
|
||||
'view_type' => 'images',
|
||||
@ -94,9 +77,7 @@ class AppCenterNav
|
||||
[
|
||||
'label' => $lang['event_type'],
|
||||
'view_type' => 'field',
|
||||
'view_key' => 'event_type',
|
||||
'view_data_key' => 'name',
|
||||
'view_data' => MyConst('common_app_event_type'),
|
||||
'view_key' => 'event_type_name',
|
||||
'grid_size' => 'sm',
|
||||
'is_sort' => 1,
|
||||
'search_config' => [
|
||||
@ -154,6 +135,21 @@ class AppCenterNav
|
||||
'is_multiple' => 1,
|
||||
],
|
||||
],
|
||||
[
|
||||
'label' => $lang['platform'],
|
||||
'view_type' => 'field',
|
||||
'view_key' => 'platform_text',
|
||||
'grid_size' => 'lg',
|
||||
'search_config' => [
|
||||
'form_type' => 'select',
|
||||
'form_name' => 'platform',
|
||||
'where_type' => 'like',
|
||||
'data' => MyConst('common_platform_type'),
|
||||
'data_key' => 'value',
|
||||
'data_name' => 'name',
|
||||
'is_seat_select' => 1,
|
||||
],
|
||||
],
|
||||
[
|
||||
'label' => $lang['desc'],
|
||||
'view_type' => 'field',
|
||||
@ -206,6 +202,20 @@ class AppCenterNav
|
||||
'order_by' => 'sort asc,id asc',
|
||||
'is_handle_time_field' => 1,
|
||||
'is_handle_annex_field' => 1,
|
||||
'is_json_data_handle' => 1,
|
||||
'json_config_data' => [
|
||||
'platform' => [],
|
||||
],
|
||||
'is_fixed_name_field' => 1,
|
||||
'fixed_name_data' => [
|
||||
'platform' => [
|
||||
'data' => MyConst('common_platform_type'),
|
||||
'field' => 'platform_text',
|
||||
],
|
||||
'event_type' => [
|
||||
'data' => MyConst('common_app_event_type'),
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
@ -66,23 +66,6 @@ class AppHomeNav
|
||||
'where_type' => 'like',
|
||||
],
|
||||
],
|
||||
[
|
||||
'label' => $lang['platform'],
|
||||
'view_type' => 'field',
|
||||
'view_key' => 'platform',
|
||||
'view_data_key' => 'name',
|
||||
'view_data' => MyConst('common_platform_type'),
|
||||
'is_sort' => 1,
|
||||
'width' => 165,
|
||||
'search_config' => [
|
||||
'form_type' => 'select',
|
||||
'where_type' => 'in',
|
||||
'data' => MyConst('common_platform_type'),
|
||||
'data_key' => 'value',
|
||||
'data_name' => 'name',
|
||||
'is_multiple' => 1,
|
||||
],
|
||||
],
|
||||
[
|
||||
'label' => $lang['images'],
|
||||
'view_type' => 'module',
|
||||
@ -93,9 +76,7 @@ class AppHomeNav
|
||||
[
|
||||
'label' => $lang['event_type'],
|
||||
'view_type' => 'field',
|
||||
'view_key' => 'event_type',
|
||||
'view_data_key' => 'name',
|
||||
'view_data' => MyConst('common_app_event_type'),
|
||||
'view_key' => 'event_type_name',
|
||||
'grid_size' => 'sm',
|
||||
'is_sort' => 1,
|
||||
'search_config' => [
|
||||
@ -153,6 +134,21 @@ class AppHomeNav
|
||||
'is_multiple' => 1,
|
||||
],
|
||||
],
|
||||
[
|
||||
'label' => $lang['platform'],
|
||||
'view_type' => 'field',
|
||||
'view_key' => 'platform_text',
|
||||
'grid_size' => 'lg',
|
||||
'search_config' => [
|
||||
'form_type' => 'select',
|
||||
'form_name' => 'platform',
|
||||
'where_type' => 'like',
|
||||
'data' => MyConst('common_platform_type'),
|
||||
'data_key' => 'value',
|
||||
'data_name' => 'name',
|
||||
'is_seat_select' => 1,
|
||||
],
|
||||
],
|
||||
[
|
||||
'label' => $lang['sort'],
|
||||
'view_type' => 'field',
|
||||
@ -195,6 +191,20 @@ class AppHomeNav
|
||||
'order_by' => 'sort asc,id asc',
|
||||
'is_handle_time_field' => 1,
|
||||
'is_handle_annex_field' => 1,
|
||||
'is_json_data_handle' => 1,
|
||||
'json_config_data' => [
|
||||
'platform' => [],
|
||||
],
|
||||
'is_fixed_name_field' => 1,
|
||||
'fixed_name_data' => [
|
||||
'platform' => [
|
||||
'data' => MyConst('common_platform_type'),
|
||||
'field' => 'platform_text',
|
||||
],
|
||||
'event_type' => [
|
||||
'data' => MyConst('common_app_event_type'),
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
@ -42,6 +42,7 @@ class QuickNav
|
||||
'status_field' => 'is_enable',
|
||||
'is_search' => 1,
|
||||
'is_delete' => 1,
|
||||
'is_middle' => 0,
|
||||
'is_data_export_excel' => 1,
|
||||
],
|
||||
// 表单配置
|
||||
@ -65,23 +66,6 @@ class QuickNav
|
||||
'where_type' => 'like',
|
||||
],
|
||||
],
|
||||
[
|
||||
'label' => $lang['platform'],
|
||||
'view_type' => 'field',
|
||||
'view_key' => 'platform',
|
||||
'view_data_key' => 'name',
|
||||
'view_data' => MyConst('common_platform_type'),
|
||||
'is_sort' => 1,
|
||||
'width' => 165,
|
||||
'search_config' => [
|
||||
'form_type' => 'select',
|
||||
'where_type' => 'in',
|
||||
'data' => MyConst('common_platform_type'),
|
||||
'data_key' => 'value',
|
||||
'data_name' => 'name',
|
||||
'is_multiple' => 1,
|
||||
],
|
||||
],
|
||||
[
|
||||
'label' => $lang['images'],
|
||||
'view_type' => 'module',
|
||||
@ -92,9 +76,7 @@ class QuickNav
|
||||
[
|
||||
'label' => $lang['event_type'],
|
||||
'view_type' => 'field',
|
||||
'view_key' => 'event_type',
|
||||
'view_data_key' => 'name',
|
||||
'view_data' => MyConst('common_app_event_type'),
|
||||
'view_key' => 'event_type_name',
|
||||
'grid_size' => 'sm',
|
||||
'is_sort' => 1,
|
||||
'search_config' => [
|
||||
@ -135,6 +117,21 @@ class QuickNav
|
||||
'is_multiple' => 1,
|
||||
],
|
||||
],
|
||||
[
|
||||
'label' => $lang['platform'],
|
||||
'view_type' => 'field',
|
||||
'view_key' => 'platform_text',
|
||||
'grid_size' => 'lg',
|
||||
'search_config' => [
|
||||
'form_type' => 'select',
|
||||
'form_name' => 'platform',
|
||||
'where_type' => 'like',
|
||||
'data' => MyConst('common_platform_type'),
|
||||
'data_key' => 'value',
|
||||
'data_name' => 'name',
|
||||
'is_seat_select' => 1,
|
||||
],
|
||||
],
|
||||
[
|
||||
'label' => $lang['sort'],
|
||||
'view_type' => 'field',
|
||||
@ -178,6 +175,20 @@ class QuickNav
|
||||
'order_by' => 'sort asc,id asc',
|
||||
'is_handle_time_field' => 1,
|
||||
'is_handle_annex_field' => 1,
|
||||
'is_json_data_handle' => 1,
|
||||
'json_config_data' => [
|
||||
'platform' => [],
|
||||
],
|
||||
'is_fixed_name_field' => 1,
|
||||
'fixed_name_data' => [
|
||||
'platform' => [
|
||||
'data' => MyConst('common_platform_type'),
|
||||
'field' => 'platform_text',
|
||||
],
|
||||
'event_type' => [
|
||||
'data' => MyConst('common_app_event_type'),
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
@ -40,6 +40,7 @@ class Slide
|
||||
'base' => [
|
||||
'key_field' => 'id',
|
||||
'status_field' => 'is_enable',
|
||||
'is_middle' => 0,
|
||||
'is_search' => 1,
|
||||
'is_delete' => 1,
|
||||
'is_data_export_excel' => 1,
|
||||
@ -78,18 +79,19 @@ class Slide
|
||||
],
|
||||
],
|
||||
[
|
||||
'label' => $lang['platform'],
|
||||
'view_type' => 'field',
|
||||
'view_key' => 'platform',
|
||||
'view_data_key' => 'name',
|
||||
'view_data' => MyConst('common_platform_type'),
|
||||
'label' => $lang['is_enable'],
|
||||
'view_type' => 'status',
|
||||
'view_key' => 'is_enable',
|
||||
'post_url' => MyUrl('admin/slide/statusupdate'),
|
||||
'is_form_su' => 1,
|
||||
'align' => 'center',
|
||||
'is_sort' => 1,
|
||||
'width' => 165,
|
||||
'width' => 130,
|
||||
'search_config' => [
|
||||
'form_type' => 'select',
|
||||
'where_type' => 'in',
|
||||
'data' => MyConst('common_platform_type'),
|
||||
'data_key' => 'value',
|
||||
'data' => MyConst('common_is_text_list'),
|
||||
'data_key' => 'id',
|
||||
'data_name' => 'name',
|
||||
'is_multiple' => 1,
|
||||
],
|
||||
@ -98,17 +100,17 @@ class Slide
|
||||
'label' => $lang['images'],
|
||||
'view_type' => 'module',
|
||||
'view_key' => 'slide/module/images',
|
||||
'grid_size' => 'sm',
|
||||
'width' => 160,
|
||||
],
|
||||
[
|
||||
'label' => $lang['event_type'],
|
||||
'view_type' => 'field',
|
||||
'view_key' => 'event_type',
|
||||
'view_data_key' => 'name',
|
||||
'view_data' => MyConst('common_app_event_type'),
|
||||
'view_key' => 'event_type_name',
|
||||
'grid_size' => 'sm',
|
||||
'is_sort' => 1,
|
||||
'search_config' => [
|
||||
'form_type' => 'select',
|
||||
'form_name' => 'event_type',
|
||||
'where_type' => 'in',
|
||||
'data' => MyConst('common_app_event_type'),
|
||||
'data_key' => 'value',
|
||||
@ -128,21 +130,18 @@ class Slide
|
||||
],
|
||||
],
|
||||
[
|
||||
'label' => $lang['is_enable'],
|
||||
'view_type' => 'status',
|
||||
'view_key' => 'is_enable',
|
||||
'post_url' => MyUrl('admin/slide/statusupdate'),
|
||||
'is_form_su' => 1,
|
||||
'align' => 'center',
|
||||
'is_sort' => 1,
|
||||
'width' => 130,
|
||||
'label' => $lang['platform'],
|
||||
'view_type' => 'field',
|
||||
'view_key' => 'platform_text',
|
||||
'grid_size' => 'lg',
|
||||
'search_config' => [
|
||||
'form_type' => 'select',
|
||||
'where_type' => 'in',
|
||||
'data' => MyConst('common_is_text_list'),
|
||||
'data_key' => 'id',
|
||||
'form_name' => 'platform',
|
||||
'where_type' => 'like',
|
||||
'data' => MyConst('common_platform_type'),
|
||||
'data_key' => 'value',
|
||||
'data_name' => 'name',
|
||||
'is_multiple' => 1,
|
||||
'is_seat_select' => 1,
|
||||
],
|
||||
],
|
||||
[
|
||||
@ -205,6 +204,20 @@ class Slide
|
||||
'order_by' => 'sort asc,id asc',
|
||||
'is_handle_time_field' => 1,
|
||||
'is_handle_annex_field' => 1,
|
||||
'is_json_data_handle' => 1,
|
||||
'json_config_data' => [
|
||||
'platform' => [],
|
||||
],
|
||||
'is_fixed_name_field' => 1,
|
||||
'fixed_name_data' => [
|
||||
'platform' => [
|
||||
'data' => MyConst('common_platform_type'),
|
||||
'field' => 'platform_text',
|
||||
],
|
||||
'event_type' => [
|
||||
'data' => MyConst('common_app_event_type'),
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
@ -17,12 +17,13 @@
|
||||
</div>
|
||||
<div class="am-form-group">
|
||||
<label>{{:MyLang('form_platform_title')}}<span class="am-form-group-label-tips-must">*</span></label>
|
||||
<select name="platform" class="am-radius chosen-select" data-placeholder="{{:MyLang('optional_tips')}}" data-validation-message="{{:MyLang('form_platform_message')}}" required>
|
||||
<option value="">{{:MyLang('optional_tips')}}</option>
|
||||
{{foreach $common_platform_type as $v}}
|
||||
<option value="{{$v.value}}" {{if isset($data['platform']) and $data['platform'] eq $v['value']}}selected{{else /}}{{if !isset($data['platform']) and isset($v['checked']) and $v['checked'] eq true}}selected{{/if}}{{/if}}>{{$v.name}}</option>
|
||||
<div class="am-checkbox-group">
|
||||
{{foreach :MyConst('common_platform_type') as $v}}
|
||||
<label class="am-checkbox-inline">
|
||||
<input type="checkbox" value="{{$v.value}}" name="platform" data-am-ucheck {{if (!empty($data['platform']) and is_array($data['platform']) and in_array($v['value'], $data['platform'])) or (empty($data['platform']) and isset($v['checked']) and $v['checked'] eq true)}}checked{{/if}} data-validation-message="{{:MyLang('form_platform_message')}}" required /> {{$v.name}}
|
||||
</label>
|
||||
{{/foreach}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="am-form-group">
|
||||
|
@ -17,12 +17,13 @@
|
||||
</div>
|
||||
<div class="am-form-group">
|
||||
<label>{{:MyLang('form_platform_title')}}<span class="am-form-group-label-tips-must">*</span></label>
|
||||
<select name="platform" class="am-radius chosen-select" data-placeholder="{{:MyLang('optional_tips')}}" data-validation-message="{{:MyLang('form_platform_message')}}" required>
|
||||
<option value="">{{:MyLang('optional_tips')}}</option>
|
||||
{{foreach $common_platform_type as $v}}
|
||||
<option value="{{$v.value}}" {{if isset($data['platform']) and $data['platform'] eq $v['value']}}selected{{else /}}{{if !isset($data['platform']) and isset($v['checked']) and $v['checked'] eq true}}selected{{/if}}{{/if}}>{{$v.name}}</option>
|
||||
<div class="am-checkbox-group">
|
||||
{{foreach :MyConst('common_platform_type') as $v}}
|
||||
<label class="am-checkbox-inline">
|
||||
<input type="checkbox" value="{{$v.value}}" name="platform" data-am-ucheck {{if (!empty($data['platform']) and is_array($data['platform']) and in_array($v['value'], $data['platform'])) or (empty($data['platform']) and isset($v['checked']) and $v['checked'] eq true)}}checked{{/if}} data-validation-message="{{:MyLang('form_platform_message')}}" required /> {{$v.name}}
|
||||
</label>
|
||||
{{/foreach}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="am-form-group">
|
||||
<label>{{:MyLang('form_event_type_title')}}</label>
|
||||
|
@ -233,7 +233,7 @@
|
||||
<input type="text" name="specifications_barcode[]" placeholder="{{:MyLang('common_service.goods.form_spec_thead_barcode_title')}}" class="am-radius" maxlength="60" data-validation-message="{{:MyLang('common_service.goods.form_spec_thead_barcode_message')}}" value="{{if isset($v['data']['barcode'])}}{{$v.data.barcode}}{{/if}}" data-is-clearout="0" />
|
||||
</td>
|
||||
<td class="am-text-middle">
|
||||
<input type="hidden" name="specifications_extends[]" value="{{$v.data.extends}}" class="line-extend-input" />
|
||||
<input type="hidden" name="specifications_extends[]" value="{{if !empty($v['data']['extends'])}}{{$v.data.extends}}{{/if}}" class="line-extend-input" />
|
||||
<a href="javascript:;" class="am-text-xs am-text-primary line-extend-btn">{{:MyLang('edit_title')}}</a>
|
||||
</td>
|
||||
<td class="am-text-middle">
|
||||
|
@ -201,6 +201,11 @@
|
||||
<script type="text/javascript" src="{{$public_host}}static/common/lib/ace-builds/src-min/ace.js"></script>
|
||||
{{/if}}
|
||||
|
||||
<!-- 范围滑条 -->
|
||||
{{if isset($is_load_jrange) and $is_load_jrange eq 1}}
|
||||
<script type="text/javascript" src="{{$public_host}}static/common/lib/jRange/jquery.range.js"></script>
|
||||
{{/if}}
|
||||
|
||||
<!-- 隐藏编辑器初始化 -->
|
||||
<script type="text/javascript">
|
||||
var upload_editor = UE.getEditor("upload-editor-view", {
|
||||
|
@ -37,6 +37,11 @@
|
||||
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/hiprint/css/print-lock.css" />
|
||||
{{/if}}
|
||||
|
||||
<!-- 范围滑条 -->
|
||||
{{if isset($is_load_jrange) and $is_load_jrange eq 1}}
|
||||
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/jRange/jquery.range.css?v={{:MyC('home_static_cache_version')}}" />
|
||||
{{/if}}
|
||||
|
||||
<!-- 可视化拖拽 -->
|
||||
{{if isset($is_load_layout) and $is_load_layout eq 1}}
|
||||
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/css/layout.css?v={{:MyC('home_static_cache_version')}}" />
|
||||
|
@ -1,7 +1,7 @@
|
||||
{{if !empty($module_data['nav_data']) and is_array($module_data['nav_data'])}}
|
||||
<div class="nav-switch-btn">
|
||||
{{foreach $module_data.nav_data as $k=>$v}}
|
||||
<a href="javascript:;" class="item {{if $k eq 0}}am-active{{/if}}" data-key="{{$v.key}}">{{$v.name}}</a>
|
||||
<a href="javascript:;" class="item {{if isset($module_data['index']) and $module_data.index eq $k or (!isset($module_data['index']) and $k eq 0)}}am-active{{/if}}" data-key="{{$v.key}}">{{$v.name}}</a>
|
||||
{{/foreach}}
|
||||
</div>
|
||||
{{/if}}
|
@ -8,7 +8,7 @@
|
||||
{{if !empty($module_data['nav_data']) and is_array($module_data['nav_data'])}}
|
||||
<ul>
|
||||
{{foreach $module_data.nav_data as $v}}
|
||||
<li {{if !empty($params['pluginscontrol']) and $params['pluginscontrol'] eq $v['control']}}class="am-active"{{/if}}>
|
||||
<li {{if !empty($plugins_controller_name) and $plugins_controller_name eq $v['control']}}class="am-active"{{/if}}>
|
||||
<a href="{{:PluginsAdminUrl($module_data['plugins'], $v['control'], $v['action'])}}">{{$v.name}}</a>
|
||||
</li>
|
||||
{{/foreach}}
|
||||
|
@ -1,7 +1,7 @@
|
||||
{{if !empty($module_data['plugins']) and !empty($module_data['nav_data']) and is_array($module_data['nav_data'])}}
|
||||
<div class="nav-switch-btn plugins-admin-nav-btn-container {{$module_data.plugins}}">
|
||||
{{foreach $module_data.nav_data as $k=>$v}}
|
||||
<a href="{{if empty($v['url'])}}javascript:;{{else /}}{{$v.url}}{{/if}}" class="item {{if (isset($params['type']) and isset($v['type']) and $params['type'] eq $v['type']) or (!empty($params['pluginscontrol']) and !empty($v['control']) and $params['pluginscontrol'] eq $v['control']) or (!isset($params['type']) and isset($v['type']) and $k eq 0)}} am-active{{/if}}" data-key="{{if isset($v['type'])}}{{$v.type}}{{/if}}">{{$v.name}}</a>
|
||||
<a href="{{if empty($v['url'])}}javascript:;{{else /}}{{$v.url}}{{/if}}" class="item {{if (isset($params['type']) and isset($v['type']) and $params['type'] eq $v['type']) or (!empty($plugins_controller_name) and !empty($v['control']) and $plugins_controller_name eq $v['control']) or (!isset($params['type']) and isset($v['type']) and $k eq 0)}} am-active{{/if}}" data-key="{{if isset($v['type'])}}{{$v.type}}{{/if}}">{{$v.name}}</a>
|
||||
{{/foreach}}
|
||||
</div>
|
||||
{{/if}}
|
@ -17,12 +17,13 @@
|
||||
</div>
|
||||
<div class="am-form-group">
|
||||
<label>{{:MyLang('form_platform_title')}}<span class="am-form-group-label-tips-must">*</span></label>
|
||||
<select name="platform" class="am-radius chosen-select" data-placeholder="{{:MyLang('optional_tips')}}" data-validation-message="{{:MyLang('form_platform_message')}}" required>
|
||||
<option value="">{{:MyLang('optional_tips')}}</option>
|
||||
{{foreach $common_platform_type as $v}}
|
||||
<option value="{{$v.value}}" {{if isset($data['platform']) and $data['platform'] eq $v['value']}}selected{{else /}}{{if !isset($data['platform']) and isset($v['checked']) and $v['checked'] eq true}}selected{{/if}}{{/if}}>{{$v.name}}</option>
|
||||
<div class="am-checkbox-group">
|
||||
{{foreach :MyConst('common_platform_type') as $v}}
|
||||
<label class="am-checkbox-inline">
|
||||
<input type="checkbox" value="{{$v.value}}" name="platform" data-am-ucheck {{if (!empty($data['platform']) and is_array($data['platform']) and in_array($v['value'], $data['platform'])) or (empty($data['platform']) and isset($v['checked']) and $v['checked'] eq true)}}checked{{/if}} data-validation-message="{{:MyLang('form_platform_message')}}" required /> {{$v.name}}
|
||||
</label>
|
||||
{{/foreach}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="am-form-group">
|
||||
<label>{{:MyLang('form_event_type_title')}}</label>
|
||||
|
@ -6,33 +6,35 @@
|
||||
<div class="content">
|
||||
<!-- form start -->
|
||||
<form class="am-form form-validation am-form-popup-sticky" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-view" request-value="{{:MyUrl('admin/site/index')}}" enctype="multipart/form-data">
|
||||
{{:ModuleInclude('public/nav_switch_btn', [
|
||||
'nav_data' => [
|
||||
[
|
||||
'name' => MyLang('base_config_title'),
|
||||
'key' => 'base-config-title',
|
||||
],
|
||||
[
|
||||
'name' => MyLang('site.base_item_site_status_title'),
|
||||
'key' => 'site-status',
|
||||
],
|
||||
[
|
||||
'name' => MyLang('site.base_item_site_domain_title'),
|
||||
'key' => 'site-domain',
|
||||
],
|
||||
[
|
||||
'name' => MyLang('site.base_item_site_filing_title'),
|
||||
'key' => 'site-filing',
|
||||
],
|
||||
[
|
||||
'name' => MyLang('site.base_item_site_other_title'),
|
||||
'key' => 'site-other',
|
||||
{{if !isset($is_theme_data_admin) or $is_theme_data_admin eq 0}}
|
||||
{{:ModuleInclude('public/nav_switch_btn', [
|
||||
'nav_data' => [
|
||||
[
|
||||
'name' => MyLang('base_config_title'),
|
||||
'key' => 'site-base',
|
||||
],
|
||||
[
|
||||
'name' => MyLang('site.base_item_site_status_title'),
|
||||
'key' => 'site-status',
|
||||
],
|
||||
[
|
||||
'name' => MyLang('site.base_item_site_domain_title'),
|
||||
'key' => 'site-domain',
|
||||
],
|
||||
[
|
||||
'name' => MyLang('site.base_item_site_filing_title'),
|
||||
'key' => 'site-filing',
|
||||
],
|
||||
[
|
||||
'name' => MyLang('site.base_item_site_other_title'),
|
||||
'key' => 'site-other',
|
||||
]
|
||||
]
|
||||
]
|
||||
])}}
|
||||
])}}
|
||||
{{/if}}
|
||||
<div class="nav-content">
|
||||
<!-- 基础配置 -->
|
||||
<div class="item am-active" data-key="base-config-title">
|
||||
<div class="item {{if empty($params['switch']) or $params['switch'] eq 'site-base'}}am-active{{/if}}" data-key="site-base">
|
||||
<div class="am-form-group">
|
||||
<label>{{$data.home_site_name.name}}</label>
|
||||
<input type="text" name="{{$data.home_site_name.only_tag}}" minlength="1" placeholder="{{$data.home_site_name.name}}" data-validation-message="{{$data.home_site_name.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_site_name.value}}"{{/if}} required />
|
||||
@ -120,7 +122,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 站点状态 -->
|
||||
<div class="item" data-key="site-status">
|
||||
<div class="item {{if !empty($params['switch']) and $params['switch'] eq 'site-status'}}am-active{{/if}}" data-key="site-status">
|
||||
<div class="am-form-group">
|
||||
<label class="am-block">{{$data.home_site_app_state.name}}<span class="am-form-group-label-tips">{{$data.home_site_app_state.describe}}</span></label>
|
||||
<div class="am-checkbox-group am-flex am-gap-12">
|
||||
@ -170,7 +172,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 站点域名地址 -->
|
||||
<div class="item" data-key="site-domain">
|
||||
<div class="item {{if !empty($params['switch']) and $params['switch'] eq 'site-domain'}}am-active{{/if}}" data-key="site-domain">
|
||||
{{if is_array(MyLang('site.site_domain_tips_list'))}}
|
||||
<div class="am-operate-stretch-tips">
|
||||
<div class="title">
|
||||
@ -196,7 +198,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 备案信息 -->
|
||||
<div class="item" data-key="site-filing">
|
||||
<div class="item {{if !empty($params['switch']) and $params['switch'] eq 'site-filing'}}am-active{{/if}}" data-key="site-filing">
|
||||
<div class="am-form-group">
|
||||
<label>{{$data.home_site_icp.name}}<span class="am-form-group-label-tips">{{$data.home_site_icp.describe}}</span></label>
|
||||
<input type="text" name="{{$data.home_site_icp.only_tag}}" placeholder="{{$data.home_site_icp.describe}}" data-validation-message="{{$data.home_site_icp.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_site_icp.value}}"{{/if}} />
|
||||
@ -226,7 +228,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 其它 -->
|
||||
<div class="item" data-key="site-other">
|
||||
<div class="item {{if !empty($params['switch']) and $params['switch'] eq 'site-other'}}am-active{{/if}}" data-key="site-other">
|
||||
<div class="am-form-group">
|
||||
<label>{{$data.home_static_cache_version.name}}<span class="am-form-group-label-tips">{{$data.home_static_cache_version.describe}}</span></label>
|
||||
<input type="text" name="{{$data.home_static_cache_version.only_tag}}" placeholder="{{$data.home_static_cache_version.describe}}" data-validation-message="{{$data.home_static_cache_version.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.home_static_cache_version.value}}"{{/if}} />
|
||||
|
@ -17,12 +17,13 @@
|
||||
</div>
|
||||
<div class="am-form-group">
|
||||
<label>{{:MyLang('form_platform_title')}}<span class="am-form-group-label-tips-must">*</span></label>
|
||||
<select name="platform" class="am-radius chosen-select" data-placeholder="{{:MyLang('optional_tips')}}" data-validation-message="{{:MyLang('form_platform_message')}}" required>
|
||||
<option value="">{{:MyLang('optional_tips')}}</option>
|
||||
<div class="am-checkbox-group">
|
||||
{{foreach :MyConst('common_platform_type') as $v}}
|
||||
<option value="{{$v.value}}" {{if isset($data['platform']) and $data['platform'] eq $v['value']}}selected{{else /}}{{if !isset($data['platform']) and isset($v['checked']) and $v['checked'] eq true}}selected{{/if}}{{/if}}>{{$v.name}}</option>
|
||||
<label class="am-checkbox-inline">
|
||||
<input type="checkbox" value="{{$v.value}}" name="platform" data-am-ucheck {{if (!empty($data['platform']) and is_array($data['platform']) and in_array($v['value'], $data['platform'])) or (empty($data['platform']) and isset($v['checked']) and $v['checked'] eq true)}}checked{{/if}} data-validation-message="{{:MyLang('form_platform_message')}}" required /> {{$v.name}}
|
||||
</label>
|
||||
{{/foreach}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="am-form-group">
|
||||
|
@ -1,53 +0,0 @@
|
||||
<?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\api\controller;
|
||||
|
||||
use app\service\ApiService;
|
||||
use app\service\SystemBaseService;
|
||||
use app\service\BannerService;
|
||||
|
||||
/**
|
||||
* 轮播
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 0.0.1
|
||||
* @datetime 2016-12-01T21:51:08+0800
|
||||
*/
|
||||
class Banner extends Common
|
||||
{
|
||||
/**
|
||||
* 构造方法
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 0.0.1
|
||||
* @datetime 2016-12-03T12:39:08+0800
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// 调用父类前置方法
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* [Index 入口]
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @datetime 2018-05-25T11:03:59+0800
|
||||
*/
|
||||
public function Index()
|
||||
{
|
||||
// 获取轮播
|
||||
$result = BannerService::Banner();
|
||||
return ApiService::ApiDataReturn(SystemBaseService::DataReturn($result));
|
||||
}
|
||||
}
|
||||
?>
|
@ -551,7 +551,7 @@ class Devtest extends Common
|
||||
|
||||
// 翻译数据 并 生成数据
|
||||
$params = [];
|
||||
$vers = get_class_vars(get_class());
|
||||
$vers = get_class_vars(get_class($this));
|
||||
foreach($vers as $k=>$v)
|
||||
{
|
||||
if(property_exists($this, $k))
|
||||
@ -662,7 +662,7 @@ class Devtest extends Common
|
||||
|
||||
// 翻译数据 并 生成数据
|
||||
$params = [];
|
||||
$vers = get_class_vars(get_class());
|
||||
$vers = get_class_vars(get_class($this));
|
||||
foreach($vers as $k=>$v)
|
||||
{
|
||||
if(property_exists($this, $k))
|
||||
@ -768,7 +768,7 @@ class Devtest extends Common
|
||||
|
||||
// 翻译数据 并 生成数据
|
||||
$params = [];
|
||||
$vers = get_class_vars(get_class());
|
||||
$vers = get_class_vars(get_class($this));
|
||||
foreach($vers as $k=>$v)
|
||||
{
|
||||
if(property_exists($this, $k))
|
||||
|
@ -13,7 +13,7 @@ namespace app\api\controller;
|
||||
use app\service\ApiService;
|
||||
use app\service\SystemBaseService;
|
||||
use app\service\GoodsService;
|
||||
use app\service\BannerService;
|
||||
use app\service\SlideService;
|
||||
use app\service\AppHomeNavService;
|
||||
use app\service\BuyService;
|
||||
use app\service\LayoutService;
|
||||
@ -76,7 +76,7 @@ class Index extends Common
|
||||
// 返回数据
|
||||
$result = SystemBaseService::DataReturn([
|
||||
'navigation' => AppHomeNavService::AppHomeNav(),
|
||||
'banner_list' => BannerService::Banner(),
|
||||
'banner_list' => SlideService::SlideList(),
|
||||
'data_list' => $data_list,
|
||||
'article_list' => ArticleService::RecommendedArticleList(),
|
||||
'right_icon_list' => AppService::HomeRightIconList(['message_total'=>$message_total]),
|
||||
|
@ -97,7 +97,7 @@ class Plugins extends Common
|
||||
public function GetClassVars()
|
||||
{
|
||||
$data = [];
|
||||
$vers = get_class_vars(get_class());
|
||||
$vers = get_class_vars(get_class($this));
|
||||
foreach($vers as $k=>$v)
|
||||
{
|
||||
if(property_exists($this, $k))
|
||||
|
@ -1795,6 +1795,11 @@ function FormModuleData($params = [])
|
||||
} else {
|
||||
// 模块地址
|
||||
$module = '\app\plugins\\'.$plugins.'\form\\'.$group.'\\'.ucfirst($control);
|
||||
// 分组不存在则调用不分组的表单
|
||||
if(!class_exists($module))
|
||||
{
|
||||
$module = '\app\plugins\\'.$plugins.'\form\\'.ucfirst($control);
|
||||
}
|
||||
// 模块参数
|
||||
$params['pluginsname'] = $plugins;
|
||||
$params['pluginscontrol'] = $control;
|
||||
|
@ -41,7 +41,7 @@ class Buy extends Common
|
||||
parent::__construct();
|
||||
|
||||
// 是否登录
|
||||
$this->IsLogin();
|
||||
IsUserLogin();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -36,7 +36,7 @@ class Cart extends Common
|
||||
parent::__construct();
|
||||
|
||||
// 是否登录
|
||||
$this->IsLogin();
|
||||
IsUserLogin();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -40,14 +40,14 @@ class Center extends Common
|
||||
if(in_array($this->action_name, ['index']))
|
||||
{
|
||||
// 是否登录
|
||||
$this->IsLogin();
|
||||
IsUserLogin();
|
||||
}
|
||||
} else {
|
||||
// 支付同步返回不验证登录状态
|
||||
if(!in_array($this->action_name, ['respond']))
|
||||
{
|
||||
// 是否登录
|
||||
$this->IsLogin();
|
||||
IsUserLogin();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -211,8 +211,10 @@ class Common extends BaseController
|
||||
$this->system_type = SystemService::SystemTypeValue();
|
||||
$assign['system_type'] = $this->system_type;
|
||||
|
||||
// 公共参数
|
||||
$assign['params'] = $this->data_request;
|
||||
// 公共参数(去除多余的参数、避免给页面url地址造成污染)
|
||||
$temp_params = $this->data_request;
|
||||
unset($temp_params['s'], $temp_params['pluginsname'], $temp_params['pluginscontrol'], $temp_params['pluginsaction']);
|
||||
$assign['params'] = $temp_params;
|
||||
|
||||
// 货币符号
|
||||
$assign['currency_symbol'] = ResourcesService::CurrencyDataSymbol();
|
||||
@ -234,22 +236,6 @@ class Common extends BaseController
|
||||
$this->default_theme = DefaultTheme();
|
||||
$assign['default_theme'] = $this->default_theme;
|
||||
|
||||
// 基础表单数据、去除数组和对象列
|
||||
$form_back_params = $this->data_request;
|
||||
if(!empty($form_back_params) && is_array($form_back_params))
|
||||
{
|
||||
foreach($form_back_params as $k=>$v)
|
||||
{
|
||||
if(is_array($v) || is_object($v))
|
||||
{
|
||||
unset($form_back_params[$k]);
|
||||
}
|
||||
}
|
||||
unset($form_back_params['id'], $form_back_params['form_back_control'], $form_back_params['form_back_action']);
|
||||
}
|
||||
$this->form_back_params = $form_back_params;
|
||||
$assign['form_back_params'] = $this->form_back_params;
|
||||
|
||||
// 当前系统操作名称
|
||||
$this->module_name = RequestModule();
|
||||
$this->controller_name = RequestController();
|
||||
@ -270,11 +256,6 @@ class Common extends BaseController
|
||||
$this->plugins_controller_name = '';
|
||||
$this->plugins_action_name = '';
|
||||
|
||||
// 页面表单操作指定返回、方法默认index
|
||||
$this->form_back_control = empty($this->data_request['form_back_control']) ? $this->controller_name : $this->data_request['form_back_control'];
|
||||
$this->form_back_action = empty($this->data_request['form_back_action']) ? 'index' : $this->data_request['form_back_action'];
|
||||
$this->form_back_url = MyUrl($this->module_name.'/'.$this->form_back_control.'/'.$this->form_back_action, $this->form_back_params);
|
||||
|
||||
// 页面唯一标记
|
||||
$this->page_unique_mark = $this->module_name.'-'.$this->controller_name.'-'.$this->action_name;
|
||||
} else {
|
||||
@ -283,25 +264,46 @@ class Common extends BaseController
|
||||
$this->plugins_controller_name = empty($this->data_request['pluginscontrol']) ? 'index' : $this->data_request['pluginscontrol'];
|
||||
$this->plugins_action_name = empty($this->data_request['pluginsaction']) ? 'index' : $this->data_request['pluginsaction'];
|
||||
|
||||
// 页面表单操作指定返回、方法默认index
|
||||
$this->form_back_control = empty($this->data_request['form_back_control']) ? $this->plugins_controller_name : $this->data_request['form_back_control'];
|
||||
$this->form_back_action = empty($this->data_request['form_back_action']) ? 'index' : $this->data_request['form_back_action'];
|
||||
$this->form_back_url = PluginsHomeUrl($this->plugins_module_name, $this->form_back_control, $this->form_back_action, $this->form_back_params);
|
||||
|
||||
// 页面唯一标记
|
||||
$this->page_unique_mark = $this->module_name.'-'.$this->controller_name.'-'.$this->plugins_module_name.'-'.$this->plugins_controller_name.'-'.$this->plugins_action_name;
|
||||
}
|
||||
$this->plugins_mca = $this->plugins_module_name.$this->plugins_controller_name.$this->plugins_action_name;
|
||||
|
||||
// 页面唯一标记
|
||||
$assign['page_unique_mark'] = $this->page_unique_mark;
|
||||
|
||||
// 当前插件操作名称
|
||||
$assign['plugins_module_name'] = $this->plugins_module_name;
|
||||
$assign['plugins_controller_name'] = $this->plugins_controller_name;
|
||||
$assign['plugins_action_name'] = $this->plugins_action_name;
|
||||
$assign['plugins_mca'] = $this->plugins_mca;
|
||||
|
||||
// 页面唯一标记
|
||||
$assign['page_unique_mark'] = $this->page_unique_mark;
|
||||
|
||||
// 基础表单数据、去除数组和对象列
|
||||
$form_back_params = $this->data_request;
|
||||
if(!empty($form_back_params) && is_array($form_back_params))
|
||||
{
|
||||
foreach($form_back_params as $k=>$v)
|
||||
{
|
||||
if(is_array($v) || is_object($v))
|
||||
{
|
||||
unset($form_back_params[$k]);
|
||||
}
|
||||
}
|
||||
unset($form_back_params['s'], $form_back_params['pluginsname'], $form_back_params['pluginscontrol'], $form_back_params['pluginsaction'], $form_back_params['id'], $form_back_params['form_back_control'], $form_back_params['form_back_action']);
|
||||
}
|
||||
$this->form_back_params = $form_back_params;
|
||||
$assign['form_back_params'] = $this->form_back_params;
|
||||
// 页面表单操作指定返回、方法默认index
|
||||
if(empty($this->plugins_module_name))
|
||||
{
|
||||
$this->form_back_control = empty($this->data_request['form_back_control']) ? $this->controller_name : $this->data_request['form_back_control'];
|
||||
$this->form_back_action = empty($this->data_request['form_back_action']) ? 'index' : $this->data_request['form_back_action'];
|
||||
$this->form_back_url = MyUrl($this->module_name.'/'.$this->form_back_control.'/'.$this->form_back_action, $this->form_back_params);
|
||||
} else {
|
||||
$this->form_back_control = empty($this->data_request['form_back_control']) ? $this->plugins_controller_name : $this->data_request['form_back_control'];
|
||||
$this->form_back_action = empty($this->data_request['form_back_action']) ? 'index' : $this->data_request['form_back_action'];
|
||||
$this->form_back_url = PluginsHomeUrl($this->plugins_module_name, $this->form_back_control, $this->form_back_action, $this->form_back_params);
|
||||
}
|
||||
// 基础表单返回url
|
||||
$assign['form_back_url'] = $this->form_back_url;
|
||||
|
||||
|
@ -35,7 +35,7 @@ class FormTable extends Common
|
||||
parent::__construct();
|
||||
|
||||
// 登录校验
|
||||
$this->IsLogin();
|
||||
IsUserLogin();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -188,7 +188,7 @@ class Goods extends Common
|
||||
public function Favor()
|
||||
{
|
||||
// 是否登录
|
||||
$this->IsLogin();
|
||||
IsUserLogin();
|
||||
|
||||
// 开始处理
|
||||
$params = $this->data_request;
|
||||
|
@ -13,7 +13,7 @@ namespace app\index\controller;
|
||||
use app\layout\service\BaseLayout;
|
||||
use app\service\SeoService;
|
||||
use app\service\AdminService;
|
||||
use app\service\BannerService;
|
||||
use app\service\SlideService;
|
||||
use app\service\GoodsService;
|
||||
use app\service\GoodsCategoryService;
|
||||
use app\service\ArticleService;
|
||||
@ -83,7 +83,7 @@ class Index extends Common
|
||||
// 是否设计模式
|
||||
'is_design' => $is_design,
|
||||
// 首页轮播
|
||||
'banner_list' => BannerService::Banner(),
|
||||
'banner_list' => SlideService::SlideList(),
|
||||
// 文章
|
||||
'article_list' => ArticleService::RecommendedArticleList(),
|
||||
]);
|
||||
|
@ -111,7 +111,7 @@ class Plugins extends Common
|
||||
public function GetClassVars()
|
||||
{
|
||||
$data = [];
|
||||
$vers = get_class_vars(get_class());
|
||||
$vers = get_class_vars(get_class($this));
|
||||
foreach($vers as $k=>$v)
|
||||
{
|
||||
if(property_exists($this, $k))
|
||||
|
@ -93,6 +93,17 @@ class Search extends Common
|
||||
$params['wd'] = AsciiToStr($params['wd']);
|
||||
}
|
||||
|
||||
// 价格滑条
|
||||
if(!empty($params['price']))
|
||||
{
|
||||
$arr = explode('-', $params['price']);
|
||||
if(count($arr) == 2)
|
||||
{
|
||||
$params['price_min'] = $arr[0];
|
||||
$params['price_max'] = $arr[1];
|
||||
}
|
||||
}
|
||||
|
||||
// 模板数据
|
||||
$assign = [
|
||||
// 基础参数
|
||||
@ -107,6 +118,10 @@ class Search extends Common
|
||||
'breadcrumb_data' => $breadcrumb_data,
|
||||
// 列表布局类型
|
||||
'list_layout_value' => $list_layout_value,
|
||||
// 范围滑条组件
|
||||
'is_load_jrange' => 1,
|
||||
// 滑条价格最大金额
|
||||
'range_max_price' => SearchService::SearchGoodsMaxPrice(),
|
||||
];
|
||||
|
||||
// 品牌列表
|
||||
|
@ -333,7 +333,7 @@
|
||||
<!-- 地理位置 -->
|
||||
{{if isset($v['lng']) and isset($v['lat']) and $v['lng'] neq 0 and $v['lat'] neq 0}}
|
||||
<div class="am-margin-left-sm">
|
||||
<a href="javascript:;" class="am-radius am-icon-map-marker submit-map-popup am-background-white am-color-grey am-font-weight-400 am-text-xs am-margin-left-sm" data-lng="{{$v.lng}}" data-lat="{{$v.lat}}"> {{:MyLang('view_map_title')}}</a>
|
||||
<a href="javascript:;" class="am-radius am-icon-map-marker submit-map-popup am-background-white am-color-grey am-font-weight-400 am-text-xs am-margin-left-sm" data-lng="{{$v.lng}}" data-lat="{{$v.lat}}" data-title="{{:MyLang('map_title')}}"> {{:MyLang('view_map_title')}}</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name":"默认主题",
|
||||
"ver":"6.0.0",
|
||||
"ver":"6.1.0",
|
||||
"author":"Devil",
|
||||
"home":"https://shopxo.net/",
|
||||
"is_theme_data_admin": 1
|
||||
|
@ -224,6 +224,11 @@
|
||||
<script type="text/javascript" src="{{$public_host}}static/common/lib/ace-builds/src-min/ace.js"></script>
|
||||
{{/if}}
|
||||
|
||||
<!-- 范围滑条 -->
|
||||
{{if isset($is_load_jrange) and $is_load_jrange eq 1}}
|
||||
<script type="text/javascript" src="{{$public_host}}static/common/lib/jRange/jquery.range.js"></script>
|
||||
{{/if}}
|
||||
|
||||
<!-- 隐藏编辑器初始化 -->
|
||||
<script type="text/javascript">
|
||||
var upload_editor = UE.getEditor("upload-editor-view", {
|
||||
|
@ -1,36 +1,38 @@
|
||||
<p class="powered">
|
||||
{{$home_theme_footer_bottom_powered|raw}} {{$Think.APPLICATION_VERSION}}
|
||||
</p>
|
||||
{{if !empty($home_site_icp)}}
|
||||
<b>|</b>
|
||||
<p class="footer-icp">
|
||||
<a href="https://beian.miit.gov.cn/" target="_blank">
|
||||
<img src="{{:StaticAttachmentUrl('beian-icp-icon.png')}}" alt="{{:MyLang('common.footer_icp_filing_text')}}" />
|
||||
{{$home_site_icp}}
|
||||
</a>
|
||||
<div class="footer-filing-content theme-data-edit-event" data-module="site_filing">
|
||||
<p class="powered">
|
||||
{{$home_theme_footer_bottom_powered|raw}} {{$Think.APPLICATION_VERSION}}
|
||||
</p>
|
||||
{{/if}}
|
||||
{{if !empty($home_site_security_record_name)}}
|
||||
<b>|</b>
|
||||
<p class="footer-icp">
|
||||
<a {{if empty($home_site_security_record_url)}}href="javascript:;"{{else /}}href="{{$home_site_security_record_url}}" target="_blank"{{/if}}>
|
||||
<img src="{{:StaticAttachmentUrl('beian-gongan-icon.png')}}" alt="{{:MyLang('common.footer_public_security_filing_text')}}" />
|
||||
{{$home_site_security_record_name}}
|
||||
</a>
|
||||
</p>
|
||||
{{/if}}
|
||||
{{if !empty($home_site_company_license)}}
|
||||
<b>|</b>
|
||||
<p class="footer-icp">
|
||||
<a href="{{$home_site_company_license}}" target="_blank">
|
||||
<img src="{{:StaticAttachmentUrl('beian-company-license-icon.png')}}" alt="{{:MyLang('common.footer_business_license_text')}}" />
|
||||
{{:MyLang('common.footer_business_license_text')}}
|
||||
</a>
|
||||
</p>
|
||||
{{/if}}
|
||||
{{if !empty($home_site_telecom_license)}}
|
||||
<b>|</b>
|
||||
<p class="footer-icp">
|
||||
<a href="javascript:;">{{$home_site_telecom_license}}</a>
|
||||
</p>
|
||||
{{/if}}
|
||||
{{if !empty($home_site_icp)}}
|
||||
<b>|</b>
|
||||
<p class="footer-icp">
|
||||
<a href="https://beian.miit.gov.cn/" target="_blank">
|
||||
<img src="{{:StaticAttachmentUrl('beian-icp-icon.png')}}" alt="{{:MyLang('common.footer_icp_filing_text')}}" />
|
||||
{{$home_site_icp}}
|
||||
</a>
|
||||
</p>
|
||||
{{/if}}
|
||||
{{if !empty($home_site_security_record_name)}}
|
||||
<b>|</b>
|
||||
<p class="footer-icp">
|
||||
<a {{if empty($home_site_security_record_url)}}href="javascript:;"{{else /}}href="{{$home_site_security_record_url}}" target="_blank"{{/if}}>
|
||||
<img src="{{:StaticAttachmentUrl('beian-gongan-icon.png')}}" alt="{{:MyLang('common.footer_public_security_filing_text')}}" />
|
||||
{{$home_site_security_record_name}}
|
||||
</a>
|
||||
</p>
|
||||
{{/if}}
|
||||
{{if !empty($home_site_company_license)}}
|
||||
<b>|</b>
|
||||
<p class="footer-icp">
|
||||
<a href="{{$home_site_company_license}}" target="_blank">
|
||||
<img src="{{:StaticAttachmentUrl('beian-company-license-icon.png')}}" alt="{{:MyLang('common.footer_business_license_text')}}" />
|
||||
{{:MyLang('common.footer_business_license_text')}}
|
||||
</a>
|
||||
</p>
|
||||
{{/if}}
|
||||
{{if !empty($home_site_telecom_license)}}
|
||||
<b>|</b>
|
||||
<p class="footer-icp">
|
||||
<a href="javascript:;">{{$home_site_telecom_license}}</a>
|
||||
</p>
|
||||
{{/if}}
|
||||
</div>
|
@ -49,6 +49,11 @@
|
||||
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/hiprint/css/print-lock.css" />
|
||||
{{/if}}
|
||||
|
||||
<!-- 范围滑条 -->
|
||||
{{if isset($is_load_jrange) and $is_load_jrange eq 1}}
|
||||
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/jRange/jquery.range.css?v={{:MyC('home_static_cache_version')}}" />
|
||||
{{/if}}
|
||||
|
||||
<!-- 插件 -->
|
||||
{{if !empty($static_path_data['plugins_css'])}}
|
||||
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/{{$static_path_data.plugins_css}}?v={{:MyC('home_static_cache_version')}}" />
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div class="nav-seasrch header-nav-simple {{if !isset($module_data['is_sm_hide']) or $module_data['is_sm_hide'] eq 1}}am-hide-sm-only{{/if}}">
|
||||
<div class="am-container">
|
||||
<div class="logo">
|
||||
<div class="logo theme-data-edit-event" data-module="site_base">
|
||||
<a href="{{$home_url}}">
|
||||
<img src="{{:AttachmentPathViewHandle(MyC('home_site_logo'))}}" alt="{{:MyC('home_seo_site_title')}}" />
|
||||
</a>
|
||||
|
@ -2,7 +2,7 @@
|
||||
<!-- 搜索框 start -->
|
||||
<div class="nav-search white am-hide-sm-only">
|
||||
<div class="am-container">
|
||||
<div class="logo-big">
|
||||
<div class="logo-big theme-data-edit-event" data-module="site_base">
|
||||
<a href="{{$home_url}}">
|
||||
<img src="{{:AttachmentPathViewHandle(MyC('home_site_logo'))}}" alt="{{:MyC('home_seo_site_title')}}" />
|
||||
</a>
|
||||
|
@ -2,7 +2,7 @@
|
||||
<div class="nav-switch-btn plugins-admin-nav-btn-container {{$module_data.plugins}}">
|
||||
{{foreach $module_data.nav_data as $k=>$v}}
|
||||
{{if !isset($v.is_show) or $v.is_show eq 1}}
|
||||
<a href="{{if empty($v['url'])}}javascript:;{{else /}}{{$v.url}}{{/if}}" class="item {{if (isset($params['type']) and isset($v['type']) and $params['type'] eq $v['type']) or (!empty($params['pluginscontrol']) and !empty($v['control']) and $params['pluginscontrol'] eq $v['control']) or (!isset($params['type']) and isset($v['type']) and $k eq 0)}} am-active{{/if}}" data-key="{{if isset($v['type'])}}{{$v.type}}{{/if}}">{{$v.name}}</a>
|
||||
<a href="{{if empty($v['url'])}}javascript:;{{else /}}{{$v.url}}{{/if}}" class="item {{if (isset($params['type']) and isset($v['type']) and $params['type'] eq $v['type']) or (!empty($plugins_controller_name) and !empty($v['control']) and $plugins_controller_name eq $v['control']) or (!isset($params['type']) and isset($v['type']) and $k eq 0)}} am-active{{/if}}" data-key="{{if isset($v['type'])}}{{$v.type}}{{/if}}">{{$v.name}}</a>
|
||||
{{/if}}
|
||||
{{/foreach}}
|
||||
</div>
|
||||
|
@ -6,7 +6,7 @@
|
||||
{{foreach $user_left_menu as $k=>$v}}
|
||||
{{if $v.is_show eq 1}}
|
||||
{{if empty($v['item'])}}
|
||||
<li class="{{if isset($v['contains']) and ((in_array(strtolower($module_name.$controller_name.$action_name), $v['contains']) and isset($v['is_system']) and $v['is_system'] eq 1 and !isset($params['pluginsname'])) or (isset($params['pluginsname']) and isset($params['pluginscontrol']) and isset($params['pluginsaction']) and in_array(strtolower($params['pluginsname'].$params['pluginscontrol'].$params['pluginsaction']), $v['contains']) and (!isset($v['is_system']) or $v['is_system'] neq 1)))}} am-active{{/if}}" >
|
||||
<li class="{{if isset($v['contains']) and ((in_array(strtolower($module_name.$controller_name.$action_name), $v['contains']) and isset($v['is_system']) and $v['is_system'] eq 1) or (!empty($plugins_module_name) and !empty($plugins_controller_name) and !empty($plugins_action_name) and in_array(strtolower($plugins_module_name.$plugins_controller_name.$plugins_action_name), $v['contains']) and (!isset($v['is_system']) or $v['is_system'] neq 1)))}} am-active{{/if}}" >
|
||||
<a href="{{$v.url}}">{{if !empty($v['icon'])}}<i class="iconfont {{$v.icon}}"></i>{{/if}} {{$v.name}}</a>
|
||||
</li>
|
||||
{{else /}}
|
||||
@ -15,7 +15,7 @@
|
||||
<ul class="am-list am-collapse user-sidebar-sub am-in" id="collapse-nav-{{$k}}">
|
||||
{{foreach $v.item as $vs}}
|
||||
{{if $vs.is_show eq 1}}
|
||||
<li class="{{if isset($vs['contains']) and ((in_array(strtolower($module_name.$controller_name.$action_name), $vs['contains']) and isset($vs['is_system']) and $vs['is_system'] eq 1 and !isset($params['pluginsname'])) or (isset($params['pluginsname']) and isset($params['pluginscontrol']) and isset($params['pluginsaction']) and in_array(strtolower($params['pluginsname'].$params['pluginscontrol'].$params['pluginsaction']), $vs['contains']) and (!isset($vs['is_system']) or $vs['is_system'] neq 1)))}} am-active{{/if}}">
|
||||
<li class="{{if isset($vs['contains']) and ((in_array(strtolower($module_name.$controller_name.$action_name), $vs['contains']) and isset($vs['is_system']) and $vs['is_system'] eq 1) or (!empty($plugins_module_name) and !empty($plugins_controller_name) and !empty($plugins_action_name) and in_array(strtolower($plugins_module_name.$plugins_controller_name.$plugins_action_name), $vs['contains']) and (!isset($vs['is_system']) or $vs['is_system'] neq 1)))}} am-active{{/if}}">
|
||||
<a href="{{$vs.url}}" class="am-cf">{{$vs.name}}</a>
|
||||
</li>
|
||||
{{/if}}
|
||||
|
@ -21,7 +21,7 @@
|
||||
{{:ModuleInclude('public/user_center_main_title')}}
|
||||
|
||||
{{foreach $safety_panel_list as $v}}
|
||||
<section class="am-panel am-panel-default am-radius am-panel-{{if (empty($data[$v['type']]) and empty($v['msg'])) or ($v['type'] eq 'logout')}}danger{{else /}}default{{/if}}">
|
||||
<section class="am-panel am-panel-default am-radius am-nbfc am-panel-{{if (empty($data[$v['type']]) and empty($v['msg'])) or ($v['type'] eq 'logout')}}danger{{else /}}default{{/if}}">
|
||||
<header class="am-panel-hd">
|
||||
<h3 class="am-panel-title">{{$v.title}}</h3>
|
||||
</header>
|
||||
|
@ -25,10 +25,6 @@
|
||||
])}}
|
||||
<!-- form start -->
|
||||
<form class="am-form form-validation" action="{{:MyUrl('index/safety/accountsupdate')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('index/safety/index')}}">
|
||||
<legend>
|
||||
<span class="am-text-default">{{:MyLang('safety.mobile_new_title')}}</span>
|
||||
<a href="{{:MyUrl('index/safety/index')}}" class="am-fr am-text-xs am-margin-top-sm am-icon-mail-reply"> {{:MyLang('retreat_title')}}</a>
|
||||
</legend>
|
||||
<div class="am-form-group">
|
||||
<label>{{:MyLang('common_service.safety.form_item_mobile')}}</label>
|
||||
<input type="text" name="accounts" class="am-form-field am-radius" id="accounts" placeholder="{{:MyLang('common_service.safety.form_item_mobile')}}" pattern="{{:MyConst('common_regex_mobile')}}" data-validation-message="{{:MyLang('common_service.safety.form_item_mobile_message')}}" required />
|
||||
|
@ -18,6 +18,24 @@
|
||||
<!-- 排序列表 -->
|
||||
{{:ModuleInclude('search/module/sort_nav/content', empty($module_data) ? [] : $module_data)}}
|
||||
|
||||
<!-- 价格划条 -->
|
||||
<li class="sort-nav-map-price">
|
||||
<div class="sort-nav-map-price-content am-radius">
|
||||
<div class="am-form-inline sort-nav-map-price-input">
|
||||
<input type="number" step="0.01" min="0" class="am-form-field am-radius sort-nav-map-price-input-min" value="{{if isset($params['price_min'])}}{{$params.price_min}}{{/if}}" placeholder="{{:MyLang('price_min_title')}}" />
|
||||
<span class="am-text-grey">-</span>
|
||||
<input type="number" step="0.01" min="0" class="am-form-field am-radius sort-nav-map-price-input-max" value="{{if isset($params['price_max'])}}{{$params.price_max}}{{/if}}" placeholder="{{:MyLang('price_max_title')}}" />
|
||||
</div>
|
||||
<div class="sort-nav-map-price-range-slider-input am-margin-top-lg am-padding-left-sm">
|
||||
<input type="hidden" class="range-slider-input" value="{{if isset($params['price_min'])}}{{$params.price_min}}{{else /}}0{{/if}},{{if isset($params['price_max'])}}{{$params.price_max}}{{else /}}0{{/if}}" data-to="{{if empty($range_max_price)}}500{{else /}}{{$range_max_price}}{{/if}}" />
|
||||
</div>
|
||||
<div class="am-text-right am-margin-top am-padding-right-sm sort-nav-map-price-bottom-operate">
|
||||
<span class="am-text-blue am-margin-right-lg sort-nav-map-price-clear">{{:MyLang('clear_title')}}</span>
|
||||
<button type="button" class="am-btn am-btn-default am-radius am-btn-xs sort-nav-map-price-submit">{{:MyLang('confirm_title')}}</button>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<!-- 搜索页面排序导航条内尾部钩子 -->
|
||||
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
|
||||
<div class="plugins-tag">
|
||||
|
@ -39,6 +39,7 @@ return [
|
||||
'select_reverse_name' => '反選',
|
||||
'select_all_name' => '全選',
|
||||
'loading_tips' => '加載中…',
|
||||
'goods_stock_empty_tips' => '請輸入購買數量',
|
||||
'goods_stock_max_tips' => '最大限購數量',
|
||||
'goods_stock_min_tips' => '最低起購數量',
|
||||
'goods_inventory_number_tips' => '庫存數量',
|
||||
@ -205,6 +206,7 @@ return [
|
||||
'quit_success' => '退出成功',
|
||||
'no_data' => '沒有相關資料',
|
||||
'no_goods' => '沒有相關商品',
|
||||
'no_spec' => '沒有相關規格',
|
||||
'params_error_tips' => '參數錯誤',
|
||||
'params_empty_tips' => '參數為空',
|
||||
'content_params_empty_tips' => '內容參數為空',
|
||||
@ -319,6 +321,8 @@ return [
|
||||
'register_time_title' => '註冊時間',
|
||||
'add_time_title' => '添加時間',
|
||||
'upd_time_title' => '更新時間',
|
||||
'price_min_title' => '最低價格',
|
||||
'price_max_title' => '最高價格',
|
||||
'back_home_title' => '回到首頁',
|
||||
'shop_home_title' => '商城首頁',
|
||||
'home_title' => '首頁',
|
||||
@ -379,8 +383,11 @@ return [
|
||||
'close_title' => '關閉',
|
||||
'open_title' => '打開',
|
||||
'number_title' => '數量',
|
||||
'spec_title' => '規格',
|
||||
'inventory_title' => '庫存',
|
||||
'weight_title' => '重量',
|
||||
'volume_title' => '體積',
|
||||
'coding_title' => '編碼',
|
||||
'barcode_title' => '條碼',
|
||||
'enter_inventory_title' => '入庫',
|
||||
'sales_title' => '銷量',
|
||||
'access_title' => '訪問',
|
||||
@ -543,6 +550,7 @@ return [
|
||||
'goods_booking_title' => '立即預約',
|
||||
'goods_show_title' => '立即諮詢',
|
||||
'goods_cart_title' => '加入購物車',
|
||||
'goods_buy_number_title' => '購買數量',
|
||||
'goods_no_inventory_title' => '沒貨了',
|
||||
'goods_already_nullify_title' => '已作廢',
|
||||
'goods_already_invalid_title' => '已失效',
|
||||
|
@ -39,6 +39,7 @@ return [
|
||||
'select_reverse_name' => 'Cancel',
|
||||
'select_all_name' => 'All',
|
||||
'loading_tips' => 'Loading...',
|
||||
'goods_stock_empty_tips' => 'Please enter the purchase quantity',
|
||||
'goods_stock_max_tips' => 'Maximum purchase limit',
|
||||
'goods_stock_min_tips' => 'Minimum purchase quantity',
|
||||
'goods_inventory_number_tips' => 'Inventory quantity',
|
||||
@ -205,6 +206,7 @@ return [
|
||||
'quit_success' => 'Quit Succeeded',
|
||||
'no_data' => 'No Relevant Data',
|
||||
'no_goods' => 'No related Goods',
|
||||
'no_spec' => 'No relevant specifications available',
|
||||
'params_error_tips' => 'Params Error',
|
||||
'params_empty_tips' => 'The parameter is empty',
|
||||
'content_params_empty_tips' => 'Content parameter is empty',
|
||||
@ -319,6 +321,8 @@ return [
|
||||
'register_time_title' => 'Register Time',
|
||||
'add_time_title' => 'Add Time',
|
||||
'upd_time_title' => 'Update Time',
|
||||
'price_min_title' => 'Lowest price',
|
||||
'price_max_title' => 'Maximum price',
|
||||
'back_home_title' => 'Back Home',
|
||||
'shop_home_title' => 'Shop Home',
|
||||
'home_title' => 'Home',
|
||||
@ -379,8 +383,11 @@ return [
|
||||
'close_title' => 'Close',
|
||||
'open_title' => 'Open',
|
||||
'number_title' => 'Number',
|
||||
'spec_title' => 'Spec',
|
||||
'inventory_title' => 'Inventory',
|
||||
'weight_title' => 'Weight',
|
||||
'volume_title' => 'Volume',
|
||||
'coding_title' => 'Encoding',
|
||||
'barcode_title' => 'Barcode',
|
||||
'enter_inventory_title' => 'Enter Inventory',
|
||||
'sales_title' => 'Sales',
|
||||
'access_title' => 'Access',
|
||||
@ -543,6 +550,7 @@ return [
|
||||
'goods_booking_title' => 'Booking',
|
||||
'goods_show_title' => 'Consult',
|
||||
'goods_cart_title' => 'Add Cart',
|
||||
'goods_buy_number_title' => 'Purchase quantity',
|
||||
'goods_no_inventory_title' => 'No Stock',
|
||||
'goods_already_nullify_title' => 'Nullify',
|
||||
'goods_already_invalid_title' => 'Invalid',
|
||||
|
@ -39,6 +39,7 @@ return [
|
||||
'select_reverse_name' => 'Anti - Elección',
|
||||
'select_all_name' => 'Selección completa',
|
||||
'loading_tips' => 'Cargado...',
|
||||
'goods_stock_empty_tips' => 'Por favor, introduzca la cantidad de compra',
|
||||
'goods_stock_max_tips' => 'Número máximo de restricciones de compra',
|
||||
'goods_stock_min_tips' => 'Número mínimo de compras iniciales',
|
||||
'goods_inventory_number_tips' => 'Cantidad de inventario',
|
||||
@ -205,6 +206,7 @@ return [
|
||||
'quit_success' => 'Salida exitosa',
|
||||
'no_data' => 'No hay datos relevantes',
|
||||
'no_goods' => 'No hay productos relacionados',
|
||||
'no_spec' => 'No hay especificaciones relevantes',
|
||||
'params_error_tips' => 'Error de parámetros',
|
||||
'params_empty_tips' => 'El parámetro está vacío',
|
||||
'content_params_empty_tips' => 'El parámetro de contenido está vacío',
|
||||
@ -319,6 +321,8 @@ return [
|
||||
'register_time_title' => 'Tiempo de registro',
|
||||
'add_time_title' => 'Añadir tiempo',
|
||||
'upd_time_title' => 'Tiempo de actualización',
|
||||
'price_min_title' => 'Precio mínimo',
|
||||
'price_max_title' => 'Precio máximo',
|
||||
'back_home_title' => 'Volver a la página de inicio',
|
||||
'shop_home_title' => 'Página de inicio del centro comercial',
|
||||
'home_title' => 'Página de inicio',
|
||||
@ -379,8 +383,11 @@ return [
|
||||
'close_title' => 'Cierre',
|
||||
'open_title' => 'Abrir',
|
||||
'number_title' => 'Cantidad',
|
||||
'spec_title' => 'Especificaciones',
|
||||
'inventory_title' => 'Inventario',
|
||||
'weight_title' => "Peso",
|
||||
'volume_title' => "Volumen",
|
||||
'coding_title' => 'codificación' ",
|
||||
'barcode_title' => 'código de barras' ",
|
||||
'enter_inventory_title' => 'Almacenamiento',
|
||||
'sales_title' => 'Ventas',
|
||||
'access_title' => 'Visitas',
|
||||
@ -543,6 +550,7 @@ return [
|
||||
'goods_booking_title' => 'Hacer una cita de inmediato',
|
||||
'goods_show_title' => 'Consulta inmediata',
|
||||
'goods_cart_title' => 'Carrito de compras',
|
||||
'goods_buy_number_title' => 'Número de compras',
|
||||
'goods_no_inventory_title' => 'Se acabó.',
|
||||
'goods_already_nullify_title' => 'Anulado',
|
||||
'goods_already_invalid_title' => 'Caducado',
|
||||
|
@ -39,6 +39,7 @@ return [
|
||||
'select_reverse_name' => '反选',
|
||||
'select_all_name' => '全选',
|
||||
'loading_tips' => '加载中...',
|
||||
'goods_stock_empty_tips' => '请输入购买数量',
|
||||
'goods_stock_max_tips' => '最大限购数量',
|
||||
'goods_stock_min_tips' => '最低起购数量',
|
||||
'goods_inventory_number_tips' => '库存数量',
|
||||
@ -205,6 +206,7 @@ return [
|
||||
'quit_success' => '退出成功',
|
||||
'no_data' => '没有相关数据',
|
||||
'no_goods' => '没有相关商品',
|
||||
'no_spec' => '没有相关规格',
|
||||
'params_error_tips' => '参数错误',
|
||||
'params_empty_tips' => '参数为空',
|
||||
'content_params_empty_tips' => '内容参数为空',
|
||||
@ -319,6 +321,8 @@ return [
|
||||
'register_time_title' => '注册时间',
|
||||
'add_time_title' => '添加时间',
|
||||
'upd_time_title' => '更新时间',
|
||||
'price_min_title' => '最低价格',
|
||||
'price_max_title' => '最高价格',
|
||||
'back_home_title' => '回到首页',
|
||||
'shop_home_title' => '商城首页',
|
||||
'home_title' => '首页',
|
||||
@ -379,8 +383,11 @@ return [
|
||||
'close_title' => '关闭',
|
||||
'open_title' => '打开',
|
||||
'number_title' => '数量',
|
||||
'spec_title' => '规格',
|
||||
'inventory_title' => '库存',
|
||||
'weight_title' => '重量',
|
||||
'volume_title' => '体积',
|
||||
'coding_title' => '编码',
|
||||
'barcode_title' => '条码',
|
||||
'enter_inventory_title' => '入库',
|
||||
'sales_title' => '销量',
|
||||
'access_title' => '访问',
|
||||
@ -543,6 +550,7 @@ return [
|
||||
'goods_booking_title' => '立即预约',
|
||||
'goods_show_title' => '立即咨询',
|
||||
'goods_cart_title' => '加入购物车',
|
||||
'goods_buy_number_title' => '购买数量',
|
||||
'goods_no_inventory_title' => '没货了',
|
||||
'goods_already_nullify_title' => '已作废',
|
||||
'goods_already_invalid_title' => '已失效',
|
||||
|
@ -436,9 +436,10 @@ class FormHandleModule
|
||||
*/
|
||||
public function FormDataListHandle()
|
||||
{
|
||||
if(!empty($this->form_data['data']) && !empty($this->data_list))
|
||||
if(!empty($this->data_list))
|
||||
{
|
||||
$form_data = $this->form_data['data'];
|
||||
// 表单配置数据
|
||||
$form_data = empty($this->form_data['data']) ? [] : $this->form_data['data'];
|
||||
|
||||
// 基础数据
|
||||
$base = $this->FormDataBase($form_data);
|
||||
@ -561,69 +562,8 @@ class FormHandleModule
|
||||
}
|
||||
|
||||
// 其他单独字段数据处理
|
||||
foreach($v as $ks=>$vs)
|
||||
{
|
||||
// 时间处理
|
||||
if($is_handle_time_field && substr($ks, -5) == '_time')
|
||||
{
|
||||
$format = empty($handle_time_format) ? 'Y-m-d H:i:s' : (is_array($handle_time_format) ? (empty($handle_time_format[$ks]) ? 'Y-m-d H:i:s' : $handle_time_format[$ks]) : $handle_time_format);
|
||||
$v[$ks] = empty($vs) ? '' : (is_numeric($vs) ? date($format, $vs) : $vs);
|
||||
}
|
||||
|
||||
// 固定值名称处理
|
||||
if($is_fixed_name_field && !empty($fixed_name_data) && is_array($fixed_name_data) && array_key_exists($ks, $fixed_name_data) && !empty($fixed_name_data[$ks]['data']))
|
||||
{
|
||||
$temp_data = $fixed_name_data[$ks]['data'];
|
||||
$temp_field = empty($fixed_name_data[$ks]['field']) ? $ks.'_name' : $fixed_name_data[$ks]['field'];
|
||||
$temp_key = empty($fixed_name_data[$ks]['key']) ? 'name' : $fixed_name_data[$ks]['key'];
|
||||
$temp = array_key_exists($vs, $temp_data) ? $temp_data[$vs] : '';
|
||||
$v[$temp_field] = empty($temp) ? '' : (is_array($temp) ? (isset($temp[$temp_key]) ? $temp[$temp_key] : '') : $temp);
|
||||
}
|
||||
|
||||
// 附件字段处理
|
||||
if($is_handle_annex_field && !empty($handle_annex_fields) && in_array($ks, $handle_annex_fields) && !empty($vs))
|
||||
{
|
||||
$v[$ks] = ResourcesService::AttachmentPathViewHandle($vs);
|
||||
}
|
||||
|
||||
// 展示字段指定数组转换处理、默认增加 _name 后缀
|
||||
if(!empty($field_show_data) && array_key_exists($ks, $field_show_data))
|
||||
{
|
||||
$temp = $field_show_data[$ks];
|
||||
$value = array_key_exists($vs, $temp['view_data']) ? $temp['view_data'][$vs] : null;
|
||||
$key = $ks.'_name';
|
||||
if($value === null)
|
||||
{
|
||||
$v[$key] = '';
|
||||
} else {
|
||||
if(is_array($value))
|
||||
{
|
||||
$v[$key] = (!empty($temp['view_data_key']) && array_key_exists($temp['view_data_key'], $value)) ? $value[$temp['view_data_key']] : '';
|
||||
} else {
|
||||
$v[$key] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 状态字段按照搜索列表转换处理、默认增加 _name 后缀
|
||||
if(!empty($field_status_data) && array_key_exists($ks, $field_status_data) && !empty($field_status_data[$ks]['search_config']) && !empty($field_status_data[$ks]['search_config']['data']))
|
||||
{
|
||||
$temp = $field_status_data[$ks]['search_config'];
|
||||
$value = array_key_exists($vs, $temp['data']) ? $temp['data'][$vs] : null;
|
||||
$key = $ks.'_name';
|
||||
if($value === null)
|
||||
{
|
||||
$v[$key] = '';
|
||||
} else {
|
||||
if(is_array($value))
|
||||
{
|
||||
$v[$key] = (!empty($temp['data_name']) && array_key_exists($temp['data_name'], $value)) ? $value[$temp['data_name']] : '';
|
||||
} else {
|
||||
$v[$key] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach($v as $ks=>&$vs)
|
||||
{
|
||||
// json数据处理
|
||||
if($is_json_data_handle && !empty($json_config_data) && array_key_exists($ks, $json_config_data) && !empty($vs) && !is_array($vs))
|
||||
{
|
||||
@ -672,13 +612,97 @@ class FormHandleModule
|
||||
}
|
||||
}
|
||||
}
|
||||
$v[$ks] = $temp_json_data;
|
||||
$vs = $temp_json_data;
|
||||
}
|
||||
|
||||
// 时间处理
|
||||
if($is_handle_time_field && substr($ks, -5) == '_time')
|
||||
{
|
||||
$format = empty($handle_time_format) ? 'Y-m-d H:i:s' : (is_array($handle_time_format) ? (empty($handle_time_format[$ks]) ? 'Y-m-d H:i:s' : $handle_time_format[$ks]) : $handle_time_format);
|
||||
$vs = empty($vs) ? '' : (is_numeric($vs) ? date($format, $vs) : $vs);
|
||||
}
|
||||
|
||||
// 固定值名称处理
|
||||
if($is_fixed_name_field && !empty($fixed_name_data) && is_array($fixed_name_data) && array_key_exists($ks, $fixed_name_data) && !empty($fixed_name_data[$ks]['data']))
|
||||
{
|
||||
$temp_data = $fixed_name_data[$ks]['data'];
|
||||
$temp_field = empty($fixed_name_data[$ks]['field']) ? $ks.'_name' : $fixed_name_data[$ks]['field'];
|
||||
$temp_key = empty($fixed_name_data[$ks]['key']) ? 'name' : $fixed_name_data[$ks]['key'];
|
||||
// 是否数组
|
||||
if(is_array($vs))
|
||||
{
|
||||
$temp_arr = [];
|
||||
foreach($vs as $fixed_v)
|
||||
{
|
||||
if(!is_array($fixed_v) && array_key_exists($fixed_v, $temp_data))
|
||||
{
|
||||
$temp = $temp_data[$fixed_v];
|
||||
if(is_array($temp))
|
||||
{
|
||||
if(isset($temp[$temp_key]))
|
||||
{
|
||||
$temp_arr[] = $temp[$temp_key];
|
||||
}
|
||||
} else {
|
||||
$temp_arr[] = $temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
$v[$temp_field] = empty($temp_arr) ? '' : implode(', ', $temp_arr);
|
||||
} else {
|
||||
$temp = array_key_exists($vs, $temp_data) ? $temp_data[$vs] : '';
|
||||
$v[$temp_field] = empty($temp) ? '' : (is_array($temp) ? (isset($temp[$temp_key]) ? $temp[$temp_key] : '') : $temp);
|
||||
}
|
||||
}
|
||||
|
||||
// 附件字段处理
|
||||
if($is_handle_annex_field && !empty($handle_annex_fields) && in_array($ks, $handle_annex_fields) && !empty($vs))
|
||||
{
|
||||
$vs = ResourcesService::AttachmentPathViewHandle($vs);
|
||||
}
|
||||
|
||||
// 展示字段指定数组转换处理、默认增加 _name 后缀
|
||||
if(!empty($field_show_data) && array_key_exists($ks, $field_show_data))
|
||||
{
|
||||
$temp = $field_show_data[$ks];
|
||||
$value = array_key_exists($vs, $temp['view_data']) ? $temp['view_data'][$vs] : null;
|
||||
$key = $ks.'_name';
|
||||
if($value === null)
|
||||
{
|
||||
$v[$key] = '';
|
||||
} else {
|
||||
if(is_array($value))
|
||||
{
|
||||
$v[$key] = (!empty($temp['view_data_key']) && array_key_exists($temp['view_data_key'], $value)) ? $value[$temp['view_data_key']] : '';
|
||||
} else {
|
||||
$v[$key] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 状态字段按照搜索列表转换处理、默认增加 _name 后缀
|
||||
if(!empty($field_status_data) && array_key_exists($ks, $field_status_data) && !empty($field_status_data[$ks]['search_config']) && !empty($field_status_data[$ks]['search_config']['data']))
|
||||
{
|
||||
$temp = $field_status_data[$ks]['search_config'];
|
||||
$value = array_key_exists($vs, $temp['data']) ? $temp['data'][$vs] : null;
|
||||
$key = $ks.'_name';
|
||||
if($value === null)
|
||||
{
|
||||
$v[$key] = '';
|
||||
} else {
|
||||
if(is_array($value))
|
||||
{
|
||||
$v[$key] = (!empty($temp['data_name']) && array_key_exists($temp['data_name'], $value)) ? $value[$temp['data_name']] : '';
|
||||
} else {
|
||||
$v[$key] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 换行转数组
|
||||
if($is_ln_to_array_handle && !empty($ln_to_array_fields) && in_array($ks, $ln_to_array_fields))
|
||||
{
|
||||
$v[$ks] = empty($vs) ? [] : (is_array($vs) ? $vs : explode("\n", $vs));
|
||||
$vs = empty($vs) ? [] : (is_array($vs) ? $vs : explode("\n", $vs));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1751,16 +1775,17 @@ class FormHandleModule
|
||||
* @param [array] $data [数据列表]
|
||||
* @param [array] $params [参数数据]
|
||||
*/
|
||||
public function FormTableDataListHandle($data, $params)
|
||||
public function FormTableDataListHandle($data, $params = [])
|
||||
{
|
||||
// 空或非数组则不处理
|
||||
if(empty($data) || !is_array($data) || empty($params) || !is_array($params))
|
||||
// 数据为空则不处理
|
||||
if(empty($data) || !is_array($data))
|
||||
{
|
||||
return $data;
|
||||
}
|
||||
$this->data_list = $data;
|
||||
|
||||
// 获取表格模型处理表格列表数据
|
||||
$module = FormModulePath($params);
|
||||
$module = FormModulePath(input());
|
||||
if(empty($module))
|
||||
{
|
||||
return $data;
|
||||
@ -1773,34 +1798,11 @@ class FormHandleModule
|
||||
return $data;
|
||||
}
|
||||
|
||||
// 获取表单配置数据处理
|
||||
$form = array_column($this->form_data['form'], null, 'view_key');
|
||||
foreach($data as $k=>&$v)
|
||||
{
|
||||
if(empty($v) || !is_array($v))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
foreach($v as $ks=>$vs)
|
||||
{
|
||||
// view_type为field
|
||||
// 必须存在view_data数据
|
||||
if(!array_key_exists($ks, $form) || empty($form[$ks]['view_data']) || !is_array($form[$ks]['view_data']))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// 数据处理
|
||||
$this->FormDataListHandle();
|
||||
|
||||
// 是否指定view_data_key配置、指定则view_data为二维数组
|
||||
$key = $ks.'_name';
|
||||
if(empty($form[$ks]['view_data_key']))
|
||||
{
|
||||
$v[$key] = isset($form[$ks]['view_data'][$vs]) ? $form[$ks]['view_data'][$vs] : '';
|
||||
} else {
|
||||
$v[$key] = (isset($form[$ks]['view_data'][$vs]) && isset($form[$ks]['view_data'][$vs][$form[$ks]['view_data_key']])) ? $form[$ks]['view_data'][$vs][$form[$ks]['view_data_key']] : '';
|
||||
}
|
||||
}
|
||||
}
|
||||
return $data;
|
||||
// 返回处理的数据
|
||||
return $this->data_list;
|
||||
}
|
||||
}
|
||||
?>
|
@ -43,9 +43,8 @@ class AppCenterNavService
|
||||
'error_msg' => MyLang('common_service.appcenternav.form_item_name_message'),
|
||||
],
|
||||
[
|
||||
'checked_type' => 'in',
|
||||
'checked_type' => 'empty',
|
||||
'key_name' => 'platform',
|
||||
'checked_data' => array_column(MyConst('common_platform_type'), 'value'),
|
||||
'error_msg' => MyLang('form_platform_message'),
|
||||
],
|
||||
[
|
||||
@ -93,7 +92,7 @@ class AppCenterNavService
|
||||
// 数据
|
||||
$data = [
|
||||
'name' => $params['name'],
|
||||
'platform' => $params['platform'],
|
||||
'platform' => empty($params['platform']) ? '' : json_encode(explode(',', $params['platform'])),
|
||||
'event_type' => (isset($params['event_type']) && $params['event_type'] != '') ? intval($params['event_type']) : -1,
|
||||
'event_value' => $params['event_value'],
|
||||
'images_url' => $attachment['data']['images_url'],
|
||||
@ -209,15 +208,41 @@ class AppCenterNavService
|
||||
$data = MyCache($key);
|
||||
if(empty($data))
|
||||
{
|
||||
$field = 'id,name,images_url,event_value,event_type,desc';
|
||||
$field = 'id,name,images_url,event_value,event_type,desc,platform';
|
||||
$order_by = 'sort asc,id asc';
|
||||
$data = Db::name('AppCenterNav')->field($field)->where(['platform'=>APPLICATION_CLIENT_TYPE, 'is_enable'=>1])->order($order_by)->select()->toArray();
|
||||
if(!empty($data))
|
||||
$list = Db::name('AppCenterNav')->field($field)->where(['is_enable'=>1])->order($order_by)->select()->toArray();
|
||||
if(!empty($list))
|
||||
{
|
||||
foreach($data as &$v)
|
||||
$data = [];
|
||||
foreach($list as &$v)
|
||||
{
|
||||
$v['images_url'] = ResourcesService::AttachmentPathViewHandle($v['images_url']);
|
||||
$v['event_value'] = empty($v['event_value']) ? null : htmlspecialchars_decode($v['event_value']);
|
||||
// 平台
|
||||
if(!empty($v['platform']))
|
||||
{
|
||||
// json数据则必须存在其中,则为字符串等于(老数据)
|
||||
$platform = json_decode($v['platform'], true);
|
||||
if((!empty($platform) && is_array($platform) && in_array(APPLICATION_CLIENT_TYPE, $platform)) || ($v['platform'] == APPLICATION_CLIENT_TYPE))
|
||||
{
|
||||
// 图片地址
|
||||
$v['images_url'] = ResourcesService::AttachmentPathViewHandle($v['images_url']);
|
||||
|
||||
// 事件值
|
||||
if(!empty($v['event_value']))
|
||||
{
|
||||
// 地图
|
||||
if($v['event_type'] == 3)
|
||||
{
|
||||
$v['event_value_data'] = explode('|', $v['event_value']);
|
||||
}
|
||||
$v['event_value'] = htmlspecialchars_decode($v['event_value']);
|
||||
} else {
|
||||
$v['event_value'] = null;
|
||||
}
|
||||
|
||||
// 加入数据
|
||||
$data[] = $v;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 存储缓存
|
||||
|
@ -43,9 +43,8 @@ class AppHomeNavService
|
||||
'error_msg' => MyLang('common_service.apphomenav.form_item_name_message'),
|
||||
],
|
||||
[
|
||||
'checked_type' => 'in',
|
||||
'checked_type' => 'empty',
|
||||
'key_name' => 'platform',
|
||||
'checked_data' => array_column(MyConst('common_platform_type'), 'value'),
|
||||
'error_msg' => MyLang('form_platform_message'),
|
||||
],
|
||||
[
|
||||
@ -87,7 +86,7 @@ class AppHomeNavService
|
||||
// 数据
|
||||
$data = [
|
||||
'name' => $params['name'],
|
||||
'platform' => $params['platform'],
|
||||
'platform' => empty($params['platform']) ? '' : json_encode(explode(',', $params['platform'])),
|
||||
'event_type' => (isset($params['event_type']) && $params['event_type'] != '') ? intval($params['event_type']) : -1,
|
||||
'event_value' => $params['event_value'],
|
||||
'images_url' => $attachment['data']['images_url'],
|
||||
@ -205,28 +204,40 @@ class AppHomeNavService
|
||||
if($data === null || MyEnv('app_debug') || MyC('common_data_is_use_cache') != 1)
|
||||
{
|
||||
// 获取导航数据
|
||||
$field = 'id,name,images_url,event_value,event_type,bg_color,is_need_login';
|
||||
$field = 'id,name,images_url,event_value,event_type,bg_color,is_need_login,platform';
|
||||
$order_by = 'sort asc,id asc';
|
||||
$data = Db::name('AppHomeNav')->field($field)->where(['platform'=>APPLICATION_CLIENT_TYPE, 'is_enable'=>1])->order($order_by)->select()->toArray();
|
||||
if(!empty($data))
|
||||
$list = Db::name('AppHomeNav')->field($field)->where(['is_enable'=>1])->order($order_by)->select()->toArray();
|
||||
if(!empty($list))
|
||||
{
|
||||
foreach($data as &$v)
|
||||
$data = [];
|
||||
foreach($list as &$v)
|
||||
{
|
||||
// 图片地址
|
||||
$v['images_url'] = ResourcesService::AttachmentPathViewHandle($v['images_url']);
|
||||
$v['event_value'] = empty($v['event_value']) ? null : $v['event_value'];
|
||||
|
||||
// 事件值
|
||||
if(!empty($v['event_value']))
|
||||
// 平台
|
||||
if(!empty($v['platform']))
|
||||
{
|
||||
// 地图
|
||||
if($v['event_type'] == 3)
|
||||
// json数据则必须存在其中,则为字符串等于(老数据)
|
||||
$platform = json_decode($v['platform'], true);
|
||||
if((!empty($platform) && is_array($platform) && in_array(APPLICATION_CLIENT_TYPE, $platform)) || ($v['platform'] == APPLICATION_CLIENT_TYPE))
|
||||
{
|
||||
$v['event_value_data'] = explode('|', $v['event_value']);
|
||||
// 图片地址
|
||||
$v['images_url'] = ResourcesService::AttachmentPathViewHandle($v['images_url']);
|
||||
|
||||
// 事件值
|
||||
if(!empty($v['event_value']))
|
||||
{
|
||||
// 地图
|
||||
if($v['event_type'] == 3)
|
||||
{
|
||||
$v['event_value_data'] = explode('|', $v['event_value']);
|
||||
}
|
||||
$v['event_value'] = htmlspecialchars_decode($v['event_value']);
|
||||
} else {
|
||||
$v['event_value'] = null;
|
||||
}
|
||||
|
||||
// 加入数据
|
||||
$data[] = $v;
|
||||
}
|
||||
$v['event_value'] = htmlspecialchars_decode($v['event_value']);
|
||||
} else {
|
||||
$v['event_value'] = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,81 +0,0 @@
|
||||
<?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;
|
||||
use app\service\SystemService;
|
||||
use app\service\ResourcesService;
|
||||
|
||||
/**
|
||||
* 轮播服务层
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 0.0.1
|
||||
* @datetime 2016-12-01T21:51:08+0800
|
||||
*/
|
||||
class BannerService
|
||||
{
|
||||
/**
|
||||
* 获取轮播
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2018-08-29
|
||||
* @desc description
|
||||
* @param [array] $params [输入参数]
|
||||
*/
|
||||
public static function Banner($params = [])
|
||||
{
|
||||
// 缓存
|
||||
$key = SystemService::CacheKey('shopxo.cache_banner_list_key').APPLICATION_CLIENT_TYPE;
|
||||
$data = MyCache($key);
|
||||
if($data === null || MyEnv('app_debug') || MyC('common_data_is_use_cache') != 1)
|
||||
{
|
||||
// 获取banner数据
|
||||
$field = 'name,describe,images_url,event_value,event_type,bg_color';
|
||||
$order_by = 'sort asc,id asc';
|
||||
$where = [
|
||||
['platform', '=', APPLICATION_CLIENT_TYPE],
|
||||
['is_enable', '=', 1],
|
||||
];
|
||||
$expire_where = '(`start_time` = 0 OR `start_time` <= '.time().') AND (`end_time` = 0 OR `end_time` >= '.time().')';
|
||||
$data = Db::name('Slide')->field($field)->where($where)->whereRaw($expire_where)->order($order_by)->select()->toArray();
|
||||
if(!empty($data))
|
||||
{
|
||||
foreach($data as &$v)
|
||||
{
|
||||
// 图片地址
|
||||
$v['images_url'] = ResourcesService::AttachmentPathViewHandle($v['images_url']);
|
||||
|
||||
// 事件值
|
||||
if(!empty($v['event_value']))
|
||||
{
|
||||
// 地图
|
||||
if($v['event_type'] == 3)
|
||||
{
|
||||
$v['event_value_data'] = explode('|', $v['event_value']);
|
||||
}
|
||||
$v['event_value'] = htmlspecialchars_decode($v['event_value']);
|
||||
} else {
|
||||
$v['event_value'] = null;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$data = [];
|
||||
}
|
||||
|
||||
// 存储缓存
|
||||
MyCache($key, $data, 180);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
?>
|
@ -685,9 +685,10 @@ class ConfigService
|
||||
// 提示信息
|
||||
$tips = MyC('common_site_fictitious_return_tips', null, true);
|
||||
|
||||
// 返回数据
|
||||
$result = [
|
||||
'title' => $title,
|
||||
'tips' => str_replace("\n", '<br />', $tips),
|
||||
'title' => $title,
|
||||
'tips' => empty($tips) ? '' : str_replace("\n", '<br />', $tips),
|
||||
];
|
||||
return DataReturn(MyLang('operate_success'), 0, $result);
|
||||
}
|
||||
|
@ -126,6 +126,7 @@ class ConstService
|
||||
'4.0.0' => ['value' => '4.0.0', 'name' => 'v4.0.0'],
|
||||
'5.0.0' => ['value' => '5.0.0', 'name' => 'v5.0.0'],
|
||||
'6.0.0' => ['value' => '6.0.0', 'name' => 'v6.0.0'],
|
||||
'6.1.0' => ['value' => '6.1.0', 'name' => 'v6.1.0'],
|
||||
],
|
||||
|
||||
// 搜索排序方式
|
||||
|
@ -43,14 +43,14 @@ class EmailLogService
|
||||
{
|
||||
$data = [
|
||||
'status' => 0,
|
||||
'smtp_host' => $smtp_host,
|
||||
'smtp_port' => $smtp_port,
|
||||
'smtp_name' => $smtp_name,
|
||||
'smtp_account' => $smtp_account,
|
||||
'smtp_send_name' => $smtp_send_name,
|
||||
'smtp_host' => empty($smtp_host) ? '' : $smtp_host,
|
||||
'smtp_port' => empty($smtp_port) ? '' : $smtp_port,
|
||||
'smtp_name' => empty($smtp_name) ? '' : $smtp_name,
|
||||
'smtp_account' => empty($smtp_account) ? '' : $smtp_account,
|
||||
'smtp_send_name' => empty($smtp_send_name) ? '' : $smtp_send_name,
|
||||
'email' => is_array($email) ? implode(', ', $email) : $email,
|
||||
'title' => $title,
|
||||
'template_value' => $template_value,
|
||||
'title' => empty($title) ? '' : $title,
|
||||
'template_value' => empty($template_value) ? '' : $template_value,
|
||||
'template_var' => empty($template_var) ? '' : (is_array($template_var) ? json_encode($template_var, JSON_UNESCAPED_UNICODE) : $template_var),
|
||||
'add_time' => time(),
|
||||
];
|
||||
|
@ -1173,10 +1173,10 @@ class OrderAftersaleService
|
||||
}
|
||||
|
||||
// 是否需要自动退回数量
|
||||
// 仅退款类型、申请退款金额+已退款金额大于等于订单商品详情总额时
|
||||
// 仅退款类型、申请退款金额+已退款金额 大于等于 订单商品详情总额-订单优惠金额时
|
||||
// 非已发货和已完成、或虚拟订单模式
|
||||
$is_refund_only_number = false;
|
||||
if($aftersale['type'] == 0 && $aftersale['price']+$order['data']['items']['refund_price'] >= $order['data']['items']['total_price'] && (!in_array($order['data']['status'], [3,4]) || $order['data']['order_model'] == 3))
|
||||
if($aftersale['type'] == 0 && $aftersale['price']+$order['data']['items']['refund_price'] >= $order['data']['items']['total_price']-$order['data']['preferential_price'] && (!in_array($order['data']['status'], [3,4]) || $order['data']['order_model'] == 3))
|
||||
{
|
||||
$is_refund_only_number = true;
|
||||
$aftersale['number'] = $order['data']['items']['buy_number']-$order['data']['items']['returned_quantity'];
|
||||
@ -1189,7 +1189,6 @@ class OrderAftersaleService
|
||||
'pay_status' => ($refund_price >= $order['data']['pay_price']) ? 2 : 3,
|
||||
'refund_price' => $refund_price,
|
||||
'returned_quantity' => $returned_quantity,
|
||||
'close_time' => time(),
|
||||
'upd_time' => time(),
|
||||
];
|
||||
|
||||
@ -1197,6 +1196,7 @@ class OrderAftersaleService
|
||||
if($refund_price >= $order['data']['pay_price'] && $returned_quantity >= $order['data']['buy_number_count'])
|
||||
{
|
||||
$order_upd_data['status'] = 6;
|
||||
$order_upd_data['close_time'] = time();
|
||||
}
|
||||
|
||||
// 更新主订单
|
||||
|
@ -365,6 +365,11 @@ class PluginsService
|
||||
if(!empty($params) && isset($params['data_request']))
|
||||
{
|
||||
$params = $params['data_request'];
|
||||
// 去除多余的参数、避免给页面url地址造成污染
|
||||
if(is_array($params))
|
||||
{
|
||||
unset($params['s'], $params['pluginsname'], $params['pluginscontrol'], $params['pluginsaction']);
|
||||
}
|
||||
}
|
||||
|
||||
// 安全判断
|
||||
|
@ -43,9 +43,8 @@ class QuickNavService
|
||||
'error_msg' => MyLang('common_service.quicknav.form_item_name_message'),
|
||||
],
|
||||
[
|
||||
'checked_type' => 'in',
|
||||
'checked_type' => 'empty',
|
||||
'key_name' => 'platform',
|
||||
'checked_data' => array_column(MyConst('common_platform_type'), 'value'),
|
||||
'error_msg' => MyLang('form_platform_message'),
|
||||
],
|
||||
[
|
||||
@ -87,7 +86,7 @@ class QuickNavService
|
||||
// 数据
|
||||
$data = [
|
||||
'name' => $params['name'],
|
||||
'platform' => $params['platform'],
|
||||
'platform' => empty($params['platform']) ? '' : json_encode(explode(',', $params['platform'])),
|
||||
'event_type' => (isset($params['event_type']) && $params['event_type'] != '') ? intval($params['event_type']) : -1,
|
||||
'event_value' => $params['event_value'],
|
||||
'images_url' => $attachment['data']['images_url'],
|
||||
@ -205,28 +204,40 @@ class QuickNavService
|
||||
if($data === null || MyEnv('app_debug') || MyC('common_data_is_use_cache') != 1)
|
||||
{
|
||||
// 获取导航数据
|
||||
$field = 'id,name,images_url,event_value,event_type,bg_color';
|
||||
$field = 'id,name,images_url,event_value,event_type,bg_color,platform';
|
||||
$order_by = 'sort asc,id asc';
|
||||
$data = Db::name('QuickNav')->field($field)->where(['platform'=>APPLICATION_CLIENT_TYPE, 'is_enable'=>1])->order($order_by)->select()->toArray();
|
||||
if(!empty($data))
|
||||
$list = Db::name('QuickNav')->field($field)->where(['is_enable'=>1])->order($order_by)->select()->toArray();
|
||||
if(!empty($list))
|
||||
{
|
||||
foreach($data as &$v)
|
||||
$data = [];
|
||||
foreach($list as &$v)
|
||||
{
|
||||
// 图片地址
|
||||
$v['images_url'] = ResourcesService::AttachmentPathViewHandle($v['images_url']);
|
||||
$v['event_value'] = empty($v['event_value']) ? null : $v['event_value'];
|
||||
|
||||
// 事件值
|
||||
if(!empty($v['event_value']))
|
||||
// 平台
|
||||
if(!empty($v['platform']))
|
||||
{
|
||||
// 地图018064
|
||||
if($v['event_type'] == 3)
|
||||
// json数据则必须存在其中,则为字符串等于(老数据)
|
||||
$platform = json_decode($v['platform'], true);
|
||||
if((!empty($platform) && is_array($platform) && in_array(APPLICATION_CLIENT_TYPE, $platform)) || ($v['platform'] == APPLICATION_CLIENT_TYPE))
|
||||
{
|
||||
$v['event_value_data'] = explode('|', $v['event_value']);
|
||||
// 图片地址
|
||||
$v['images_url'] = ResourcesService::AttachmentPathViewHandle($v['images_url']);
|
||||
|
||||
// 事件值
|
||||
if(!empty($v['event_value']))
|
||||
{
|
||||
// 地图
|
||||
if($v['event_type'] == 3)
|
||||
{
|
||||
$v['event_value_data'] = explode('|', $v['event_value']);
|
||||
}
|
||||
$v['event_value'] = htmlspecialchars_decode($v['event_value']);
|
||||
} else {
|
||||
$v['event_value'] = null;
|
||||
}
|
||||
|
||||
// 加入数据
|
||||
$data[] = $v;
|
||||
}
|
||||
$v['event_value'] = $v['event_value'];
|
||||
} else {
|
||||
$v['event_value'] = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -726,8 +726,9 @@ class ResourcesService
|
||||
* @version 1.0.0
|
||||
* @date 2020-09-10
|
||||
* @desc description
|
||||
* @param [array] $params [输入参数]
|
||||
*/
|
||||
public static function CurrencyData()
|
||||
public static function CurrencyData($params = [])
|
||||
{
|
||||
// 默认从配置文件读取货币信息
|
||||
$data = [
|
||||
@ -743,6 +744,7 @@ class ResourcesService
|
||||
'hook_name' => $hook_name,
|
||||
'is_backend' => true,
|
||||
'data' => &$data,
|
||||
'params' => $params,
|
||||
]);
|
||||
|
||||
return $data;
|
||||
@ -755,10 +757,11 @@ class ResourcesService
|
||||
* @version 1.0.0
|
||||
* @date 2020-09-10
|
||||
* @desc description
|
||||
* @param [array] $params [输入参数]
|
||||
*/
|
||||
public static function CurrencyDataSymbol()
|
||||
public static function CurrencyDataSymbol($params = [])
|
||||
{
|
||||
$res = self::CurrencyData();
|
||||
$res = self::CurrencyData($params);
|
||||
return empty($res['currency_symbol']) ? MyConfig('shopxo.currency_symbol') : $res['currency_symbol'];
|
||||
}
|
||||
|
||||
@ -796,7 +799,7 @@ class ResourcesService
|
||||
* @version 1.0.0
|
||||
* @date 2021-02-02
|
||||
* @desc description
|
||||
* @param array $params [description]
|
||||
* @param [array] $params [输入参数]
|
||||
*/
|
||||
public static function ZipExtTypeList($params = [])
|
||||
{
|
||||
|
@ -81,8 +81,8 @@ class SearchService
|
||||
*/
|
||||
public static function SearchMapHandle($data, $pid, $did, $params, $ext = [])
|
||||
{
|
||||
// 移除分页
|
||||
unset($params['page']);
|
||||
// 移除分页和框架的s模块参数
|
||||
unset($params['page'], $params['s']);
|
||||
|
||||
// ascii字段处理
|
||||
$is_ascii = isset($ext['is_ascii']) && $ext['is_ascii'] == true;
|
||||
@ -335,6 +335,12 @@ class SearchService
|
||||
$map_price[] = implode('-', $temp_price);
|
||||
}
|
||||
}
|
||||
// 价格滑条
|
||||
if(!empty($params['price']) && stripos($params['price'], '-') !== false)
|
||||
{
|
||||
$map_price[] = $params['price'];
|
||||
}
|
||||
// 处理价格条件
|
||||
if(!empty($map_price))
|
||||
{
|
||||
foreach($map_price as $v)
|
||||
@ -802,5 +808,19 @@ class SearchService
|
||||
'brand' => empty($brand) ? null : $brand,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索商品最大金额
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2024-04-21
|
||||
* @desc description
|
||||
* @param array $params [description]
|
||||
*/
|
||||
public static function SearchGoodsMaxPrice($params = [])
|
||||
{
|
||||
return Db::name('GoodsSpecBase')->max('price');
|
||||
}
|
||||
}
|
||||
?>
|
@ -11,6 +11,7 @@
|
||||
namespace app\service;
|
||||
|
||||
use think\facade\Db;
|
||||
use app\service\SystemService;
|
||||
use app\service\ResourcesService;
|
||||
|
||||
/**
|
||||
@ -49,9 +50,8 @@ class SlideService
|
||||
'error_msg' => MyLang('common_service.slide.form_item_describe_message'),
|
||||
],
|
||||
[
|
||||
'checked_type' => 'in',
|
||||
'checked_type' => 'empty',
|
||||
'key_name' => 'platform',
|
||||
'checked_data' => array_column(MyConst('common_platform_type'), 'value'),
|
||||
'error_msg' => MyLang('form_platform_message'),
|
||||
],
|
||||
[
|
||||
@ -94,7 +94,7 @@ class SlideService
|
||||
$data = [
|
||||
'name' => $params['name'],
|
||||
'describe' => empty($params['describe']) ? '' : $params['describe'],
|
||||
'platform' => $params['platform'],
|
||||
'platform' => empty($params['platform']) ? '' : json_encode(explode(',', $params['platform'])),
|
||||
'event_type' => (isset($params['event_type']) && $params['event_type'] != '') ? intval($params['event_type']) : -1,
|
||||
'event_value' => $params['event_value'],
|
||||
'images_url' => $attachment['data']['images_url'],
|
||||
@ -195,5 +195,72 @@ class SlideService
|
||||
}
|
||||
return DataReturn(MyLang('edit_fail'), -100);
|
||||
}
|
||||
|
||||
/**
|
||||
* 轮播列表
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2018-08-29
|
||||
* @desc description
|
||||
* @param [array] $params [输入参数]
|
||||
*/
|
||||
public static function SlideList($params = [])
|
||||
{
|
||||
// 缓存
|
||||
$key = SystemService::CacheKey('shopxo.cache_banner_list_key').APPLICATION_CLIENT_TYPE;
|
||||
$data = MyCache($key);
|
||||
if($data === null || MyEnv('app_debug') || MyC('common_data_is_use_cache') != 1)
|
||||
{
|
||||
// 获取banner数据
|
||||
$field = 'name,describe,images_url,event_value,event_type,platform,bg_color';
|
||||
$order_by = 'sort asc,id asc';
|
||||
$where = [
|
||||
['is_enable', '=', 1],
|
||||
];
|
||||
$expire_where = '(`start_time` = 0 OR `start_time` <= '.time().') AND (`end_time` = 0 OR `end_time` >= '.time().')';
|
||||
$list = Db::name('Slide')->field($field)->where($where)->whereRaw($expire_where)->order($order_by)->select()->toArray();
|
||||
if(!empty($list))
|
||||
{
|
||||
$data = [];
|
||||
foreach($list as &$v)
|
||||
{
|
||||
// 平台
|
||||
if(!empty($v['platform']))
|
||||
{
|
||||
// json数据则必须存在其中,则为字符串等于(老数据)
|
||||
$platform = json_decode($v['platform'], true);
|
||||
if((!empty($platform) && is_array($platform) && in_array(APPLICATION_CLIENT_TYPE, $platform)) || ($v['platform'] == APPLICATION_CLIENT_TYPE))
|
||||
{
|
||||
// 图片地址
|
||||
$v['images_url'] = ResourcesService::AttachmentPathViewHandle($v['images_url']);
|
||||
|
||||
// 事件值
|
||||
if(!empty($v['event_value']))
|
||||
{
|
||||
// 地图
|
||||
if($v['event_type'] == 3)
|
||||
{
|
||||
$v['event_value_data'] = explode('|', $v['event_value']);
|
||||
}
|
||||
$v['event_value'] = htmlspecialchars_decode($v['event_value']);
|
||||
} else {
|
||||
$v['event_value'] = null;
|
||||
}
|
||||
|
||||
// 加入数据
|
||||
$data[] = $v;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$data = [];
|
||||
}
|
||||
|
||||
// 存储缓存
|
||||
MyCache($key, $data, 180);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
?>
|
@ -41,11 +41,11 @@ class SmsLogService
|
||||
{
|
||||
$data = [
|
||||
'status' => 0,
|
||||
'platform' => $platform,
|
||||
'mobile' => $mobile,
|
||||
'sign_name' => $sign_name,
|
||||
'request_url' => $request_url,
|
||||
'template_value' => $template_value,
|
||||
'platform' => empty($platform) ? '' : $platform,
|
||||
'mobile' => empty($mobile) ? '' : $mobile,
|
||||
'sign_name' => empty($sign_name) ? '' : $sign_name,
|
||||
'request_url' => empty($request_url) ? '' : $request_url,
|
||||
'template_value' => empty($template_value) ? '' : $template_value,
|
||||
'template_var' => empty($template_var) ? '' : (is_array($template_var) ? json_encode($template_var, JSON_UNESCAPED_UNICODE) : $template_var),
|
||||
'request_params' => empty($request_params) ? '' : (is_array($request_params) ? json_encode($request_params, JSON_UNESCAPED_UNICODE) : $request_params),
|
||||
'add_time' => time(),
|
||||
|
@ -50,10 +50,13 @@ class SqlConsoleService
|
||||
$config = MyConfig('database.connections.mysql');
|
||||
$sql = str_replace('{PREFIX}', $config['prefix'], $params['sql']);
|
||||
$sql = str_replace('{CHARSET}', $config['charset'], $sql);
|
||||
// 引号转换
|
||||
$sql = str_replace([''', '"'], ["'", '"'], $sql);
|
||||
|
||||
// 转为数组
|
||||
$sql_all = preg_split("/;[\r\n]+/", $sql);
|
||||
|
||||
// 开始处理
|
||||
$success = 0;
|
||||
$failure = 0;
|
||||
foreach($sql_all as $v)
|
||||
|
@ -610,6 +610,8 @@ class ThemeAdminService
|
||||
'user_register' => MyUrl('admin/site/index', ['nav_type' => 'register', 'is_theme_data_admin' => 1]),
|
||||
'user_forget' => MyUrl('admin/site/index', ['nav_type' => 'forgetpwd', 'is_theme_data_admin' => 1]),
|
||||
'screening_price' => MyUrl('admin/screeningprice/index', ['is_theme_data_admin' => 1]),
|
||||
'site_base' => MyUrl('admin/site/index', ['nav_type'=>'base', 'switch'=>'site-base', 'is_theme_data_admin' => 1]),
|
||||
'site_filing' => MyUrl('admin/site/index', ['nav_type'=>'base', 'switch'=>'site-filing', 'is_theme_data_admin' => 1]),
|
||||
];
|
||||
|
||||
// 主题数据管理url钩子
|
||||
|
@ -1,3 +1,25 @@
|
||||
+=========================================================+
|
||||
ShopXO 6.1.0 Release 20240425 http://shopxo.net
|
||||
+=========================================================+=
|
||||
1.【优化】公共加入购物车方法支持指定规格
|
||||
2.【优化】动态数据列表外部调用处理数据优化
|
||||
3.【优化】底层框架升级到thinkphp8,php版本支持8.0+
|
||||
4.【优化】公共url处理支持短地址参数处理
|
||||
5.【优化】订单售后使用优惠情况下不自动退数量问题修复
|
||||
6.【优化】公共参数去掉多余的参数
|
||||
7.【优化】商城logo和底部备案信息支持可视化修改
|
||||
8.【优化】首页轮播、用户中心导航、首页导航、快捷导航支持多选平台
|
||||
9.【优化】用户端未登录访问页面权限错误修复
|
||||
10.【新增】公共附件新增预览方法
|
||||
11.【新增】web端商品搜索页新增价格滑条
|
||||
12.【新增】智能工具箱插件支持商品批量上下架
|
||||
13.【新增】魔方插件支持更多商品组合
|
||||
14.【新增】批量下单插件web端新增table规格形式购买
|
||||
15.【新增】支付宝小程序支持JSAPI支付
|
||||
|
||||
|
||||
|
||||
|
||||
+=========================================================+
|
||||
ShopXO 6.0.0 Release 20240415 http://shopxo.net
|
||||
+=========================================================+=
|
||||
|
@ -22,18 +22,19 @@
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"topthink/framework": "^6.0.0",
|
||||
"topthink/think-orm": "^2.0",
|
||||
"topthink/think-multi-app": "^1.0",
|
||||
"topthink/think-view": "^1.0",
|
||||
"phpoffice/phpspreadsheet": "^1.4",
|
||||
"overtrue/pinyin": "^4.0",
|
||||
"picqer/php-barcode-generator": "^2.2"
|
||||
"php": ">=8.0.0",
|
||||
"topthink/framework": "*",
|
||||
"topthink/think-orm": "*",
|
||||
"topthink/think-multi-app": "*",
|
||||
"topthink/think-view": "*",
|
||||
"phpoffice/phpspreadsheet": "*",
|
||||
"overtrue/pinyin": "*",
|
||||
"picqer/php-barcode-generator": "*",
|
||||
"phpmailer/phpmailer": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/var-dumper": "^4.2",
|
||||
"topthink/think-trace":"^1.0"
|
||||
"symfony/var-dumper": "*",
|
||||
"topthink/think-trace":"*"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
1310
composer.lock
generated
1310
composer.lock
generated
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -164,21 +164,18 @@ class Barcode
|
||||
return DataReturn(MyLang('common_extend.base.barcode.url_empty_tips'), -1);
|
||||
}
|
||||
|
||||
// 验证下载地址域名
|
||||
$domain_arr = [
|
||||
GetUrlHost(SystemBaseService::AttachmentHost()),
|
||||
GetUrlHost(__MY_HOST__),
|
||||
];
|
||||
if(!in_array(GetUrlHost($url), $domain_arr))
|
||||
// 是否存在问号、去掉问号后面的参数
|
||||
$arr = explode('?', $url);
|
||||
if(count($arr) > 0)
|
||||
{
|
||||
return DataReturn(MyLang('common_extend.base.barcode.url_illegal_tips'), -1);
|
||||
$url = $arr[0];
|
||||
}
|
||||
|
||||
// 是否存在问号、存在问号则将数据转为整数,希望下载静态文件
|
||||
$arr = explode('?', $url);
|
||||
if(isset($arr[1]))
|
||||
// 文件是否存在
|
||||
$file = ROOT.'public'.ResourcesService::AttachmentPathHandle($url);
|
||||
if(!file_exists($file))
|
||||
{
|
||||
$url = $arr[0].'?'.intval($arr[1]);
|
||||
return DataReturn(MyLang('common_extend.barcode.qrcode.url_illegal_tips'), -1);
|
||||
}
|
||||
|
||||
// 格式校验,希望仅下载图片文件
|
||||
|
@ -11,7 +11,7 @@
|
||||
namespace base;
|
||||
|
||||
use app\service\EmailLogService;
|
||||
use phpmailer\PHPMailer;
|
||||
use PHPMailer\PHPMailer\PHPMailer;
|
||||
|
||||
/**
|
||||
* Email驱动
|
||||
@ -249,7 +249,7 @@ class Email
|
||||
$data = MyCache($this->key_code);
|
||||
if(!empty($data))
|
||||
{
|
||||
if(empty($code) && isset($_POST['code']))
|
||||
if(empty($code) && !empty($_POST['code']))
|
||||
{
|
||||
$code = trim($_POST['code']);
|
||||
}
|
||||
|
@ -192,21 +192,18 @@ class Qrcode
|
||||
return DataReturn(MyLang('common_extend.base.qrcode.url_empty_tips'), -1);
|
||||
}
|
||||
|
||||
// 验证下载地址域名
|
||||
$domain_arr = [
|
||||
GetUrlHost(SystemBaseService::AttachmentHost()),
|
||||
GetUrlHost(__MY_HOST__),
|
||||
];
|
||||
if(!in_array(GetUrlHost($url), $domain_arr))
|
||||
// 是否存在问号、去掉问号后面的参数
|
||||
$arr = explode('?', $url);
|
||||
if(count($arr) > 0)
|
||||
{
|
||||
return DataReturn(MyLang('common_extend.base.qrcode.url_illegal_tips'), -1);
|
||||
$url = $arr[0];
|
||||
}
|
||||
|
||||
// 是否存在问号、存在问号则将数据转为整数,希望下载静态文件
|
||||
$arr = explode('?', $url);
|
||||
if(isset($arr[1]))
|
||||
// 文件是否存在
|
||||
$file = ROOT.'public'.ResourcesService::AttachmentPathHandle($url);
|
||||
if(!file_exists($file))
|
||||
{
|
||||
$url = $arr[0].'?'.intval($arr[1]);
|
||||
return DataReturn(MyLang('common_extend.base.qrcode.url_illegal_tips'), -1);
|
||||
}
|
||||
|
||||
// 格式校验,希望仅下载图片文件
|
||||
@ -239,7 +236,7 @@ class Qrcode
|
||||
header('Content-Disposition: attachment; filename="'.$filename.'"');
|
||||
header('Content-Transfer-Encoding: binary');
|
||||
header('Connection: close');
|
||||
echo RequestGet($url);
|
||||
echo RequestGet($file);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -31,6 +31,7 @@ class Sms
|
||||
// 签名
|
||||
private $sign_ame = '';
|
||||
|
||||
private $interval_time;
|
||||
private $expire_time;
|
||||
private $key_code;
|
||||
private $is_frq;
|
||||
@ -270,10 +271,13 @@ class Sms
|
||||
*/
|
||||
private function PercentEncode($string)
|
||||
{
|
||||
$string = urlencode($string);
|
||||
$string = preg_replace('/\+/', '%20', $string);
|
||||
$string = preg_replace('/\*/', '%2A', $string);
|
||||
$string = preg_replace('/%7E/', '~', $string);
|
||||
if(!empty($string))
|
||||
{
|
||||
$string = urlencode($string);
|
||||
$string = preg_replace('/\+/', '%20', $string);
|
||||
$string = preg_replace('/\*/', '%2A', $string);
|
||||
$string = preg_replace('/%7E/', '~', $string);
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
||||
@ -379,7 +383,7 @@ class Sms
|
||||
$data = MyCache($this->key_code);
|
||||
if(!empty($data))
|
||||
{
|
||||
if(empty($code) && isset($_POST['code']))
|
||||
if(empty($code) && !empty($_POST['code']))
|
||||
{
|
||||
$code = trim($_POST['code']);
|
||||
}
|
||||
|
@ -49,11 +49,11 @@ class AlipayMini
|
||||
{
|
||||
// 基础信息
|
||||
$base = [
|
||||
'name' => '支付宝', // 插件名称
|
||||
'version' => '1.1.2', // 插件版本
|
||||
'name' => '支付宝小程序', // 插件名称
|
||||
'version' => '1.1.3', // 插件版本
|
||||
'apply_version' => '不限', // 适用系统版本描述
|
||||
'apply_terminal'=> ['alipay'], // 适用终端 默认全部 ['pc', 'h5', 'app', 'alipay', 'weixin', 'baidu']
|
||||
'desc' => '适用支付宝小程序,即时到帐支付方式,买家的交易资金直接打入卖家支付宝账户,快速回笼交易资金。 <a href="http://www.alipay.com/" target="_blank">立即申请</a>', // 插件描述(支持html)
|
||||
'desc' => '适用支付宝小程序、JSAPI,即时到帐支付方式,买家的交易资金直接打入卖家支付宝账户,快速回笼交易资金。 <a href="http://www.alipay.com/" target="_blank">立即申请</a>', // 插件描述(支持html)
|
||||
'author' => 'Devil', // 开发者
|
||||
'author_url' => 'http://shopxo.net/', // 开发者主页
|
||||
];
|
||||
@ -97,6 +97,17 @@ class AlipayMini
|
||||
'rows' => 6,
|
||||
'message' => '请填写支付宝公钥',
|
||||
],
|
||||
[
|
||||
'element' => 'select',
|
||||
'title' => '是否JSAPI',
|
||||
'message' => '请选择是否JSAPI',
|
||||
'name' => 'is_jsapi',
|
||||
'is_multiple' => 0,
|
||||
'element_data' => [
|
||||
['value'=>0, 'name'=>'否'],
|
||||
['value'=>1, 'name'=>'是'],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
return [
|
||||
@ -146,6 +157,14 @@ class AlipayMini
|
||||
'buyer_id' => $params['user']['alipay_openid'],
|
||||
'timeout_express' => $this->OrderAutoCloseTime(),
|
||||
);
|
||||
|
||||
// 是否jsapi
|
||||
if(isset($this->config['is_jsapi']) && $this->config['is_jsapi'] == 1)
|
||||
{
|
||||
$biz_content['product_code'] = 'JSAPI_PAY';
|
||||
$biz_content['op_app_id'] = $this->config['appid'];
|
||||
}
|
||||
|
||||
// 商品详情
|
||||
if(isset($params['business_type']) && $params['business_type'] == 'system-order' && !empty($params['business_data']) && is_array($params['business_data']))
|
||||
{
|
||||
@ -538,6 +557,5 @@ class AlipayMini
|
||||
$string = json_encode($data[$key], JSON_UNESCAPED_UNICODE);
|
||||
return $this->OutRsaVerify($string, $data['sign']);
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
@ -11,7 +11,7 @@
|
||||
namespace payment;
|
||||
|
||||
/**
|
||||
* 建行扫码支付
|
||||
* 建行聚合支付
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
@ -49,7 +49,7 @@ class CcbPay
|
||||
{
|
||||
// 基础信息
|
||||
$base = [
|
||||
'name' => '建行扫码支付', // 插件名称
|
||||
'name' => '建行聚合支付', // 插件名称
|
||||
'version' => '1.0.0', // 插件版本
|
||||
'apply_version' => '不限', // 适用系统版本描述
|
||||
'apply_terminal'=> ['pc', 'weixin'], // 适用终端 默认全部 ['pc', 'h5', 'ios', 'android', 'alipay', 'weixin', 'baidu', 'toutiao']
|
||||
@ -119,6 +119,36 @@ class CcbPay
|
||||
'rows' => 6,
|
||||
'message' => '请填写商户公钥',
|
||||
],
|
||||
[
|
||||
'element' => 'input',
|
||||
'type' => 'text',
|
||||
'default' => '',
|
||||
'name' => 'wlpt_url',
|
||||
'placeholder' => '外联平台地址',
|
||||
'title' => '外联平台地址',
|
||||
'is_required' => 0,
|
||||
'message' => '请填写外联平台地址',
|
||||
],
|
||||
[
|
||||
'element' => 'input',
|
||||
'type' => 'text',
|
||||
'default' => '',
|
||||
'name' => 'user_id',
|
||||
'placeholder' => '操作员号',
|
||||
'title' => '操作员号',
|
||||
'is_required' => 0,
|
||||
'message' => '请填写商户服务平台操作员号',
|
||||
],
|
||||
[
|
||||
'element' => 'input',
|
||||
'type' => 'password',
|
||||
'default' => '',
|
||||
'name' => 'user_pwd',
|
||||
'placeholder' => '操作员交易密码',
|
||||
'title' => '操作员交易密码',
|
||||
'is_required' => 0,
|
||||
'message' => '请填写商户服务平台操作员交易密码',
|
||||
],
|
||||
[
|
||||
'element' => 'message',
|
||||
'message' => '1. 同步跳转地址,将该地址配置到支付后台页面同步跳转<br />'.__MY_URL__.'payment_default_order_'.strtolower(str_replace(['payment', '\\'], '', get_class($this))).'_respond.php<br /><br />2. 异步通知地址,将该地址配置到支付后台异步通知<br />'.__MY_URL__.'payment_default_order_'.strtolower(str_replace(['payment', '\\'], '', get_class($this))).'_notify.php',
|
||||
@ -274,6 +304,67 @@ class CcbPay
|
||||
return DataReturn('支付单提交失败', -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款处理
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2019-05-28
|
||||
* @desc description
|
||||
* @param [array] $params [输入参数]
|
||||
*/
|
||||
public function Refund($params = [])
|
||||
{
|
||||
// 参数
|
||||
$p = [
|
||||
[
|
||||
'checked_type' => 'empty',
|
||||
'key_name' => 'order_no',
|
||||
'error_msg' => '支付订单号不能为空',
|
||||
],
|
||||
[
|
||||
'checked_type' => 'empty',
|
||||
'key_name' => 'refund_price',
|
||||
'error_msg' => '退款金额不能为空',
|
||||
],
|
||||
];
|
||||
$ret = ParamsChecked($params, $p);
|
||||
if($ret !== true)
|
||||
{
|
||||
return DataReturn($ret, -1);
|
||||
}
|
||||
|
||||
// 退款原因
|
||||
$refund_reason = empty($params['refund_reason']) ? $params['order_no'].'订单退款'.$params['refund_price'].'元' : $params['refund_reason'];
|
||||
|
||||
// 请求参数
|
||||
$data = "<?xml version=\"1.0\" encoding=\"GB2312\" standalone=\"yes\" ?>";
|
||||
$data .="<TX><REQUEST_SN>" . date('YmdHis') . "</REQUEST_SN>";
|
||||
$data .="<CUST_ID>" . $this->config['merchant_id'] . "</CUST_ID>";
|
||||
$data .="<USER_ID>" . $this->config['user_id'] . "</USER_ID>";
|
||||
$data .="<PASSWORD>" . $this->config['user_pwd'] . "</PASSWORD><TX_CODE>5W1004</TX_CODE><LANGUAGE>CN</LANGUAGE>";
|
||||
$data .="<TX_INFO><MONEY>" . $params['refund_price'] . "</MONEY>";
|
||||
$data .="<ORDER>" . $params['order_no'] . "</ORDER>";
|
||||
$data .="<REFUND_CODE></REFUND_CODE></TX_INFO><SIGN_INFO></SIGN_INFO><SIGNCERT></SIGNCERT></TX>";
|
||||
|
||||
// 请求接口处理
|
||||
$result = $this->HttpRequestWlpt($params['wlpt_url'], $data);
|
||||
$resultData = simplexml_load_string($result);
|
||||
if(!empty($result) && isset($result['RETURN_MSG']) && $result['RETURN_CODE'] == '000000')
|
||||
{
|
||||
// 统一返回格式
|
||||
$data = [
|
||||
'out_trade_no' => isset($result['ORDER_NUM']) ? $result['ORDER_NUM'] : '',
|
||||
'trade_no' => isset($params['ORDERID']) ? $params['ORDERID'] : '',
|
||||
'buyer_user' => '',
|
||||
'refund_price' => isset($result['AMOUNT']) ? $result['AMOUNT'] : 0.00,
|
||||
'return_params' => $result,
|
||||
];
|
||||
return DataReturn('退款成功', 0, $data);
|
||||
}
|
||||
return DataReturn(empty($result) ? '支付接口请求失败' : (empty($result['errMsg']) ? $result : $result['errMsg'].'['.$result['errCode'].']'), -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单自动关闭的时间
|
||||
* @author Devil
|
||||
@ -381,6 +472,44 @@ class CcbPay
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款外联平台请求
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2024-04-19
|
||||
* @desc description
|
||||
* @param [string] $url [请求url]
|
||||
* @param [array] $data [发送数据]
|
||||
* @param [int] $second [超时]
|
||||
* @return [mixed] [请求返回数据]
|
||||
*/
|
||||
private function HttpRequestWlpt($url, $data, $second = 30)
|
||||
{
|
||||
$ch = curl_init();
|
||||
$header = ['Content-Type: application/xml; charset="GB2312"'];
|
||||
curl_setopt_array($ch, array(
|
||||
CURLOPT_URL => $url,
|
||||
CURLOPT_HTTPHEADER => $header,
|
||||
CURLOPT_POST => true,
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_POSTFIELDS => $data,
|
||||
CURLOPT_TIMEOUT => $second,
|
||||
));
|
||||
$result = curl_exec($ch);
|
||||
|
||||
//返回结果
|
||||
if($result)
|
||||
{
|
||||
curl_close($ch);
|
||||
return $result;
|
||||
} else {
|
||||
$error = curl_errno($ch);
|
||||
curl_close($ch);
|
||||
return "curl出错,错误码:$error";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 签名验证
|
||||
* @author Devil
|
||||
@ -417,4 +546,4 @@ class CcbPay
|
||||
return $pem;
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
@ -10,14 +10,14 @@
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
// 系统版本
|
||||
define('APPLICATION_VERSION', 'v6.0.0');
|
||||
define('APPLICATION_VERSION', 'v6.1.0');
|
||||
|
||||
// 检测PHP环境
|
||||
if(version_compare(PHP_VERSION,'7.4.0','<'))
|
||||
if(version_compare(PHP_VERSION, '8.0.0','<'))
|
||||
{
|
||||
header('HTTP/1.1 500 Internal Server Error');
|
||||
header('Content-Type:text/html;charset=utf-8');
|
||||
die('<div style="margin-top:15%;text-align:center;font-size:16px;padding:0 10px;"><p><a href="https://shopxo.net/" target="_blank" title="ShopXO电商系统" style="font-size:36px;font-weight:bold;text-decoration:none;"><span style="color:#026ed9;">Shop</span><span style="color:#e6000e;">XO</span></a> <span style="color:#888;">'.APPLICATION_VERSION.'</span></p><p style="color:#f00;margin-top:10px;">需要PHP版本最低 v7.4.0,当前PHP版本 v'.PHP_VERSION.'</p></div>');
|
||||
die('<div style="margin-top:15%;text-align:center;font-size:16px;padding:0 10px;"><p><a href="https://shopxo.net/" target="_blank" title="ShopXO电商系统" style="font-size:36px;font-weight:bold;text-decoration:none;"><span style="color:#026ed9;">Shop</span><span style="color:#f00;">XO</span></a> <span style="color:#888;">'.APPLICATION_VERSION.'</span></p><p style="color:#f00;margin-top:10px;">需要PHP版本最低 v8.0.0,当前PHP版本 v'.PHP_VERSION.'</p></div>');
|
||||
}
|
||||
|
||||
// 定义系统目录分隔符
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 66 KiB |
@ -888,6 +888,7 @@ span.business-operations-submit {
|
||||
.submit-modal,
|
||||
.text-copy-submit,
|
||||
.common-goods-favor-submit-event,
|
||||
.common-annex-view-event,
|
||||
.common-scan-submit,
|
||||
.am-cursor-pointer {
|
||||
cursor: pointer;
|
||||
|
@ -1546,7 +1546,7 @@ function UrlFieldReplace (field, value, url = null, anchor = null) {
|
||||
if (url.indexOf('?') >= 0) {
|
||||
var str = url.substr(0, url.lastIndexOf('.' + __seo_url_suffix__));
|
||||
var ext = url.substr(url.lastIndexOf('.' + __seo_url_suffix__));
|
||||
if (str.indexOf(field) >= 0) {
|
||||
if (str.indexOf(field+'/') >= 0) {
|
||||
var first = str.substr(0, str.lastIndexOf(field));
|
||||
var last = str.substr(str.lastIndexOf(field));
|
||||
last = last.replace(new RegExp(field + '/', 'g'), '');
|
||||
@ -1600,8 +1600,26 @@ function UrlFieldReplace (field, value, url = null, anchor = null) {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (value !== null) {
|
||||
url += '?' + field + '=' + value;
|
||||
if(url.indexOf(field+'/') != -1)
|
||||
{
|
||||
var str = url.substr(0, url.lastIndexOf('.' + __seo_url_suffix__));
|
||||
var ext = url.substr(url.lastIndexOf('.' + __seo_url_suffix__));
|
||||
var first = str.substr(0, str.lastIndexOf(field));
|
||||
var last = str.substr(str.lastIndexOf(field));
|
||||
last = last.replace(new RegExp(field + '/', 'g'), '');
|
||||
last = (last.indexOf('/') >= 0) ? last.substr(last.indexOf('/')) : '';
|
||||
if (value === null) {
|
||||
if (first.substr(-1) == '/') {
|
||||
first = first.substr(0, first.length - 1);
|
||||
}
|
||||
url = first + last + ext;
|
||||
} else {
|
||||
url = first + field + '/' + value + last + ext;
|
||||
}
|
||||
} else {
|
||||
if (value !== null) {
|
||||
url += '?' + field + '=' + value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3722,7 +3740,42 @@ function VoiceNotice (mp3) {
|
||||
$('body').append('<audio class="common-voice-container" src="' + mp3 + '" controls autoplay></audio>');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 附件预览
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2024-04-19
|
||||
* @desc description
|
||||
* @param {[string]} type [文件类型(video 视频, images 默认图片)]
|
||||
* @param {[string]} value [附件地址]
|
||||
*/
|
||||
function AnnexView(type, value) {
|
||||
if((value || null) != null) {
|
||||
var title = null;
|
||||
var html = null;
|
||||
var style = 'max-width:100%; max-height:calc(80vh - 4.5rem); margin: 0 auto;';
|
||||
switch (type) {
|
||||
case 'video':
|
||||
title = window['lang_video_preview_title'] || '视频预览';
|
||||
html = '<video src="' + value + '" style="' + style + '" controls autoplay>your browser does not support the video tag</video>';
|
||||
break;
|
||||
default:
|
||||
title = window['lang_images_preview_title'] || '图片预览';
|
||||
html = '<img src="' + value + '" class="am-block" style="' + style + '" />';
|
||||
}
|
||||
if (html != null) {
|
||||
AMUI.dialog.alert({
|
||||
title: title,
|
||||
isClose: true,
|
||||
config: {},
|
||||
style: 'max-width: 80%; max-height: 80%; left: auto; min-width: 12rem;',
|
||||
content_style: 'padding: 0; border-bottom: 0;',
|
||||
content: html,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -4875,43 +4928,24 @@ $(function () {
|
||||
return false;
|
||||
});
|
||||
|
||||
// 文件预览
|
||||
// 上传文件组件预览
|
||||
$(document).on('click', '.plug-file-upload-view li', function () {
|
||||
if ($(this).find('i.icon-eye').length > 0) {
|
||||
// 容器
|
||||
var $tag = $(this).parents('ul.plug-file-upload-view');
|
||||
var type = $tag.attr('data-dialog-type') || 'images';
|
||||
var title = null;
|
||||
var html = null;
|
||||
var style = 'max-width:100%; max-height:calc(80vh - 4.5rem); margin: 0 auto;';
|
||||
switch (type) {
|
||||
case 'video':
|
||||
var video = $(this).find('>video').attr('src') || null;
|
||||
if (video != null) {
|
||||
title = window['lang_video_preview_title'] || '视频预览';
|
||||
html = '<video src="' + video + '" style="' + style + '" controls autoplay>your browser does not support the video tag</video>';
|
||||
}
|
||||
break;
|
||||
default:
|
||||
var img = $(this).find('>img').attr('src') || null;
|
||||
if (img != null) {
|
||||
title = window['lang_images_preview_title'] || '图片预览';
|
||||
html = '<img src="' + img + '" class="am-block" style="' + style + '" />';
|
||||
}
|
||||
}
|
||||
if (html != null) {
|
||||
AMUI.dialog.alert({
|
||||
title: title,
|
||||
isClose: true,
|
||||
config: {},
|
||||
style: 'max-width: 80%; max-height: 80%; left: auto; min-width: 12rem;',
|
||||
content_style: 'padding: 0; border-bottom: 0;',
|
||||
content: html,
|
||||
});
|
||||
}
|
||||
var value = (type == 'video') ? $(this).find('>video').attr('src') : $(this).find('>img').attr('src');
|
||||
AnnexView(type, value);
|
||||
}
|
||||
});
|
||||
|
||||
// 公共文件预览
|
||||
$(document).on('click', '.common-annex-view-event', function() {
|
||||
var type = $(this).attr('data-type') || 'images';
|
||||
var value = $(this).attr('data-value') || null;
|
||||
AnnexView(type, value);
|
||||
});
|
||||
|
||||
/* 搜索切换 */
|
||||
var $more_where = $('.more-where');
|
||||
$more_submit = $('.more-submit');
|
||||
|
@ -1 +1 @@
|
||||
.am-tagsinput{display:inline-block;margin-bottom:1rem;padding:.5em .625em;font-size:1.6rem;line-height:1.2;color:#555;vertical-align:middle;background-color:#fff;background-image:none;border:1px solid #f0f0f0;border-radius:0;-webkit-appearance:none;max-width:100%;cursor:text}.am-tagsinput .tag{margin-right:2px;font-size:13px;line-height:1.8rem;padding:0 .5em;color:#fff;border-radius:0.2rem;}.am-tagsinput .tag [data-role="remove"]{margin-left:5px;cursor:pointer}.am-tagsinput .tag [data-role="remove"]:after{content:"x";padding:0 3px}.am-tagsinput .tag [data-role="remove"]:hover{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.am-tagsinput .tag [data-role="remove"]:hover:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.am-tagsinput input,.am-form .am-tagsinput input{display:inline-block;border:none;-webkit-box-shadow:none;box-shadow:none;outline:none;background-color:transparent;padding:0;margin:0;width:auto!important;max-width:inherit;height:1.8rem;line-height:1.8rem}.am-tagsinput input:focus,.am-form .am-tagsinput input:focus{border:none;-webkit-box-shadow:none;box-shadow:none}.am-form-group .am-tagsinput{margin-bottom:auto}
|
||||
.am-tagsinput{display:inline-block;margin-bottom:1rem;padding:.5em .625em;font-size:1.6rem;line-height:1.2;color:#555;vertical-align:middle;background-color:#fff;background-image:none;border:1px solid #f0f0f0;border-radius:0;-webkit-appearance:none;max-width:100%;cursor:text}.am-tagsinput .tag{margin-right:2px;font-size:13px;line-height:1.8rem;padding:0 .5em;color:#666;border-radius:0.2rem;font-weight:inherit;}.am-tagsinput .tag [data-role="remove"]{margin-left:5px;cursor:pointer}.am-tagsinput .tag [data-role="remove"]:after{content:"x";padding:0 3px}.am-tagsinput .tag [data-role="remove"]:hover{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.am-tagsinput .tag [data-role="remove"]:hover:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.am-tagsinput input,.am-form .am-tagsinput input{display:inline-block;border:none;-webkit-box-shadow:none;box-shadow:none;outline:none;background-color:transparent;padding:0;margin:0;width:auto!important;max-width:inherit;height:1.8rem;line-height:1.8rem}.am-tagsinput input:focus,.am-form .am-tagsinput input:focus{border:none;-webkit-box-shadow:none;box-shadow:none}.am-form-group .am-tagsinput{margin-bottom:auto}
|
2
public/static/common/lib/jRange/.gitignore
vendored
Normal file
2
public/static/common/lib/jRange/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
.DS_Store
|
||||
*.codekit
|
58
public/static/common/lib/jRange/README.md
Normal file
58
public/static/common/lib/jRange/README.md
Normal file
@ -0,0 +1,58 @@
|
||||
## jQuery plugin to create Range Selector
|
||||
|
||||
![jRange Preview](http://i.imgur.com/da8uZwx.png)
|
||||
|
||||
[Demo and Documentation](http://nitinhayaran.github.io/jRange/demo/)
|
||||
|
||||
以下是一个表格,展示了jRange插件的配置选项:
|
||||
|
||||
选项 是否必需 类型 默认值 描述
|
||||
from 是 Integer 无 滑块的下限
|
||||
to 是 Integer 无 滑块的上限
|
||||
step 否 Integer 1 每次移动的步长
|
||||
scale 否 Array [from, to] 显示在滑块下方的标签数组
|
||||
showLabels 否 Boolean true 是否显示滑块顶部的标签
|
||||
showScale 否 Boolean true 是否显示滑块下方的刻度尺
|
||||
format 否 String / Function "%s" 指针上标签的格式
|
||||
width 否 Integer 300 滑块容器的宽度
|
||||
theme 否 String "theme-green" 容器的CSS类名,可用的主题包括"theme-blue", "theme-green"
|
||||
isRange 否 Boolean false 是否为范围选择器,如果是,则隐藏输入的值将设置为逗号分隔的形式,例如"25,75"
|
||||
snap 否 Boolean false 是否将滑块吸附到步长值上
|
||||
disable 否 Boolean false 是否禁用(只读)范围选择器
|
||||
|
||||
要使用此插件,请按照以下步骤操作:
|
||||
|
||||
在HTML文件中包含jquery.range.js和jquery.range.css文件。
|
||||
html
|
||||
<link rel="stylesheet" href="jquery.range.css">
|
||||
<script src="jquery.range.js"></script>
|
||||
在您希望显示滑块的位置添加一个隐藏的输入元素。
|
||||
html
|
||||
<input type="hidden" class="slider-input" value="23" />
|
||||
使用jRange方法初始化插件,并传递所需的选项。
|
||||
javascript
|
||||
$('.slider-input').jRange({
|
||||
from: 1,
|
||||
to: 100,
|
||||
step: 1,
|
||||
// 其他选项...
|
||||
});
|
||||
|
||||
|
||||
Modification
|
||||
Change values on runtime
|
||||
Methods which you can call to dynamically modify current values and range.
|
||||
|
||||
Method Description
|
||||
setValue
|
||||
sets the current value of the slider without changing its range, if you want to update the range as well use updateRange instead.
|
||||
|
||||
$('.slider').jRange('setValue', '10,20');
|
||||
$('.slider').jRange('setValue', '10');
|
||||
updateRange
|
||||
'updateRange' to change (min, max) value and interval after initialized.
|
||||
|
||||
$('.slider').jRange('updateRange', '0,100');
|
||||
$('.slider').jRange('updateRange', '0,100', '25,50');
|
||||
$('.slider').jRange('updateRange', '0,100', 25);
|
||||
passing second parameter also sets its current value
|
178
public/static/common/lib/jRange/jquery.range.css
Normal file
178
public/static/common/lib/jRange/jquery.range.css
Normal file
@ -0,0 +1,178 @@
|
||||
.jrange-slider-container {
|
||||
width: 30rem;
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
}
|
||||
.jrange-slider-container .back-bar {
|
||||
height: 1rem;
|
||||
position: relative;
|
||||
}
|
||||
.jrange-slider-container .back-bar .selected-bar {
|
||||
position: absolute;
|
||||
height: 100%;
|
||||
}
|
||||
.jrange-slider-container .back-bar .pointer {
|
||||
position: absolute;
|
||||
background-color: red;
|
||||
cursor: col-resize;
|
||||
opacity: 1;
|
||||
z-index: 2;
|
||||
width: 1.6rem;
|
||||
height: 1.6rem;
|
||||
top: -0.6rem;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
border-radius: 1rem;
|
||||
border: 0.1rem solid #AAA;
|
||||
background-color: #e7e7e7;
|
||||
}
|
||||
.jrange-slider-container .back-bar .pointer.last-active {
|
||||
z-index: 3;
|
||||
}
|
||||
.jrange-slider-container .back-bar .pointer-label {
|
||||
position: absolute;
|
||||
top: -1.7rem;
|
||||
font-size: 0.8rem;
|
||||
background: white;
|
||||
white-space: nowrap;
|
||||
line-height: 1;
|
||||
color: #999;
|
||||
}
|
||||
.jrange-slider-container .back-bar .focused {
|
||||
z-index: 10;
|
||||
color: #333;
|
||||
}
|
||||
.jrange-slider-container .clickable-dummy {
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 1;
|
||||
}
|
||||
.jrange-slider-container .scale {
|
||||
top: 0.2rem;
|
||||
position: relative;
|
||||
}
|
||||
.jrange-slider-container .scale span {
|
||||
position: absolute;
|
||||
height: 0.5rem;
|
||||
border-left: 0.1rem solid #e5e5e5;
|
||||
font-size: 0;
|
||||
}
|
||||
.jrange-slider-container .scale ins {
|
||||
font-size: 0.9rem;
|
||||
text-decoration: none;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0.5rem;
|
||||
color: #999;
|
||||
line-height: 1;
|
||||
}
|
||||
.jrange-slider-container.slider-readonly .clickable-dummy,
|
||||
.jrange-slider-container.slider-readonly .pointer {
|
||||
cursor: auto;
|
||||
}
|
||||
.jrange-slider-container .back-bar {
|
||||
height: 0.5rem;
|
||||
border-radius: 0.2rem;
|
||||
background-color: #e7e7e7;
|
||||
}
|
||||
|
||||
/**
|
||||
* 主色
|
||||
*/
|
||||
.jrange-slider-container.theme-main .back-bar {
|
||||
background-image: -moz-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#eeeeee), to(#dddddd));
|
||||
background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: -o-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: linear-gradient(to bottom, #eeeeee, #dddddd);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee', endColorstr='#ffdddddd', GradientType=0);
|
||||
}
|
||||
.jrange-slider-container.theme-main .back-bar .selected-bar {
|
||||
border-radius: 0.2rem;
|
||||
background-color: var(--color-main);
|
||||
background-image: -moz-linear-gradient(top, var(--color-main-hover), var(--color-main));
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(var(--color-main-hover)), to(var(--color-main)));
|
||||
background-image: -webkit-linear-gradient(top, var(--color-main-hover), var(--color-main));
|
||||
background-image: -o-linear-gradient(top, var(--color-main-hover), var(--color-main));
|
||||
background-image: linear-gradient(to bottom, var(--color-main-hover), var(--color-main));
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffbdfade', endColorstr='#ff76fabc', GradientType=0);
|
||||
}
|
||||
.jrange-slider-container.theme-main .back-bar .pointer {
|
||||
background-image: -moz-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#eeeeee), to(#dddddd));
|
||||
background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: -o-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: linear-gradient(to bottom, #eeeeee, #dddddd);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee', endColorstr='#ffdddddd', GradientType=0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 绿色
|
||||
*/
|
||||
.jrange-slider-container.theme-green .back-bar {
|
||||
background-image: -moz-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#eeeeee), to(#dddddd));
|
||||
background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: -o-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: linear-gradient(to bottom, #eeeeee, #dddddd);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee', endColorstr='#ffdddddd', GradientType=0);
|
||||
}
|
||||
.jrange-slider-container.theme-green .back-bar .selected-bar {
|
||||
border-radius: 0.2rem;
|
||||
background-color: #52dc58;
|
||||
background-image: -moz-linear-gradient(top, #65e76b, #4caf50);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#65e76b), to(#4caf50));
|
||||
background-image: -webkit-linear-gradient(top, #65e76b, #4caf50);
|
||||
background-image: -o-linear-gradient(top, #65e76b, #4caf50);
|
||||
background-image: linear-gradient(to bottom, #65e76b, #4caf50);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffbdfade', endColorstr='#ff76fabc', GradientType=0);
|
||||
}
|
||||
.jrange-slider-container.theme-green .back-bar .pointer {
|
||||
background-image: -moz-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#eeeeee), to(#dddddd));
|
||||
background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: -o-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: linear-gradient(to bottom, #eeeeee, #dddddd);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee', endColorstr='#ffdddddd', GradientType=0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 蓝色
|
||||
*/
|
||||
.jrange-slider-container.theme-blue .back-bar {
|
||||
background-image: -moz-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#eeeeee), to(#dddddd));
|
||||
background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: -o-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: linear-gradient(to bottom, #eeeeee, #dddddd);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee', endColorstr='#ffdddddd', GradientType=0);
|
||||
}
|
||||
.jrange-slider-container.theme-blue .back-bar .selected-bar {
|
||||
border-radius: 0.2rem;
|
||||
background-color: #92c1f9;
|
||||
background-image: -moz-linear-gradient(top, #b1d1f9, #2A94FF);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b1d1f9), to(#2A94FF));
|
||||
background-image: -webkit-linear-gradient(top, #b1d1f9, #2A94FF);
|
||||
background-image: -o-linear-gradient(top, #b1d1f9, #2A94FF);
|
||||
background-image: linear-gradient(to bottom, #b1d1f9, #2A94FF);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffb1d1f9', endColorstr='#ff64a8f9', GradientType=0);
|
||||
}
|
||||
.jrange-slider-container.theme-blue .back-bar .pointer {
|
||||
background-image: -moz-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#eeeeee), to(#dddddd));
|
||||
background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: -o-linear-gradient(top, #eeeeee, #dddddd);
|
||||
background-image: linear-gradient(to bottom, #eeeeee, #dddddd);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee', endColorstr='#ffdddddd', GradientType=0);
|
||||
}
|
395
public/static/common/lib/jRange/jquery.range.js
Normal file
395
public/static/common/lib/jRange/jquery.range.js
Normal file
@ -0,0 +1,395 @@
|
||||
/*jshint multistr:true, curly: false */
|
||||
/*global jQuery:false, define: false */
|
||||
/**
|
||||
* jRange - Awesome range control
|
||||
*
|
||||
* Written by
|
||||
* ----------
|
||||
* Nitin Hayaran (nitinhayaran@gmail.com)
|
||||
*
|
||||
* Licensed under the MIT (MIT-LICENSE.txt).
|
||||
*
|
||||
* @author Nitin Hayaran
|
||||
* @version 0.1-RELEASE
|
||||
**/
|
||||
(function($, window, document, undefined) {
|
||||
'use strict';
|
||||
|
||||
var jRange = function() {
|
||||
return this.init.apply(this, arguments);
|
||||
};
|
||||
jRange.prototype = {
|
||||
defaults: {
|
||||
onstatechange: function() {},
|
||||
ondragend: function() {},
|
||||
onbarclicked: function() {},
|
||||
isRange: false,
|
||||
showLabels: true,
|
||||
showScale: true,
|
||||
step: 1,
|
||||
format: '%s',
|
||||
theme: 'theme-green',
|
||||
width: 300,
|
||||
disable: false,
|
||||
snap: false
|
||||
},
|
||||
template: '<div class="jrange-slider-container">\
|
||||
<div class="back-bar">\
|
||||
<div class="selected-bar"></div>\
|
||||
<div class="pointer low"></div><div class="pointer-label low">123456</div>\
|
||||
<div class="pointer high"></div><div class="pointer-label high">456789</div>\
|
||||
<div class="clickable-dummy"></div>\
|
||||
</div>\
|
||||
<div class="scale"></div>\
|
||||
</div>',
|
||||
init: function(node, options) {
|
||||
this.options = $.extend({}, this.defaults, options);
|
||||
this.inputNode = $(node);
|
||||
this.options.value = this.inputNode.val() || (this.options.isRange ? this.options.from + ',' + this.options.from : '' + this.options.from);
|
||||
this.domNode = $(this.template);
|
||||
this.domNode.addClass(this.options.theme);
|
||||
this.inputNode.after(this.domNode);
|
||||
this.domNode.on('change', this.onChange);
|
||||
this.pointers = $('.pointer', this.domNode);
|
||||
this.lowPointer = this.pointers.first();
|
||||
this.highPointer = this.pointers.last();
|
||||
this.labels = $('.pointer-label', this.domNode);
|
||||
this.lowLabel = this.labels.first();
|
||||
this.highLabel = this.labels.last();
|
||||
this.scale = $('.scale', this.domNode);
|
||||
this.bar = $('.selected-bar', this.domNode);
|
||||
this.clickableBar = this.domNode.find('.clickable-dummy');
|
||||
this.interval = this.options.to - this.options.from;
|
||||
this.render();
|
||||
},
|
||||
render: function() {
|
||||
// Check if inputNode is visible, and have some width, so that we can set slider width accordingly.
|
||||
if (this.inputNode.width() === 0 && !this.options.width) {
|
||||
console.log('jRange : no width found, returning');
|
||||
return;
|
||||
} else {
|
||||
this.options.width = this.options.width || this.inputNode.width();
|
||||
this.domNode.width(this.options.width);
|
||||
this.inputNode.hide();
|
||||
}
|
||||
|
||||
if (this.isSingle()) {
|
||||
this.lowPointer.hide();
|
||||
this.lowLabel.hide();
|
||||
}
|
||||
if (!this.options.showLabels) {
|
||||
this.labels.hide();
|
||||
}
|
||||
this.attachEvents();
|
||||
if (this.options.showScale) {
|
||||
this.renderScale();
|
||||
}
|
||||
this.setValue(this.options.value);
|
||||
},
|
||||
isSingle: function() {
|
||||
if (typeof(this.options.value) === 'number') {
|
||||
return true;
|
||||
}
|
||||
return (this.options.value.indexOf(',') !== -1 || this.options.isRange) ?
|
||||
false : true;
|
||||
},
|
||||
attachEvents: function() {
|
||||
this.clickableBar.click($.proxy(this.barClicked, this));
|
||||
this.pointers.on('mousedown touchstart', $.proxy(this.onDragStart, this));
|
||||
this.pointers.bind('dragstart', function(event) {
|
||||
event.preventDefault();
|
||||
});
|
||||
},
|
||||
onDragStart: function(e) {
|
||||
if ( this.options.disable || (e.type === 'mousedown' && e.which !== 1)) {
|
||||
return;
|
||||
}
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
var pointer = $(e.target);
|
||||
this.pointers.removeClass('last-active');
|
||||
pointer.addClass('focused last-active');
|
||||
this[(pointer.hasClass('low') ? 'low' : 'high') + 'Label'].addClass('focused');
|
||||
$(document).on('mousemove.slider touchmove.slider', $.proxy(this.onDrag, this, pointer));
|
||||
$(document).on('mouseup.slider touchend.slider touchcancel.slider', $.proxy(this.onDragEnd, this));
|
||||
},
|
||||
onDrag: function(pointer, e) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
|
||||
if (e.originalEvent.touches && e.originalEvent.touches.length) {
|
||||
e = e.originalEvent.touches[0];
|
||||
} else if (e.originalEvent.changedTouches && e.originalEvent.changedTouches.length) {
|
||||
e = e.originalEvent.changedTouches[0];
|
||||
}
|
||||
|
||||
var position = e.clientX - this.domNode.offset().left;
|
||||
this.domNode.trigger('change', [this, pointer, position]);
|
||||
},
|
||||
onDragEnd: function(e) {
|
||||
this.pointers.removeClass('focused')
|
||||
.trigger('rangeslideend');
|
||||
this.labels.removeClass('focused');
|
||||
$(document).off('.slider');
|
||||
this.options.ondragend.call(this, this.options.value);
|
||||
},
|
||||
barClicked: function(e) {
|
||||
if(this.options.disable) return;
|
||||
var x = e.pageX - this.clickableBar.offset().left;
|
||||
if (this.isSingle())
|
||||
this.setPosition(this.pointers.last(), x, true, true);
|
||||
else {
|
||||
var firstLeft = Math.abs(parseFloat(this.pointers.first().css('left'), 10)),
|
||||
firstHalfWidth = this.pointers.first().width() / 2,
|
||||
lastLeft = Math.abs(parseFloat(this.pointers.last().css('left'), 10)),
|
||||
lastHalfWidth = this.pointers.first().width() / 2,
|
||||
leftSide = Math.abs(firstLeft - x + firstHalfWidth),
|
||||
rightSide = Math.abs(lastLeft - x + lastHalfWidth),
|
||||
pointer;
|
||||
|
||||
if(leftSide == rightSide) {
|
||||
pointer = x < firstLeft ? this.pointers.first() : this.pointers.last();
|
||||
} else {
|
||||
pointer = leftSide < rightSide ? this.pointers.first() : this.pointers.last();
|
||||
}
|
||||
this.setPosition(pointer, x, true, true);
|
||||
}
|
||||
this.options.onbarclicked.call(this, this.options.value);
|
||||
},
|
||||
onChange: function(e, self, pointer, position) {
|
||||
var min, max;
|
||||
min = 0;
|
||||
max = self.domNode.width();
|
||||
|
||||
if (!self.isSingle()) {
|
||||
min = pointer.hasClass('high') ? parseFloat(self.lowPointer.css("left")) + (self.lowPointer.width() / 2) : 0;
|
||||
max = pointer.hasClass('low') ? parseFloat(self.highPointer.css("left")) + (self.highPointer.width() / 2) : self.domNode.width();
|
||||
}
|
||||
|
||||
var value = Math.min(Math.max(position, min), max);
|
||||
self.setPosition(pointer, value, true);
|
||||
},
|
||||
setPosition: function(pointer, position, isPx, animate) {
|
||||
var leftPos, rightPos,
|
||||
lowPos = parseFloat(this.lowPointer.css("left")),
|
||||
highPos = parseFloat(this.highPointer.css("left")) || 0,
|
||||
circleWidth = this.highPointer.width() / 2;
|
||||
if (!isPx) {
|
||||
position = this.prcToPx(position);
|
||||
}
|
||||
if(this.options.snap){
|
||||
var expPos = this.correctPositionForSnap(position);
|
||||
if(expPos === -1){
|
||||
return;
|
||||
}else{
|
||||
position = expPos;
|
||||
}
|
||||
}
|
||||
if (pointer[0] === this.highPointer[0]) {
|
||||
highPos = Math.round(position - circleWidth);
|
||||
} else {
|
||||
lowPos = Math.round(position - circleWidth);
|
||||
}
|
||||
pointer[animate ? 'animate' : 'css']({
|
||||
'left': Math.round(position - circleWidth)
|
||||
});
|
||||
if (this.isSingle()) {
|
||||
leftPos = 0;
|
||||
} else {
|
||||
leftPos = lowPos + circleWidth;
|
||||
rightPos = highPos + circleWidth;
|
||||
}
|
||||
var w = Math.round(highPos + circleWidth - leftPos);
|
||||
this.bar[animate ? 'animate' : 'css']({
|
||||
'width': Math.abs(w),
|
||||
'left': (w>0) ? leftPos : leftPos + w
|
||||
});
|
||||
this.showPointerValue(pointer, position, animate);
|
||||
this.isReadonly();
|
||||
},
|
||||
correctPositionForSnap: function(position){
|
||||
var currentValue = this.positionToValue(position) - this.options.from;
|
||||
var diff = this.options.width / (this.interval / this.options.step),
|
||||
expectedPosition = (currentValue / this.options.step) * diff;
|
||||
if( position <= expectedPosition + diff / 2 && position >= expectedPosition - diff / 2){
|
||||
return expectedPosition;
|
||||
}else{
|
||||
return -1;
|
||||
}
|
||||
},
|
||||
// will be called from outside
|
||||
setValue: function(value) {
|
||||
var values = value.toString().split(',');
|
||||
values[0] = Math.min(Math.max(values[0], this.options.from), this.options.to) + '';
|
||||
if (values.length > 1){
|
||||
values[1] = Math.min(Math.max(values[1], this.options.from), this.options.to) + '';
|
||||
}
|
||||
this.options.value = value;
|
||||
var prc = this.valuesToPrc(values.length === 2 ? values : [0, values[0]]);
|
||||
if (this.isSingle()) {
|
||||
this.setPosition(this.highPointer, prc[1]);
|
||||
} else {
|
||||
this.setPosition(this.lowPointer, prc[0]);
|
||||
this.setPosition(this.highPointer, prc[1]);
|
||||
}
|
||||
},
|
||||
renderScale: function() {
|
||||
var s = this.options.scale || [this.options.from, this.options.to];
|
||||
var prc = Math.round((100 / (s.length - 1)) * 10) / 10;
|
||||
var str = '';
|
||||
for (var i = 0; i < s.length; i++) {
|
||||
str += '<span style="left: ' + i * prc + '%">' + (s[i] != '|' ? '<ins>' + s[i] + '</ins>' : '') + '</span>';
|
||||
}
|
||||
this.scale.html(str);
|
||||
|
||||
$('ins', this.scale).each(function() {
|
||||
$(this).css({
|
||||
marginLeft: -$(this).outerWidth() / 2
|
||||
});
|
||||
});
|
||||
},
|
||||
getBarWidth: function() {
|
||||
var values = this.options.value.split(',');
|
||||
if (values.length > 1) {
|
||||
return parseFloat(values[1]) - parseFloat(values[0]);
|
||||
} else {
|
||||
return parseFloat(values[0]);
|
||||
}
|
||||
},
|
||||
showPointerValue: function(pointer, position, animate) {
|
||||
var label = $('.pointer-label', this.domNode)[pointer.hasClass('low') ? 'first' : 'last']();
|
||||
var text;
|
||||
var value = this.positionToValue(position);
|
||||
// Is it higer or lower than it should be?
|
||||
|
||||
if ($.isFunction(this.options.format)) {
|
||||
var type = this.isSingle() ? undefined : (pointer.hasClass('low') ? 'low' : 'high');
|
||||
text = this.options.format(value, type);
|
||||
} else {
|
||||
text = this.options.format.replace('%s', value);
|
||||
}
|
||||
|
||||
var width = label.html(text).width(),
|
||||
left = position - width / 2;
|
||||
left = Math.min(Math.max(left, 0), this.options.width - width);
|
||||
label[animate ? 'animate' : 'css']({
|
||||
left: left
|
||||
});
|
||||
this.setInputValue(pointer, value);
|
||||
},
|
||||
valuesToPrc: function(values) {
|
||||
var lowPrc = ((parseFloat(values[0]) - parseFloat(this.options.from)) * 100 / this.interval),
|
||||
highPrc = ((parseFloat(values[1]) - parseFloat(this.options.from)) * 100 / this.interval);
|
||||
return [lowPrc, highPrc];
|
||||
},
|
||||
prcToPx: function(prc) {
|
||||
return (this.domNode.width() * prc) / 100;
|
||||
},
|
||||
isDecimal: function() {
|
||||
return ((this.options.value + this.options.from + this.options.to).indexOf(".")===-1) ? false : true;
|
||||
},
|
||||
positionToValue: function(pos) {
|
||||
var value = (pos / this.domNode.width()) * this.interval;
|
||||
value = parseFloat(value, 10) + parseFloat(this.options.from, 10);
|
||||
if (this.isDecimal()) {
|
||||
var final = Math.round(Math.round(value / this.options.step) * this.options.step *100)/100;
|
||||
if (final!==0.0) {
|
||||
final = '' + final;
|
||||
if (final.indexOf(".")===-1) {
|
||||
final = final + ".";
|
||||
}
|
||||
while (final.length - final.indexOf('.')<3) {
|
||||
final = final + "0";
|
||||
}
|
||||
} else {
|
||||
final = "0.00";
|
||||
}
|
||||
return final;
|
||||
} else {
|
||||
return Math.round(value / this.options.step) * this.options.step;
|
||||
}
|
||||
},
|
||||
setInputValue: function(pointer, v) {
|
||||
// if(!isChanged) return;
|
||||
if (this.isSingle()) {
|
||||
this.options.value = v.toString();
|
||||
} else {
|
||||
var values = this.options.value.split(',');
|
||||
if (pointer.hasClass('low')) {
|
||||
this.options.value = v + ',' + values[1];
|
||||
} else {
|
||||
this.options.value = values[0] + ',' + v;
|
||||
}
|
||||
}
|
||||
if (this.inputNode.val() !== this.options.value) {
|
||||
this.inputNode.val(this.options.value)
|
||||
.trigger('change');
|
||||
this.options.onstatechange.call(this, this.options.value);
|
||||
}
|
||||
},
|
||||
getValue: function() {
|
||||
return this.options.value;
|
||||
},
|
||||
getOptions: function() {
|
||||
return this.options;
|
||||
},
|
||||
getRange: function() {
|
||||
return this.options.from + "," + this.options.to;
|
||||
},
|
||||
isReadonly: function(){
|
||||
this.domNode.toggleClass('slider-readonly', this.options.disable);
|
||||
},
|
||||
disable: function(){
|
||||
this.options.disable = true;
|
||||
this.isReadonly();
|
||||
},
|
||||
enable: function(){
|
||||
this.options.disable = false;
|
||||
this.isReadonly();
|
||||
},
|
||||
toggleDisable: function(){
|
||||
this.options.disable = !this.options.disable;
|
||||
this.isReadonly();
|
||||
},
|
||||
updateRange: function(range, value) {
|
||||
var values = range.toString().split(',');
|
||||
this.interval = parseInt(values[1]) - parseInt(values[0]);
|
||||
if(value){
|
||||
this.setValue(value);
|
||||
}else{
|
||||
this.setValue(this.getValue());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var pluginName = 'jRange';
|
||||
// A really lightweight plugin wrapper around the constructor,
|
||||
// preventing against multiple instantiations
|
||||
$.fn[pluginName] = function(option) {
|
||||
var args = arguments,
|
||||
result;
|
||||
|
||||
this.each(function() {
|
||||
var $this = $(this),
|
||||
data = $.data(this, 'plugin_' + pluginName),
|
||||
options = typeof option === 'object' && option;
|
||||
if (!data) {
|
||||
$this.data('plugin_' + pluginName, (data = new jRange(this, options)));
|
||||
$(window).resize(function() {
|
||||
data.setValue(data.getValue());
|
||||
}); // Update slider position when window is resized to keep it in sync with scale
|
||||
}
|
||||
// if first argument is a string, call silimarly named function
|
||||
// this gives flexibility to call functions of the plugin e.g.
|
||||
// - $('.dial').plugin('destroy');
|
||||
// - $('.dial').plugin('render', $('.new-child'));
|
||||
if (typeof option === 'string') {
|
||||
result = data[option].apply(data, Array.prototype.slice.call(args, 1));
|
||||
}
|
||||
});
|
||||
|
||||
// To enable plugin returns values
|
||||
return result || this;
|
||||
};
|
||||
|
||||
})(jQuery, window, document);
|
4
public/static/index/.gitignore
vendored
Normal file
4
public/static/index/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
*
|
||||
!.gitignore
|
||||
!default
|
||||
!index.html
|
@ -1,4 +1,5 @@
|
||||
/** * 条件
|
||||
/**
|
||||
* 条件
|
||||
*/
|
||||
.map-item > li {
|
||||
background: transparent;
|
||||
@ -208,7 +209,9 @@
|
||||
.map-item > li {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
} /** * 条件指定品牌信息
|
||||
}
|
||||
/**
|
||||
* 条件指定品牌信息
|
||||
*/
|
||||
.brand-info .map-images-text-items {
|
||||
padding: 1.5rem 1.5rem 0 1.5rem;
|
||||
@ -237,7 +240,9 @@
|
||||
.brand-info .map-left {
|
||||
line-height: 8.4rem !important;
|
||||
}
|
||||
} /** * 条件基础信息
|
||||
}
|
||||
/**
|
||||
* 条件基础信息
|
||||
*/
|
||||
.map-base-tips {
|
||||
background: #fafafa;
|
||||
@ -252,7 +257,9 @@
|
||||
color: #666 !important;
|
||||
background-color: transparent;
|
||||
border-color: #eee;
|
||||
} /** * 导航
|
||||
}
|
||||
/**
|
||||
* 导航
|
||||
*/
|
||||
.search-nav {
|
||||
position: relative;
|
||||
@ -283,7 +290,9 @@
|
||||
.search-nav .am-sticky-placeholder .am-sticky {
|
||||
border-width: 0 0.1rem 0.1rem 0;
|
||||
}
|
||||
} /** * 排序
|
||||
}
|
||||
/**
|
||||
* 排序
|
||||
*/
|
||||
.sort-nav {
|
||||
padding: 0px;
|
||||
@ -327,12 +336,44 @@
|
||||
}
|
||||
@media only screen and (max-width: 640px) {
|
||||
.sort-nav li a {
|
||||
padding: 0.6rem 1rem;
|
||||
padding: 0.6rem 0.8rem;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页
|
||||
/**
|
||||
* 排序导航里面价格滑条
|
||||
*/
|
||||
.sort-nav-map-price-content {
|
||||
width: 22rem;
|
||||
}
|
||||
.sort-nav-map-price-range-slider-input,
|
||||
.sort-nav-map-price-bottom-operate {
|
||||
display: none;
|
||||
}
|
||||
.sort-nav-map-price-content .sort-nav-map-price-input input {
|
||||
width: 8rem;
|
||||
}
|
||||
.sort-nav-map-price:hover .sort-nav-map-price-content {
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
background: #fff;
|
||||
border: 0.1rem solid #ededed;
|
||||
box-shadow: var(--box-shadow);
|
||||
top: -0.5rem;
|
||||
padding: 0.5rem 1rem 1rem 1rem;
|
||||
}
|
||||
.sort-nav-map-price:hover .sort-nav-map-price-range-slider-input,
|
||||
.sort-nav-map-price:hover .sort-nav-map-price-bottom-operate {
|
||||
display: block;
|
||||
}
|
||||
@media only screen and (max-width: 1024px) {
|
||||
.sort-nav-map-price {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*/
|
||||
@media only screen and (max-width: 1024px) {
|
||||
.search-pages-submit {
|
||||
|
@ -471,8 +471,23 @@ $(function()
|
||||
}
|
||||
|
||||
// 加入购物车处理
|
||||
var goods_id = $(this).data('gid');
|
||||
if(parseInt($(this).data('is-many-spec') || 0) == 0)
|
||||
var $this = $(this);
|
||||
var goods_id = $this.attr('data-gid');
|
||||
var stock = parseInt($this.attr('data-stock') || 0);
|
||||
// 是否强制数量
|
||||
if(parseInt($this.attr('data-is-force-stock') || 0) == 1 && stock == 0)
|
||||
{
|
||||
Prompt(window['lang_goods_stock_empty_tips'] || '请输入购买数量');
|
||||
return false;
|
||||
}
|
||||
// 指定规格、先获取指定原始数据字段
|
||||
var spec = $this.attr('data-original-spec') || $this.attr('data-spec') || '';
|
||||
if(spec !== '')
|
||||
{
|
||||
spec = JSON.parse(CryptoJS.enc.Base64.parse(decodeURIComponent(spec)).toString(CryptoJS.enc.Utf8));
|
||||
}
|
||||
// 已确定非多规格 或 存在指定多规格数据则直接加入购物车操作
|
||||
if(parseInt($(this).data('is-many-spec') || 0) == 0 || spec !== '')
|
||||
{
|
||||
$.AMUI.progress.start();
|
||||
$.ajax({
|
||||
@ -482,7 +497,8 @@ $(function()
|
||||
timeout: 10000,
|
||||
data: {
|
||||
goods_id: goods_id,
|
||||
stock: 1
|
||||
stock: stock || 1,
|
||||
spec: spec,
|
||||
},
|
||||
success: function(res)
|
||||
{
|
||||
@ -491,9 +507,16 @@ $(function()
|
||||
{
|
||||
// 更新公共购物车数量
|
||||
HomeCartNumberTotalUpdate(res.data.buy_number);
|
||||
|
||||
// 提示成功
|
||||
Prompt(res.msg, 'success');
|
||||
|
||||
// 是否展示购物车成功提示弹窗
|
||||
if(parseInt($this.attr('data-is-cart-success-modal') || 0) == 1)
|
||||
{
|
||||
// 展示购物车成功提示弹窗
|
||||
HomeUserCartSuccessModal(res.data.buy_number);
|
||||
} else {
|
||||
// 提示成功
|
||||
Prompt(res.msg, 'success');
|
||||
}
|
||||
} else {
|
||||
Prompt(res.msg);
|
||||
}
|
||||
|
@ -458,8 +458,8 @@ function GoodsSpecType()
|
||||
function GoodsBrowserHistoryUrlChange()
|
||||
{
|
||||
var spec = GoodsSelectedSpec();
|
||||
var value = (spec.length == 0) ? null : spec.map(function(v){return v.value;}).join('|');
|
||||
history.pushState({}, '', UrlFieldReplace('spec', value));
|
||||
var value = (spec.length == 0) ? (GetQueryValue('spec') || null) : spec.map(function(v){return v.value;}).join('|');
|
||||
history.pushState({}, '', UrlFieldReplace('spec', value));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -30,4 +30,42 @@ $(function()
|
||||
var value = ($(this).data('value') || 0) == 1 ? 0 : 1;
|
||||
window.location.href = UrlFieldReplace('layout', value);
|
||||
});
|
||||
|
||||
// 价格滑条初始化
|
||||
var $range_input = $('.sort-nav-map-price-range-slider-input input');
|
||||
$range_input.jRange({
|
||||
from: 0,
|
||||
to: $range_input.attr('data-to'),
|
||||
step: 1,
|
||||
showScale: false,
|
||||
format: '%s',
|
||||
width: 178,
|
||||
showLabels: true,
|
||||
isRange : false,
|
||||
theme: 'theme-main',
|
||||
onstatechange: function(res) {
|
||||
var arr = res.split(',');
|
||||
$('.sort-nav-map-price-input-min').val(arr[0]);
|
||||
$('.sort-nav-map-price-input-max').val(arr[1]);
|
||||
}
|
||||
});
|
||||
// 价格滑条清空
|
||||
$(document).on('click', '.sort-nav-map-price-clear', function()
|
||||
{
|
||||
$('.sort-nav-map-price-input-min,.sort-nav-map-price-input-max').val('');
|
||||
window.location.href = UrlFieldReplace('price', null);
|
||||
});
|
||||
// 价格滑条确认
|
||||
$(document).on('click', '.sort-nav-map-price-submit', function()
|
||||
{
|
||||
var min = FomatFloat($('.sort-nav-map-price-input-min').val() || 0);
|
||||
var max = FomatFloat($('.sort-nav-map-price-input-max').val() || 0);
|
||||
if(min <= 0 && max <= 0)
|
||||
{
|
||||
var url = UrlFieldReplace('price', null);
|
||||
} else {
|
||||
var url = UrlFieldReplace('price', min+'-'+max);
|
||||
}
|
||||
window.location.href = url;
|
||||
});
|
||||
});
|
120
vendor/bin/pinyin
vendored
Executable file
120
vendor/bin/pinyin
vendored
Executable file
@ -0,0 +1,120 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Proxy PHP file generated by Composer
|
||||
*
|
||||
* This file includes the referenced bin path (../overtrue/pinyin/bin/pinyin)
|
||||
* using a stream wrapper to prevent the shebang from being output on PHP<8
|
||||
*
|
||||
* @generated
|
||||
*/
|
||||
|
||||
namespace Composer;
|
||||
|
||||
$GLOBALS['_composer_bin_dir'] = __DIR__;
|
||||
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
|
||||
|
||||
if (PHP_VERSION_ID < 80000) {
|
||||
if (!class_exists('Composer\BinProxyWrapper')) {
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
final class BinProxyWrapper
|
||||
{
|
||||
private $handle;
|
||||
private $position;
|
||||
private $realpath;
|
||||
|
||||
public function stream_open($path, $mode, $options, &$opened_path)
|
||||
{
|
||||
// get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
|
||||
$opened_path = substr($path, 17);
|
||||
$this->realpath = realpath($opened_path) ?: $opened_path;
|
||||
$opened_path = $this->realpath;
|
||||
$this->handle = fopen($this->realpath, $mode);
|
||||
$this->position = 0;
|
||||
|
||||
return (bool) $this->handle;
|
||||
}
|
||||
|
||||
public function stream_read($count)
|
||||
{
|
||||
$data = fread($this->handle, $count);
|
||||
|
||||
if ($this->position === 0) {
|
||||
$data = preg_replace('{^#!.*\r?\n}', '', $data);
|
||||
}
|
||||
|
||||
$this->position += strlen($data);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function stream_cast($castAs)
|
||||
{
|
||||
return $this->handle;
|
||||
}
|
||||
|
||||
public function stream_close()
|
||||
{
|
||||
fclose($this->handle);
|
||||
}
|
||||
|
||||
public function stream_lock($operation)
|
||||
{
|
||||
return $operation ? flock($this->handle, $operation) : true;
|
||||
}
|
||||
|
||||
public function stream_seek($offset, $whence)
|
||||
{
|
||||
if (0 === fseek($this->handle, $offset, $whence)) {
|
||||
$this->position = ftell($this->handle);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function stream_tell()
|
||||
{
|
||||
return $this->position;
|
||||
}
|
||||
|
||||
public function stream_eof()
|
||||
{
|
||||
return feof($this->handle);
|
||||
}
|
||||
|
||||
public function stream_stat()
|
||||
{
|
||||
return array();
|
||||
}
|
||||
|
||||
public function stream_set_option($option, $arg1, $arg2)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function url_stat($path, $flags)
|
||||
{
|
||||
$path = substr($path, 17);
|
||||
if (file_exists($path)) {
|
||||
return stat($path);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
(function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
|
||||
|| (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
|
||||
) {
|
||||
include("phpvfscomposer://" . __DIR__ . '/..'.'/overtrue/pinyin/bin/pinyin');
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
include __DIR__ . '/..'.'/overtrue/pinyin/bin/pinyin';
|
15
vendor/bin/var-dump-server
vendored
15
vendor/bin/var-dump-server
vendored
@ -66,6 +66,16 @@ if (PHP_VERSION_ID < 80000) {
|
||||
return $operation ? flock($this->handle, $operation) : true;
|
||||
}
|
||||
|
||||
public function stream_seek($offset, $whence)
|
||||
{
|
||||
if (0 === fseek($this->handle, $offset, $whence)) {
|
||||
$this->position = ftell($this->handle);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function stream_tell()
|
||||
{
|
||||
return $this->position;
|
||||
@ -98,7 +108,10 @@ if (PHP_VERSION_ID < 80000) {
|
||||
}
|
||||
}
|
||||
|
||||
if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) {
|
||||
if (
|
||||
(function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
|
||||
|| (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
|
||||
) {
|
||||
include("phpvfscomposer://" . __DIR__ . '/..'.'/symfony/var-dumper/Resources/bin/var-dump-server');
|
||||
exit(0);
|
||||
}
|
||||
|
7
vendor/composer/autoload_classmap.php
vendored
7
vendor/composer/autoload_classmap.php
vendored
@ -6,10 +6,7 @@ $vendorDir = dirname(__DIR__);
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
|
||||
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
|
||||
'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
|
||||
'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',
|
||||
'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
|
||||
'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',
|
||||
'Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php',
|
||||
'Stringable' => $vendorDir . '/myclabs/php-enum/stubs/Stringable.php',
|
||||
);
|
||||
|
9
vendor/composer/autoload_files.php
vendored
9
vendor/composer/autoload_files.php
vendored
@ -8,10 +8,11 @@ $baseDir = dirname($vendorDir);
|
||||
return array(
|
||||
'9b552a3cc426e3287cc811caefa3cf53' => $vendorDir . '/topthink/think-helper/src/helper.php',
|
||||
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||
'35fab96057f1bf5e7aba31a8a6d5fdde' => $vendorDir . '/topthink/think-orm/stubs/load_stubs.php',
|
||||
'2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
|
||||
'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php',
|
||||
'8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php',
|
||||
'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php',
|
||||
'25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php',
|
||||
'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
|
||||
'dc1275c308c5b416beb314b6317daca2' => $vendorDir . '/overtrue/pinyin/src/const.php',
|
||||
'35fab96057f1bf5e7aba31a8a6d5fdde' => $vendorDir . '/topthink/think-orm/stubs/load_stubs.php',
|
||||
'b46ad4fe52f4d1899a2951c7e6ea56b0' => $vendorDir . '/voku/portable-utf8/bootstrap.php',
|
||||
'667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php',
|
||||
);
|
||||
|
1
vendor/composer/autoload_namespaces.php
vendored
1
vendor/composer/autoload_namespaces.php
vendored
@ -6,6 +6,5 @@ $vendorDir = dirname(__DIR__);
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'HTMLPurifier' => array($vendorDir . '/ezyang/htmlpurifier/library'),
|
||||
'' => array($baseDir . '/extend'),
|
||||
);
|
||||
|
9
vendor/composer/autoload_psr4.php
vendored
9
vendor/composer/autoload_psr4.php
vendored
@ -6,23 +6,28 @@ $vendorDir = dirname(__DIR__);
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'voku\\helper\\' => array($vendorDir . '/voku/anti-xss/src/voku/helper'),
|
||||
'voku\\' => array($vendorDir . '/voku/portable-ascii/src/voku', $vendorDir . '/voku/portable-utf8/src/voku'),
|
||||
'think\\view\\driver\\' => array($vendorDir . '/topthink/think-view/src'),
|
||||
'think\\trace\\' => array($vendorDir . '/topthink/think-trace/src'),
|
||||
'think\\app\\' => array($vendorDir . '/topthink/think-multi-app/src'),
|
||||
'think\\' => array($vendorDir . '/topthink/framework/src/think', $vendorDir . '/topthink/think-helper/src', $vendorDir . '/topthink/think-orm/src', $vendorDir . '/topthink/think-template/src'),
|
||||
'app\\' => array($baseDir . '/app'),
|
||||
'ZipStream\\' => array($vendorDir . '/maennchen/zipstream-php/src'),
|
||||
'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
|
||||
'Symfony\\Polyfill\\Php72\\' => array($vendorDir . '/symfony/polyfill-php72'),
|
||||
'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
|
||||
'Symfony\\Polyfill\\Intl\\Normalizer\\' => array($vendorDir . '/symfony/polyfill-intl-normalizer'),
|
||||
'Symfony\\Polyfill\\Intl\\Grapheme\\' => array($vendorDir . '/symfony/polyfill-intl-grapheme'),
|
||||
'Symfony\\Polyfill\\Iconv\\' => array($vendorDir . '/symfony/polyfill-iconv'),
|
||||
'Symfony\\Component\\VarDumper\\' => array($vendorDir . '/symfony/var-dumper'),
|
||||
'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
|
||||
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
|
||||
'Psr\\Log\\' => array($vendorDir . '/psr/log/src'),
|
||||
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'),
|
||||
'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'),
|
||||
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
|
||||
'Picqer\\Barcode\\' => array($vendorDir . '/picqer/php-barcode-generator/src'),
|
||||
'PhpOffice\\PhpSpreadsheet\\' => array($vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet'),
|
||||
'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'),
|
||||
'Overtrue\\Pinyin\\' => array($vendorDir . '/overtrue/pinyin/src'),
|
||||
'MyCLabs\\Enum\\' => array($vendorDir . '/myclabs/php-enum/src'),
|
||||
'Matrix\\' => array($vendorDir . '/markbaker/matrix/classes/src'),
|
||||
|
68
vendor/composer/autoload_static.php
vendored
68
vendor/composer/autoload_static.php
vendored
@ -9,15 +9,21 @@ class ComposerStaticInit1ed187777399b73a018d9a6af63a57d1
|
||||
public static $files = array (
|
||||
'9b552a3cc426e3287cc811caefa3cf53' => __DIR__ . '/..' . '/topthink/think-helper/src/helper.php',
|
||||
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||
'35fab96057f1bf5e7aba31a8a6d5fdde' => __DIR__ . '/..' . '/topthink/think-orm/stubs/load_stubs.php',
|
||||
'2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
|
||||
'def43f6c87e4f8dfd0c9e1b1bab14fe8' => __DIR__ . '/..' . '/symfony/polyfill-iconv/bootstrap.php',
|
||||
'8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php',
|
||||
'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php',
|
||||
'25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php',
|
||||
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
|
||||
'dc1275c308c5b416beb314b6317daca2' => __DIR__ . '/..' . '/overtrue/pinyin/src/const.php',
|
||||
'35fab96057f1bf5e7aba31a8a6d5fdde' => __DIR__ . '/..' . '/topthink/think-orm/stubs/load_stubs.php',
|
||||
'b46ad4fe52f4d1899a2951c7e6ea56b0' => __DIR__ . '/..' . '/voku/portable-utf8/bootstrap.php',
|
||||
'667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php',
|
||||
);
|
||||
|
||||
public static $prefixLengthsPsr4 = array (
|
||||
'v' =>
|
||||
array (
|
||||
'voku\\helper\\' => 12,
|
||||
'voku\\' => 5,
|
||||
),
|
||||
't' =>
|
||||
array (
|
||||
'think\\view\\driver\\' => 18,
|
||||
@ -35,9 +41,11 @@ class ComposerStaticInit1ed187777399b73a018d9a6af63a57d1
|
||||
),
|
||||
'S' =>
|
||||
array (
|
||||
'Symfony\\Polyfill\\Php80\\' => 23,
|
||||
'Symfony\\Polyfill\\Php72\\' => 23,
|
||||
'Symfony\\Polyfill\\Mbstring\\' => 26,
|
||||
'Symfony\\Polyfill\\Intl\\Normalizer\\' => 33,
|
||||
'Symfony\\Polyfill\\Intl\\Grapheme\\' => 31,
|
||||
'Symfony\\Polyfill\\Iconv\\' => 23,
|
||||
'Symfony\\Component\\VarDumper\\' => 28,
|
||||
),
|
||||
'P' =>
|
||||
@ -49,6 +57,7 @@ class ComposerStaticInit1ed187777399b73a018d9a6af63a57d1
|
||||
'Psr\\Container\\' => 14,
|
||||
'Picqer\\Barcode\\' => 15,
|
||||
'PhpOffice\\PhpSpreadsheet\\' => 25,
|
||||
'PHPMailer\\PHPMailer\\' => 20,
|
||||
),
|
||||
'O' =>
|
||||
array (
|
||||
@ -66,6 +75,15 @@ class ComposerStaticInit1ed187777399b73a018d9a6af63a57d1
|
||||
);
|
||||
|
||||
public static $prefixDirsPsr4 = array (
|
||||
'voku\\helper\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/voku/anti-xss/src/voku/helper',
|
||||
),
|
||||
'voku\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/voku/portable-ascii/src/voku',
|
||||
1 => __DIR__ . '/..' . '/voku/portable-utf8/src/voku',
|
||||
),
|
||||
'think\\view\\driver\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/topthink/think-view/src',
|
||||
@ -93,10 +111,6 @@ class ComposerStaticInit1ed187777399b73a018d9a6af63a57d1
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/maennchen/zipstream-php/src',
|
||||
),
|
||||
'Symfony\\Polyfill\\Php80\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/polyfill-php80',
|
||||
),
|
||||
'Symfony\\Polyfill\\Php72\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/polyfill-php72',
|
||||
@ -105,6 +119,18 @@ class ComposerStaticInit1ed187777399b73a018d9a6af63a57d1
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
|
||||
),
|
||||
'Symfony\\Polyfill\\Intl\\Normalizer\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer',
|
||||
),
|
||||
'Symfony\\Polyfill\\Intl\\Grapheme\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme',
|
||||
),
|
||||
'Symfony\\Polyfill\\Iconv\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/polyfill-iconv',
|
||||
),
|
||||
'Symfony\\Component\\VarDumper\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/var-dumper',
|
||||
@ -115,7 +141,7 @@ class ComposerStaticInit1ed187777399b73a018d9a6af63a57d1
|
||||
),
|
||||
'Psr\\Log\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/psr/log/Psr/Log',
|
||||
0 => __DIR__ . '/..' . '/psr/log/src',
|
||||
),
|
||||
'Psr\\Http\\Message\\' =>
|
||||
array (
|
||||
@ -138,6 +164,10 @@ class ComposerStaticInit1ed187777399b73a018d9a6af63a57d1
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet',
|
||||
),
|
||||
'PHPMailer\\PHPMailer\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/phpmailer/phpmailer/src',
|
||||
),
|
||||
'Overtrue\\Pinyin\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/overtrue/pinyin/src',
|
||||
@ -156,27 +186,14 @@ class ComposerStaticInit1ed187777399b73a018d9a6af63a57d1
|
||||
),
|
||||
);
|
||||
|
||||
public static $prefixesPsr0 = array (
|
||||
'H' =>
|
||||
array (
|
||||
'HTMLPurifier' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/ezyang/htmlpurifier/library',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
public static $fallbackDirsPsr0 = array (
|
||||
0 => __DIR__ . '/../..' . '/extend',
|
||||
);
|
||||
|
||||
public static $classMap = array (
|
||||
'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
|
||||
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
|
||||
'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
|
||||
'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',
|
||||
'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
|
||||
'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',
|
||||
'Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php',
|
||||
'Stringable' => __DIR__ . '/..' . '/myclabs/php-enum/stubs/Stringable.php',
|
||||
);
|
||||
|
||||
public static function getInitializer(ClassLoader $loader)
|
||||
@ -184,7 +201,6 @@ class ComposerStaticInit1ed187777399b73a018d9a6af63a57d1
|
||||
return \Closure::bind(function () use ($loader) {
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInit1ed187777399b73a018d9a6af63a57d1::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInit1ed187777399b73a018d9a6af63a57d1::$prefixDirsPsr4;
|
||||
$loader->prefixesPsr0 = ComposerStaticInit1ed187777399b73a018d9a6af63a57d1::$prefixesPsr0;
|
||||
$loader->fallbackDirsPsr0 = ComposerStaticInit1ed187777399b73a018d9a6af63a57d1::$fallbackDirsPsr0;
|
||||
$loader->classMap = ComposerStaticInit1ed187777399b73a018d9a6af63a57d1::$classMap;
|
||||
|
||||
|
1277
vendor/composer/installed.json
vendored
1277
vendor/composer/installed.json
vendored
File diff suppressed because it is too large
Load Diff
201
vendor/composer/installed.php
vendored
201
vendor/composer/installed.php
vendored
@ -3,26 +3,17 @@
|
||||
'name' => 'shopxo/shopxo',
|
||||
'pretty_version' => 'dev-develop',
|
||||
'version' => 'dev-develop',
|
||||
'reference' => '1b27f9487d0b5112e501339ebbefb78e67a4df25',
|
||||
'reference' => '41b41a07c6eec5e00576f354757508ee6dae9047',
|
||||
'type' => 'project',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
'dev' => true,
|
||||
),
|
||||
'versions' => array(
|
||||
'ezyang/htmlpurifier' => array(
|
||||
'pretty_version' => 'v4.16.0',
|
||||
'version' => '4.16.0.0',
|
||||
'reference' => '523407fb06eb9e5f3d59889b3978d5bfe94299c8',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../ezyang/htmlpurifier',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'maennchen/zipstream-php' => array(
|
||||
'pretty_version' => '2.2.6',
|
||||
'version' => '2.2.6.0',
|
||||
'reference' => '30ad6f93cf3efe4192bc7a4c9cad11ff8f4f237f',
|
||||
'pretty_version' => '2.4.0',
|
||||
'version' => '2.4.0.0',
|
||||
'reference' => '3fa72e4c71a43f9e9118752a5c90e476a8dc9eb3',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../maennchen/zipstream-php',
|
||||
'aliases' => array(),
|
||||
@ -47,90 +38,99 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'myclabs/php-enum' => array(
|
||||
'pretty_version' => '1.8.3',
|
||||
'version' => '1.8.3.0',
|
||||
'reference' => 'b942d263c641ddb5190929ff840c68f78713e937',
|
||||
'pretty_version' => '1.8.4',
|
||||
'version' => '1.8.4.0',
|
||||
'reference' => 'a867478eae49c9f59ece437ae7f9506bfaa27483',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../myclabs/php-enum',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'overtrue/pinyin' => array(
|
||||
'pretty_version' => '4.0.8',
|
||||
'version' => '4.0.8.0',
|
||||
'reference' => '04bdb4d33d50e8fb1aa5a824064c5151c4b15dc2',
|
||||
'pretty_version' => '5.3.2',
|
||||
'version' => '5.3.2.0',
|
||||
'reference' => '8255ee3233a698a13ef049870b3a70a9fc723af5',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../overtrue/pinyin',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'phpmailer/phpmailer' => array(
|
||||
'pretty_version' => 'v6.9.1',
|
||||
'version' => '6.9.1.0',
|
||||
'reference' => '039de174cd9c17a8389754d3b877a2ed22743e18',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phpmailer/phpmailer',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'phpoffice/phpspreadsheet' => array(
|
||||
'pretty_version' => '1.28.0',
|
||||
'version' => '1.28.0.0',
|
||||
'reference' => '6e81cf39bbd93ebc3a4e8150444c41e8aa9b769a',
|
||||
'pretty_version' => '2.0.0',
|
||||
'version' => '2.0.0.0',
|
||||
'reference' => '4a77798f835119754961a97714f135826a323caa',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phpoffice/phpspreadsheet',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'picqer/php-barcode-generator' => array(
|
||||
'pretty_version' => 'v2.2.4',
|
||||
'version' => '2.2.4.0',
|
||||
'reference' => 'b98f110cc5a79f723688fb17fd90b9325300d844',
|
||||
'pretty_version' => 'v2.4.0',
|
||||
'version' => '2.4.0.0',
|
||||
'reference' => '4cec18909dffd86e14beb69b1040f2520c2e1bb1',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../picqer/php-barcode-generator',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'psr/container' => array(
|
||||
'pretty_version' => '1.1.2',
|
||||
'version' => '1.1.2.0',
|
||||
'reference' => '513e0666f7216c7459170d56df27dfcefe1689ea',
|
||||
'pretty_version' => '2.0.2',
|
||||
'version' => '2.0.2.0',
|
||||
'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../psr/container',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'psr/http-client' => array(
|
||||
'pretty_version' => '1.0.1',
|
||||
'version' => '1.0.1.0',
|
||||
'reference' => '2dfb5f6c5eff0e91e20e913f8c5452ed95b86621',
|
||||
'pretty_version' => '1.0.3',
|
||||
'version' => '1.0.3.0',
|
||||
'reference' => 'bb5906edc1c324c9a05aa0873d40117941e5fa90',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../psr/http-client',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'psr/http-factory' => array(
|
||||
'pretty_version' => '1.0.1',
|
||||
'version' => '1.0.1.0',
|
||||
'reference' => '12ac7fcd07e5b077433f5f2bee95b3a771bf61be',
|
||||
'pretty_version' => '1.0.2',
|
||||
'version' => '1.0.2.0',
|
||||
'reference' => 'e616d01114759c4c489f93b099585439f795fe35',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../psr/http-factory',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'psr/http-message' => array(
|
||||
'pretty_version' => '1.0.1',
|
||||
'version' => '1.0.1.0',
|
||||
'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363',
|
||||
'pretty_version' => '1.1',
|
||||
'version' => '1.1.0.0',
|
||||
'reference' => 'cb6ce4845ce34a8ad9e68117c10ee90a29919eba',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../psr/http-message',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'psr/log' => array(
|
||||
'pretty_version' => '1.1.4',
|
||||
'version' => '1.1.4.0',
|
||||
'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11',
|
||||
'pretty_version' => '3.0.0',
|
||||
'version' => '3.0.0.0',
|
||||
'reference' => 'fe5ea303b0887d5caefd3d431c3e61ad47037001',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../psr/log',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'psr/simple-cache' => array(
|
||||
'pretty_version' => '1.0.1',
|
||||
'version' => '1.0.1.0',
|
||||
'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b',
|
||||
'pretty_version' => '3.0.0',
|
||||
'version' => '3.0.0.0',
|
||||
'reference' => '764e0b3939f5ca87cb904f570ef9be2d78a07865',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../psr/simple-cache',
|
||||
'aliases' => array(),
|
||||
@ -139,52 +139,70 @@
|
||||
'shopxo/shopxo' => array(
|
||||
'pretty_version' => 'dev-develop',
|
||||
'version' => 'dev-develop',
|
||||
'reference' => '1b27f9487d0b5112e501339ebbefb78e67a4df25',
|
||||
'reference' => '41b41a07c6eec5e00576f354757508ee6dae9047',
|
||||
'type' => 'project',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-iconv' => array(
|
||||
'pretty_version' => 'v1.29.0',
|
||||
'version' => '1.29.0.0',
|
||||
'reference' => 'cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-iconv',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-intl-grapheme' => array(
|
||||
'pretty_version' => 'v1.29.0',
|
||||
'version' => '1.29.0.0',
|
||||
'reference' => '32a9da87d7b3245e09ac426c83d334ae9f06f80f',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-intl-grapheme',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-intl-normalizer' => array(
|
||||
'pretty_version' => 'v1.28.0',
|
||||
'version' => '1.28.0.0',
|
||||
'reference' => '8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-mbstring' => array(
|
||||
'pretty_version' => 'v1.27.0',
|
||||
'version' => '1.27.0.0',
|
||||
'reference' => '8ad114f6b39e2c98a8b0e3bd907732c207c2b534',
|
||||
'pretty_version' => 'v1.28.0',
|
||||
'version' => '1.28.0.0',
|
||||
'reference' => '42292d99c55abe617799667f454222c54c60e229',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-php72' => array(
|
||||
'pretty_version' => 'v1.27.0',
|
||||
'version' => '1.27.0.0',
|
||||
'reference' => '869329b1e9894268a8a61dabb69153029b7a8c97',
|
||||
'pretty_version' => 'v1.29.0',
|
||||
'version' => '1.29.0.0',
|
||||
'reference' => '861391a8da9a04cbad2d232ddd9e4893220d6e25',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-php72',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
),
|
||||
'symfony/polyfill-php80' => array(
|
||||
'pretty_version' => 'v1.27.0',
|
||||
'version' => '1.27.0.0',
|
||||
'reference' => '7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-php80',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/var-dumper' => array(
|
||||
'pretty_version' => 'v4.4.47',
|
||||
'version' => '4.4.47.0',
|
||||
'reference' => '1069c7a3fca74578022fab6f81643248d02f8e63',
|
||||
'pretty_version' => 'v6.0.19',
|
||||
'version' => '6.0.19.0',
|
||||
'reference' => 'eb980457fa6899840fe1687e8627a03a7d8a3d52',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/var-dumper',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => true,
|
||||
),
|
||||
'topthink/framework' => array(
|
||||
'pretty_version' => 'v6.1.2',
|
||||
'version' => '6.1.2.0',
|
||||
'reference' => '67235be5b919aaaf1de5aed9839f65d8e766aca3',
|
||||
'pretty_version' => 'v8.0.3',
|
||||
'version' => '8.0.3.0',
|
||||
'reference' => '5e59fb1e2bcb400c6f82e99d1a40dd058afc8563',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../topthink/framework',
|
||||
'aliases' => array(),
|
||||
@ -200,27 +218,27 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'topthink/think-multi-app' => array(
|
||||
'pretty_version' => 'v1.0.16',
|
||||
'version' => '1.0.16.0',
|
||||
'reference' => '07b9183855150455e1f76f8cbe9d77d6d1bc399f',
|
||||
'pretty_version' => 'v1.0.17',
|
||||
'version' => '1.0.17.0',
|
||||
'reference' => '4055a6187296ac16c0bc7bbab4ed5d92f82f791c',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../topthink/think-multi-app',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'topthink/think-orm' => array(
|
||||
'pretty_version' => 'v2.0.59',
|
||||
'version' => '2.0.59.0',
|
||||
'reference' => 'ac0f18bc3063ca924ed5b4af6e405d74f44d2870',
|
||||
'pretty_version' => 'v3.0.14',
|
||||
'version' => '3.0.14.0',
|
||||
'reference' => '7b0b8ea6ca5e020217f6ba7ae34d547e148a675b',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../topthink/think-orm',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'topthink/think-template' => array(
|
||||
'pretty_version' => 'v2.0.9',
|
||||
'version' => '2.0.9.0',
|
||||
'reference' => '6d25642ae0e306166742fd7073dc7a159e18073c',
|
||||
'pretty_version' => 'v3.0.0',
|
||||
'version' => '3.0.0.0',
|
||||
'reference' => '4352d2cf627abfb8b49f830686c25c02f59c23f2',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../topthink/think-template',
|
||||
'aliases' => array(),
|
||||
@ -236,13 +254,40 @@
|
||||
'dev_requirement' => true,
|
||||
),
|
||||
'topthink/think-view' => array(
|
||||
'pretty_version' => 'v1.0.14',
|
||||
'version' => '1.0.14.0',
|
||||
'reference' => 'edce0ae2c9551ab65f9e94a222604b0dead3576d',
|
||||
'pretty_version' => 'v2.0.0',
|
||||
'version' => '2.0.0.0',
|
||||
'reference' => 'd2a076011c96d2edd8016703a827fb54b2683c62',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../topthink/think-view',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'voku/anti-xss' => array(
|
||||
'pretty_version' => '4.1.42',
|
||||
'version' => '4.1.42.0',
|
||||
'reference' => 'bca1f8607e55a3c5077483615cd93bd8f11bd675',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../voku/anti-xss',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'voku/portable-ascii' => array(
|
||||
'pretty_version' => '2.0.1',
|
||||
'version' => '2.0.1.0',
|
||||
'reference' => 'b56450eed252f6801410d810c8e1727224ae0743',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../voku/portable-ascii',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'voku/portable-utf8' => array(
|
||||
'pretty_version' => '6.0.13',
|
||||
'version' => '6.0.13.0',
|
||||
'reference' => 'b8ce36bf26593e5c2e81b1850ef0ffb299d2043f',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../voku/portable-utf8',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
4
vendor/composer/platform_check.php
vendored
4
vendor/composer/platform_check.php
vendored
@ -4,8 +4,8 @@
|
||||
|
||||
$issues = array();
|
||||
|
||||
if (!(PHP_VERSION_ID >= 70400)) {
|
||||
$issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.';
|
||||
if (!(PHP_VERSION_ID >= 80002)) {
|
||||
$issues[] = 'Your Composer dependencies require a PHP version ">= 8.0.2". You are running ' . PHP_VERSION . '.';
|
||||
}
|
||||
|
||||
if ($issues) {
|
||||
|
6
vendor/ezyang/htmlpurifier/CHANGELOG.md
vendored
6
vendor/ezyang/htmlpurifier/CHANGELOG.md
vendored
@ -1,6 +0,0 @@
|
||||
# [4.16.0](https://github.com/ezyang/htmlpurifier/compare/v4.15.0...v4.16.0) (2022-09-18)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add semantic release ([#307](https://github.com/ezyang/htmlpurifier/issues/307)) ([db31243](https://github.com/ezyang/htmlpurifier/commit/db312435cb9d8d73395f75f9642a43ba6de5e903)), closes [#322](https://github.com/ezyang/htmlpurifier/issues/322) [#323](https://github.com/ezyang/htmlpurifier/issues/323) [#326](https://github.com/ezyang/htmlpurifier/issues/326) [#327](https://github.com/ezyang/htmlpurifier/issues/327) [#328](https://github.com/ezyang/htmlpurifier/issues/328) [#329](https://github.com/ezyang/htmlpurifier/issues/329) [#330](https://github.com/ezyang/htmlpurifier/issues/330) [#331](https://github.com/ezyang/htmlpurifier/issues/331) [#332](https://github.com/ezyang/htmlpurifier/issues/332) [#333](https://github.com/ezyang/htmlpurifier/issues/333) [#337](https://github.com/ezyang/htmlpurifier/issues/337) [#335](https://github.com/ezyang/htmlpurifier/issues/335) [ezyang/htmlpurifier#334](https://github.com/ezyang/htmlpurifier/issues/334) [#336](https://github.com/ezyang/htmlpurifier/issues/336) [#338](https://github.com/ezyang/htmlpurifier/issues/338)
|
9
vendor/ezyang/htmlpurifier/CREDITS
vendored
9
vendor/ezyang/htmlpurifier/CREDITS
vendored
@ -1,9 +0,0 @@
|
||||
|
||||
CREDITS
|
||||
|
||||
Almost everything written by Edward Z. Yang (Ambush Commander). Lots of thanks
|
||||
to the DevNetwork Community for their help (see docs/ref-devnetwork.html for
|
||||
more details), Feyd especially (namely IPv6 and optimization). Thanks to RSnake
|
||||
for letting me package his fantastic XSS cheatsheet for a smoketest.
|
||||
|
||||
vim: et sw=4 sts=4
|
29
vendor/ezyang/htmlpurifier/README.md
vendored
29
vendor/ezyang/htmlpurifier/README.md
vendored
@ -1,29 +0,0 @@
|
||||
HTML Purifier [![Build Status](https://github.com/ezyang/htmlpurifier/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/ezyang/htmlpurifier/actions/workflows/ci.yml)
|
||||
=============
|
||||
|
||||
HTML Purifier is an HTML filtering solution that uses a unique combination
|
||||
of robust whitelists and aggressive parsing to ensure that not only are
|
||||
XSS attacks thwarted, but the resulting HTML is standards compliant.
|
||||
|
||||
HTML Purifier is oriented towards richly formatted documents from
|
||||
untrusted sources that require CSS and a full tag-set. This library can
|
||||
be configured to accept a more restrictive set of tags, but it won't be
|
||||
as efficient as more bare-bones parsers. It will, however, do the job
|
||||
right, which may be more important.
|
||||
|
||||
Places to go:
|
||||
|
||||
* See INSTALL for a quick installation guide
|
||||
* See docs/ for developer-oriented documentation, code examples and
|
||||
an in-depth installation guide.
|
||||
* See WYSIWYG for information on editors like TinyMCE and FCKeditor
|
||||
|
||||
HTML Purifier can be found on the web at: [http://htmlpurifier.org/](http://htmlpurifier.org/)
|
||||
|
||||
## Installation
|
||||
|
||||
Package available on [Composer](https://packagist.org/packages/ezyang/htmlpurifier).
|
||||
|
||||
If you're using Composer to manage dependencies, you can use
|
||||
|
||||
$ composer require ezyang/htmlpurifier
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user