Merge branch 'v1.8.0'

This commit is contained in:
devil
2020-02-03 11:39:12 +08:00
1170 changed files with 45364 additions and 12593 deletions

1
.gitignore vendored
View File

@ -4,6 +4,7 @@
*.log
*.lock
.tea
.idea
.htaccess
*payment_*_respond.php
*payment_*_notify.php

View File

@ -29,6 +29,10 @@
* 码云/开源中国https://gitee.com/gongfuxiang/shopxo
* 腾讯云开发者https://dev.tencent.com/u/gongfuxiang/p/shopxo/git
### 部分功能特点
* 分销、会员等级、限时秒杀、优惠券/折扣劵、报价单、商品相册标签、钱包、等等...
* 更多查看应用商店 https://store.shopxo.net/
### 扩展性
* 独立模块式开发,完善的注释,易扩展,应用管理。
@ -53,10 +57,10 @@ ThinkPHP是一个快速、简单的基于MVC和面向对象的轻量级PHP开发
![小程序](https://images.gitee.com/uploads/images/2019/0111/104727_fb5ce133_488475.jpeg "xcx-1500.jpg")
# PC端图片展示
![电脑端](https://images.gitee.com/uploads/images/2019/0111/104442_0a307119_488475.gif "1547174456822.gif")
![电脑端](https://images.gitee.com/uploads/images/2020/0203/000718_c4209c1f_488475.gif "home.gif")
# 后台管理图片展示
![后台管理](https://images.gitee.com/uploads/images/2019/0227/092528_9eb4dbef_488475.gif "admin-2.gif")
![后台管理](https://images.gitee.com/uploads/images/2020/0203/000749_4a8b1c43_488475.gif "admin.gif")
# 商城基础功能简介
### 后端功能列表
@ -67,12 +71,16 @@ ThinkPHP是一个快速、简单的基于MVC和面向对象的轻量级PHP开发
站点配置
> 站点设置
> 基础配置
> 备案信息
> 站点类型
> 用户注册
> 用户登录
> 密码找回
> 附件
> 图片验证码
> 订单售后
> 搜索
> 扩展项
> 短信设置
> 短信设置
> 消息模板

View File

@ -1 +0,0 @@
deny from all

View File

@ -68,6 +68,7 @@ class Cache extends Common
// 数据 temp
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'cache');
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'temp');
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'data');
return $this->success('更新成功');
}

View File

@ -174,6 +174,9 @@ class Common extends Controller
// 开发模式
$this->assign('shopxo_is_develop', config('shopxo.is_develop'));
// 默认不加载百度地图api
$this->assign('is_load_baidu_map_api', 0);
}
/**

View File

@ -52,12 +52,6 @@ class Config extends Common
// csv
$this->assign('common_excel_charset_list', lang('common_excel_charset_list'));
// 扣除库存规则
$this->assign('common_deduction_inventory_rules_list', lang('common_deduction_inventory_rules_list'));
// 是否
$this->assign('common_is_text_list', lang('common_is_text_list'));
// 配置信息
$this->assign('data', ConfigService::ConfigList());

View File

@ -147,7 +147,7 @@ class Goods extends Common
$this->assign('brand_list', BrandService::CategoryBrand());
// 规格扩展数据
$goods_spec_extends = GoodsService::GoodsSpecificationsExtends();
$goods_spec_extends = GoodsService::GoodsSpecificationsExtends($params);
$this->assign('goods_specifications_extends', $goods_spec_extends['data']);
// 商品编辑页面钩子

View File

@ -97,7 +97,7 @@ class Order extends Common
// 发起支付 - 支付方式
$pay_where = [
'where' => ['is_enable'=>1, 'is_open_user'=>1, 'payment'=>config('shopxo.under_line_list')],
'where' => ['is_enable'=>1, 'payment'=>config('shopxo.under_line_list')],
];
$this->assign('buy_payment_list', PaymentService::BuyPaymentList($pay_where));
@ -118,37 +118,6 @@ class Order extends Common
return $this->fetch();
}
/**
* [ExcelExport excel文件导出]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-01-10T15:46:00+0800
*/
public function ExcelExport()
{
// 参数
$params = input();
$params['admin'] = $this->admin;
$params['user_type'] = 'admin';
// 条件
$where = OrderService::OrderListWhere($params);
// 获取列表
$data_params = array(
'where' => $where,
'm' => 0,
'n' => 0,
'is_excel_export' => 1,
);
$data = OrderService::OrderList($data_params);
// Excel驱动导出数据
$excel = new \base\Excel(array('filename'=>'order', 'title'=>lang('excel_order_title_list'), 'data'=>$data['data'], 'msg'=>'没有相关数据'));
return $excel->Export();
}
/**
* [Delete 订单删除]
* @author Devil
@ -197,7 +166,7 @@ class Order extends Common
}
/**
* [Delivery 订单发货]
* [Delivery 订单发货/取货]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1

View File

@ -11,6 +11,7 @@
namespace app\admin\controller;
use app\service\PaymentService;
use app\service\StoreService;
/**
* 支付方式管理
@ -58,6 +59,9 @@ class Payment extends Common
// 适用平台
$this->assign('common_platform_type', lang('common_platform_type'));
// 应用商店
$this->assign('store_payment_url', StoreService::StorePaymentUrl());
return $this->fetch();
}

View File

@ -87,71 +87,27 @@ class Plugins extends Common
$pluginscontrol = strtolower($params['pluginscontrol']);
$pluginsaction = strtolower($params['pluginsaction']);
// 应用校验
$ret = $this->PluginsCheck($pluginsname, $pluginscontrol, $pluginsaction);
if($ret['code'] != 0)
{
if(IS_AJAX)
{
return $ret;
} else {
$this->assign('msg', $ret['msg']);
return $this->fetch('public/tips_error');
}
}
// 视图初始化
$this->PluginsViewInit($pluginsname, $pluginscontrol, $pluginsaction);
// 编辑器文件存放地址定义
$this->assign('editor_path_type', 'plugins_'.$pluginsname);
// 应用控制器
$plugins = '\app\plugins\\'.$pluginsname.'\admin\\'.ucfirst($pluginscontrol);
if(!class_exists($plugins))
// 调用
$ret = PluginsService::PluginsControlCall($pluginsname, $pluginscontrol, $pluginsaction, 'admin', $params);
if($ret['code'] == 0)
{
if(IS_AJAX)
{
return DataReturn(ucfirst($pluginscontrol).' 应用控制器未定义', -1);
} else {
$this->assign('msg', ucfirst($pluginscontrol).' 应用控制器未定义');
return $this->fetch('public/tips_error');
}
return $ret['data'];
}
// 调用方法
$obj = new $plugins();
if(!method_exists($obj, $pluginsaction))
// 调用失败
if(IS_AJAX)
{
if(IS_AJAX)
{
return DataReturn(ucfirst($pluginsaction).' 应用方法未定义', -1);
} else {
$this->assign('msg', ucfirst($pluginsaction).' 应用方法未定义');
return $this->fetch('public/tips_error');
}
return $ret;
} else {
$this->assign('msg', $ret['msg']);
return $this->fetch();
}
return $obj->$pluginsaction($params);
}
/**
* 应用校验
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-05-27T00:13:50+0800
* @param [string] $plugins_name [应用名称]
* @param [string] $plugins_control [控制器名称]
* @param [string] $plugins_action [方法]
*/
private function PluginsCheck($pluginsname, $pluginscontrol, $pluginsaction)
{
$ret = PluginsService::PluginsField($pluginsname, 'id');
if(empty($ret['data']))
{
return DataReturn('应用不存在', -10);
}
return DataReturn('验证成功', 0);
}
/**

View File

@ -59,13 +59,14 @@ class Pluginsadmin extends Common
// 参数
$params = input();
// 应用商店地址
$this->assign('store_url', StoreService::StoreUrl());
// 页面类型
if($this->view_type == 'home')
{
$data = PluginsAdminService::PluginsList();
$this->assign('data_list', $data['data']);
$this->assign('store_url', StoreService::StoreUrl());
return $this->fetch();
} else {
return $this->fetch('upload');

View File

@ -35,9 +35,6 @@ class Region extends Common
// 登录校验
$this->IsLogin();
// 权限校验
$this->IsPower();
}
/**
@ -49,6 +46,9 @@ class Region extends Common
*/
public function Index()
{
// 权限校验
$this->IsPower();
// 是否启用
$this->assign('common_is_enable_list', lang('common_is_enable_list'));
@ -64,6 +64,9 @@ class Region extends Common
*/
public function GetNodeSon()
{
// 权限校验
$this->IsPower();
// 是否ajax请求
if(!IS_AJAX)
{
@ -83,6 +86,9 @@ class Region extends Common
*/
public function Save()
{
// 权限校验
$this->IsPower();
// 是否ajax请求
if(!IS_AJAX)
{
@ -102,6 +108,9 @@ class Region extends Common
*/
public function Delete()
{
// 权限校验
$this->IsPower();
// 是否ajax
if(!IS_AJAX)
{
@ -113,5 +122,31 @@ class Region extends Common
$params['admin'] = $this->admin;
return RegionService::RegionDelete($params);
}
/**
* 获取地区节点数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-09-21
* @desc description
*/
public function Node()
{
// 是否ajax请求
if(!IS_AJAX)
{
$this->error('非法访问');
}
// 获取地区
$params = [
'where' => [
'pid' => intval(input('pid', 0)),
],
];
$data = RegionService::RegionNode($params);
return DataReturn('操作成功', 0, $data);
}
}
?>

View File

@ -49,6 +49,10 @@ class Site extends Common
*/
public function Index()
{
// 导航
$nav_type = input('nav_type', 'base');
$this->assign('nav_type', $nav_type);
// 时区
$this->assign('site_timezone_list', lang('site_timezone_list'));
@ -73,15 +77,34 @@ class Site extends Common
// 是否
$this->assign('common_is_text_list', lang('common_is_text_list'));
// 站点类型
$this->assign('common_site_type_list', lang('common_site_type_list'));
// 扣除库存规则
$this->assign('common_deduction_inventory_rules_list', lang('common_deduction_inventory_rules_list'));
// 配置信息
$this->assign('data', ConfigService::ConfigList());
$data = ConfigService::ConfigList();
$this->assign('data', $data);
// 自提点
if($nav_type == 'sitetype')
{
// 地址处理
if(!empty($data['common_self_extraction_address']) && !empty($data['common_self_extraction_address']['value']))
{
$address = ConfigService::SiteTypeExtractionAddressList($data['common_self_extraction_address']['value']);
$this->assign('sitetype_address_list', $address['data']);
}
// 加载百度地图api
$this->assign('is_load_baidu_map_api', 1);
}
// 编辑器文件存放地址
$this->assign('editor_path_type', 'common');
// 导航/视图
$nav_type = input('nav_type', 'base');
$this->assign('nav_type', $nav_type);
// 视图
return $this->fetch($nav_type);
}
@ -100,33 +123,33 @@ class Site extends Common
// 字段不存在赋空值
$field_list = [];
// 用户注册
if($nav_type == 'register')
// 导航类型
switch($nav_type)
{
$field_list[] = 'home_user_reg_state';
$field_list[] = 'home_site_user_register_bg_images';
}
// 用户注册
case 'register' :
$field_list[] = 'home_user_reg_state';
$field_list[] = 'home_site_user_register_bg_images';
break;
// 用户登录
if($nav_type == 'login')
{
$field_list[] = 'home_site_user_login_ad1_images';
$field_list[] = 'home_site_user_login_ad2_images';
$field_list[] = 'home_site_user_login_ad3_images';
}
// 用户登录
case 'login' :
$field_list[] = 'home_site_user_login_ad1_images';
$field_list[] = 'home_site_user_login_ad2_images';
$field_list[] = 'home_site_user_login_ad3_images';
break;
// 密码找回
if($nav_type == 'forgetpwd')
{
$field_list[] = 'home_site_user_forgetpwd_ad1_images';
$field_list[] = 'home_site_user_forgetpwd_ad2_images';
$field_list[] = 'home_site_user_forgetpwd_ad3_images';
}
// 密码找回
case 'forgetpwd' :
$field_list[] = 'home_site_user_forgetpwd_ad1_images';
$field_list[] = 'home_site_user_forgetpwd_ad2_images';
$field_list[] = 'home_site_user_forgetpwd_ad3_images';
break;
// 图片验证码
if($nav_type == 'imagesverify')
{
$field_list[] = 'common_images_verify_rules';
// 图片验证码
case 'imagesverify' :
$field_list[] = 'common_images_verify_rules';
break;
}
// 开始处理空值

View File

@ -133,6 +133,9 @@ class Slide extends Common
// 事件类型
$this->assign('common_app_event_type', lang('common_app_event_type'));
// 参数
$this->assign('params', $params);
// 编辑器文件存放地址
$this->assign('editor_path_type', 'slide');

View File

@ -12,6 +12,7 @@ namespace app\admin\controller;
use app\service\ThemeService;
use app\service\ConfigService;
use app\service\StoreService;
/**
* 主题管理
@ -64,6 +65,10 @@ class Theme extends Common
// 默认主题
$theme = MyC('common_default_theme', 'default', true);
$this->assign('theme', empty($theme) ? 'default' : $theme);
// 应用商店
$this->assign('store_theme_url', StoreService::StoreThemeUrl());
return $this->fetch('index');
} else {
return $this->fetch('upload');

View File

@ -126,140 +126,5 @@ return array(
'type' => 'string',
],
],
// 订单excel导出
'excel_order_title_list' => [
'order_no' => [
'name' => '订单编号',
'type' => 'string',
],
// 收件人信息
'receive_name' => [
'name' => '收件人姓名',
'type' => 'string',
],
'receive_tel' => [
'name' => '收件人电话',
'type' => 'string',
],
'receive_province_name'=> [
'name' => '收件人所在省',
'type' => 'string',
],
'receive_city_name' => [
'name' => '收件人所在市',
'type' => 'string',
],
'receive_county_name' => [
'name' => '收件人所在区县',
'type' => 'string',
],
'receive_address' => [
'name' => '收件人详细地址',
'type' => 'string',
],
// 用户留言
'user_note' => [
'name' => '用户留言',
'type' => 'string',
],
// 快递信息
'express_name' => [
'name' => '快递公司',
'type' => 'string',
],
'express_number' => [
'name' => '快递单号',
'type' => 'string',
],
// 支付信息
'payment_name' => [
'name' => '支付方式',
'type' => 'string',
],
'pay_status_name' => [
'name' => '支付状态',
'type' => 'string',
],
// 基础信息
'status_name' => [
'name' => '订单状态',
'type' => 'string',
],
'preferential_price' => [
'name' => '优惠金额',
'type' => 'string',
],
'price' => [
'name' => '订单单价',
'type' => 'string',
],
'total_price' => [
'name' => '订单总价(订单最终价格)',
'type' => 'string',
],
'pay_price' => [
'name' => '已支付金额',
'type' => 'string',
],
'excel_export_items' => [
'name' => '商品信息',
'type' => 'string',
],
'items_count' => [
'name' => '购买总数',
'type' => 'int',
],
'describe' => [
'name' => '描述',
'type' => 'string',
],
// 时间
'confirm_time' => [
'name' => '确认时间',
'type' => 'string',
],
'pay_time' => [
'name' => '支付时间',
'type' => 'string',
],
'delivery_time' => [
'name' => '发货时间',
'type' => 'string',
],
'collect_time' => [
'name' => '完成时间',
'type' => 'string',
],
'cancel_time' => [
'name' => '取消时间',
'type' => 'string',
],
'close_time' => [
'name' => '关闭时间',
'type' => 'string',
],
'add_time' => [
'name' => '创建时间',
'type' => 'string',
],
'upd_time' => [
'name' => '更新时间',
'type' => 'string',
],
// 评论
'user_is_comments_time' => [
'name' => '评论时间',
'type' => 'string',
],
],
);
?>

View File

@ -68,11 +68,32 @@
</form>
<!-- form end -->
<!-- operation start -->
<!-- top operation start -->
<div class="am-g am-margin-top-sm">
<a href="{{:MyUrl('admin/answer/saveinfo')}}" class="am-btn am-btn-secondary am-radius am-btn-xs am-icon-plus"> 新增</a>
<!-- 顶部操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_admin_answer_top_operation</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_admin_answer_top_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>true]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</div>
<!-- operation end -->
<!-- top operation end -->
<!-- list start -->
<table class="am-table am-table-striped am-table-hover am-text-middle am-margin-top-sm">
@ -252,6 +273,31 @@
{{/if}}
<!-- list end -->
<!-- bottom operation start -->
<div class="am-g am-margin-top-sm">
<!-- 底部操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_admin_answer_bottom_operation</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_admin_answer_bottom_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>true]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</div>
<!-- bottom operation end -->
<!-- 处理窗口 -->
<div class="am-popup am-radius" id="my-popup-reply">
<div class="am-popup-inner">

View File

@ -92,9 +92,9 @@
<tr>
<th>名称</th>
<th class="am-hide-sm-only">所属平台</th>
<th>导航图标</th>
<th class="am-hide-sm-only">导航图标</th>
<th class="am-hide-sm-only">事件值</th>
<th class="am-hide-sm-only">启用</th>
<th>启用</th>
<th>更多</th>
<th>操作</th>
</tr>
@ -105,7 +105,7 @@
<tr id="data-list-{{$v.id}}" {{if $v['is_enable'] eq 0}}class="am-active"{{/if}}>
<td>{{$v.name}}</td>
<td class="am-hide-sm-only">{{$v.platform_text}}</td>
<td>
<td class="am-hide-sm-only">
{{if !empty($v['images_url'])}}
<a href="{{$v['images_url']}}" target="_blank">
<img src="{{$v['images_url']}}" class="am-radius am-vertical-align-middle" width="30" height="30" />
@ -122,7 +122,7 @@
{{/if}}
</div>
</td>
<td class="am-hide-sm-only">
<td>
<a href="javascript:;" class="am-icon-btn am-icon-check submit-state {{if $v['is_enable'] eq 1}}am-success{{else /}}am-default{{/if}}" data-url="{{:MyUrl('admin/appcenternav/statusupdate')}}" data-id="{{$v.id}}" data-state="{{$v['is_enable']}}" data-field="is_enable" data-is-update-status="1"></a>
</td>
<td>

View File

@ -0,0 +1,41 @@
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<!-- table nav start -->
{{include file="appconfig/nav" /}}
<!-- table nav end -->
<!-- tips -->
<div class="am-alert am-alert-warning" data-am-alert>
<p>
<span>PS如【APP/小程序】中开启(开启在线客服),则以下配置必填 [企业编码] 和 [聊天窗编码]</span>
<a href="https://opendocs.alipay.com/mini/component/contact-button" target="_blank" class="am-margin-left-sm">配置教程 <i class="am-icon-external-link"></i></a>
</p>
</div>
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/appconfig/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/appconfig/index', ['nav_type'=>'alipaymini'])}}" enctype="multipart/form-data">
<div class="am-form-group">
<label>{{$data.common_app_mini_alipay_tnt_inst_id.name}}<span class="am-form-group-label-tips">{{$data.common_app_mini_alipay_tnt_inst_id.describe}}</span></label>
<input type="text" name="{{$data.common_app_mini_alipay_tnt_inst_id.only_tag}}" placeholder="{{$data.common_app_mini_alipay_tnt_inst_id.name}}" data-validation-message="{{$data.common_app_mini_alipay_tnt_inst_id.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_app_mini_alipay_tnt_inst_id.value}}"{{/if}} />
</div>
<div class="am-form-group">
<label>{{$data.common_app_mini_alipay_scene.name}}<span class="am-form-group-label-tips">{{$data.common_app_mini_alipay_scene.describe}}</span></label>
<input type="text" name="{{$data.common_app_mini_alipay_scene.only_tag}}" placeholder="{{$data.common_app_mini_alipay_scene.name}}" data-validation-message="{{$data.common_app_mini_alipay_scene.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_app_mini_alipay_scene.value}}"{{/if}} />
</div>
<div class="am-form-group am-form-group-refreshing">
<input type="hidden" name="nav_type" value="{{$nav_type}}" />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
</div>
</form>
<!-- form end -->
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->

View File

@ -27,7 +27,7 @@
</div>
<div class="am-form-group">
<label>{{$data.common_app_is_enable_search.name}}</label>
<label>{{$data.common_app_is_enable_search.name}}<span class="am-form-group-label-tips">{{$data.common_app_is_enable_search.describe}}</span></label>
<select name="{{$data.common_app_is_enable_search.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_app_is_enable_search.error_tips}}" required>
{{foreach $common_is_text_list as $v}}
<option value="{{$v.id}}" {{if isset($data['common_app_is_enable_search']['value']) and $data['common_app_is_enable_search']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
@ -35,7 +35,7 @@
</select>
</div>
<div class="am-form-group">
<label>{{$data.common_app_is_enable_answer.name}}</label>
<label>{{$data.common_app_is_enable_answer.name}}<span class="am-form-group-label-tips">{{$data.common_app_is_enable_answer.describe}}</span></label>
<select name="{{$data.common_app_is_enable_answer.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_app_is_enable_answer.error_tips}}" required>
{{foreach $common_is_text_list as $v}}
<option value="{{$v.id}}" {{if isset($data['common_app_is_enable_answer']['value']) and $data['common_app_is_enable_answer']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
@ -52,23 +52,6 @@
</select>
</div>
<div class="am-form-group">
<label>{{$data.common_is_app_inside_close_header.name}}<span class="am-form-group-label-tips">{{$data.common_is_app_inside_close_header.describe}}</span></label>
<select name="{{$data.common_is_app_inside_close_header.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_is_app_inside_close_header.error_tips}}" required>
{{foreach $common_is_text_list as $v}}
<option value="{{$v.id}}" {{if isset($data['common_is_app_inside_close_header']['value']) and $data['common_is_app_inside_close_header']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
</div>
<div class="am-form-group">
<label>{{$data.common_is_app_inside_close_footer.name}}<span class="am-form-group-label-tips">{{$data.common_is_app_inside_close_footer.describe}}</span></label>
<select name="{{$data.common_is_app_inside_close_footer.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_is_app_inside_close_footer.error_tips}}" required>
{{foreach $common_is_text_list as $v}}
<option value="{{$v.id}}" {{if isset($data['common_is_app_inside_close_footer']['value']) and $data['common_is_app_inside_close_footer']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
</div>
<div class="am-form-group">
<label>{{$data.common_app_is_header_nav_fixed.name}}<span class="am-form-group-label-tips">{{$data.common_app_is_header_nav_fixed.describe}}</span></label>
<select name="{{$data.common_app_is_header_nav_fixed.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_app_is_header_nav_fixed.error_tips}}" required>
@ -108,4 +91,4 @@
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end
<!-- footer end -->

View File

@ -10,7 +10,16 @@
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/appconfig/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/appconfig/index')}}">
<div class="am-form-group">
<label>{{$data.common_app_customer_service_tel.name}}</label>
<label>{{$data.common_is_mobile_concise_model.name}}<span class="am-form-group-label-tips">{{$data.common_is_mobile_concise_model.describe}}</span></label>
<select name="{{$data.common_is_mobile_concise_model.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_is_mobile_concise_model.error_tips}}" required>
{{foreach $common_is_text_list as $v}}
<option value="{{$v.id}}" {{if isset($data['common_is_mobile_concise_model']['value']) and $data['common_is_mobile_concise_model']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
</div>
<div class="am-form-group">
<label>{{$data.common_app_customer_service_tel.name}}<span class="am-form-group-label-tips">{{$data.common_app_customer_service_tel.describe}}</span></label>
<input type="text" name="{{$data.common_app_customer_service_tel.only_tag}}" placeholder="{{$data.common_app_customer_service_tel.name}}" data-validation-message="{{$data.common_app_customer_service_tel.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_app_customer_service_tel.value}}"{{/if}} />
</div>

View File

@ -8,4 +8,7 @@
<li {{if $nav_type eq 'weixinmini'}}class="am-active"{{/if}} data-type="weixinmini">
<a href="{{:MyUrl('admin/appconfig/index', ['nav_type'=>'weixinmini'])}}">微信小程序</a>
</li>
<li {{if $nav_type eq 'alipaymini'}}class="am-active"{{/if}} data-type="alipaymini">
<a href="{{:MyUrl('admin/appconfig/index', ['nav_type'=>'alipaymini'])}}">支付宝小程序</a>
</li>
</ul>

View File

@ -39,4 +39,4 @@
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end
<!-- footer end -->

View File

@ -100,10 +100,10 @@
<tr>
<th>名称</th>
<th class="am-hide-sm-only">所属平台</th>
<th>导航图标</th>
<th class="am-hide-sm-only">导航图标</th>
<th class="am-hide-sm-only">事件值</th>
<th class="am-hide-sm-only">登录</th>
<th class="am-hide-sm-only">启用</th>
<th>启用</th>
<th>更多</th>
<th>操作</th>
</tr>
@ -114,7 +114,7 @@
<tr id="data-list-{{$v.id}}" {{if $v['is_enable'] eq 0}}class="am-active"{{/if}}>
<td>{{$v.name}}</td>
<td class="am-hide-sm-only">{{$v.platform_text}}</td>
<td>
<td class="am-hide-sm-only">
<div class="am-circle nav-icon-circle am-vertical-align" {{if !empty($v['bg_color'])}}style="background-color:{{$v.bg_color}};"{{/if}}>
{{if !empty($v['images_url'])}}
<a href="{{$v['images_url']}}" target="_blank">
@ -134,7 +134,7 @@
<td class="am-hide-sm-only">
<a href="javascript:;" class="am-icon-btn am-icon-check submit-state {{if $v['is_need_login'] eq 1}}am-success{{else /}}am-default{{/if}}" data-url="{{:MyUrl('admin/apphomenav/statusupdate')}}" data-id="{{$v.id}}" data-state="{{$v['is_need_login']}}" data-field="is_need_login"></a>
</td>
<td class="am-hide-sm-only">
<td>
<a href="javascript:;" class="am-icon-btn am-icon-check submit-state {{if $v['is_enable'] eq 1}}am-success{{else /}}am-default{{/if}}" data-url="{{:MyUrl('admin/apphomenav/statusupdate')}}" data-id="{{$v.id}}" data-state="{{$v['is_enable']}}" data-field="is_enable" data-is-update-status="1"></a>
</td>
<td>

View File

@ -81,11 +81,32 @@
</form>
<!-- form end -->
<!-- operation start -->
<!-- top operation start -->
<div class="am-g am-margin-top-sm">
<a href="{{:MyUrl('admin/article/saveinfo')}}" class="am-btn am-btn-secondary am-radius am-btn-xs am-icon-plus"> 新增</a>
<!-- 顶部操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_admin_article_top_operation</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_admin_article_top_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>true]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</div>
<!-- operation end -->
<!-- top operation end -->
<!-- list start -->
<table class="am-table am-table-striped am-table-hover am-text-middle am-margin-top-sm">
@ -194,6 +215,31 @@
{{/if}}
<!-- list end -->
<!-- bottom operation start -->
<div class="am-g am-margin-top-sm">
<!-- 底部操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_admin_article_bottom_operation</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_admin_article_bottom_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>true]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</div>
<!-- bottom operation end -->
<!-- page start -->
{{if !empty($data_list)}}
{{$page_html|raw}}

View File

@ -66,11 +66,32 @@
</form>
<!-- form end -->
<!-- operation start -->
<!-- top operation start -->
<div class="am-g am-margin-top-sm">
<a href="{{:MyUrl('admin/brand/saveinfo')}}" class="am-btn am-btn-secondary am-radius am-btn-xs am-icon-plus"> 新增</a>
<!-- 顶部操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_admin_brand_top_operation</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_admin_brand_top_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>true]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</div>
<!-- operation end -->
<!-- top operation end -->
<!-- list start -->
<table class="am-table am-table-striped am-table-hover am-text-middle am-margin-top-sm">
@ -208,6 +229,31 @@
{{/if}}
<!-- list end -->
<!-- bottom operation start -->
<div class="am-g am-margin-top-sm">
<!-- 底部操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_admin_brand_bottom_operation</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_admin_brand_bottom_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>true]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</div>
<!-- bottom operation end -->
<!-- page start -->
{{if !empty($data_list)}}
{{$page_html|raw}}

View File

@ -17,31 +17,6 @@
<label>{{$data.admin_page_number.name}}<span class="am-form-group-label-tips">{{$data.admin_page_number.describe}}</span></label>
<input type="number" name="{{$data.admin_page_number.only_tag}}" placeholder="{{$data.admin_page_number.name}}" pattern="{{:lang('common_regex_page_number')}}" data-validation-message="{{$data.admin_page_number.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.admin_page_number.value}}"{{/if}} required />
</div>
<div class="am-form-group">
<label>{{$data.common_is_deduction_inventory.name}}<span class="am-form-group-label-tips">{{$data.common_is_deduction_inventory.describe}}</span></label>
<select name="{{$data.common_is_deduction_inventory.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_is_deduction_inventory.error_tips}}" required>
{{foreach $common_is_text_list as $v}}
<option value="{{$v.id}}" {{if isset($data['common_is_deduction_inventory']['value']) and $data['common_is_deduction_inventory']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
</div>
<div class="am-form-group">
<label>{{$data.common_deduction_inventory_rules.name}}<span class="am-form-group-label-tips">{{$data.common_deduction_inventory_rules.describe}}</span></label>
<select name="{{$data.common_deduction_inventory_rules.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_deduction_inventory_rules.error_tips}}" required>
{{foreach $common_deduction_inventory_rules_list as $v}}
<option value="{{$v.id}}" {{if isset($data['common_deduction_inventory_rules']['value']) and $data['common_deduction_inventory_rules']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
</div>
<div class="am-form-group">
<label>{{$data.common_order_is_booking.name}}<span class="am-form-group-label-tips">{{$data.common_order_is_booking.describe}}</span></label>
<select name="{{$data.common_order_is_booking.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_order_is_booking.error_tips}}" required>
{{foreach $common_is_text_list as $v}}
<option value="{{$v.id}}" {{if isset($data['common_order_is_booking']['value']) and $data['common_order_is_booking']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
</div>
<div class="am-form-group">
<label>{{$data.common_spec_add_max_number.name}}<span class="am-form-group-label-tips">{{$data.common_spec_add_max_number.describe}}</span></label>
<input type="number" name="{{$data.common_spec_add_max_number.only_tag}}" placeholder="{{$data.common_spec_add_max_number.describe}}" data-validation-message="{{$data.common_spec_add_max_number.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_spec_add_max_number.value}}"{{/if}} />

View File

@ -106,11 +106,32 @@
</form>
<!-- form end -->
<!-- operation start -->
<!-- top operation start -->
<div class="am-g am-margin-top-sm">
<a href="{{:MyUrl('admin/goods/saveinfo')}}" class="am-btn am-btn-secondary am-radius am-btn-xs am-icon-plus"> 新增</a>
<!-- 顶部操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_admin_goods_top_operation</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_admin_goods_top_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>true]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</div>
<!-- operation end -->
<!-- top operation end -->
<!-- list start -->
<table class="am-table am-table-striped am-table-hover am-text-middle am-margin-top-sm goods-list">
@ -215,6 +236,16 @@
<dt>访问次数</dt>
<dd>{{$v.access_count}}</dd>
<dt>电脑端详情</dt>
<dd>
<div class="am-scrollable-vertical web-content">{{$v.content_web|raw}}</div>
</dd>
<dt>虚拟商品展示数据</dt>
<dd>
<div class="am-scrollable-vertical fictitious-goods-value">{{$v.fictitious_goods_value|raw}}</div>
</dd>
<dt>SEO标题</dt>
<dd>{{$v.seo_title}}</dd>
@ -271,6 +302,31 @@
{{/if}}
<!-- list end -->
<!-- bottom operation start -->
<div class="am-g am-margin-top-sm">
<!-- 底部操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_admin_goods_bottom_operation</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_admin_goods_bottom_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>true]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</div>
<!-- bottom operation end -->
<!-- page start -->
{{if !empty($data_list)}}
{{$page_html|raw}}

View File

@ -19,28 +19,31 @@
<nav class="goods-nav">
<ul>
<li>
<a href="#goods-nav-base">基础信息</a>
<a href="javascript:;" data-value="#goods-nav-base">基础信息</a>
</li>
<li>
<a href="#goods-nav-operations">商品规格</a>
<a href="javascript:;" data-value="#goods-nav-operations">商品规格</a>
</li>
<li>
<a href="#goods-nav-photo">商品相册</a>
<a href="javascript:;" data-value="#goods-nav-photo">商品相册</a>
</li>
<li>
<a href="#goods-nav-video">商品视频</a>
<a href="javascript:;" data-value="#goods-nav-video">商品视频</a>
</li>
<li>
<a href="#goods-nav-app">手机端详情</a>
<a href="javascript:;" data-value="#goods-nav-app">手机端详情</a>
</li>
<li>
<a href="#goods-nav-web">电脑端详情</a>
<a href="javascript:;" data-value="#goods-nav-web">电脑端详情</a>
</li>
<li>
<a href="#goods-nav-extends">扩展数据</a>
<a href="javascript:;" data-value="#goods-nav-fictitious">虚拟商品</a>
</li>
<li>
<a href="#goods-nav-seo">SEO</a>
<a href="javascript:;" data-value="#goods-nav-extends">扩展数据</a>
</li>
<li>
<a href="javascript:;" data-value="#goods-nav-seo">SEO</a>
</li>
<li class="am-text-center am-padding-xs nav-shrink-submit">
<i class="am-icon-angle-double-right am-icon-sm"></i>
@ -506,6 +509,14 @@
</div>
</div>
<!-- 虚拟商品 -->
<div id="goods-nav-fictitious" class="division-block">
<label class="block nav-detail-title">虚拟商品<span class="am-form-group-label-tips">用户下单后自动发货,用于将该数据展示在用户订单中</span></label>
<div class="am-form-group">
<script type="text/plain" id="goods-fictitious-container" name="fictitious_goods_value">{{if !empty($data)}}{{$data.fictitious_goods_value|raw}}{{/if}}</script>
</div>
</div>
<!-- 扩展数据 -->
<div id="goods-nav-extends" class="division-block">
<label class="block nav-detail-title">扩展数据<span class="am-form-group-label-tips-must">该区域为插件扩展数据,请按照插件文档填写相应的值</span></label>
@ -559,6 +570,12 @@
{{if !empty($v['desc'])}}
<span class="am-text-xs am-text-warning am-margin-left-xs">{{$v.desc}}</span>
{{/if}}
{{if !empty($v['tips'])}}
<div class="am-alert am-alert-warning am-margin-0" data-am-alert>
<button type="button" class="am-close">&times;</button>
<p>{{$v.tips|raw}}</p>
</div>
{{/if}}
{{if !empty($v['element'])}}
{{foreach $v.element as $element}}
<div class="am-form-group">
@ -674,10 +691,9 @@
<!-- 拖拽排序初始化 -->
<script type="text/javascript">
// 规格扩展返回处理
function SpecificationsExtendsBack()
function SpecificationsExtendsBack(data)
{
var $extends_popup = $('#specifications-extends-popup');
var data = GetFormVal('#specifications-extends-popup', true);
$('.specifications-table').find($extends_popup.attr('data-line-extend')).find('.line-extend-input').val(JSON.stringify(data));
$extends_popup.modal('close');
}

View File

@ -90,6 +90,31 @@
</form>
<!-- form end -->
<!-- top operation start -->
<div class="am-g am-margin-top-sm">
<!-- 顶部操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_admin_goods_comments_top_operation</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_admin_goods_comments_top_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>true]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</div>
<!-- top operation end -->
<!-- list start -->
<table class="am-table am-table-striped am-table-hover am-text-middle am-margin-top-sm">
<thead>
@ -272,6 +297,27 @@
<button class="am-btn am-btn-success am-btn-xs am-radius am-btn-block submit-reply am-icon-gavel" data-am-modal="{target: '#my-popup-reply'}" data-json='{{:json_encode($v)}}'> 回复</button>
{{/if}}
<button class="am-btn am-btn-danger am-btn-xs am-radius am-btn-block am-icon-trash-o submit-delete" data-url="{{:MyUrl('admin/goodscomments/delete')}}" data-id="{{$v.id}}"> 删除</button>
<!-- 商品评论列表操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_admin_goods_comments_list_operation</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_admin_goods_comments_list_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>true, 'id'=>$v['id'], 'data'=>$v]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</td>
</tr>
{{/foreach}}
@ -283,6 +329,31 @@
{{/if}}
<!-- list end -->
<!-- bottom operation start -->
<div class="am-g am-margin-top-sm">
<!-- 底部操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_admin_goods_comments_bottom_operation</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_admin_goods_comments_bottom_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>true]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</div>
<!-- bottom operation end -->
<!-- 处理窗口 -->
<div class="am-popup am-radius" id="my-popup-reply">
<div class="am-popup-inner">

View File

@ -0,0 +1,12 @@
<div class="am-form-group region-linkage" data-url="{{:MyUrl('admin/region/node')}}">
<label class="block">省市区</label>
<select name="province" data-next="city" class="am-radius chosen-select" data-placeholder="省份" data-validation-message="请选择省份" data-value="{{if isset($data['province'])}}{{$data.province}}{{else /}}0{{/if}}" required>
<option value="">省份</option>
</select>
<select name="city" data-next="county" class="am-radius chosen-select" data-placeholder="城市" data-validation-message="请选择城市" data-value="{{if isset($data['city'])}}{{$data.city}}{{else /}}0{{/if}}" required>
<option value="">城市</option>
</select>
<select name="county" class="am-radius chosen-select" data-placeholder="区/县" data-validation-message="请选择区/县" data-value="{{if isset($data['county'])}}{{$data.county}}{{else /}}0{{/if}}" required>
<option value="">区/县</option>
</select>
</div>

View File

@ -7,7 +7,7 @@
<form class="am-form form-validation form-search" method="post" action="{{:MyUrl('admin/order/index')}}" request-type="form">
<div class="thin">
<div class="am-input-group am-input-group-sm am-fl so">
<input type="text" autocomplete="off" name="keywords" class="am-radius" placeholder="订单号/姓名/手机/地址/快递单号" value="{{if !empty($params.keywords)}}{{$params.keywords}}{{/if}}" />
<input type="text" autocomplete="off" name="keywords" class="am-radius" placeholder="订单号/快递单号" value="{{if !empty($params.keywords)}}{{$params.keywords}}{{/if}}" />
<span class="am-input-group-btn">
<button class="am-btn am-btn-default am-radius" type="submit" data-am-loading="{spinner:'circle-o-notch', loadingText:'搜索中...'}">搜索</button>
</span>
@ -98,13 +98,30 @@
</form>
<!-- form end -->
<!-- operation start -->
<!-- top operation start -->
<div class="am-g am-margin-top-sm">
{{if !IsMobile()}}
<a href="{{$excel_url}}" class="am-btn am-btn-success am-btn-xs am-icon-file-excel-o am-radius"> 导出Excel</a>
<!-- 顶部操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_admin_order_top_operation</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_admin_order_top_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>true]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</div>
<!-- operation end -->
<!-- top operation end -->
<!-- list start -->
<table class="am-table am-table-striped am-table-hover am-text-middle am-margin-top-sm">
@ -112,7 +129,7 @@
<tr>
<th class="am-hide-sm-only th-goods">基础信息</th>
<th class="am-hide-md-down">用户信息</th>
<th class="am-hide-sm-only th-receive-address">收件信息</th>
<th class="am-hide-sm-only th-receive-address">地址信息</th>
<th class="am-hide-md-down">快递信息</th>
<th>订单状态</th>
<th>订单金额(元)</th>
@ -126,7 +143,11 @@
{{foreach $data_list as $v}}
<tr id="data-list-{{$v.id}}" {{if $v['pay_status'] eq 1 and $v['total_price'] gt $v['pay_price']}}class="am-danger"{{/if}}>
<td class="am-hide-sm-only">
<div class="order-no">{{$v.order_no}}</div>
<div class="order-no am-padding-bottom-xs">
<span>{{$v.order_no}}</span>
<span class="am-badge am-badge-primary am-radius" title="订单模式">{{$v.order_model_name}}</span>
<span class="am-badge am-badge-secondary am-radius" title="客户端类型">{{$v.client_type_name}}</span>
</div>
{{foreach $v.items as $vs}}
<div class="goods-item">
<div class="base">
@ -164,12 +185,16 @@
{{/if}}
</td>
<td class="am-hide-sm-only">
{{$v.receive_name}}<br />
{{$v.receive_tel}}<br />
{{$v.receive_province_name}}<br />
{{$v.receive_city_name}}<br />
{{$v.receive_county_name}}<br />
{{$v.receive_address}}
{{if in_array($v['order_model'], [0,2])}}
{{$v.address_data.name}}<br />
{{$v.address_data.tel}}<br />
{{$v.address_data.province_name}}<br />
{{$v.address_data.city_name}}<br />
{{$v.address_data.county_name}}<br />
{{$v.address_data.address}}
{{else /}}
<span class="cr-ddd">无信息</span>
{{/if}}
</td>
<td class="am-hide-md-down">
{{if empty($v['express_name'])}}
@ -221,7 +246,27 @@
<div class="am-popup-bd">
<dl class="dl-content">
<dt>订单号</dt>
<dd>{{if empty($v['order_no'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.order_no}}{{/if}}</dd>
<dd>
{{if empty($v['order_no'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.order_no}}{{/if}}
</dd>
<dt>订单模式</dt>
<dd>
{{if empty($v['order_model_name'])}}
<span class="cr-ddd">未知</span>
{{else /}}
<span class="am-badge am-badge-primary am-radius" title="订单模式">{{$v.order_model_name}}</span>
{{/if}}
</dd>
<dt>客户端类型</dt>
<dd>
{{if empty($v['client_type_name'])}}
<span class="cr-ddd">未知</span>
{{else /}}
<span class="am-badge am-badge-secondary am-radius" title="客户端类型">{{$v.client_type_name}}</span>
{{/if}}
</dd>
<dt>基础信息</dt>
<dd>
@ -277,26 +322,70 @@
{{/if}}
</dd>
<dt>收件信息</dt>
<dd>
{{if empty($v['receive_address'])}}
<span class="cr-ddd">未填写</span>
{{else /}}
{{$v.receive_name}}<br />
{{$v.receive_tel}}<br />
{{$v.receive_province_name}}
{{$v.receive_city_name}}
{{$v.receive_county_name}}
{{$v.receive_address}}
{{/if}}
</dd>
{{if in_array($v['order_model'], [0,2])}}
<dt>地址信息</dt>
<dd>
{{if !empty($v['address_data'])}}
{{$v.address_data.name}}<br />
{{$v.address_data.tel}}<br />
{{$v.address_data.province_name}}
{{$v.address_data.city_name}}
{{$v.address_data.county_name}}
{{$v.address_data.address}}
{{else /}}
<span class="cr-ddd">无信息</span>
{{/if}}
</dd>
{{/if}}
{{if $v['order_model'] eq 2}}
<dt>取货信息</dt>
<dd>
{{if !empty($v['extraction_data'])}}
<p>
<span>取货码:</span>
{{if empty($v['extraction_data']['code'])}}
<span class="am-text-danger">取货码不存在、请联系管理员</span>
{{else /}}
<span class="am-badge am-badge-success am-radius">{{$v.extraction_data.code}}</span>
{{/if}}
</p>
{{if !empty($v['extraction_data']['images'])}}
<p class="am-margin-top-xs">
<img class="am-img-thumbnail" src="{{$v.extraction_data.images}}" alt="取货码" />
</p>
{{/if}}
{{else /}}
<span class="cr-ddd">无信息</span>
{{/if}}
</dd>
{{/if}}
{{if $v['order_model'] eq 3}}
<dt>密钥信息</dt>
<dd>
<ul class="am-list am-margin-bottom-0 fictitious-container">
{{foreach $v.items as $goods}}
<li class="am-g am-list-item-desced am-list-item-thumbed am-list-item-thumb-left">
<div class="am-u-sm-2 am-list-thumb">
<img src="{{$goods.images}}" alt="{{$goods.title}}" class="am-img-thumbnail am-radius" />
</div>
<div class="am-u-sm-10 am-list-item-text">
{{if empty($goods['fictitious_goods_value'])}}
<span>未配置数据</span>
{{else /}}
{{$goods.fictitious_goods_value|raw}}
{{/if}}
</div>
</li>
{{/foreach}}
</ul>
</dd>
{{/if}}
<dt>快递信息</dt>
<dd>{{if empty($v['express_name'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.express_name}}<br />{{$v.express_number}}{{/if}}</dd>
<dt>客户端类型</dt>
<dd>{{if empty($v['client_type_name'])}}<span class="cr-ddd">未知</span>{{else /}}<span class="am-badge am-badge-secondary am-radius">{{$v.client_type_name}}{{/if}}</span></dd>
<dt>支付状态</dt>
<dd>{{if empty($v['pay_status_name'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.pay_status_name}}{{/if}}</dd>
@ -335,29 +424,34 @@
{{/if}}
</dd>
<dt>购买数</dt>
<dt>购买</dt>
<dd>{{if empty($v['buy_number_count'])}}<span class="cr-ddd">未知</span>{{else /}}{{$v.buy_number_count}}{{/if}}</dd>
<dt>退货数</dt>
<dt>退货</dt>
<dd>{{if empty($v['returned_quantity'])}}<span class="cr-ddd">未退货</span>{{else /}}{{$v.returned_quantity}}{{/if}}</dd>
<dt>退款金额</dt>
<dd>{{if empty($v['refund_price']) or $v['refund_price'] elt 0.00}}<span class="cr-ddd">未退款</span>{{else /}}<span class="am-text-danger">{{$v.refund_price}}{{/if}}</span></dd>
<dt>确认时间</dt>
<dd>{{if empty($v['confirm_time'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.confirm_time}}{{/if}}</dd>
{{if $v['order_model'] eq 2}}
<dt>自提取货码</dt>
<dd>{{if empty($v['extraction_code'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.extraction_code}}{{/if}}</dd>
{{/if}}
<dt>支付时间</dt>
<dd>{{if empty($v['pay_time'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.pay_time}}{{/if}}</dd>
<dt>确认时间</dt>
<dd>{{if empty($v['confirm_time'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.confirm_time}}{{/if}}</dd>
<dt>发货时间</dt>
<dd>{{if empty($v['delivery_time'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.delivery_time}}{{/if}}</dd>
<dt>支付时间</dt>
<dd>{{if empty($v['pay_time'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.pay_time}}{{/if}}</dd>
<dt>完成时间</dt>
<dd>{{if empty($v['collect_time'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.collect_time}}{{/if}}</dd>
<dt>发货时间</dt>
<dd>{{if empty($v['delivery_time'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.delivery_time}}{{/if}}</dd>
<dt>取消时间</dt>
<dd>{{if empty($v['cancel_time'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.cancel_time}}{{/if}}</dd>
<dt>完成时间</dt>
<dd>{{if empty($v['collect_time'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.collect_time}}{{/if}}</dd>
<dt>取消时间</dt>
<dd>{{if empty($v['cancel_time'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.cancel_time}}{{/if}}</dd>
<dt>关闭时间</dt>
<dd>{{if empty($v['close_time'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.close_time}}{{/if}}</dd>
@ -365,8 +459,8 @@
<dt>创建时间</dt>
<dd>{{$v.add_time}}</dd>
<dt>更新时间</dt>
<dd>{{$v.upd_time}}</dd>
<dt>更新时间</dt>
<dd>{{$v.upd_time}}</dd>
</dl>
</div>
</div>
@ -383,7 +477,11 @@
{{/if}}
{{/if}}
{{if $v['status'] eq 2}}
<button class="am-btn am-btn-secondary am-btn-xs am-radius am-icon-send-o am-btn-block submit-delivery" data-url="{{:MyUrl('admin/order/delivery')}}" data-id="{{$v.id}}" data-user-id="{{$v.user_id}}" data-express-id="{{$v.express_id}}" data-am-modal="{target: '#order-delivery-popup'}"> 发货</button>
{{if $v['order_model'] eq 2}}
<button class="am-btn am-btn-secondary am-btn-xs am-radius am-icon-check am-btn-block submit-take" data-id="{{$v.id}}" data-user-id="{{$v.user_id}}" data-am-modal="{target: '#order-take-modal', closeViaDimmer: 0, width: 200, height: 160}"> 取货</button>
{{else /}}
<button class="am-btn am-btn-secondary am-btn-xs am-radius am-icon-send-o am-btn-block submit-delivery" data-url="{{:MyUrl('admin/order/delivery')}}" data-id="{{$v.id}}" data-user-id="{{$v.user_id}}" data-express-id="{{$v.express_id}}" data-am-modal="{target: '#order-delivery-popup'}"> 发货</button>
{{/if}}
{{/if}}
{{if $v['status'] eq 3}}
<button class="am-btn am-btn-success am-btn-xs am-radius am-icon-check-circle-o am-btn-block submit-ajax" data-url="{{:MyUrl('admin/order/collect')}}" data-id="{{$v.id}}" data-value="{{$v.user_id}}" data-view="reload" data-msg="是否操作收货,操作后不可恢复!"> 收货</button>
@ -423,6 +521,53 @@
{{/if}}
<!-- list end -->
<!-- bottom operation start -->
<div class="am-g am-margin-top-sm">
<!-- 底部操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_admin_order_bottom_operation</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_admin_order_bottom_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>true]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</div>
<!-- bottom operation end -->
<!-- 取货弹窗 -->
<div class="am-modal am-modal-no-btn" tabindex="-1" id="order-take-modal">
<div class="am-modal-dialog">
<div class="am-modal-hd">
<a href="javascript: void(0)" class="am-close am-close-spin" data-am-modal-close>&times;</a>
</div>
<div class="am-modal-bd">
<form class="am-form form-validation-take take-form" method="post" action="{{:MyUrl('admin/order/delivery')}}" request-type="ajax-reload">
<div class="am-form-group am-form-group-refreshing am-margin-bottom-0">
<label>取货码</label>
<input type="text" autocomplete="off" name="extraction_code" placeholder="取货码" minlength="4" maxlength="4" data-validation-message="请填写4位数取货码" class="am-radius" required />
</div>
<div class="am-form-group am-form-group-refreshing">
<input type="hidden" name="id" value="0" />
<input type="hidden" name="user_id" value="0" />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">确认</button>
</div>
</form>
</div>
</div>
</div>
<!-- 发货弹窗 -->
<div class="am-popup" id="order-delivery-popup">
<div class="am-popup-inner">

View File

@ -71,6 +71,31 @@
</form>
<!-- form end -->
<!-- top operation start -->
<div class="am-g am-margin-top-sm">
<!-- 顶部操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_admin_order_aftersale_top_operation</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_admin_order_aftersale_top_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>true]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</div>
<!-- top operation end -->
<!-- list start -->
<table class="am-table am-table-striped am-table-hover am-text-middle am-margin-top-sm">
<thead>
@ -324,6 +349,31 @@
{{/if}}
<!-- list end -->
<!-- bottom operation start -->
<div class="am-g am-margin-top-sm">
<!-- 底部操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_admin_order_aftersale_bottom_operation</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_admin_order_aftersale_bottom_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>true]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</div>
<!-- bottom operation end -->
<!-- 审核弹窗 -->
<div class="am-popup" id="order-audit-popup">
<div class="am-popup-inner">

View File

@ -6,6 +6,7 @@
<!-- operation start -->
<div class="am-g">
<a href="javascript:;" class="am-btn am-btn-secondary am-btn-xs am-margin-left-sm am-icon-cloud-upload am-radius" data-am-modal="{target: '#payment-upload-win'}"> 上传</a>
<a class="am-margin-left-sm" href="{{$store_payment_url}}" target="_blank">更多支付插件下载 <i class="am-icon-external-link"></i></a>
</div>
<!-- operation end -->
@ -20,7 +21,7 @@
<th class="am-hide-sm-only">作者</th>
<th class="am-hide-sm-only th-desc">描述</th>
<th>启用</th>
<th>用户</th>
<th>用户开</th>
<th>操作</th>
</tr>
</thead>

View File

@ -149,7 +149,7 @@
</div>
<div class="am-form-group">
<label class="block">用户</label>
<label class="block">用户开</label>
<input name="is_open_user" value="1" type="checkbox" data-off-text="否" data-on-text="是" data-size="xs" data-on-color="success" data-off-color="default" data-handle-width="50" data-am-switch {{if (isset($data['is_open_user']) and $data['is_open_user'] eq 1) or !isset($data['is_open_user'])}}checked="true"{{/if}} />
</div>

View File

@ -0,0 +1,21 @@
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<div class="table-no">
<div>
<i class="am-icon-warning"></i>
<span>{{if empty($msg)}}没有相关数据{{else /}}{{$msg}}{{/if}}</span>
</div>
<div class="am-margin-top-lg">
<a href="{{:MyUrl('admin/pluginsadmin/index')}}" class="am-btn am-btn-link am-radius am-btn-sm">返回到应用管理 >></a>
</div>
</div>
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->

View File

@ -5,4 +5,7 @@
<li {{if $view_type eq 'upload'}}class="am-active"{{/if}}>
<a href="{{:MyUrl('admin/pluginsadmin/index', ['view_type'=>'upload'])}}">上传应用</a>
</li>
<li class="fr">
<a class="am-margin-left-sm" href="{{$store_url}}" target="_blank">更多支付插件下载 <i class="am-icon-external-link"></i></a>
</li>
</ul>

View File

@ -8,7 +8,7 @@
<!-- nav end -->
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/pluginsadmin/upload')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/pluginsadmin/index')}}" enctype="multipart/form-data">
<form class="am-form form-validation view-save am-margin-top-sm" action="{{:MyUrl('admin/pluginsadmin/upload')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/pluginsadmin/index')}}" enctype="multipart/form-data">
<div class="am-form-group am-form-file">
<button type="button" class="am-btn am-btn-default am-btn-sm am-radius">
<i class="am-icon-cloud-upload"></i> 选择文件</button>

View File

@ -47,6 +47,11 @@
<!-- 元素拖动 -->
<script type='text/javascript' src="{{$Think.__MY_ROOT_PUBLIC__}}static/common/lib/tdrag/tdrag.min.js"></script>
<!-- baidu map -->
{{if isset($is_load_baidu_map_api) and $is_load_baidu_map_api eq 1}}
<script type="text/javascript" src="{{$Think.__MY_HTTP__}}://api.map.baidu.com/api?v=2.0&ak={{:MyC('common_baidu_map_ak')}}"></script>
{{/if}}
<!-- 隐藏编辑器初始化 -->
<script type="text/javascript">
var upload_editor = UE.getEditor("upload-editor-view", {

View File

@ -15,7 +15,7 @@
</div>
<div class="am-form-group">
<label>{{$data.common_route_separator.name}}<span class="am-form-group-label-tips">{{$data.common_route_separator.describe}}</span></label>
<input type="text" name="{{$data.common_route_separator.only_tag}}" placeholder="{{$data.common_route_separator.name}}" data-validation-message="{{$data.common_route_separator.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_route_separator.value}}"{{/if}} />
<input type="text" name="{{$data.common_route_separator.only_tag}}" placeholder="{{$data.common_route_separator.name}}" data-validation-message="{{$data.common_route_separator.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_route_separator.value}}"{{/if}} readonly />
</div>
<div class="am-form-group">
<label>{{$data.home_seo_url_html_suffix.name}}<span class="am-form-group-label-tips">{{$data.home_seo_url_html_suffix.describe}}</span></label>

View File

@ -34,4 +34,4 @@
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end
<!-- footer end -->

View File

@ -98,4 +98,4 @@
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end
<!-- footer end -->

View File

@ -35,4 +35,4 @@
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end
<!-- footer end -->

View File

@ -1,37 +0,0 @@
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<!-- table nav start -->
{{include file="site/nav" /}}
<!-- table nav end -->
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>'exhibition'])}}" enctype="multipart/form-data">
<div class="am-form-group">
<label>{{$data.common_is_exhibition_mode.name}}<span class="am-form-group-label-tips">{{$data.common_is_exhibition_mode.describe}}</span></label>
<select name="{{$data.common_is_exhibition_mode.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_is_exhibition_mode.error_tips}}" required>
{{foreach $common_is_text_list as $v}}
<option value="{{$v.id}}" {{if isset($data['common_is_exhibition_mode']['value']) and $data['common_is_exhibition_mode']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
</div>
<div class="am-form-group">
<label>{{$data.common_is_exhibition_mode_btn_text.name}}<span class="am-form-group-label-tips">{{$data.common_is_exhibition_mode_btn_text.describe}}</span></label>
<input type="text" name="{{$data.common_is_exhibition_mode_btn_text.only_tag}}" placeholder="{{$data.common_is_exhibition_mode_btn_text.describe}}" data-validation-message="{{$data.common_is_exhibition_mode_btn_text.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_is_exhibition_mode_btn_text.value}}"{{/if}} />
</div>
<div class="am-form-group am-form-group-refreshing">
<input type="hidden" name="nav_type" value="{{$nav_type}}" />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
</div>
</form>
<!-- form end -->
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end

View File

@ -48,4 +48,4 @@
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end
<!-- footer end -->

View File

@ -12,7 +12,7 @@
<!-- 图片1 -->
<div class="am-panel am-panel-default">
<div class="am-panel-hd">
<span class="am-panel-title">图片1</span>
<h3 class="am-panel-title">图片1</h3>
</div>
<div class="am-panel-bd">
<div class="am-form-group">
@ -47,7 +47,7 @@
<!-- 图片2 -->
<div class="am-panel am-panel-default">
<div class="am-panel-hd">
<span class="am-panel-title">图片2</span>
<h3 class="am-panel-title">图片2</h3>
</div>
<div class="am-panel-bd">
<div class="am-form-group">
@ -82,7 +82,7 @@
<!-- 图片3 -->
<div class="am-panel am-panel-default">
<div class="am-panel-hd">
<span class="am-panel-title">图片3</span>
<h3 class="am-panel-title">图片3</h3>
</div>
<div class="am-panel-bd">
<div class="am-form-group">
@ -126,4 +126,4 @@
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end
<!-- footer end -->

View File

@ -0,0 +1,33 @@
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<!-- table nav start -->
{{include file="site/nav" /}}
<!-- table nav end -->
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>'goods'])}}" enctype="multipart/form-data">
<div class="am-form-group">
<label>{{$data.common_is_goods_detail_show_photo.name}}<span class="am-form-group-label-tips">{{$data.common_is_goods_detail_show_photo.describe}}</span></label>
<select name="{{$data.common_is_goods_detail_show_photo.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_is_goods_detail_show_photo.error_tips}}" required>
{{foreach $common_is_text_list as $v}}
<option value="{{$v.id}}" {{if isset($data['common_is_goods_detail_show_photo']['value']) and $data['common_is_goods_detail_show_photo']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
</div>
<div class="am-form-group am-form-group-refreshing">
<input type="hidden" name="nav_type" value="{{$nav_type}}" />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
</div>
</form>
<!-- form end -->
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->

View File

@ -47,4 +47,4 @@
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end
<!-- footer end -->

View File

@ -12,7 +12,7 @@
<!-- 图片1 -->
<div class="am-panel am-panel-default">
<div class="am-panel-hd">
<span class="am-panel-title">图片1</span>
<h3 class="am-panel-title">图片1</h3>
</div>
<div class="am-panel-bd">
<div class="am-form-group">
@ -47,7 +47,7 @@
<!-- 图片2 -->
<div class="am-panel am-panel-default">
<div class="am-panel-hd">
<span class="am-panel-title">图片2</span>
<h3 class="am-panel-title">图片2</h3>
</div>
<div class="am-panel-bd">
<div class="am-form-group">
@ -82,7 +82,7 @@
<!-- 图片3 -->
<div class="am-panel am-panel-default">
<div class="am-panel-hd">
<span class="am-panel-title">图片3</span>
<h3 class="am-panel-title">图片3</h3>
</div>
<div class="am-panel-bd">
<div class="am-form-group">
@ -144,4 +144,4 @@
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end
<!-- footer end -->

View File

@ -5,8 +5,8 @@
<li {{if $nav_type eq 'beian'}}class="am-active"{{/if}} data-type="beian">
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'beian'])}}">备案信息</a>
</li>
<li {{if $nav_type eq 'exhibition'}}class="am-active"{{/if}} data-type="exhibition">
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'exhibition'])}}">站点类型</a>
<li {{if $nav_type eq 'sitetype'}}class="am-active"{{/if}} data-type="sitetype">
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'sitetype'])}}">站点类型</a>
</li>
<li {{if $nav_type eq 'register'}}class="am-active"{{/if}} data-type="register">
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'register'])}}">用户注册</a>
@ -29,6 +29,9 @@
<li {{if $nav_type eq 'search'}}class="am-active"{{/if}} data-type="search">
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'search'])}}">搜索</a>
</li>
<li {{if $nav_type eq 'goods'}}class="am-active"{{/if}} data-type="goods">
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'goods'])}}">商品</a>
</li>
<li {{if $nav_type eq 'extends'}}class="am-active"{{/if}} data-type="extends">
<a href="{{:MyUrl('admin/site/index', ['nav_type'=>'extends'])}}">扩展项</a>
</li>

View File

@ -36,4 +36,4 @@
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end
<!-- footer end -->

View File

@ -71,4 +71,4 @@
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end
<!-- footer end -->

View File

@ -34,4 +34,4 @@
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end
<!-- footer end -->

View File

@ -0,0 +1,184 @@
{{include file="public/header" /}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<!-- table nav start -->
{{include file="site/nav" /}}
<!-- table nav end -->
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/site/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/site/index', ['nav_type'=>'sitetype'])}}" enctype="multipart/form-data">
<!-- 基础配置 -->
<div class="am-panel am-panel-default">
<div class="am-panel-hd">
<h3 class="am-panel-title">基础配置</h3>
</div>
<div class="am-panel-bd">
<!-- 提示 -->
<div class="am-alert am-alert-warning am-radius" data-am-alert>
<button type="button" class="am-close">&times;</button>
<p class="am-text-xs">1. 销售型、常规电商流程,用户选择收货地址下单支付 -> 商家发货 -> 确认收货 -> 订单完成</p>
<p class="am-text-xs">2. 展示型、仅展示产品,可发起咨询(不能下单)</p>
<p class="am-text-xs">3. 自提点、下单时选择自提货物地址,用户下单支付 -> 确认提货 -> 订单完成</p>
<p class="am-text-xs">4. 虚拟销售、常规电商流程,用户下单支付 -> 自动发货 -> 确认提货 -> 订单完成</p>
</div>
<!-- 站点类型 -->
<div class="am-form-group">
<label>{{$data.common_site_type.name}}<span class="am-form-group-label-tips">{{$data.common_site_type.describe}}</span></label>
<select name="{{$data.common_site_type.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_site_type.error_tips}}" required>
{{foreach $common_site_type_list as $v}}
<option value="{{$v.value}}" {{if isset($data['common_site_type']['value']) and $data['common_site_type']['value'] eq $v['value']}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
</div>
<!-- 是否预约模式 -->
<div class="am-form-group">
<label>{{$data.common_order_is_booking.name}}<span class="am-form-group-label-tips">{{$data.common_order_is_booking.describe}}</span></label>
<select name="{{$data.common_order_is_booking.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_order_is_booking.error_tips}}" required>
{{foreach $common_is_text_list as $v}}
<option value="{{$v.id}}" {{if isset($data['common_order_is_booking']['value']) and $data['common_order_is_booking']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
</div>
<!-- 库存 -->
<div class="am-form-group">
<label>{{$data.common_is_deduction_inventory.name}}<span class="am-form-group-label-tips">{{$data.common_is_deduction_inventory.describe}}</span></label>
<select name="{{$data.common_is_deduction_inventory.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_is_deduction_inventory.error_tips}}" required>
{{foreach $common_is_text_list as $v}}
<option value="{{$v.id}}" {{if isset($data['common_is_deduction_inventory']['value']) and $data['common_is_deduction_inventory']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
</div>
<div class="am-form-group">
<label>{{$data.common_deduction_inventory_rules.name}}<span class="am-form-group-label-tips">{{$data.common_deduction_inventory_rules.describe}}</span></label>
<select name="{{$data.common_deduction_inventory_rules.only_tag}}" class="am-radius chosen-select" data-validation-message="{{$data.common_deduction_inventory_rules.error_tips}}" required>
{{foreach $common_deduction_inventory_rules_list as $v}}
<option value="{{$v.id}}" {{if isset($data['common_deduction_inventory_rules']['value']) and $data['common_deduction_inventory_rules']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
</select>
</div>
</div>
</div>
<!-- 展示型 -->
<div class="am-panel am-panel-default">
<div class="am-panel-hd">
<h3 class="am-panel-title">展示型</span>
</div>
<div class="am-panel-bd">
<div class="am-form-group">
<label>{{$data.common_is_exhibition_mode_btn_text.name}}<span class="am-form-group-label-tips">{{$data.common_is_exhibition_mode_btn_text.describe}}</span></label>
<input type="text" name="{{$data.common_is_exhibition_mode_btn_text.only_tag}}" placeholder="{{$data.common_is_exhibition_mode_btn_text.describe}}" data-validation-message="{{$data.common_is_exhibition_mode_btn_text.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_is_exhibition_mode_btn_text.value}}"{{/if}} />
</div>
</div>
</div>
<!-- 自提点 -->
<div class="am-panel am-panel-default">
<div class="am-panel-hd">
<h3 class="am-panel-title">自提点</h3>
</div>
<div class="am-panel-bd">
<ul class="am-list am-list-static am-list-border am-list-striped am-form-group am-btn-sm am-margin-bottom-0 am-padding-bottom-0 address-list">
{{if !empty($sitetype_address_list) and is_array($sitetype_address_list)}}
{{foreach $sitetype_address_list as $address}}
<li>
<span>{{$address.province_name}} {{$address.city_name}} {{$address.county_name}} {{$address.address}}{{$address.name}}-{{$address.tel}}{{if !empty($address['alias'])}}<span class="am-badge am-radius am-badge-success am-margin-left-xs">{{$address.alias}}</span>{{/if}}</span>
<span class="am-badge am-radius am-icon-remove delete-submit"> 移除</span>
<span class="am-badge am-radius am-icon-edit edit-submit"> 编辑</span>
</li>
{{/foreach}}
{{/if}}
</ul>
<input type="hidden" name="{{$data.common_self_extraction_address.only_tag}}" value="{{$data.common_self_extraction_address.value}}" class="self-extraction-address-value" />
<button type="button" class="am-btn am-btn-secondary am-radius am-icon-plus am-btn-sm am-margin-top-sm address-submit-add"> 添加地址</button>
</div>
</div>
<!-- 虚拟销售 -->
<div class="am-panel am-panel-default">
<div class="am-panel-hd">
<h3 class="am-panel-title">虚拟销售</h3>
</div>
<div class="am-panel-bd">
<div class="am-form-group">
<label>{{$data.common_site_fictitious_return_title.name}}<span class="am-form-group-label-tips">{{$data.common_site_fictitious_return_title.describe}}</span></label>
<input type="text" name="{{$data.common_site_fictitious_return_title.only_tag}}" placeholder="{{$data.common_site_fictitious_return_title.describe}}" data-validation-message="{{$data.common_site_fictitious_return_title.error_tips}}" class="am-radius" {{if !empty($data)}}value="{{$data.common_site_fictitious_return_title.value}}"{{/if}} />
</div>
<div class="am-form-group">
<label>{{$data.common_site_fictitious_return_tips.name}}<span class="am-form-group-label-tips">{{$data.common_site_fictitious_return_tips.describe}}</span></label>
<textarea rows="4" name="{{$data.common_site_fictitious_return_tips.only_tag}}" class="am-radius" placeholder="{{$data.common_site_fictitious_return_tips.name}}" data-validation-message="{{$data.common_site_fictitious_return_tips.error_tips}}">{{if !empty($data)}}{{$data.common_site_fictitious_return_tips.value}}{{/if}}</textarea>
</div>
</div>
</div>
<div class="am-form-group am-form-group-refreshing">
<input type="hidden" name="nav_type" value="{{$nav_type}}" />
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">保存</button>
</div>
</form>
<!-- form end -->
</div>
</div>
<!-- right content end -->
<!-- 自提点地址添加弹层 -->
<div class="am-popup" id="popup-address-win">
<div class="am-popup-inner">
<div class="am-popup-hd">
<h4 class="am-popup-title">地址添加</h4>
<span data-am-modal-close class="am-close">&times;</span>
</div>
<div class="am-popup-bd">
<form class="am-form form-validation-address" method="post" request-type="sync" request-value="ViewAddressModalBack">
<div class="am-form-group">
<label>别名</label>
<input type="text" name="alias" placeholder="别名" minlength="0" maxlength="16" data-validation-message="别名格式最多 16 个字符" class="am-radius" />
</div>
<div class="am-form-group">
<label>联系人</label>
<input type="text" name="name" placeholder="联系人" minlength="2" maxlength="16" data-validation-message="联系人格式 2~16 个字符之间" class="am-radius" required />
</div>
<div class="am-form-group">
<label>联系电话</label>
<input type="text" name="tel" placeholder="联系电话" minlength="6" maxlength="30" data-validation-message="联系电话格式有误" class="am-radius" required />
</div>
{{include file="lib/region_linkage" /}}
<div class="am-form-group address-detail">
<label>详细地址</label>
<div class="am-input-group am-input-group-sm">
<input type="hidden" name="lng" id="form-lng" />
<input type="hidden" name="lat" id="form-lat" />
<input type="text" name="address" id="form-address" placeholder="详细地址" minlength="2" maxlength="80" data-validation-message="详细地址格式 1~80 个字符之间" class="am-radius" required />
<span class="am-input-group-btn">
<button class="am-btn am-btn-default am-radius" type="button" id="map-location-submit"><span class="am-icon-map-marker"></span> 定位</button>
</span>
</div>
</div>
<div id="map" data-level="17" class="am-form-group"></div>
<div class="am-form-group am-form-group-refreshing">
<button type="submit" class="am-btn am-btn-primary am-radius btn-loading-example am-btn-sm am-btn-block" data-am-loading="{loadingText:'处理中...'}">确认</button>
</div>
</form>
</div>
</div>
</div>
<!-- footer start -->
{{include file="public/footer" /}}
<!-- footer end -->
<script type="text/javascript">
// 返回处理
function ViewAddressModalBack(data)
{
AddressModalHandle(data);
}
</script>

View File

@ -89,11 +89,11 @@
<thead>
<tr>
<th>名称</th>
<th>所属平台</th>
<th>轮播图片</th>
<th>事件值</th>
<th>是否启用</th>
<th>创建时间</th>
<th class="am-hide-sm-only">所属平台</th>
<th class="am-hide-sm-only">图片</th>
<th class="am-hide-sm-only">事件值</th>
<th>启用</th>
<th>更多</th>
<th>操作</th>
</tr>
</thead>
@ -102,8 +102,8 @@
{{foreach $data_list as $v}}
<tr id="data-list-{{$v.id}}" {{if $v['is_enable'] eq 0}}class="am-active"{{/if}}>
<td>{{$v.name}}</td>
<td>{{$v.platform_text}}</td>
<td {{if !empty($v['bg_color'])}}style="background-color:{{$v.bg_color}};"{{/if}}>
<td class="am-hide-sm-only">{{$v.platform_text}}</td>
<td class="am-hide-sm-only" {{if !empty($v['bg_color'])}}style="background-color:{{$v.bg_color}};"{{/if}}>
{{if !empty($v['images_url'])}}
<a href="{{$v['images_url']}}" target="_blank">
<img src="{{$v['images_url']}}" class="am-radius" width="100" height="60" />
@ -112,18 +112,68 @@
<span class="cr-ddd">暂无图片</span>
{{/if}}
</td>
<td>
<td class="am-hide-sm-only">
{{$v.event_value}}
{{if !empty($v['event_value']) and !empty($v['event_type_text'])}}
<br /><span class="am-badge am-badge-warning am-radius">{{$v.event_type_text}}</span>
{{/if}}
</td>
<td class="am-hide-sm-only">
<td>
<a href="javascript:;" class="am-icon-btn am-icon-check submit-state {{if $v['is_enable'] eq 1}}am-success{{else /}}am-default{{/if}}" data-url="{{:MyUrl('admin/slide/statusUpdate')}}" data-id="{{$v.id}}" data-state="{{$v['is_enable']}}" data-is-update-status="1"></a>
</td>
<td>{{$v.add_time_time}}</td>
<td>
<span class="am-icon-caret-down c-p" data-am-modal="{target: '#my-popup{{$v.id}}'}"> 查看更多</span>
<div class="am-popup am-radius" id="my-popup{{$v.id}}">
<div class="am-popup-inner">
<div class="am-popup-hd">
<h4 class="am-popup-title">详情内容</h4>
<span data-am-modal-close
class="am-close">&times;</span>
</div>
<div class="am-popup-bd">
<dl class="dl-content">
<dt>名称</dt>
<dd>{{$v.name}}</dd>
<dt>所属平台</dt>
<dd>{{$v.platform_text}}</dd>
<dt>图片</dt>
<dd>
{{if !empty($v['images_url'])}}
<a href="{{$v['images_url']}}" target="_blank">
<img src="{{$v['images_url']}}" class="am-radius" width="100" height="60" />
</a>
{{else /}}
<span class="cr-ddd">暂无图片</span>
{{/if}}
</dd>
<dt>事件值</dt>
<dd>
<div class="event-value">
{{$v.event_value}}
{{if !empty($v['event_value'])}}
<br /><span class="am-badge am-badge-warning am-radius">{{$v.event_type_text}}</span>
{{/if}}
</div>
</dd>
<dt>启用</dt>
<dd>{{$v.is_enable_text}}</dd>
<dt>创建时间</dt>
<dd>{{$v.add_time_time}}</dd>
<dt>更新时间</dt>
<dd>{{$v.upd_time_time}}</dd>
</dl>
</div>
</div>
</div>
</td>
<td class="view-operation">
<a href="{{:MyUrl('admin/slide/saveinfo', array('id'=>$v['id']))}}">
<a href="{{:MyUrl('admin/slide/saveinfo', array_merge($params, ['id'=>$v['id']]))}}">
<button class="am-btn am-btn-secondary am-btn-xs am-radius am-icon-edit"> 编辑</button>
</a>
<button class="am-btn am-btn-danger am-btn-xs am-radius am-icon-trash-o submit-delete" data-url="{{:MyUrl('admin/slide/delete')}}" data-id="{{$v.id}}"> 删除</button>

View File

@ -4,7 +4,7 @@
<div class="content-right">
<div class="content">
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/slide/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/slide/index')}}" enctype="multipart/form-data">
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/slide/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/slide/index', $params)}}" enctype="multipart/form-data">
<legend>
<span class="am-text-default">
{{if empty($data['id'])}}
@ -13,7 +13,7 @@
轮播编辑
{{/if}}
</span>
<a href="{{:MyUrl('admin/slide/index')}}" class="am-fr am-text-sm am-margin-top-xs am-icon-mail-reply"> 返回</a>
<a href="{{:MyUrl('admin/slide/index', $params)}}" class="am-fr am-text-sm am-margin-top-xs am-icon-mail-reply"> 返回</a>
</legend>
<div class="am-form-group">
<label>名称</label>

View File

@ -9,5 +9,5 @@
<div class="am-alert am-alert-warning am-radius" data-am-alert>
<button type="button" class="am-close">&times;</button>
<p class="am-text-xs">阿里云短信管理地址 <a href="https://www.aliyun.com/acts/alicomcloud/new-discount?userCode=iub0dy6g" class="am-margin-left-sm" target="_blank">点击去阿里云购买短信 >></a> </p>
<p class="am-text-xs">阿里云短信管理地址 <a href="https://www.aliyun.com/acts/alicomcloud/new-discount?userCode=iub0dy6g" class="am-margin-left-sm" target="_blank">点击去阿里云购买短信 <i class="am-icon-external-link"></i></a> </p>
</div>

View File

@ -5,4 +5,7 @@
<li {{if $view_type eq 'upload'}}class="am-active"{{/if}}>
<a href="{{:MyUrl('admin/theme/index', ['view_type'=>'upload'])}}">主题安装</a>
</li>
<li class="fr">
<a class="am-margin-left-sm" href="{{$store_theme_url}}" target="_blank">更多支付插件下载 <i class="am-icon-external-link"></i></a>
</li>
</ul>

View File

@ -8,7 +8,7 @@
<!-- nav end -->
<!-- form start -->
<form class="am-form form-validation view-save" action="{{:MyUrl('admin/theme/upload')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/theme/index')}}" enctype="multipart/form-data">
<form class="am-form form-validation view-save am-margin-top-sm" action="{{:MyUrl('admin/theme/upload')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/theme/index')}}" enctype="multipart/form-data">
<div class="am-form-group am-form-file">
<button type="button" class="am-btn am-btn-default am-btn-sm am-radius">
<i class="am-icon-cloud-upload"></i> 选择文件</button>

View File

@ -66,14 +66,35 @@
</form>
<!-- form end -->
<!-- operation start -->
<!-- top operation start -->
<div class="am-g am-margin-top-sm">
<a href="{{:MyUrl('admin/user/saveinfo')}}" class="am-btn am-btn-secondary am-radius am-btn-xs am-icon-plus"> 新增</a>
{{if !IsMobile()}}
<a href="{{$excel_url}}" class="am-btn am-btn-success am-btn-xs am-margin-left-sm am-icon-file-excel-o am-radius"> 导出Excel</a>
<a href="{{$excel_url}}" class="am-btn am-btn-success am-btn-xs am-margin-left-sm am-icon-file-excel-o am-radius"> 导出Excel</a>
{{/if}}
<!-- 顶部操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_admin_user_top_operation</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_admin_user_top_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>true]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</div>
<!-- operation end -->
<!-- top operation end -->
<!-- list start -->
<table class="am-table am-table-striped am-table-hover am-text-middle am-margin-top-sm am-margin-left-xs">
@ -238,6 +259,31 @@
{{/if}}
<!-- list end -->
<!-- bottom operation start -->
<div class="am-g am-margin-top-sm">
<!-- 底部操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_admin_user_bottom_operation</span>
</div>
{{/if}}
{{php}}
$hook_name = 'plugins_view_admin_user_bottom_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>true]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</div>
<!-- bottom operation end -->
<!-- page start -->
{{if !empty($data_list)}}
{{$page_html|raw}}

View File

@ -14,6 +14,7 @@ use app\service\GoodsService;
use app\service\UserService;
use app\service\PaymentService;
use app\service\BuyService;
use app\service\PluginsService;
/**
* 购买
@ -70,10 +71,17 @@ class Buy extends Common
'base' => $ret['data']['base'],
'extension_data' => $ret['data']['extension_data'],
'common_order_is_booking' => (int) MyC('common_order_is_booking', 0),
// 优惠劵
'plugins_coupon_data' => CallPluginsServiceMethod('coupon', 'BaseService', 'BuyUserCouponData', ['order_goods'=>$ret['data']['goods'], 'coupon_id'=>$coupon_id]),
'common_site_type' => (int) MyC('common_site_type', 0, true),
];
// 优惠劵
$ret = PluginsService::PluginsControlCall(
'coupon', 'coupon', 'buy', 'api', ['order_goods'=>$ret['data']['goods'], 'coupon_id'=>$coupon_id]);
if($ret['code'] == 0 && isset($ret['data']['code']) && $ret['data']['code'] == 0)
{
$result['plugins_coupon_data'] = $ret['data']['data'];
}
return DataReturn('操作成功', 0, $result);
}
return $ret;
@ -91,7 +99,7 @@ class Buy extends Common
{
$params = $this->data_post;
$params['user'] = $this->user;
return BuyService::OrderAdd($params);
return BuyService::OrderInsert($params);
}
}
?>

View File

@ -50,8 +50,9 @@ class Cart extends Common
$ret['data'] = [
'data' => $ret['data'],
'customer_service_tel' => MyC('common_app_customer_service_tel', null, true),
'common_is_exhibition_mode_btn_text'=> MyC('common_is_exhibition_mode_btn_text', null, true),
'common_is_exhibition_mode' => (int) MyC('common_is_exhibition_mode', 0),
'common_is_exhibition_mode_btn_text'=> MyC('common_is_exhibition_mode_btn_text', '立即咨询', true),
'common_site_type' => (int) MyC('common_site_type', 0, true),
'common_cart_total' => BuyService::UserCartTotal(['user'=>$this->user]),
];
return $ret;

View File

@ -108,7 +108,7 @@ class Common extends Controller
{
if(MyC('home_site_state') != 1)
{
die(json_encode(DataReturn(MyC('home_site_close_reason', '网站维护中...'), -10000)));
exit(json_encode(DataReturn(MyC('home_site_close_reason', '网站维护中...'), -10000)));
}
}

View File

@ -1,116 +0,0 @@
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\api\controller;
/**
* 优惠劵
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class Coupon extends Common
{
/**
* [__construct 构造方法]
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-03T12:39:08+0800
*/
public function __construct()
{
// 调用父类前置方法
parent::__construct();
}
/**
* 优惠劵首页
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-10-15
* @desc description
*/
public function Index()
{
// 获取基础配置信息
$base = CallPluginsData('coupon');
// 优惠劵列表
$coupon_params = [
'where' => [
'is_enable' => 1,
'is_user_receive' => 1,
],
'm' => 0,
'n' => 0,
'is_sure_receive' => 1,
'user' => $this->user,
];
$ret = CallPluginsServiceMethod('coupon', 'CouponService', 'CouponList', $coupon_params);
// 返回数据
$result = [
'base' => $base['data'],
'data' => $ret['data'],
];
return DataReturn('处理成功', 0, $result);
}
/**
* 用户优惠劵列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-10-15
* @desc description
*/
public function User()
{
// 是否登录
$this->IsLogin();
// 获取用户优惠劵
$coupon_params = [
'user' => $this->user,
'where' => [
'user_id' => $this->user['id'],
'is_valid' => 1,
],
];
return CallPluginsServiceMethod('coupon', 'UserCouponService', 'CouponUserList', $coupon_params);
}
/**
* 领取优惠劵
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-10-15
* @desc description
*/
public function Receive()
{
// 是否登录
$this->IsLogin();
// 是否ajax请求
if(!IS_AJAX)
{
return $this->error('非法访问');
}
// 领取优惠劵
return CallPluginsServiceMethod('coupon', 'CouponService', 'UserReceiveCoupon', $this->data_post);
}
}
?>

View File

@ -12,6 +12,7 @@ namespace app\api\controller;
use think\Db;
use app\service\ResourcesService;
use app\service\RegionService;
/**
* 开发测试
@ -71,5 +72,63 @@ class Devtest extends Common
}
}
}
/**
* 订单地址拆分到新的表1.7升级1.8升级运行
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-12-13
* @desc description
*/
public function OrderAddress()
{
if(input('pwd') != 'shopxo520')
{
die('非法访问');
}
// 状态
$success = 0;
$fail = 0;
// 获取数据
// 一次处理100条
$prefix = config('database.prefix');
$field = 'id, user_id, receive_address_id, receive_name, receive_tel, receive_province, receive_city, receive_county, receive_address';
$sql = 'SELECT '.$field.' FROM '.$prefix.'order WHERE `id` NOT IN (SELECT `order_id` FROM '.$prefix.'order_address) LIMIT 500';
$result = Db::query($sql);
if(!empty($result))
{
foreach($result as $v)
{
$province_name = RegionService::RegionName($v['receive_province']);
$city_name = RegionService::RegionName($v['receive_city']);
$county_name = RegionService::RegionName($v['receive_county']);
$data = [
'order_id' => $v['id'],
'user_id' => $v['user_id'],
'address_id' => $v['receive_address_id'],
'name' => $v['receive_name'],
'tel' => $v['receive_tel'],
'province' => $v['receive_province'],
'city' => $v['receive_city'],
'county' => $v['receive_county'],
'address' => $v['receive_address'],
'province_name' => empty($province_name) ? '' : $province_name,
'city_name' => empty($city_name) ? '' : $city_name,
'county_name' => empty($county_name) ? '' : $county_name,
'add_time' => time(),
];
if(Db::name('OrderAddress')->insert($data))
{
$success++;
} else {
$fail++;
}
}
}
echo 'count:'.count($result).', success:'.$success.', fail:'.$fail;
}
}
?>

View File

@ -12,7 +12,9 @@ namespace app\api\controller;
use app\service\GoodsService;
use app\service\BuyService;
use app\service\PluginsService;
use app\service\GoodsCommentsService;
use app\service\ResourcesService;
/**
* 商品
@ -78,27 +80,7 @@ class Goods extends Common
unset($ret['data'][0]['content_web']);
} else {
// 标签处理兼容小程序rich-text
$search = [
'<img ',
'<section',
'/section>',
'<p>',
'<div>',
'<table',
'<tr',
'<td',
];
$replace = [
'<img style="max-width:100%;margin:0;padding:0;display:block;" ',
'<div',
'/div>',
'<p style="margin:0;">',
'<div style="margin:0;">',
'<table style="width:100%;margin:0px;border-collapse:collapse;border-color:#ddd;border-style:solid;border-width:0 1px 1px 0;"',
'<tr style="border-top:1px solid #ddd;"',
'<td style="margin:0;padding:5px;border-left:1px solid #ddd;"',
];
$ret['data'][0]['content_web'] = str_replace($search, $replace, $ret['data'][0]['content_web']);
$ret['data'][0]['content_web'] = ResourcesService::ApMiniRichTextContentHandle($ret['data'][0]['content_web']);
}
// 当前登录用户是否已收藏
@ -129,63 +111,40 @@ class Goods extends Common
'common_app_is_poster_share' => (int) MyC('common_app_is_poster_share'),
'common_cart_total' => BuyService::UserCartTotal(['user'=>$this->user]),
'customer_service_tel' => MyC('common_app_customer_service_tel', null, true),
'common_is_exhibition_mode_btn_text'=> MyC('common_is_exhibition_mode_btn_text', null, true),
'common_is_exhibition_mode' => (int) MyC('common_is_exhibition_mode', 0),
'common_is_goods_detail_show_photo' => MyC('common_is_goods_detail_show_photo', 0, true),
// 优惠劵
'plugins_coupon_data' => $this->PluginsCouponGoods($goods_id),
// 站点模式
'common_site_type' => (int) MyC('common_site_type', 0, true),
'common_is_exhibition_mode_btn_text'=> MyC('common_is_exhibition_mode_btn_text', '立即咨询', true),
];
// 秒杀
// 支付宝小程序在线客服
if(APPLICATION_CLIENT_TYPE == 'alipay')
{
$result['common_app_mini_alipay_tnt_inst_id'] = MyC('common_app_mini_alipay_tnt_inst_id', null, true);
$result['common_app_mini_alipay_scene'] = MyC('common_app_mini_alipay_scene', null, true);
}
// 限时秒杀
if($result['common_app_is_limitedtimediscount'] == 1)
{
$ret = CallPluginsServiceMethod('limitedtimediscount', 'Service', 'GoodsDetailCountdown', $goods_id);
if($ret['code'] == 0)
$ret = PluginsService::PluginsControlCall(
'limitedtimediscount', 'index', 'goods', 'api', ['goods_id'=>$goods_id]);
if($ret['code'] == 0 && isset($ret['data']['code']) && $ret['data']['code'] == 0)
{
$result['plugins_limitedtimediscount_data'] = $ret['data'];
$result['plugins_limitedtimediscount_data'] = $ret['data']['data'];
}
}
return DataReturn('success', 0, $result);
}
/**
* 商品详情优惠劵
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-10-17
* @desc description
* @param [int] $goods_id [商品id]
*/
private function PluginsCouponGoods($goods_id)
{
// 获取基础配置信息
$base = CallPluginsData('coupon');
// 优惠劵列表
$coupon_params = [
'where' => [
'is_enable' => 1,
'is_user_receive' => 1,
],
'm' => 0,
'n' => 0,
'is_sure_receive' => 1,
'user' => $this->user,
];
$ret = CallPluginsServiceMethod('coupon', 'CouponService', 'CouponList', $coupon_params);
// 排除商品不支持的活动
if(!empty($ret['data']))
// 优惠券
$ret = PluginsService::PluginsControlCall(
'coupon', 'index', 'goods', 'api', ['goods_id'=>$goods_id]);
if($ret['code'] == 0 && isset($ret['data']['code']) && $ret['data']['code'] == 0)
{
$ret['data'] = CallPluginsServiceMethod('coupon', 'BaseService', 'CouponListGoodsExclude', ['data'=>$ret['data'], 'goods_id'=>$goods_id]);
$result['plugins_coupon_data'] = $ret['data']['data'];
}
// 返回数据
return [
'base' => $base['data'],
'data' => $ret['data'],
];
return DataReturn('success', 0, $result);
}
/**
@ -328,22 +287,5 @@ class Goods extends Common
];
return DataReturn('success', 0, $result);
}
/**
* 商品海报
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-08-17T21:10:41+0800
*/
public function Poster()
{
// 是否开启海报功能
if(MyC('common_app_is_poster_share') == 1)
{
return CallPluginsServiceMethod('distribution', 'PosterGoodsService', 'GoodsCreateMiniWechat', $this->data_post);
}
return DataReturn('海报功能未启用', -100);
}
}
?>

View File

@ -13,6 +13,8 @@ namespace app\api\controller;
use app\service\GoodsService;
use app\service\BannerService;
use app\service\AppHomeNavService;
use app\service\PluginsService;
use app\service\BuyService;
/**
* 首页
@ -45,9 +47,6 @@ class Index extends Common
*/
public function Index()
{
// 秒杀
$common_app_is_limitedtimediscount = (int) MyC('common_app_is_limitedtimediscount');
// 返回数据
$result = [
'navigation' => AppHomeNavService::AppHomeNav(),
@ -58,17 +57,26 @@ class Index extends Common
'common_app_is_enable_answer' => (int) MyC('common_app_is_enable_answer', 1),
'common_app_is_header_nav_fixed' => (int) MyC('common_app_is_header_nav_fixed', 0),
'common_app_is_online_service' => (int) MyC('common_app_is_online_service', 0),
'common_app_is_limitedtimediscount' => $common_app_is_limitedtimediscount,
'common_app_is_limitedtimediscount' => (int) MyC('common_app_is_limitedtimediscount'),
'common_cart_total' => BuyService::UserCartTotal(['user'=>$this->user]),
];
// 秒杀
if($common_app_is_limitedtimediscount == 1)
// 支付宝小程序在线客服
if(APPLICATION_CLIENT_TYPE == 'alipay')
{
$ret = CallPluginsServiceMethod('limitedtimediscount', 'Service', 'ApiHomeAd');
if($ret['code'] == 0)
{
$result['plugins_limitedtimediscount_data'] = $ret['data'];
}
$result['common_app_mini_alipay_tnt_inst_id'] = MyC('common_app_mini_alipay_tnt_inst_id', null, true);
$result['common_app_mini_alipay_scene'] = MyC('common_app_mini_alipay_scene', null, true);
}
// 限时秒杀
if($result['common_app_is_limitedtimediscount'] == 1)
{
$ret = PluginsService::PluginsControlCall(
'limitedtimediscount', 'index', 'index', 'api');
if($ret['code'] == 0 && isset($ret['data']['code']) && $ret['data']['code'] == 0)
{
$result['plugins_limitedtimediscount_data'] = $ret['data']['data'];
}
}
// 返回数据

View File

@ -13,6 +13,7 @@ namespace app\api\controller;
use app\service\PaymentService;
use app\service\OrderService;
use app\service\GoodsCommentsService;
use app\service\ConfigService;
/**
* 我的订单
@ -117,7 +118,19 @@ class Order extends Common
$data = OrderService::OrderList($data_params);
if(!empty($data['data'][0]))
{
return DataReturn('success', 0, $data['data'][0]);
// 返回信息
$result = [
'data' => $data['data'][0],
'site_fictitious' => null,
];
// 虚拟销售配置
if($result['data']['order_model'] == 3 && $result['data']['pay_status'] == 1 && in_array($result['data']['status'], [3,4]))
{
$site_fictitious = ConfigService::SiteFictitiousConfig();
$result['site_fictitious'] = $site_fictitious['data'];
}
return DataReturn('success', 0, $result);
}
return DataReturn('数据不存在或已删除', -100);
}

View File

@ -0,0 +1,87 @@
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2019 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\api\controller;
use app\service\PluginsService;
/**
* 应用调用入口
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class Plugins extends Common
{
/**
* 构造方法
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-01-02
* @desc description
*/
public function __construct()
{
parent::__construct();
}
/**
* 首页
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-01-02
* @desc description
*/
public function Index()
{
// 请求参数校验
$p = [
[
'checked_type' => 'empty',
'key_name' => 'pluginsname',
'error_msg' => '应用名称有误',
],
[
'checked_type' => 'empty',
'key_name' => 'pluginscontrol',
'error_msg' => '应用控制器有误',
],
[
'checked_type' => 'empty',
'key_name' => 'pluginsaction',
'error_msg' => '应用操作方法有误',
],
];
$ret = ParamsChecked($this->data_request, $p);
if($ret !== true)
{
return DataReturn($ret, -5000);
}
// 应用名称/控制器/方法
$pluginsname = $this->data_request['pluginsname'];
$pluginscontrol = strtolower($this->data_request['pluginscontrol']);
$pluginsaction = strtolower($this->data_request['pluginsaction']);
// 调用
$ret = PluginsService::PluginsControlCall($pluginsname, $pluginscontrol, $pluginsaction, 'api', $this->data_request);
if($ret['code'] == 0)
{
return $ret['data'];
}
// 调用失败
return $ret;
}
}
?>

View File

@ -15,6 +15,7 @@ use app\service\OrderService;
use app\service\GoodsService;
use app\service\MessageService;
use app\service\AppCenterNavService;
use app\service\BuyService;
/**
* 用户
@ -92,7 +93,7 @@ class User extends Common
}
// 授权
$result = (new \base\AlipayAuth())->GetAuthCode(MyC('common_app_mini_alipay_appid'), $this->data_post['authcode']);
$result = (new \base\Alipay())->GetAuthSessionKey(MyC('common_app_mini_alipay_appid'), $this->data_post['authcode']);
if($result['status'] == 0)
{
// 先从数据库获取用户信息
@ -164,7 +165,14 @@ class User extends Common
$result = (new \base\Wechat(MyC('common_app_mini_weixin_appid'), MyC('common_app_mini_weixin_appsecret')))->GetAuthSessionKey($this->data_post['authcode']);
if($result !== false)
{
return DataReturn('授权登录成功', 0, $result);
// 先从数据库获取用户信息
$user = UserService::AppUserInfoHandle(null, 'weixin_openid', $result);
if(empty($user))
{
return DataReturn('授权登录成功', 0, ['is_alipay_user_exist'=>0, 'openid'=>$result]);
}
$user['is_alipay_user_exist'] = 1;
return DataReturn('授权登录成功', 0, $user);
}
return DataReturn('授权登录失败', -100);
}
@ -235,19 +243,88 @@ class User extends Common
*/
public function BaiduUserAuth()
{
$this->data_post['config'] = [
'id' => MyC('common_app_mini_baidu_appid'),
$config = [
'appid' => MyC('common_app_mini_baidu_appid'),
'key' => MyC('common_app_mini_baidu_appkey'),
'secret' => MyC('common_app_mini_baidu_appsecret'),
];
$result = (new \base\BaiduAuth())->GetAuthUserInfo($this->data_post);
$result = (new \base\Baidu($config))->GetAuthSessionKey($this->data_post);
if($result['status'] == 0)
{
return UserService::AuthUserProgram($result['data'], 'baidu_openid');
// 先从数据库获取用户信息
$user = UserService::AppUserInfoHandle(null, 'baidu_openid', $result);
if(empty($user))
{
return DataReturn('授权登录成功', 0, ['is_alipay_user_exist'=>0, 'openid'=>$result['data']]);
}
$user['is_alipay_user_exist'] = 1;
return DataReturn('授权登录成功', 0, $user);
}
return DataReturn($result['msg'], -10);
}
/**
* 百度小程序获取用户信息
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-11-06
* @desc description
*/
public function BaiduUserInfo()
{
// 参数校验
$p = [
[
'checked_type' => 'empty',
'key_name' => 'openid',
'error_msg' => 'openid为空',
],
[
'checked_type' => 'empty',
'key_name' => 'encrypted_data',
'error_msg' => '解密数据为空',
],
[
'checked_type' => 'empty',
'key_name' => 'iv',
'error_msg' => 'iv为空,请重试',
]
];
$ret = ParamsChecked($this->data_post, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 先从数据库获取用户信息
$user = UserService::AppUserInfoHandle(null, 'baidu_openid', $this->data_post['openid']);
if(empty($user))
{
$config = [
'appid' => MyC('common_app_mini_baidu_appid'),
'key' => MyC('common_app_mini_baidu_appkey'),
'secret' => MyC('common_app_mini_baidu_appsecret'),
];
$result = (new \base\Baidu($config))->DecryptData($this->data_post['encrypted_data'], $this->data_post['iv'], $this->data_post['openid']);
if($result['status'] == 0 && !empty($result['data']))
{
$result['nick_name'] = isset($result['data']['nickname']) ? $result['data']['nickname'] : '';
$result['avatar'] = isset($result['data']['headimgurl']) ? $result['data']['headimgurl'] : '';
$result['gender'] = empty($result['data']['sex']) ? 0 : ($result['data']['sex'] == 2) ? 1 : 2;
$result['openid'] = $result['data']['openid'];
$result['referrer']= isset($this->data_post['referrer']) ? $this->data_post['referrer'] : 0;
return UserService::AuthUserProgram($result, 'baidu_openid');
} else {
return DataReturn($result['msg'], -1);
}
} else {
return DataReturn('授权成功', 0, $user);
}
return DataReturn(empty($result) ? '获取用户信息失败' : $result, -100);
}
/**
* 头条小程序用户授权
* @author Devil
@ -258,14 +335,21 @@ class User extends Common
*/
public function ToutiaoUserAuth()
{
$this->data_post['config'] = [
$config = [
'appid' => MyC('common_app_mini_toutiao_appid'),
'secret' => MyC('common_app_mini_toutiao_appsecret'),
];
$result = (new \base\Toutiao())->GetAuthCode($this->data_post);
$result = (new \base\Toutiao($config))->GetAuthSessionKey($this->data_post);
if($result['status'] == 0)
{
return DataReturn('授权登录成功', 0, $result['data']['openid']);
// 先从数据库获取用户信息
$user = UserService::AppUserInfoHandle(null, 'toutiao_openid', $result);
if(empty($user))
{
return DataReturn('授权登录成功', 0, ['is_alipay_user_exist'=>0, 'openid'=>$result['data']]);
}
$user['is_alipay_user_exist'] = 1;
return DataReturn('授权登录成功', 0, $user);
}
return DataReturn($result['msg'], -10);
}
@ -339,7 +423,14 @@ class User extends Common
$result = (new \base\QQ(MyC('common_app_mini_qq_appid'), MyC('common_app_mini_qq_appsecret')))->GetAuthSessionKey($this->data_post['authcode']);
if($result !== false)
{
return DataReturn('授权登录成功', 0, $result);
// 先从数据库获取用户信息
$user = UserService::AppUserInfoHandle(null, 'qq_openid', $result);
if(empty($user))
{
return DataReturn('授权登录成功', 0, ['is_alipay_user_exist'=>0, 'openid'=>$result]);
}
$user['is_alipay_user_exist'] = 1;
return DataReturn('授权登录成功', 0, $user);
}
return DataReturn('授权登录失败', -100);
}
@ -426,7 +517,6 @@ class User extends Common
// 未读消息总数
$params = ['user'=>$this->user, 'is_more'=>1, 'is_read'=>0];
$common_message_total = MessageService::UserMessageTotal($params);
$common_message_total = ($common_message_total > 99) ? '99+' : $common_message_total;
// 用户订单状态
$user_order_status = OrderService::OrderStatusStepTotal(['user_type'=>'user', 'user'=>$this->user, 'is_comments'=>1, 'is_aftersale'=>1]);
@ -447,8 +537,16 @@ class User extends Common
'navigation' => AppCenterNavService::AppCenterNav(),
'common_app_is_online_service' => (int) MyC('common_app_is_online_service', 0),
'common_app_is_head_vice_nav' => (int) MyC('common_app_is_head_vice_nav', 0),
'common_cart_total' => BuyService::UserCartTotal(['user'=>$this->user]),
);
// 支付宝小程序在线客服
if(APPLICATION_CLIENT_TYPE == 'alipay')
{
$result['common_app_mini_alipay_tnt_inst_id'] = MyC('common_app_mini_alipay_tnt_inst_id', null, true);
$result['common_app_mini_alipay_scene'] = MyC('common_app_mini_alipay_scene', null, true);
}
// 返回数据
return DataReturn('success', 0, $result);
}

View File

@ -11,6 +11,7 @@
namespace app\api\controller;
use app\service\UserService;
use app\service\ConfigService;
/**
* 用户地址
@ -111,5 +112,18 @@ class UserAddress extends Common
return UserService::UserAddressDefault($params);
}
/**
* 自提点地址列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-11-25
* @desc description
*/
public function Extraction()
{
return ConfigService::SiteTypeExtractionAddressList();
}
}
?>

View File

@ -11,6 +11,30 @@
// 应用公共文件
/**
* 钩子返回数据处理,是否存在错误
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-12-02
* @desc description
* @param [array] $data [钩子返回的数据]
*/
function HookReturnHandle($data)
{
if(!empty($data) && is_array($data))
{
foreach($data as $v)
{
if(is_array($v) && isset($v['code']) && $v['code'] != 0)
{
return $v;
}
}
}
return DataReturn('无钩子信息', 0);
}
/**
* 附件地址处理
* @author Devil
@ -76,7 +100,7 @@ function PathToParams($key = null, $default = null, $path = '')
}
/**
* 调用插件方法 - 获取插件配置信息
* 调用插件服务层方法 - 获取插件配置信息
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
@ -94,8 +118,15 @@ function CallPluginsData($plugins, $attachment_field = [], $service_name = '', $
return DataReturn('插件状态异常['.$plugins.']', -1);
}
// 查看是否存在基础服务层并且定义获取基础配置方法
$plugins_class = 'app\plugins\\'.$plugins.'\service\BaseService';
if(class_exists($plugins_class) && method_exists($plugins_class, 'BaseConfig'))
{
return $plugins_class::BaseConfig();
}
// 未指定附件字段则自动去获取
$attachment = [];
$attachment = $attachment_field;
if(empty($attachment_field) && !empty($attachment_property))
{
// 类自定义或者默认两个类
@ -117,7 +148,7 @@ function CallPluginsData($plugins, $attachment_field = [], $service_name = '', $
}
/**
* 调用插件方法 - 访问为静态
* 调用插件服务层方法 - 访问为静态
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
@ -273,8 +304,16 @@ function StrToAscii($str)
$change_after = '';
if(!empty($str))
{
$str = mb_convert_encoding($str, 'GB2312');
for($i=0;$i<strlen($str);$i++){
// 编码处理
$encode = mb_detect_encoding($str);
if($encode != 'UTF-8')
{
$str = mb_convert_encoding($str, 'UTF-8', $encode);
}
// 开始转换
for($i=0; $i<strlen($str); $i++)
{
$temp_str = dechex(ord($str[$i]));
if(isset($temp_str[1]))
{
@ -304,13 +343,21 @@ function AsciiToStr($ascii)
$str = '';
if(!empty($ascii))
{
// 开始转换
$asc_arr = str_split(strtolower($ascii), 2);
for($i=0; $i<count($asc_arr); $i++)
{
$str .= chr(hexdec($asc_arr[$i][1].$asc_arr[$i][0]));
}
// 编码处理
$encode = mb_detect_encoding($str);
if($encode != 'UTF-8')
{
$str = mb_convert_encoding($str, 'UTF-8', $encode);
}
}
return mb_convert_encoding($str, 'UTF-8', 'GB2312');
return $str;
}
/**
@ -412,11 +459,7 @@ function FunEach(&$data)
*/
function PriceNumberFormat($value, $decimals = 2, $dec_point = '.')
{
if(!empty($value))
{
return number_format($value, $decimals, $dec_point, '');
}
return 0.00;
return number_format((float) $value, $decimals, $dec_point, '');
}
/**
@ -734,12 +777,16 @@ function PriceBeautify($price = 0, $default = null)
}
$price = str_replace('.00', '', $price);
if(strpos ($price, '.') !== false)
if(strpos($price, '.') !== false)
{
if(substr($price, -1) == 0)
{
$price = substr($price, 0, -1);
}
}
if(substr($price, -1) == '.')
{
$price = substr($price, 0, -1);
}
}
return $price;
}
@ -1029,7 +1076,7 @@ function IsMobile()
/**
* [Is_Json 校验json数据是否合法]
* 校验json数据是否合法
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
@ -1037,7 +1084,7 @@ function IsMobile()
* @param [string] $jsonstr [需要校验的json字符串]
* @return [boolean] [合法true, 则false]
*/
function Is_Json($jsonstr)
function IsJson($jsonstr)
{
if(PHP_VERSION > 5.3)
{
@ -1049,32 +1096,51 @@ function Is_Json($jsonstr)
}
/**
* [Curl_Post curl模拟post]
* curl模拟post
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-03T21:58:54+0800
* @param [string] $url [请求地址]
* @param [array] $post [发送的post数据]
* @param [string] $url [请求地址]
* @param [array] $post [发送的post数据]
* @param [boolean] $is_json [是否使用 json 数据发送]
* @return [mixed] [请求返回的数据]
*/
function Curl_Post($url, $post)
function CurlPost($url, $post, $is_json = false)
{
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post,
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_URL, $url);
// 是否 json
if($is_json)
{
$data_string = json_encode($post);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type: application/json; charset=utf-8",
"Content-Length: " . strlen($data_string)
)
);
} else {
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type: application/x-www-form-urlencoded",
"cache-control: no-cache"
)
);
}
$ch = curl_init($url);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
/**
* [Fsockopen_Post fsockopen方式]
* fsockopen方式
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
@ -1082,7 +1148,7 @@ function Curl_Post($url, $post)
* @param [string] $url [url地址]
* @param [string] $data [发送参数]
*/
function Fsockopen_Post($url, $data = '')
function FsockopenPost($url, $data = '')
{
$row = parse_MyUrl($url);
$host = $row['host'];
@ -1118,7 +1184,7 @@ function Fsockopen_Post($url, $data = '')
}
/**
* [Xml_Array xml转数组]
* xml转数组
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
@ -1126,7 +1192,7 @@ function Fsockopen_Post($url, $data = '')
* @param [xml] $xmlstring [xml数据]
* @return [array] [array数组]
*/
function Xml_Array($xmlstring) {
function XmlArray($xmlstring) {
return json_decode(json_encode((array) simplexml_load_string($xmlstring)), true);
}

View File

@ -10,6 +10,7 @@
// +----------------------------------------------------------------------
namespace app\index\controller;
use app\service\SeoService;
use app\service\AnswerService;
/**
@ -84,6 +85,9 @@ class Answer extends Common
$this->assign('common_is_show_list', lang('common_is_show_list'));
$this->assign('common_is_text_list', lang('common_is_text_list'));
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('问答/留言', 1));
// 参数
$this->assign('params', $params);
return $this->fetch();

View File

@ -55,8 +55,23 @@ class Buy extends Common
session('buy_post_data', $_POST);
return redirect(MyUrl('index/buy/index'));
} else {
// 获取商品列表
$params = array_merge(input(), session('buy_post_data'));
// 站点类型,是否开启了展示型
if(MyC('common_site_type', 0, true) == 1)
{
$this->assign('msg', '展示型不允许提交订单');
return $this->fetch('public/tips_error');
}
// 获取下单信息
$data = session('buy_post_data');
if(empty($data))
{
$this->assign('msg', '商品信息为空');
return $this->fetch('public/tips_error');
}
// 参数
$params = array_merge(input(), $data);
$params['user'] = $this->user;
$ret = BuyService::BuyTypeGoodsList($params);
@ -69,13 +84,24 @@ class Buy extends Common
// 支付方式
$this->assign('payment_list', PaymentService::BuyPaymentList(['is_enable'=>1, 'is_open_user'=>1]));
// 地址选中处理
// 防止选中id不存在地址列表中
// 如果默认没有则表示不存在地址列表中
if(isset($params['address_id']) && empty($ret['data']['base']['address']))
{
unset($params['address_id']);
}
// 页面数据
$this->assign('base', $ret['data']['base']);
$this->assign('goods_list', $ret['data']['goods']);
$this->assign('extension_data', $ret['data']['extension_data']);
$this->assign('params', $params);
// 加载百度地图api
$this->assign('is_load_baidu_map_api', 1);
// 钩子
$this->PluginsHook($ret['data'], $params);
@ -214,7 +240,7 @@ class Buy extends Common
{
$params = $_POST;
$params['user'] = $this->user;
return BuyService::OrderAdd($params);
return BuyService::OrderInsert($params);
} else {
$this->assign('msg', '非法访问');
return $this->fetch('public/tips_error');

View File

@ -11,6 +11,7 @@
namespace app\index\controller;
use app\service\BuyService;
use app\service\SeoService;
/**
* 购物车
@ -55,6 +56,9 @@ class Cart extends Common
'ids' => empty($cart_list['data']) ? '' : implode(',', array_column($cart_list['data'], 'id')),
];
$this->assign('base', $base);
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('购物车', 1));
return $this->fetch();
}

View File

@ -213,6 +213,12 @@ class Common extends Controller
// 公共参数
$this->assign('params', $this->params);
// 站点类型
$this->assign('common_site_type', MyC('common_site_type', 0, true));
// 预约模式
$this->assign('common_order_is_booking', MyC('common_order_is_booking', 0, true));
// 商店信息
$this->assign('common_customer_store_tel', MyC('common_customer_store_tel'));
$this->assign('common_customer_store_email', MyC('common_customer_store_email'));
@ -223,7 +229,7 @@ class Common extends Controller
$default_theme = strtolower(MyC('common_default_theme', 'default', true));
$this->assign('default_theme', $default_theme);
// 当前操作名称, 兼容插件模块名称
// 当前操作名称, 兼容插件模块名称
$module_name = strtolower(request()->module());
$controller_name = strtolower(request()->controller());
$action_name = strtolower(request()->action());
@ -305,6 +311,9 @@ class Common extends Controller
$this->assign('home_site_icp', MyC('home_site_icp'));
$this->assign('home_site_security_record_name', MyC('home_site_security_record_name'));
$this->assign('home_site_security_record_url', MyC('home_site_security_record_url'));
// 默认不加载百度地图api
$this->assign('is_load_baidu_map_api', 0);
}
/**
@ -354,9 +363,9 @@ class Common extends Controller
// 是否ajax请求
if(IS_AJAX)
{
die(json_encode(DataReturn(MyC('home_site_close_reason', '网站维护中...'), -10000)));
exit(json_encode(DataReturn(MyC('home_site_close_reason', '网站维护中...'), -10000)));
} else {
die('<div style="text-align: center;margin-top: 15%;font-size: 18px;color: #f00;">'.MyC('home_site_close_reason', '网站维护中...', true).'</div>');
exit('<div style="text-align: center;margin-top: 15%;font-size: 18px;color: #f00;">'.MyC('home_site_close_reason', '网站维护中...', true).'</div>');
}
}
}

View File

@ -129,6 +129,12 @@ class Goods extends Common
$like_goods = GoodsService::GoodsList($params);
$this->assign('detail_like_goods', $like_goods['data']);
// 站点类型 - 展示型模式操作名称
$this->assign('common_is_exhibition_mode_btn_text', MyC('common_is_exhibition_mode_btn_text', '立即咨询', true));
// 是否商品详情页展示相册
$this->assign('common_is_goods_detail_show_photo', MyC('common_is_goods_detail_show_photo', 0, true));
return $this->fetch();
}
}
@ -244,6 +250,16 @@ class Goods extends Common
'goods_id' => $goods_id,
'goods' => &$goods,
]));
// 商品页面基础信息购买小导航里面钩子
$hook_name = 'plugins_view_goods_detail_base_buy_nav_min_inside';
$this->assign($hook_name.'_data', Hook::listen($hook_name,
[
'hook_name' => $hook_name,
'is_backend' => false,
'goods_id' => $goods_id,
'goods' => &$goods,
]));
}
/**

View File

@ -10,6 +10,7 @@
// +----------------------------------------------------------------------
namespace app\index\controller;
use app\service\SeoService;
use app\service\MessageService;
/**
@ -92,6 +93,9 @@ class Message extends Common
// 是否已读
$this->assign('common_is_read_list', lang('common_is_read_list'));
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('我的消息', 1));
// 参数
$this->assign('params', $params);
return $this->fetch();

View File

@ -13,6 +13,8 @@ namespace app\index\controller;
use app\service\OrderService;
use app\service\PaymentService;
use app\service\GoodsCommentsService;
use app\service\ConfigService;
use app\service\SeoService;
/**
* 订单管理
@ -96,6 +98,9 @@ class Order extends Common
// 评价状态
$this->assign('common_comments_status_list', lang('common_comments_status_list'));
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('我的订单', 1));
// 参数
$this->assign('params', $params);
return $this->fetch();
@ -131,8 +136,15 @@ class Order extends Common
// 发起支付 - 支付方式
$this->assign('buy_payment_list', PaymentService::BuyPaymentList(['is_enable'=>1, 'is_open_user'=>1]));
// 虚拟销售配置
$site_fictitious = ConfigService::SiteFictitiousConfig();
$this->assign('site_fictitious', $site_fictitious['data']);
$this->assign('data', $data['data'][0]);
// 加载百度地图api
$this->assign('is_load_baidu_map_api', 1);
// 参数
$this->assign('params', $params);
return $this->fetch();

View File

@ -11,6 +11,7 @@
namespace app\index\controller;
use app\service\OrderAftersaleService;
use app\service\SeoService;
/**
* 订单售后
@ -86,6 +87,9 @@ class Orderaftersale extends Common
$this->assign('common_order_aftersale_status_list', lang('common_order_aftersale_status_list'));
$this->assign('common_order_aftersale_refundment_list', lang('common_order_aftersale_refundment_list'));
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('订单售后', 1));
// 参数
$this->assign('params', $params);
return $this->fetch();

View File

@ -10,6 +10,7 @@
// +----------------------------------------------------------------------
namespace app\index\controller;
use app\service\SeoService;
use app\service\UserService;
use app\service\NavigationService;
@ -47,7 +48,12 @@ class Personal extends Common
*/
public function Index()
{
// 用户展示数据
$this->assign('personal_show_list', NavigationService::UsersPersonalShowFieldList());
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('个人资料', 1));
return $this->fetch();
}
@ -66,6 +72,9 @@ class Personal extends Common
// 数据
$this->assign('data', $this->user);
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('个人资料编辑', 1));
return $this->fetch();
}

