This commit is contained in:
gongfuxiang 2024-10-21 10:51:14 +08:00
parent d8f8153ba8
commit fc93254f88
395 changed files with 22135 additions and 4162 deletions

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2021 ShopXO
Copyright (c) 2024 ShopXO免费开源商城
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -1,5 +1,5 @@
<p align="center">
<img src="https://doc.shopxo.net/upload/image/20210727/1627379966617129.jpg" width="360" />
<img src="https://shopxoserver.oss-cn-beijing.aliyuncs.com/demo/system/logo.jpg" width="360" />
</p>
<div align="center">
@ -26,13 +26,13 @@
### 项目介绍
#### ShopXO国内企业级免费开源电商系统
* 求实进取、创新专注、自主研发、国内企业级电商系统解决方案。
* 求实进取、创新专注、自主研发、专注于企业信息化、数字化、电商一体化解决方案。
* 遵循MIT开源协议发布无需授权、可商用、可二次开发、满足99%的电商运营需求。
* 支持PC+手机自适应独立H5、小程序支付宝、微信、百度、头条&抖音、QQ、快手APPIOS、Android
* 支持多仓库、多商户、多门店、进销存组件插件化、即插即用可视化DIY拖拽装修。
### 体验码
![二维码](https://doc.shopxo.net/upload/image/20211211/1639234221484373.jpg "qrcode.jpg")
![二维码](https://shopxoserver.oss-cn-beijing.aliyuncs.com/demo/system/demo-qrcode.jpg "qrcode.jpg")
### 基础信息
@ -43,9 +43,9 @@
| 开源协议 | [https://license.shopxo.net/](https://license.shopxo.net/) | 手机端 | [https://uniapp.shopxo.net/](https://uniapp.shopxo.net/) |
### 官方QQ群、答案`shopxo.net`
| 官方1群 | 官方2群 | 官方3群 | 官方4群 | 官方多商户群 | 官方多门店群 | 官方进销存群 | 官方uniapp群 |
|---|---|---|---|---|---|---|---|
| 833531593 | 641730223 | 1127073697 | 323523483 | 782971010 | 281418967 | 719894308 | 679303149 |
| 官方1群 | 官方2群 | 官方3群 | 官方4群 | 官方多商户群 | 官方多门店群 | 官方进销存群 | 官方uniapp群 | 官方DIY群 |
|---|---|---|---|---|---|---|---|---|
| 833531593 | 641730223 | 1127073697 | 323523483 | 782971010 | 281418967 | 719894308 | 679303149 | 934312116 |
### 当前项目源代码平台
| 平台 | 地址 |
@ -55,7 +55,7 @@
| Coding | [https://zongzhige.coding.net/public/shopxo/shopxo/git](https://zongzhige.coding.net/public/shopxo/shopxo/git) |
| GitCode | [https://gitcode.com/zongzhige/shopxo](https://gitcode.com/zongzhige/shopxo) |
### uniapp端源代码平台
### uniapp手机端源代码平台
| 平台 | 地址 |
|----|----|
| Gitee | [https://gitee.com/zongzhige/shopxo-uniapp](https://gitee.com/zongzhige/shopxo-uniapp) |
@ -64,6 +64,13 @@
| GitCode | [https://gitcode.com/zongzhige/shopxo-uniapp](https://gitcode.com/zongzhige/shopxo-uniapp) |
| uni-app | [https://ext.dcloud.net.cn/plugin?id=6380](https://ext.dcloud.net.cn/plugin?id=6380) |
### DIY装修源代码平台
| 平台 | 地址 |
|----|----|
| Gitee | [https://gitee.com/zongzhige/shopxo-diy](https://gitee.com/zongzhige/shopxo-diy) |
| GitHub | [https://github.com/gongfuxiang/shopxo-diy](https://github.com/gongfuxiang/shopxo-diy) |
| GitCode | [https://gitcode.com/zongzhige/shopxo-diy](https://gitcode.com/zongzhige/shopxo-diy) |
### 部分功能特性
| 名称 | 描述 |
|---------|-------------------------------------------------|
@ -106,21 +113,19 @@
![后端](https://shopxoserver.oss-cn-beijing.aliyuncs.com/demo/admin/main.jpg "首页")
### 手机DIY装修展示
![手机DIY装修](https://shopxoserver.oss-cn-beijing.aliyuncs.com/demo/diy/diy.jpg "手机DIY装修")
### 可视化DIY拖拽装修展示
![可视化拖拽](https://doc.shopxo.net/upload/image/20210727/1627370212919280.gif "可视化DIY拖拽装修")
### 系统管理模块
![系统管理模块](http://assets.processon.com/chart_image/611f249c0e3e745cf8fe56e7.png?_=1629691225594 "系统管理模块")
### Gitee荣誉证书展示
![Gitee荣誉证书](https://shopxoserver.oss-cn-beijing.aliyuncs.com/demo/system/gitee-gvp.jpg "Gitee荣誉证书")
### 用户端模块
![用户端模块](http://assets.processon.com/chart_image/6123129d0e3e743b327ab85e.png?_=1629691012295 "用户端模块")
### 扩展功能
![扩展功能](http://assets.processon.com/chart_image/612258ca5653bb6788ddc05e.png?_=1629691075045 "扩展功能")
### 荣誉证书
![GVP证书](https://doc.shopxo.net/upload/image/20210727/1627370213278731.jpeg "GVP高清图片.jpeg")
### GitCode荣誉证书展示
![GitCode荣誉证书](https://shopxoserver.oss-cn-beijing.aliyuncs.com/demo/system/gotcode-star.jpg "GitCode荣誉证书")
### 如何参与项目

View File

@ -18,6 +18,7 @@ use think\exception\HttpResponseException;
use think\exception\ValidateException;
use think\Response;
use Throwable;
use app\service\ErrorLogService;
/**
* 应用异常处理类
@ -45,6 +46,40 @@ class ExceptionHandle extends Handle
*/
public function report(Throwable $exception): void
{
// 请求对象
$request = request();
// 请求参数
$params = $request->param();
//运行时长(单位 秒)
$runtime = round(microtime(true) - app()->getBeginTime(), 10);
// 内存占用
$memory_use = (memory_get_usage() - app()->getBeginMem()) / 1024;
if($memory_use > 1024)
{
$memory_use = $memory_use / 1024;
if($memory_use > 1024)
{
$memory_use = number_format($memory_use / 1024, 2).'GB';
} else {
$memory_use = number_format($memory_use, 2).'MB';
}
} else {
$memory_use = number_format($memory_use, 2).'KB';
}
$data = [
'message' => $this->getMessage($exception),
'file' => $exception->getFile(),
'line' => $exception->getLine(),
'code' => $this->getCode($exception),
'ip' => $request->ip(),
'uri' => $request->url(),
'request_params' => empty($params) ? '' : (is_array($params) ? json_encode($params, JSON_UNESCAPED_UNICODE) : $params),
'tsc' => number_format($runtime, 6),
'memory_use' => $memory_use,
'add_time' => time(),
];
ErrorLogService::ErrorLogAdd($data);
// 使用内置的方式记录异常日志
parent::report($exception);
}
@ -59,8 +94,10 @@ class ExceptionHandle extends Handle
*/
public function render($request, Throwable $e): Response
{
// 存在token也返回json处理结果
$token = $request->param('token');
// 添加自定义异常处理机制
if(IS_AJAX)
if(IS_AJAX || !empty($token))
{
// 参数验证错误
if($e instanceof ValidateException)

View File

@ -13,6 +13,7 @@ namespace app\admin\controller;
use app\admin\controller\Base;
use app\service\ApiService;
use app\service\ConfigService;
use app\service\DiyService;
/**
* 手机端 - 配置
@ -50,6 +51,16 @@ class AppConfig extends Base
*/
public function Index()
{
// diy页面
$ret = DiyService::DiyList([
'n' => 0,
'field' => 'id,name',
'where' => [
['is_enable', '=', 1],
],
]);
$diy_list = empty($ret['data']) ? [] : $ret['data'];
$assign = [
// 配置数据
'data' => ConfigService::ConfigList(),
@ -57,6 +68,8 @@ class AppConfig extends Base
'nav_data' => MyLang('appconfig.base_nav_list'),
// 页面导航
'nav_type' => $this->nav_type,
// diy页面
'diy_list' => $diy_list,
];
MyViewAssign($assign);
return MyView($this->nav_type);

View File

@ -0,0 +1,96 @@
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2099 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( https://opensource.org/licenses/mit-license.php )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\admin\controller;
use app\admin\controller\Base;
use app\service\ApiService;
use app\service\AttachmentService;
/**
* 附件管理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
class Attachment extends Base
{
/**
* 列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function Index()
{
return MyView();
}
/**
* 详情
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function Detail()
{
return MyView();
}
/**
* 添加/编辑页面
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function SaveInfo()
{
return MyView();
}
/**
* 添加/编辑
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function Save()
{
$params = $this->data_request;
$params['admin'] = $this->admin;
return ApiService::ApiDataReturn(AttachmentService::AttachmentSave($params));
}
/**
* 删除
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function Delete()
{
$params = $this->data_request;
$params['admin'] = $this->admin;
return ApiService::ApiDataReturn(AttachmentService::AttachmentDelete($params));
}
}
?>

View File

@ -0,0 +1,98 @@
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2099 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( https://opensource.org/licenses/mit-license.php )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\admin\controller;
use app\admin\controller\Base;
use app\service\ApiService;
use app\service\AttachmentCategoryService;
/**
* 附件分类管理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
class AttachmentCategory extends Base
{
/**
* 列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function Index()
{
return MyView();
}
/**
* 获取节点子列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function GetNodeSon()
{
return ApiService::ApiDataReturn(AttachmentCategoryService::AttachmentCategoryNodeSon($this->data_request));
}
/**
* 保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function Save()
{
$params = $this->data_request;
$params['admin'] = $this->admin;
return ApiService::ApiDataReturn(AttachmentCategoryService::AttachmentCategorySave($params));
}
/**
* 状态更新
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2021-03-31
* @desc description
*/
public function StatusUpdate()
{
$params = $this->data_request;
$params['admin'] = $this->admin;
return ApiService::ApiDataReturn(AttachmentCategoryService::AttachmentCategoryStatusUpdate($params));
}
/**
* 删除
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function Delete()
{
$params = $this->data_request;
$params['admin'] = $this->admin;
return ApiService::ApiDataReturn(AttachmentCategoryService::AttachmentCategoryDelete($params));
}
}
?>

View File

@ -24,85 +24,91 @@ use app\service\AdminPowerService;
*/
class Cache extends Base
{
/**
* 首页
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-02-26T19:13:29+0800
*/
public function Index()
{
// 缓存类型
MyViewAssign('cache_type_list', CacheService::AdminCacheTypeList());
return MyView();
}
/**
* 首页
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-02-26T19:13:29+0800
*/
public function Index()
{
// 缓存类型
MyViewAssign('cache_type_list', CacheService::AdminCacheTypeList());
return MyView();
}
/**
* 站点缓存更新
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-02-26T19:53:14+0800
*/
public function StatusUpdate()
{
// 模板 cache
// 系统配置缓存 data
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'cache');
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'data');
/**
* 站点缓存更新
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-02-26T19:53:14+0800
*/
public function StatusUpdate()
{
try {
// 模板 cache
// 系统配置缓存 data
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'cache');
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'data');
// 缓存操作清除
\think\facade\Cache::clear();
// 缓存操作清除
\think\facade\Cache::clear();
} catch(\Exception $e) {}
// 初始化菜单
AdminPowerService::PowerMenuInit($this->admin);
// 初始化菜单
AdminPowerService::PowerMenuInit($this->admin);
return ApiService::ApiDataReturn(DataReturn(MyLang('update_success'), 0));
}
return ApiService::ApiDataReturn(DataReturn(MyLang('update_success'), 0));
}
/**
* 模板缓存更新
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-02-26T19:53:14+0800
*/
public function TemplateUpdate()
{
// 模板 cache
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'index'.DS.'temp');
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'api'.DS.'temp');
/**
* 模板缓存更新
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-02-26T19:53:14+0800
*/
public function TemplateUpdate()
{
try {
// 模板 cache
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'index'.DS.'temp');
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'api'.DS.'temp');
} catch(\Exception $e) {}
return ApiService::ApiDataReturn(DataReturn(MyLang('update_success'), 0));
}
return ApiService::ApiDataReturn(DataReturn(MyLang('update_success'), 0));
}
/**
* 模块缓存更新
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-02-26T19:53:14+0800
*/
public function ModuleUpdate()
{
return ApiService::ApiDataReturn(DataReturn(MyLang('update_success'), 0));
}
/**
* 模块缓存更新
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-02-26T19:53:14+0800
*/
public function ModuleUpdate()
{
return ApiService::ApiDataReturn(DataReturn(MyLang('update_success'), 0));
}
/**
* 日志删除
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-02-26T19:53:14+0800
*/
public function LogDelete()
{
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'admin'.DS.'log');
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'index'.DS.'log');
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'api'.DS.'log');
/**
* 日志删除
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-02-26T19:53:14+0800
*/
public function LogDelete()
{
try {
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'admin'.DS.'log');
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'index'.DS.'log');
\base\FileUtil::UnlinkDir(ROOT.'runtime'.DS.'api'.DS.'log');
} catch(\Exception $e) {}
return ApiService::ApiDataReturn(DataReturn(MyLang('update_success'), 0));
}
return ApiService::ApiDataReturn(DataReturn(MyLang('update_success'), 0));
}
}
?>

View File

@ -16,7 +16,6 @@ use app\service\SystemService;
use app\service\SystemBaseService;
use app\service\AdminService;
use app\service\AdminPowerService;
use app\service\ConfigService;
use app\service\ResourcesService;
use app\service\StoreService;
use app\service\MultilingualService;
@ -104,11 +103,6 @@ class Common extends BaseController
// 检测是否是新安装
SystemService::SystemInstallCheck();
// 输入参数
$this->data_post = input('post.');
$this->data_get = input('get.');
$this->data_request = input();
// 系统初始化
$this->SystemInit();
@ -154,8 +148,10 @@ class Common extends BaseController
*/
private function SystemInit()
{
// 配置信息初始化
ConfigService::ConfigInit();
// 输入参数
$this->data_post = input('post.');
$this->data_get = input('get.');
$this->data_request = input();
}
/**
@ -169,9 +165,12 @@ class Common extends BaseController
{
if(empty($this->admin))
{
if(IS_AJAX)
if(IS_AJAX || IS_POST)
{
exit(json_encode(DataReturn(MyLang('login_failure_tips'), -400)));
exit(json_encode(DataReturn(MyLang('login_failure_tips'), -400, [
'login' => MyUrl('admin/admin/logininfo'),
'logout' => MyUrl('admin/admin/logout'),
])));
} else {
die('<script type="text/javascript">if(self.frameElement && self.frameElement.tagName == "IFRAME"){parent.location.reload();}else{window.location.href="'.MyUrl('admin/admin/logininfo').'";}</script>');
}
@ -188,7 +187,17 @@ class Common extends BaseController
public function ViewInit()
{
// 模板数据
$assign = [];
$assign = [
// 静态文件缓存版本号
'static_cache_version' => MyC('home_static_cache_version'),
// logo
'home_site_logo' => AttachmentPathViewHandle(MyC('home_site_logo')),
'home_site_logo_wap' => AttachmentPathViewHandle(MyC('home_site_logo_wap')),
'home_site_logo_app' => AttachmentPathViewHandle(MyC('home_site_logo_app')),
'home_site_logo_square' => AttachmentPathViewHandle(MyC('home_site_logo_square')),
// 站点名称
'home_site_name' => MyC('home_site_name'),
];
// 系统类型
$this->system_type = SystemService::SystemTypeValue();
@ -314,9 +323,12 @@ class Common extends BaseController
// 当前url地址
$assign['my_domain'] = __MY_DOMAIN__;
// 当前完整url地址
// 当前站点url地址
$assign['my_url'] = __MY_URL__;
// 当前完整url地址
$assign['my_view_url'] = __MY_VIEW_URL__;
// 项目public目录URL地址
$assign['my_public_url'] = __MY_PUBLIC_URL__;
@ -332,8 +344,8 @@ class Common extends BaseController
// 加载页面加载层、是否加载图片动画
$assign['is_page_loading'] = ($this->module_name.$this->controller_name.$this->action_name == 'adminindexindex') ? 0 : 1;
$assign['is_page_loading_images'] = 0;
$assign['page_loading_logo'] = $assign['home_site_logo_square'];
$assign['page_loading_images_url'] = StaticAttachmentUrl('loading.gif');
$assign['page_loading_logo'] = AttachmentPathViewHandle(MyC('home_site_logo_square'));
$assign['page_loading_logo_border'] = StaticAttachmentUrl('loading-border.svg', 'svg');
// 是否加载附件组件
@ -369,13 +381,16 @@ class Common extends BaseController
// 默认不加载代码编辑器
$assign['is_load_ace_builds'] = 0;
// 是否加载webuploader
$assign['is_load_webuploader'] = 0;
// 站点名称
$assign['admin_theme_site_name'] = MyC('admin_theme_site_name', 'ShopXO', true);
// 站点商店信息
$site_store_error = '';
$site_store_info = StoreService::SiteStoreInfo();
if(empty($site_store_info))
if(empty($site_store_info) && !empty($this->admin))
{
$ret = StoreService::SiteStoreAccountsBindHandle('', '', 'auto');
if($ret['code'] == 0)
@ -395,6 +410,9 @@ class Common extends BaseController
// 系统基础信息
$is_system_show_base = (empty($site_store_info) || empty($site_store_info['vip']) || !isset($site_store_info['vip']['status']) || $site_store_info['vip']['status'] == 0 || ($site_store_info['vip']['status'] == 1 && (AdminIsPower('index', 'storeaccountsbind') || AdminIsPower('index', 'inspectupgrade')))) ? 1 : 0;
$assign['is_system_show_base'] = $is_system_show_base;
// 是否已绑定商店账户
$is_not_bind_accounts = AdminIsPower('index', 'storeaccountsbind') && (empty($site_store_info) || empty($site_store_info['user'])) ? 1 : 0;
$assign['is_not_bind_accounts'] = $is_not_bind_accounts;
// 后台公告
$admin_notice = MyC('admin_notice');
@ -512,7 +530,7 @@ class Common extends BaseController
if(!AdminIsPower(null, null, $unwanted_power))
{
$msg = MyLang('no_power_tips');
if(IS_AJAX)
if(IS_AJAX || IS_POST)
{
exit(json_encode(DataReturn($msg, -1000)));
} else {
@ -532,7 +550,7 @@ class Common extends BaseController
*/
public function NotBindStoreAccountTips($msg)
{
MyViewAssign('ext_html', '<p class="am-margin-top-sm"><button type="button" class="am-btn am-btn-primary am-radius am-btn-xs am-margin-left-xs am-icon-gg store-accounts-event"> '.MyLang('store_bind_account_name').'</button></p><p class="am-text-warning am-margin-top-xl">'.MyLang('store_bind_account_tips').'</p>');
MyViewAssign('ext_html', '<p class="am-margin-top-sm"><button type="button" class="am-btn am-btn-primary am-radius am-btn-xs am-margin-left-xs am-icon-gg store-accounts-event"> '.MyLang('store_bind_accounts_name').'</button></p><p class="am-text-warning am-margin-top-xl">'.MyLang('store_already_bind_accounts_tips').'</p>');
MyViewAssign('msg', $msg);
return MyView('public/tips_error');
}

View File

@ -35,9 +35,11 @@ class Config extends Base
// 模板数据
$assign = [
// 数据
'data' => ConfigService::ConfigList(),
'data' => ConfigService::ConfigList(),
// 页面类型
'view_type' => 'index',
'view_type' => 'index',
// 静态数据
'common_token_created_rules_list' => MyConst('common_token_created_rules_list'),
];
MyViewAssign($assign);
return MyView();
@ -87,6 +89,7 @@ class Config extends Base
$field_list[] = 'admin_logo';
$field_list[] = 'admin_login_logo';
$field_list[] = 'admin_login_ad_images';
$field_list[] = 'common_token_created_rules';
break;
// 商店信息

View File

@ -17,7 +17,7 @@ use app\service\BrandService;
use app\service\StoreService;
use app\service\GoodsService;
use app\service\GoodsCategoryService;
use app\layout\service\BaseLayout;
use app\module\LayoutModule;
/**
* 页面设计管理
@ -44,6 +44,19 @@ class Design extends Base
return MyView();
}
/**
* 详情
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-09-10
* @desc description
*/
public function Detail()
{
return MyView();
}
/**
* 编辑页面
* @author Devil
@ -69,7 +82,7 @@ class Design extends Base
}
// 配置处理
$layout_data = BaseLayout::ConfigAdminHandle($data['config']);
$layout_data = LayoutModule::ConfigAdminHandle($data['config']);
unset($data['config']);
// 商品分类
@ -81,7 +94,7 @@ class Design extends Base
'layout_data' => $layout_data,
'data' => $data,
// 页面列表
'pages_list' => BaseLayout::PagesList(),
'pages_list' => LayoutModule::PagesList(),
// 商品分类
'goods_category_list' => $goods_category,
// 商品搜索分类(分类)
@ -90,11 +103,11 @@ class Design extends Base
// 品牌
'brand_list' => BrandService::CategoryBrand(),
// 静态数据
'border_style_type_list' => BaseLayout::ConstData('border_style_type_list'),
'goods_view_list_show_style' => BaseLayout::ConstData('goods_view_list_show_style'),
'many_images_view_list_show_style' => BaseLayout::ConstData('many_images_view_list_show_style'),
'images_text_view_list_show_style' => BaseLayout::ConstData('images_text_view_list_show_style'),
'images_magic_cube_view_list_show_style' => BaseLayout::ConstData('images_magic_cube_view_list_show_style'),
'border_style_type_list' => LayoutModule::ConstData('border_style_type_list'),
'goods_view_list_show_style' => LayoutModule::ConstData('goods_view_list_show_style'),
'many_images_view_list_show_style' => LayoutModule::ConstData('many_images_view_list_show_style'),
'images_text_view_list_show_style' => LayoutModule::ConstData('images_text_view_list_show_style'),
'images_magic_cube_view_list_show_style' => LayoutModule::ConstData('images_magic_cube_view_list_show_style'),
// 首页商品排序规则
'common_goods_order_by_type_list' => MyConst('common_goods_order_by_type_list'),
'common_data_order_by_rule_list' => MyConst('common_data_order_by_rule_list'),
@ -189,5 +202,23 @@ class Design extends Base
{
return ApiService::ApiDataReturn(DesignService::DesignUpload($this->data_request));
}
/**
* 模板市场
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2022-04-19
* @desc description
*/
public function Market()
{
$ret = DesignService::DesignMarket($this->data_request);
if($ret['code'] == 0 && isset($ret['data']['data_list']))
{
$ret['data']['data_list'] = MyView('public/market/list', ['data_list'=>$ret['data']['data_list']]);
}
return ApiService::ApiDataReturn($ret);
}
}
?>

View File

@ -0,0 +1,196 @@
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2099 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( https://opensource.org/licenses/mit-license.php )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\admin\controller;
use app\admin\controller\Base;
use app\service\ApiService;
use app\service\DiyService;
use app\service\StoreService;
/**
* DIY装修
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-09-10
* @desc description
*/
class Diy extends Base
{
/**
* 首页
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-09-10
* @desc description
*/
public function Index()
{
// 页面类型
$view_type = empty($this->data_request['view_type']) ? 'index' : $this->data_request['view_type'];
// 应用商店
MyViewAssign('store_diy_url', StoreService::StoreDiyUrl());
return MyView($view_type);
}
/**
* 详情
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-09-10
* @desc description
*/
public function Detail()
{
return MyView();
}
/**
* 预览
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-09-10
* @desc description
*/
public function Preview()
{
MyViewAssign('data', DiyService::DiyPreviewUrl($this->data_detail));
return MyView();
}
/**
* 编辑页面
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-09-10
* @desc description
*/
public function SaveInfo()
{
$data = $this->data_detail;
if(empty($data))
{
$is_auto_create = isset($this->data_request['is_auto_create']) ? intval($this->data_request['is_auto_create']) : 1;
if($is_auto_create == 1)
{
$ret = DiyService::DiySave();
if($ret['code'] == 0)
{
return MyRedirect(MyUrl('admin/diy/saveinfo', ['id'=>$ret['data']]));
}
return MyView('public/tips_error', ['msg'=>$ret['msg']]);
}
} else {
if(!empty($data['md5_key']))
{
$ret = DiyService::DiyLegalCheck($data['md5_key'], $data);
if($ret['code'] != 0)
{
return MyView('public/tips_error', ['msg'=>$ret['msg']]);
}
}
}
return MyView();
}
/**
* 下载
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2022-04-17
* @desc description
*/
public function Download()
{
$ret = DiyService::DiyDownload($this->data_request);
if(isset($ret['code']) && $ret['code'] != 0)
{
MyViewAssign('msg', $ret['msg']);
return MyView('public/tips_error');
}
}
/**
* 保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-09-29
* @desc description
*/
public function Save()
{
return ApiService::ApiDataReturn(DiyService::DiySave($this->data_request));
}
/**
* 状态更新
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2021-03-31
* @desc description
*/
public function StatusUpdate()
{
return ApiService::ApiDataReturn(DiyService::DiyStatusUpdate($this->data_request));
}
/**
* 删除
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2021-03-31
* @desc description
*/
public function Delete()
{
return ApiService::ApiDataReturn(DiyService::DiyDelete($this->data_request));
}
/**
* 导入
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2022-04-19
* @desc description
*/
public function Upload()
{
return ApiService::ApiDataReturn(DiyService::DiyUpload($this->data_request));
}
/**
* 模板市场
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2022-04-19
* @desc description
*/
public function Market()
{
$ret = DiyService::DiyMarket($this->data_request);
if($ret['code'] == 0 && isset($ret['data']['data_list']))
{
$ret['data']['data_list'] = MyView('public/market/list', ['data_list'=>$ret['data']['data_list']]);
}
return ApiService::ApiDataReturn($ret);
}
}
?>

View File

@ -0,0 +1,450 @@
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2099 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( https://opensource.org/licenses/mit-license.php )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\admin\controller;
use app\admin\controller\Base;
use app\service\ApiService;
use app\service\DiyApiService;
/**
* DiyApi接口
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
class DiyApi extends Base
{
/**
* 公共初始化
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function Init()
{
return ApiService::ApiDataReturn(DiyApiService::Init($this->data_request));
}
/**
* 附件分类
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function AttachmentCategory()
{
return ApiService::ApiDataReturn(DiyApiService::AttachmentCategory($this->data_request));
}
/**
* 附件列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function AttachmentList()
{
return ApiService::ApiDataReturn(DiyApiService::AttachmentList($this->data_request));
}
/**
* 附件保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function AttachmentSave()
{
return ApiService::ApiDataReturn(DiyApiService::AttachmentSave($this->data_request));
}
/**
* 附件删除
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function AttachmentDelete()
{
return ApiService::ApiDataReturn(DiyApiService::AttachmentDelete($this->data_request));
}
/**
* 附件上传
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function AttachmentUpload()
{
return ApiService::ApiDataReturn(DiyApiService::AttachmentUpload($this->data_request));
}
/**
* 远程下载
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function AttachmentCatch()
{
return ApiService::ApiDataReturn(DiyApiService::AttachmentCatch($this->data_request));
}
/**
* 附件扫码上传数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function AttachmentScanUploadData()
{
return ApiService::ApiDataReturn(DiyApiService::AttachmentScanUploadData($this->data_request));
}
/**
* 附件移动分类
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function AttachmentMoveCategory()
{
return ApiService::ApiDataReturn(DiyApiService::AttachmentMoveCategory($this->data_request));
}
/**
* 附件分类保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function AttachmentCategorySave()
{
return ApiService::ApiDataReturn(DiyApiService::AttachmentCategorySave($this->data_request));
}
/**
* 附件分类删除
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function AttachmentCategoryDelete()
{
return ApiService::ApiDataReturn(DiyApiService::AttachmentCategoryDelete($this->data_request));
}
/**
* 商品列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function GoodsList()
{
return ApiService::ApiDataReturn(DiyApiService::GoodsList($this->data_request));
}
/**
* 自定义页面列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function CustomViewList()
{
return ApiService::ApiDataReturn(DiyApiService::CustomViewList($this->data_request));
}
/**
* 页面设计列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function DesignList()
{
return ApiService::ApiDataReturn(DiyApiService::DesignList($this->data_request));
}
/**
* 文章列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function ArticleList()
{
return ApiService::ApiDataReturn(DiyApiService::ArticleList($this->data_request));
}
/**
* 品牌列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function BrandList()
{
return ApiService::ApiDataReturn(DiyApiService::BrandList($this->data_request));
}
/**
* Diy装修列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function DiyList()
{
return ApiService::ApiDataReturn(DiyApiService::DiyList($this->data_request));
}
/**
* Diy装修详情
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function DiyDetail()
{
return ApiService::ApiDataReturn(DiyApiService::DiyDetail($this->data_request));
}
/**
* Diy装修保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function DiySave()
{
return ApiService::ApiDataReturn(DiyApiService::DiySave($this->data_request));
}
/**
* Diy装修导入
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function DiyUpload()
{
return ApiService::ApiDataReturn(DiyApiService::DiyUpload($this->data_request));
}
/**
* Diy装修导出
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function DiyDownload()
{
$ret = DiyApiService::DiyDownload($this->data_request);
if($ret['code'] != 0)
{
return MyView('public/tips_error', ['msg'=>$ret['msg']]);
}
return ApiService::ApiDataReturn($ret);
}
/**
* diy模板安装
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2022-04-19
* @desc description
*/
public function DiyInstall()
{
return ApiService::ApiDataReturn(DiyApiService::DiyInstall($this->data_request));
}
/**
* diy模板市场
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2022-04-19
* @desc description
*/
public function DiyMarket()
{
return ApiService::ApiDataReturn(DiyApiService::DiyMarket($this->data_request));
}
/**
* 底部菜单保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function AppTabbarSave()
{
return ApiService::ApiDataReturn(DiyApiService::AppTabbarSave($this->data_request));
}
/**
* 底部菜单数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function AppTabbarData()
{
return ApiService::ApiDataReturn(DiyApiService::AppTabbarData($this->data_request));
}
/**
* 商品初始化
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function GoodsInit()
{
return ApiService::ApiDataReturn(DiyApiService::GoodsInit($this->data_request));
}
/**
* 商品指定数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function GoodsAppointData()
{
return ApiService::ApiDataReturn(DiyApiService::GoodsAppointData($this->data_request));
}
/**
* 商品自动数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function GoodsAutoData()
{
return ApiService::ApiDataReturn(DiyApiService::GoodsAutoData($this->data_request));
}
/**
* 文章指定数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function ArticleAppointData()
{
return ApiService::ApiDataReturn(DiyApiService::ArticleAppointData($this->data_request));
}
/**
* 文章自动数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function ArticleAutoData()
{
return ApiService::ApiDataReturn(DiyApiService::ArticleAutoData($this->data_request));
}
/**
* 用户头部数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function UserHeadData()
{
return ApiService::ApiDataReturn(DiyApiService::UserHeadData($this->data_request));
}
/**
* 自定义初始化
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-18
* @desc description
*/
public function CustomInit()
{
return ApiService::ApiDataReturn(DiyApiService::CustomInit($this->data_request));
}
}
?>

View File

@ -0,0 +1,82 @@
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2099 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( https://opensource.org/licenses/mit-license.php )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\admin\controller;
use app\admin\controller\Base;
use app\service\ApiService;
use app\service\ErrorLogService;
/**
* 错误日志管理
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class ErrorLog extends Base
{
/**
* 列表
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2022-08-01
* @desc description
*/
public function Index()
{
return MyView();
}
/**
* 详情
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2022-08-01
* @desc description
*/
public function Detail()
{
return MyView();
}
/**
* 删除
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-07-28
* @desc description
*/
public function Delete()
{
$params = $this->data_request;
$params['admin'] = $this->admin;
return ApiService::ApiDataReturn(ErrorLogService::ErrorLogDelete($params));
}
/**
* 全部删除
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2021-11-18
* @desc description
*/
public function AllDelete()
{
$params = $this->data_request;
$params['admin'] = $this->admin;
return ApiService::ApiDataReturn(ErrorLogService::ErrorLogAllDelete($params));
}
}
?>

View File

@ -58,8 +58,8 @@ class Index extends Common
*/
public function Index()
{
// 默认进入页面初始化
$to_url = MyUrl('admin/index/init');
// 默认地址
$to_url = '';
// 是否指定页面地址
if(!empty($this->data_request['to_url']))

View File

@ -12,7 +12,7 @@ namespace app\admin\controller;
use app\admin\controller\Base;
use app\service\ApiService;
use app\service\PluginsUpgradeService;
use app\service\PackageUpgradeService;
/**
* 软件包更新
@ -33,7 +33,7 @@ class Packageupgrade extends Base
*/
public function Upgrade()
{
return ApiService::ApiDataReturn(PluginsUpgradeService::Run($this->data_request));
return ApiService::ApiDataReturn(PackageUpgradeService::Run($this->data_request));
}
}
?>

View File

@ -52,38 +52,45 @@ class Payment extends Base
*/
public function Index()
{
// 插件列表
$payment = PaymentService::PluginsPaymentList($this->nav_type);
// 插件更新信息
$upgrade = PaymentService::PaymentUpgradeInfo($payment['data']);
// 是否未绑定商店账号
if($upgrade['code'] == -300)
{
return $this->NotBindStoreAccountTips($upgrade['msg']);
}
// 模板数据
$assign = [
// 导航类型
'nav_type' => $this->nav_type,
// 支付插件列表
'data_list' => empty($payment['data']) ? [] : $payment['data'],
// 不能删除的支付方式
'cannot_deleted_list' => PaymentService::$cannot_deleted_list,
// 管理导航
'nav_data' => MyLang('payment.base_nav_list'),
// 适用平台
'common_platform_type' => MyConst('common_platform_type'),
// 应用商店
'store_payment_url' => StoreService::StorePaymentUrl(),
// 支付插件更新信息
'upgrade_info' => $upgrade['data'],
'store_payment_url' => StoreService::StorePaymentUrl(),
];
// 数据赋值
// 页面类型
$view_type = empty($this->data_request['view_type']) ? 'index' : $this->data_request['view_type'];
if($view_type == 'index')
{
// 插件列表
$payment = PaymentService::PluginsPaymentList($this->nav_type);
// 插件更新信息
$upgrade = PaymentService::PaymentUpgradeInfo($payment['data']);
// 是否未绑定商店账号
if($upgrade['code'] == -300)
{
return $this->NotBindStoreAccountTips($upgrade['msg']);
}
// 模板数据
$assign = array_merge($assign, [
// 导航类型
'nav_type' => $this->nav_type,
// 支付插件列表
'data_list' => empty($payment['data']) ? [] : $payment['data'],
// 不能删除的支付方式
'cannot_deleted_list' => PaymentService::$cannot_deleted_list,
// 管理导航
'nav_data' => MyLang('payment.base_nav_list'),
// 适用平台
'common_platform_type' => MyConst('common_platform_type'),
// 支付插件更新信息
'upgrade_info' => $upgrade['data'],
]);
}
MyViewAssign($assign);
return MyView();
return MyView($view_type);
}
/**
@ -197,5 +204,23 @@ class Payment extends Base
{
return ApiService::ApiDataReturn(PaymentService::Upload($this->data_request));
}
/**
* 应用市场
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2022-04-19
* @desc description
*/
public function Market()
{
$ret = PaymentService::PaymentMarket($this->data_request);
if($ret['code'] == 0 && isset($ret['data']['data_list']))
{
$ret['data']['data_list'] = MyView('public/market/list', ['data_list'=>$ret['data']['data_list']]);
}
return ApiService::ApiDataReturn($ret);
}
}
?>

View File

@ -16,7 +16,7 @@ use app\service\StoreService;
use app\service\PluginsAdminService;
use app\service\ResourcesService;
use app\service\PluginsService;
use app\service\PluginsUpgradeService;
use app\service\PackageUpgradeService;
use app\service\PluginsCategoryService;
/**
@ -28,24 +28,6 @@ use app\service\PluginsCategoryService;
*/
class Pluginsadmin extends Base
{
private $view_type;
/**
* 构造方法
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-03T12:39:08+0800
*/
public function __construct()
{
// 调用父类前置方法
parent::__construct();
// 小导航
$this->view_type = empty($this->data_request['view_type']) ? 'index' : $this->data_request['view_type'];
}
/**
* 列表
* @author Devil
@ -57,16 +39,13 @@ class Pluginsadmin extends Base
{
// 模板数据
$assign = [
// 导航参数
'view_type' => $this->view_type,
// 管理导航
'nav_data' => MyLang('pluginsadmin.base_nav_list'),
// 应用商店地址
'store_url' => StoreService::StoreUrl(),
];
// 页面类型
if($this->view_type == 'index')
$view_type = empty($this->data_request['view_type']) ? 'index' : $this->data_request['view_type'];
if($view_type == 'index')
{
// 插件列表
$ret = PluginsAdminService::PluginsList(['is_power'=>true]);
@ -80,10 +59,8 @@ class Pluginsadmin extends Base
$categosy = PluginsCategoryService::PluginsCategoryList();
$assign['plugins_categosy_list'] = $categosy['data'];
}
// 数据赋值
MyViewAssign($assign);
return MyView($this->view_type);
return MyView($view_type);
}
/**
@ -310,7 +287,25 @@ class Pluginsadmin extends Base
*/
public function Upgrade()
{
return ApiService::ApiDataReturn(PluginsUpgradeService::Run($this->data_request));
return ApiService::ApiDataReturn(PackageUpgradeService::Run($this->data_request));
}
/**
* 应用市场
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2022-04-19
* @desc description
*/
public function Market()
{
$ret = PluginsAdminService::PluginsAdminMarket($this->data_request);
if($ret['code'] == 0 && isset($ret['data']['data_list']))
{
$ret['data']['data_list'] = MyView('public/market/list', ['data_list'=>$ret['data']['data_list']]);
}
return ApiService::ApiDataReturn($ret);
}
}
?>

View File

@ -159,45 +159,47 @@ class Site extends Base
// 模板数据
$assign = [
// 主/子导航
'nav_type' => $this->nav_type,
'view_type' => $this->view_type,
'nav_type' => $this->nav_type,
'view_type' => $this->view_type,
// 时区
'common_site_timezone_list' => MyLang('common_site_timezone_list'),
'common_site_timezone_list' => MyLang('common_site_timezone_list'),
// 平台
'common_platform_type' => MyConst('common_platform_type'),
'common_platform_type' => MyConst('common_platform_type'),
// 关闭开启
'common_close_open_list' => MyConst('common_close_open_list'),
'common_close_open_list' => MyConst('common_close_open_list'),
// 登录方式
'common_login_type_list' => MyConst('common_login_type_list'),
'common_login_type_list' => MyConst('common_login_type_list'),
// 用户注册类型列表
'common_user_reg_type_list' => MyConst('common_user_reg_type_list'),
'common_user_reg_type_list' => MyConst('common_user_reg_type_list'),
// 图片验证码类型
'common_site_images_verify_rand_type_list' => MyConst('common_site_images_verify_rand_type_list'),
// 图片验证码规则
'common_site_images_verify_rules_list' => MyConst('common_site_images_verify_rules_list'),
'common_site_images_verify_rules_list' => MyConst('common_site_images_verify_rules_list'),
// 热门搜索关键字
'common_search_keywords_type_list' => MyConst('common_search_keywords_type_list'),
'common_search_keywords_type_list' => MyConst('common_search_keywords_type_list'),
// 是否
'common_is_text_list' => MyConst('common_is_text_list'),
'common_is_text_list' => MyConst('common_is_text_list'),
// 站点类型
'common_site_type_list' => MyConst('common_site_type_list'),
'common_site_type_list' => MyConst('common_site_type_list'),
// 扣除库存规则
'common_deduction_inventory_rules_list' => MyConst('common_deduction_inventory_rules_list'),
'common_deduction_inventory_rules_list' => MyConst('common_deduction_inventory_rules_list'),
// 增加销量规则
'common_sales_count_inc_rules_list' => MyConst('common_sales_count_inc_rules_list'),
'common_sales_count_inc_rules_list' => MyConst('common_sales_count_inc_rules_list'),
// 首页商品排序规则
'common_goods_order_by_type_list' => MyConst('common_goods_order_by_type_list'),
'common_data_order_by_rule_list' => MyConst('common_data_order_by_rule_list'),
'common_goods_order_by_type_list' => MyConst('common_goods_order_by_type_list'),
'common_data_order_by_rule_list' => MyConst('common_data_order_by_rule_list'),
// 首页楼层数据类型
'common_site_floor_data_type_list' => MyConst('common_site_floor_data_type_list'),
'common_site_floor_data_type_list' => MyConst('common_site_floor_data_type_list'),
// 搜索参数类型
'common_goods_parameters_type_list' => MyConst('common_goods_parameters_type_list'),
'common_goods_parameters_type_list' => MyConst('common_goods_parameters_type_list'),
// 多语言
'common_multilingual_list' => MyConst('common_multilingual_list'),
'common_multilingual_list' => MyConst('common_multilingual_list'),
// 商品分类
'common_show_goods_category_level_list' => MyConst('common_show_goods_category_level_list'),
'common_show_goods_category_level_list' => MyConst('common_show_goods_category_level_list'),
// 主导航
'base_nav_list' => MyLang('site.base_nav_list'),
'base_nav_list' => MyLang('site.base_nav_list'),
// 网站设置导航
'siteset_nav_list' => MyLang('site.siteset_nav_list'),
'siteset_nav_list' => MyLang('site.siteset_nav_list'),
];
return $assign;
}

View File

@ -24,101 +24,56 @@ use app\service\StoreService;
*/
class ThemeAdmin extends Base
{
private $view_type;
/**
* 构造方法
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-03T12:39:08+0800
*/
public function __construct()
{
// 调用父类前置方法
parent::__construct();
// 小导航
$this->view_type = empty($this->data_request['view_type']) ? 'index' : $this->data_request['view_type'];
}
/**
/**
* 列表
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-06T21:31:53+0800
*/
public function Index()
{
// 获取主题列表
$data_list = ThemeAdminService::ThemeAdminList();
// 插件更新信息
$upgrade = ThemeAdminService::ThemeAdminUpgradeInfo($data_list);
// 是否未绑定商店账号
if($upgrade['code'] == -300)
{
return $this->NotBindStoreAccountTips($upgrade['msg']);
}
// 模板数据
MyViewAssign([
// 导航参数
'view_type' => $this->view_type,
// 基础导航
'base_nav' => MyLang('theme.base_nav_list'),
// 默认主题
'theme' => ThemeAdminService::DefaultTheme(),
// 主题列表
'data_list' => $data_list,
// 主题数据管理url
'admin_url_data' => ThemeAdminService::ThemeAdminDataUrl(),
// 插件更新信息
'upgrade_info' => $upgrade['data'],
public function Index()
{
// 模板数据
$assign = [
// 应用商店
'store_theme_url' => StoreService::StoreThemeUrl(),
]);
return MyView($this->view_type);
}
];
// 页面类型
$view_type = empty($this->data_request['view_type']) ? 'index' : $this->data_request['view_type'];
if($view_type == 'index')
{
// 获取主题列表
$data_list = ThemeAdminService::ThemeAdminList();
/**
* 切换保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2018-12-19T00:58:47+0800
*/
public function Save()
{
return ApiService::ApiDataReturn(ThemeAdminService::ThemeAdminSwitch($this->data_request));
}
// 更新信息
$upgrade = ThemeAdminService::ThemeAdminUpgradeInfo($data_list);
// 是否未绑定商店账号
if($upgrade['code'] == -300)
{
return $this->NotBindStoreAccountTips($upgrade['msg']);
}
/**
* 删除
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-09T21:13:47+0800
*/
public function Delete()
{
return ApiService::ApiDataReturn(ThemeAdminService::ThemeAdminDelete($this->data_request));
}
// 模板数据
$assign = array_merge($assign, [
// 基础导航
'base_nav' => MyLang('theme.base_nav_list'),
// 默认主题
'theme' => ThemeAdminService::DefaultTheme(),
// 主题列表
'data_list' => $data_list,
// 主题数据管理url
'admin_url_data' => ThemeAdminService::ThemeAdminDataUrl(),
// 插件更新信息
'upgrade_info' => $upgrade['data'],
// 应用商店
'store_theme_url' => StoreService::StoreThemeUrl(),
]);
}
MyViewAssign($assign);
return MyView($view_type);
}
/**
* 上传安装
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-05-10T16:27:09+0800
*/
public function Upload()
{
return ApiService::ApiDataReturn(ThemeAdminService::ThemeAdminUpload($this->data_request));
}
/**
/**
* 打包下载
* @author Devil
* @blog http://gong.gg/
@ -135,5 +90,59 @@ class ThemeAdmin extends Base
return MyView('public/tips_error');
}
}
/**
* 切换保存
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2018-12-19T00:58:47+0800
*/
public function Save()
{
return ApiService::ApiDataReturn(ThemeAdminService::ThemeAdminSwitch($this->data_request));
}
/**
* 删除
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-09T21:13:47+0800
*/
public function Delete()
{
return ApiService::ApiDataReturn(ThemeAdminService::ThemeAdminDelete($this->data_request));
}
/**
* 上传安装
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2017-05-10T16:27:09+0800
*/
public function Upload()
{
return ApiService::ApiDataReturn(ThemeAdminService::ThemeAdminUpload($this->data_request));
}
/**
* 模板市场
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2022-04-19
* @desc description
*/
public function Market()
{
$ret = ThemeAdminService::ThemeAdminMarket($this->data_request);
if($ret['code'] == 0 && isset($ret['data']['data_list']))
{
$ret['data']['data_list'] = MyView('public/market/list', ['data_list'=>$ret['data']['data_list']]);
}
return ApiService::ApiDataReturn($ret);
}
}
?>

View File

@ -77,12 +77,13 @@ class Article
'images_height' => 25,
],
[
'label' => $lang['info'],
'view_type' => 'module',
'view_key' => 'article/module/info',
'grid_size' => 'sm',
'is_sort' => 1,
'search_config' => [
'label' => $lang['info'],
'view_type' => 'module',
'view_key' => 'article/module/info',
'grid_size' => 'sm',
'is_sort' => 1,
'params_where_name' => 'keywords',
'search_config' => [
'form_type' => 'input',
'form_name' => 'title',
'where_type' => 'like',
@ -102,12 +103,13 @@ class Article
],
],
[
'label' => $lang['article_category_name'],
'view_type' => 'field',
'view_key' => 'article_category_name',
'is_sort' => 1,
'width' => 140,
'search_config' => [
'label' => $lang['article_category_name'],
'view_type' => 'field',
'view_key' => 'article_category_name',
'is_sort' => 1,
'width' => 140,
'params_where_name' => 'category_ids',
'search_config' => [
'form_type' => 'select',
'form_name' => 'article_category_id',
'where_type' => 'in',
@ -118,15 +120,16 @@ class Article
],
],
[
'label' => $lang['is_enable'],
'view_type' => 'status',
'view_key' => 'is_enable',
'post_url' => MyUrl('admin/article/statusupdate'),
'is_form_su' => 1,
'align' => 'center',
'is_sort' => 1,
'width' => 130,
'search_config' => [
'label' => $lang['is_enable'],
'view_type' => 'status',
'view_key' => 'is_enable',
'post_url' => MyUrl('admin/article/statusupdate'),
'is_form_su' => 1,
'align' => 'center',
'is_sort' => 1,
'width' => 130,
'params_where_name' => 'is_enable',
'search_config' => [
'form_type' => 'select',
'where_type' => 'in',
'data' => MyConst('common_is_text_list'),

View File

@ -0,0 +1,219 @@
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2099 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( https://opensource.org/licenses/mit-license.php )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\admin\form;
use app\service\AttachmentCategoryService;
/**
* 附件动态表格
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-06-16
* @desc description
*/
class Attachment
{
// 基础条件
public $condition_base = [];
// 附件分类
public $category_list;
/**
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-06-29
* @desc description
* @param [array] $params [输入参数]
*/
public function __construct($params = [])
{
// 附件分类
$res = AttachmentCategoryService::AttachmentCategoryList(['field'=>'id,name']);
$this->category_list = empty($res) ? [] : array_column($res, 'name', 'id');
}
/**
* 入口
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-06-16
* @desc description
* @param [array] $params [输入参数]
*/
public function Run($params = [])
{
$lang = MyLang('attachment.form_table');
return [
// 基础配置
'base' => [
'key_field' => 'id',
'is_search' => 1,
'is_delete' => 1,
'is_middle' => 0,
],
// 表单配置
'form' => [
[
'view_type' => 'checkbox',
'is_checked' => 0,
'checked_text' => MyLang('reverse_select_title'),
'not_checked_text' => MyLang('select_all_title'),
'align' => 'center',
'width' => 80,
],
[
'label' => $lang['category_name'],
'view_type' => 'field',
'view_key' => 'category_name',
'is_sort' => 1,
'width' => 160,
'params_where_name' => 'category_id',
'search_config' => [
'form_type' => 'select',
'form_name' => 'category_id',
'where_type' => 'in',
'data' => $this->category_list,
'is_multiple' => 1,
],
],
[
'label' => $lang['type_name'],
'view_type' => 'field',
'view_key' => 'type_name',
'is_sort' => 1,
'width' => 120,
'params_where_name' => 'type',
'search_config' => [
'form_type' => 'select',
'form_name' => 'type',
'where_type' => 'in',
'data' => MyConst('common_attachment_type_list'),
'data_key' => 'id',
'data_name' => 'name',
'is_multiple' => 1,
],
],
[
'label' => $lang['info'],
'view_type' => 'module',
'view_key' => 'attachment/module/info',
'width' => 80,
],
[
'label' => $lang['original'],
'view_type' => 'field',
'view_key' => 'original',
'grid_size' => 'sm',
'is_sort' => 1,
'params_where_name' => 'keywords',
'search_config' => [
'form_type' => 'input',
'where_type' => 'like',
],
],
[
'label' => $lang['title'],
'view_type' => 'field',
'view_key' => 'title',
'is_sort' => 1,
'search_config' => [
'form_type' => 'input',
'where_type' => 'like',
],
],
[
'label' => $lang['size'],
'view_type' => 'field',
'view_key' => 'size',
'is_sort' => 1,
'search_config' => [
'form_type' => 'section',
],
],
[
'label' => $lang['ext'],
'view_type' => 'field',
'view_key' => 'ext',
'is_sort' => 1,
'width' => 120,
'search_config' => [
'form_type' => 'input',
'where_type' => '=',
],
],
[
'label' => $lang['url'],
'view_type' => 'field',
'view_key' => 'url',
'is_copy' => 1,
'is_sort' => 1,
'grid_size' => 'xl',
'search_config' => [
'form_type' => 'input',
'where_type' => 'like',
],
],
[
'label' => $lang['hash'],
'view_type' => 'field',
'view_key' => 'hash',
'is_copy' => 1,
'is_sort' => 1,
'width' => 270,
'search_config' => [
'form_type' => 'input',
'where_type' => '=',
],
],
[
'label' => $lang['add_time'],
'view_type' => 'field',
'view_key' => 'add_time',
'is_sort' => 1,
'search_config' => [
'form_type' => 'datetime',
],
],
[
'label' => MyLang('operate_title'),
'view_type' => 'operate',
'view_key' => 'attachment/module/operate',
'align' => 'center',
'fixed' => 'right',
],
],
// 数据配置
'data' => [
'table_name' => 'Attachment',
'is_page' => 1,
'is_handle_annex_size_unit' => 1,
'is_handle_annex_field' => 1,
'handle_annex_fields' => ['url'],
'is_handle_time_field' => 1,
'is_fixed_name_field' => 1,
'fixed_name_data' => [
'category_id' => [
'data' => $this->category_list,
'field' => 'category_name',
],
'type' => [
'data' => MyConst('common_attachment_type_list'),
],
],
],
];
}
}
?>

View File

@ -61,12 +61,25 @@ class Brand
'width' => 80,
],
[
'label' => $lang['name'],
'label' => $lang['id'],
'view_type' => 'field',
'view_key' => 'name',
'view_key' => 'id',
'width' => 110,
'is_copy' => 1,
'is_sort' => 1,
'width' => 150,
'search_config' => [
'form_type' => 'input',
'where_type' => '=',
],
],
[
'label' => $lang['name'],
'view_type' => 'field',
'view_key' => 'name',
'is_sort' => 1,
'width' => 150,
'params_where_name' => 'keywords',
'search_config' => [
'form_type' => 'input',
'where_type' => 'like',
],
@ -101,11 +114,12 @@ class Brand
],
],
[
'label' => $lang['brand_category_text'],
'view_type' => 'field',
'view_key' => 'brand_category_text',
'width' => 140,
'search_config' => [
'label' => $lang['brand_category_text'],
'view_type' => 'field',
'view_key' => 'brand_category_text',
'width' => 140,
'params_where_name' => 'category_ids',
'search_config' => [
'form_type' => 'select',
'form_name' => 'id',
'where_type' => 'in',
@ -117,15 +131,16 @@ class Brand
],
],
[
'label' => $lang['is_enable'],
'view_type' => 'status',
'view_key' => 'is_enable',
'post_url' => MyUrl('admin/brand/statusupdate'),
'is_form_su' => 1,
'align' => 'center',
'is_sort' => 1,
'width' => 130,
'search_config' => [
'label' => $lang['is_enable'],
'view_type' => 'status',
'view_key' => 'is_enable',
'post_url' => MyUrl('admin/brand/statusupdate'),
'is_form_su' => 1,
'align' => 'center',
'is_sort' => 1,
'width' => 130,
'params_where_name' => 'is_enable',
'search_config' => [
'form_type' => 'select',
'where_type' => 'in',
'data' => MyConst('common_is_text_list'),

View File

@ -56,27 +56,46 @@ class CustomView
'width' => 80,
],
[
'label' => $lang['info'],
'view_type' => 'module',
'view_key' => 'customview/module/info',
'grid_size' => 'sm',
'label' => $lang['id'],
'view_type' => 'field',
'view_key' => 'id',
'width' => 110,
'is_copy' => 1,
'is_sort' => 1,
'search_config' => [
'form_type' => 'input',
'form_name' => 'title',
'where_type' => '=',
],
],
[
'label' => $lang['logo'],
'view_type' => 'images',
'view_key' => 'logo',
'images_width' => 30,
'width' => 80,
],
[
'label' => $lang['name'],
'view_type' => 'field',
'view_key' => 'name',
'is_sort' => 1,
'params_where_name' => 'keywords',
'search_config' => [
'form_type' => 'input',
'where_type' => 'like',
],
],
[
'label' => $lang['is_enable'],
'view_type' => 'status',
'view_key' => 'is_enable',
'post_url' => MyUrl('admin/customview/statusupdate'),
'is_form_su' => 1,
'align' => 'center',
'is_sort' => 1,
'width' => 130,
'search_config' => [
'label' => $lang['is_enable'],
'view_type' => 'status',
'view_key' => 'is_enable',
'post_url' => MyUrl('admin/customview/statusupdate'),
'is_form_su' => 1,
'align' => 'center',
'is_sort' => 1,
'width' => 130,
'params_where_name' => 'is_enable',
'search_config' => [
'form_type' => 'select',
'where_type' => 'in',
'data' => MyConst('common_is_text_list'),

View File

@ -58,7 +58,8 @@ class Design
'label' => $lang['id'],
'view_type' => 'field',
'view_key' => 'id',
'width' => 105,
'width' => 110,
'is_copy' => 1,
'is_sort' => 1,
'search_config' => [
'form_type' => 'input',
@ -66,16 +67,21 @@ class Design
],
],
[
'label' => $lang['info'],
'view_type' => 'module',
'view_key' => 'design/module/info',
'grid_size' => 'sm',
'is_sort' => 1,
'sort_field' => 'name',
'label' => $lang['logo'],
'view_type' => 'images',
'view_key' => 'logo',
'images_width' => 30,
'width' => 80,
],
[
'label' => $lang['name'],
'view_type' => 'field',
'view_key' => 'name',
'is_sort' => 1,
'params_where_name' => 'keywords',
'search_config' => [
'form_type' => 'input',
'where_type' => 'like',
'placeholder' => $lang['info_placeholder'],
],
],
[
@ -89,15 +95,16 @@ class Design
],
],
[
'label' => $lang['is_enable'],
'view_type' => 'status',
'view_key' => 'is_enable',
'post_url' => MyUrl('admin/design/statusupdate'),
'is_form_su' => 1,
'align' => 'center',
'is_sort' => 1,
'width' => 130,
'search_config' => [
'label' => $lang['is_enable'],
'view_type' => 'status',
'view_key' => 'is_enable',
'post_url' => MyUrl('admin/design/statusupdate'),
'is_form_su' => 1,
'align' => 'center',
'is_sort' => 1,
'width' => 130,
'params_where_name' => 'is_enable',
'search_config' => [
'form_type' => 'select',
'where_type' => 'in',
'data' => MyConst('common_is_text_list'),

184
app/admin/form/Diy.php Normal file
View File

@ -0,0 +1,184 @@
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2099 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( https://opensource.org/licenses/mit-license.php )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\admin\form;
/**
* DIY装修动态表格-管理
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-05-16
* @desc description
*/
class Diy
{
// 基础条件
public $condition_base = [];
/**
* 入口
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-05-16
* @desc description
* @param [array] $params [输入参数]
*/
public function Run($params = [])
{
$lang = MyLang('diy.form_table');
return [
// 基础配置
'base' => [
'key_field' => 'id',
'status_field' => 'is_enable',
'is_search' => 1,
'is_delete' => 1,
'is_middle' => 0,
],
// 表单配置
'form' => [
[
'view_type' => 'checkbox',
'is_checked' => 0,
'checked_text' => MyLang('reverse_select_title'),
'not_checked_text' => MyLang('select_all_title'),
'align' => 'center',
'width' => 80,
],
[
'label' => $lang['id'],
'view_type' => 'field',
'view_key' => 'id',
'width' => 110,
'is_copy' => 1,
'is_sort' => 1,
'search_config' => [
'form_type' => 'input',
'where_type' => '=',
],
],
[
'label' => $lang['md5_key'],
'view_type' => 'field',
'view_key' => 'md5_key',
'width' => 300,
'is_copy' => 1,
'is_sort' => 1,
'search_config' => [
'form_type' => 'input',
'where_type' => '=',
],
],
[
'label' => $lang['logo'],
'view_type' => 'images',
'view_key' => 'logo',
'images_width' => 30,
'width' => 80,
],
[
'label' => $lang['name'],
'view_type' => 'field',
'view_key' => 'name',
'is_sort' => 1,
'params_where_name' => 'keywords',
'search_config' => [
'form_type' => 'input',
'where_type' => 'like',
],
],
[
'label' => $lang['describe'],
'view_type' => 'field',
'view_key' => 'describe',
'text_truncate' => 2,
'grid_size' => 'lg',
'is_popover' => 1,
'is_sort' => 1,
'search_config' => [
'form_type' => 'input',
'where_type' => 'like',
],
],
[
'label' => $lang['is_enable'],
'view_type' => 'status',
'view_key' => 'is_enable',
'post_url' => MyUrl('admin/diy/statusupdate'),
'is_form_su' => 1,
'align' => 'center',
'is_sort' => 1,
'width' => 130,
'params_where_name' => 'is_enable',
'search_config' => [
'form_type' => 'select',
'where_type' => 'in',
'data' => MyConst('common_is_text_list'),
'data_key' => 'id',
'data_name' => 'name',
'is_multiple' => 1,
],
],
[
'label' => $lang['access_count'],
'view_type' => 'field',
'view_key' => 'access_count',
'is_sort' => 1,
'width' => 160,
'search_config' => [
'form_type' => 'section',
],
],
[
'label' => $lang['add_time'],
'view_type' => 'field',
'view_key' => 'add_time',
'is_sort' => 1,
'search_config' => [
'form_type' => 'datetime',
],
],
[
'label' => $lang['upd_time'],
'view_type' => 'field',
'view_key' => 'upd_time',
'is_sort' => 1,
'search_config' => [
'form_type' => 'datetime',
],
],
[
'label' => MyLang('operate_title'),
'view_type' => 'operate',
'view_key' => 'diy/module/operate',
'align' => 'center',
'fixed' => 'right',
],
],
// 数据配置
'data' => [
'table_name' => 'Diy',
'data_handle' => 'DiyService::DiyListHandle',
'detail_action' => ['detail', 'saveinfo', 'preview'],
'is_page' => 1,
'is_handle_annex_field' => 1,
'data_params' => [
'is_config_handle' => 1,
],
'detail_params' => [
'is_config_data_handle' => 1
],
],
];
}
}
?>

View File

@ -188,6 +188,7 @@ class EmailLog
'is_sort' => 1,
'search_config' => [
'form_type' => 'section',
'is_point' => 1,
],
],
[

184
app/admin/form/Errorlog.php Normal file
View File

@ -0,0 +1,184 @@
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2099 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( https://opensource.org/licenses/mit-license.php )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\admin\form;
/**
* 错误日志动态表格
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-06-26
* @desc description
*/
class ErrorLog
{
// 基础条件
public $condition_base = [];
/**
* 入口
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-06-26
* @desc description
* @param [array] $params [输入参数]
*/
public function Run($params = [])
{
$lang = MyLang('errorlog.form_table');
return [
// 基础配置
'base' => [
'key_field' => 'id',
'is_search' => 1,
'is_delete' => 1,
'is_middle' => 0,
],
// 表单配置
'form' => [
[
'view_type' => 'checkbox',
'is_checked' => 0,
'checked_text' => MyLang('reverse_select_title'),
'not_checked_text' => MyLang('select_all_title'),
'align' => 'center',
'width' => 80,
],
[
'label' => $lang['message'],
'view_type' => 'field',
'view_key' => 'message',
'text_truncate' => 2,
'is_popover' => 1,
'is_sort' => 1,
'grid_size' => 'lg',
'search_config' => [
'form_type' => 'input',
'where_type' => 'like',
],
],
[
'label' => $lang['file'],
'view_type' => 'field',
'view_key' => 'file',
'text_truncate' => 2,
'is_popover' => 1,
'is_sort' => 1,
'grid_size' => 'lg',
'search_config' => [
'form_type' => 'input',
'where_type' => 'like',
],
],
[
'label' => $lang['line'],
'view_type' => 'field',
'view_key' => 'line',
'is_sort' => 1,
'width' => 150,
'search_config' => [
'form_type' => 'input',
],
],
[
'label' => $lang['code'],
'view_type' => 'field',
'view_key' => 'code',
'is_sort' => 1,
'width' => 130,
'search_config' => [
'form_type' => 'input',
],
],
[
'label' => $lang['ip'],
'view_type' => 'field',
'view_key' => 'ip',
'is_sort' => 1,
'search_config' => [
'form_type' => 'input',
],
],
[
'label' => $lang['uri'],
'view_type' => 'field',
'view_key' => 'uri',
'text_truncate' => 2,
'is_popover' => 1,
'is_sort' => 1,
'grid_size' => 'lg',
'search_config' => [
'form_type' => 'input',
'where_type' => 'like',
],
],
[
'label' => $lang['request_params'],
'view_type' => 'field',
'view_type' => 'module',
'view_key' => 'errorlog/module/request_params',
'align' => 'left',
'grid_size' => 'lg',
'search_config' => [
'form_type' => 'input',
'form_name' => 'request_params',
'where_type' => 'like',
],
],
[
'label' => $lang['memory_use'],
'view_type' => 'field',
'view_key' => 'memory_use',
'is_sort' => 1,
'search_config' => [
'form_type' => 'input',
'where_type' => 'like',
],
],
[
'label' => $lang['tsc'],
'view_type' => 'field',
'view_key' => 'tsc',
'is_sort' => 1,
'search_config' => [
'form_type' => 'section',
'is_point' => 1,
],
],
[
'label' => $lang['add_time'],
'view_type' => 'field',
'view_key' => 'add_time',
'is_sort' => 1,
'search_config' => [
'form_type' => 'datetime',
],
],
[
'label' => MyLang('operate_title'),
'view_type' => 'operate',
'view_key' => 'errorlog/module/operate',
'align' => 'center',
'fixed' => 'right',
'width' => 120,
],
],
// 数据配置
'data' => [
'table_name' => 'ErrorLog',
'is_page' => 1,
'is_handle_time_field' => 1,
],
];
}
}
?>

View File

@ -74,13 +74,14 @@ class Goods
],
],
[
'label' => $lang['info'],
'view_type' => 'module',
'view_key' => 'goods/module/info',
'grid_size' => 'lg',
'is_sort' => 1,
'sort_field' => 'title',
'search_config' => [
'label' => $lang['info'],
'view_type' => 'module',
'view_key' => 'goods/module/info',
'grid_size' => 'lg',
'is_sort' => 1,
'sort_field' => 'title',
'params_where_name' => 'keywords',
'search_config' => [
'form_type' => 'input',
'form_name' => 'id',
'where_type_custom' => 'in',
@ -89,12 +90,13 @@ class Goods
],
],
[
'label' => $lang['category_text'],
'view_type' => 'field',
'view_key' => 'category_text',
'search_config' => [
'label' => $lang['category_text'],
'view_type' => 'field',
'view_key' => 'category_text',
'params_where_name' => 'category_ids',
'search_config' => [
'form_type' => 'module',
'template' => 'lib/module/goods_category',
'template' => 'lib/module/multi_level_category',
'form_name' => 'id',
'where_type' => 'in',
'where_value_custom' => 'WhereValueGoodsCategory',
@ -102,11 +104,13 @@ class Goods
],
],
[
'label' => $lang['brand_name'],
'view_type' => 'field',
'view_key' => 'brand_name',
'is_sort' => 1,
'search_config' => [
'label' => $lang['brand_name'],
'view_type' => 'field',
'view_key' => 'brand_name',
'params_where_name' => 'brand_ids',
'is_sort' => 1,
'width' => 140,
'search_config' => [
'form_type' => 'select',
'form_name' => 'brand_id',
'where_type' => 'in',
@ -150,14 +154,16 @@ class Goods
],
],
[
'label' => $lang['is_shelves'],
'view_type' => 'status',
'view_key' => 'is_shelves',
'post_url' => MyUrl('admin/goods/statusupdate'),
'is_form_su' => 1,
'align' => 'center',
'is_sort' => 1,
'search_config' => [
'label' => $lang['is_shelves'],
'view_type' => 'status',
'view_key' => 'is_shelves',
'post_url' => MyUrl('admin/goods/statusupdate'),
'is_form_su' => 1,
'align' => 'center',
'is_sort' => 1,
'width' => 130,
'params_where_name' => 'is_shelves',
'search_config' => [
'form_type' => 'select',
'where_type' => 'in',
'data' => MyConst('common_is_shelves_list'),
@ -173,6 +179,7 @@ class Goods
'post_url' => MyUrl('admin/goods/statusupdate'),
'align' => 'center',
'is_sort' => 1,
'width' => 130,
'search_config' => [
'form_type' => 'select',
'where_type' => 'in',
@ -189,6 +196,7 @@ class Goods
'view_data_key' => 'name',
'view_data' => MyConst('common_site_type_list'),
'is_sort' => 1,
'width' => 140,
'search_config' => [
'form_type' => 'select',
'where_type' => 'in',

View File

@ -51,8 +51,11 @@ class Payment
],
[
'label' => $lang['logo'],
'view_type' => 'module',
'view_key' => 'payment/module/logo',
'view_type' => 'images',
'view_key' => 'logo',
'images_width' => 40,
'images_height' => 40,
'width' => 80,
],
[
'label' => $lang['version'],
@ -82,14 +85,17 @@ class Payment
],
[
'label' => $lang['enable'],
'view_type' => 'module',
'view_key' => 'payment/module/enable',
'view_type' => 'status',
'view_key' => 'is_enable',
'post_url' => MyUrl('admin/payment/statusupdate'),
'is_form_su' => 1,
'align' => 'center',
],
[
'label' => $lang['open_user'],
'view_type' => 'module',
'view_key' => 'payment/module/open_user',
'view_type' => 'status',
'view_key' => 'is_open_user',
'post_url' => MyUrl('admin/payment/statusupdate'),
'align' => 'center',
],
[

View File

@ -188,6 +188,7 @@ class SmsLog
'is_sort' => 1,
'search_config' => [
'form_type' => 'section',
'is_point' => 1,
],
],
[

View File

@ -61,7 +61,7 @@ class User
'label' => $lang['id'],
'view_type' => 'field',
'view_key' => 'id',
'width' => 105,
'width' => 110,
'is_copy' => 1,
'is_sort' => 1,
'search_config' => [

View File

@ -284,6 +284,7 @@ return [
'base_nav_title' => '品牌',
// 动态表格
'form_table' => [
'id' => '品牌ID',
'name' => '名稱',
'describe' => '描述',
'logo' => 'LOGO',
@ -336,7 +337,9 @@ return [
'save_view_tips' => '請先保存再預覽效果',
// 动态表格
'form_table' => [
'info' => '標題',
'id' => '數據ID',
'logo' => 'logo',
'name' => '名稱',
'is_enable' => '是否啟用',
'is_header' => '是否頭部',
'is_footer' => '是否尾部',
@ -359,8 +362,8 @@ return [
// 动态表格
'form_table' => [
'id' => '數據ID',
'info' => '基礎資訊',
'info_placeholder' => '請輸入名稱',
'logo' => 'logo',
'name' => '名稱',
'access_count' => '訪問次數',
'is_enable' => '是否啟用',
'is_header' => '是否含頭部',
@ -887,7 +890,7 @@ return [
['name' => '未安裝', 'type' => 1],
],
'base_nav_title' => '支付方式',
'base_upload_payment_name' => '上傳支付',
'base_upload_payment_name' => '導入支付',
'base_nav_store_payment_name' => '更多主題下載',
'upload_top_list_tips' => [
[
@ -937,7 +940,7 @@ return [
['name' => '當前主題', 'type' => 'index'],
['name' => '主題安裝', 'type' => 'upload'],
],
'base_upload_theme_name' => '上傳主題',
'base_upload_theme_name' => '導入主題',
'base_nav_store_theme_name' => '更多主題下載',
'list_author_title' => '作者',
'list_version_title' => '適用版本',
@ -1081,11 +1084,7 @@ return [
],
// 基础导航
'base_nav_title' => '應用',
'base_nav_list' => [
['name' => '應用管理', 'type' => 'index'],
['name' => '上傳應用', 'type' => 'upload'],
],
'base_upload_application_name' => '上傳應用',
'base_upload_application_name' => '導入應用',
'base_nav_more_plugins_download_name' => '更多挿件下載',
// 基础页面
'base_search_input_placeholder' => '請輸入名稱/描述',
@ -1206,6 +1205,52 @@ return [
],
],
// diy装修
'diy' => [
'nav_store_diy_name' => '更多diy範本下載',
'nav_apptabbar_name' => '底部選單',
'upload_list_tips' => [
'1. 選擇已下載的diy設計zip包',
'2. 導入將自動新增一條數據',
],
// 动态表格
'form_table' => [
'id' => '數據ID',
'md5_key' => '唯一標識',
'logo' => 'logo',
'name' => '名稱',
'describe' => '描述',
'access_count' => '訪問次數',
'is_enable' => '是否啟用',
'add_time' => '創建時間',
'upd_time' => '更新時間',
],
],
// 附件
'attachment' => [
'base_nav_title' => '附件',
'category_admin_title' => '分類管理',
// 动态表格
'form_table' => [
'category_name' => '分類',
'type_name' => '類型',
'info' => '附件',
'original' => '原檔名',
'title' => '新檔名',
'size' => '大小',
'ext' => '尾碼',
'url' => 'url地址 ',
'hash' => 'hash',
'add_time' => '創建時間',
],
],
// 附件分类
'attachmentcategory' => [
'base_nav_title' => '附件分類',
],
// 积分日志
'integrallog' => [
// 动态表格
@ -1460,72 +1505,84 @@ return [
'navigation_index' => [
'name' => '網站',
'item' => [
'navigation_index' => '導航管理',
'navigation_save' => '導航添加/編輯',
'navigation_delete' => '導航删除',
'navigation_statusupdate' => '導航狀態更新',
'customview_index' => '自定義頁面',
'customview_saveinfo' => '自定義頁面添加/編輯頁面',
'customview_save' => '自定義頁面添加/編輯',
'customview_delete' => '自定義頁面删除',
'customview_statusupdate' => '自定義頁面狀態更新',
'customview_detail' => '自定義頁面詳情',
'link_index' => '友情連結',
'link_saveinfo' => '友情連結添加/編輯頁面',
'link_save' => '友情連結添加/編輯',
'link_delete' => '友情連結删除',
'link_statusupdate' => '友情連結狀態更新',
'link_detail' => '友情連結詳情',
'themeadmin_index' => '主題管理',
'themeadmin_save' => '主題管理添加/編輯',
'themeadmin_upload' => '主題上傳安裝',
'themeadmin_delete' => '主題删除',
'themeadmin_download' => '主題下載',
'themedata_index' => '主題數據',
'themedata_saveinfo' => '主題數據添加/編輯頁面',
'themedata_save' => '主題數據添加/編輯',
'themedata_upload' => '主題數據上傳',
'themedata_delete' => '主題數據删除',
'themedata_download' => '主題數據下載',
'slide_index' => '首頁輪播',
'slide_saveinfo' => '輪播添加/編輯頁面',
'slide_save' => '輪播添加/編輯',
'slide_statusupdate' => '輪播狀態更新',
'slide_delete' => '輪播删除',
'slide_detail' => '輪播詳情',
'screeningprice_index' => '篩選價格',
'screeningprice_save' => '篩選價格添加/編輯',
'screeningprice_delete' => '篩選價格删除',
'region_index' => '地區管理',
'region_save' => '地區添加/編輯',
'region_statusupdate' => '地區狀態更新',
'region_delete' => '地區删除',
'region_codedata' => '獲取地區編號數據',
'express_index' => '快遞管理',
'express_save' => '快遞添加/編輯',
'express_delete' => '快遞删除',
'payment_index' => '支付方式',
'payment_saveinfo' => '支付方式安裝/編輯頁面',
'payment_save' => '支付方式安裝/編輯',
'payment_delete' => '支付方式删除',
'payment_install' => '支付方式安裝',
'payment_statusupdate' => '支付方式狀態更新',
'payment_uninstall' => '支付方式卸載',
'payment_upload' => '支付方式上傳',
'quicknav_index' => '快捷導航',
'quicknav_saveinfo' => '快捷導航添加/編輯頁面',
'quicknav_save' => '快捷導航添加/編輯',
'quicknav_statusupdate' => '快捷導航狀態更新',
'quicknav_delete' => '快捷導航删除',
'quicknav_detail' => '快捷導航詳情',
'design_index' => '頁面設計',
'design_saveinfo' => '頁面設計添加/編輯頁面',
'design_save' => '頁面設計添加/編輯',
'design_statusupdate' => '頁面設計狀態更新',
'design_upload' => '頁面設計導入',
'design_download' => '頁面設計下載',
'design_sync' => '頁面設計同步首頁',
'design_delete' => '頁面設計删除',
'navigation_index' => '導航管理',
'navigation_save' => '導航添加/編輯',
'navigation_delete' => '導航删除',
'navigation_statusupdate' => '導航狀態更新',
'customview_index' => '自定義頁面',
'customview_saveinfo' => '自定義頁面添加/編輯頁面',
'customview_save' => '自定義頁面添加/編輯',
'customview_delete' => '自定義頁面删除',
'customview_statusupdate' => '自定義頁面狀態更新',
'customview_detail' => '自定義頁面詳情',
'link_index' => '友情連結',
'link_saveinfo' => '友情連結添加/編輯頁面',
'link_save' => '友情連結添加/編輯',
'link_delete' => '友情連結删除',
'link_statusupdate' => '友情連結狀態更新',
'link_detail' => '友情連結詳情',
'themeadmin_index' => '主題管理',
'themeadmin_save' => '主題管理添加/編輯',
'themeadmin_upload' => '主題上傳安裝',
'themeadmin_delete' => '主題删除',
'themeadmin_download' => '主題下載',
'themeadmin_market' => '主題範本市場',
'themedata_index' => '主題數據',
'themedata_saveinfo' => '主題數據添加/編輯頁面',
'themedata_save' => '主題數據添加/編輯',
'themedata_upload' => '主題數據上傳',
'themedata_delete' => '主題數據删除',
'themedata_download' => '主題數據下載',
'slide_index' => '首頁輪播',
'slide_saveinfo' => '輪播添加/編輯頁面',
'slide_save' => '輪播添加/編輯',
'slide_statusupdate' => '輪播狀態更新',
'slide_delete' => '輪播删除',
'slide_detail' => '輪播詳情',
'screeningprice_index' => '篩選價格',
'screeningprice_save' => '篩選價格添加/編輯',
'screeningprice_delete' => '篩選價格删除',
'region_index' => '地區管理',
'region_save' => '地區添加/編輯',
'region_statusupdate' => '地區狀態更新',
'region_delete' => '地區删除',
'region_codedata' => '獲取地區編號數據',
'express_index' => '快遞管理',
'express_save' => '快遞添加/編輯',
'express_delete' => '快遞删除',
'payment_index' => '支付方式',
'payment_saveinfo' => '支付方式安裝/編輯頁面',
'payment_save' => '支付方式安裝/編輯',
'payment_delete' => '支付方式删除',
'payment_install' => '支付方式安裝',
'payment_statusupdate' => '支付方式狀態更新',
'payment_uninstall' => '支付方式卸載',
'payment_upload' => '支付方式上傳',
'payment_market' => '支付挿件市場',
'quicknav_index' => '快捷導航',
'quicknav_saveinfo' => '快捷導航添加/編輯頁面',
'quicknav_save' => '快捷導航添加/編輯',
'quicknav_statusupdate' => '快捷導航狀態更新',
'quicknav_delete' => '快捷導航删除',
'quicknav_detail' => '快捷導航詳情',
'design_index' => '頁面設計',
'design_saveinfo' => '頁面設計添加/編輯頁面',
'design_save' => '頁面設計添加/編輯',
'design_statusupdate' => '頁面設計狀態更新',
'design_upload' => '頁面設計導入',
'design_download' => '頁面設計下載',
'design_sync' => '頁面設計同步首頁',
'design_delete' => '頁面設計删除',
'design_market' => '頁面設計範本市場',
'attachment_index' => '附件管理',
'attachment_detail' => '附件管理詳情',
'attachment_saveinfo' => '附件管理添加/編輯頁面',
'attachment_save' => '附件管理添加/編輯',
'attachment_delete' => '附件管理删除',
'attachmentcategory_index' => '附件分類',
'attachmentcategory_save' => '附件分類添加/編輯',
'attachmentcategory_statusupdate' => '附件狀態更新',
'attachmentcategory_delete' => '附件分類删除',
]
],
'brand_index' => [
@ -1565,29 +1622,69 @@ return [
'app_index' => [
'name' => '手機',
'item' => [
'appconfig_index' => '基礎配寘',
'appconfig_save' => '基礎配寘保存',
'apphomenav_index' => '首頁導航',
'apphomenav_saveinfo' => '首頁導航添加/編輯頁面',
'apphomenav_save' => '首頁導航添加/編輯',
'apphomenav_statusupdate' => '首頁導航狀態更新',
'apphomenav_delete' => '首頁導航删除',
'apphomenav_detail' => '首頁導航詳情',
'appcenternav_index' => '用戶中心導航',
'appcenternav_saveinfo' => '用戶中心導航添加/編輯頁面',
'appcenternav_save' => '用戶中心導航添加/編輯',
'appcenternav_statusupdate' => '用戶中心導航狀態更新',
'appcenternav_delete' => '用戶中心導航删除',
'appcenternav_detail' => '用戶中心導航詳情',
'appmini_index' => '小程式清單',
'appmini_created' => '小程式包生成',
'appmini_delete' => '小程式包删除',
'appmini_themeupload' => '小程式主題上傳',
'appmini_themesave' => '小程式主題切換',
'appmini_themedelete' => '小程式主題切換',
'appmini_themedownload' => '小程式主題下載',
'appmini_config' => '小程式配寘',
'appmini_save' => '小程式配寘保存',
'appconfig_index' => '基礎配寘',
'appconfig_save' => '基礎配寘保存',
'appmini_index' => '小程式清單',
'appmini_created' => '小程式包生成',
'appmini_delete' => '小程式包删除',
'appmini_themeupload' => '小程式主題上傳',
'appmini_themesave' => '小程式主題切換',
'appmini_themedelete' => '小程式主題切換',
'appmini_themedownload' => '小程式主題下載',
'appmini_config' => '小程式配寘',
'appmini_save' => '小程式配寘保存',
'diy_index' => 'DIY裝修',
'diy_saveinfo' => 'DIY裝修添加/編輯頁面',
'diy_save' => 'DIY裝修添加/編輯',
'diy_statusupdate' => 'DIY裝修狀態更新',
'diy_delete' => 'DIY裝修删除',
'diy_download' => 'DIY裝修匯出',
'diy_upload' => 'DIY裝修導入',
'diy_detail' => 'DIY裝修詳情',
'diy_preview' => 'DIY裝修預覽',
'diy_market' => 'DIY裝修範本市場',
'diy_apptabbar' => 'DIY裝修底部選單',
'diyapi_init' => 'DIY裝修-公共初始化',
'diyapi_attachmentcategory' => 'DIY裝修-附件分類',
'diyapi_attachmentlist' => 'DIY裝修-附件清單',
'diyapi_attachmentsave' => 'DIY裝修-附件保存',
'diyapi_attachmentdelete' => 'DIY裝修-附件删除',
'diyapi_attachmentupload' => 'DIY裝修-附件上傳',
'diyapi_attachmentcatch' => 'DIY裝修-附件遠程下載',
'diyapi_attachmentscanuploaddata' => 'DIY裝修-附件掃碼上傳數據',
'diyapi_attachmentmovecategory' => 'DIY裝修-附件移動分類',
'diyapi_attachmentcategorysave' => 'DIY裝修-附件分類保存',
'diyapi_attachmentcategorydelete' => 'DIY裝修-附件分類删除',
'diyapi_goodslist' => 'DIY裝修-商品列表',
'diyapi_customviewlist' => 'DIY裝修-自定義頁面清單',
'diyapi_designlist' => 'DIY裝修-頁面設計清單',
'diyapi_articlelist' => 'DIY裝修-文章列表',
'diyapi_brandlist' => 'DIY裝修-品牌列表',
'diyapi_diylist' => 'DIY裝修-DIY裝修清單',
'diyapi_diydetail' => 'DIY裝修-DIY裝修詳情',
'diyapi_diysave' => 'DIY裝修-DIY裝修保存',
'diyapi_diyupload' => 'DIY裝修-DIY裝修導入',
'diyapi_diydownload' => 'DIY裝修-DIY裝修匯出',
'diyapi_diyinstall' => 'DIY裝修-DIY裝修範本安裝',
'diyapi_diymarket' => 'DIY裝修-DIY裝修範本市場',
'diyapi_goodsappointdata' => 'DIY裝修-商品指定數據',
'diyapi_goodsautodata' => 'DIY裝修-商品自動數據',
'diyapi_articleappointdata' => 'DIY裝修-文章指定數據',
'diyapi_articleautodata' => 'DIY裝修-文章自動數據',
'diyapi_userheaddata' => 'DIY裝修-用戶頭部數據',
'diyapi_custominit' => 'DIY裝修-自定義初始化',
'apphomenav_index' => '首頁導航',
'apphomenav_saveinfo' => '首頁導航添加/編輯頁面',
'apphomenav_save' => '首頁導航添加/編輯',
'apphomenav_statusupdate' => '首頁導航狀態更新',
'apphomenav_delete' => '首頁導航删除',
'apphomenav_detail' => '首頁導航詳情',
'appcenternav_index' => '用戶中心導航',
'appcenternav_saveinfo' => '用戶中心導航添加/編輯頁面',
'appcenternav_save' => '用戶中心導航添加/編輯',
'appcenternav_statusupdate' => '用戶中心導航狀態更新',
'appcenternav_delete' => '用戶中心導航删除',
'appcenternav_detail' => '用戶中心導航詳情',
]
],
'article_index' => [
@ -1621,6 +1718,16 @@ return [
'integrallog_detail' => '積分日誌詳情',
'smslog_index' => '簡訊日誌',
'smslog_detail' => '簡訊日誌詳情',
'smslog_delete' => '簡訊日誌删除',
'smslog_alldelete' => '簡訊日誌全部删除',
'emaillog_index' => '郵件日誌',
'emaillog_detail' => '郵件日誌詳情',
'emaillog_delete' => '郵件日誌删除',
'emaillog_alldelete' => '郵件日誌全部删除',
'errorlog_index' => '錯誤日誌',
'errorlog_detail' => '錯誤日誌詳情',
'errorlog_delete' => '錯誤日誌删除',
'errorlog_alldelete' => '錯誤日誌全部删除',
]
],
'store_index' => [
@ -1637,6 +1744,7 @@ return [
'pluginsadmin_install' => '應用安裝',
'pluginsadmin_uninstall' => '應用卸載',
'pluginsadmin_sortsave' => '應用排序保存',
'pluginsadmin_market' => '應用挿件市場',
'store_index' => '應用商店',
'packageinstall_index' => '套裝軟體安裝頁面',
'packageinstall_install' => '套裝軟體安裝',

View File

@ -284,6 +284,7 @@ return [
'base_nav_title' => 'Brand',
// 动态表格
'form_table' => [
'id' => 'Brand ID',
'name' => 'Name',
'describe' => 'Describe',
'logo' => 'LOGO',
@ -336,7 +337,9 @@ return [
'save_view_tips' => 'Please save before previewing the effect',
// 动态表格
'form_table' => [
'info' => 'Title',
'id' => 'Data ID',
'logo' => 'logo',
'name' => 'name',
'is_enable' => 'Enable or not',
'is_header' => 'Header or not',
'is_footer' => 'Footer or not',
@ -363,8 +366,8 @@ return [
// 动态表格
'form_table' => [
'id' => 'Data ID',
'info' => 'Base Info',
'info_placeholder' => 'Please enter a name',
'logo' => 'logo',
'name' => 'Name',
'access_count' => 'Access Count',
'is_enable' => 'Enable or not',
'is_header' => 'Header or not',
@ -905,7 +908,7 @@ return [
['name' => 'Not Installed', 'type' => 1],
],
'base_nav_title' => 'PaymentMethod',
'base_upload_payment_name' => 'Upload payment',
'base_upload_payment_name' => 'Import payment',
'base_nav_store_payment_name' => 'More PaymentMethod downloads',
'upload_top_list_tips' => [
[
@ -955,7 +958,7 @@ return [
['name' => 'Current Theme', 'type' => 'index'],
['name' => 'Theme Install', 'type' => 'upload'],
],
'base_upload_theme_name' => 'Upload Theme',
'base_upload_theme_name' => 'Import Theme',
'base_nav_store_theme_name' => 'More topic downloads',
'list_author_title' => 'Author',
'list_version_title' => 'Applicable Version',
@ -1099,11 +1102,7 @@ return [
],
// 基础导航
'base_nav_title' => 'Plugins',
'base_nav_list' => [
['name' => 'Application Management', 'type' => 'index'],
['name' => 'Upload Application', 'type' => 'upload'],
],
'base_upload_application_name' => 'Upload application',
'base_upload_application_name' => 'Import application',
'base_nav_more_plugins_download_name' => 'More plug-in downloads',
// 基础页面
'base_search_input_placeholder' => 'Please enter a name/description',
@ -1224,6 +1223,52 @@ return [
],
],
// diy装修
'diy' => [
'nav_store_diy_name' => 'More DIY template downloads',
'nav_apptabbar_name' => 'Bottom menu',
'upload_list_tips' => [
'1. Select the downloaded DIY design zip file',
'2. Importing will automatically add a new piece of data',
],
// 动态表格
'form_table' => [
'id' => 'Data ID',
'md5_key' => 'unique identification',
'logo' => 'logo',
'name' => 'name',
'describe' => 'describe',
'access_count' => 'Number of visits',
'is_enable' => 'Is it enabled',
'add_time' => 'Creation time',
'upd_time' => 'Update time',
],
],
// 附件
'attachment' => [
'base_nav_title' => 'annex',
'category_admin_title' => 'Category management',
// 动态表格
'form_table' => [
'category_name' => 'Category',
'type_name' => 'Type',
'info' => 'Info',
'original' => 'Original file name',
'title' => 'New file name',
'size' => 'Size',
'ext' => 'Suffix',
'url' => 'Url address ',
'hash' => 'Hash',
'add_time' => 'Creation time',
],
],
// 附件分类
'attachmentcategory' => [
'base_nav_title' => 'Attachment Category',
],
// 积分日志
'integrallog' => [
// 动态表格
@ -1478,72 +1523,84 @@ return [
'navigation_index' => [
'name' => 'Web',
'item' => [
'navigation_index' => 'Navigation admin',
'navigation_save' => 'Navigation add/edit',
'navigation_delete' => 'Navigation delete',
'navigation_statusupdate' => 'Navigation status update',
'customview_index' => 'Custom page',
'customview_saveinfo' => 'Custom page add/edit page',
'customview_save' => 'Custom page add/edit',
'customview_delete' => 'Custom page delete',
'customview_statusupdate' => 'Custom page status update',
'customview_detail' => 'Custom page details',
'link_index' => 'Links',
'link_saveinfo' => 'Link add/edit page',
'link_save' => 'Add / Edit Links',
'link_delete' => 'Link delete',
'link_statusupdate' => 'Link status update',
'link_detail' => 'Link details',
'themeadmin_index' => 'Theme admin',
'themeadmin_save' => 'Theme admin add/edit',
'themeadmin_upload' => 'Theme upload and installation',
'themeadmin_delete' => 'Theme delete',
'themeadmin_download' => 'Theme download',
'themedata_index' => 'Theme data',
'themedata_saveinfo' => 'Theme data add/edit page',
'themedata_save' => 'Theme data add/edit',
'themedata_upload' => 'Theme data upload',
'themedata_delete' => 'Theme data delete',
'themedata_download' => 'Theme data download',
'slide_index' => 'HomePage Slide',
'slide_saveinfo' => 'Carousel add/edit page',
'slide_save' => 'Carousel add/edit',
'slide_statusupdate' => 'Rotation status update',
'slide_delete' => 'Rotation delete',
'slide_detail' => 'Rotation details',
'screeningprice_index' => 'Screening price',
'screeningprice_save' => 'Filter price add/edit',
'screeningprice_delete' => 'Filter price delete',
'region_index' => 'Regional admin',
'region_save' => 'Region add/edit',
'region_statusupdate' => 'Regional status update',
'region_delete' => 'Region delete',
'region_codedata' => 'Get area number data',
'express_index' => 'Express Management',
'express_save' => 'Express add/edit',
'express_delete' => 'Express delete',
'payment_index' => 'Payment method',
'payment_saveinfo' => 'Payment method installation / editing page',
'payment_save' => 'Payment method installation / editing',
'payment_delete' => 'Payment method delete',
'payment_install' => 'Payment method installation',
'payment_statusupdate' => 'Payment method status update',
'payment_uninstall' => 'Payment method unloading',
'payment_upload' => 'Payment method upload',
'quicknav_index' => 'Quick navigation',
'quicknav_saveinfo' => 'Quick navigation add/edit page',
'quicknav_save' => 'Quick navigation add/edit',
'quicknav_statusupdate' => 'Quick navigation status update',
'quicknav_delete' => 'Quick navigation delete',
'quicknav_detail' => 'Quick navigation details',
'design_index' => 'Page design',
'design_saveinfo' => 'Page design add/edit page',
'design_save' => 'Page design add/edit',
'design_statusupdate' => 'Page design status update',
'design_upload' => 'Page design import',
'design_download' => 'Page Design Download',
'design_sync' => 'Page design synchronization home page',
'design_delete' => 'Page design delete',
'navigation_index' => 'Navigation admin',
'navigation_save' => 'Navigation add/edit',
'navigation_delete' => 'Navigation delete',
'navigation_statusupdate' => 'Navigation status update',
'customview_index' => 'Custom page',
'customview_saveinfo' => 'Custom page add/edit page',
'customview_save' => 'Custom page add/edit',
'customview_delete' => 'Custom page delete',
'customview_statusupdate' => 'Custom page status update',
'customview_detail' => 'Custom page details',
'link_index' => 'Links',
'link_saveinfo' => 'Link add/edit page',
'link_save' => 'Add / Edit Links',
'link_delete' => 'Link delete',
'link_statusupdate' => 'Link status update',
'link_detail' => 'Link details',
'themeadmin_index' => 'Theme admin',
'themeadmin_save' => 'Theme admin add/edit',
'themeadmin_upload' => 'Theme upload and installation',
'themeadmin_delete' => 'Theme delete',
'themeadmin_download' => 'Theme download',
'themeadmin_market' => 'Theme template market',
'themedata_index' => 'Theme data',
'themedata_saveinfo' => 'Theme data add/edit page',
'themedata_save' => 'Theme data add/edit',
'themedata_upload' => 'Theme data upload',
'themedata_delete' => 'Theme data delete',
'themedata_download' => 'Theme data download',
'slide_index' => 'HomePage Slide',
'slide_saveinfo' => 'Carousel add/edit page',
'slide_save' => 'Carousel add/edit',
'slide_statusupdate' => 'Rotation status update',
'slide_delete' => 'Rotation delete',
'slide_detail' => 'Rotation details',
'screeningprice_index' => 'Screening price',
'screeningprice_save' => 'Filter price add/edit',
'screeningprice_delete' => 'Filter price delete',
'region_index' => 'Regional admin',
'region_save' => 'Region add/edit',
'region_statusupdate' => 'Regional status update',
'region_delete' => 'Region delete',
'region_codedata' => 'Get area number data',
'express_index' => 'Express Management',
'express_save' => 'Express add/edit',
'express_delete' => 'Express delete',
'payment_index' => 'Payment method',
'payment_saveinfo' => 'Payment method installation / editing page',
'payment_save' => 'Payment method installation / editing',
'payment_delete' => 'Payment method delete',
'payment_install' => 'Payment method installation',
'payment_statusupdate' => 'Payment method status update',
'payment_uninstall' => 'Payment method unloading',
'payment_upload' => 'Payment method upload',
'payment_market' => 'Payment Plugin Market',
'quicknav_index' => 'Quick navigation',
'quicknav_saveinfo' => 'Quick navigation add/edit page',
'quicknav_save' => 'Quick navigation add/edit',
'quicknav_statusupdate' => 'Quick navigation status update',
'quicknav_delete' => 'Quick navigation delete',
'quicknav_detail' => 'Quick navigation details',
'design_index' => 'Page design',
'design_saveinfo' => 'Page design add/edit page',
'design_save' => 'Page design add/edit',
'design_statusupdate' => 'Page design status update',
'design_upload' => 'Page design import',
'design_download' => 'Page Design Download',
'design_sync' => 'Page design synchronization home page',
'design_delete' => 'Page design delete',
'design_market' => 'Page design template market',
'attachment_index' => 'Annex manage',
'attachment_detail' => 'Annex manage Details',
'attachment_saveinfo' => 'Annex manage Add/Edit Page',
'attachment_save' => 'Annex manage Add/Edit',
'attachment_delete' => 'Annex manage deletion',
'attachmentcategory_index' => 'Annex category',
'attachmentcategory_save' => 'Annex category add/edit',
'attachmentcategory_statusupdate' => 'Annex status update',
'attachmentcategory_delete' => 'Annex category deletion',
]
],
'brand_index' => [
@ -1555,9 +1612,9 @@ return [
'brand_statusupdate' => 'Brand status update',
'brand_delete' => 'Brand delete',
'brand_detail' => 'Brand details',
'brandcategory_index' => 'Brand classification',
'brandcategory_index' => 'Brand category',
'brandcategory_save' => 'Brand category add/edit',
'brandcategory_delete' => 'Brand classification delete',
'brandcategory_delete' => 'Brand category delete',
]
],
'warehouse_index' => [
@ -1583,29 +1640,69 @@ return [
'app_index' => [
'name' => 'Mobile',
'item' => [
'appconfig_index' => 'Basic config',
'appconfig_save' => 'Basic config saving',
'apphomenav_index' => 'Home page navigation',
'apphomenav_saveinfo' => 'Home navigation add/edit page',
'apphomenav_save' => 'Home page navigation add/edit',
'apphomenav_statusupdate' => 'Homepage navigation status update',
'apphomenav_delete' => 'Home page navigation delete',
'apphomenav_detail' => 'Home page navigation details',
'appcenternav_index' => 'User center navigation',
'appcenternav_saveinfo' => 'User center navigation add/edit page',
'appcenternav_save' => 'User center navigation add/edit',
'appcenternav_statusupdate' => 'User center navigation status update',
'appcenternav_delete' => 'User center navigation delete',
'appcenternav_detail' => 'User center navigation details',
'appmini_index' => 'Applet list',
'appmini_created' => 'Applet package generation',
'appmini_delete' => 'Applet package delete',
'appmini_themeupload' => 'Applet theme upload',
'appmini_themesave' => 'Applet theme switching',
'appmini_themedelete' => 'Applet theme switching',
'appmini_themedownload' => 'Applet theme download',
'appmini_config' => 'Applet config',
'appmini_save' => 'Applet config save',
'appconfig_index' => 'Basic config',
'appconfig_save' => 'Basic config saving',
'appmini_index' => 'Applet list',
'appmini_created' => 'Applet package generation',
'appmini_delete' => 'Applet package delete',
'appmini_themeupload' => 'Applet theme upload',
'appmini_themesave' => 'Applet theme switching',
'appmini_themedelete' => 'Applet theme switching',
'appmini_themedownload' => 'Applet theme download',
'appmini_config' => 'Applet config',
'appmini_save' => 'Applet config save',
'diy_index' => 'DIY decoration',
'diy_saveinfo' => 'DIY Decoration Add/Edit Page',
'diy_save' => 'DIY decoration addition/editing',
'diy_statusupdate' => 'DIY decoration status update',
'diy_delete' => 'DIY Decoration Delete',
'diy_download' => 'DIY decoration export',
'diy_upload' => 'DIY decoration import',
'diy_detail' => 'DIY Decoration Details',
'diy_preview' => 'DIY Decoration Preview',
'diy_market' => 'DIY decoration template market',
'diy_apptabbar' => 'DIY Decoration Bottom Menu',
'diyapi_init' => 'DIY Decoration - Public Initialization',
'diyapi_attachmentcategory' => 'DIY Decoration - Attachment Classification',
'diyapi_attachmentlist' => 'DIY Decoration - Attachment List',
'diyapi_attachmentsave' => 'DIY Decoration - Attachment Storage',
'diyapi_attachmentdelete' => 'DIY Decoration - Attachment Deletion',
'diyapi_attachmentupload' => 'DIY Decoration - Attachment Upload',
'diyapi_attachmentcatch' => 'DIY Decoration - Remote Download of Accessories',
'diyapi_attachmentscanuploaddata' => 'DIY Decoration - Scan the QR code for attachments and upload data',
'diyapi_attachmentmovecategory' => 'DIY Decoration - Attachment Mobile Classification',
'diyapi_attachmentcategorysave' => 'DIY Decoration - Attachment Classification and Storage',
'diyapi_attachmentcategorydelete' => 'DIY Decoration - Attachment Category Delete',
'diyapi_goodslist' => 'DIY Decoration - Product List',
'diyapi_customviewlist' => 'DIY Decoration - Custom Page List',
'diyapi_designlist' => 'DIY Decoration - Page Design List',
'diyapi_articlelist' => 'DIY Decoration - Article List',
'diyapi_brandlist' => 'DIY Decoration - Brand List',
'diyapi_diylist' => 'DIY Decoration - DIY Decoration List',
'diyapi_diydetail' => 'DIY Decoration - DIY Decoration Details',
'diyapi_diysave' => 'DIY decoration - DIY decoration preservation',
'diyapi_diyupload' => 'DIY Decoration - DIY Decoration Import',
'diyapi_diydownload' => 'DIY Decoration - DIY Decoration Export',
'diyapi_diyinstall' => 'DIY decoration - DIY decoration template installation',
'diyapi_diymarket' => 'DIY Decoration - DIY Decoration Template Market',
'diyapi_goodsappointdata' => 'DIY Decoration - Product Specific Data',
'diyapi_goodsautodata' => 'DIY Decoration - Automated Product Data',
'diyapi_articleappointdata' => 'DIY Decoration - Article Specific Data',
'diyapi_articleautodata' => 'DIY Decoration - Automatic Article Data',
'diyapi_userheaddata' => 'DIY Decoration - User Head Data',
'diyapi_custominit' => 'DIY Decoration - Custom Initialization',
'apphomenav_index' => 'Home page navigation',
'apphomenav_saveinfo' => 'Home navigation add/edit page',
'apphomenav_save' => 'Home page navigation add/edit',
'apphomenav_statusupdate' => 'Homepage navigation status update',
'apphomenav_delete' => 'Home page navigation delete',
'apphomenav_detail' => 'Home page navigation details',
'appcenternav_index' => 'User center navigation',
'appcenternav_saveinfo' => 'User center navigation add/edit page',
'appcenternav_save' => 'User center navigation add/edit',
'appcenternav_statusupdate' => 'User center navigation status update',
'appcenternav_delete' => 'User center navigation delete',
'appcenternav_detail' => 'User center navigation details',
]
],
'article_index' => [
@ -1639,6 +1736,16 @@ return [
'integrallog_detail' => 'Points log details',
'smslog_index' => 'SMS log',
'smslog_detail' => 'SMS log details',
'smslog_delete' => 'Delete SMS logs',
'smslog_alldelete' => 'Delete all SMS logs',
'emaillog_index' => 'Email log',
'emaillog_detail' => 'Email log details',
'emaillog_delete' => 'Email log deletion',
'emaillog_alldelete' => 'Delete all email logs',
'errorlog_index' => 'Error log',
'errorlog_detail' => 'Error log details',
'errorlog_delete' => 'Error log deletion',
'errorlog_alldelete' => 'Delete all error logs',
]
],
'store_index' => [
@ -1655,6 +1762,7 @@ return [
'pluginsadmin_install' => 'Application installation',
'pluginsadmin_uninstall' => 'Apps Uninstall',
'pluginsadmin_sortsave' => 'Apply sort save',
'pluginsadmin_market' => 'Application Plugin Market',
'store_index' => 'App store',
'packageinstall_index' => 'Package installation page',
'packageinstall_install' => 'Package installation',

View File

@ -284,6 +284,7 @@ return [
'base_nav_title' => 'Marca',
// 动态表格
'form_table' => [
'id' => 'ID de marca',
'name' => 'Nombre',
'describe' => 'Descripción',
'logo' => 'LOGO',
@ -336,7 +337,9 @@ return [
'save_view_tips' => 'Guarde antes de Previsualizar el efecto',
// 动态表格
'form_table' => [
'info' => 'Título',
'id' => 'ID de datos',
'logo' => 'logo',
'name' => 'Nombre',
'is_enable' => 'Si habilitar',
'is_header' => 'Si la cabeza',
'is_footer' => 'Si la cola',
@ -359,8 +362,8 @@ return [
// 动态表格
'form_table' => [
'id' => 'ID de datos',
'info' => 'Información básica',
'info_placeholder' => 'Por favor, introduzca el nombre',
'logo' => 'logo',
'name' => 'Nombre',
'access_count' => 'Número de visitas',
'is_enable' => 'Si habilitar',
'is_header' => 'Si incluye la cabeza',
@ -887,7 +890,7 @@ return [
['name' => 'No instalado', 'type' => 1],
],
'base_nav_title' => 'Método de pago',
'base_upload_payment_name' => 'Cargar pago',
'base_upload_payment_name' => 'Importar pago',
'base_nav_store_payment_name' => 'Descarga de más métodos de pago',
'upload_top_list_tips' => [
[
@ -937,7 +940,7 @@ return [
['name' => 'Temas actuales', 'type' => 'index'],
['name' => 'Instalación temática', 'type' => 'upload'],
],
'base_upload_theme_name' => 'Subir Tema',
'base_upload_theme_name' => 'Importar temas',
'base_nav_store_theme_name' => 'Descarga de más temas',
'list_author_title' => 'Autor',
'list_version_title' => 'Versión aplicable',
@ -1081,11 +1084,7 @@ return [
],
// 基础导航
'base_nav_title' => 'Aplicación',
'base_nav_list' => [
['name' => 'Gestión de aplicaciones', 'type' => 'index'],
['name' => 'Cargar aplicación', 'type' => 'upload'],
],
'base_upload_application_name' => 'Cargar aplicación',
'base_upload_application_name' => 'Importar aplicaciones',
'base_nav_more_plugins_download_name' => 'Descarga de más plug - ins',
// 基础页面
'base_search_input_placeholder' => 'Introduzca el nombre / descripción',
@ -1206,6 +1205,52 @@ return [
],
],
// diy装修
'diy' => [
'nav_store_diy_name' => 'Más descargas de plantillas DIY',
'nav_apptabbar_name' => 'Menú inferior',
'upload_list_tips' => [
'1. Elija el paquete zip de diseño DIY descargado',
'2. La importación agregará automáticamente un nuevo dato',
],
// 动态表格
'form_table' => [
'id' => 'ID de datos',
'md5_key' => 'Identificación única',
'logo' => 'logo',
'name' => 'Nombre',
'describe' => 'Descripción',
'access_count' => 'Número de visitas',
'is_enable' => 'Si habilitar',
'add_time' => 'Tiempo de creación',
'upd_time' => 'Tiempo de actualización',
],
],
// 附件
'attachment' => [
'base_nav_title' => 'Anexo',
'category_admin_title' => 'Gestión clasificada',
// 动态表格
'form_table' => [
'category_name' => 'Clasificación',
'type_name' => 'Tipo',
'info' => 'Anexo',
'original' => 'Nombre del archivo original',
'title' => 'Nuevo nombre de archivo',
'size' => 'Tamaño',
'ext' => 'Sufijo',
'url' => 'Dirección URL ',
'hash' => 'hash',
'add_time' => 'Tiempo de creación',
],
],
// 附件分类
'attachmentcategory' => [
'base_nav_title' => 'Clasificación de los anexos',
],
// 积分日志
'integrallog' => [
// 动态表格
@ -1460,72 +1505,84 @@ return [
'navigation_index' => [
'name' => 'Gestión del sitio web',
'item' => [
'navigation_index' => 'Gestión de la navegación',
'navigation_save' => 'Navegación añadir / editar',
'navigation_delete' => 'Eliminar navegación',
'navigation_statusupdate' => 'Actualización del Estado de navegación',
'customview_index' => 'Página personalizada',
'customview_saveinfo' => 'Página personalizada para agregar / editar Página',
'customview_save' => 'Añadir / editar página personalizada',
'customview_delete' => 'Eliminar página personalizada',
'customview_statusupdate' => 'Actualización del Estado de la página personalizada',
'customview_detail' => 'Detalles de la página personalizada',
'link_index' => 'Enlace amistoso',
'link_saveinfo' => 'Enlace de amistad para agregar / editar Página',
'link_save' => 'Añadir / editar enlaces de amistad',
'link_delete' => 'Eliminar enlaces de amistad',
'link_statusupdate' => 'Actualización del Estado del enlace de amistad',
'link_detail' => 'Detalles del enlace amistoso',
'themeadmin_index' => 'Gestión temática',
'themeadmin_save' => 'Gestión temática añadir / editar',
'themeadmin_upload' => 'Instalación de carga de temas',
'themeadmin_delete' => 'Eliminación del tema',
'themeadmin_download' => 'Descarga del tema',
'themedata_index' => 'Datos temáticos',
'themedata_saveinfo' => 'Página de adición / edición de datos temáticos',
'themedata_save' => 'Añadir / editar datos temáticos',
'themedata_upload' => 'Carga de datos temáticos',
'themedata_delete' => 'Eliminación de datos temáticos',
'themedata_download' => 'Descarga de datos temáticos',
'slide_index' => 'Rotación de la página de inicio',
'slide_saveinfo' => 'Página de adición / edición de la rotación',
'slide_save' => 'Añadir / editar a la rotación',
'slide_statusupdate' => 'Actualización del Estado de rotación',
'slide_delete' => 'Eliminación de la rotación',
'slide_detail' => 'Detalles de la rotación',
'screeningprice_index' => 'Precio de selección',
'screeningprice_save' => 'Filtrar precio añadir / editar',
'screeningprice_delete' => 'Eliminar el precio del filtro',
'region_index' => 'Gestión regional',
'region_save' => 'Área añadir / editar',
'region_statusupdate' => 'Actualización del Estado regional',
'region_delete' => 'Área eliminada',
'region_codedata' => 'Obtención de datos de numeración regional',
'express_index' => 'Gestión de mensajería',
'express_save' => 'Añadir / editar mensajería',
'express_delete' => 'Eliminación de mensajería',
'payment_index' => 'Método de pago',
'payment_saveinfo' => 'Página de instalación / edición del método de pago',
'payment_save' => 'Instalación / edición del método de pago',
'payment_delete' => 'Eliminación del método de pago',
'payment_install' => 'Instalación del método de pago',
'payment_statusupdate' => 'Actualización del Estado del método de pago',
'payment_uninstall' => 'Descarga del método de pago',
'payment_upload' => 'Método de pago cargado',
'quicknav_index' => 'Navegación rápida',
'quicknav_saveinfo' => 'Navegación rápida para agregar / editar páginas',
'quicknav_save' => 'Navegación rápida añadir / editar',
'quicknav_statusupdate' => 'Actualización del Estado de navegación rápida',
'quicknav_delete' => 'Navegación rápida eliminada',
'quicknav_detail' => 'Detalles de navegación rápida',
'design_index' => 'Diseño de página',
'design_saveinfo' => 'Diseño de página para agregar / editar páginas',
'design_save' => 'Diseño de página añadir / editar',
'design_statusupdate' => 'Actualización del Estado de diseño de la página',
'design_upload' => 'Importación de diseño de página',
'design_download' => 'Descarga de diseño de página',
'design_sync' => 'Página de inicio de sincronización de diseño de página',
'design_delete' => 'Diseño de página eliminado',
'navigation_index' => 'Gestión de la navegación',
'navigation_save' => 'Navegación añadir / editar',
'navigation_delete' => 'Eliminar navegación',
'navigation_statusupdate' => 'Actualización del Estado de navegación',
'customview_index' => 'Página personalizada',
'customview_saveinfo' => 'Página personalizada para agregar / editar Página',
'customview_save' => 'Añadir / editar página personalizada',
'customview_delete' => 'Eliminar página personalizada',
'customview_statusupdate' => 'Actualización del Estado de la página personalizada',
'customview_detail' => 'Detalles de la página personalizada',
'link_index' => 'Enlace amistoso',
'link_saveinfo' => 'Enlace de amistad para agregar / editar Página',
'link_save' => 'Añadir / editar enlaces de amistad',
'link_delete' => 'Eliminar enlaces de amistad',
'link_statusupdate' => 'Actualización del Estado del enlace de amistad',
'link_detail' => 'Detalles del enlace amistoso',
'themeadmin_index' => 'Gestión temática',
'themeadmin_save' => 'Gestión temática añadir / editar',
'themeadmin_upload' => 'Instalación de carga de temas',
'themeadmin_delete' => 'Eliminación del tema',
'themeadmin_download' => 'Descarga del tema',
'themeadmin_market' => 'Plantilla temática Mercado',
'themedata_index' => 'Datos temáticos',
'themedata_saveinfo' => 'Página de adición / edición de datos temáticos',
'themedata_save' => 'Añadir / editar datos temáticos',
'themedata_upload' => 'Carga de datos temáticos',
'themedata_delete' => 'Eliminación de datos temáticos',
'themedata_download' => 'Descarga de datos temáticos',
'slide_index' => 'Rotación de la página de inicio',
'slide_saveinfo' => 'Página de adición / edición de la rotación',
'slide_save' => 'Añadir / editar a la rotación',
'slide_statusupdate' => 'Actualización del Estado de rotación',
'slide_delete' => 'Eliminación de la rotación',
'slide_detail' => 'Detalles de la rotación',
'screeningprice_index' => 'Precio de selección',
'screeningprice_save' => 'Filtrar precio añadir / editar',
'screeningprice_delete' => 'Eliminar el precio del filtro',
'region_index' => 'Gestión regional',
'region_save' => 'Área añadir / editar',
'region_statusupdate' => 'Actualización del Estado regional',
'region_delete' => 'Área eliminada',
'region_codedata' => 'Obtención de datos de numeración regional',
'express_index' => 'Gestión de mensajería',
'express_save' => 'Añadir / editar mensajería',
'express_delete' => 'Eliminación de mensajería',
'payment_index' => 'Método de pago',
'payment_saveinfo' => 'Página de instalación / edición del método de pago',
'payment_save' => 'Instalación / edición del método de pago',
'payment_delete' => 'Eliminación del método de pago',
'payment_install' => 'Instalación del método de pago',
'payment_statusupdate' => 'Actualización del Estado del método de pago',
'payment_uninstall' => 'Descarga del método de pago',
'payment_upload' => 'Método de pago cargado',
'payment_market' => 'Mercado de complementos de pago',
'quicknav_index' => 'Navegación rápida',
'quicknav_saveinfo' => 'Navegación rápida para agregar / editar páginas',
'quicknav_save' => 'Navegación rápida añadir / editar',
'quicknav_statusupdate' => 'Actualización del Estado de navegación rápida',
'quicknav_delete' => 'Navegación rápida eliminada',
'quicknav_detail' => 'Detalles de navegación rápida',
'design_index' => 'Diseño de página',
'design_saveinfo' => 'Diseño de página para agregar / editar páginas',
'design_save' => 'Diseño de página añadir / editar',
'design_statusupdate' => 'Actualización del Estado de diseño de la página',
'design_upload' => 'Importación de diseño de página',
'design_download' => 'Descarga de diseño de página',
'design_sync' => 'Página de inicio de sincronización de diseño de página',
'design_delete' => 'Diseño de página eliminado',
'design_market' => 'Plantilla de diseño de página Mercado',
'attachment_index' => 'Gestión de Anexos',
'attachment_detail' => 'Detalles de la gestión de Anexos',
'attachment_saveinfo' => 'Gestión de accesorios añadir / editar Página',
'attachment_save' => 'Gestión de anexos añadir / editar',
'attachment_delete' => 'Eliminación de la gestión de Anexos',
'attachmentcategory_index' => 'Clasificación de los anexos',
'attachmentcategory_save' => 'Clasificación de anexos añadir / editar',
'attachmentcategory_statusupdate' => 'Actualización del Estado del Anexo',
'attachmentcategory_delete' => 'Eliminación de la clasificación de Anexos',
]
],
'brand_index' => [
@ -1565,29 +1622,69 @@ return [
'app_index' => [
'name' => 'Gestión de teléfonos móviles',
'item' => [
'appconfig_index' => 'Configuración básica',
'appconfig_save' => 'Guardar configuración básica',
'apphomenav_index' => 'Navegación en la página de inicio',
'apphomenav_saveinfo' => 'Página de inicio navegación añadir / editar Página',
'apphomenav_save' => 'Navegación de página de inicio añadir / editar',
'apphomenav_statusupdate' => 'Actualización del Estado de navegación de la página de inicio',
'apphomenav_delete' => 'Eliminar la navegación de la página de inicio',
'apphomenav_detail' => 'Detalles de la navegación en la página de inicio',
'appcenternav_index' => 'Navegación del Centro de usuarios',
'appcenternav_saveinfo' => 'Navegación del Centro de usuarios para agregar / editar páginas',
'appcenternav_save' => 'Navegación del Centro de usuarios añadir / editar',
'appcenternav_statusupdate' => 'Actualización del Estado de navegación del Centro de usuarios',
'appcenternav_delete' => 'Eliminación de navegación del Centro de usuarios',
'appcenternav_detail' => 'Detalles de navegación del Centro de usuarios',
'appmini_index' => 'Lista de applets',
'appmini_created' => 'Generación de pequeños paquetes',
'appmini_delete' => 'Eliminación de paquetes pequeños',
'appmini_themeupload' => 'Carga del tema del applet',
'appmini_themesave' => 'Cambio de tema del applet',
'appmini_themedelete' => 'Cambio de tema del applet',
'appmini_themedownload' => 'Descarga del tema del applet',
'appmini_config' => 'Configuración del applet',
'appmini_save' => 'Guardar la configuración del applet',
'appconfig_index' => 'Configuración básica',
'appconfig_save' => 'Guardar configuración básica',
'appmini_index' => 'Lista de applets',
'appmini_created' => 'Generación de pequeños paquetes',
'appmini_delete' => 'Eliminación de paquetes pequeños',
'appmini_themeupload' => 'Carga del tema del applet',
'appmini_themesave' => 'Cambio de tema del applet',
'appmini_themedelete' => 'Cambio de tema del applet',
'appmini_themedownload' => 'Descarga del tema del applet',
'appmini_config' => 'Configuración del applet',
'appmini_save' => 'Guardar la configuración del applet',
'diy_index' => 'Decoración de bricolaje',
'diy_saveinfo' => 'Página añadir / editar decoración de bricolaje',
'diy_save' => 'Añadir / editar decoración de bricolaje',
'diy_statusupdate' => 'Actualización del Estado de decoración de bricolaje',
'diy_delete' => 'Decoración de bricolaje eliminada',
'diy_download' => 'Exportación de decoración de bricolaje',
'diy_upload' => 'Importación de decoración de bricolaje',
'diy_detail' => 'Detalles de la decoración de bricolaje',
'diy_preview' => 'Vista previa de la decoración de bricolaje',
'diy_market' => 'Plantilla de decoración de bricolaje Mercado',
'diy_apptabbar' => 'Menú inferior de la decoración de bricolaje',
'diyapi_init' => 'Decoración de bricolaje - iniciación pública',
'diyapi_attachmentcategory' => 'Decoración de bricolaje - Clasificación de accesorios',
'diyapi_attachmentlist' => 'Decoración de bricolaje - Lista de accesorios',
'diyapi_attachmentsave' => 'Decoración de bricolaje - conservación de accesorios',
'diyapi_attachmentdelete' => 'Decoración de bricolaje - Eliminación de accesorios',
'diyapi_attachmentupload' => 'Decoración de bricolaje - carga de accesorios',
'diyapi_attachmentcatch' => 'Decoración de bricolaje - descarga remota de accesorios',
'diyapi_attachmentscanuploaddata' => 'Decoración de bricolaje - Código de escaneo de accesorios para cargar datos',
'diyapi_attachmentmovecategory' => 'Decoración de bricolaje - Clasificación móvil de accesorios',
'diyapi_attachmentcategorysave' => 'Decoración de bricolaje - conservación clasificada de accesorios',
'diyapi_attachmentcategorydelete' => 'Decoración de bricolaje - Eliminación de la clasificación de accesorios',
'diyapi_goodslist' => 'Decoración de bricolaje - Lista de productos',
'diyapi_customviewlist' => 'Decoración de bricolaje - Lista de páginas personalizadas',
'diyapi_designlist' => 'Decoración de bricolaje - Lista de diseños de páginas',
'diyapi_articlelist' => 'Decoración de bricolaje - Lista de artículos',
'diyapi_brandlist' => 'Decoración de bricolaje - Lista de marcas',
'diyapi_diylist' => 'Decoración de bricolaje - Lista de decoración de bricolaje',
'diyapi_diydetail' => 'Decoración de bricolaje - detalles de la decoración de bricolaje',
'diyapi_diysave' => 'Decoración de bricolaje - conservación de la decoración de bricolaje',
'diyapi_diyupload' => 'Decoración de bricolaje - importación de decoración de bricolaje',
'diyapi_diydownload' => 'Decoración de bricolaje - exportación de decoración de bricolaje',
'diyapi_diyinstall' => 'Decoración de bricolaje - instalación de ENCOFRADOS de decoración de bricolaje',
'diyapi_diymarket' => 'Decoración de bricolaje - mercado de ENCOFRADOS de decoración de bricolaje',
'diyapi_goodsappointdata' => 'Decoración de bricolaje - datos de designación de productos',
'diyapi_goodsautodata' => 'Decoración de bricolaje - datos automáticos de la mercancía',
'diyapi_articleappointdata' => 'Decoración de bricolaje - datos especificados en el artículo',
'diyapi_articleautodata' => 'Decoración de bricolaje - datos automáticos del artículo',
'diyapi_userheaddata' => 'Decoración de bricolaje - datos de la cabeza del usuario',
'diyapi_custominit' => 'Decoración de bricolaje - iniciación personalizada',
'apphomenav_index' => 'Navegación en la página de inicio',
'apphomenav_saveinfo' => 'Página de inicio navegación añadir / editar Página',
'apphomenav_save' => 'Navegación de página de inicio añadir / editar',
'apphomenav_statusupdate' => 'Actualización del Estado de navegación de la página de inicio',
'apphomenav_delete' => 'Eliminar la navegación de la página de inicio',
'apphomenav_detail' => 'Detalles de la navegación en la página de inicio',
'appcenternav_index' => 'Navegación del Centro de usuarios',
'appcenternav_saveinfo' => 'Navegación del Centro de usuarios para agregar / editar páginas',
'appcenternav_save' => 'Navegación del Centro de usuarios añadir / editar',
'appcenternav_statusupdate' => 'Actualización del Estado de navegación del Centro de usuarios',
'appcenternav_delete' => 'Eliminación de navegación del Centro de usuarios',
'appcenternav_detail' => 'Detalles de navegación del Centro de usuarios',
]
],
'article_index' => [
@ -1621,6 +1718,16 @@ return [
'integrallog_detail' => 'Detalles del registro de puntos',
'smslog_index' => 'Registro de mensajes cortos',
'smslog_detail' => 'Detalles del registro de mensajes cortos',
'smslog_delete' => 'Eliminación del registro de mensajes cortos',
'smslog_alldelete' => 'Todos los registros de mensajes cortos se eliminan',
'emaillog_index' => 'Registro de correo',
'emaillog_detail' => 'Detalles del registro de correo',
'emaillog_delete' => 'Eliminación del registro de correo',
'emaillog_alldelete' => 'Eliminar todos los registros de correo',
'errorlog_index' => 'Registro de errores',
'errorlog_detail' => 'Detalles del registro de errores',
'errorlog_delete' => 'Eliminación del registro de errores',
'errorlog_alldelete' => 'Todos los registros de errores se eliminan',
]
],
'store_index' => [
@ -1637,6 +1744,7 @@ return [
'pluginsadmin_install' => 'Instalación de aplicaciones',
'pluginsadmin_uninstall' => 'Desinstalación de aplicaciones',
'pluginsadmin_sortsave' => 'Ordenar y guardar aplicaciones',
'pluginsadmin_market' => 'Mercado de plug - INS de aplicaciones',
'store_index' => 'Tienda de aplicaciones',
'packageinstall_index' => 'Página de instalación de paquetes de software',
'packageinstall_install' => 'Instalación de paquetes de software',

View File

@ -284,6 +284,7 @@ return [
'base_nav_title' => '品牌',
// 动态表格
'form_table' => [
'id' => '品牌ID',
'name' => '名称',
'describe' => '描述',
'logo' => 'LOGO',
@ -336,7 +337,9 @@ return [
'save_view_tips' => '请先保存再预览效果',
// 动态表格
'form_table' => [
'info' => '标题',
'id' => '数据ID',
'logo' => 'logo',
'name' => '名称',
'is_enable' => '是否启用',
'is_header' => '是否头部',
'is_footer' => '是否尾部',
@ -359,8 +362,8 @@ return [
// 动态表格
'form_table' => [
'id' => '数据ID',
'info' => '基础信息',
'info_placeholder' => '请输入名称',
'logo' => 'logo',
'name' => '名称',
'access_count' => '访问次数',
'is_enable' => '是否启用',
'is_header' => '是否含头部',
@ -888,7 +891,7 @@ return [
['name' => '未安装', 'type' => 1],
],
'base_nav_title' => '支付方式',
'base_upload_payment_name' => '上传支付',
'base_upload_payment_name' => '导入支付',
'base_nav_store_payment_name' => '更多支付方式下载',
'upload_top_list_tips' => [
[
@ -938,7 +941,7 @@ return [
['name' => '当前主题', 'type' => 'index'],
['name' => '主题安装', 'type' => 'upload'],
],
'base_upload_theme_name' => '上传主题',
'base_upload_theme_name' => '导入主题',
'base_nav_store_theme_name' => '更多主题下载',
'list_author_title' => '作者',
'list_version_title' => '适用版本',
@ -1082,11 +1085,7 @@ return [
],
// 基础导航
'base_nav_title' => '应用',
'base_nav_list' => [
['name' => '应用管理', 'type' => 'index'],
['name' => '上传应用', 'type' => 'upload'],
],
'base_upload_application_name' => '上传应用',
'base_upload_application_name' => '导入应用',
'base_nav_more_plugins_download_name' => '更多插件下载',
// 基础页面
'base_search_input_placeholder' => '请输入名称/描述',
@ -1207,6 +1206,52 @@ return [
],
],
// diy装修
'diy' => [
'nav_store_diy_name' => '更多diy模板下载',
'nav_apptabbar_name' => '底部菜单',
'upload_list_tips' => [
'1. 选择已下载的diy设计zip包',
'2. 导入将自动新增一条数据',
],
// 动态表格
'form_table' => [
'id' => '数据ID',
'md5_key' => '唯一标识',
'logo' => 'logo',
'name' => '名称',
'describe' => '描述',
'access_count' => '访问次数',
'is_enable' => '是否启用',
'add_time' => '创建时间',
'upd_time' => '更新时间',
],
],
// 附件
'attachment' => [
'base_nav_title' => '附件',
'category_admin_title' => '分类管理',
// 动态表格
'form_table' => [
'category_name' => '分类',
'type_name' => '类型',
'info' => '附件',
'original' => '原文件名',
'title' => '新文件名',
'size' => '大小',
'ext' => '后缀',
'url' => 'url地址 ',
'hash' => 'hash',
'add_time' => '创建时间',
],
],
// 附件分类
'attachmentcategory' => [
'base_nav_title' => '附件分类',
],
// 积分日志
'integrallog' => [
// 动态表格
@ -1280,6 +1325,23 @@ return [
],
],
// 错误日志
'errorlog' => [
// 动态表格
'form_table' => [
'message' => '错误信息',
'file' => '错误文件路径',
'line' => '错误文件行号',
'code' => '错误编码',
'ip' => '请求ip',
'uri' => 'uri地址段',
'request_params' => '请求参数',
'memory_use' => '使用内存',
'tsc' => '耗时(秒)',
'add_time' => '添加时间',
],
],
// sql控制台
'sqlconsole' => [
'top_tips' => 'PS非开发人员请不要随意执行任何SQL语句操作可能导致将整个系统数据库被删除。',
@ -1461,75 +1523,87 @@ return [
'navigation_index' => [
'name' => '网站',
'item' => [
'navigation_index' => '导航管理',
'navigation_save' => '导航添加/编辑',
'navigation_delete' => '导航删除',
'navigation_statusupdate' => '导航状态更新',
'customview_index' => '自定义页面',
'customview_saveinfo' => '自定义页面添加/编辑页面',
'customview_save' => '自定义页面添加/编辑',
'customview_delete' => '自定义页面删除',
'customview_statusupdate' => '自定义页面状态更新',
'customview_detail' => '自定义页面详情',
'link_index' => '友情链接',
'link_saveinfo' => '友情链接添加/编辑页面',
'link_save' => '友情链接添加/编辑',
'link_delete' => '友情链接删除',
'link_statusupdate' => '友情链接状态更新',
'link_detail' => '友情链接详情',
'themeadmin_index' => '主题管理',
'themeadmin_save' => '主题管理添加/编辑',
'themeadmin_upload' => '主题上传安装',
'themeadmin_delete' => '主题删除',
'themeadmin_download' => '主题下载',
'themedata_index' => '主题数据',
'themedata_saveinfo' => '主题数据添加/编辑页面',
'themedata_save' => '主题数据添加/编辑',
'themedata_upload' => '主题数据上传',
'themedata_delete' => '主题数据删除',
'themedata_download' => '主题数据下载',
'themedata_detail' => '主题数据详情',
'themedata_goodssearch' => '主题数据商品搜索',
'themedata_articlesearch' => '主题数据文章搜索',
'slide_index' => '首页轮播',
'slide_saveinfo' => '轮播添加/编辑页面',
'slide_save' => '轮播添加/编辑',
'slide_statusupdate' => '轮播状态更新',
'slide_delete' => '轮播删除',
'slide_detail' => '轮播详情',
'screeningprice_index' => '筛选价格',
'screeningprice_save' => '筛选价格添加/编辑',
'screeningprice_delete' => '筛选价格删除',
'region_index' => '地区管理',
'region_save' => '地区添加/编辑',
'region_statusupdate' => '地区状态更新',
'region_delete' => '地区删除',
'region_codedata' => '获取地区编号数据',
'express_index' => '快递管理',
'express_save' => '快递添加/编辑',
'express_delete' => '快递删除',
'payment_index' => '支付方式',
'payment_saveinfo' => '支付方式安装/编辑页面',
'payment_save' => '支付方式安装/编辑',
'payment_delete' => '支付方式删除',
'payment_install' => '支付方式安装',
'payment_statusupdate' => '支付方式状态更新',
'payment_uninstall' => '支付方式卸载',
'payment_upload' => '支付方式上传',
'quicknav_index' => '快捷导航',
'quicknav_saveinfo' => '快捷导航添加/编辑页面',
'quicknav_save' => '快捷导航添加/编辑',
'quicknav_statusupdate' => '快捷导航状态更新',
'quicknav_delete' => '快捷导航删除',
'quicknav_detail' => '快捷导航详情',
'design_index' => '页面设计',
'design_saveinfo' => '页面设计添加/编辑页面',
'design_save' => '页面设计添加/编辑',
'design_statusupdate' => '页面设计状态更新',
'design_upload' => '页面设计导入',
'design_download' => '页面设计下载',
'design_sync' => '页面设计同步首页',
'design_delete' => '页面设计删除',
'navigation_index' => '导航管理',
'navigation_save' => '导航添加/编辑',
'navigation_delete' => '导航删除',
'navigation_statusupdate' => '导航状态更新',
'customview_index' => '自定义页面',
'customview_saveinfo' => '自定义页面添加/编辑页面',
'customview_save' => '自定义页面添加/编辑',
'customview_delete' => '自定义页面删除',
'customview_statusupdate' => '自定义页面状态更新',
'customview_detail' => '自定义页面详情',
'link_index' => '友情链接',
'link_saveinfo' => '友情链接添加/编辑页面',
'link_save' => '友情链接添加/编辑',
'link_delete' => '友情链接删除',
'link_statusupdate' => '友情链接状态更新',
'link_detail' => '友情链接详情',
'themeadmin_index' => '主题管理',
'themeadmin_save' => '主题管理添加/编辑',
'themeadmin_upload' => '主题上传安装',
'themeadmin_delete' => '主题删除',
'themeadmin_download' => '主题下载',
'themeadmin_market' => '主题模板市场',
'themedata_index' => '主题数据',
'themedata_saveinfo' => '主题数据添加/编辑页面',
'themedata_save' => '主题数据添加/编辑',
'themedata_upload' => '主题数据上传',
'themedata_delete' => '主题数据删除',
'themedata_download' => '主题数据下载',
'themedata_detail' => '主题数据详情',
'themedata_goodssearch' => '主题数据商品搜索',
'themedata_articlesearch' => '主题数据文章搜索',
'slide_index' => '首页轮播',
'slide_saveinfo' => '轮播添加/编辑页面',
'slide_save' => '轮播添加/编辑',
'slide_statusupdate' => '轮播状态更新',
'slide_delete' => '轮播删除',
'slide_detail' => '轮播详情',
'screeningprice_index' => '筛选价格',
'screeningprice_save' => '筛选价格添加/编辑',
'screeningprice_delete' => '筛选价格删除',
'region_index' => '地区管理',
'region_save' => '地区添加/编辑',
'region_statusupdate' => '地区状态更新',
'region_delete' => '地区删除',
'region_codedata' => '获取地区编号数据',
'express_index' => '快递管理',
'express_save' => '快递添加/编辑',
'express_delete' => '快递删除',
'payment_index' => '支付方式',
'payment_saveinfo' => '支付方式安装/编辑页面',
'payment_save' => '支付方式安装/编辑',
'payment_delete' => '支付方式删除',
'payment_install' => '支付方式安装',
'payment_statusupdate' => '支付方式状态更新',
'payment_uninstall' => '支付方式卸载',
'payment_upload' => '支付方式上传',
'payment_market' => '支付插件市场',
'quicknav_index' => '快捷导航',
'quicknav_saveinfo' => '快捷导航添加/编辑页面',
'quicknav_save' => '快捷导航添加/编辑',
'quicknav_statusupdate' => '快捷导航状态更新',
'quicknav_delete' => '快捷导航删除',
'quicknav_detail' => '快捷导航详情',
'design_index' => '页面设计',
'design_saveinfo' => '页面设计添加/编辑页面',
'design_save' => '页面设计添加/编辑',
'design_statusupdate' => '页面设计状态更新',
'design_upload' => '页面设计导入',
'design_download' => '页面设计下载',
'design_sync' => '页面设计同步首页',
'design_delete' => '页面设计删除',
'design_market' => '页面设计模板市场',
'attachment_index' => '附件管理',
'attachment_detail' => '附件管理详情',
'attachment_saveinfo' => '附件管理添加/编辑页面',
'attachment_save' => '附件管理添加/编辑',
'attachment_delete' => '附件管理删除',
'attachmentcategory_index' => '附件分类',
'attachmentcategory_save' => '附件分类添加/编辑',
'attachmentcategory_statusupdate' => '附件状态更新',
'attachmentcategory_delete' => '附件分类删除',
]
],
'brand_index' => [
@ -1569,29 +1643,69 @@ return [
'app_index' => [
'name' => '手机',
'item' => [
'appconfig_index' => '基础配置',
'appconfig_save' => '基础配置保存',
'apphomenav_index' => '首页导航',
'apphomenav_saveinfo' => '首页导航添加/编辑页面',
'apphomenav_save' => '首页导航添加/编辑',
'apphomenav_statusupdate' => '首页导航状态更新',
'apphomenav_delete' => '首页导航删除',
'apphomenav_detail' => '首页导航详情',
'appcenternav_index' => '用户中心导航',
'appcenternav_saveinfo' => '用户中心导航添加/编辑页面',
'appcenternav_save' => '用户中心导航添加/编辑',
'appcenternav_statusupdate' => '用户中心导航状态更新',
'appcenternav_delete' => '用户中心导航删除',
'appcenternav_detail' => '用户中心导航详情',
'appmini_index' => '小程序列表',
'appmini_created' => '小程序包生成',
'appmini_delete' => '小程序包删除',
'appmini_themeupload' => '小程序主题上传',
'appmini_themesave' => '小程序主题切换',
'appmini_themedelete' => '小程序主题切换',
'appmini_themedownload' => '小程序主题下载',
'appmini_config' => '小程序配置',
'appmini_save' => '小程序配置保存',
'appconfig_index' => '基础配置',
'appconfig_save' => '基础配置保存',
'appmini_index' => '小程序列表',
'appmini_created' => '小程序包生成',
'appmini_delete' => '小程序包删除',
'appmini_themeupload' => '小程序主题上传',
'appmini_themesave' => '小程序主题切换',
'appmini_themedelete' => '小程序主题切换',
'appmini_themedownload' => '小程序主题下载',
'appmini_config' => '小程序配置',
'appmini_save' => '小程序配置保存',
'diy_index' => 'DIY装修',
'diy_saveinfo' => 'DIY装修添加/编辑页面',
'diy_save' => 'DIY装修添加/编辑',
'diy_statusupdate' => 'DIY装修状态更新',
'diy_delete' => 'DIY装修删除',
'diy_download' => 'DIY装修导出',
'diy_upload' => 'DIY装修导入',
'diy_detail' => 'DIY装修详情',
'diy_preview' => 'DIY装修预览',
'diy_market' => 'DIY装修模板市场',
'diy_apptabbar' => 'DIY装修底部菜单',
'diyapi_init' => 'DIY装修-公共初始化',
'diyapi_attachmentcategory' => 'DIY装修-附件分类',
'diyapi_attachmentlist' => 'DIY装修-附件列表',
'diyapi_attachmentsave' => 'DIY装修-附件保存',
'diyapi_attachmentdelete' => 'DIY装修-附件删除',
'diyapi_attachmentupload' => 'DIY装修-附件上传',
'diyapi_attachmentcatch' => 'DIY装修-附件远程下载',
'diyapi_attachmentscanuploaddata' => 'DIY装修-附件扫码上传数据',
'diyapi_attachmentmovecategory' => 'DIY装修-附件移动分类',
'diyapi_attachmentcategorysave' => 'DIY装修-附件分类保存',
'diyapi_attachmentcategorydelete' => 'DIY装修-附件分类删除',
'diyapi_goodslist' => 'DIY装修-商品列表',
'diyapi_customviewlist' => 'DIY装修-自定义页面列表',
'diyapi_designlist' => 'DIY装修-页面设计列表',
'diyapi_articlelist' => 'DIY装修-文章列表',
'diyapi_brandlist' => 'DIY装修-品牌列表',
'diyapi_diylist' => 'DIY装修-DIY装修列表',
'diyapi_diydetail' => 'DIY装修-DIY装修详情',
'diyapi_diysave' => 'DIY装修-DIY装修保存',
'diyapi_diyupload' => 'DIY装修-DIY装修导入',
'diyapi_diydownload' => 'DIY装修-DIY装修导出',
'diyapi_diyinstall' => 'DIY装修-DIY装修模板安装',
'diyapi_diymarket' => 'DIY装修-DIY装修模板市场',
'diyapi_goodsappointdata' => 'DIY装修-商品指定数据',
'diyapi_goodsautodata' => 'DIY装修-商品自动数据',
'diyapi_articleappointdata' => 'DIY装修-文章指定数据',
'diyapi_articleautodata' => 'DIY装修-文章自动数据',
'diyapi_userheaddata' => 'DIY装修-用户头部数据',
'diyapi_custominit' => 'DIY装修-自定义初始化',
'apphomenav_index' => '首页导航',
'apphomenav_saveinfo' => '首页导航添加/编辑页面',
'apphomenav_save' => '首页导航添加/编辑',
'apphomenav_statusupdate' => '首页导航状态更新',
'apphomenav_delete' => '首页导航删除',
'apphomenav_detail' => '首页导航详情',
'appcenternav_index' => '用户中心导航',
'appcenternav_saveinfo' => '用户中心导航添加/编辑页面',
'appcenternav_save' => '用户中心导航添加/编辑',
'appcenternav_statusupdate' => '用户中心导航状态更新',
'appcenternav_delete' => '用户中心导航删除',
'appcenternav_detail' => '用户中心导航详情',
]
],
'article_index' => [
@ -1625,6 +1739,16 @@ return [
'integrallog_detail' => '积分日志详情',
'smslog_index' => '短信日志',
'smslog_detail' => '短信日志详情',
'smslog_delete' => '短信日志删除',
'smslog_alldelete' => '短信日志全部删除',
'emaillog_index' => '邮件日志',
'emaillog_detail' => '邮件日志详情',
'emaillog_delete' => '邮件日志删除',
'emaillog_alldelete' => '邮件日志全部删除',
'errorlog_index' => '错误日志',
'errorlog_detail' => '错误日志详情',
'errorlog_delete' => '错误日志删除',
'errorlog_alldelete' => '错误日志全部删除',
]
],
'store_index' => [
@ -1641,6 +1765,7 @@ return [
'pluginsadmin_install' => '应用安装',
'pluginsadmin_uninstall' => '应用卸载',
'pluginsadmin_sortsave' => '应用排序保存',
'pluginsadmin_market' => '应用插件市场',
'store_index' => '应用商店',
'packageinstall_index' => '软件包安装页面',
'packageinstall_install' => '软件包安装',

View File

@ -23,7 +23,7 @@
<span>{{:MyLang('agreement.view_detail_name')}}</span>
</a>
</div>
<textarea class="am-radius am-validate" name="{{$data.common_agreement_userlogout.only_tag}}" maxlength="105000" id="editor-tag" data-validation-message="{{$data.common_agreement_userlogout.error_tips}}">{{if !empty($data)}}{{$data.common_agreement_userlogout.value|raw}}{{/if}}</textarea>
<textarea class="am-radius am-validate" name="{{$data.common_agreement_userlogout.only_tag}}" id="editor-tag" data-validation-message="{{$data.common_agreement_userlogout.error_tips}}">{{if !empty($data)}}{{$data.common_agreement_userlogout.value|raw}}{{/if}}</textarea>
</div>
</div>

View File

@ -22,7 +22,7 @@
<span>{{:MyLang('agreement.view_detail_name')}}</span>
</a>
</div>
<textarea class="am-radius am-validate" name="{{$data.common_agreement_userprivacy.only_tag}}" maxlength="105000" id="editor-tag" data-validation-message="{{$data.common_agreement_userprivacy.error_tips}}">{{if !empty($data)}}{{$data.common_agreement_userprivacy.value|raw}}{{/if}}</textarea>
<textarea class="am-radius am-validate" name="{{$data.common_agreement_userprivacy.only_tag}}" id="editor-tag" data-validation-message="{{$data.common_agreement_userprivacy.error_tips}}">{{if !empty($data)}}{{$data.common_agreement_userprivacy.value|raw}}{{/if}}</textarea>
</div>
</div>

View File

@ -22,7 +22,7 @@
<span>{{:MyLang('agreement.view_detail_name')}}</span>
</a>
</div>
<textarea class="am-radius am-validate" name="{{$data.common_agreement_userregister.only_tag}}" maxlength="105000" id="editor-tag" data-validation-message="{{$data.common_agreement_userregister.error_tips}}">{{if !empty($data)}}{{$data.common_agreement_userregister.value|raw}}{{/if}}</textarea>
<textarea class="am-radius am-validate" name="{{$data.common_agreement_userregister.only_tag}}" id="editor-tag" data-validation-message="{{$data.common_agreement_userregister.error_tips}}">{{if !empty($data)}}{{$data.common_agreement_userregister.value|raw}}{{/if}}</textarea>
</div>
</div>
<div class="am-form-popup-submit">

View File

@ -31,6 +31,45 @@
<div class="nav-content">
<!-- 基础配置 -->
<div class="item am-active" data-key="base-config-title">
<div class="am-form-group">
<label class="am-block">{{$data.common_app_is_index_data_diy_mode.name}}<span class="am-form-group-label-tips">{{$data.common_app_is_index_data_diy_mode.describe}}</span></label>
<div class="am-radio-group">
<div>
{{foreach :MyConst('common_is_text_list') as $v}}
<label class="am-radio-inline">
<input type="radio" value="{{$v.id}}" name="{{$data.common_app_is_index_data_diy_mode.only_tag}}" data-validation-message="{{$data.common_app_is_index_data_diy_mode.error_tips}}" required {{if isset($data['common_app_is_index_data_diy_mode']['value']) and $data['common_app_is_index_data_diy_mode']['value'] eq $v['id']}}checked{{/if}} data-am-ucheck>{{$v.name}}
</label>
{{/foreach}}
<div class="diy-list-select am-inline-block am-margin-left-sm">
<select name="{{$data.common_app_index_data_diy_mode_value.only_tag}}" class="am-radius chosen-select" data-placeholder="{{:MyLang('please_select_tips')}}" data-validation-message="{{$data.common_app_index_data_diy_mode_value.error_tips}}">
<option value="">{{:MyLang('please_select_tips')}}</option>
{{if !empty($diy_list)}}
{{foreach $diy_list as $v}}
<option value="{{$v.id}}" {{if !empty($data['common_app_index_data_diy_mode_value']['value']) and $data['common_app_index_data_diy_mode_value']['value'] eq $v['id']}}selected{{/if}}>{{$v.name}}</option>
{{/foreach}}
{{/if}}
</select>
</div>
</div>
</div>
</div>
<!-- <div class="am-inline-block">
<select name="{{$data.common_app_index_data_diy_mode_value.only_tag}}" class="am-radius chosen-select" data-placeholder="{{:MyLang('please_select_tips')}}" data-validation-message="{{$data.common_app_index_data_diy_mode_value.error_tips}}">
<option value="">{{:MyLang('please_select_tips')}}</option>
{{if !empty($site_default_index_data_list)}}
{{foreach $site_default_index_data_list as $v}}
{{if !empty($v['data']) and is_array($v['data']) and !empty($v['name'])}}
<optgroup label="{{$v.name}}" class="am-color-ccc">
{{foreach $v.data as $vs}}
<option value="{{$vs.type}}|{{$vs.value}}" {{if !empty($data['common_app_index_data_diy_mode_value']['value']) and $data['common_app_index_data_diy_mode_value']['value'] eq $vs['type'].'|'.$vs['value']}}selected{{/if}}>{{$vs.name}}</option>
{{/foreach}}
</optgroup>
{{/if}}
{{/foreach}}
{{/if}}
</select>
</div> -->
<div class="am-form-group">
<label class="am-block">{{$data.common_app_is_use_mobile_detail.name}}<span class="am-form-group-label-tips">{{$data.common_app_is_use_mobile_detail.describe}}</span></label>
<div class="am-radio-group">

View File

@ -72,7 +72,7 @@
<div class="am-form-group">
<label>{{:MyLang('common_service.article.form_item_content_title')}}<span class="am-form-group-label-tips-must">*</span></label>
<textarea class="am-radius am-validate" name="content" rows="5" minlength="10" maxlength="105000" {{if !IsMobile()}}id="editor-tag" data-url="{{:MyUrl('admin/ueditor/index', ['path_type'=>'article'])}}" placeholder="{{:MyLang('common_service.article.form_item_content_message')}}" {{else /}} placeholder="{{:MyLang('common_service.article.form_item_content_placeholder')}}" {{/if}} data-validation-message="{{:MyLang('common_service.article.form_item_content_message')}}" required>{{if !empty($data['content'])}}{{$data.content}}{{/if}}</textarea>
<textarea class="am-radius am-validate" name="content" rows="5" minlength="10" {{if !IsMobile()}}id="editor-tag" data-url="{{:MyUrl('admin/ueditor/index', ['path_type'=>'article'])}}" placeholder="{{:MyLang('common_service.article.form_item_content_message')}}" {{else /}} placeholder="{{:MyLang('common_service.article.form_item_content_placeholder')}}" {{/if}} data-validation-message="{{:MyLang('common_service.article.form_item_content_message')}}" required>{{if !empty($data['content'])}}{{$data.content}}{{/if}}</textarea>
</div>
<!-- 插件扩展数据 start -->

View File

@ -0,0 +1,2 @@
<!-- 继承公共的 form -->
{{extend name="../../../module/view/form_table/detail" /}}

View File

@ -0,0 +1,16 @@
<!-- 继承公共的 form -->
{{extend name="../../../module/view/form_table/form" /}}
<!-- 表单顶部操作栏 -->
{{block name="form_operate_top"}}
<!-- 是否有附件分类页面权限 -->
{{if AdminIsPower('attachmentcategory', 'index')}}
<button type="button" class="am-btn am-btn-primary am-btn-xs am-radius submit-popup" data-url="{{:MyUrl('admin/attachmentcategory/index')}}" data-title="{{:MyLang('attachment.category_admin_title')}}" data-full-max="1" data-full-max-size="lg">
<i class="iconfont icon-type-manage am-show-sm-only"></i>
<span>{{:MyLang('attachment.category_admin_title')}}</span>
</button>
{{/if}}
<!-- 父级内容 -->
{__block__}
{{/block}}

View File

@ -0,0 +1,13 @@
{{if !empty($module_data['type']) and !empty($module_data['url'])}}
{{switch $module_data.type}}
{{case image|scrawl|remote}}
<img src="{{$module_data.url}}" data-is-download="1" data-download-name="{{if isset($module_data['original'])}}{{$module_data.original}}{{/if}}" class="am-radius am-block common-annex-view-event" width="40" height="40" />
{{/case}}
{{case file}}
<span class="am-color-blue common-annex-download-event" data-value="{{$module_data.url}}" data-name="{{if isset($module_data['original'])}}{{$module_data.original}}{{/if}}" data-am-loading="{spinner: 'circle-o-notch', loadingText:'{{:MyLang('download_title')}}'}">{{:MyLang('download_title')}}</span>
{{/case}}
{{case video}}
<video src="{{$module_data.url}}" data-is-download="1" data-download-name="{{if isset($module_data['original'])}}{{$module_data.original}}{{/if}}" class="am-radius am-block common-annex-view-event" data-type="video" width="40" height="40"></video>
{{/case}}
{{/switch}}
{{/if}}

View File

@ -0,0 +1,13 @@
<!-- 操作栏 -->
<button type="button" class="am-btn am-btn-default am-btn-xs am-radius am-btn-block submit-popup" data-url="{{:MyUrl('admin/attachment/detail', ['id'=>$module_data['id']])}}" data-title="{{:MyLang('detail_title')}}">
<i class="am-icon-eye"></i>
<span>{{:MyLang('detail_title')}}</span>
</button>
<button type="button" class="am-btn am-btn-secondary am-btn-xs am-radius am-btn-block submit-modal" data-url="{{:MyUrl('admin/attachment/saveinfo', ['id'=>$module_data['id']])}}" data-title="{{:MyLang('edit_title')}}" data-width="400" data-height="250">
<i class="am-icon-edit"></i>
<span>{{:MyLang('edit_title')}}</span>
</button>
<button type="button" class="am-btn am-btn-danger am-btn-xs am-radius am-btn-block submit-delete" data-url="{{:MyUrl('admin/attachment/delete')}}" data-id="{{$module_data.id}}" data-key="ids">
<i class="iconfont icon-delete"></i>
<span>{{:MyLang('delete_title')}}</span>
</button>

View File

@ -0,0 +1,31 @@
{{:ModuleInclude('public/header')}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<!-- form start -->
<form class="am-form form-validation am-form-full-screen am-form-popup-fixed" action="{{:MyUrl('admin/attachment/save')}}" method="POST" request-type="ajax-reload" request-value="parent">
<div class="am-form-group">
<label>{{:MyLang('common_service.attachment.form_item_original')}}</label>
<input type="text" name="original" class="am-radius" placeholder="{{:MyLang('common_service.attachment.form_item_original_message')}}" data-validation-message="{{:MyLang('common_service.attachment.form_item_original_message')}}" value="{{if !empty($data['original'])}}{{$data.original}}{{/if}}" required />
</div>
<div class="am-form-popup-submit">
<input type="hidden" name="id" value="{{if !empty($data)}}{{$data.id}}{{/if}}" />
<button type="button" class="am-btn am-btn-warning am-radius am-btn-xs am-margin-right-lg" data-am-modal-close>
<i class="am-icon-paint-brush"></i>
<span>{{:MyLang('cancel_title')}}</span>
</button>
<button type="submit" class="am-btn am-btn-primary am-radius am-btn-xs btn-loading-example" data-am-loading="{spinner: 'circle-o-notch', loadingText:'{{:MyLang('confirm_title')}}'}">
<i class="am-icon-check"></i>
<span>{{:MyLang('confirm_title')}}</span>
</button>
</div>
</form>
<!-- form end -->
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{:ModuleInclude('public/footer')}}

View File

@ -0,0 +1,76 @@
{{:ModuleInclude('public/header')}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<!-- operation start -->
<div class="am-g">
<button class="am-btn am-btn-primary am-radius am-btn-xs tree-submit-add" data-am-modal="{target: '#data-save-win', width: 400, height: 350}">
<i class="iconfont icon-btn-add am-show-sm-only"></i>
<span>{{:MyLang('add_title')}}</span>
</button>
</div>
<!-- operation end -->
<!-- save win start -->
<div class="am-modal am-modal-no-btn" tabindex="-1" id="data-save-win">
<div class="am-modal-dialog am-radius am-nbfc">
<div class="am-modal-hd">
<span data-add-title="{{:MyLang('attachmentcategory.base_nav_title')}}{{:MyLang('add_title')}}" data-edit-title="{{:MyLang('attachmentcategory.base_nav_title')}}{{:MyLang('edit_title')}}">{{:MyLang('attachmentcategory.base_nav_title')}}{{:MyLang('add_title')}}</span>
<a href="javascript: void(0)" class="am-close am-close-spin" data-am-modal-close>&times;</a>
</div>
<div class="am-modal-bd">
<div class="am-padding-sm">
<!-- form start -->
<form class="am-form form-validation am-form-popup-fixed" action="{{:MyUrl('admin/attachmentcategory/save')}}" method="POST" request-type="ajax-fun" request-value="TreeFormSaveBack">
<div class="am-form-group row">
<label>{{:MyLang('common_service.attachmentcategory.form_item_name')}}<span class="am-form-group-label-tips-must">*</span></label>
<input type="text" placeholder="{{:MyLang('common_service.attachmentcategory.form_item_name_message')}}" name="name" minlength="1" maxlength="60" data-validation-message="{{:MyLang('common_service.attachmentcategory.form_item_name_message')}}" class="am-radius" required />
</div>
<div class="am-form-group row">
<label>{{:MyLang('common_service.attachmentcategory.form_item_path')}}<span class="am-form-group-label-tips-must">*</span></label>
<input type="text" placeholder="{{:MyLang('common_service.attachmentcategory.form_item_path_message')}}" name="path" minlength="1" maxlength="60" data-validation-message="{{:MyLang('common_service.attachmentcategory.form_item_path_message')}}" class="am-radius" required />
</div>
{{:ModuleInclude('lib/sort', ['is_row'=>1])}}
{{:ModuleInclude('lib/is_enable', ['is_row'=>1])}}
<div class="am-form-popup-submit">
<input type="hidden" name="id" />
<input type="hidden" name="pid" />
<button type="button" class="am-btn am-btn-warning am-radius am-btn-xs am-margin-right-lg" data-am-modal-close>
<i class="am-icon-paint-brush"></i>
<span>{{:MyLang('cancel_title')}}</span>
</button>
<button type="submit" class="am-btn am-btn-primary am-radius am-btn-xs btn-loading-example" data-am-loading="{spinner: 'circle-o-notch', loadingText:'{{:MyLang('save_title')}}'}">
<i class="am-icon-save"></i>
<span>{{:MyLang('save_title')}}</span>
</button>
</div>
</form>
<!-- form end -->
</div>
</div>
</div>
</div>
<!-- save win end -->
<!-- list start -->
<div id="tree" class="am-margin-top-sm" data-head='[{"name":"ID","field":"id"},{"name":"{{:MyLang("name_title")}}","field":"name","is_arrow":"1","value_style":{"style":"color:#999","value_style_key":"is_enable","value_style_key_status":"0"}},{"name":"{{:MyLang("form_is_enable_title")}}","field":"is_enable","type":"status"},{"name":"{{:MyLang("common_service.attachmentcategory.form_item_path")}}","field":"path"},{"name":"{{:MyLang("operate_title")}}","type":"operate"}]' data-additional='[{"field":"path", "value":"", "type":"input"}]' data-node-url="{{:MyUrl('admin/attachmentcategory/getnodeson')}}" data-del-url="{{:MyUrl('admin/attachmentcategory/delete')}}" data-popup-tag="#data-save-win" data-status-url="{{:MyUrl('admin/attachmentcategory/statusupdate')}}" data-modal-config="{width: 400, height: 350}" data-rank="2">
{{:ModuleInclude('public/loading')}}
</div>
<!-- list end -->
</div>
</div>
<!-- right content end -->
<!-- footer start -->
{{:ModuleInclude('public/footer')}}
<script type="text/javascript">
// 初始化
Tree(0, $('#tree').data('node-url'));
// 回调处理
function TreeFormSaveBack(e)
{
TreeFormSaveBackHandle(e);
}
</script>

View File

@ -242,6 +242,17 @@
</div>
{{/if}}
</div>
<div class="am-form-group">
<label class="am-block">{{$data.common_token_created_rules.name}}<span class="am-form-group-label-tips">{{$data.common_token_created_rules.describe}}</span></label>
<div class="am-checkbox-group">
{{foreach $common_token_created_rules_list as $v}}
<label class="am-checkbox-inline">
<input type="checkbox" name="{{$data.common_token_created_rules.only_tag}}" value="{{$v.value}}" {{if isset($data['common_token_created_rules']['value']) and in_array($v['value'], $data['common_token_created_rules']['value'])}}checked{{/if}} data-validation-message="{{$data.common_token_created_rules.error_tips}}" data-am-ucheck /> {{$v.name}}
</label>
{{/foreach}}
</div>
</div>
</div>
</div>
<div class="am-form-popup-submit">

View File

@ -0,0 +1,2 @@
<!-- 继承公共的 form -->
{{extend name="../../../module/view/form_table/detail" /}}

View File

@ -12,54 +12,93 @@
{{/if}}
<!-- 导入 -->
{{if AdminIsPower('design', 'upload')}}
<button type="button" class="am-btn am-btn-default-plain am-btn-xs am-radius" data-am-modal="{target: '#popup-design-upload'}">
<button type="button" class="am-btn am-btn-default-plain am-btn-xs am-radius package-install-open-upload-submit" data-am-modal="{target: '#popup-design-upload'}">
<i class="iconfont icon-upload am-show-sm-only"></i>
<span>{{:MyLang('import_title')}}</span>
</button>
{{/if}}
<!-- 父级内容 -->
{__block__}
{{if $is_system_show_base eq 1 and !empty($store_design_url)}}
<a class="am-margin-left-sm" href="{{$store_design_url}}" target="_blank">{{:MyLang('design.nav_store_design_name')}} <i class="am-icon-external-link"></i></a>
{{if $is_system_show_base eq 1 and AdminIsPower('packageinstall', 'index') and !empty($store_design_url)}}
<a class="am-margin-left-sm" href="{{$store_design_url}}" target="_blank">
<i class="iconfont icon-download-btn"></i>
<span class="am-hide-sm-only am-margin-left-xs">{{:MyLang('design.nav_store_design_name')}}</span>
</a>
{{/if}}
{{/block}}
<!-- 扩展 -->
{{block name="form_extend"}}
<!-- upload start -->
<div class="am-popup am-radius" id="popup-design-upload">
<div class="am-popup am-radius am-popup-full-max-xl package-install-list-popup-container" id="popup-design-upload">
<div class="am-popup-inner">
<div class="am-popup-hd">
<h4 class="am-popup-title">{{:MyLang('import_title')}}</h4>
<span data-am-modal-close class="am-close">&times;</span>
</div>
<div class="am-popup-bd">
<!-- win form start -->
<form class="am-form form-validation am-form-popup-fixed am-upload-file" action="{{:MyUrl('admin/design/upload')}}" method="POST" request-type="ajax-reload" enctype="multipart/form-data">
<div class="am-form-group am-flex-1">
<div class="am-form-file">
<button type="button" class="am-btn am-btn-default am-btn-xl am-radius"><i class="iconfont icon-upload-file"></i></button>
<input type="file" name="file" class="file-event" data-tips-tag="#form-payment-tips" data-validation-message="{{:MyLang('form_upload_file_message')}}" accept=".zip" multiple required />
<div id="form-payment-tips" class="am-margin-top-xs"></div>
{{if is_array(MyLang('design.upload_list_tips'))}}
<div class="tips am-text-xs am-color-ccc am-margin-top-sm">
<p class="am-margin-top-xs">{{:implode('</p><p class="am-margin-top-xs">', MyLang('design.upload_list_tips'))}}</p>
<div class="am-popup-bd am-padding-0">
{{if $is_not_bind_accounts eq 1}}
<div class="am-padding-xl am-margin-top-xl am-padding-bottom-xl am-text-center">
<button type="button" class="am-btn am-btn-primary am-radius am-btn-xs am-margin-left-xs am-icon-gg store-accounts-event"> {{:MyLang('store_bind_accounts_name')}}</button>
<p class="am-color-grey am-margin-top-sm">{{:MyLang('store_bind_accounts_tips')}}</p>
<p class="am-color-yellow am-margin-top-xl">{{:MyLang('store_already_bind_accounts_tips')}}</p>
</div>
{{else /}}
{{:ModuleInclude('public/detail_nav_switch_tabs', [
'nav_data' => [
[
'name' => MyLang('local_import_title'),
'key' => 'upload',
],
[
'name' => MyLang('template_market_title'),
'key' => 'market',
],
]
])}}
<div class="detail-content-switch-data-item">
<!-- 本地导入 -->
<div class="item am-ht-auto am-active" data-key="upload">
<form class="am-form form-validation am-form-popup-fixed am-upload-file" action="{{:MyUrl('admin/design/upload')}}" method="POST" request-type="ajax-reload" enctype="multipart/form-data">
<div class="am-form-group am-flex-1">
<div class="am-form-file">
<button type="button" class="am-btn am-btn-default am-btn-xl am-radius"><i class="iconfont icon-upload-file"></i></button>
<input type="file" name="file" class="file-event" data-tips-tag="#form-upload-file-tips" data-validation-message="{{:MyLang('form_upload_file_message')}}" accept=".zip" multiple required />
<div id="form-upload-file-tips" class="am-margin-top-xs"></div>
{{if is_array(MyLang('design.upload_list_tips'))}}
<div class="tips am-text-xs am-color-ccc am-margin-top-sm">
<p class="am-margin-top-xs">{{:implode('</p><p class="am-margin-top-xs">', MyLang('design.upload_list_tips'))}}</p>
</div>
{{/if}}
</div>
</div>
{{/if}}
<div class="am-form-popup-submit">
<button type="button" class="am-btn am-btn-warning am-radius am-btn-xs am-margin-right-lg" data-am-modal-close>
<i class="am-icon-paint-brush"></i>
<span>{{:MyLang('cancel_title')}}</span>
</button>
<button type="submit" class="am-btn am-btn-primary am-radius am-btn-xs btn-loading-example" data-am-loading="{spinner: 'circle-o-notch', loadingText:'{{:MyLang('confirm_title')}}'}">
<i class="am-icon-save"></i>
<span>{{:MyLang('confirm_title')}}</span>
</button>
</div>
</form>
</div>
<!-- 模板市场 -->
<div class="item am-ht-auto" data-key="market">
{{:ModuleInclude('public/market/index', [
'type' => 'design',
'back_url' => MyUrl('admin/design/saveinfo', ['id'=>0]),
'back_url_field' => 'id',
'back_url_is_new_win' => 1,
'back_url_is_new_win_data_list_query' => 1,
'search_url' => MyUrl('admin/design/market'),
'more_download_url' => empty($store_design_url) ? '' : $store_design_url,
'more_download_name' => MyLang('design.nav_store_design_name'),
])}}
</div>
</div>
<div class="am-form-popup-submit">
<button type="button" class="am-btn am-btn-warning am-radius am-btn-xs am-margin-right-lg" data-am-modal-close>
<i class="am-icon-paint-brush"></i>
<span>{{:MyLang('cancel_title')}}</span>
</button>
<button type="submit" class="am-btn am-btn-primary am-radius am-btn-xs btn-loading-example" data-am-loading="{spinner: 'circle-o-notch', loadingText:'{{:MyLang('confirm_title')}}'}">
<i class="am-icon-save"></i>
<span>{{:MyLang('confirm_title')}}</span>
</button>
</div>
</form>
<!-- win form end -->
{{/if}}
</div>
</div>
</div>

View File

@ -1,5 +1,9 @@
<!-- 操作栏 -->
{{if !empty($module_data)}}
<button type="button" class="am-btn am-btn-default am-btn-xs am-radius am-btn-block submit-popup" data-url="{{:MyUrl('admin/design/detail', ['id'=>$module_data['id']])}}" data-title="{{:MyLang('detail_title')}}">
<i class="am-icon-eye"></i>
<span>{{:MyLang('detail_title')}}</span>
</button>
<a class="am-btn am-btn-default am-btn-xs am-radius am-btn-block" href="{{:MyUrl('index/design/index', ['id'=>$module_data['id']])}}" target="_blank">
<i class="am-icon-eye"></i>
<span>{{:MyLang('view_title')}}</span>

View File

@ -21,7 +21,7 @@
<span>{{:MyLang('save_title')}}</span>
</button>
</div>
{{:ModuleInclude('../../../layout/view/base')}}
{{:ModuleInclude('../../../module/view/layout/base')}}
</div>
<!-- 页面编辑-->
@ -55,4 +55,4 @@ function FormBackSaveinfoEdit(e)
</script>
<!-- layout formback -->
{{:ModuleInclude('../../../layout/view/form_back')}}
{{:ModuleInclude('../../../module/view/layout/form_back')}}

View File

@ -0,0 +1,2 @@
<!-- 继承公共的 form -->
{{extend name="../../../module/view/form_table/detail" /}}

View File

@ -0,0 +1,52 @@
<!-- 继承公共的 form -->
{{extend name="../../../module/view/form_table/form" /}}
<!-- 表单顶部操作栏 -->
{{block name="form_operate_top"}}
<!-- 新增 -->
{{if AdminIsPower('diy', 'saveinfo')}}
<a href="{{:MyUrl('admin/diy/saveinfo')}}" class="am-btn am-btn-primary am-radius am-btn-xs" target="_blank">
<i class="iconfont icon-btn-add am-show-sm-only"></i>
<span>{{:MyLang('add_title')}}</span>
</a>
{{/if}}
<!-- 导入 -->
{{if AdminIsPower('diy', 'upload')}}
<button type="button" class="am-btn am-btn-default-plain am-btn-xs am-radius submit-popup" data-url="{{:MyUrl('admin/diy/index', ['view_type'=>'upload'])}}" data-title="{{:MyLang('import_title')}}" data-full-max="1" data-full-max-size="xl">
<i class="iconfont icon-upload am-show-sm-only"></i>
<span>{{:MyLang('import_title')}}</span>
</button>
{{/if}}
<!-- 底部菜单 -->
{{if AdminIsPower('diy', 'apptabbar')}}
<button type="button" class="am-btn am-btn-default-plain am-radius am-btn-xs submit-popup" data-offcanvas="right" data-url="{{:MyUrl('admin/diy/saveinfo', ['is_auto_create'=>0])}}#/tabbar" data-title="{{:MyLang('diy.nav_apptabbar_name')}}">
<i class="iconfont icon-wechart am-show-sm-only"></i>
<span>{{:MyLang('diy.nav_apptabbar_name')}}</span>
</button>
{{/if}}
<!-- 父级内容 -->
{__block__}
{{if $is_system_show_base eq 1 and AdminIsPower('packageinstall', 'index') and !empty($store_diy_url)}}
<a class="am-margin-left-sm" href="{{$store_diy_url}}" target="_blank">
<i class="iconfont icon-download-btn"></i>
<span class="am-hide-sm-only am-margin-left-xs">{{:MyLang('diy.nav_store_diy_name')}}</span>
</a>
{{/if}}
{{/block}}
<!-- 扩展 -->
{{block name="form_extend"}}
<!-- upload start -->
<div class="am-popup am-radius am-popup-full-max-xl package-install-list-popup-container" id="popup-diy-upload">
<div class="am-popup-inner">
<div class="am-popup-hd">
<h4 class="am-popup-title">{{:MyLang('import_title')}}</h4>
<span data-am-modal-close class="am-close">&times;</span>
</div>
<div class="am-popup-bd am-padding-0">
</div>
</div>
</div>
<!-- upload end -->
{{/block}}

View File

@ -0,0 +1,23 @@
<!-- 操作栏 -->
{{if !empty($module_data)}}
<button type="button" class="am-btn am-btn-default am-btn-xs am-radius am-btn-block submit-popup" data-url="{{:MyUrl('admin/diy/detail', ['id'=>$module_data['id']])}}" data-title="{{:MyLang('detail_title')}}">
<i class="am-icon-eye"></i>
<span>{{:MyLang('detail_title')}}</span>
</button>
<button type="button" class="am-btn am-btn-default am-btn-xs am-radius am-btn-block submit-popup" data-url="{{:MyUrl('admin/diy/preview', ['id'=>$module_data['id']])}}" data-offcanvas="right" data-title="{{:MyLang('preview_title')}}">
<i class="am-icon-eye"></i>
<span>{{:MyLang('preview_title')}}</span>
</button>
<a class="am-btn am-btn-success am-btn-xs am-radius am-btn-block" href="{{:MyUrl('admin/diy/download', array_merge($params, ['id'=>$module_data['id']]))}}" target="_blank">
<i class="am-icon-download"></i>
<span>{{:MyLang('download_title')}}</span>
</a>
<a class="am-btn am-btn-secondary am-btn-xs am-radius am-btn-block" href="{{:MyUrl('admin/diy/saveinfo', array_merge($params, ['id'=>$module_data['id']]))}}" target="_blank">
<i class="am-icon-edit"></i>
<span>{{:MyLang('edit_title')}}</span>
</a>
<button type="button" class="am-btn am-btn-danger am-btn-xs am-radius am-btn-block submit-delete" data-url="{{:MyUrl('admin/diy/delete')}}" data-id="{{$module_data.id}}" data-key="ids">
<i class="iconfont icon-delete"></i>
<span>{{:MyLang('delete_title')}}</span>
</button>
{{/if}}

View File

@ -0,0 +1,21 @@
{{:ModuleInclude('public/header')}}
<!-- content start -->
<div class="content-right">
{{if $data.code eq 0}}
<iframe src="{{$data.data}}" class="mobile-iframe am-radius"></iframe>
<div class="qrcode-content am-background-white am-radius am-padding-main">
<div class="view-qrcode-init" data-value="{{$data.data}}" data-width="140" data-height="140"></div>
<div class="am-margin-top-sm am-text-center">
<span class="am-color-grey">{{:MyLang('common_service.diy.preview_scan_tips')}}</span>
<span class="text-copy-submit am-color-blue am-margin-left-sm" data-value="{{$data.data}}">{{:MyLang('common_service.diy.preview_url_copy_name')}}</span>
</div>
</div>
{{else /}}
{{:ModuleInclude('public/not_data', ['msg'=>$data['msg']])}}
{{/if}}
</div>
<!-- content end -->
<!-- footer start -->
{{:ModuleInclude('public/footer')}}

View File

@ -0,0 +1,2 @@
<!-- 继承公共的 diy -->
{{extend name="../../../module/view/diy/index" /}}

View File

@ -0,0 +1,67 @@
{{:ModuleInclude('public/header')}}
{{if $is_not_bind_accounts eq 1}}
<div class="am-padding-xl am-margin-top-xl am-padding-bottom-xl am-text-center">
<button type="button" class="am-btn am-btn-primary am-radius am-btn-xs am-margin-left-xs am-icon-gg store-accounts-event"> {{:MyLang('store_bind_accounts_name')}}</button>
<p class="am-color-grey am-margin-top-sm">{{:MyLang('store_bind_accounts_tips')}}</p>
<p class="am-color-yellow am-margin-top-xl">{{:MyLang('store_already_bind_accounts_tips')}}</p>
</div>
{{else /}}
{{:ModuleInclude('public/detail_nav_switch_tabs', [
'nav_data' => [
[
'name' => MyLang('local_import_title'),
'key' => 'upload',
],
[
'name' => MyLang('template_market_title'),
'key' => 'market',
],
]
])}}
<div class="detail-content-switch-data-item">
<!-- 本地导入 -->
<div class="item am-ht-auto am-active" data-key="upload">
<form class="am-form form-validation am-form-popup-fixed am-upload-file" action="{{:MyUrl('admin/diy/upload')}}" method="POST" request-type="ajax-reload" request-value="parent" enctype="multipart/form-data">
<div class="am-form-group am-flex-1">
<div class="am-form-file">
<button type="button" class="am-btn am-btn-default am-btn-xl am-radius"><i class="iconfont icon-upload-file"></i></button>
<input type="file" name="file" class="file-event" data-tips-tag="#form-upload-file-tips" data-validation-message="{{:MyLang('form_upload_file_message')}}" accept=".zip" multiple required />
<div id="form-upload-file-tips" class="am-margin-top-xs"></div>
{{if is_array(MyLang('diy.upload_list_tips'))}}
<div class="tips am-text-xs am-color-ccc am-margin-top-sm">
<p class="am-margin-top-xs">{{:implode('</p><p class="am-margin-top-xs">', MyLang('diy.upload_list_tips'))}}</p>
</div>
{{/if}}
</div>
</div>
<div class="am-form-popup-submit">
<button type="button" class="am-btn am-btn-warning am-radius am-btn-xs am-margin-right-lg" data-am-modal-close>
<i class="am-icon-paint-brush"></i>
<span>{{:MyLang('cancel_title')}}</span>
</button>
<button type="submit" class="am-btn am-btn-primary am-radius am-btn-xs btn-loading-example" data-am-loading="{spinner: 'circle-o-notch', loadingText:'{{:MyLang('confirm_title')}}'}">
<i class="am-icon-save"></i>
<span>{{:MyLang('confirm_title')}}</span>
</button>
</div>
</form>
</div>
<!-- 模板市场 -->
<div class="item am-ht-auto" data-key="market">
{{:ModuleInclude('public/market/index', [
'type' => 'diy',
'back_url' => MyUrl('admin/diy/saveinfo', ['id'=>0]),
'back_url_field' => 'id',
'back_url_is_new_win' => 1,
'back_win_refresh_type' => 'none',
'search_url' => MyUrl('admin/diy/market'),
'more_download_url' => empty($store_diy_url) ? '' : $store_diy_url,
'more_download_name' => MyLang('diy.nav_store_diy_name'),
])}}
</div>
</div>
{{/if}}
<!-- footer start -->
{{:ModuleInclude('public/footer')}}

View File

@ -0,0 +1,2 @@
<!-- 继承公共的 form -->
{{extend name="../../../module/view/form_table/detail" /}}

View File

@ -0,0 +1,13 @@
<!-- 继承公共的 form -->
{{extend name="../../../module/view/form_table/form" /}}
<!-- 表单顶部操作栏 -->
{{block name="form_operate_top"}}
<button type="button" class="am-btn am-btn-default-plain am-btn-xs am-radius submit-ajax" data-url="{{:MyUrl('admin/errorlog/alldelete')}}" data-view="reload">
<i class="iconfont icon-clear am-show-sm-only"></i>
<span>{{:MyLang('delete_all_title')}}</span>
</button>
<!-- 父级内容 -->
{__block__}
{{/block}}

View File

@ -0,0 +1,9 @@
<!-- 操作栏 -->
<button type="button" class="am-btn am-btn-default am-btn-xs am-radius am-btn-block submit-popup" data-url="{{:MyUrl('admin/errorlog/detail', ['id'=>$module_data['id']])}}" data-title="{{:MyLang('detail_title')}}">
<i class="am-icon-eye"></i>
<span>{{:MyLang('detail_title')}}</span>
</button>
<button type="button" class="am-btn am-btn-danger am-btn-xs am-radius am-btn-block submit-delete" data-url="{{:MyUrl('admin/errorlog/delete')}}" data-id="{{$module_data.id}}" data-key="ids">
<i class="iconfont icon-delete"></i>
<span>{{:MyLang('delete_title')}}</span>
</button>

View File

@ -0,0 +1,3 @@
{{if !empty($module_data) and !empty($module_data['request_params'])}}
<pre class="am-scrollable-vertical am-scrollable-horizontal am-padding-xs am-radius pre-container">{{$module_data.request_params}}</pre>
{{/if}}

View File

@ -7,11 +7,11 @@
<i class="am-icon-edit"></i>
<span>{{:MyLang('edit_title')}}</span>
</a>
<a class="am-btn am-btn-success am-btn-xs am-radius am-btn-block" href="{{:MyUrl('admin/goods/saveinfo', array_merge($params, ['id'=>$module_data['id'], 'is_copy'=>1]))}}">
<button type="button" class="am-btn am-btn-success am-btn-xs am-radius am-btn-block submit-url" data-url="{{:MyUrl('admin/goods/saveinfo', array_merge($params, ['id'=>$module_data['id'], 'is_copy'=>1]))}}" data-msg="{{:MyLang('copy_goods_confirm_tips')}}">
<i class="am-icon-copy"></i>
<span>{{:MyLang('copy_title')}}</span>
</a>
<div class="am-dropdown am-dropdown-down am-btn am-btn-danger am-btn-xs am-radius am-btn-block" data-am-dropdown>
</button>
<div class="am-dropdown am-dropdown-left am-btn am-btn-danger am-btn-xs am-radius am-btn-block" data-am-dropdown>
<div class="am-dropdown-toggle">
<i class="iconfont icon-delete"></i>
<span>{{:MyLang('delete_title')}}</span>

View File

@ -337,7 +337,7 @@
</div>
<div class="am-form-group content-app-right am-padding-bottom-0">
<label>{{:MyLang('common_service.goods.form_app_value_title')}}</label>
<textarea rows="5" name="content_app_text_{{$v.id}}" maxlength="105000" class="am-radius" placeholder="{{:MyLang('common_service.goods.form_app_value_title')}}" data-validation-message="{{:MyLang('common_service.goods.form_app_value_message')}}">{{if !empty($v)}}{{$v.content_old|raw}}{{/if}}</textarea>
<textarea rows="5" name="content_app_text_{{$v.id}}" class="am-radius" placeholder="{{:MyLang('common_service.goods.form_app_value_title')}}" data-validation-message="{{:MyLang('common_service.goods.form_app_value_message')}}">{{if !empty($v)}}{{$v.content_old|raw}}{{/if}}</textarea>
</div>
</div>
<div class="am-flex am-flex-items-center am-gap-32 am-margin-top-sm">
@ -365,7 +365,7 @@
<div id="goods-nav-web" class="item" data-key="web">
<div class="am-form-group">
<label>{{$goods_nav_list.web.name}}<span class="am-form-group-label-tips-must">*</span></label>
<textarea class="am-radius" name="content_web" maxlength="105000" id="editor-tag" data-validation-message="{{:MyLang('common_service.goods.form_web_content_message')}}">{{if !empty($data['content_web'])}}{{$data.content_web}}{{/if}}</textarea>
<textarea class="am-radius" name="content_web" id="editor-tag" data-validation-message="{{:MyLang('common_service.goods.form_web_content_message')}}">{{if !empty($data['content_web'])}}{{$data.content_web}}{{/if}}</textarea>
</div>
</div>

View File

@ -0,0 +1,17 @@
{{if !empty($module_data) and !empty($module_data['goods']) and is_array($module_data['goods'])}}
<div class="am-nbfc">
{{if !empty($module_data['goods']['images'])}}
<a {{if empty($module_data['goods']['goods_url'])}}href="javascript:;"{{else /}}href="{{$module_data.goods.goods_url}}" target="_blank"{{/if}} class="am-margin-right-sm am-fl">
<img src="{{$module_data.goods.images}}" class="am-img-thumbnail am-radius" width="40" height="40" />
</a>
{{/if}}
<div class="am-nbfc am-text-truncate">
{{if !empty($module_data['goods']['title'])}}
<a {{if empty($module_data['goods']['goods_url'])}}href="javascript:;"{{else /}}href="{{$module_data.goods.goods_url}}" target="_blank"{{/if}}>{{$module_data.goods.title}}</a>
{{/if}}
{{if !empty($module_data['goods']['price'])}}
<p class="am-color-price">{{$currency_symbol}}{{$module_data.goods.price}}</p>
{{/if}}
</div>
</div>
{{/if}}

View File

@ -5,10 +5,10 @@
<option value="{{$v.id}}" {{if !empty($module_data['params']) and !empty($module_data['params'][$module_data['form_name_key']]) and is_array($module_data['params'][$module_data['form_name_key']]) and in_array($v['id'], $module_data['params'][$module_data['form_name_key']])}}selected{{/if}}>{{$v.name}}</option>
{{if !empty($v['items'])}}
{{foreach $v.items as $vs}}
<option style="padding-left: 15px;" value="{{$vs.id}}" {{if !empty($module_data['params']) and !empty($module_data['params'][$module_data['form_name_key']]) and is_array($module_data['params'][$module_data['form_name_key']]) and in_array($vs['id'], $module_data['params'][$module_data['form_name_key']])}}selected{{/if}}>{{$vs.name}}</option>
<option style="padding-left: 15px;" value="{{$vs.id}}" {{if !empty($module_data['params']) and !empty($module_data['params'][$module_data['form_name_key']]) and is_array($module_data['params'][$module_data['form_name_key']]) and in_array($vs['id'], $module_data['params'][$module_data['form_name_key']])}}selected{{/if}}>{{if empty($vs['items'])}}├{{else /}}└{{/if}}² {{$vs.name}}</option>
{{if !empty($vs['items'])}}
{{foreach $vs.items as $vss}}
<option style="padding-left: 30px;" value="{{$vss.id}}" {{if !empty($module_data['params']) and !empty($module_data['params'][$module_data['form_name_key']]) and is_array($module_data['params'][$module_data['form_name_key']]) and in_array($vss['id'], $module_data['params'][$module_data['form_name_key']])}}selected{{/if}}>{{$vss.name}}</option>
{{foreach $vs.items as $kss=>$vss}}
<option style="padding-left: 30px;" value="{{$vss.id}}" {{if !empty($module_data['params']) and !empty($module_data['params'][$module_data['form_name_key']]) and is_array($module_data['params'][$module_data['form_name_key']]) and in_array($vss['id'], $module_data['params'][$module_data['form_name_key']])}}selected{{/if}}>{{if $kss eq count($vs['items'])-1}}└{{else /}}├{{/if}}³ {{$vss.name}}</option>
{{/foreach}}
{{/if}}
{{/foreach}}

View File

@ -15,7 +15,7 @@
<!-- nav end -->
{{if AdminIsPower('payment', 'upload')}}
<button type="button" class="am-btn am-btn-default-plain am-btn-xs am-radius" data-am-modal="{target: '#payment-upload-win'}">
<button type="button" class="am-btn am-btn-default-plain am-btn-xs am-radius submit-popup" data-url="{{:MyUrl('admin/payment/index', ['view_type'=>'upload'])}}" data-title="{{:MyLang('payment.base_upload_payment_name')}}" data-full-max="1" data-full-max-size="xl">
<i class="iconfont icon-upload"></i>
<span>{{:MyLang('payment.base_upload_payment_name')}}</span>
</button>
@ -23,60 +23,3 @@
<!-- 父级内容 -->
{__block__}
{{/block}}
<!-- 扩展 -->
{{block name="form_extend"}}
<!-- upload start -->
<div class="am-popup am-radius" id="payment-upload-win">
<div class="am-popup-inner">
<div class="am-popup-hd">
<h4 class="am-popup-title">{{:MyLang('payment.base_upload_payment_name')}}</h4>
<span data-am-modal-close class="am-close">&times;</span>
</div>
<div class="am-popup-bd">
<!-- win form start -->
<form class="am-form form-validation am-form-popup-fixed" action="{{:MyUrl('admin/payment/upload')}}" method="POST" request-type="ajax-reload" enctype="multipart/form-data">
{{if is_array(MyLang('payment.upload_top_list_tips'))}}
<div class="am-operate-stretch-tips">
<div class="title">
<i class="iconfont icon-tips"></i>
<strong title="{{:MyLang('operate_list_tips_msg')}}">{{:MyLang('operate_list_tips_button_text')}}</strong>
<i class="iconfont icon-contract contract" title="{{:MyLang('operate_list_tips_retract_text')}}"></i>
</div>
{{foreach :MyLang('payment.upload_top_list_tips') as $v}}
<p>{{$v.name}}</p>
{{if !empty($v['item']) and is_array($v['item'])}}
<div class="am-margin-left-lg">
{{foreach $v.item as $vs}}
<p>{{$vs}}</p>
{{/foreach}}
</div>
{{/if}}
{{/foreach}}
<p class="am-margin-top-xs am-text-danger">{{:MyLang('payment.upload_top_tips_ps')}}</p>
</div>
{{/if}}
<div class="am-form-group am-form-group-refreshing">
<div class="am-form-file">
<button type="button" class="am-btn am-btn-default am-btn-xs am-radius"><i class="am-icon-cloud-upload"></i> {{:MyLang('form_choice_file_title')}}</button>
<input type="file" name="file" class="file-event" data-tips-tag="#form-payment-tips" data-validation-message="{{:MyLang('form_upload_file_message')}}" accept=".zip" multiple required />
<div id="form-payment-tips" class="am-margin-top-xs"></div>
</div>
</div>
<div class="am-form-popup-submit">
<button type="button" class="am-btn am-btn-warning am-radius am-btn-xs am-margin-right-lg" data-am-modal-close>
<i class="am-icon-paint-brush"></i>
<span>{{:MyLang('cancel_title')}}</span>
</button>
<button type="submit" class="am-btn am-btn-primary am-radius am-btn-xs btn-loading-example" data-am-loading="{spinner: 'circle-o-notch', loadingText:'{{:MyLang('confirm_title')}}'}">
<i class="am-icon-check"></i>
<span>{{:MyLang('confirm_title')}}</span>
</button>
</div>
</form>
<!-- win form end -->
</div>
</div>
</div>
<!-- upload end -->
{{/block}}

View File

@ -0,0 +1,74 @@
{{:ModuleInclude('public/header')}}
{{if $is_not_bind_accounts eq 1}}
<div class="am-padding-xl am-margin-top-xl am-padding-bottom-xl am-text-center">
<button type="button" class="am-btn am-btn-primary am-radius am-btn-xs am-margin-left-xs am-icon-gg store-accounts-event"> {{:MyLang('store_bind_accounts_name')}}</button>
<p class="am-color-grey am-margin-top-sm">{{:MyLang('store_bind_accounts_tips')}}</p>
<p class="am-color-yellow am-margin-top-xl">{{:MyLang('store_already_bind_accounts_tips')}}</p>
</div>
{{else /}}
{{:ModuleInclude('public/detail_nav_switch_tabs', [
'nav_data' => [
[
'name' => MyLang('local_import_title'),
'key' => 'upload',
],
[
'name' => MyLang('plugins_market_title'),
'key' => 'market',
],
]
])}}
<div class="detail-content-switch-data-item">
<!-- 本地导入 -->
<div class="item am-ht-auto am-active" data-key="upload">
<form class="am-form form-validation am-form-popup-fixed am-upload-file" action="{{:MyUrl('admin/payment/upload')}}" method="POST" request-type="ajax-reload" request-value="parent" enctype="multipart/form-data">
<div class="am-form-group am-flex-1">
<div class="am-form-file">
<button type="button" class="am-btn am-btn-default am-btn-xl am-radius"><i class="iconfont icon-upload-file"></i></button>
<input type="file" name="file" class="file-event" data-tips-tag="#form-upload-file-tips" data-validation-message="{{:MyLang('form_upload_file_message')}}" accept=".zip" multiple required />
<div id="form-upload-file-tips" class="am-margin-top-xs"></div>
{{if is_array(MyLang('payment.upload_top_list_tips'))}}
<div class="tips am-text-xs am-color-ccc am-margin-top-sm">
{{foreach :MyLang('payment.upload_top_list_tips') as $v}}
<p>{{$v.name}}</p>
{{if !empty($v['item']) and is_array($v['item'])}}
<div class="am-margin-left-lg">
{{foreach $v.item as $vs}}
<p>{{$vs}}</p>
{{/foreach}}
</div>
{{/if}}
{{/foreach}}
<p class="am-margin-top-xs am-text-danger">{{:MyLang('payment.upload_top_tips_ps')}}</p>
</div>
{{/if}}
</div>
</div>
<div class="am-form-popup-submit">
<button type="button" class="am-btn am-btn-warning am-radius am-btn-xs am-margin-right-lg" data-am-modal-close>
<i class="am-icon-paint-brush"></i>
<span>{{:MyLang('cancel_title')}}</span>
</button>
<button type="submit" class="am-btn am-btn-primary am-radius am-btn-xs btn-loading-example" data-am-loading="{spinner: 'circle-o-notch', loadingText:'{{:MyLang('confirm_title')}}'}">
<i class="am-icon-save"></i>
<span>{{:MyLang('confirm_title')}}</span>
</button>
</div>
</form>
</div>
<!-- 模板市场 -->
<div class="item am-ht-auto" data-key="market">
{{:ModuleInclude('public/market/index', [
'type' => 'payment',
'back_win_refresh_type' => 'none',
'search_url' => MyUrl('admin/payment/market'),
'more_download_url' => empty($store_payment_url) ? '' : $store_payment_url,
'more_download_name' => MyLang('payment.base_nav_store_payment_name'),
])}}
</div>
</div>
{{/if}}
<!-- footer start -->
{{:ModuleInclude('public/footer')}}

View File

@ -12,7 +12,7 @@
<!-- form start -->
<form class="am-form form-validation am-form-popup-sticky" action="{{:MyUrl('admin/pluginsadmin/saveinfo')}}" method="POST" request-type="form" enctype="multipart/form-data">
<div class="am-form-group">
<label>{{:MyLang('common_service.pluginsadmin.form_item_plugins')}}<span class="am-form-group-label-tips">{{:MyLang('common_service.pluginsadmin.form_item_plugins_tips')}}</span></label>
<label>{{:MyLang('common_service.pluginsadmin.form_item_plugins')}}<span class="am-form-group-label-tips-must">*</span><span class="am-form-group-label-tips">{{:MyLang('common_service.pluginsadmin.form_item_plugins_tips')}}</span></label>
<input type="text" name="plugins" placeholder="{{:MyLang('common_service.pluginsadmin.form_item_plugins_message')}}" minlength="2" maxlength="60" data-validation-message="{{:MyLang('common_service.pluginsadmin.form_item_plugins_message')}}" pattern="^[a-z0-9_]{2,60}$" class="am-radius" {{if !empty($data['plugins'])}} value="{{$data.plugins}}"{{/if}} required />
<!-- 校验信息 -->
{{if !empty($verification_msg)}}

View File

@ -14,7 +14,7 @@
</a>
{{/if}}
{{if AdminIsPower('pluginsadmin', 'upload')}}
<button type="button" class="am-btn am-btn-default-plain am-btn-xs am-radius submit-popup" data-url="{{:MyUrl('admin/pluginsadmin/index', ['view_type'=>'upload'])}}" data-title="{{:MyLang('pluginsadmin.base_upload_application_name')}}">
<button type="button" class="am-btn am-btn-default-plain am-btn-xs am-radius submit-popup" data-url="{{:MyUrl('admin/pluginsadmin/index', ['view_type'=>'upload'])}}" data-title="{{:MyLang('pluginsadmin.base_upload_application_name')}}" data-full-max="1" data-full-max-size="xl">
<i class="iconfont icon-upload"></i>
<span>{{:MyLang('pluginsadmin.base_upload_application_name')}}</span>
</button>
@ -65,7 +65,7 @@
{{/if}}
</p>
{{/if}}
{{if AdminIsPower('index', 'storeaccountsbind') and (empty($site_store_info) or empty($site_store_info['user']))}}
{{if $is_not_bind_accounts eq 1}}
<p>
<span>{{:MyLang('store_bind_accounts_tips')}}</span>
<button type="button" class="am-btn am-btn-primary am-radius am-btn-xs am-margin-left-xs am-icon-gg store-accounts-event"> {{:MyLang('store_bind_accounts_name')}}</button>
@ -161,7 +161,7 @@
</button>
{{if isset($shopxo_is_develop) and $shopxo_is_develop eq true}}
<button class="am-btn am-btn-default am-btn-xs am-radius submit-popup" data-url="{{:MyUrl('admin/pluginsadmin/storeuploadinfo', ['id'=>$v['plugins']])}}">
<button class="am-btn am-btn-default am-btn-xs am-radius submit-popup" data-url="{{:MyUrl('admin/pluginsadmin/storeuploadinfo', ['id'=>$v['plugins']])}}" data-title="{{:MyLang('upload_title')}}">
<i class="iconfont icon-application-upload"></i>
<span>{{:MyLang('upload_title')}}</span>
</button>
@ -240,11 +240,6 @@
<div class="desc">{{$v.desc}}</div>
</div>
<div class="operation">
<button class="am-btn am-btn-default am-btn-xs am-radius submit-delete-modal am-padding-left-0" data-url="{{:MyUrl('admin/pluginsadmin/delete')}}" data-id="{{$v.plugins}}">
<i class="iconfont icon-application-delete"></i>
<span>{{:MyLang('delete_title')}}</span>
</button>
<button class="am-btn am-btn-default am-btn-xs am-radius submit-ajax" data-url="{{:MyUrl('admin/pluginsadmin/install')}}" data-id="{{$v.plugins}}" data-view="reload" data-msg="{{:MyLang('install_confirm_tips')}}">
<i class="iconfont icon-application-install"></i>
<span>{{:MyLang('install_title')}}</span>
@ -264,6 +259,11 @@
<span>{{:MyLang('download_title')}}</span>
</a>
{{/if}}
<button class="am-btn am-btn-default am-btn-xs am-radius submit-delete-modal" data-url="{{:MyUrl('admin/pluginsadmin/delete')}}" data-id="{{$v.plugins}}">
<i class="iconfont icon-application-delete"></i>
<span>{{:MyLang('delete_title')}}</span>
</button>
</div>
</div>
</li>

View File

@ -12,12 +12,12 @@
<!-- form start -->
<form class="am-form form-validation am-form-full-screen am-form-popup-sticky" action="{{:MyUrl('admin/pluginsadmin/save')}}" method="POST" request-type="ajax-url" request-value="{{:MyUrl('admin/pluginsadmin/index')}}" enctype="multipart/form-data">
<div class="am-form-group">
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_plugins')}}<span class="am-form-group-label-tips">{{:MyLang('common_service.pluginsadmin.form_item_plugins_tips')}}</span></label>
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_plugins')}}<span class="am-form-group-label-tips-must">*</span><span class="am-form-group-label-tips">{{:MyLang('common_service.pluginsadmin.form_item_plugins_tips')}}</span></label>
<input type="text" name="plugins" placeholder="{{:MyLang('common_service.pluginsadmin.form_item_plugins_message')}}" minlength="2" maxlength="60" data-validation-message="{{:MyLang('common_service.pluginsadmin.form_item_plugins_message')}}" pattern="^[a-z0-9_]{2,60}$" class="am-radius" {{if !empty($plugins)}} value="{{$plugins}}"{{/if}} readonly="true" required />
</div>
<div class="am-form-group">
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_logo')}}<span class="am-form-group-label-tips">{{:MyLang('common_service.pluginsadmin.form_item_logo_tips')}}</span></label>
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_logo')}}<span class="am-form-group-label-tips-must">*</span><span class="am-form-group-label-tips">{{:MyLang('common_service.pluginsadmin.form_item_logo_tips')}}</span></label>
<div class="am-form-file-upload-container">
<ul class="plug-file-upload-view plugins-logo-view" data-form-name="logo" data-max-number="1" data-dialog-type="images" data-is-eye="1">
<li class="plug-file-upload-submit" data-view-tag="ul.plugins-logo-view">
@ -34,30 +34,30 @@
</div>
</div>
<div class="am-form-group">
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_name')}}</label>
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_name')}}<span class="am-form-group-label-tips-must">*</span></label>
<input type="text" name="name" placeholder="{{:MyLang('common_service.pluginsadmin.form_item_name_message')}}" minlength="1" maxlength="80" data-validation-message="{{:MyLang('common_service.pluginsadmin.form_item_name_message')}}" class="am-radius" {{if !empty($data['name'])}} value="{{$data.name}}"{{/if}} required />
</div>
<div class="am-form-group">
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_version')}}<span class="am-form-group-label-tips">{{:MyLang('common_service.pluginsadmin.form_item_version_tips')}}</span></label>
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_version')}}<span class="am-form-group-label-tips-must">*</span><span class="am-form-group-label-tips">{{:MyLang('common_service.pluginsadmin.form_item_version_tips')}}</span></label>
<input type="text" name="version" placeholder="{{:MyLang('common_service.pluginsadmin.form_item_version')}}" minlength="5" maxlength="18" data-validation-message="{{:MyLang('common_service.pluginsadmin.form_item_version_message')}}" pattern="{{:MyConst('common_regex_version')}}" class="am-radius" {{if !empty($data['version'])}} value="{{$data.version}}"{{/if}} required />
</div>
<div class="am-form-group">
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_author')}}</label>
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_author')}}<span class="am-form-group-label-tips-must">*</span></label>
<input type="text" name="author" placeholder="{{:MyLang('common_service.pluginsadmin.form_item_author_message')}}" minlength="1" maxlength="80" data-validation-message="{{:MyLang('common_service.pluginsadmin.form_item_author_message')}}" class="am-radius" {{if !empty($data['author'])}} value="{{$data.author}}"{{/if}} required />
</div>
<div class="am-form-group">
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_author_url')}}<span class="am-form-group-label-tips">{{:MyLang('common_service.pluginsadmin.form_item_author_url_tips')}}</span></label>
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_author_url')}}<span class="am-form-group-label-tips-must">*</span><span class="am-form-group-label-tips">{{:MyLang('common_service.pluginsadmin.form_item_author_url_tips')}}</span></label>
<input type="url" placeholder="{{:MyLang('common_service.pluginsadmin.form_item_author_url_tips')}}" name="author_url" data-validation-message="{{:MyLang('common_service.pluginsadmin.form_item_author_url_message')}}" class="am-radius" {{if !empty($data['author_url'])}} value="{{$data.author_url}}"{{/if}} required />
</div>
<div class="am-form-group">
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_desc')}}</label>
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_desc')}}<span class="am-form-group-label-tips-must">*</span></label>
<textarea rows="2" name="desc" class="am-radius am-field-valid" placeholder="{{:MyLang('common_service.pluginsadmin.form_item_desc_message')}}" minlength="2" maxlength="255" data-validation-message="{{:MyLang('common_service.pluginsadmin.form_item_desc_message')}}">{{if !empty($data['desc'])}}{{$data.desc}}{{/if}}</textarea>
</div>
<div class="am-form-group">
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_apply_terminal')}}</label>
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_apply_terminal')}}<span class="am-form-group-label-tips-must">*</span></label>
<div class="am-checkbox-group am-flex am-gap-12 am-flex-warp">
{{foreach :MyConst('common_platform_type') as $v}}
<label class="am-checkbox-inline">
@ -68,7 +68,7 @@
</div>
<div class="am-form-group">
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_apply_version')}}</label>
<label class="am-block">{{:MyLang('common_service.pluginsadmin.form_item_apply_version')}}<span class="am-form-group-label-tips-must">*</span></label>
<div class="am-checkbox-group am-flex am-gap-12 am-flex-warp">
{{foreach :MyConst('common_system_version_list') as $v}}
<label class="am-checkbox-inline">

81
app/admin/view/default/pluginsadmin/upload.html Executable file → Normal file
View File

@ -1,33 +1,60 @@
{{:ModuleInclude('public/header')}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<!-- form start -->
<form class="am-form form-validation am-form-popup-fixed" action="{{:MyUrl('admin/pluginsadmin/upload')}}" method="POST" request-type="ajax-reload" request-value="parent" enctype="multipart/form-data">
<div class="am-form-group am-flex-1">
<div class="am-form-file">
<button type="button" class="am-btn am-btn-default am-btn-xl am-radius"><i class="iconfont icon-upload-file"></i></button>
<input type="file" name="file" class="file-event" data-tips-tag="#form-file-tips" data-validation-message="{{:MyLang('form_upload_file_message')}}" accept=".zip" required />
<div id="form-file-tips" class="am-margin-top"></div>
<div class="tips am-text-xs am-color-ccc am-margin-top-sm">{{:MyLang('common_service.pluginsadmin.form_item_upload_tips')}}</div>
</div>
</div>
<div class="am-form-popup-submit">
<button type="button" class="am-btn am-btn-warning am-btn-xs am-radius" data-am-modal-close>
<i class="am-icon-paint-brush"></i>
<span>{{:MyLang('cancel_title')}}</span>
</button>
<button type="submit" class="am-btn am-btn-primary am-btn-xs am-radius btn-loading-example am-margin-left" data-am-loading="{spinner: 'circle-o-notch', loadingText:'{{:MyLang('confirm_title')}}'}">
<i class="am-icon-check"></i>
<span>{{:MyLang('confirm_title')}}</span>
</button>
</div>
</form>
<!-- form end -->
{{if $is_not_bind_accounts eq 1}}
<div class="am-padding-xl am-margin-top-xl am-padding-bottom-xl am-text-center">
<button type="button" class="am-btn am-btn-primary am-radius am-btn-xs am-margin-left-xs am-icon-gg store-accounts-event"> {{:MyLang('store_bind_accounts_name')}}</button>
<p class="am-color-grey am-margin-top-sm">{{:MyLang('store_bind_accounts_tips')}}</p>
<p class="am-color-yellow am-margin-top-xl">{{:MyLang('store_already_bind_accounts_tips')}}</p>
</div>
</div>
<!-- right content end -->
{{else /}}
{{:ModuleInclude('public/detail_nav_switch_tabs', [
'nav_data' => [
[
'name' => MyLang('local_import_title'),
'key' => 'upload',
],
[
'name' => MyLang('plugins_market_title'),
'key' => 'market',
],
]
])}}
<div class="detail-content-switch-data-item">
<!-- 本地导入 -->
<div class="item am-ht-auto am-active" data-key="upload">
<form class="am-form form-validation am-form-popup-fixed am-upload-file" action="{{:MyUrl('admin/pluginsadmin/upload')}}" method="POST" request-type="ajax-reload" request-value="parent" enctype="multipart/form-data">
<div class="am-form-group am-flex-1">
<div class="am-form-file">
<button type="button" class="am-btn am-btn-default am-btn-xl am-radius"><i class="iconfont icon-upload-file"></i></button>
<input type="file" name="file" class="file-event" data-tips-tag="#form-file-tips" data-validation-message="{{:MyLang('form_upload_file_message')}}" accept=".zip" required />
<div id="form-file-tips" class="am-margin-top"></div>
<div class="tips am-text-xs am-color-ccc am-margin-top-sm">{{:MyLang('common_service.pluginsadmin.form_item_upload_tips')}}</div>
</div>
</div>
<div class="am-form-popup-submit">
<button type="button" class="am-btn am-btn-warning am-btn-xs am-radius" data-am-modal-close>
<i class="am-icon-paint-brush"></i>
<span>{{:MyLang('cancel_title')}}</span>
</button>
<button type="submit" class="am-btn am-btn-primary am-btn-xs am-radius btn-loading-example am-margin-left" data-am-loading="{spinner: 'circle-o-notch', loadingText:'{{:MyLang('confirm_title')}}'}">
<i class="am-icon-check"></i>
<span>{{:MyLang('confirm_title')}}</span>
</button>
</div>
</form>
</div>
<!-- 模板市场 -->
<div class="item am-ht-auto" data-key="market">
{{:ModuleInclude('public/market/index', [
'type' => 'plugins',
'back_win_refresh_type' => 'none',
'search_url' => MyUrl('admin/pluginsadmin/market'),
'more_download_url' => empty($store_url) ? '' : $store_url,
'more_download_name' => MyLang('pluginsadmin.base_nav_more_plugins_download_name'),
])}}
</div>
</div>
{{/if}}
<!-- footer start -->
{{:ModuleInclude('public/footer')}}

View File

@ -5,10 +5,9 @@
<div class="content">
<!-- operation start -->
<div class="am-g">
<button class="am-btn am-btn-primary am-radius am-btn-xs tree-submit-add" data-am-modal="{target: '#data-save-win'}">
<i class="iconfont icon-btn-add"></i>
<button class="am-btn am-btn-primary am-radius am-btn-xs tree-submit-add" data-am-modal="{target: '#data-save-win', width: 400, height: 300}">
<i class="iconfont icon-btn-add am-show-sm-only"></i>
<span>{{:MyLang('add_title')}}</span>
</button>
</div>
<!-- operation end -->

View File

@ -1,8 +1,9 @@
{{if !empty($module_data['title']) and !empty($module_data['back_url'])}}
<legend>
<span class="am-text-sm am-font-weight">{{$module_data.title}}</span>
<a href="{{$module_data.back_url}}" class="am-fr am-text-lg">
<a href="{{$module_data.back_url}}" class="am-text-lg">
<i class="iconfont icon-back"></i>
</a>
<em class="form-nav-top-retreat-ds am-color-grey-light am-text-xs am-margin-horizontal-sm">|</em>
<span class="am-text-sm am-font-weight">{{$module_data.title}}</span>
</legend>
{{/if}}

View File

@ -96,64 +96,67 @@
</html>
<!-- 类库 -->
<script type='text/javascript' src="{{$public_host}}static/common/lib/jquery/jquery-2.2.4.min.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/assets/js/amazeui.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/jquery/jquery-2.2.4.min.js?v={{$static_cache_version}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/assets/js/amazeui.js?v={{$static_cache_version}}"></script>
<!-- jshash -->
<script type='text/javascript' src="{{$public_host}}static/common/lib/jshash/md5-min.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/jshash/md5-min.js?v={{$static_cache_version}}"></script>
<!-- echarts 图表 -->
{{if isset($is_load_echarts) and $is_load_echarts eq 1}}
<script type='text/javascript' src="{{$public_host}}static/common/lib/echarts/echarts.min.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/echarts/macarons.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/echarts/shine.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/echarts/echarts.min.js?v={{$static_cache_version}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/echarts/macarons.js?v={{$static_cache_version}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/echarts/shine.js?v={{$static_cache_version}}"></script>
{{/if}}
<!-- highlight代码高亮 -->
<script src="{{$public_host}}static/common/lib/highlight/highlight.min.js?v={{$static_cache_version}}"></script>
<!-- ueditor 编辑器 -->
<script type='text/javascript' src="{{$my_public_url}}static/common/lib/ueditor/ueditor.config.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/ueditor/ueditor.all.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$my_public_url}}static/common/lib/ueditor/ueditor.config.js?v={{$static_cache_version}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/ueditor/ueditor.all.js?v={{$static_cache_version}}"></script>
<!-- 颜色选择器 -->
<script type='text/javascript' src="{{$public_host}}static/common/lib/xncolorpicker/xncolorpicker.min.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/xncolorpicker/xncolorpicker.min.js?v={{$static_cache_version}}"></script>
<!-- 元素拖拽排序插件 -->
<script type='text/javascript' src="{{$public_host}}static/common/lib/dragsort/jquery.dragsort-0.5.2.min.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/dragsort/jquery.dragsort-0.5.2.min.js?v={{$static_cache_version}}"></script>
<!-- 动画数数 -->
{{if isset($is_load_animation_count) and $is_load_animation_count eq 1}}
<script type='text/javascript' src="{{$public_host}}static/common/lib/animation-count-to/animation.count.to.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/animation-count-to/animation.count.to.js?v={{$static_cache_version}}"></script>
{{/if}}
<!-- amazeui插件 -->
<script type='text/javascript' src="{{$public_host}}static/common/lib/amazeui-switch/amazeui.switch.min.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/amazeui-chosen/amazeui.chosen.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/amazeui-dialog/amazeui.dialog.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/amazeui-tagsinput/amazeui.tagsinput.min.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/amazeui-switch/amazeui.switch.min.js?v={{$static_cache_version}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/amazeui-chosen/amazeui.chosen.js?v={{$static_cache_version}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/amazeui-dialog/amazeui.dialog.js?v={{$static_cache_version}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/amazeui-tagsinput/amazeui.tagsinput.min.js?v={{$static_cache_version}}"></script>
<!-- 轮播插件 -->
<script type='text/javascript' src="{{$public_host}}static/common/lib/swiper/swiper.min.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/swiper/swiper-bundle.min.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/swiper/swiper.min.js?v={{$static_cache_version}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/swiper/swiper-bundle.min.js?v={{$static_cache_version}}"></script>
<!-- 日期组件 -->
<script type='text/javascript' src="{{$public_host}}static/common/lib/My97DatePicker/WdatePicker.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/My97DatePicker/WdatePicker.js?v={{$static_cache_version}}"></script>
<!-- 元素拖动 -->
<script type='text/javascript' src="{{$public_host}}static/common/lib/tdrag/tdrag.min.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/tdrag/tdrag.min.js?v={{$static_cache_version}}"></script>
<!-- 复制插件 -->
<script type='text/javascript' src="{{$public_host}}static/common/lib/clipboard/clipboard.min.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/clipboard/clipboard.min.js?v={{$static_cache_version}}"></script>
<!-- base64 -->
<script type='text/javascript' src="{{$public_host}}static/common/lib/base64/base64csvtojson.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/base64/base64csvtojson.js?v={{$static_cache_version}}"></script>
<!-- ckplayer播放器 -->
{{if isset($is_load_ckplayer) and $is_load_ckplayer eq 1}}
<script type='text/javascript' src="{{$public_host}}static/common/lib/ckplayer/js/ckplayer.min.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/ckplayer/js/ckplayer.min.js?v={{$static_cache_version}}"></script>
{{/if}}
<!-- 条形码 -->
{{if isset($is_load_barcode) and $is_load_barcode eq 1}}
<script type='text/javascript' src="{{$public_host}}static/common/lib/JsBarcode/JsBarcode.all.min.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/lib/JsBarcode/JsBarcode.all.min.js?v={{$static_cache_version}}"></script>
{{/if}}
<!-- map -->
@ -182,32 +185,37 @@
<!-- 打印js -->
{{if isset($is_load_hiprint) and $is_load_hiprint eq 1}}
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/hiprint.bundle.js"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/polyfill.min.js"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/plugins/jquery.hiwprint.js"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/plugins/JsBarcode.all.min.js"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/plugins/qrcode.js"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/plugins/jquery.minicolors.min.js"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/plugins/jspdf/canvas2image.js"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/plugins/jspdf/canvg.min.js"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/plugins/jspdf/html2canvas.min.js"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/plugins/jspdf/jspdf.min.js"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/hiprint.config.js"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/hiprint.bundle.js?v={{$static_cache_version}}"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/polyfill.min.js?v={{$static_cache_version}}"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/plugins/jquery.hiwprint.js?v={{$static_cache_version}}"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/plugins/JsBarcode.all.min.js?v={{$static_cache_version}}"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/plugins/qrcode.js?v={{$static_cache_version}}"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/plugins/jquery.minicolors.min.js?v={{$static_cache_version}}"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/plugins/jspdf/canvas2image.js?v={{$static_cache_version}}"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/plugins/jspdf/canvg.min.js?v={{$static_cache_version}}"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/plugins/jspdf/html2canvas.min.js?v={{$static_cache_version}}"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/plugins/jspdf/jspdf.min.js?v={{$static_cache_version}}"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/hiprint/hiprint.config.js?v={{$static_cache_version}}"></script>
{{/if}}
<!-- 调用摄像头扫码js -->
{{if isset($is_load_video_scan) and $is_load_video_scan eq 1}}
<script type="text/javascript" src="{{$public_host}}static/common/lib/ZXing/ZXing.min.js"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/ZXing/ZXing.min.js?v={{$static_cache_version}}"></script>
{{/if}}
<!-- 代码编辑器js -->
{{if isset($is_load_ace_builds) and $is_load_ace_builds eq 1}}
<script type="text/javascript" src="{{$public_host}}static/common/lib/ace-builds/src-min/ace.js"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/ace-builds/src-min/ace.js?v={{$static_cache_version}}"></script>
{{/if}}
<!-- 范围滑条 -->
{{if isset($is_load_jrange) and $is_load_jrange eq 1}}
<script type="text/javascript" src="{{$public_host}}static/common/lib/jRange/jquery.range.js"></script>
<script type="text/javascript" src="{{$public_host}}static/common/lib/jRange/jquery.range.js?v={{$static_cache_version}}"></script>
{{/if}}
<!-- webuploader -->
{{if isset($is_load_webuploader) and $is_load_webuploader eq 1}}
<script type="text/javascript" src="{{$public_host}}static/common/lib/ueditor/third-party/webuploader/webuploader.min.js?v={{$static_cache_version}}"></script>
{{/if}}
<!-- 隐藏编辑器初始化 -->
@ -245,33 +253,33 @@
</script>
<!-- 项目公共 -->
<script type='text/javascript' src="{{$public_host}}static/common/js/common.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/js/common.js?v={{$static_cache_version}}"></script>
{{if !empty($static_path_data['common_js'])}}
<script type='text/javascript' src="{{$public_host}}static/{{$static_path_data.common_js}}?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/{{$static_path_data.common_js}}?v={{$static_cache_version}}"></script>
{{/if}}
{{if !empty($static_path_data['theme_import_js']) and is_array($static_path_data['theme_import_js'])}}
{{foreach $static_path_data.theme_import_js as $v}}
<script type='text/javascript' src="{{$public_host}}static/{{$v}}?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/{{$v}}?v={{$static_cache_version}}"></script>
{{/foreach}}
{{/if}}
{{if !empty($static_path_data['module_js'])}}
<script type='text/javascript' src="{{$public_host}}static/{{$static_path_data.module_js}}?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/{{$static_path_data.module_js}}?v={{$static_cache_version}}"></script>
{{/if}}
{{if !empty($static_path_data['other_js'])}}
<script type='text/javascript' src="{{$public_host}}static/{{$static_path_data.other_js}}?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/{{$static_path_data.other_js}}?v={{$static_cache_version}}"></script>
{{/if}}
{{if isset($is_load_layout_admin) and $is_load_layout_admin eq 1}}
<script type='text/javascript' src="{{$public_host}}static/common/js/layout.admin.js?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/common/js/layout.admin.js?v={{$static_cache_version}}"></script>
{{/if}}
<!-- 应用插件公共js -->
{{if !empty($static_path_data['plugins_js'])}}
<script type='text/javascript' src="{{$public_host}}static/{{$static_path_data.plugins_js}}?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/{{$static_path_data.plugins_js}}?v={{$static_cache_version}}"></script>
{{/if}}
<!-- 当前控制器js -->
{{if !empty($static_path_data['page_js'])}}
<script type='text/javascript' src="{{$public_host}}static/{{$static_path_data.page_js}}?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}static/{{$static_path_data.page_js}}?v={{$static_cache_version}}"></script>
{{/if}}
<!-- js钩子 -->
@ -279,17 +287,17 @@
{{foreach $plugins_admin_js_data as $hook}}
{{if !empty($hook) and is_string($hook)}}
{{if substr($hook, 0, 4) eq 'http'}}
<script type='text/javascript' src="{{$hook}}?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$hook}}?v={{$static_cache_version}}"></script>
{{else /}}
<script type='text/javascript' src="{{$public_host}}{{$hook}}?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}{{$hook}}?v={{$static_cache_version}}"></script>
{{/if}}
{{elseif is_array($hook) /}}
{{foreach $hook as $hook_js}}
{{if !empty($hook_js) and is_string($hook_js)}}
{{if substr($hook_js, 0, 4) eq 'http'}}
<script type='text/javascript' src="{{$hook_js}}?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$hook_js}}?v={{$static_cache_version}}"></script>
{{else /}}
<script type='text/javascript' src="{{$public_host}}{{$hook_js}}?v={{:MyC('home_static_cache_version')}}"></script>
<script type='text/javascript' src="{{$public_host}}{{$hook_js}}?v={{$static_cache_version}}"></script>
{{/if}}
{{/if}}
{{/foreach}}

View File

@ -5,38 +5,41 @@
<link rel="shortcut icon" type="image/x-icon" href="{{$public_host}}favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1, maximum-scale=1" />
<title>{{$admin_theme_site_name}}{{:MyLang('common.admin_browser_title')}}</title>
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/iconfont/iconfont.css?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/assets/css/amazeui.css?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/amazeui-switch/amazeui.switch.css?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/amazeui-chosen/amazeui.chosen.css?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/amazeui-tagsinput/amazeui.tagsinput.css?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/iconfont/iconfont.css?v={{$static_cache_version}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/assets/css/amazeui.css?v={{$static_cache_version}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/amazeui-switch/amazeui.switch.css?v={{$static_cache_version}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/amazeui-chosen/amazeui.chosen.css?v={{$static_cache_version}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/amazeui-tagsinput/amazeui.tagsinput.css?v={{$static_cache_version}}" />
<!-- 轮播插件 -->
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/swiper/swiper.min.css?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/swiper/swiper-bundle.min.css?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/swiper/swiper.min.css?v={{$static_cache_version}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/swiper/swiper-bundle.min.css?v={{$static_cache_version}}" />
<!-- highlight代码高亮 -->
<link rel="stylesheet" href="{{$public_host}}static/common/lib/highlight/monokai_sublime.min.css?v={{$static_cache_version}}" />
<!-- 公共css -->
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/css/common.css?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/css/common.css?v={{$static_cache_version}}" />
<!-- 模块公共css -->
{{if !empty($static_path_data['common_css'])}}
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/{{$static_path_data.common_css}}?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/{{$static_path_data.common_css}}?v={{$static_cache_version}}" />
{{/if}}
{{if !empty($static_path_data['theme_import_css']) and is_array($static_path_data['theme_import_css'])}}
{{foreach $static_path_data.theme_import_css as $v}}
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/{{$v}}?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/{{$v}}?v={{$static_cache_version}}" />
{{/foreach}}
{{/if}}
{{if !empty($static_path_data['module_css'])}}
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/{{$static_path_data.module_css}}?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/{{$static_path_data.module_css}}?v={{$static_cache_version}}" />
{{/if}}
{{if !empty($static_path_data['other_css'])}}
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/{{$static_path_data.other_css}}?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/{{$static_path_data.other_css}}?v={{$static_cache_version}}" />
{{/if}}
<!-- ckplayer播放器 -->
{{if isset($is_load_ckplayer) and $is_load_ckplayer eq 1}}
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/ckplayer/css/ckplayer.css?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/ckplayer/css/ckplayer.css?v={{$static_cache_version}}" />
{{/if}}
<!-- 打印css -->
@ -47,25 +50,30 @@
<!-- 范围滑条 -->
{{if isset($is_load_jrange) and $is_load_jrange eq 1}}
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/jRange/jquery.range.css?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/jRange/jquery.range.css?v={{$static_cache_version}}" />
{{/if}}
<!-- webuploader -->
{{if isset($is_load_webuploader) and $is_load_webuploader eq 1}}
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/lib/ueditor/third-party/webuploader/webuploader.css?v={{$static_cache_version}}" />
{{/if}}
<!-- 可视化拖拽 -->
{{if isset($is_load_layout) and $is_load_layout eq 1}}
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/css/layout.css?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/css/layout.css?v={{$static_cache_version}}" />
{{/if}}
{{if isset($is_load_layout_admin) and $is_load_layout_admin eq 1}}
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/css/layout.admin.css?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/common/css/layout.admin.css?v={{$static_cache_version}}" />
{{/if}}
<!-- 插件 -->
{{if !empty($static_path_data['plugins_css'])}}
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/{{$static_path_data.plugins_css}}?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/{{$static_path_data.plugins_css}}?v={{$static_cache_version}}" />
{{/if}}
<!-- 页面样式 -->
{{if !empty($static_path_data['page_css'])}}
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/{{$static_path_data.page_css}}?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}static/{{$static_path_data.page_css}}?v={{$static_cache_version}}" />
{{/if}}
<!-- css钩子 -->
@ -73,17 +81,17 @@
{{foreach $plugins_admin_css_data as $hook}}
{{if !empty($hook) and is_string($hook)}}
{{if substr($hook, 0, 4) eq 'http'}}
<link rel="stylesheet" type="text/css" href="{{$hook}}?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$hook}}?v={{$static_cache_version}}" />
{{else /}}
<link rel="stylesheet" type="text/css" href="{{$public_host}}{{$hook}}?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}{{$hook}}?v={{$static_cache_version}}" />
{{/if}}
{{elseif is_array($hook) /}}
{{foreach $hook as $hook_css}}
{{if !empty($hook_css) and is_string($hook_css)}}
{{if substr($hook_css, 0, 4) eq 'http'}}
<link rel="stylesheet" type="text/css" href="{{$hook_css}}?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$hook_css}}?v={{$static_cache_version}}" />
{{else /}}
<link rel="stylesheet" type="text/css" href="{{$public_host}}{{$hook_css}}?v={{:MyC('home_static_cache_version')}}" />
<link rel="stylesheet" type="text/css" href="{{$public_host}}{{$hook_css}}?v={{$static_cache_version}}" />
{{/if}}
{{/if}}
{{/foreach}}

View File

@ -0,0 +1,36 @@
<form class="am-form package-install-list-container"
data-url="{{:MyUrl('admin/packageinstall/install')}}"
data-type="{{if !empty($module_data['type'])}}{{$module_data.type}}{{/if}}"
data-back-url="{{if !empty($module_data['back_url'])}}{{$module_data.back_url}}{{/if}}"
data-back-url-field="{{if !empty($module_data['back_url_field'])}}{{$module_data.back_url_field}}{{/if}}"
data-back-url-is-new-win="{{if isset($module_data['back_url_is_new_win'])}}{{$module_data.back_url_is_new_win}}{{/if}}"
data-back-url-is-new-win-data-list-query="{{if isset($module_data['back_url_is_new_win_data_list_query'])}}{{$module_data.back_url_is_new_win_data_list_query}}{{/if}}"
data-back-url-is-new-win-refresh="{{if isset($module_data['back_url_is_new_win_refresh'])}}{{$module_data.back_url_is_new_win_refresh}}{{/if}}"
data-back-win-refresh-type="{{if isset($module_data['back_win_refresh_type'])}}{{$module_data.back_win_refresh_type}}{{/if}}"
>
<!-- 搜索 -->
<div class="forth-selection-container" data-search-url="{{if !empty($module_data['search_url'])}}{{$module_data.search_url}}{{/if}}">
<input type="text" placeholder="{{:MyLang('form_search_keywords_placeholder')}}" class="am-radius forth-selection-form-keywords" />
<button type="button" class="am-btn am-btn-primary am-radius am-btn-xs search-submit" data-am-loading="{spinner: 'circle-o-notch', loadingText: '{{:MyLang('search_title')}}'}">
<i class="iconfont icon-search"></i>
<span>{{:MyLang('search_title')}}</span>
</button>
<label class="am-checkbox-inline am-margin-left-sm am-margin-top-xs">
<input type="checkbox" value="1" class="is-already-buy" data-am-ucheck /> {{:MyLang('already_buy_title')}}
</label>
{{if !empty($module_data['more_download_url']) and !empty($module_data['more_download_name']) and $is_system_show_base eq 1 and AdminIsPower('packageinstall', 'index')}}
<a class="am-fr am-margin-top-sm" href="{{$module_data.more_download_url}}" target="_blank">
<i class="iconfont icon-download-btn"></i>
<span class="am-margin-left-xs">{{$module_data.more_download_name}}</span>
</a>
{{/if}}
</div>
<!-- 数据列表 -->
<div class="am-scrollable-vertical am-margin-top-sm am-padding-bottom-xs am-radius package-data-list-container" data-loading-msg="{{:MyLang('searching_tips')}}">
<ul class="am-gallery am-gallery-bordered am-avg-sm-2 am-avg-md-3 am-avg-lg-6"></ul>
</div>
<!-- 分页 -->
<div class="am-margin-top-sm am-text-center package-data-page-container"></div>
</form>

View File

@ -0,0 +1,48 @@
{{if !empty($data_list) and is_array($data_list)}}
{{foreach $data_list as $v}}
<li>
<div class="am-gallery-item am-radius">
<div class="am-padding-xs">
<div class="images-content am-radius am-nbfc">
<img src="{{$v.images}}" class="am-radius" />
<a href="{{$v.goods_url}}" target="_blank" class="am-btn am-btn-primary-light am-btn-xs am-round">
<i class="iconfont icon-eye"></i>
<span>{{:MyLang('view_detail_title')}}</span>
</a>
</div>
<p class="am-margin-top-xs am-text-sm am-text-truncate-2">{{$v.title}}</p>
<div class="am-margin-top-xs am-flex am-flex-justify-between am-flex-items-center">
<strong class="am-text-sm am-color-{{if $v['min_price'] gt 0}}price{{else /}}green{{/if}}">{{$v.price_data.value}}</strong>
{{if $v.buy_data.status eq 1}}
<button type="button" class="am-btn am-btn-success am-btn-xs am-radius package-install-submit" data-id="{{$v.id}}">{{$v.buy_data.title}}</button>
{{elseif $v.buy_data.status eq 2 /}}
<button type="button" class="am-btn am-btn-primary am-btn-xs am-radius package-install-submit" disabled>{{$v.buy_data.title}}</button>
{{else /}}
<a href="{{$v.goods_url}}" target="_blank" class="am-btn am-btn-primary am-btn-xs am-radius am-fr">{{$v.buy_data.title}}</a>
{{/if}}
</div>
<div class="am-margin-top-sm am-flex am-flex-justify-between">
<div class="am-dropdown am-dropdown-up" data-am-dropdown>
<span class="am-color-grey am-dropdown-toggle">{{$v.version_apply.name}}</span>
<div class="am-dropdown-content am-radius am-padding-0">
<div class="am-radius am-nbfc">
<div class="am-scrollable-vertical am-padding-sm">{{:implode('<br />', $v.version_apply.data)}}</div>
</div>
</div>
</div>
{{if !empty($v['buy_auth_domain'])}}
<div class="am-dropdown am-dropdown-up" data-am-dropdown>
<span class="am-color-grey am-dropdown-toggle iconfont icon-domain"> {{:MyLang('auth_domain_title')}}</span>
<div class="am-dropdown-content am-radius am-padding-0">
<div class="am-radius am-nbfc">
<div class="am-scrollable-vertical am-padding-sm">{{:implode('<br />', $v.buy_auth_domain)}}</div>
</div>
</div>
</div>
{{/if}}
</div>
</div>
</div>
</li>
{{/foreach}}
{{/if}}

View File

@ -0,0 +1,5 @@
<div class="am-padding-xl am-margin-top-xl am-padding-bottom-xl am-text-center">
<button type="button" class="am-btn am-btn-primary am-radius am-btn-xs am-margin-left-xs am-icon-gg store-accounts-event"> {{:MyLang('store_bind_accounts_name')}}</button>
<p class="am-color-grey am-margin-top-sm">{{:MyLang('store_bind_accounts_tips')}}</p>
<p class="am-color-yellow am-margin-top-xl">{{:MyLang('store_already_bind_accounts_tips')}}</p>
</div>

View File

@ -1,9 +1,10 @@
{{if !empty($module_data['plugins']) and (!empty($module_data['title']) or (!empty($module_data['nav_data']) and is_array($module_data['nav_data'])))}}
<div class="nav-switch-tabs am-pr plugins-admin-nav-container {{$module_data.plugins}}">
<div class="nav-switch-tabs am-pr plugins-admin-nav-container {{if !empty($module_data['nav_data']) and is_array($module_data['nav_data'])}} admin-nav-data{{/if}} {{$module_data.plugins}}">
{{if !isset($module_data['is_back_btn']) or $module_data['is_back_btn'] eq 1}}
<a href="{{if empty($module_data['back_url'])}}{{:MyUrl('admin/pluginsadmin/index')}}{{else /}}{{$module_data.back_url}}{{/if}}" class="form-nav-top-right-retreat am-fr am-text-lg">
<a href="{{if empty($module_data['back_url'])}}{{:MyUrl('admin/pluginsadmin/index')}}{{else /}}{{$module_data.back_url}}{{/if}}" class="form-nav-top-retreat am-text-lg">
<i class="iconfont icon-back"></i>
</a>
<em class="form-nav-top-retreat-ds am-color-grey-light am-text-xs am-margin-left am-margin-right-xs">|</em>
{{/if}}
{{if !empty($module_data['nav_data']) and is_array($module_data['nav_data'])}}
<ul>

View File

@ -69,7 +69,7 @@
<div class="am-flex am-flex-col am-flex-items-center drop-mode am-color-999 am-text-xs am-gap-1">
<img src="{{:StaticAttachmentUrl('site/siteset/index/drop.png')}}"/>
{{:MyLang('site.site_setup_layout_tips')}}
<a href="{{:MyUrl('index/index/index', ['is_design'=>1, 'save_url'=>urlencode(base64_encode(MyUrl('admin/layout/layoutindexhomesave')))])}}" target="_blank" class="am-btn am-btn-primary am-radius">{{:MyLang('site.site_setup_layout_button_name')}}</a>
<a href="{{:MyUrl('index/index/index', ['is_design'=>1, 'save_url'=>urlencode(base64_encode(MyUrl('admin/layout/layoutindexhomesave')))])}}" target="_blank" class="am-btn am-btn-primary am-btn-xs am-radius">{{:MyLang('site.site_setup_layout_button_name')}}</a>
</div>
</div>
</div>
@ -238,11 +238,10 @@
<!-- right content end -->
<!-- 商品添加弹窗 -->
<div class="am-popup am-radius" id="siteset-goods-popup">
<div class="am-popup am-radius am-popup-full-max-lg" id="siteset-goods-popup">
<div class="am-popup-inner">
<div class="am-popup-hd">
<h4 class="am-popup-title">{{:MyLang('site.add_goods_title')}}</h4>
<span class="am-icon-arrows-alt am-full"></span>
<span data-am-modal-close class="am-close">&times;</span>
</div>
<div class="am-popup-bd am-padding-0">
@ -276,7 +275,7 @@
<!-- 商品列表 -->
<div class="am-scrollable-vertical am-margin-top-sm am-padding-bottom-xs am-radius goods-list-container" data-loading-msg="{{:MyLang('searching_tips')}}">
<ul class="am-gallery am-avg-sm-3 am-avg-md-4 am-avg-lg-5 am-gallery-bordered"></ul>
<ul class="am-gallery am-avg-sm-2 am-avg-md-6 am-avg-lg-8 am-gallery-bordered"></ul>
</div>
<!-- 分页 -->

View File

@ -145,10 +145,10 @@
</div>
<p>{{:MyLang('site.site_setup_order_default_payment_tips')}}</p>
</div>
<div class="am-flex am-flex-warp am-gap-12 payment-list-width">
<div class="default-payment-list am-margin-bottom-lg">
{{foreach $common_platform_type as $v}}
<div class="am-form-group am-flex-shrink">
<label>{{$v.name}}</label>
<div class="am-flex am-flex-row am-flex-items-center am-gap-1 am-margin-top-sm">
<span class="am-text-right">{{$v.name}}</span>
<select name="common_default_payment[{{$v.value}}]" class="am-radius chosen-select" data-placeholder="{{:MyLang('optional_tips')}}" data-validation-message="{{:MyLang('site.site_setup_choice_payment_message', ['name'=>$v['name']])}}">
<option value="">{{:MyLang('optional_tips')}}</option>
{{if !empty($payment_list)}}

View File

@ -113,6 +113,16 @@
{{/foreach}}
</div>
</div>
<div class="am-form-group">
<label>{{$data.home_search_is_place_origin.name}}<span class="am-form-group-label-tips">{{$data.home_search_is_place_origin.describe}}</span></label>
<div class="am-radio-group">
{{foreach $common_close_open_list as $v}}
<label class="am-radio-inline">
<input type="radio" value="{{$v.value}}" name="{{$data.home_search_is_place_origin.only_tag}}" data-validation-message="{{$data.home_search_is_place_origin.error_tips}}" required {{if isset($data['home_search_is_place_origin']['value']) and $data['home_search_is_place_origin']['value'] eq $v['value']}}checked{{/if}} data-am-ucheck>{{$v.name}}
</label>
{{/foreach}}
</div>
</div>
<div class="am-form-group">
<label>{{$data.home_search_is_params.name}}<span class="am-form-group-label-tips">{{$data.home_search_is_params.describe}}</span></label>
<div class="am-radio-group">

View File

@ -26,6 +26,17 @@
</div>
</div>
<div class="am-form-group">
<label class="am-block">{{$data.common_images_verify_rand_type.name}}<span class="am-form-group-label-tips">{{$data.common_images_verify_rand_type.describe}}</span></label>
<div class="am-radio-group">
{{foreach $common_site_images_verify_rand_type_list as $v}}
<label class="am-radio-inline">
<input type="radio" name="{{$data.common_images_verify_rand_type.only_tag}}" value="{{$v.value}}" {{if isset($data['common_images_verify_rand_type']['value']) and $v['value'] eq $data['common_images_verify_rand_type']['value']}}checked{{/if}} data-validation-message="{{$data.common_images_verify_rand_type.error_tips}}" data-am-ucheck /> {{$v.name}}
</label>
{{/foreach}}
</div>
</div>
<div class="am-form-group">
<label class="am-block">{{$data.common_images_verify_rules.name}}<span class="am-form-group-label-tips">{{$data.common_images_verify_rules.describe}}</span></label>
<div class="am-checkbox-group">

View File

@ -7,11 +7,13 @@
{{if AdminIsPower('themedata', 'upload')}}
<div class="am-g am-padding-bottom am-border-bottom-f8 am-margin-bottom">
<div class="am-flex am-flex-justify-between am-flex-items-center am-flex-warp am-gap-12">
<button type="button" class="am-btn am-btn-default-plain am-btn-xs am-radius submit-popup" data-url="{{:MyUrl('admin/themeadmin/index', ['view_type'=>'upload'])}}" data-title="{{:MyLang('themeadmin.base_upload_theme_name')}}">
<i class="iconfont icon-upload"></i>
<span>{{:MyLang('themeadmin.base_upload_theme_name')}}</span>
</button>
{{if AdminIsPower('packageinstall', 'index') and !empty($store_theme_url)}}
{{if AdminIsPower('themeadmin', 'upload')}}
<button type="button" class="am-btn am-btn-default-plain am-btn-xs am-radius submit-popup" data-url="{{:MyUrl('admin/themeadmin/index', ['view_type'=>'upload'])}}" data-title="{{:MyLang('themeadmin.base_upload_theme_name')}}" data-full-max="1" data-full-max-size="xl">
<i class="iconfont icon-upload"></i>
<span>{{:MyLang('themeadmin.base_upload_theme_name')}}</span>
</button>
{{/if}}
{{if $is_system_show_base eq 1 and AdminIsPower('packageinstall', 'index') and !empty($store_theme_url)}}
<a class="am-text-sm am-flex nwarp" href="{{$store_theme_url}}" target="_blank">
<i class="iconfont icon-download-btn"></i>
<span class="am-hide-sm-only am-margin-left-xs">{{:MyLang('themeadmin.base_nav_store_theme_name')}}</span>

80
app/admin/view/default/themeadmin/upload.html Executable file → Normal file
View File

@ -1,33 +1,59 @@
{{:ModuleInclude('public/header')}}
<!-- right content start -->
<div class="content-right">
<div class="content">
<!-- form start -->
<form class="am-form form-validation am-form-popup-fixed" action="{{:MyUrl('admin/themeadmin/upload')}}" method="POST" request-type="ajax-reload" request-value="parent" enctype="multipart/form-data">
<div class="am-form-group am-flex-1">
<div class="am-form-file">
<button type="button" class="am-btn am-btn-default am-btn-xl am-radius"><i class="iconfont icon-upload-file"></i></button>
<input type="file" name="theme" class="file-event" data-tips-tag="#form-theme-tips" data-validation-message="{{:MyLang('form_upload_file_message')}}" accept=".zip" required />
<div id="form-theme-tips" class="am-margin-top-sm"></div>
<div class="tips am-text-xs am-color-ccc am-margin-top-sm">{{:MyLang('common_service.themeadmin.form_item_upload_tips')}}</div>
{{if $is_not_bind_accounts eq 1}}
<div class="am-padding-xl am-margin-top-xl am-padding-bottom-xl am-text-center">
<button type="button" class="am-btn am-btn-primary am-radius am-btn-xs am-margin-left-xs am-icon-gg store-accounts-event"> {{:MyLang('store_bind_accounts_name')}}</button>
<p class="am-color-grey am-margin-top-sm">{{:MyLang('store_bind_accounts_tips')}}</p>
<p class="am-color-yellow am-margin-top-xl">{{:MyLang('store_already_bind_accounts_tips')}}</p>
</div>
{{else /}}
{{:ModuleInclude('public/detail_nav_switch_tabs', [
'nav_data' => [
[
'name' => MyLang('local_import_title'),
'key' => 'upload',
],
[
'name' => MyLang('template_market_title'),
'key' => 'market',
],
]
])}}
<div class="detail-content-switch-data-item">
<div class="item am-ht-auto am-active" data-key="upload">
<form class="am-form form-validation am-form-popup-fixed am-upload-file" action="{{:MyUrl('admin/themeadmin/upload')}}" method="POST" request-type="ajax-reload" request-value="parent" enctype="multipart/form-data">
<div class="am-form-group am-flex-1">
<div class="am-form-file">
<button type="button" class="am-btn am-btn-default am-btn-xl am-radius"><i class="iconfont icon-upload-file"></i></button>
<input type="file" name="theme" class="file-event" data-tips-tag="#form-theme-tips" data-validation-message="{{:MyLang('form_upload_file_message')}}" accept=".zip" required />
<div id="form-theme-tips" class="am-margin-top-sm"></div>
<div class="tips am-text-xs am-color-ccc am-margin-top-sm">{{:MyLang('common_service.themeadmin.form_item_upload_tips')}}</div>
</div>
</div>
</div>
<div class="am-form-popup-submit">
<button type="button" class="am-btn am-btn-warning am-btn-xs am-radius" data-am-modal-close>
<i class="am-icon-paint-brush"></i>
<span>{{:MyLang('cancel_title')}}</span>
</button>
<button type="submit" class="am-btn am-btn-primary am-btn-xs am-radius btn-loading-example am-margin-left" data-am-loading="{loadingText:'{{:MyLang('processing_tips')}}'}">
<i class="am-icon-check"></i>
<span>{{:MyLang('confirm_title')}}</span>
</button>
</div>
</form>
<!-- form end -->
</div>
</div>
<!-- right content end -->
<div class="am-form-popup-submit">
<button type="button" class="am-btn am-btn-warning am-btn-xs am-radius" data-am-modal-close>
<i class="am-icon-paint-brush"></i>
<span>{{:MyLang('cancel_title')}}</span>
</button>
<button type="submit" class="am-btn am-btn-primary am-btn-xs am-radius btn-loading-example am-margin-left" data-am-loading="{loadingText:'{{:MyLang('processing_tips')}}'}">
<i class="am-icon-check"></i>
<span>{{:MyLang('confirm_title')}}</span>
</button>
</div>
</form>
</div>
<!-- 模板市场 -->
<div class="item am-ht-auto" data-key="market">
{{:ModuleInclude('public/market/index', [
'type' => 'webtheme',
'back_win_refresh_type' => 'none',
'search_url' => MyUrl('admin/themeadmin/market'),
'more_download_url' => empty($store_theme_url) ? '' : $store_theme_url,
'more_download_name' => MyLang('themeadmin.base_nav_store_theme_name'),
])}}
</div>
</div>
{{/if}}
<!-- footer start -->
{{:ModuleInclude('public/footer')}}

View File

@ -53,8 +53,8 @@
<div class="am-form-group am-flex-1">
<div class="am-form-file">
<button type="button" class="am-btn am-btn-default am-btn-xl am-radius"><i class="iconfont icon-upload-file"></i></button>
<input type="file" name="file" class="file-event" data-tips-tag="#form-payment-tips" data-validation-message="{{:MyLang('form_upload_file_message')}}" accept=".zip" multiple required />
<div id="form-payment-tips" class="am-margin-top-xs"></div>
<input type="file" name="file" class="file-event" data-tips-tag="#form-upload-file-tips" data-validation-message="{{:MyLang('form_upload_file_message')}}" accept=".zip" multiple required />
<div id="form-upload-file-tips" class="am-margin-top-xs"></div>
<div class="tips am-text-xs am-color-ccc am-margin-top-sm">
{{if is_array(MyLang('themedata.upload_list_tips'))}}
<p class="am-margin-top-xs">{{:implode('</p><p class="am-margin-top-xs">', MyLang('themedata.upload_list_tips'))}}</p>

View File

@ -2,7 +2,6 @@
<div class="am-popup-inner">
<div class="am-popup-hd">
<h4 class="am-popup-title">{{:MyLang('common_service.themedata.add_article_title')}}</h4>
<span class="am-icon-arrows-alt am-full"></span>
<span data-am-modal-close class="am-close">&times;</span>
</div>
<div class="am-popup-bd am-padding-0">

View File

@ -2,7 +2,6 @@
<div class="am-popup-inner">
<div class="am-popup-hd">
<h4 class="am-popup-title">{{:MyLang('common_service.themedata.add_goods_title')}}</h4>
<span class="am-icon-arrows-alt am-full"></span>
<span data-am-modal-close class="am-close">&times;</span>
</div>
<div class="am-popup-bd am-padding-0">

View File

@ -98,7 +98,9 @@
<input type="text" name="idcard_front" value="{{$data.idcard_front}}" />
{{/if}}
<img src="{{if empty($data['idcard_front'])}}{{:StaticAttachmentUrl('default-idcard-front.jpg')}}{{else /}}{{$data.idcard_front}}{{/if}}" />
<i class="iconfont icon-close"></i>
{{if !empty($data['idcard_front'])}}
<i class="iconfont icon-close"></i>
{{/if}}
</li>
</ul>
<div class="plug-file-upload-submit am-margin-top-sm" data-view-tag="ul.images-idcard_front">+ {{:MyLang('common_service.useraddress.form_item_idcard_front_button_name')}}</div>
@ -110,7 +112,9 @@
<input type="text" name="idcard_back" value="{{$data.idcard_back}}" />
{{/if}}
<img src="{{if empty($data['idcard_back'])}}{{:StaticAttachmentUrl('default-idcard-back.jpg')}}{{else /}}{{$data.idcard_back}}{{/if}}" />
<i class="iconfont icon-close"></i>
{{if !empty($data['idcard_back'])}}
<i class="iconfont icon-close"></i>
{{/if}}
</li>
</ul>
<div class="plug-file-upload-submit am-margin-top-sm" data-view-tag="ul.images-idcard_back">+ {{:MyLang('common_service.useraddress.form_item_idcard_back_button_name')}}</div>

View File

@ -14,11 +14,10 @@
<!-- 公共代码 -->
{{block name="form_page_bottom"}}
<!-- 商品添加弹窗 -->
<div class="am-popup am-radius" id="warehouse-goods-popup">
<div class="am-popup am-radius am-popup-full-max-lg" id="warehouse-goods-popup">
<div class="am-popup-inner">
<div class="am-popup-hd">
<h4 class="am-popup-title">{{:MyLang('warehousegoods.add_goods_title')}}</h4>
<span class="am-icon-arrows-alt am-full"></span>
<span data-am-modal-close class="am-close">&times;</span>
</div>
<div class="am-popup-bd am-padding-0">
@ -59,8 +58,8 @@
</div>
<!-- 商品列表 -->
<div class="am-scrollable-vertical am-margin-top-sm am-padding-bottom-xs goods-list-container" data-loading-msg="{{:MyLang('searching_tips')}}" data-add-url="{{:MyUrl('admin/warehousegoods/goodsadd')}}" data-del-url="{{:MyUrl('admin/warehousegoods/goodsdel')}}">
<ul class="am-gallery am-avg-sm-3 am-avg-md-4 am-avg-lg-5 am-gallery-bordered"></ul>
<div class="am-scrollable-vertical am-margin-top-sm am-padding-bottom-xs am-radius goods-list-container" data-loading-msg="{{:MyLang('searching_tips')}}" data-add-url="{{:MyUrl('admin/warehousegoods/goodsadd')}}" data-del-url="{{:MyUrl('admin/warehousegoods/goodsdel')}}">
<ul class="am-gallery am-avg-sm-2 am-avg-md-6 am-avg-lg-8 am-gallery-bordered"></ul>
</div>
<!-- 分页 -->

View File

@ -5,7 +5,7 @@
<strong class="am-fr">{{$module_data.spec[0]['inventory']}}</strong>
</div>
{{if count($module_data.spec) gt 1}}
<a href="javascript:;" class="am-text-blue" data-am-modal="{target: '#warehousegoods-spec-inventory-modal-{{$module_data.id}}', width: 300}">{{:MyLang('view_title')}}({{:count($module_data.spec)}}) ></a>
<a href="javascript:;" class="am-color-blue" data-am-modal="{target: '#warehousegoods-spec-inventory-modal-{{$module_data.id}}', width: 300}">{{:MyLang('view_title')}}({{:count($module_data.spec)}}) ></a>
<div class="am-modal am-modal-no-btn" tabindex="-1" id="warehousegoods-spec-inventory-modal-{{$module_data.id}}">
<div class="am-modal-dialog">
<div class="am-modal-hd">

View File

@ -13,7 +13,6 @@ namespace app\api\controller;
use app\BaseController;
use app\service\ApiService;
use app\service\SystemService;
use app\service\ConfigService;
use app\service\UserService;
use app\module\FormTableHandleModule;
@ -71,17 +70,12 @@ class Common extends BaseController
// 检测是否是新安装
SystemService::SystemInstallCheck();
// 输入参数
$this->data_post = input('post.');
$this->data_get = input('get.');
$this->data_request = input();
// 系统初始化
$this->SystemInit();
// 系统运行开始
SystemService::SystemBegin($this->data_request);
// 系统初始化
$this->SystemInit();
// 网站状态
$this->SiteStstusCheck();
@ -116,8 +110,10 @@ class Common extends BaseController
*/
private function SystemInit()
{
// 配置信息初始化
ConfigService::ConfigInit();
// 输入参数
$this->data_post = input('post.');
$this->data_get = input('get.');
$this->data_request = input();
}
/**

View File

@ -13,7 +13,7 @@ namespace app\api\controller;
use app\service\ApiService;
use app\service\DesignService;
use app\service\SystemBaseService;
use app\layout\service\BaseLayout;
use app\module\LayoutModule;
/**
* 页面设计
@ -35,39 +35,62 @@ class Design extends Common
*/
public function Index()
{
$data = null;
$layout_data = null;
if(!empty($this->data_request['id']))
{
$data_params = [
'where' => [
'id' => intval($this->data_request['id']),
],
'm' => 0,
'n' => 1,
];
$ret = DesignService::DesignList($data_params);
if($ret['code'] == 0 && !empty($ret['data']) && !empty($ret['data'][0]))
$key = 'api_design_data_'.intval($this->data_request['id']).'_'.APPLICATION_CLIENT_TYPE;
$result = MyCache($key);
if(empty($result) || (isset($this->data_request['is_cache']) && $this->data_request['is_cache'] == 0))
{
$data = $ret['data'][0];
// 数据容器
$data = null;
$layout_data = null;
// 访问统计
DesignService::DesignAccessCountInc(['design_id'=>$data['id']]);
// 获取design数据
$data_params = [
'where' => [
'id' => intval($this->data_request['id']),
],
'm' => 0,
'n' => 1,
];
$ret = DesignService::DesignList($data_params);
if($ret['code'] == 0 && !empty($ret['data']) && !empty($ret['data'][0]))
{
$data = $ret['data'][0];
// 配置处理
$layout_data = BaseLayout::ConfigHandle($data['config']);
// 访问统计
DesignService::DesignAccessCountInc(['design_id'=>$data['id']]);
// 去除布局配置数据、避免很多配置数据造成带宽浪费
unset($data['config']);
// 配置处理
$layout_data = LayoutModule::ConfigHandle($data['config']);
// 去除布局配置数据、避免很多配置数据造成带宽浪费
unset($data['config']);
}
// 返回数据
$result = SystemBaseService::DataReturn([
'data' => $data,
'layout_data' => $layout_data,
]);
// 缓存数据、没有用户登录信息则存储缓存
if(empty($this->user))
{
MyCache($key, $result, 3600);
}
} else {
$result['data']['is_result_data_cache'] = 1;
}
}
// 返回数据
$result = [
'data' => $data,
'layout_data' => $layout_data,
];
return ApiService::ApiDataReturn(SystemBaseService::DataReturn($result));
// 访问统计
if(!empty($result['data']) && !empty($result['data']['data']))
{
DesignService::DesignAccessCountInc(['design_id'=>$result['data']['data']['id']]);
}
return ApiService::ApiDataReturn($result);
}
return ApiService::ApiDataReturn(DataReturn(MyLang('no_data'), -1));
}
}
?>

View File

@ -12,6 +12,7 @@ namespace app\api\controller;
use think\facade\Db;
use app\service\ResourcesService;
use app\service\AttachmentService;
use app\service\RegionService;
use app\service\GoodsService;
use app\service\WarehouseGoodsService;
@ -66,7 +67,7 @@ class Devtest extends Common
{
if($file != 'index.html' && $file != '.' && $file != '..' && substr($file, 0, 1) != '.')
{
$ret = ResourcesService::AttachmentDiskFilesToDb($file);
$ret = AttachmentService::AttachmentDiskFilesToDb($file);
if(isset($ret['msg']))
{
echo $ret['msg'];

View File

@ -0,0 +1,70 @@
<?php
// +----------------------------------------------------------------------
// | ShopXO 国内领先企业级B2C免费开源电商系统
// +----------------------------------------------------------------------
// | Copyright (c) 2011~2099 http://shopxo.net All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( https://opensource.org/licenses/mit-license.php )
// +----------------------------------------------------------------------
// | Author: Devil
// +----------------------------------------------------------------------
namespace app\api\controller;
use app\service\ApiService;
use app\service\DiyService;
use app\service\SystemBaseService;
/**
* DIY
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-09-10
* @desc description
*/
class Diy extends Common
{
/**
* 首页
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2020-09-10
* @desc description
*/
public function Index()
{
if(!empty($this->data_request['id']))
{
$key = 'api_diy_data_'.intval($this->data_request['id']).'_'.APPLICATION_CLIENT_TYPE;
$result = MyCache($key);
if(empty($result) || (isset($this->data_request['is_cache']) && $this->data_request['is_cache'] == 0))
{
// 获取diy数据
$data = DiyService::DiyData($this->data_request);
// 返回数据
$result = SystemBaseService::DataReturn([
'data' => $data
]);
// 缓存数据、没有用户登录信息则存储缓存
if(empty($this->user))
{
MyCache($key, $result, 3600);
}
} else {
$result['data']['is_result_data_cache'] = 1;
}
// 访问统计
if(!empty($result['data']) && !empty($result['data']['data']))
{
DiyService::DiyAccessCountInc(['diy_id'=>$result['data']['data']['id']]);
}
return ApiService::ApiDataReturn($result);
}
return ApiService::ApiDataReturn(DataReturn(MyLang('no_data'), -1));
}
}
?>

View File

@ -110,6 +110,9 @@ class Goods extends Common
// 导航更多列表
$nav_more_list = AppService::GoodsNavMoreList(['page'=>'goods']);
// 商品底部导航左侧小导航
$buy_left_nav = GoodsService::GoodsBuyLeftNavList($goods);
// 商品购买按钮列表
$buy_button = GoodsService::GoodsBuyButtonList($goods);
@ -118,12 +121,13 @@ class Goods extends Common
// 数据返回
$result = [
'goods' => $goods,
'cart_total' => GoodsCartService::UserGoodsCartTotal(['user'=>$this->user]),
'buy_button' => $buy_button,
'middle_tabs_nav' => $middle_tabs_nav,
'nav_more_list' => $nav_more_list,
'guess_you_like' => $guess_you_like,
'goods' => $goods,
'cart_total' => GoodsCartService::UserGoodsCartTotal(['user'=>$this->user]),
'buy_left_nav' => $buy_left_nav,
'buy_button' => $buy_button,
'middle_tabs_nav' => $middle_tabs_nav,
'nav_more_list' => $nav_more_list,
'guess_you_like' => $guess_you_like,
];
$ret = SystemBaseService::DataReturn($result);
}

View File

@ -22,6 +22,7 @@ use app\service\MessageService;
use app\service\AppService;
use app\service\PluginsService;
use app\service\GoodsCartService;
use app\service\DiyService;
/**
* 首页
@ -58,38 +59,56 @@ class Index extends Common
$result = MyCache($key);
if(empty($result) || (isset($this->data_request['is_cache']) && $this->data_request['is_cache'] == 0))
{
// 数据模式
if(MyC('home_index_floor_data_type', 0, true) == 2)
{
$data_list = LayoutService::LayoutConfigData('home');
} else {
$data_list = GoodsService::HomeFloorList();
}
// 购物车汇总
$cart_total = GoodsCartService::UserGoodsCartTotal(['user'=>$this->user]);
// 未读消息总数
$params = ['user'=>$this->user, 'is_more'=>1, 'is_read'=>0];
$message_total = MessageService::UserMessageTotal($params);
// 数据模式0自动模式, 1手动模式, 2拖拽模式, 3DIY模式
// 手机端是否DIY模式
if(MyC('common_app_is_index_data_diy_mode', 0, true) == 1)
{
// diy下模式设置为3
$data_mode = 3;
// 返回数据
$result = SystemBaseService::DataReturn([
'navigation' => AppHomeNavService::AppHomeNav(),
'banner_list' => SlideService::SlideList(),
'data_list' => $data_list,
'article_list' => ArticleService::RecommendedArticleList(),
'right_icon_list' => AppService::HomeRightIconList(['message_total'=>$message_total]),
'cart_total' => $cart_total,
'message_total' => $message_total,
'plugins_sort_list' => PluginsService::PluginsSortList(),
]);
// 获取diy数据
$data_list = DiyService::DiyData(['id'=>MyC('common_app_index_data_diy_mode_value')]);
// 缓存数据购物车数量设置0
$cache_result = $result;
$cache_result['data']['cart_total'] = ['total_price'=>0, 'buy_number'=>0];
$cache_result['data']['message_total'] = 0;
MyCache($key, $cache_result, 3600);
// 返回数据
$result = DataReturn('success', 0, [
'data_mode' => $data_mode,
'data_list' => $data_list,
'cart_total' => $cart_total,
]);
} else {
$data_mode = MyC('home_index_floor_data_type', 0, true);
if($data_mode == 2)
{
$data_list = LayoutService::LayoutConfigData('home');
} else {
$data_list = GoodsService::HomeFloorList();
}
// 未读消息总数
$message_total = MessageService::UserMessageTotal(['user'=>$this->user, 'is_more'=>1, 'is_read'=>0]);
// 返回数据
$result = SystemBaseService::DataReturn([
'data_mode' => $data_mode,
'navigation' => AppHomeNavService::AppHomeNav(),
'banner_list' => SlideService::SlideList(),
'data_list' => $data_list,
'article_list' => ArticleService::RecommendedArticleList(),
'right_icon_list' => AppService::HomeRightIconList(['message_total'=>$message_total]),
'cart_total' => $cart_total,
'message_total' => $message_total,
'plugins_sort_list' => PluginsService::PluginsSortList(),
]);
}
// 缓存数据、没有用户登录信息则存储缓存
if(empty($this->user))
{
MyCache($key, $result, 3600);
}
} else {
$result['data']['is_result_data_cache'] = 1;
}

View File

@ -66,19 +66,21 @@ class Search extends Common
// 返回数据
$result = [
// 指定数据
'search_map_info' => SearchService::SearchMapInfo($this->data_request),
'search_map_info' => SearchService::SearchMapInfo($this->data_request),
// 品牌列表
'brand_list' => SearchService::CategoryBrandList($map, $this->data_request),
'brand_list' => SearchService::CategoryBrandList($map, $this->data_request),
// 商品分类
'category_list' => SearchService::GoodsCategoryList($this->data_request),
'category_list' => SearchService::GoodsCategoryList($this->data_request),
// 筛选价格区间
'screening_price_list' => SearchService::ScreeningPriceList($this->data_request),
'screening_price_list' => SearchService::ScreeningPriceList($this->data_request),
// 商品产地
'goods_place_origin_list' => SearchService::SearchGoodsPlaceOriginList($map, $this->data_request),
// 商品参数
'goods_params_list' => SearchService::SearchGoodsParamsValueList($map, $this->data_request),
'goods_params_list' => SearchService::SearchGoodsParamsValueList($map, $this->data_request),
// 商品规格
'goods_spec_list' => SearchService::SearchGoodsSpecValueList($map, $this->data_request),
'goods_spec_list' => SearchService::SearchGoodsSpecValueList($map, $this->data_request),
// 购物车汇总
'cart_total' => GoodsCartService::UserGoodsCartTotal(['user'=>$this->user]),
'cart_total' => GoodsCartService::UserGoodsCartTotal(['user'=>$this->user]),
];
return ApiService::ApiDataReturn(SystemBaseService::DataReturn($result));
}
@ -120,5 +122,18 @@ class Search extends Common
// 返回数据
return ApiService::ApiDataReturn(SystemBaseService::DataReturn($ret['data'], $ret['msg'], $ret['code']));
}
/**
* 搜索开始
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-07-12
* @desc description
*/
public function Start()
{
return ApiService::ApiDataReturn(SearchService::SearchStartData($this->data_request));
}
}
?>

View File

@ -19,6 +19,24 @@ use app\service\AdminService;
use app\service\AdminPowerService;
use app\service\MultilingualService;
use app\service\UserService;
use app\service\SystemService;
use app\service\ConfigService;
/**
* 附件字节大小转换为单位
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-07-19
* @desc description
* @param [int] $size [大小字节]
*/
function AnnexSizeToUnit($size)
{
$units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
$power = $size > 0 ? floor(log($size, 1024)) : 0;
return PriceBeautify(PriceNumberFormat($size / pow(1024, $power), 2)).$units[$power];
}
/**
* 金额转换成大写人民币
@ -176,7 +194,7 @@ function IsUserLogin($login_url = null)
if(IS_AJAX || APPLICATION == 'app')
{
header('Content-Type: application/json; charset=utf-8');
exit(json_encode(DataReturn(MyLang('login_failure_tips'), -400)));
exit(json_encode(DataReturn(MyLang('login_failure_tips'), -400, MyUrl('index/user/logininfo'))));
} else {
// 如果存在父级窗口刷新,则跳转
die('<script type="text/javascript">if(self.frameElement && self.frameElement.tagName == "IFRAME"){parent.location.reload();}else{window.location.href="'.$login_url.'";}</script>');
@ -195,52 +213,60 @@ function IsUserLogin($login_url = null)
*/
function DefaultTheme($theme = null)
{
$params = [];
$key = 'default_theme';
if(empty($theme))
static $default_theme = null;
if($default_theme === null)
{
// 请求参数
$params = MyInput();
$cookie_domain = MyFileConfig('common_cookie_domain', '', __MY_MAIN_DOMAIN__, true);
if(!empty($cookie_domain) && substr($cookie_domain, 0, 1) != '.')
{
$cookie_domain = '.'.$cookie_domain;
}
$params = [];
$key = 'default_theme';
if(empty($theme))
{
// 请求参数
$params = MyInput();
// 主题处理
if(empty($params[$key]))
// 主题处理
if(empty($params[$key]))
{
if(session_status() != 2)
{
ini_set('session.cookie_domain', $cookie_domain);
session_start();
}
if(empty($_SESSION[$key]))
{
$default_theme = MyFileConfig('common_default_theme', '', 'default', true);
} else {
$default_theme = $_SESSION[$key];
}
} else {
$default_theme = $params[$key];
}
} else {
$default_theme = $theme;
}
// 存在指定主题则记录session
if(!empty($params[$key]) || !empty($theme))
{
if(session_status() != 2)
{
ini_set('session.cookie_domain', MyFileConfig('common_cookie_domain', '', '', true));
ini_set('session.cookie_domain', $cookie_domain);
session_start();
}
if(empty($_SESSION[$key]))
{
$default_theme = MyFileConfig('common_default_theme', '', 'default', true);
} else {
$default_theme = $_SESSION[$key];
}
} else {
$default_theme = $params[$key];
$_SESSION[$key] = empty($theme) ? $params[$key] : $theme;
}
} else {
$default_theme = $theme;
}
// 存在指定主题则记录session
if(!empty($params[$key]) || !empty($theme))
{
if(session_status() != 2)
// 主题是否存在、则为默认主题default
$path = APP_PATH.'index'.DS.'view'.DS.$default_theme;
if(!file_exists($path) || !is_dir($path))
{
ini_set('session.cookie_domain', MyFileConfig('common_cookie_domain', '', '', true));
session_start();
$default_theme = 'default';
}
$_SESSION[$key] = empty($theme) ? $params[$key] : $theme;
}
// 主题是否存在、则为默认主题default
$path = APP_PATH.'index'.DS.'view'.DS.$default_theme;
if(!file_exists($path) || !is_dir($path))
{
$default_theme = 'default';
}
return strtolower($default_theme);
}
@ -322,6 +348,20 @@ function StaticAttachmentUrl($value, $type = 'images')
}
}
// 手机端
if(empty($result) && APPLICATION == 'app')
{
$theme = MyInput('theme');
if(!empty($theme))
{
$file = DS.'static'.DS.'app'.DS.$theme.DS.'common'.DS.$value;
if(file_exists(ROOT.'public'.$file))
{
$result = $file;
}
}
}
// 不存在则走公共
if(empty($result))
{
@ -332,7 +372,24 @@ function StaticAttachmentUrl($value, $type = 'images')
}
}
return empty($result) ? '' : SystemBaseService::AttachmentHost().$result;
if(empty($result))
{
return '';
}
$url = SystemBaseService::AttachmentHost().$result;
// 模板引擎数据渲染分配钩子
$hook_name = 'plugins_static_attachment_url_value';
MyEventTrigger($hook_name,
[
'hook_name' => $hook_name,
'is_backend' => true,
'url' => &$url,
'value' => $value,
'type' => $type,
]);
return $url;
}
/**
@ -508,12 +565,6 @@ function MyConst($key = '', $default = null)
*/
function MySession($name = '', $value = '')
{
// 接口不记录session
if(APPLICATION == 'app' && $value !== '')
{
return true;
}
// 调用框架session统一方法
$res = session($name, $value);
@ -544,108 +595,117 @@ function MyLang($key, $vars = [], $lang = '', $plugins = '')
$value = '';
if(!empty($key))
{
// 当前语言
$current_lang = empty($lang) ? MultilingualService::GetUserMultilingualValue() : $lang;
// key使用 . 分隔
$key_arr = explode('.', $key);
// 语言数据容器
static $lang_data = [];
// 系统语言
$request_module = RequestModule();
$arr_file = [
APP_PATH.$request_module.DS.'lang'.DS.$current_lang.'.php',
APP_PATH.'lang'.DS.$current_lang.'.php',
];
// 是否插件语言、未指定则处理
$plugins_name = empty($plugins) ? PluginsNameBacktrace() : $plugins;
if(!empty($plugins_name))
static $lang_key_data = [];
if(!array_key_exists($key, $lang_key_data))
{
$plugins_dir = APP_PATH.'plugins'.DS.$plugins_name.DS.'lang'.DS;
array_unshift($arr_file, $plugins_dir.$current_lang.'.php');
array_unshift($arr_file, $plugins_dir.'common'.DS.$current_lang.'.php');
array_unshift($arr_file, $plugins_dir.$request_module.DS.$current_lang.'.php');
}
// key使用 . 分隔
$key_arr = explode('.', $key);
// 循环获取语言时间
foreach($arr_file as $file)
{
$md5_key = md5($file);
if(!array_key_exists($md5_key, $lang_data) && file_exists($file))
// 当前语言
$current_lang = empty($lang) ? MultilingualService::GetUserMultilingualValue() : $lang;
// 语言数据容器
static $lang_file_data = [];
// 系统语言
$request_module = RequestModule();
$arr_file = [
APP_PATH.$request_module.DS.'lang'.DS.$current_lang.'.php',
APP_PATH.'lang'.DS.$current_lang.'.php',
];
// 是否插件语言、未指定则处理
$plugins_name = empty($plugins) ? PluginsNameBacktrace() : $plugins;
if(!empty($plugins_name))
{
$lang_data[$md5_key] = require $file;
$plugins_dir = APP_PATH.'plugins'.DS.$plugins_name.DS.'lang'.DS;
array_unshift($arr_file, $plugins_dir.$current_lang.'.php');
array_unshift($arr_file, $plugins_dir.'common'.DS.$current_lang.'.php');
array_unshift($arr_file, $plugins_dir.$request_module.DS.$current_lang.'.php');
}
if(!empty($lang_data[$md5_key]) && is_array($lang_data[$md5_key]))
// 循环获取语言时间
foreach($arr_file as $file)
{
$temp_lang_data = $lang_data[$md5_key];
// 仅一级则直接读取
if(count($key_arr) == 1)
$md5_key = md5($file);
if(!array_key_exists($md5_key, $lang_file_data) && file_exists($file))
{
if(array_key_exists($key, $temp_lang_data))
$lang_file_data[$md5_key] = require $file;
}
if(!empty($lang_file_data[$md5_key]) && is_array($lang_file_data[$md5_key]))
{
$temp_lang_file_data = $lang_file_data[$md5_key];
// 仅一级则直接读取
if(count($key_arr) == 1)
{
$value = $temp_lang_data[$key];
}
} else {
// 默认先读取第一级
if(array_key_exists($key_arr[0], $temp_lang_data))
{
$value = $temp_lang_data[$key_arr[0]];
if(!empty($value) && is_array($value))
if(array_key_exists($key, $temp_lang_file_data))
{
// 移除第一级
array_shift($key_arr);
// 循环后面级别的数据
foreach($key_arr as $k=>$v)
$value = $temp_lang_file_data[$key];
}
} else {
// 默认先读取第一级
if(array_key_exists($key_arr[0], $temp_lang_file_data))
{
$value = $temp_lang_file_data[$key_arr[0]];
if(!empty($value) && is_array($value))
{
if(array_key_exists($v, $value))
// 移除第一级
array_shift($key_arr);
// 循环后面级别的数据
foreach($key_arr as $k=>$v)
{
$value = $value[$v];
// 匹配到最后一级字段则结束外循环
if($k == count($key_arr)-1)
if(array_key_exists($v, $value))
{
break 2;
$value = $value[$v];
// 匹配到最后一级字段则结束外循环
if($k == count($key_arr)-1)
{
break 2;
}
} else {
// 未匹配到则赋空值
$value = '';
break;
}
} else {
// 未匹配到则赋空值
$value = '';
break;
}
}
}
}
}
}
}
// 未找到对应语言
if($value == '')
{
// 未指定语言则读取默认语言重新再去读取
if(empty($lang))
// 未找到对应语言
if($value == '')
{
// 非默认语言则读取默认语言
$default_lang = MyConfig('lang.default_lang');
if($default_lang != $current_lang)
// 未指定语言则读取默认语言重新再去读取
if(empty($lang))
{
$value = MyLang($key, $vars, $default_lang, $plugins_name);
}
// 非默认语言则读取默认语言
$default_lang = MyConfig('lang.default_lang');
if($default_lang != $current_lang)
{
$value = MyLang($key, $vars, $default_lang, $plugins_name);
}
// 未找到对应语言、则取zh语言
if($value == '')
{
$value = MyLang($key, $vars, 'zh', $plugins_name);
// 没有语言则赋值key
// 未找到对应语言、则取zh语言
if($value == '')
{
$value = $key;
$value = MyLang($key, $vars, 'zh', $plugins_name);
// 没有语言则赋值key
if($value == '')
{
$value = $key;
}
}
} else {
$value = $key;
}
} else {
$value = $key;
}
// 放入静态数据
$lang_key_data[$key] = $value;
} else {
$value = $lang_key_data[$key];
}
// 变量解析
@ -722,12 +782,6 @@ function PluginsNameBacktrace()
*/
function MyCookie($name = '', $value = '', $is_encryption = true)
{
// 接口不记录cookie
if(APPLICATION == 'app' && $value !== '')
{
return true;
}
// 非空则转换数据
if($value !== null && $value !== '' && $is_encryption)
{
@ -885,6 +939,11 @@ function MyViewAssign($data, $value = '')
*/
function MyView($view = '', $data = [])
{
// 当前项目组
$group = RequestModule();
// 文件后缀
$suffix = '.'.config('view.view_suffix');
// 模板文件不存在则使用系统默认处理
// 当前默认主题标识
$theme = DefaultTheme();
@ -893,14 +952,10 @@ function MyView($view = '', $data = [])
// 模板未指定、并且不是../../../plugins则表示是系统文件
if(empty($view) || substr($view, 0, 16) != '../../../plugins')
{
// 当前项目组
$group = RequestModule();
// 当前控制器名称
$control = RequestController();
// 当前方法名称
$action = RequestAction();
// 文件后缀
$suffix = '.'.config('view.view_suffix');
// 空则赋值模板路径
if(empty($view))
{
@ -922,6 +977,16 @@ function MyView($view = '', $data = [])
}
}
// 主题是否存在插件文件
if(substr($view, 0, 16) == '../../../plugins')
{
$plugins_view_file = APP_PATH.$group.DS.'view'.DS.$theme.DS.'plugins'.DS.str_replace(DS.'view'.DS, DS, substr($view, 17)).$suffix;
if(file_exists($plugins_view_file))
{
$view = $plugins_view_file;
}
}
// 模板引擎数据渲染前钩子
$hook_name = 'plugins_view_fetch_begin';
MyEventTrigger($hook_name,
@ -1013,8 +1078,13 @@ function RequestAction()
*/
function PluginsRequestName()
{
$plugins = MyInput('pluginsname');
return empty($plugins) ? '' : strtolower($plugins);
static $request_plugins_name = null;
if($request_plugins_name === null)
{
$plugins = MyInput('pluginsname');
$request_plugins_name = empty($plugins) ? '' : strtolower($plugins);
}
return $request_plugins_name;
}
/**
@ -1027,7 +1097,12 @@ function PluginsRequestName()
*/
function PluginsRequestController()
{
return strtolower(MyInput('pluginscontrol', 'index'));
static $request_plugins_controller = null;
if($request_plugins_controller === null)
{
$request_plugins_controller = strtolower(MyInput('pluginscontrol', 'index'));
}
return $request_plugins_controller;
}
/**
@ -1040,7 +1115,12 @@ function PluginsRequestController()
*/
function PluginsRequestAction()
{
return strtolower(MyInput('pluginsaction', 'index'));
static $request_plugins_action = null;
if($request_plugins_action === null)
{
$request_plugins_action = strtolower(MyInput('pluginsaction', 'index'));
}
return $request_plugins_action;
}
/**
@ -1228,7 +1308,6 @@ function MyFileConfig($key, $value = '', $default = null, $mandatory = false)
// 目录不存在则创建
$config_dir = ROOT.'runtime'.DS.'data'.DS.'config_data'.DS;
\base\FileUtil::CreateDir($config_dir);
// 数据文件
$file = $config_dir.md5($key).'.txt';
@ -1265,6 +1344,9 @@ function MyFileConfig($key, $value = '', $default = null, $mandatory = false)
return $value;
// 写内容
} else {
// 目录创建
\base\FileUtil::CreateDir($config_dir);
// 目录是否有可写权限
if(!is_writable($config_dir))
{
@ -1300,28 +1382,33 @@ function MyFileConfig($key, $value = '', $default = null, $mandatory = false)
*/
function MyInput($key = null, $default = '')
{
$params = input();
if(empty($params))
$params = null;
// 未初始化 或 只取到了s参数则重新读取参数
if($params === null || (is_array($params) && count($params) == 1 && isset($params['s'])))
{
$params = file_get_contents("php://input");
}
// 非数组则检查是否为json和xml数据
if(!is_array($params))
{
if(IsJson($params))
$params = input();
if(empty($params))
{
$params = json_decode($params, true);
} else {
if(XmlParser($params))
{
$params = XmlArray($params);
}
$params = file_get_contents("php://input");
}
} else {
if(count($params) == 1 && !empty($params['s']))
// 非数组则检查是否为json和xml数据
if(!is_array($params))
{
$params = PathToParams(null, null, $params['s']);
if(IsJson($params))
{
$params = json_decode($params, true);
} else {
if(XmlParser($params))
{
$params = XmlArray($params);
}
}
} else {
if(count($params) == 1 && !empty($params['s']))
{
$params = PathToParams(null, null, $params['s']);
}
}
}
@ -1835,6 +1922,110 @@ function FormModulePath($params = [])
* @date 2022-10-08
* @desc description
* @param [array] $params [输入参数]
*/
function FormModuleData($params = [])
{
// 路径结构
$struct = FormModuleStruct($params);
// 调用模块获取数据
$data = null;
$ret = (new app\module\FormTableHandleModule())->Run($struct['module'], $struct['run'], $struct['params']);
if($ret['code'] == 0 && !empty($ret['data']) && is_array($ret['data']))
{
// 返回数据格式
if(empty($struct['params']['data_type']))
{
// 方法为【index 或 控制器+方法是独立表格】则默认返回分页结构体,则详情单条数据
$data_type = ($struct['action'] == 'index' || substr($struct['module'], -strlen($struct['alone_ca'])) == $struct['alone_ca']) ? 'page_struct' : 'data_detail';
} else {
$data_type = $struct['params']['data_type'];
}
// 全部数据
if($data_type == 'all')
{
$data = $ret['data'];
} else {
switch($data_type)
{
// 分页结构体
case 'page_struct' :
$temp = $ret['data'];
$data = [
'page' => empty($temp['page']) ? 1 : $temp['page'],
'page_start' => empty($temp['page_start']) ? 0 : $temp['page_start'],
'page_size' => empty($temp['page_size']) ? 0 : $temp['page_size'],
'page_total' => empty($temp['page_total']) ? 0 : $temp['page_total'],
'data_total' => empty($temp['data_total']) ? 0 : $temp['data_total'],
'data_list' => empty($temp['data_list']) ? [] : $temp['data_list'],
];
break;
// 默认
default :
if(array_key_exists($data_type, $ret['data']))
{
$data = $ret['data'][$data_type];
}
}
}
}
return $data;
}
/**
* 获取动态表格字段数据
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2024-08-29
* @desc description
* @param [array] $form_data [指定表格配置]
* @param [array] $params [输入参数]
*/
function FormModuleFieldData($form_data = [], $params = [])
{
$result = [];
if(empty($form_data))
{
// 路径结构
$struct = FormModuleStruct($params);
// 数据表格对象
$obj = new app\module\FormTableHandleModule();
// 参数校验
$ret = $obj->ParamsCheckHandle($struct['module'], $struct['action'], $struct['params']);
if($ret['code'] == 0)
{
$form_data = $obj->form_data;
}
}
if(!empty($form_data) && !empty($form_data['form']) && is_array($form_data['form']))
{
$result = array_values(array_filter(array_map(function($v)
{
if(isset($v['view_type']) && in_array($v['view_type'], ['field', 'images']) && !empty($v['view_key']))
{
$temp = ['name'=>$v['label'], 'field'=>$v['view_key'], 'type'=>$v['view_type']];
if(isset($v['is_copy']) && $v['is_copy'] == 1)
{
$temp['is_copy'] = 1;
}
return $temp;
}
}, $form_data['form'])));
}
return $result;
}
/**
* 获取动态表格结构
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2022-10-08
* @desc description
* @param [array] $params [输入参数]
* # 公共
* run 调用模块方法(默认 Run
* group 项目组(默认 当前模块组)
@ -1862,7 +2053,7 @@ function FormModulePath($params = [])
* 字段_min 最小条件
* 字段_max 最大条件
*/
function FormModuleData($params = [])
function FormModuleStruct($params = [])
{
// 当前主控制器
$request_controller = RequestController();
@ -1908,13 +2099,13 @@ function FormModuleData($params = [])
}
// 独立控制器+方法独立表格
$alone_control_action = ucfirst($control.$action);
$alone_ca = ucfirst($control.$action);
// 是否插件、设定模块及参数
if(empty($plugins))
{
// 是否存在控制住+方法的form文件
$module = '\app\\'.$group.'\form\\'.$alone_control_action;
$module = '\app\\'.$group.'\form\\'.$alone_ca;
if(!class_exists($module))
{
$module = '\app\\'.$group.'\form\\'.ucfirst($control);
@ -1925,7 +2116,7 @@ function FormModuleData($params = [])
$params['controller_name'] = $control;
$params['action_name'] = $action;
} else {
$module = '\app\plugins\\'.$plugins.'\form\\'.$group.'\\'.$alone_control_action;
$module = '\app\plugins\\'.$plugins.'\form\\'.$group.'\\'.$alone_ca;
if(!class_exists($module))
{
// 是否定义模块组、是否存在控制器+方法的form文件
@ -1933,7 +2124,7 @@ function FormModuleData($params = [])
// 分组不存在则调用不分组的表单
if(!class_exists($module))
{
$module = '\app\plugins\\'.$plugins.'\form\\'.$alone_control_action;
$module = '\app\plugins\\'.$plugins.'\form\\'.$alone_ca;
if(!class_exists($module))
{
$module = '\app\plugins\\'.$plugins.'\form\\'.ucfirst($control);
@ -1950,50 +2141,14 @@ function FormModuleData($params = [])
// 模块运行方法
$run = empty($params['run']) ? 'Run' : $params['run'];
// 调用模块获取数据
$data = null;
$ret = (new app\module\FormTableHandleModule())->Run($module, $run, $params);
if($ret['code'] == 0 && !empty($ret['data']) && is_array($ret['data']))
{
// 返回数据格式
if(empty($params['data_type']))
{
// 方法为【index 或 控制器+方法是独立表格】则默认返回分页结构体,则详情单条数据
$data_type = ($action == 'index' || substr($module, -strlen($alone_control_action)) == $alone_control_action) ? 'page_struct' : 'data_detail';
} else {
$data_type = $params['data_type'];
}
// 全部数据
if($data_type == 'all')
{
$data = $ret['data'];
} else {
switch($data_type)
{
// 分页结构体
case 'page_struct' :
$temp = $ret['data'];
$data = [
'page' => empty($temp['page']) ? 1 : $temp['page'],
'page_start' => empty($temp['page_start']) ? 0 : $temp['page_start'],
'page_size' => empty($temp['page_size']) ? 0 : $temp['page_size'],
'page_total' => empty($temp['page_total']) ? 0 : $temp['page_total'],
'data_total' => empty($temp['data_total']) ? 0 : $temp['data_total'],
'data_list' => empty($temp['data_list']) ? [] : $temp['data_list'],
];
break;
// 默认
default :
if(array_key_exists($data_type, $ret['data']))
{
$data = $ret['data'][$data_type];
}
}
}
}
return $data;
// 返回结构数据
return [
'module' => $module,
'action' => $action,
'alone_ca' => $alone_ca,
'run' => $run,
'params' => $params,
];
}
/**
@ -2027,11 +2182,6 @@ function ModuleInclude($template, $data = [], $params = [])
return $obj->Run($template, $data, $params);
}
function ModuleIncludesss($ss)
{
return $ss;
}
/**
* 钩子返回数据处理,是否存在错误
* @author Devil
@ -2637,69 +2787,77 @@ function MyUrl($path, $params = [])
return '';
}
// 当前脚本名称
$script_name = SCRIPT_NAME;
// url模式
$url_model = MyC('home_seo_url_model', 0);
// 模块组状态
$is_api = (substr($path, 0, 4) == 'api/');
$is_admin = (substr($path, 0, 6) == 'admin/');
$is_index = (substr($path, 0, 6) == 'index/');
$is_install = (substr($path, 0, 8) == 'install/');
// 调用框架生成url
$url = url($path, $params, true);
// 非 admin 则使用配置后缀
if(!$is_admin && !$is_install)
// url生成
static $url_create_data = [];
$key = md5($path.(empty($params) ? '' : (is_array($params) ? json_encode($params) : $params)));
if(!array_key_exists($key, $url_create_data))
{
$url = $url->suffix(MyFileConfig('home_seo_url_html_suffix', '', 'html', true));
}
// 当前脚本名称
$script_name = SCRIPT_NAME;
// 转 url字符串
$url = MyConfig('shopxo.domain_url').substr((string) $url, 1);
// url模式
$url_model = MyC('home_seo_url_model', 0);
// 去除组名称
$ds = ($script_name == 'index.php') ? '/' : '';
$join = ($script_name != 'index.php' || $url_model == 0) ? $ds.'?s=' : '/';
$len = $is_api ? 4 : ($is_install ? 8 : 6);
$path = substr($path, $len);
$url = str_replace('/'.$path, $join.$path, $url);
// 模块组状态
$is_api = (substr($path, 0, 4) == 'api/');
$is_admin = (substr($path, 0, 6) == 'admin/');
$is_index = (substr($path, 0, 6) == 'index/');
$is_install = (substr($path, 0, 8) == 'install/');
// 避免非当前目录生成url索引错误
if($script_name != 'index.php' && $is_index)
{
if($url_model == 0)
// 调用框架生成url
$url = url($path, $params, true);
// 非 admin 则使用配置后缀
if(!$is_admin && !$is_install)
{
// 替换索引为 index.php
$url = str_replace($script_name, 'index.php', $url);
} else {
// 去除入口和?s=
$url = str_replace([$script_name.'?s=', '/'.$script_name], '', $url);
$url = $url->suffix(MyFileConfig('home_seo_url_html_suffix', '', 'html', true));
}
}
// 替换索引为 api.php
if($script_name != 'api.php' && $is_api)
{
$url = str_replace($script_name, 'api.php', $url);
}
// 替换索引为 install.php
if($script_name != 'install.php' && $is_install)
{
$url = str_replace($script_name, 'install.php', $url);
}
// 前端则去除 index.php
$url = str_replace('/index.php', '', $url);
// 转 url字符串
$url = MyConfig('shopxo.domain_url').substr((string) $url, 1);
// 是否根目录访问项目
if(defined('IS_ROOT_ACCESS'))
{
$url = str_replace('/public/', '/', $url);
// 去除组名称
$ds = ($script_name == 'index.php') ? '/' : '';
$join = ($script_name != 'index.php' || $url_model == 0) ? $ds.'?s=' : '/';
$len = $is_api ? 4 : ($is_install ? 8 : 6);
$path = substr($path, $len);
$url = str_replace('/'.$path, $join.$path, $url);
// 避免非当前目录生成url索引错误
if($script_name != 'index.php' && $is_index)
{
if($url_model == 0)
{
// 替换索引为 index.php
$url = str_replace($script_name, 'index.php', $url);
} else {
// 去除入口和?s=
$url = str_replace([$script_name.'?s=', '/'.$script_name], '', $url);
}
}
// 替换索引为 api.php
if($script_name != 'api.php' && $is_api)
{
$url = str_replace($script_name, 'api.php', $url);
}
// 替换索引为 install.php
if($script_name != 'install.php' && $is_install)
{
$url = str_replace($script_name, 'install.php', $url);
}
// 前端则去除 index.php
$url = str_replace('/index.php', '', $url);
// 是否根目录访问项目
if(defined('IS_ROOT_ACCESS'))
{
$url = str_replace('/public/', '/', $url);
}
$url_create_data[$key] = $url;
} else {
$url = $url_create_data[$key];
}
return $url;
}
@ -2731,7 +2889,7 @@ function PluginsHomeUrl($plugins_name, $plugins_control = '', $plugins_action =
'pluginsaction' => $plugins_action,
];
$path = 'index/plugins/index';
return MyUrl($path, $plugins+$params);
return MyUrl($path, $plugins+(empty($params) ? [] : $params));
}
/**
@ -2755,7 +2913,7 @@ function PluginsAdminUrl($plugins_name, $plugins_control, $plugins_action, $para
'pluginsaction' => $plugins_action,
];
$path = 'admin/plugins/index';
return MyUrl($path, $plugins+$params);
return MyUrl($path, $plugins+(empty($params) ? [] : $params));
}
/**
@ -2988,16 +3146,24 @@ function UrlParamJoin($param)
function MyC($key, $default = '', $mandatory = false)
{
// 从缓存读取配置
$value = MyCache($key);
// 1. 强制校验值
// 2. 未设置则默认值
if(($mandatory === true && empty($value)) || $value === null)
static $cache_config_data = false;
if($cache_config_data === false)
{
$value = $default;
$cache_config_data = ConfigService::ConfigInit();
}
return $value;
// 1. 强制校验值
if(empty($cache_config_data) || !is_array($cache_config_data) || !isset($cache_config_data[$key]))
{
return $default;
}
// 2. 未设置则默认值
if($mandatory === true && $cache_config_data[$key] === null)
{
return $default;
}
return $cache_config_data[$key];
}
/**
@ -3610,8 +3776,6 @@ function PwdStrength($pwd)
* $lng = '116.655540';
* $lat = '39.910980';
* $squares = returnSquarePoint($lng, $lat);
*
* print_r($squares);
* $info_sql = "select id,locateinfo,lat,lng from `lbs_info` where lat<>0 and lat>{$squares['right-bottom']['lat']} and lat<{$squares['left-top']['lat']} and lng>{$squares['left-top']['lng']} and lng<{$squares['right-bottom']['lng']} ";
* 计算某个经纬度的周围某段距离的正方形的四个点
*

View File

@ -21,7 +21,6 @@ use app\service\NavigationService;
use app\service\BuyService;
use app\service\MessageService;
use app\service\SearchService;
use app\service\ConfigService;
use app\service\UserService;
use app\service\AdminService;
use app\service\MultilingualService;
@ -39,7 +38,7 @@ use app\service\ThemeDataService;
*/
class Common extends BaseController
{
// 顶部导航、底部导航、快捷导航
// 顶部导航、底部导航
protected $nav_header;
protected $nav_footer;
@ -115,11 +114,6 @@ class Common extends BaseController
// 检测是否是新安装
SystemService::SystemInstallCheck();
// 输入参数
$this->data_post = input('post.');
$this->data_get = input('get.');
$this->data_request = input();
// 系统初始化
$this->SystemInit();
@ -178,8 +172,10 @@ class Common extends BaseController
*/
private function SystemInit()
{
// 配置信息初始化
ConfigService::ConfigInit();
// 输入参数
$this->data_post = input('post.');
$this->data_get = input('get.');
$this->data_request = input();
}
/**
@ -205,7 +201,17 @@ class Common extends BaseController
public function ViewInit()
{
// 模板数据
$assign = [];
$assign = [
// 静态文件缓存版本号
'static_cache_version' => MyC('home_static_cache_version'),
// logo
'home_site_logo' => AttachmentPathViewHandle(MyC('home_site_logo')),
'home_site_logo_wap' => AttachmentPathViewHandle(MyC('home_site_logo_wap')),
'home_site_logo_app' => AttachmentPathViewHandle(MyC('home_site_logo_app')),
'home_site_logo_square' => AttachmentPathViewHandle(MyC('home_site_logo_square')),
// 站点名称
'home_site_name' => MyC('home_site_name'),
];
// 系统类型
$this->system_type = SystemService::SystemTypeValue();
@ -351,9 +357,12 @@ class Common extends BaseController
// 当前host地址
$assign['my_host'] = __MY_HOST__;
// 当前完整url地址
// 当前站点url地址
$assign['my_url'] = __MY_URL__;
// 当前完整url地址
$assign['my_view_url'] = __MY_VIEW_URL__;
// 项目public目录URL地址
$assign['my_public_url'] = __MY_PUBLIC_URL__;
@ -389,8 +398,8 @@ class Common extends BaseController
// 默认不加载页面加载层、是否加载图片动画
$assign['is_page_loading'] = 0;
$assign['is_page_loading_images'] = 0;
$assign['page_loading_logo'] = $assign['home_site_logo_square'];
$assign['page_loading_images_url'] = StaticAttachmentUrl('loading.gif');
$assign['page_loading_logo'] = AttachmentPathViewHandle(MyC('home_site_logo_square'));
$assign['page_loading_logo_border'] = StaticAttachmentUrl('loading-border.svg', 'svg');
// 顶部右侧导航
@ -449,6 +458,9 @@ class Common extends BaseController
// 默认不加载代码编辑器
$assign['is_load_ace_builds'] = 0;
// 是否加载webuploader
$assign['is_load_webuploader'] = 0;
// 登录/注册方式
$assign['home_user_login_type'] = MyC('home_user_login_type', [], true);
$assign['home_user_reg_type'] = MyC('home_user_reg_type', [], true);

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