This commit is contained in:
gongfuxiang 2024-04-25 14:47:59 +08:00
parent 51d6f9d3ce
commit 459469a817
1766 changed files with 343966 additions and 109853 deletions

View File

@ -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();

View File

@ -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))

View File

@ -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'),
],
],
],
];
}

View File

@ -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'),
],
],
],
];
}

View File

@ -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'),
],
],
],
];
}

View File

@ -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'),
],
],
],
];
}

View File

@ -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">

View File

@ -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>

View File

@ -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">

View File

@ -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", {

View File

@ -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')}}" />

View File

@ -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}}

View File

@ -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}}

View File

@ -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}}

View File

@ -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>

View File

@ -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}} />

View File

@ -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">

View File

@ -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));
}
}
?>

View File

@ -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))

View File

@ -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]),

View File

@ -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))

View File

@ -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;

View File

@ -41,7 +41,7 @@ class Buy extends Common
parent::__construct();
// 是否登录
$this->IsLogin();
IsUserLogin();
}
/**

View File

@ -36,7 +36,7 @@ class Cart extends Common
parent::__construct();
// 是否登录
$this->IsLogin();
IsUserLogin();
}
/**

View File

@ -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();
}
}
}

View File

@ -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;

View File

@ -35,7 +35,7 @@ class FormTable extends Common
parent::__construct();
// 登录校验
$this->IsLogin();
IsUserLogin();
}
/**

View File

@ -188,7 +188,7 @@ class Goods extends Common
public function Favor()
{
// 是否登录
$this->IsLogin();
IsUserLogin();
// 开始处理
$params = $this->data_request;

View File

@ -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(),
]);

View File

@ -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))

View File

@ -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(),
];
// 品牌列表

View File

@ -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}}

View File

@ -1,6 +1,6 @@
{
"name":"默认主题",
"ver":"6.0.0",
"ver":"6.1.0",
"author":"Devil",
"home":"https://shopxo.net/",
"is_theme_data_admin": 1

View File

@ -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", {

View File

@ -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>

View File

@ -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')}}" />

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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}}

View File

@ -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>

View File

@ -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 />

View File

@ -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">

View File

@ -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' => '已失效',

View File

@ -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',

View File

@ -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',

View File

@ -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' => '已失效',

View File

@ -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)
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;
}
}
}
// 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;
}
}
?>

View File

@ -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;
}
}
}
}
// 存储缓存

View File

@ -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;
}
}
}

View File

@ -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;
}
}
?>

View File

@ -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);
}

View File

@ -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'],
],
// 搜索排序方式

View File

@ -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(),
];

View File

@ -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();
}
// 更新主订单

View File

@ -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']);
}
}
// 安全判断

View File

@ -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;
}
}
}

View File

@ -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 = [])
{

View File

@ -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');
}
}
?>

View File

@ -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;
}
}
?>

View File

@ -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(),

View File

@ -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(['&#039;', '&quot;'], ["'", '"'], $sql);
// 转为数组
$sql_all = preg_split("/;[\r\n]+/", $sql);
// 开始处理
$success = 0;
$failure = 0;
foreach($sql_all as $v)

View File

@ -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钩子

View File

@ -1,3 +1,25 @@
+=========================================================+
ShopXO 6.1.0 Release 20240425 http://shopxo.net
+=========================================================+=
1.【优化】公共加入购物车方法支持指定规格
2.【优化】动态数据列表外部调用处理数据优化
3.【优化】底层框架升级到thinkphp8php版本支持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
+=========================================================+=

View File

@ -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

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -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);
}
// 格式校验,希望仅下载图片文件

View File

@ -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']);
}

View File

@ -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);
}
/**

View 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']);
}

View File

@ -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']);
}
}
?>

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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');

View File

@ -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}

View File

@ -0,0 +1,2 @@
.DS_Store
*.codekit

View 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

View 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);
}

View 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
View File

@ -0,0 +1,4 @@
*
!.gitignore
!default
!index.html

View File

@ -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 {

View File

@ -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)
{
@ -492,8 +508,15 @@ $(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);
}

View File

@ -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));
}
/**

View File

@ -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
View 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';

View File

@ -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);
}

View File

@ -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',
);

View File

@ -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',
);

View File

@ -6,6 +6,5 @@ $vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
'HTMLPurifier' => array($vendorDir . '/ezyang/htmlpurifier/library'),
'' => array($baseDir . '/extend'),
);

View File

@ -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'),

View File

@ -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;

File diff suppressed because it is too large Load Diff

View File

@ -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,
),
),
);

View File

@ -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) {

View File

@ -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)

View File

@ -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

View File

@ -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