View File

@ -81,75 +81,27 @@ class Plugins extends Common
$pluginscontrol = strtolower($params['pluginscontrol']);
$pluginsaction = strtolower($params['pluginsaction']);
// 应用校验
$ret = $this->PluginsCheck($pluginsname, $pluginscontrol, $pluginsaction);
if($ret['code'] != 0)
{
if(IS_AJAX)
{
return $ret;
} else {
$this->assign('msg', $ret['msg']);
return $this->fetch('public/tips_error');
}
}
// 视图初始化
$this->PluginsViewInit($pluginsname, $pluginscontrol, $pluginsaction);
// 编辑器文件存放地址定义
$this->assign('editor_path_type', 'plugins_'.$pluginsname);
// 应用控制器
$plugins = '\app\plugins\\'.$pluginsname.'\index\\'.ucfirst($pluginscontrol);
if(!class_exists($plugins))
// 调用
$ret = PluginsService::PluginsControlCall($pluginsname, $pluginscontrol, $pluginsaction, 'index', $params);
if($ret['code'] == 0)
{
if(IS_AJAX)
{
return DataReturn(ucfirst($pluginscontrol).' 应用控制器未定义', -1);
} else {
$this->assign('msg', ucfirst($pluginscontrol).' 应用控制器未定义');
return $this->fetch('public/tips_error');
}
return $ret['data'];
}
// 调用方法
$obj = new $plugins();
if(!method_exists($obj, $pluginsaction))
// 调用失败
if(IS_AJAX)
{
if(IS_AJAX)
{
return DataReturn(ucfirst($pluginsaction).' 应用方法未定义', -1);
} else {
$this->assign('msg', ucfirst($pluginsaction).' 应用方法未定义');
return $this->fetch('public/tips_error');
}
return $ret;
} else {
$this->assign('msg', $ret['msg']);
return $this->fetch('public/tips_error');
}
return $obj->$pluginsaction($params);
}
/**
* 应用校验
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-05-27T00:13:50+0800
* @param [string] $plugins_name [应用名称]
* @param [string] $plugins_control [控制器名称]
* @param [string] $plugins_action [方法]
*/
private function PluginsCheck($pluginsname, $pluginscontrol, $pluginsaction)
{
$ret = PluginsService::PluginsField($pluginsname, 'is_enable');
if($ret['data'] === null)
{
return DataReturn('应用未安装['.$pluginsname.']', -10);
}
if($ret['data'] != 1)
{
return DataReturn('应用未启用['.$pluginsname.']', -10);
}
return DataReturn('验证成功', 0);
}
/**

View File

@ -10,6 +10,7 @@
// +----------------------------------------------------------------------
namespace app\index\controller;
use app\service\SeoService;
use app\service\SafetyService;
use app\service\NavigationService;
@ -56,6 +57,10 @@ class Safety extends Common
'email' => $this->user['email_security'],
);
$this->assign('data', $data);
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('安全设置', 1));
return $this->fetch();
}
@ -68,6 +73,9 @@ class Safety extends Common
*/
public function LoginPwdInfo()
{
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('登录密码修改 - 安全设置', 1));
return $this->fetch();
}
@ -84,6 +92,10 @@ class Safety extends Common
{
return redirect(MyUrl('index/safety/newmobileinfo'));
}
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('手机号码修改 - 安全设置', 1));
return $this->fetch();
}
@ -100,6 +112,10 @@ class Safety extends Common
{
return $this->error('原帐号校验失败', MyUrl('index/safety/mobileinfo'));
}
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('手机号码修改 - 安全设置', 1));
return $this->fetch();
}
@ -116,6 +132,10 @@ class Safety extends Common
{
return redirect(MyUrl('index/safety/newemailinfo'));
}
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('电子邮箱修改 - 安全设置', 1));
return $this->fetch();
}
@ -132,6 +152,10 @@ class Safety extends Common
{
return $this->error('原帐号校验失败', MyUrl('index/safety/emailinfo'));
}
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('电子邮箱修改 - 安全设置', 1));
return $this->fetch();
}

View File

@ -17,6 +17,7 @@ use app\service\UserService;
use app\service\BuyService;
use app\service\SeoService;
use app\service\MessageService;
use app\service\NavigationService;
/**
* 用户
@ -77,18 +78,10 @@ class User extends Common
{
// 登录校验
$this->IsLogin();
// 订单总数
$where = ['user_id'=>$this->user['id'], 'is_delete_time'=>0, 'user_is_delete_time'=>0];
$this->assign('user_order_count', OrderService::OrderTotal($where));
// 商品收藏总数
$where = ['user_id'=>$this->user['id']];
$this->assign('user_goods_favor_count', GoodsService::GoodsFavorTotal($where));
// 商品浏览总数
$where = ['user_id'=>$this->user['id']];
$this->assign('user_goods_browse_count', GoodsService::GoodsBrowseTotal($where));
// 用户中心基础信息 mini 导航
$mini_navigation = NavigationService::UserCenterMiniNavigation(['user'=>$this->user]);
$this->assign('mini_navigation', $mini_navigation);
// 用户订单状态
$user_order_status = OrderService::OrderStatusStepTotal(['user_type'=>'user', 'user'=>$this->user, 'is_comments'=>1, 'is_aftersale'=>1]);
@ -97,7 +90,7 @@ class User extends Common
// 未读消息总数
$params = ['user'=>$this->user, 'is_more'=>1, 'is_read'=>0, 'user_type'=>'user'];
$common_message_total = MessageService::UserMessageTotal($params);
$this->assign('common_message_total', ($common_message_total > 99) ? '99+' : $common_message_total);
$this->assign('common_message_total', $common_message_total);
// 获取进行中的订单列表
$params = array_merge($_POST, $_GET);
@ -143,8 +136,8 @@ class User extends Common
$data = GoodsService::GoodsBrowseList($browse_params);
$this->assign('goods_browse_list', $data['data']);
// 用户中心顶部钩子
$this->assign('plugins_view_user_center_top_data', Hook::listen('plugins_view_user_center_top', ['hook_name'=>'plugins_view_user_center_top', 'is_backend'=>false, 'user'=>$this->user]));
// 钩子
$this->PluginsHook();
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('用户中心', 1));
@ -152,6 +145,35 @@ class User extends Common
return $this->fetch();
}
/**
* 钩子处理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-04-22
* @desc description
*/
private function PluginsHook()
{
// 顶部钩子
$this->assign('plugins_view_user_center_top_data', Hook::listen('plugins_view_user_center_top', ['hook_name'=>'plugins_view_user_center_top', 'is_backend'=>false, 'user'=>$this->user]));
// 基础信息底部钩子
$this->assign('plugins_view_user_base_bottom_data', Hook::listen('plugins_view_user_base_bottom', ['hook_name'=>'plugins_view_user_base_bottom', 'is_backend'=>false, 'user'=>$this->user]));
// 聚合内容顶部钩子
$this->assign('plugins_view_user_various_top_data', Hook::listen('plugins_view_user_various_top', ['hook_name'=>'plugins_view_user_various_top', 'is_backend'=>false, 'user'=>$this->user]));
// 聚合内容底部钩子
$this->assign('plugins_view_user_various_bottom_data', Hook::listen('plugins_view_user_various_bottom', ['hook_name'=>'plugins_view_user_various_bottom', 'is_backend'=>false, 'user'=>$this->user]));
// 聚合内容里面顶部钩子
$this->assign('plugins_view_user_various_inside_top_data', Hook::listen('plugins_view_user_various_inside_top', ['hook_name'=>'plugins_view_user_various_inside_top', 'is_backend'=>false, 'user'=>$this->user]));
// 聚合内容里面底部钩子
$this->assign('plugins_view_user_various_bottom_data', Hook::listen('plugins_view_user_various_bottom', ['hook_name'=>'plugins_view_user_various_bottom', 'is_backend'=>false, 'user'=>$this->user]));
}
/**
* [ForgetPwdInfo 密码找回]
* @author Devil

View File

@ -10,6 +10,7 @@
// +----------------------------------------------------------------------
namespace app\index\controller;
use app\service\SeoService;
use app\service\UserService;
/**
@ -46,8 +47,13 @@ class UserAddress extends Common
*/
public function Index()
{
// 用户地址列表
$data = UserService::UserAddressList(['user'=>$this->user]);
$this->assign('user_address_list', $data['data']);
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('我的地址', 1));
return $this->fetch();
}

View File

@ -11,6 +11,7 @@
namespace app\index\controller;
use app\service\GoodsService;
use app\service\SeoService;
/**
* 用户收藏
@ -80,6 +81,9 @@ class UserFavor extends Common
$data = GoodsService::GoodsFavorList($data_params);
$this->assign('data_list', $data['data']);
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('我的收藏', 1));
// 参数
$this->assign('params', $params);
return $this->fetch();

View File

@ -10,6 +10,7 @@
// +----------------------------------------------------------------------
namespace app\index\controller;
use app\service\SeoService;
use app\service\GoodsService;
/**
@ -81,6 +82,9 @@ class UserGoodsBrowse extends Common
$this->assign('data_list', $data['data']);
$this->assign('ids', empty($data['data']) ? '' : implode(',', array_column($data['data'], 'id')));
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('我的足迹', 1));
// 参数
$this->assign('params', $params);
return $this->fetch();

View File

@ -11,6 +11,7 @@
namespace app\index\controller;
use app\service\IntegralService;
use app\service\SeoService;
/**
* 用户积分管理
@ -83,6 +84,9 @@ class UserIntegral extends Common
// 操作类型
$this->assign('common_integral_log_type_list', lang('common_integral_log_type_list'));
// 浏览器名称
$this->assign('home_seo_site_title', SeoService::BrowserSeoTitle('我的积分', 1));
// 参数
$this->assign('params', $params);
return $this->fetch();

View File

@ -43,59 +43,171 @@
{{/foreach}}
{{/if}}
<!-- 地址 -->
<div class="address">
<div class="control">
<h3>确认收货地址</h3>
<!-- 销售+自提 -->
{{if $common_site_type eq 4}}
<div data-am-widget="tabs" class="am-tabs am-tabs-d2 buy-header-nav">
<ul class="am-tabs-nav am-cf">
<li {{if !isset($params['site_model']) or (isset($params['site_model']) and $params.site_model eq 0)}}class="am-active"{{/if}}><a href="javascript:;" data-value="0">快递邮寄</a></li>
<li {{if isset($params['site_model']) and $params.site_model eq 2}}class="am-active"{{/if}}><a href="javascript:;" data-value="2">自提点取货</a></li>
</ul>
</div>
{{/if}}
<!-- 销售型 - 用户地址 -->
{{if $common_site_type eq 0 or ($common_site_type eq 4 and (!isset($params['site_model']) or isset($params['site_model']) and $params.site_model eq 0))}}
<div class="address user-address-container">
<div class="control">
<h3>
<span>确认收货地址</span>
<button type="button" class="am-close am-fr mobile-address-close-submit">&times;</button>
</h3>
{{if !empty($user_address_list)}}
<button class="am-btn am-btn-primary am-btn-xs address-submit-save" type="button" data-url="{{:MyUrl('index/useraddress/saveinfo')}}" data-popup-title="新增地址">使用新地址</button>
{{/if}}
</div>
{{if !empty($user_address_list)}}
<button class="am-btn am-btn-primary am-btn-xs address-submit-save" type="button" data-url="{{:MyUrl('index/useraddress/saveinfo')}}" data-popup-title="新增地址">使用新地址</button>
<ul class="address-list">
{{foreach $user_address_list as $address}}
<li class="{{if (isset($params['address_id']) and $params['address_id'] eq $address['id']) or (!isset($params['address_id']) and isset($address['is_default']) and $address['is_default'] eq 1) or (count($user_address_list) eq 1)}}address-default{{/if}}" id="data-list-{{$address.id}}" data-value="{{$address.id}}">
<div class="address-left">
<div class="user-base">
{{if !empty($address.alias)}}
<span class="am-badge am-badge-danger am-radius">{{$address.alias}}</span>
{{/if}}
{{if isset($address['is_default']) and $address['is_default'] eq 1}}
<span class="am-badge am-badge-success am-radius">默认</span>
{{/if}}
<span class="address-detail">
<span class="user">{{$address.name}}</span>
<span class="phone">{{$address.tel}}</span>
</span>
</div>
<div class="region">
<span class="province">{{$address.province_name}}</span>
<span class="city">{{$address.city_name}}</span>
<span class="dist">{{$address.county_name}}</span>
<span class="street">{{$address.address}}</span>
</div>
</div>
<div class="address-right">
<span class="am-icon-angle-right am-icon-md"></span>
</div>
<div class="address-operation-btn">
<a href="javascript:;" class="am-icon-check-circle-o address-default-submit" data-url="{{:MyUrl('index/useraddress/setdefault')}}" data-id="{{$address.id}}" data-view="reload"> 设为默认</a>
<span class="cut">|</span>
<a href="javascript:;" class="am-icon-edit address-submit-save" data-url="{{:MyUrl('index/useraddress/saveinfo', ['id'=>$address['id']])}}" data-popup-title="编辑地址"> 编辑</a>
<span class="cut">|</span>
<a href="javascript:;" class="am-icon-trash-o address-submit-delete" data-url="{{:MyUrl('index/useraddress/delete')}}" data-id="{{$address.id}}"> 删除</a>
</div>
</li>
{{/foreach}}
</ul>
{{else /}}
<div class="table-no">
<i class="am-icon-warning"></i>
<span>没有地址</span>
<button class="am-btn am-btn-secondary am-btn-xs am-margin-left-sm address-submit-save" type="button" data-url="{{:MyUrl('index/useraddress/saveinfo')}}" data-popup-title="新增地址">使用新地址</button>
</div>
{{/if}}
</div>
{{if !empty($user_address_list)}}
<ul class="address-list">
{{foreach $user_address_list as $address}}
<li class="{{if (isset($params['address_id']) and $params['address_id'] eq $address['id']) or (!isset($params['address_id']) and isset($address['is_default']) and $address['is_default'] eq 1) or (count($user_address_list) eq 1)}}address-default{{/if}}" id="data-list-{{$address.id}}" data-value="{{$address.id}}">
<div class="address-left">
<div class="user-base">
{{if !empty($address.alias)}}
<span class="am-badge am-badge-danger am-radius">{{$address.alias}}</span>
{{/if}}
{{if isset($address['is_default']) and $address['is_default'] eq 1}}
<span class="am-badge am-badge-success am-radius">默认</span>
{{/if}}
<span class="address-detail">
<span class="user">{{$address.name}}</span>
<span class="phone">{{$address.tel}}</span>
</span>
{{/if}}
<!-- 自提点 - 自提地址 -->
{{if $common_site_type eq 2 or ($common_site_type eq 4 and isset($params['site_model']) and $params.site_model eq 2)}}
<div class="address extraction-address-container">
<div class="control">
<h3>确认自提点地址</h3>
{{if !empty($base['address'])}}
<button type="button" class="am-btn am-btn-default am-btn-secondary am-radius" data-am-modal="{target: '#extraction-address-popup'}">选择取货地址</button>
{{/if}}
</div>
{{if empty($base['extraction_address'])}}
<p class="am-text-danger am-text-center am-margin-top-lg">请联系管理员配置自提点地址</p>
{{else /}}
<!-- 选中地址 -->
{{if !empty($base['address'])}}
<div class="am-panel am-panel-default extraction-default">
<div class="am-panel-bd extraction-address-item am-cf am-vertical-align">
<div class="first-icon am-fl am-vertical-align-middle">
<i class="am-icon-map-marker"></i>
</div>
<div class="region">
<span class="province">{{$address.province_name}}</span>
<span class="city">{{$address.city_name}}</span>
<span class="dist">{{$address.county_name}}</span>
<span class="street">{{$address.address}}</span>
<div class="am-fl am-vertical-align-middle">
<p>
{{if !empty($base['address']['alias'])}}
<span class="am-badge am-badge-secondary am-radius am-margin-right-xs">{{$base.address.alias}}</span>
{{/if}}
<span>{{$base.address.name}}</span>
<span>{{$base.address.tel}}</span>
</p>
<p class="address-detail">
<span>{{$base.address.province_name}}</span>
<span>{{$base.address.city_name}}</span>
<span>{{$base.address.county_name}}</span>
<span>{{$base.address.address}}</span>
</p>
</div>
<div class="address-right">
<span class="am-icon-angle-right am-icon-md"></span>
</div>
</div>
<div class="address-right">
<span class="am-icon-angle-right am-icon-md"></span>
</div>
{{else /}}
<div class="table-no">
<i class="am-icon-warning"></i>
<span>没有地址</span>
<button type="button" class="am-btn am-btn-default am-btn-secondary am-radius am-margin-left-sm" data-am-modal="{target: '#extraction-address-popup'}">选择取货地址</button>
</div>
{{/if}}
<!-- 自提地址选择弹层 -->
<div class="am-popup" id="extraction-address-popup">
<div class="am-popup-inner">
<div class="am-popup-hd">
<h4 class="am-popup-title">自提点选择</h4>
<span class="am-close" data-am-modal-close>&times;</span>
</div>
<div class="am-popup-bd">
<ul class="am-list">
{{foreach $base.extraction_address as $key=>$address}}
<li class="extraction-address-item" data-value="{{$key}}">
<p>
{{if !empty($address['alias'])}}
<span class="am-badge am-badge-secondary am-radius am-margin-right-xs">{{$address.alias}}</span>
{{/if}}
<span>{{$address.name}}</span>
<span>{{$address.tel}}</span>
</p>
<p class="address-detail">
<span>{{$address.province_name}}</span>
<span>{{$address.city_name}}</span>
<span>{{$address.county_name}}</span>
<span>{{$address.address}}</span>
{{if isset($address['lng']) and $address['lng'] gt 0 and isset($address['lat']) and $address['lat'] gt 0}}
<a href="javascript:;" class="am-badge am-radius extraction-address-map-submit am-icon-map-marker am-margin-left-sm" data-lng="{{$address.lng}}" data-lat="{{$address.lat}}"> 查看地图</a>
{{/if}}
</p>
{{if (isset($params['address_id']) and $params['address_id'] eq $key) or (!empty($base['address']) and $base.address.id eq $key)}}
<button type="button" class="am-btn am-btn-default am-radius" disabled>已选</button>
{{else /}}
<button type="button" class="am-btn am-btn-default am-radius" data-value="{{$key}}">选择</button>
{{/if}}
</li>
{{/foreach}}
</ul>
<!-- 地图 -->
<div class="extraction-address-map-container">
<div class="am-text-center map-inner">
<span class="map-title">地图位置</span>
<button type="button" class="am-close am-fr am-close-spin">&times;</button>
</div>
<div id="map"></div>
</div>
<div class="address-operation-btn">
<a href="javascript:;" class="am-icon-check-circle-o address-default-submit" data-url="{{:MyUrl('index/useraddress/setdefault')}}" data-id="{{$address.id}}" data-view="reload"> 设为默认</a>
<span class="cut">|</span>
<a href="javascript:;" class="am-icon-edit address-submit-save" data-url="{{:MyUrl('index/useraddress/saveinfo', ['id'=>$address['id']])}}" data-popup-title="编辑地址"> 编辑</a>
<span class="cut">|</span>
<a href="javascript:;" class="am-icon-trash-o address-submit-delete" data-url="{{:MyUrl('index/useraddress/delete')}}" data-id="{{$address.id}}"> 删除</a>
</div>
</li>
{{/foreach}}
</ul>
{{/if}}
{{if empty($user_address_list)}}
<div class="table-no">
<i class="am-icon-warning"></i>
没有地址
<button class="am-btn am-btn-secondary am-btn-xs address-submit-save" type="button" data-url="{{:MyUrl('index/useraddress/saveinfo')}}" data-popup-title="新增地址">使用新地址</button></div>
{{/if}}
</div>
</div>
</div>
</div>
{{/if}}
</div>
{{/if}}
<!-- 订单确认页面地址底部钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
@ -112,25 +224,27 @@
{{/if}}
<!-- 支付方式 -->
<div class="buy-items business-item payment" data-field="payment_id">
<h3>选择支付</h3>
{{if !empty($payment_list)}}
<ul class="payment-list">
{{foreach $payment_list as $payment}}
<li data-value="{{$payment.id}}" class="{{if isset($params['payment_id']) and $params['payment_id'] eq $payment['id']}}selected{{/if}}">
{{if !empty($payment.logo)}}
<img src="{{$payment.logo}}" />
{{/if}}
<span>{{$payment.name}}</span>
<i class="icon-active"></i>
</li>
{{/foreach}}
</ul>
{{/if}}
{{if empty($payment_list)}}
<div class="table-no"><i class="am-icon-warning"></i> 没有支付方式</div>
{{/if}}
</div>
{{if $common_order_is_booking neq 1}}
<div class="buy-items business-item payment" data-field="payment_id">
<h3>选择支付</h3>
{{if !empty($payment_list)}}
<ul class="payment-list">
{{foreach $payment_list as $payment}}
<li data-value="{{$payment.id}}" class="{{if isset($params['payment_id']) and $params['payment_id'] eq $payment['id']}}selected{{/if}}">
{{if !empty($payment.logo)}}
<img src="{{$payment.logo}}" />
{{/if}}
<span>{{$payment.name}}</span>
<i class="icon-active"></i>
</li>
{{/foreach}}
</ul>
{{/if}}
{{if empty($payment_list)}}
<div class="table-no"><i class="am-icon-warning"></i> 没有支付方式</div>
{{/if}}
</div>
{{/if}}
<!-- 订单确认页面支付方式底部钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
@ -292,45 +406,49 @@
</span>
</div>
<div class="pay-address">
<div class="buy-footer-address">
<span class="buy-line-title buy-line-title-type">寄送至:</span>
<span class="buy-address-detail">
{{if !empty($base['address'])}}
{{$base.address.province_name}} {{$base.address.city_name}} {{$base.address.county_name}} {{$base.address.address}}
{{else /}}
...
{{/if}}
</span>
<!-- 销售模式+自提模式 显示地址 -->
{{if in_array($common_site_type, [0,2])}}
<div class="pay-address">
<div class="buy-footer-address">
<span class="buy-line-title buy-line-title-type">地址:</span>
<span class="buy-address-detail">
{{if !empty($base['address'])}}
{{$base.address.province_name}} {{$base.address.city_name}} {{$base.address.county_name}} {{$base.address.address}}
{{else /}}
...
{{/if}}
</span>
</div>
<div class="buy-footer-address">
<span class="buy-line-title">联系人:</span>
<span class="buy-user">
{{if !empty($base['address'])}}
{{$base.address.name}}
{{else /}}
...
{{/if}}
</span>
<span class="buy-phone">
{{if !empty($base['address'])}}
{{$base.address.tel}}
{{else /}}
...
{{/if}}
</span>
</div>
</div>
<div class="buy-footer-address">
<span class="buy-line-title">收货人:</span>
<span class="buy-user">
{{if !empty($base['address'])}}
{{$base.address.name}}
{{else /}}
...
{{/if}}
</span>
<span class="buy-phone">
{{if !empty($base['address'])}}
{{$base.address.tel}}
{{else /}}
...
{{/if}}
</span>
</div>
</div>
{{/if}}
</div>
<form class="am-form form-validation nav-buy" action="{{:MyUrl('index/buy/add')}}" method="post" class="nav-buy" request-type="ajax-fun" request-value="BuySubmitBack">
<form class="am-form form-validation nav-buy" action="{{:MyUrl('index/buy/add')}}" method="post" class="nav-buy" request-type="ajax-fun" request-value="BuySubmitBack" data-site-type="{{$common_site_type}}" data-is-booking="{{$common_order_is_booking}}">
<input type="hidden" name="goods_id" value="{{if isset($params['goods_id'])}}{{$params.goods_id}}{{else /}}0{{/if}}" />
<input type="hidden" name="buy_type" value="{{if isset($params['buy_type'])}}{{$params.buy_type}}{{else /}}goods{{/if}}" />
<input type="hidden" name="stock" value="{{if isset($params['stock'])}}{{$params.stock}}{{else /}}1{{/if}}" />
<input type="hidden" name="spec" value='{{if isset($params['spec'])}}{{$params.spec}}{{/if}}' />
<input type="hidden" name="ids" value="{{if isset($params['ids'])}}{{$params.ids}}{{/if}}" />
<input type="hidden" name="address_id" value="0" />
<input type="hidden" name="payment_id" value="0" />
<input type="hidden" name="address_id" value="{{if isset($base['address']) and isset($base['address']['id'])}}{{$base.address.id}}{{else /}}{{if isset($params['address_id'])}}{{$params.address_id}}{{else /}}-1{{/if}}{{/if}}" />
<input type="hidden" name="payment_id" value="{{if isset($params['payment_id'])}}{{$params.payment_id}}{{else /}}0{{/if}}" />
<input type="hidden" name="user_note" value="" />
<input type="hidden" name="site_model" value="{{if isset($params['site_model'])}}{{$params.site_model}}{{else /}}0{{/if}}" />
<!-- 订单确认页面提交订单表单内部钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">

View File

@ -17,39 +17,61 @@
{{include file="public/goods_category" /}}
<!-- content -->
<div class="am-container category-list">
<div class="am-container category-list-container">
{{if !empty($goods_category_list)}}
<section data-am-widget="accordion" class="am-accordion am-accordion-gapped" data-am-accordion='{}'>
{{foreach $goods_category_list as $v}}
<dl class="am-accordion-item am-active">
<dt class="am-accordion-title">
<a href="{{:MyUrl('index/search/index', ['category_id'=>$v['id']])}}" title="{{$v.name}}">{{$v.name}}</a>
</dt>
<dd class="am-accordion-bd am-collapse am-in">
<div class="am-accordion-content">
{{if !empty($v['items'])}}
{{foreach $v.items as $vs}}
<div class="title">
<a href="{{:MyUrl('index/search/index', ['category_id'=>$vs['id']])}}" title="{{$vs.name}}">{{$vs.name}}</a>
</div>
{{if !empty($vs['items'])}}
<ul>
{{foreach $vs.items as $keyss=>$vss}}
<li class="am-fl">
<a {{if $keyss eq 0}}class="first"{{/if}} href="{{:MyUrl('index/search/index', ['category_id'=>$vss['id']])}}" title="{{$vss.name}}">{{$vss.name}}</a>
</li>
{{/foreach}}
</ul>
{{/if}}
{{/foreach}}
{{/if}}
<ul class="category-nav am-fl">
{{foreach $goods_category_list as $k=>$v}}
<li class="am-text-break am-padding-horizontal-sm {{if $k eq 0}} active{{/if}}" data-url="{{:MyUrl('index/search/index', ['category_id'=>$v['id']])}}">{{$v.name}}</li>
{{/foreach}}
</ul>
{{foreach $goods_category_list as $k=>$v}}
<div class="category-content category-content-{{$k}} am-fr am-padding-vertical-xs {{if $k neq 0}} none{{/if}}">
{{if !empty($v['items'])}}
{{foreach $v.items as $vs}}
<div class="category-item am-padding-sm">
<div class="title">
<div class="title-value am-fl">
{{if !empty($vs['icon'])}}
<a href="{{:MyUrl('index/search/index', ['category_id'=>$vs['id']])}}" title="{{$vs.name}}" class="am-block">
<img src="{{$vs.icon}}" alt="{{$vs.name}}" class="category-icon am-block" />
</a>
{{/if}}
<p class="am-margin-top-xs">
<a href="{{:MyUrl('index/search/index', ['category_id'=>$vs['id']])}}" title="{{$vs.name}}">{{$vs.name}}</a>
</p>
</div>
</div>
</dd>
</dl>
{{/foreach}}
</section>
{{if !empty($vs['items'])}}
<ul class="am-margin-top-xs">
{{foreach $vs.items as $kss=>$vss}}
<li class="am-fl am-text-center">
{{if !empty($vss['icon'])}}
<a href="{{:MyUrl('index/search/index', ['category_id'=>$vss['id']])}}" title="{{$vss.name}}" class="am-block am-margin-top-xs">
<img src="{{$vss.icon}}" alt="{{$vss.name}}" class="category-icon am-block" />
</a>
{{/if}}
<p class="am-margin-top-xs">
<a href="{{:MyUrl('index/search/index', ['category_id'=>$vss['id']])}}" title="{{$vss.name}}" class="am-block">{{$vss.name}}</a>
</p>
</li>
{{/foreach}}
</ul>
{{/if}}
</div>
{{/foreach}}
{{else /}}
<div class="table-no">
<i class="am-icon-warning"></i>
<span>没有分类数据</span>
<p class="am-margin-top-lg am-text-center">
<a href="{{:MyUrl('index/search/index', ['category_id'=>$v['id']])}}" class="am-text-secondary" title="查看分类下商品">查看分类下商品 >></a>
</p>
</div>
{{/if}}
</div>
{{/foreach}}
{{else /}}
<div class="table-no"><i class="am-icon-warning"></i> 没有相关数据</div>
<div class="table-no"><i class="am-icon-warning"></i> 没有分类数据</div>
{{/if}}
</div>

View File

@ -1,6 +1,6 @@
{
"name":"默认模板",
"ver":"1.7.0",
"name":"默认主题",
"ver":"1.8.0",
"author":"Devil",
"home":"http://shopxo.net/"
"home":"https://shopxo.net/"
}

View File

@ -312,43 +312,78 @@
</div>
<!-- 购买导航 -->
<div class="buy-nav">
<div class="buy-nav {{if $common_site_type eq 1}}exhibition-nav{{/if}}">
{{if !empty($goods.is_shelves)}}
{{if $goods['inventory'] gt 0}}
<div class="buy-nav-opt">
<a href="{{$Think.__MY_URL__}}">
<span class="am-icon-home am-icon-fw"> 首页</span>
<span class="nav-icon nav-icon-home">
<i class="am-icon-home am-icon-fw"></i>
<em>首页</em>
</span>
</a>
{{if isset($goods['is_favor']) and $goods['is_favor'] eq 1}}
<span class="am-icon-heart am-icon-fw login-event favor-submit text-active" data-ajax-url="{{:MyUrl('index/goods/favor')}}">
<span class="nav-icon login-event favor-submit text-active" data-ajax-url="{{:MyUrl('index/goods/favor')}}">
<i class="am-icon-heart am-icon-fw"></i>
<em class="goods-favor-text">已收藏</em>
<em class="goods-favor-count">({{$goods.favor_count}})</em>
</span>
{{else /}}
<span class="am-icon-heart am-icon-fw favor-submit login-event" data-ajax-url="{{:MyUrl('index/goods/favor')}}"> <em class="goods-favor-text">收藏</em>
<span class="nav-icon favor-submit login-event" data-ajax-url="{{:MyUrl('index/goods/favor')}}">
<i class="am-icon-heart am-icon-fw"></i>
<em class="goods-favor-text">收藏</em>
<em class="goods-favor-count">({{$goods.favor_count}})</em>
</span>
{{/if}}
</div>
<div class="submit">
<div class="clearfix tb-btn tb-btn-buy buy-event login-event buy-submit" data-type="buy">
<button title="点此按钮到下一步确认购买信息" href="javascript:;" type="button">立即购买</button>
</div>
</div>
<div class="submit">
<div class="clearfix tb-btn tb-btn-basket buy-event login-event cart-submit" data-type="cart" data-ajax-url="{{:MyUrl('index/Cart/Save')}}">
<button title="加入购物车" href="javascript:;" type="button"><i></i>加入购物车</button>
</div>
<!-- 商品页面基础信息购买小导航里面钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_view_goods_detail_base_buy_nav_min_inside</span>
</div>
{{/if}}
{{if !empty($plugins_view_goods_detail_base_buy_nav_min_inside_data) and is_array($plugins_view_goods_detail_base_buy_nav_min_inside_data)}}
{{foreach $plugins_view_goods_detail_base_buy_nav_min_inside_data as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
</div>
<!-- 购买表单 -->
<form action="{{:MyUrl('index/buy/index')}}" method="post" class="buy-form">
<input type="hidden" name="goods_id" value="{{$goods.id}}" />
<input type="hidden" name="buy_type" value="goods" />
<input type="hidden" name="stock" value="1" />
<input type="hidden" name="spec" value="" />
<button type="submit"></button>
</form>
<!-- 站点模式 1 展示型 -->
{{if $common_site_type eq 1}}
<div class="submit">
<div class="clearfix tb-btn tb-btn-basket" data-type="cart" data-ajax-url="{{:MyUrl('index/Cart/Save')}}">
<a href="{{if empty($common_customer_store_tel)}}javascript:;{{else /}}tel:{{$common_customer_store_tel}}{{/if}}">
<button title="{{$common_is_exhibition_mode_btn_text}}" href="javascript:;" type="button"><i class="am-icon-phone"></i> {{$common_is_exhibition_mode_btn_text}}</button>
</a>
</div>
</div>
<!-- 销售型,自提点,虚拟销售 -->
{{else /}}
<div class="submit">
<div class="clearfix tb-btn tb-btn-buy buy-event login-event buy-submit" data-type="buy">
<button title="点此按钮到下一步确认购买信息" href="javascript:;" type="button">{{if $common_order_is_booking eq 1}}立即预约{{else /}}立即购买{{/if}}</button>
</div>
</div>
<div class="submit">
<div class="clearfix tb-btn tb-btn-basket buy-event login-event cart-submit" data-type="cart" data-ajax-url="{{:MyUrl('index/Cart/Save')}}">
<button title="加入购物车" href="javascript:;" type="button"><i></i>加入购物车</button>
</div>
</div>
<!-- 购买表单 -->
<form action="{{:MyUrl('index/buy/index')}}" method="post" class="buy-form">
<input type="hidden" name="goods_id" value="{{$goods.id}}" />
<input type="hidden" name="buy_type" value="goods" />
<input type="hidden" name="stock" value="1" />
<input type="hidden" name="spec" value="" />
<button type="submit"></button>
</form>
{{/if}}
{{else /}}
<p class="goods-not-buy-tips">商品卖光了</p>
{{/if}}
@ -405,7 +440,7 @@
<img alt="{{$v.title}}" src="{{$v.images}}">
</a>
</div>
<div class="p-name">
<div class="p-name am-text-truncate-2 am-margin-vertical-xs ">
<a href="{{:$v['goods_url']}}" {{if !empty($v.title_color)}}style="color:{{$v.title_color}};"{{/if}}>{{$v.title}}</a>
</div>
<div class="p-price"><strong>¥{{$v.price}}</strong></div>
@ -471,12 +506,24 @@
</div>
{{/if}}
<!-- 详情内容 -->
<div class="details">
<div class="spacing-nav-title">
<span class="line"></span>
<span class="text-wrapper">商品细节</span>
</div>
<div class="detail-content">{{$goods.content_web|raw}}</div>
<div class="detail-content">
{{if isset($common_is_goods_detail_show_photo) and $common_is_goods_detail_show_photo eq 1 and !empty($goods.photo)}}
<div class="content-photo">
{{foreach $goods.photo as $photo}}
<li>
<img src="{{$photo.images}}" title="{{$goods.title}}" />
</li>
{{/foreach}}
</div>
{{/if}}
<div class="content-web">{{$goods.content_web|raw}}</div>
</div>
</div>
</div>
@ -534,7 +581,7 @@
<img alt="{{$v.title}}" src="{{$v.home_recommended_images}}" />
</a>
<a href="{{:$v['goods_url']}}">
<p class="am-text-truncate" {{if !empty($v.title_color)}}style="color:{{$v.title_color}};"{{/if}}>{{$v.title}}</p>
<p class="am-text-truncate-2 am-margin-bottom-xs" {{if !empty($v.title_color)}}style="color:{{$v.title_color}};"{{/if}}>{{$v.title}}</p>
</a>
<p class="price fl">
<strong>¥{{$v.price}}</strong>

View File

@ -254,7 +254,7 @@
<img src="{{$goods.home_recommended_images}}" alt="{{$goods.title}}" class="goods-images" />
</a>
<div class="outer-con">
<div class="goods-title am-text-truncate">
<div class="goods-title am-text-truncate-2 am-margin-bottom-xs">
<a href="{{$goods['goods_url']}}" target="_blank" {{if !empty($goods.title_color)}}style="color:{{$goods.title_color}};"{{/if}}>{{$goods.title}}</a>
</div>

View File

@ -94,8 +94,10 @@
<div class="am-panel-hd">订单信息</div>
<div class="am-panel-bd">
<div class="items am-cf">
<div class="items-title am-fl">收货地址</div>
<div class="items-detail am-fl">{{$data.receive_name}}, {{$data.receive_tel}}, {{$data.receive_province_name}} {{$data.receive_city_name}} {{$data.receive_county_name}} {{$data.receive_address}}</div>
<div class="items-title am-fl">订单模式</div>
<div class="items-detail am-fl">
<span class="am-badge am-badge-secondary am-radius">{{$data.order_model_name}}</span>
</div>
</div>
<div class="items am-cf">
<div class="items-title am-fl">订单编号:</div>
@ -218,21 +220,28 @@
<button type="button" class="am-btn am-btn-danger am-btn-xs am-radius am-icon-trash-o submit-delete" data-url="{{:MyUrl('index/order/delete')}}" data-id="{{$data.id}}" data-view="jump" data-value="{{:MyUrl('index/order/index')}}"> 删除</button>
{{/if}}
<!-- 钩子订单操作 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
<!-- 订单详情操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_service_order_handle_operation_html</span>
<span>plugins_view_index_order_detail_operation</span>
</div>
{{/if}}
{{if !empty($data['plugins_service_order_handle_operation_html']) and is_array($data['plugins_service_order_handle_operation_html'])}}
{{foreach $data.plugins_service_order_handle_operation_html as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
{{php}}
$hook_name = 'plugins_view_index_order_detail_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>false, 'id'=>$data['id'], 'data'=>$data]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</div>
{{if in_array($data['status'], [3,4])}}
{{if $data['order_model'] eq 0 and in_array($data['status'], [3,4])}}
<div class="logistics">
<div class="items am-cf">
<div class="items-title am-fl">快递公司:</div>
@ -248,9 +257,87 @@
{{/if}}
</div>
{{/if}}
<!-- 自提模式下 - 取货码 -->
{{if $data['order_model'] eq 2 and in_array($data['status'], [2,3])}}
<hr data-am-widget="divider" class="am-divider am-divider-dashed" />
<div class="extraction-take-container">
<p>
<span>取货码:</span>
{{if empty($data['extraction_data']['code'])}}
<span class="am-text-danger">取货码不存在、请联系管理员</span>
{{else /}}
<span class="am-badge am-badge-success am-radius">{{$data.extraction_data.code}}</span>
{{/if}}
</p>
{{if !empty($data['extraction_data']['images'])}}
<p class="am-margin-top-xs">
<img class="qrcode-images am-img-thumbnail" src="{{$data.extraction_data.images}}" alt="取货码" />
</p>
{{/if}}
</div>
{{/if}}
</div>
</div>
<!-- 地址 -->
{{if in_array($data['order_model'], [0, 2])}}
<div class="am-panel am-panel-default business-panel">
<div class="am-panel-hd">{{if $data.order_model eq 2}}取货地址{{else /}}收货地址{{/if}}</div>
<div class="am-panel-bd">
<span>{{$data.address_data.name}}, {{$data.address_data.tel}}, {{$data.address_data.province_name}} {{$data.address_data.city_name}} {{$data.address_data.county_name}} {{$data.address_data.address}}</span>
{{if $data.order_model eq 2 and $data.address_data.lng gt 0 and $data.address_data.lat gt 0}}
<button type="button" class="am-btn am-btn-success am-radius am-icon-map-marker extraction-receive-map-submit" data-lng="{{$data.address_data.lng}}" data-lat="{{$data.address_data.lat}}"> 查看位置</button>
<div class="am-popup" id="popup-extraction-receive-map">
<div class="am-popup-inner">
<div class="am-popup-hd">
<h4 class="am-popup-title">取货位置</h4>
<span data-am-modal-close class="am-close">&times;</span>
</div>
<div class="am-popup-bd">
<div id="map" data-level="17"></div>
</div>
</div>
</div>
{{/if}}
</div>
</div>
{{/if}}
<!-- 虚拟销售信息 -->
{{if $data['order_model'] eq 3 and $data['pay_status'] eq 1 and in_array($data['status'], [3,4])}}
<div class="am-panel am-panel-secondary business-panel fictitious-panel-container">
<div class="am-panel-hd">{{$site_fictitious.title}}</div>
<div class="am-panel-bd am-padding-horizontal-0 am-padding-top-xs am-padding-bottom-xs">
{{if !empty($site_fictitious['tips'])}}
<div class="am-alert am-alert-warning am-margin-top-xs am-margin-bottom-0 am-margin-horizontal-sm" data-am-alert>
{{$site_fictitious.tips|raw}}
</div>
{{/if}}
{{if !empty($data.items)}}
<ul class="am-list am-margin-bottom-0">
{{foreach $data.items as $goods}}
<li class="am-g am-list-item-desced am-list-item-thumbed am-list-item-thumb-left">
<div class="am-u-sm-2 am-u-md-1 am-list-thumb">
<img src="{{$goods.images}}" alt="{{$goods.title}}" class="am-img-thumbnail am-radius" />
</div>
<div class="am-u-sm-10 am-u-md-11 am-list-item-text">
{{if empty($goods['fictitious_goods_value'])}}
<span>未配置数据</span>
{{else /}}
{{$goods.fictitious_goods_value|raw}}
{{/if}}
</div>
</li>
{{/foreach}}
</ul>
{{else /}}
<div class="table-no"><i class="am-icon-warning"></i> 没有订单商品数据</div>
{{/if}}
</div>
</div>
{{/if}}
<!-- 商品列表 -->
{{if !empty($data.items)}}
<div class="order-goods">

View File

@ -25,7 +25,7 @@
<form class="am-form form-validation form-search" method="post" action="{{:MyUrl('index/order/index')}}" request-type="form">
<div class="thin">
<div class="am-input-group am-input-group-sm am-fl so">
<input type="text" autocomplete="off" name="keywords" class="am-radius" placeholder="订单号/收件信息" value="{{if !empty($params.keywords)}}{{$params.keywords}}{{/if}}" />
<input type="text" autocomplete="off" name="keywords" class="am-radius" placeholder="订单号" value="{{if !empty($params.keywords)}}{{$params.keywords}}{{/if}}" />
<span class="am-input-group-btn">
<button class="am-btn am-btn-default am-radius" type="submit" data-am-loading="{spinner:'circle-o-notch', loadingText:'搜索中...'}">搜索</button>
</span>
@ -234,19 +234,26 @@
<button type="button" class="am-btn am-btn-danger am-btn-xs am-radius am-icon-trash-o am-btn-block submit-delete" data-url="{{:MyUrl('index/order/delete')}}" data-id="{{$order.id}}" data-view="reload"> 删除</button>
{{/if}}
<!-- 钩子订单操作 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
<!-- 订单列表操作钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
<span>plugins_service_order_handle_operation_html</span>
<span>plugins_view_index_order_list_operation</span>
</div>
{{/if}}
{{if !empty($order['plugins_service_order_handle_operation_html']) and is_array($order['plugins_service_order_handle_operation_html'])}}
{{foreach $order.plugins_service_order_handle_operation_html as $hook}}
{{if is_string($hook) or is_int($hook)}}
{{$hook|raw}}
{{/if}}
{{/foreach}}
{{/if}}
{{php}}
$hook_name = 'plugins_view_index_order_list_operation';
$hook_data = Hook::listen($hook_name, ['hook_name'=>$hook_name, 'is_backend'=>false, 'id'=>$order['id'], 'data'=>$order]);
if(!empty($hook_data) && is_array($hook_data))
{
foreach($hook_data as $hook)
{
if(is_string($hook) || is_int($hook))
{
echo htmlspecialchars_decode($hook);
}
}
}
{{/php}}
</td>
{{/if}}
</tr>

View File

@ -57,6 +57,11 @@
<!-- 日期组件 -->
<script type='text/javascript' src="{{$Think.__MY_ROOT_PUBLIC__}}static/common/lib/My97DatePicker/WdatePicker.js"></script>
<!-- baidu map -->
{{if isset($is_load_baidu_map_api) and $is_load_baidu_map_api eq 1}}
<script type="text/javascript" src="{{$Think.__MY_HTTP__}}://api.map.baidu.com/api?v=2.0&ak={{:MyC('common_baidu_map_ak')}}"></script>
{{/if}}
<!-- 隐藏编辑器初始化 -->
<script type="text/javascript">
var upload_editor = UE.getEditor("upload-editor-view", {

View File

@ -1,21 +1,3 @@
{{if MyC('common_is_app_inside_close_header') neq 1 or !in_array(MiniAppEnv(), config('shopxo.mini_app_type_list'))}}
<!-- 友情链接 -->
{{if !empty($link_list)}}
<div class="friendship-list">
<div class="am-container">
<h2>友情链接</h2>
<ul>
{{foreach $link_list as $v}}
<li>
<a href="{{$v.url}}" {{if $v['is_new_window_open'] eq 1}} target="_blank"{{/if}} title="{{$v.describe}}">{{$v.name}}</a>
</li>
{{/foreach}}
</ul>
</div>
</div>
{{/if}}
{{/if}}
<!-- 底部导航上面钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_footer) or $is_footer eq 1)}}
<div class="plugins-tag">
@ -30,8 +12,7 @@
{{/foreach}}
{{/if}}
{{if MyC('common_is_app_inside_close_header') neq 1 or !in_array(MiniAppEnv(), config('shopxo.mini_app_type_list'))}}
{{if !IsMobile() or (IsMobile() and MyC('common_is_mobile_concise_model') neq 1)}}
<!-- 底部导航 -->
<footer data-am-widget="footer" class="am-footer am-footer-default" data-am-footer="{}">
<div class="am-container">
@ -88,6 +69,20 @@
<!-- 页脚信息 -->
<div class="am-footer-miscs">
<div class="am-container">
<!-- 友情链接 -->
{{if !empty($link_list) and $module_name.$controller_name.$action_name eq 'indexindexindex'}}
<div class="friendship-list am-hide-sm-only">
<ul class="am-cf am-margin-bottom-sm">
<li class="am-fl am-text-center title">友情链接</li>
{{foreach $link_list as $v}}
<li class="am-fl am-text-center">
<a href="{{$v.url}}" {{if $v['is_new_window_open'] eq 1}} target="_blank"{{/if}} title="{{$v.describe}}">{{$v.name}}</a>
</li>
{{/foreach}}
</ul>
</div>
{{/if}}
<p class="powered">
Powered by <a href="http://shopxo.net/" title="ShopXO电商系统" target="_blank">
<span class="b">Shop</span><span class="o">XO</span>
@ -113,6 +108,14 @@
</div>
</footer>
{{else /}}
<!-- 保留标签兼容mobile导航样式 -->
<footer class="am-footer"></footer>
<footer class="am-footer am-footer am-footer-default mobile-concise-model">
<!-- 页脚信息 -->
<div class="am-footer-miscs">
<p class="powered">
Powered by <a href="http://shopxo.net/" title="ShopXO电商系统" target="_blank">
<span class="b">Shop</span><span class="o">XO</span>
</a> {{$Think.APPLICATION_VERSION}}
</p>
</div>
</footer>
{{/if}}

View File

@ -67,7 +67,7 @@
{{/foreach}}
{{/if}}
</head>
<body {{if MyC('common_is_app_inside_close_header') eq 1 and in_array(MiniAppEnv(), config('shopxo.mini_app_type_list'))}}class="mini-app-env"{{/if}}>
<body {{if in_array(MiniAppEnv(), config('shopxo.mini_app_type_list'))}}class="mini-app-env"{{/if}}>
<!-- css钩子 -->
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true and (!isset($is_header) or $is_header eq 1)}}
<div class="plugins-tag">

View File

@ -1,81 +1,79 @@
{{if MyC('common_is_app_inside_close_header') neq 1 or !in_array(MiniAppEnv(), config('shopxo.mini_app_type_list'))}}
<header class="am-topbar shop-navigation">
<div class="am-container">
<button class="am-topbar-btn am-topbar-toggle am-btn am-btn-sm am-btn-default am-show-sm-only switch-submit" data-am-collapse="{target: '#doc-topbar-collapse'}"><span class="am-sr-only">导航切换</span> <span class="am-icon-bars"></span></button>
<header class="am-topbar shop-navigation">
<div class="am-container">
<button class="am-topbar-btn am-topbar-toggle am-btn am-btn-sm am-btn-default am-show-sm-only switch-submit" data-am-collapse="{target: '#doc-topbar-collapse'}"><span class="am-sr-only">导航切换</span> <span class="am-icon-bars"></span></button>
<h1 class="am-topbar-brand wap-logo am-show-sm-only">
<a href="{{$Think.__MY_URL__}}">
<img src="{{:AttachmentPathViewHandle(MyC('home_site_logo_wap'))}}" alt="{{:MyC('home_seo_site_title')}}" />
</a>
</h1>
<a href="{{:MyUrl('index/category/index')}}" class="am-show-md-only">
<div class="goods-category-title am-hide-sm-only">
<span class="all-goods">全部分类</span>
</div>
<h1 class="am-topbar-brand wap-logo am-show-sm-only">
<a href="{{$Think.__MY_URL__}}">
<img src="{{:AttachmentPathViewHandle(MyC('home_site_logo_wap'))}}" alt="{{:MyC('home_seo_site_title')}}" />
</a>
</h1>
<form class="am-topbar-form am-topbar-left am-form-inline am-show-sm-only navigation-search" role="search" action="{{:MyUrl('index/search/index')}}" method="POST">
<div class="am-input-group am-input-group-sm">
<input type="text" name="wd" class="am-form-field" placeholder="其实搜索很简单^_^ !" value="{{if !empty($params['wd'])}}{{$params.wd}}{{/if}}" autocomplete="off" />
<span class="am-input-group-btn">
<button class="am-btn am-btn-default" type="submit">
<span class="am-icon-search am-icon-xs"></span>
</button>
</span>
</div>
</form>
<a href="{{:MyUrl('index/category/index')}}" class="am-show-md-only">
<div class="goods-category-title am-hide-sm-only">
<span class="all-goods">全部分类</span>
</div>
</a>
<div class="am-collapse am-topbar-collapse" id="doc-topbar-collapse">
{{if empty($user)}}
<!-- 未登录 -->
<div class="navigation-button am-show-sm-only">
{{if MyC('home_user_login_state') eq 1}}
<a href="{{:MyUrl('index/user/logininfo')}}" class="am-btn am-btn-primary am-topbar-btn am-btn-sm">登录</a>
{{/if}}
{{if in_array('sms', MyC('home_user_reg_state')) or in_array('email', MyC('home_user_reg_state')) or in_array('username', MyC('home_user_reg_state'))}}
<a href="{{:MyUrl('index/user/regInfo')}}" class="am-btn am-btn-success am-topbar-btn am-btn-sm">注册</a>
{{/if}}
</div>
{{/if}}
<form class="am-topbar-form am-topbar-left am-form-inline am-show-sm-only navigation-search" role="search" action="{{:MyUrl('index/search/index')}}" method="POST">
<div class="am-input-group am-input-group-sm">
<input type="text" name="wd" class="am-form-field" placeholder="其实搜索很简单^_^ !" value="{{if !empty($params['wd'])}}{{$params.wd}}{{/if}}" autocomplete="off" />
<span class="am-input-group-btn">
<button class="am-btn am-btn-default" type="submit">
<span class="am-icon-search am-icon-xs"></span>
</button>
</span>
</div>
</form>
<!-- 主导航 -->
<ul class="am-nav am-nav-pills am-topbar-nav">
<li><a href="{{$Think.__MY_URL__}}">首页</a></li>
{{if !empty($nav_header)}}
{{foreach $nav_header as $nav}}
{{if empty($nav['items'])}}
<li>
<a href="{{$nav.url}}" {{if $nav['is_new_window_open'] eq 1}}target="_blank"{{/if}} title="{{$nav.name}}">{{$nav.name}}</a>
</li>
{{else /}}
<li class="am-dropdown" data-am-dropdown>
<a class="am-dropdown-toggle" data-am-dropdown-toggle href="javascript:;">
{{$nav.name}} <span class="am-icon-angle-down"></span>
</a>
<ul class="am-dropdown-content">
{{foreach $nav.items as $navs}}
<li>
<a href="{{$navs.url}}" title="{{$navs.name}}">{{$navs.name}}</a>
</li>
{{/foreach}}
</ul>
{{/if}}
{{/foreach}}
<div class="am-collapse am-topbar-collapse" id="doc-topbar-collapse">
{{if empty($user)}}
<!-- 未登录 -->
<div class="navigation-button am-show-sm-only">
{{if MyC('home_user_login_state') eq 1}}
<a href="{{:MyUrl('index/user/logininfo')}}" class="am-btn am-btn-primary am-topbar-btn am-btn-sm">登录</a>
{{/if}}
</ul>
{{if in_array('sms', MyC('home_user_reg_state')) or in_array('email', MyC('home_user_reg_state')) or in_array('username', MyC('home_user_reg_state'))}}
<a href="{{:MyUrl('index/user/regInfo')}}" class="am-btn am-btn-success am-topbar-btn am-btn-sm">注册</a>
{{/if}}
</div>
{{/if}}
<div class="am-topbar-right am-hide-sm-only">
<div class="navigation-user {{if empty($user)}}login-event{{/if}}">
<a href="{{if empty($user)}}javascript:;{{else /}}{{:MyUrl('index/user/index')}}{{/if}}">
<img src="{{if !empty($user['avatar'])}}{{$user.avatar}}{{else /}}{{$attachment_host}}/static/{{$module_name}}/{{$default_theme}}/images/default-user-avatar.jpg{{/if}}" class="nav-user" />
<b></b>
<span>我的商城</span>
<i class="am-icon-angle-right"></i>
</a>
</div>
<!-- 主导航 -->
<ul class="am-nav am-nav-pills am-topbar-nav">
<li><a href="{{$Think.__MY_URL__}}">首页</a></li>
{{if !empty($nav_header)}}
{{foreach $nav_header as $nav}}
{{if empty($nav['items'])}}
<li>
<a href="{{$nav.url}}" {{if $nav['is_new_window_open'] eq 1}}target="_blank"{{/if}} title="{{$nav.name}}">{{$nav.name}}</a>
</li>
{{else /}}
<li class="am-dropdown" data-am-dropdown>
<a class="am-dropdown-toggle" data-am-dropdown-toggle href="javascript:;">
{{$nav.name}} <span class="am-icon-angle-down"></span>
</a>
<ul class="am-dropdown-content">
{{foreach $nav.items as $navs}}
<li>
<a href="{{$navs.url}}" title="{{$navs.name}}">{{$navs.name}}</a>
</li>
{{/foreach}}
</ul>
{{/if}}
{{/foreach}}
{{/if}}
</ul>
<div class="am-topbar-right am-hide-sm-only">
<div class="navigation-user {{if empty($user)}}login-event{{/if}}">
<a href="{{if empty($user)}}javascript:;{{else /}}{{:MyUrl('index/user/index')}}{{/if}}">
<img src="{{if !empty($user['avatar'])}}{{$user.avatar}}{{else /}}{{$attachment_host}}/static/{{$module_name}}/{{$default_theme}}/images/default-user-avatar.jpg{{/if}}" class="nav-user" />
<b></b>
<span>我的商城</span>
<i class="am-icon-angle-right"></i>
</a>
</div>
</div>
</div>
</header>
{{/if}}
</div>
</header>

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($controller_name.$action_name), $v['contains']) and isset($v['is_system']) and $v['is_system'] eq 1 and !isset($params['pluginscontrol'])) or (isset($params['pluginscontrol']) and isset($params['pluginsaction']) and in_array(strtolower($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 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}}" >
<a href="{{$v.url}}">{{if !empty($v['icon'])}}<i class="{{$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($controller_name.$action_name), $vs['contains']) and isset($vs['is_system']) and $vs['is_system'] eq 1 and !isset($params['pluginscontrol'])) or (isset($params['pluginscontrol']) and isset($params['pluginsaction']) and in_array(strtolower($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 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}}">
<a href="{{$vs.url}}" class="am-cf">{{if !empty($vs['icon'])}}<i class="{{$vs.icon}}"></i>{{/if}} {{$vs.name}}</a>
</li>
{{/if}}

Some files were not shown because too many files have changed in this diff Show More